Changeset 3323843
- Timestamp:
- 07/07/2025 06:00:19 PM (9 months ago)
- Location:
- ninja-forms
- Files:
-
- 14 edited
- 1 copied
-
tags/3.10.4 (copied) (copied from ninja-forms/trunk)
-
tags/3.10.4/assets/js/min/front-end.js (modified) (1 diff)
-
tags/3.10.4/assets/js/min/front-end.js.map (modified) (1 diff)
-
tags/3.10.4/includes/Fields/Checkbox.php (modified) (1 diff)
-
tags/3.10.4/includes/Fields/Date.php (modified) (2 diffs)
-
tags/3.10.4/ninja-forms.php (modified) (2 diffs)
-
tags/3.10.4/readme.txt (modified) (2 diffs)
-
tags/3.10.4/vendor/composer/installed.php (modified) (2 diffs)
-
trunk/assets/js/min/front-end.js (modified) (1 diff)
-
trunk/assets/js/min/front-end.js.map (modified) (1 diff)
-
trunk/includes/Fields/Checkbox.php (modified) (1 diff)
-
trunk/includes/Fields/Date.php (modified) (2 diffs)
-
trunk/ninja-forms.php (modified) (2 diffs)
-
trunk/readme.txt (modified) (2 diffs)
-
trunk/vendor/composer/installed.php (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
ninja-forms/tags/3.10.4/assets/js/min/front-end.js
r3320170 r3323843 1 !function(){var e,t,i;!function(n){var r,o,a,l,s={},d={},c={},f={},u=Object.prototype.hasOwnProperty,h=[].slice,m=/\.js$/;function g(e,t){return u.call(e,t)}function p(e,t){var i,n,r,o,a,l,s,d,f,u,h,g=t&&t.split("/"),p=c.map,v=p&&p["*"]||{};if(e){for(a=(e=e.split("/")).length-1,c.nodeIdCompat&&m.test(e[a])&&(e[a]=e[a].replace(m,"")),"."===e[0].charAt(0)&&g&&(e=g.slice(0,g.length-1).concat(e)),f=0;f<e.length;f++)if("."===(h=e[f]))e.splice(f,1),f-=1;else if(".."===h){if(0===f||1===f&&".."===e[2]||".."===e[f-1])continue;f>0&&(e.splice(f-1,2),f-=2)}e=e.join("/")}if((g||v)&&p){for(f=(i=e.split("/")).length;f>0;f-=1){if(n=i.slice(0,f).join("/"),g)for(u=g.length;u>0;u-=1)if((r=p[g.slice(0,u).join("/")])&&(r=r[n])){o=r,l=f;break}if(o)break;!s&&v&&v[n]&&(s=v[n],d=f)}!o&&s&&(o=s,l=d),o&&(i.splice(0,l,o),e=i.join("/"))}return e}function v(e,t){return function(){var i=h.call(arguments,0);return"string"!=typeof i[0]&&1===i.length&&i.push(null),o.apply(n,i.concat([e,t]))}}function y(e){return function(t){s[e]=t}}function b(e){if(g(d,e)){var t=d[e];delete d[e],f[e]=!0,r.apply(n,t)}if(!g(s,e)&&!g(f,e))throw new Error("No "+e);return s[e]}function R(e){var t,i=e?e.indexOf("!"):-1;return i>-1&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function _(e){return e?R(e):[]}function w(e){return function(){return c&&c.config&&c.config[e]||{}}}a=function(e,t){var i,n,r=R(e),o=r[0],a=t[1];return e=r[1],o&&(i=b(o=p(o,a))),o?e=i&&i.normalize?i.normalize(e,(n=a,function(e){return p(e,n)})):p(e,a):(o=(r=R(e=p(e,a)))[0],e=r[1],o&&(i=b(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:i}},l={require:function(e){return v(e)},exports:function(e){var t=s[e];return void 0!==t?t:s[e]={}},module:function(e){return{id:e,uri:"",exports:s[e],config:w(e)}}},r=function(e,t,i,r){var o,c,u,h,m,p,R,w=[],F=typeof i;if(p=_(r=r||e),"undefined"===F||"function"===F){for(t=!t.length&&i.length?["require","exports","module"]:t,m=0;m<t.length;m+=1)if("require"===(c=(h=a(t[m],p)).f))w[m]=l.require(e);else if("exports"===c)w[m]=l.exports(e),R=!0;else if("module"===c)o=w[m]=l.module(e);else if(g(s,c)||g(d,c)||g(f,c))w[m]=b(c);else{if(!h.p)throw new Error(e+" missing "+c);h.p.load(h.n,v(r,!0),y(c),{}),w[m]=s[c]}u=i?i.apply(s[e],w):void 0,e&&(o&&o.exports!==n&&o.exports!==s[e]?s[e]=o.exports:u===n&&R||(s[e]=u))}else e&&(s[e]=i)},e=t=o=function(e,t,i,s,d){if("string"==typeof e)return l[e]?l[e](t):b(a(e,_(t)).f);if(!e.splice){if((c=e).deps&&o(c.deps,c.callback),!t)return;t.splice?(e=t,t=i,i=null):e=n}return t=t||function(){},"function"==typeof i&&(i=s,s=d),s?r(n,e,t,i):setTimeout(function(){r(n,e,t,i)},4),o},o.config=function(e){return o(e)},e._defined=s,(i=function(e,t,i){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(i=t,t=[]),g(s,e)||g(d,e)||(d[e]=[e,t,i])}).amd={jQuery:!0}}(),i("../../../node_modules/almond/almond",function(){}),i("models/fieldErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/fieldErrorCollection",["models/fieldErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/fieldModel",["models/fieldErrorCollection"],function(e){return Backbone.Model.extend({defaults:{placeholder:"",value:"",label_pos:"",classes:"ninja-forms-field",reRender:!1,mirror_field:!1,confirm_field:!1,clean:!0,disabled:"",visible:!0,invalid:!1},initialize:function(){var t=this.get("type");this.set("formID",this.collection.options.formModel.get("id")),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"reset",this.resetModel),this.bind("change",this.changeModel,this),this.bind("change:value",this.changeValue,this),this.set("errors",new e),"listimage"===t&&(this.get=this.listimageGet,this.set=this.listimageSet),nfRadio.channel("fields").trigger("init:model",this),nfRadio.channel(this.get("type")).trigger("init:model",this),nfRadio.channel("fields-"+this.get("type")).trigger("init:model",this),void 0!==this.get("parentType")&&nfRadio.channel(this.get("parentType")).trigger("init:model",this),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"loaded",this.formLoaded),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"before:submit",this.beforeSubmit)},listimageGet:function(e){return"options"===e&&(e="image_options"),Backbone.Model.prototype.get.call(this,e)},listimageSet:function(e,t){return"options"===e&&(e="image_options"),Backbone.Model.prototype.set.call(this,e,t)},changeModel:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:model",this),nfRadio.channel(this.get("type")).trigger("change:model",this),nfRadio.channel("fields").trigger("change:model",this)},changeValue:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:modelValue",this),nfRadio.channel(this.get("type")).trigger("change:modelValue",this),nfRadio.channel("fields").trigger("change:modelValue",this)},addWrapperClass:function(e){this.set("addWrapperClass",e)},removeWrapperClass:function(e){this.set("removeWrapperClass",e)},setInvalid:function(e){this.set("invalid",e)},formLoaded:function(){nfRadio.channel("fields").trigger("formLoaded",this),nfRadio.channel("fields-"+this.get("type")).trigger("formLoaded",this)},beforeSubmit:function(e){nfRadio.channel(this.get("type")).trigger("before:submit",this),nfRadio.channel("fields").trigger("before:submit",this)},getValue:function(){return this.get("value")}})}),i("models/fieldCollection",["models/fieldModel"],function(e){var t=Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,this.on("reset",function(e){nfRadio.channel("fields").trigger("reset:collection",e)},this),nfRadio.channel("fields").reply("get:firstFieldByOrder",this.getFirstFieldByOrder)},validateFields:function(){_.each(this.models,function(e){if("repeater"===e.get("type")){const t=nfRadio.channel("field-repeater").request("get:repeaterFieldsModelsArrayByForm",e.get("formID"));_.each(t,function(e){e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)})}else e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)},this);var e=nfRadio.channel("form-"+this.models[0].get("formID")).request("get:form");_.size(e.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(e.get("fieldErrors")))},showFields:function(){this.invoke("set",{visible:!0}),this.invoke(function(){this.trigger("change:value",this)})},hideFields:function(){this.invoke("set",{visible:!1}),this.invoke(function(){this.trigger("change:value",this)})},getFirstFieldByOrder:function(e){let t=0;return _.each(e,function(e){const i=nfRadio.channel("fields").request("get:field",e).get("order");t=0===t||i<t?e:t}),t}});return t}),i("models/formErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/formErrorCollection",["models/formErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/formModel",["models/fieldCollection","models/formErrorCollection"],function(e,t){return Backbone.Model.extend({defaults:{beforeForm:"",afterForm:"",beforeFields:"",afterFields:"",wrapper_class:"",element_class:"",hp:"",fieldErrors:{},extra:{}},initialize:function(){_.each(this.get("settings"),function(e,t){this.set(t,e)},this),this.set("loadedFields",this.get("fields")),this.set("fields",new e(this.get("fields"),{formModel:this})),this.set("errors",new t),nfRadio.channel("form").trigger("before:filterData",this);var i=this.get("formContentData");i||(i=this.get("fieldContentsData"));var n=nfRadio.channel("formContent").request("get:loadFilters"),r=_.without(n,void 0);i=_.first(r)(i,this,this),this.set("formContentData",i),nfRadio.channel("forms").trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).reply("get:fieldByKey",this.getFieldByKey,this),nfRadio.channel("form-"+this.get("id")).reply("add:error",this.addError,this),nfRadio.channel("form-"+this.get("id")).reply("remove:error",this.removeError,this),nfRadio.channel("form-"+this.get("id")).reply("get:extra",this.getExtra,this),nfRadio.channel("form-"+this.get("id")).reply("add:extra",this.addExtra,this),nfRadio.channel("form-"+this.get("id")).reply("remove:extra",this.removeExtra,this),nfRadio.channel("form-"+this.get("id")).reply("get:form",this.getForm,this),nfRadio.channel("form").trigger("loaded",this),nfRadio.channel("form").trigger("after:loaded",this),nfRadio.channel("form-"+this.get("id")).trigger("loaded",this)},getFieldByKey:function(e){return this.get("fields").findWhere({key:e})},addError:function(e,t){this.get("errors").add({id:e,msg:t}),nfRadio.channel("form-"+this.get("id")).trigger("add:error",this,e,t)},removeError:function(e){var t=this.get("errors"),i=t.get(e);t.remove(i),nfRadio.channel("form-"+this.get("id")).trigger("remove:error",this,e)},getExtra:function(e){var t=this.get("extra");return void 0===e?t:t[e]},addExtra:function(e,t){this.get("extra")[e]=t,nfRadio.channel("form-"+this.get("id")).trigger("add:extra",this,e,t)},removeExtra:function(e){delete this.get("extra")[e],nfRadio.channel("form-"+this.get("id")).trigger("remove:extra",this,e)},getForm:function(){return this}})}),i("models/formCollection",["models/formModel"],function(e){return Backbone.Collection.extend({model:e})}),i("controllers/formData",["models/formModel","models/formCollection","models/fieldCollection","models/formErrorCollection"],function(e,t,i,n){return Marionette.Object.extend({initialize:function(){this.collection=new t(nfForms),nfRadio.channel("forms").trigger("loaded",this.collection),nfRadio.channel("app").trigger("forms:loaded",this.collection),nfRadio.channel("app").reply("get:form",this.getForm,this),nfRadio.channel("app").reply("get:forms",this.getForms,this),nfRadio.channel("fields").reply("get:field",this.getField,this)},getForm:function(e){return this.collection.get(e)},getForms:function(){return this.collection},getField:function(e){var t=!1;return _.each(this.collection.models,function(i){t||(t=i.get("fields").get(e))}),void 0===t&&-1!==String(e).indexOf(".")&&(t=nfRadio.channel("field-repeater").request("get:repeaterFieldById",e)),t}})}),i("controllers/fieldError",["models/fieldErrorModel"],function(e){return Marionette.Object.extend({initialize:function(){nfRadio.channel("fields").reply("add:error",this.addError),nfRadio.channel("fields").reply("remove:error",this.removeError),nfRadio.channel("fields").reply("get:error",this.getError)},addError:function(e,t,i){var n=nfRadio.channel("fields").request("get:field",e);if(void 0!==n){var r=n.get("errors");r.add({id:t,msg:i}),n.set("errors",r),n.trigger("change:errors",n),n.set("clean",!1),nfRadio.channel("fields").trigger("add:error",n,t,i)}},removeError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e);if(void 0!==i){var n=i.get("errors"),r=n.get(t);void 0!==r&&(n.remove(r),i.set("errors",n),i.trigger("change:errors",i),nfRadio.channel("fields").trigger("remove:error",i,t))}},getError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e).get("errors").get(t);return"undefined"!=i&&i}})}),i("controllers/changeField",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("change:field",this.changeField),this.listenTo(nfRadio.channel("fields"),"blur:field",this.blurField)},changeField:function(e,t){var i=nfRadio.channel(t.get("type")).request("before:updateField",e,t);i=void 0!==(i=void 0!==i?i:nfRadio.channel(t.get("parentType")).request("before:updateField",e,t))?i:jQuery(e).val(),t.set("isUpdated",!1),t.set("clean",!1),nfRadio.channel("field-"+t.get("id")).trigger("change:field",e,t),nfRadio.channel(t.get("type")).trigger("change:field",e,t),nfRadio.channel("fields").trigger("change:field",e,t),nfRadio.channel("nfAdmin").request("update:field",t,i),t.get("repeaterField")&&nfRadio.channel("field-repeater").trigger("set:value")},blurField:function(e,t){t.set("clean",!1)}})}),i("controllers/changeEmail",[],function(){var e=nfRadio.channel("email"),t=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,i="invalid-email";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.emailKeyup),this.listenTo(e,"blur:field",this.onBlurField)},onChangeModelValue:function(e){var t=e.get("value"),i=e.get("id");this.emailChange(t,i)},onBlurField:function(e,t){var i=jQuery(e).val(),n=t.get("id");this.emailChange(i,n)},emailChange:function(e,n){if(0<e.length)if(t.test(e))nfRadio.channel("fields").request("remove:error",n,i);else{var r=nfRadio.channel("fields").request("get:field",n),o=nfRadio.channel("app").request("get:form",r.get("formID"));nfRadio.channel("fields").request("add:error",n,i,o.get("settings").changeEmailErrorMsg)}else nfRadio.channel("fields").request("remove:error",n,i)},emailKeyup:function(e,n,r){if(9==r)return!1;var o=jQuery(e).val(),a=n.get("id");if(0==o.length)nfRadio.channel("fields").request("remove:error",a,i);else if(t.test(o)||n.get("clean"))t.test(o)&&(nfRadio.channel("fields").request("remove:error",a,i),n.addWrapperClass("nf-pass"),n.set("clean",!1));else{var l=nfRadio.channel("fields").request("get:field",a),s=nfRadio.channel("app").request("get:form",l.get("formID"));nfRadio.channel("fields").request("add:error",a,i,s.get("settings").changeEmailErrorMsg),n.removeWrapperClass("nf-pass")}}})}),i("controllers/changeDate",[],function(){var e=nfRadio.channel("date"),t="invalid-date";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.dateKeyup),this.listenTo(e,"blur:field",this.onBlurField),this.listenTo(e,"change:extra",this.changeHoursMinutes,this)},onChangeModelValue:function(e){var t=moment.locale();moment.locale("ninja-forms"),this.dateChange(e),moment.locale(t)},onBlurField:function(e,t){var i=moment.locale();moment.locale("ninja-forms"),this.dateChange(t),moment.locale(i)},dateChange:function(e){var i=e.get("id"),n=e.get("value"),r=e.get("date_format");if("time_only"==e.get("date_mode"))return!1;if(0<n.length)if(this.isDateValid(n,r,i))nfRadio.channel("fields").request("remove:error",i,t);else{var o=nfRadio.channel("fields").request("get:field",i),a=nfRadio.channel("app").request("get:form",o.get("formID"));nfRadio.channel("fields").request("add:error",i,t,a.get("settings").changeDateErrorMsg)}else nfRadio.channel("fields").request("remove:error",i,t)},dateKeyup:function(e,i,n){if(9==n)return!1;var r=jQuery(e).val(),o=i.get("id"),a=i.get("date_format"),l=moment.locale();if(moment.locale("ninja-forms"),0==r.length)nfRadio.channel("fields").request("remove:error",o,t);else if(this.isDateValid(r,a,o)||i.get("clean"))this.isDateValid(r,a,o)&&(nfRadio.channel("fields").request("remove:error",o,t),i.addWrapperClass("nf-pass"),i.set("clean",!1));else{var s=nfRadio.channel("fields").request("get:field",o),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",o,t,d.get("settings").changeDateErrorMsg),i.removeWrapperClass("nf-pass")}moment.locale(l)},changeHoursMinutes:function(e,t){let i=jQuery(e.target).closest(".nf-field-element"),n=jQuery(i).find(".hour").val(),r=jQuery(i).find(".minute").val(),o=jQuery(i).find(".ampm").val(); t.set("selected_hour",n),t.set("selected_minute",r),t.set("selected_ampm",o);const a=t.get("id");if("string"==typeof a&&-1!==a.search(".")){const e=void 0!==o?n+":"+r+" "+o:n+":"+r;"time_only"===t.get("date_mode")&&t.set("value",e),nfRadio.channel("field-repeater").trigger("set:value")}},isDateValid:function(e,t,i){if(null===document.querySelector("[name='nf-field-"+i+"']"))return;const n=document.querySelector("[name='nf-field-"+i+"']")._flatpickr.parseDate(e,t);if(!n)return!1;const r=n.getTime();if(isNaN(r))return!1;const o=new Date(r);return document.querySelector("[name='nf-field-"+i+"']")._flatpickr.formatDate(o,t)===e}})}),i("controllers/fieldCheckbox",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("checkbox"),"init:model",this.registerRenderClasses),nfRadio.channel("checkbox").reply("validate:required",this.validateRequired),nfRadio.channel("checkbox").reply("validate:modelData",this.validateModelData),nfRadio.channel("checkbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("checkbox").reply("get:calcValue",this.getCalcValue,this)},beforeUpdateField:function(e,t){if(jQuery(e).prop("checked")){var i=1;jQuery(e).addClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}else{i=0;jQuery(e).removeClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label")}return i},validateRequired:function(e,t){return e[0].checked},validateModelData:function(e){return 0!=e.get("value")},getCalcValue:function(e){return 1==e.get("value")?calcValue=e.get("checked_calc_value"):calcValue=e.get("unchecked_calc_value"),calcValue},registerRenderClasses:function(e){"checked"==e.get("default_value")?e.set("value",1):e.set("value",0),e.set("customClasses",this.customClasses),e.set("customLabelClasses",this.customLabelClasses),e.set("maybeChecked",this.maybeChecked)},customClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked":e.replace("nf-checked",""),e},customLabelClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked-label":e.replace("nf-checked-label",""),e},maybeChecked:function(){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?" checked":""}})}),i("controllers/fieldCheckboxList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listcheckbox"),"init:model",this.register),this.listenTo(nfRadio.channel("terms"),"init:model",this.register),nfRadio.channel("listcheckbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("terms").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listcheckbox").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("terms").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("options").length){var t=_.filter(e.get("options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;if(_.each(this.options,function(i,n){Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],i.value)||_.indexOf(this.value,i.value))&&(t=!0),i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.fieldID=this.id,i.classes=this.classes,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label;var r=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),i.value)&&-1===_.indexOf(this.value,i.value)||(r=!0):_.isArray(this.value)||i.value!=this.value?1==i.selected&&this.clean&&void 0===this.value&&(r=!0):r=!0,i.selected=r,i.isSelected=r,i.required=this.required,i.maybeFilterHTML=this.maybeFilterHTML;var o=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-option");e+=o(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");return 0!=i.length&&_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t=Number(t)+Number(n.calc)}),t},beforeUpdateField:function(e,t){var i=t.get("value")||[];"string"==typeof i&&(i=[i]);var n=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(n),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var r=i.indexOf(n);if(-1!=r)i.splice(r,1);else if(Array.isArray(i)){var o=void 0!==i[0]?i[0].split(","):[],a=o.indexOf(n);-1!==a&&o.splice(a,1),i=o.join(",")}}return _.clone(i)}})}),i("controllers/fieldImageList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listimage"),"init:model",this.register),nfRadio.channel("listimage").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listimage").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("image_options").length){var t=_.filter(e.get("image_options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;1===this.allow_multi_select?(this.old_classname="list-checkbox",this.image_type="checkbox"):this.image_type="radio","horizontal"===this.list_orientation?this.flex_direction="row":this.flex_direction="column";var i=this,n=parseInt(this.num_columns)||1,r=1,o=1;if(_.each(this.image_options,function(a,l){this.show_option_labels?a.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(a.label):a.label:a.label="",Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],a.value)||_.indexOf(this.value,a.value))&&(t=!0),a.value==this.value&&(t=!0),void 0===a.visible&&(a.visible=!0),"horizontal"===i.list_orientation&&r<=n&&(a.styles="margin:auto;grid-column: "+r+"; grid-row = "+o,r===n?(r=1,o+=1):r+=1),a.image_type=i.image_type,a.fieldID=this.id,a.classes=this.classes,a.index=l;var s=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),a.value)&&-1===_.indexOf(this.value,a.value)||(s=!0):(_.isArray(this.value)||a.value!=this.value)&&(1!=a.selected||!this.clean||void 0!==this.value&&""!==this.value)||(s=!0),a.selected=s,a.isSelected=s,a.required=this.required,a.maybeFilterHTML=this.maybeFilterHTML;var d=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-option");e+=d(a)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var a={fieldID:this.id,classes:this.classes,value:this.value,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},l=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other");e+=l(a)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if(1==parseInt(e.get("allow_multi_select")))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0!==n&&(t=n.calc)}return t},beforeUpdateField:function(e,t){if(1!==t.get("allow_multi_select")){var i=jQuery(e).val(),n=t.get("image_options");_.each(n,function(e,t){e.value===i?(e.isSelected=!0,e.selected=!0):(e.isSelected=!1,e.selected=!1),e.isSelected?(jQuery("#nf-field-"+e.fieldID+"-"+t).addClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).addClass("nf-checked-label")):(e.selected=!1,jQuery("#nf-field-"+e.fieldID+"-"+t).removeClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).removeClass("nf-checked-label"))})}else{"string"==typeof(i=t.get("value")||[])&&(i=[i]);var r=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(r),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var o=i.indexOf(r);if(-1!=o)i.splice(o,1);else if(Array.isArray(i)){var a=i[0].split(","),l=a.indexOf(r);-1!==l&&a.splice(l,1),i=a.join(",")}}}return _.clone(i)}})}),i("controllers/fieldRadio",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listradio"),"change:modelValue",this.changeModelValue),this.listenTo(nfRadio.channel("listradio"),"init:model",this.register),nfRadio.channel("listradio").reply("get:calcValue",this.getCalcValue,this),this.listenTo(nfRadio.channel("listradio"),"change:field",this.updateCheckedClass,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),0!=e.get("options").length){var t=_.find(e.get("options"),function(e){return 1==e.selected});void 0!==t&&e.set("value",t.value)}},changeModelValue:function(e){1==e.get("show_other")&&e.trigger("reRender")},renderOptions:function(){var e="";if(""==this.value)var t=!0;else t=!1;if(_.each(this.options,function(i,n){i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.selected=!1,i.fieldID=this.id,i.classes=this.classes,i.currentValue=this.value,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label,i.required=this.required,this.clean&&1==this.selected||this.value==i.value?i.selected=!0:i.selected=!1,i.maybeFilterHTML=this.maybeFilterHTML;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-option");e+=r(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other-text")(e)}},getCalcValue:function(e){var t=0;if(0!=e.get("options").length){var i=_.find(e.get("options"),function(t){return e.get("value")==t.value});void 0!==i&&(t=i.calc)}return t},updateCheckedClass:function(e,t){jQuery('[name="'+jQuery(e).attr("name")+'"]').removeClass("nf-checked"),jQuery(e).closest("ul").find("label").removeClass("nf-checked-label"),jQuery(e).addClass("nf-checked"),jQuery(e).closest("li").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}})}),i("controllers/fieldNumber",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("number"),"init:model",this.maybeMinDefault),this.listenTo(nfRadio.channel("number"),"keyup:field",this.validateEntry)},maybeMinDefault:function(e){if(""==e.get("value")&&""==e.get("placeholder")){var t=e.get("num_min");e.set("placeholder",t)}},validateEntry:function(e,t){var i=jQuery(e),n=i.val(),r=parseFloat(n),o=i.attr("min"),a=i.attr("max"),l=i.attr("step")?i.attr("step"):"1";if(o&&r<o){var s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-min",d.get("settings").fieldNumberNumMinError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-min");if(a&&r>a){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-max",d.get("settings").fieldNumberNumMaxError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-max");let c=n.split(".");c=void 0!==c[1]?c[1].length:0;let f=l.split(".");f=void 0!==f[1]?f[1].length:0;let u=Math.pow(10,f);if(l&&n&&(c>f||0!==parseInt((u*r).toFixed())%parseInt((u*parseFloat(l)).toFixed()))){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-step",d.get("settings").fieldNumberIncrementBy+l)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-step")}})}),i("controllers/mirrorField",[],function(){var e=nfRadio.channel("fields");return Marionette.Object.extend({listeningModel:"",initialize:function(){this.listenTo(e,"init:model",this.registerMirror)},registerMirror:function(e){if(e.get("mirror_field")){this.listeningModel=e;var t=e.get("mirror_field");this.listenTo(nfRadio.channel("field-"+t),"change:modelValue",this.changeValue)}},changeValue:function(e){this.listeningModel.set("value",e.get("value")),this.listeningModel.trigger("reRender")}})}),i("controllers/confirmField",[],function(){var e=nfRadio.channel("fields"),t="confirm-mismatch";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"init:model",this.registerConfirm),this.listenTo(e,"keyup:field",this.confirmKeyup)},registerConfirm:function(e){e.get("confirm_field")&&this.listenTo(nfRadio.channel("form"),"loaded",function(t){this.registerConfirmListeners(e)})},registerConfirmListeners:function(e){var t=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",e.get("confirm_field"));void 0!==t&&(t.set("confirm_with",e.get("id")),this.listenTo(nfRadio.channel("field-"+t.get("id")),"change:modelValue",this.changeValue),this.listenTo(nfRadio.channel("field-"+e.get("id")),"change:modelValue",this.changeValue))},changeValue:function(i){if(void 0===i.get("confirm_with"))var n=i,r=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",n.get("confirm_field"));else r=i,n=e.request("get:field",r.get("confirm_with"));r.get("id");var o=n.get("id");if(""==n.get("value")||n.get("value")==r.get("value"))nfRadio.channel("fields").request("remove:error",o,t);else{var a=nfRadio.channel("fields").request("get:field",o),l=nfRadio.channel("app").request("get:form",a.get("formID"));nfRadio.channel("fields").request("add:error",o,t,l.get("settings").confirmFieldErrorMsg)}},confirmKeyup:function(e,i,n){var r=jQuery(e).val();if(i.get("confirm_field"))var o=i,a=i.get("id"),l=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",o.get("confirm_field")).get("value"),s=r;else if(i.get("confirm_with"))a=(o=nfRadio.channel("fields").request("get:field",i.get("confirm_with"))).get("id"),l=s=o.get("value");if(void 0!==o)if(""==s)nfRadio.channel("fields").request("remove:error",a,t);else if(r==l)nfRadio.channel("fields").request("remove:error",a,t);else{var d=nfRadio.channel("fields").request("get:field",a),c=nfRadio.channel("app").request("get:form",d.get("formID"));nfRadio.channel("fields").request("add:error",a,t,c.get("settings").confirmFieldErrorMsg)}}})}),i("controllers/updateFieldModel",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("update:field",this.updateField)},updateField:function(e,t){e.get("isUpdated")||(e.set("value",t),e.set("isUpdated",!0),_.isArray(t)&&e.trigger("change:value",e))}})}),i("controllers/submitButton",["controllers/submitButton"],function(e){return Marionette.Object.extend({bound:{},initialize:function(){this.listenTo(nfRadio.channel("submit"),"init:model",this.registerHandlers)},registerHandlers:function(e){if(void 0!==this.bound[e.get("id")])return!1;this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:field",this.click,this),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"before:submit",this.beforeSubmit,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:failed",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:response",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"enable:submit",this.maybeEnable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"disable:submit",this.maybeDisable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"processingLabel",this.processingLabel,e),e.listenTo(nfRadio.channel("fields"),"add:error",this.maybeDisable,e),e.listenTo(nfRadio.channel("fields"),"remove:error",this.maybeEnable,e),this.bound[e.get("id")]=!0},click:function(e,t){var i=nfRadio.channel("app").request("get:form",t.get("formID"));_.size(i.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(i.get("fieldErrors"))),nfRadio.channel("form-"+t.get("formID")).request("submit",i)},beforeSubmit:function(){this.get("disabled")||(this.set("disabled",!0),nfRadio.channel("form-"+this.get("formID")).trigger("processingLabel",this))},maybeDisable:function(e){void 0!==e&&e.get("formID")!=this.get("formID")||(this.set("disabled",!0),this.trigger("reRender"))},maybeEnable:function(e){if(void 0!==e&&e.get("formID")!=this.get("formID"))return!1;var t=nfRadio.channel("app").request("get:form",this.get("formID"));0==_.size(t.get("fieldErrors"))&&(this.set("disabled",!1),this.trigger("reRender"))},processingLabel:function(){this.set("oldLabel",this.get("label")),this.set("label",this.get("processing_label")),this.set("disabled",!0),this.trigger("reRender")},resetLabel:function(e){void 0!==e.errors&&void 0!==e.errors.nonce&&_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts||(void 0!==this.get("oldLabel")&&this.set("label",this.get("oldLabel")),this.set("disabled",!1),this.trigger("reRender"))}})}),i("controllers/submitDebug",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitDebug)},submitDebug:function(e,t,i,n){if(void 0!==e.debug){if(void 0!==e.debug.form){var r=document.createElement("span");_.each(e.debug.form,function(e,t){var i=document.createTextNode(e);r.appendChild(i),r.appendChild(document.createElement("br"))}),jQuery(".nf-debug-msg").html(r)}if(void 0!==e.debug.console){console.log("%c%s","","NINJA SUPPORT"),_.each(e.debug.console,function(e,t){console.log(e)}),console.log("%c%s","","END NINJA SUPPORT")}}}})}),i("controllers/getFormErrors",[],function(){nfRadio.channel("fields");return Marionette.Object.extend({initialize:function(e){nfRadio.channel("form").reply("get:errors",this.getFormErrors)},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&(0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),_.each(t.get("fields").models,function(e){"submit"!=e.get("type")&&e.get("errors").length>0&&((i=i||{})[e.get("id")]=e.get("errors"))})),i}})}),i("controllers/validateRequired",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"blur:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"change:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.validateKeyup),this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.validateModelData),this.listenTo(nfRadio.channel("submit"),"validate:field",this.validateModelData)},validateKeyup:function(e,t,i){if(1!=t.get("required"))return!1;t.get("clean")||this.validateRequired(e,t)},validateRequired:function(e,t){if(1!=t.get("required")||!t.get("visible"))return!1;var i=jQuery(e).val(),n=nfRadio.channel(t.get("type")).request("validate:required",e,t),r=!0,o=this.getMask(t);if(o&&i===o&&(0<t.get("errors").length||!t.get("clean"))&&(r=!1),String(i).trim()||(r=!1),void 0!==n)var a=n;else a=r;this.maybeError(a,t)},getMask:function(e){var t=e.get("mask");if(void 0!==t){switch(t){case"":break;case"currency":t=nfi18n.currencySymbol;break;case"custom":t=e.get("custom_mask");default:t=(t=(t=t.replace(/9/g,"_")).replace(/a/g,"_")).replace(/\*/g,"_")}return t}},validateModelData:function(e){if(1!=e.get("required")||!e.get("visible")||e.get("clean"))return!1;if(e.get("errors").get("required-error"))return!1;currentValue=e.get("value");var t=!0;String(currentValue).trim()||(t=!1);var i=nfRadio.channel(e.get("type")).request("validate:modelData",e);if(void 0!==i)var n=i;else n=t;this.maybeError(n,e)},maybeError:function(e,t){if(e)nfRadio.channel("fields").request("remove:error",t.get("id"),"required-error");else{var i=nfRadio.channel("form-"+t.get("formID")).request("get:form");void 0!==i&&nfRadio.channel("fields").request("add:error",t.get("id"),"required-error",i.get("settings").validateRequiredField)}}})}),i("controllers/submitError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitErrors),nfRadio.channel("submit").reply("focus:firstInvalidInput",this.focusFirstInvalidInput)},submitErrors:function(e,t,i,n){if(_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts){nfFrontEnd.ajaxNonce=e.errors.nonce.new_nonce,nfFrontEnd.nonce_ts=e.errors.nonce.nonce_ts;var r=nfRadio.channel("app").request("get:form",n);nfRadio.channel("form-"+n).request("submit",r)}if(_.size(e.errors.fields)>0&&_.each(e.errors.fields,function(e,t){"object"==typeof e?nfRadio.channel("fields").request("add:error",t,e.slug,e.message):nfRadio.channel("fields").request("add:error",t,"required-error",e)}),_.size(e.errors.form)>0&&_.each(e.errors.form,function(e,t){nfRadio.channel("form-"+n).request("remove:error",t),nfRadio.channel("form-"+n).request("add:error",t,e)}),void 0!==e.errors.last&&void 0!==e.errors.last.message){var o="background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;";console.log("%c NINJA FORMS SUPPORT: SERVER ERROR",o),console.log(e.errors.last.message),console.log("%c END SERVER ERROR MESSAGE",o)}jQuery("#nf-form-"+n+"-cont .nf-field-container").show()},focusFirstInvalidInput:function(e){const t=nfRadio.channel("fields").request("get:firstFieldByOrder",e);null!==document.getElementById("nf-field-"+t)&&document.getElementById("nf-field-"+t).focus()}})}),i("controllers/actionRedirect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionRedirect)},actionRedirect:function(e){void 0!==e.data.halt&&void 0!==e.data.halt.redirect&&""!=e.data.halt.redirect&&(window.location=e.data.halt.redirect),0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.redirect&&""!=e.data.actions.redirect&&(window.location=e.data.actions.redirect)}})}),i("controllers/actionSuccess",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){if(0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.success_message&&""!=e.data.actions.success_message){var t=e.data.form_id,i=jQuery("#nf-form-"+t+"-cont .nf-response-msg");const l=e.data.actions.success_message.replace(/(<([^>]+)>)/gi,"");i.attr("tabindex","0"),i.attr("aria-live","assertive"),i.attr("aria-label",l),i.html(e.data.actions.success_message).show(),i.focus();var n=i.offset().top,r=i.offset().top+i.outerHeight(),o=jQuery(window).scrollTop()+jQuery(window).height(),a=jQuery(window).scrollTop();o>r&&a<n||jQuery("html, body").animate({scrollTop:i.offset().top-50},300)}}})}),i("controllers/fieldSelect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"init:model",function(e){"list"==e.get("parentType")&&this.register(e)},this),nfRadio.channel("listselect").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("listmultiselect").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherAttributes",this.renderOtherAttributes),0!=e.get("options").length){var t=e.get("value");if("listmultiselect"==e.get("type"))var i=_.filter(e.get("options"),function(e){return 1==e.selected}),n=i=_.map(i,function(e){return e.value});else if("listradio"!==e.get("type")){if(void 0===(i=_.find(e.get("options"),function(e){return 1==e.selected}))&&(i=_.first(e.get("options"))),void 0!==i&&void 0!==i.value)n=i.value;else if(void 0!==i)n=i.label}void 0!==t&&""!==t&&Array.isArray(t)?e.set("value",t):void 0!==i&&e.set("value",n)}},renderOptions:function(){var e="";return _.each(this.options,function(t){if(_.isArray(this.value)){if("listmultiselect"===this.type&&0<this.value.length&&-1!=_.indexOf(this.value[0].split(","),t.value))var i=!0;else if(-1!=_.indexOf(this.value,t.value))i=!0}else if(_.isArray(this.value)||t.value!=this.value)if(1==t.selected&&this.clean&&void 0===this.value)i=!0;else i=!1;else var i=!0;void 0===t.visible&&(t.visible=!0),t.selected=i,t.fieldID=this.id,t.classes=this.classes,t.currentValue=this.value,t.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(t.label):t.label,t.maybeFilterHTML=this.maybeFilterHTML;var n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listselect-option");e+=n(t)},this),e},renderOtherAttributes:function(){var e="";"listmultiselect"==this.type&&(e=(e+=" multiple")+' size="'+(this.multi_size||5)+'"');return e},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if("listmultiselect"==e.get("type"))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0===n&&(n=e.get("options")[0]),t=n.calc}return t}})}),i("controllers/coreSubmitResponse",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){var t=nfRadio.channel("app").request("get:form",e.data.form_id);if(0!=_.size(e.errors))return!1;1==e.data.settings.clear_complete&&(t.get("fields").reset(t.get("loadedFields")),1!=e.data.settings.hide_complete&&nfRadio.channel("captcha").trigger("reset")),1==e.data.settings.hide_complete&&t.trigger("hide")}})}),i("controllers/fieldProduct",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("product"),"init:model",this.register),nfRadio.channel("product").reply("get:calcValue",this.getCalcValue,this)},register:function(e){e.set("renderProductQuantity",this.renderProductQuantity),e.set("renderProduct",this.renderProduct),e.set("renderOptions",this.renderOptions)},renderProduct:function(){switch(this.product_type){case"user":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-textbox")(this);case"hidden":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-hidden")(this);case"dropdown":return nfRadio.channel("app").request("get:template","#tmpl-nf-product-dropdown")(this);default:return nfRadio.channel("app").request("get:template","#tmpl-nf-product-single")(this)}},renderProductQuantity:function(){if(1==this.product_use_quantity)return nfRadio.channel("app").request("get:template","#tmpl-nf-product-quantity")(this)},renderOptions:function(){var e=this,t="";return _.each(this.options,function(i){if(1==i.selected)var n=!0;else n=!1;i.selected=n,i.fieldID=e.id,i.classes=e.classes,i.currentValue=e.value;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-product-"+e.product_type+"-option");t+=r(i)}),t},getCalcValue:function(e){return e.get("product_price")*e.get("value")}})}),i("controllers/fieldTotal",[],function(){return Marionette.Object.extend({totalModel:{},productTotals:{},initialize:function(){this.listenTo(nfRadio.channel("total"),"init:model",this.register),this.listenTo(nfRadio.channel("shipping"),"init:model",this.registerShipping)},register:function(e){this.totalModel=e;var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"loaded",this.onFormLoaded),this.listenTo(nfRadio.channel("product"),"change:modelValue",this.onChangeProduct),this.listenTo(nfRadio.channel("quantity"),"change:modelValue",this.onChangeQuantity)},registerShipping:function(e){this.shippingCost=e.get("shipping_cost")},onFormLoaded:function(e){var t=e.get("fields").models,i={},n={};for(var r in t){var o=t[r],a=o.get("id");if("product"==o.get("type"))i[a]=o;else if("quantity"==o.get("type")){n[l=o.get("product_assignment")]=o}}for(var l in i){var s=i[l],d=Number(s.get("product_price"));n[l]?d*=n[l].get("value"):1==s.get("product_use_quantity")&&(d*=s.get("value")),this.productTotals[l]=d}this.updateTotal()},onChangeProduct:function(e){var t=e.get("id"),i=Number(e.get("product_price")),n=Number(e.get("value"))*i;this.productTotals[t]=n,this.updateTotal()},onChangeQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t),n=Number(i.get("product_price")),r=Number(e.get("value"))*n;this.productTotals[t]=r,this.updateTotal()},updateTotal:function(){var e=0;for(var t in this.productTotals)e+=Number(this.productTotals[t]);e&&this.shippingCost&&(e+=Number(this.shippingCost)),this.totalModel.set("value",e.toFixed(2)),this.totalModel.trigger("reRender")}})}),i("controllers/fieldQuantity",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("quantity"),"init:model",this.registerQuantity)},registerQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t);i&&i.set("product_use_quantity",0)}})}),i("models/calcModel",[],function(){return Backbone.Model.extend({initialize:function(){this.set("formID",this.collection.options.formModel.get("id")),this.set("fields",{}),nfRadio.channel("calc").trigger("init:model",this),this.on("change:value",this.changeValue,this)},changeField:function(e){nfRadio.channel("calc").trigger("change:field",this,e)},changeCalc:function(e){nfRadio.channel("calc").trigger("change:calc",this,e)},changeValue:function(){nfRadio.channel("calc").trigger("change:value",this)}})}),i("models/calcCollection",["models/calcModel"],function(e){return Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,_.each(e,function(e){void 0!==e.dec&&(""===e.dec.toString().trim()&&(e.dec=2),e.dec=parseInt(e.dec))}),nfRadio.channel("form-"+t.formModel.get("id")).reply("get:calc",this.getCalc,this)},getCalc:function(e){return this.findWhere({name:e})}})}),i("controllers/calculations",["models/calcCollection"],function(e){return Marionette.Object.extend({initialize:function(){this.calcs={},this.displayFields={},this.listenTo(nfRadio.channel("form"),"loaded",this.registerCalcs),this.listenTo(nfRadio.channel("fields"),"reset:collection",this.resetCalcs),this.listenTo(nfRadio.channel("calc"),"change:field",this.changeField),this.listenTo(nfRadio.channel("calc"),"change:calc",this.changeCalc);var e=this;_.each(nfFrontEnd.use_merge_tags.calculations,function(t){e.listenTo(nfRadio.channel("fields-"+t),"init:model",e.initDisplayField)}),this.listenTo(nfRadio.channel("calc"),"change:value",this.updateDisplayFields),this.init={}},resetCalcs:function(e){void 0!==e.options.formModel&&this.registerCalcs(e.options.formModel)},registerCalcs:function(t){var i=new e(t.get("settings").calculations,{formModel:t});this.calcs[t.get("id")]=i;var n=this;_.each(i.models,function(e){n.init[e.get("name")]=!0,n.setupCalc(e)})},setupCalc:function(e){var t=this,i=e.get("eq"),n=i,r=(e.get("name"),i.match(new RegExp(/{field:(.*?)}/g)));r&&(r=r.map(function(i){var r=i.replace(":calc}","").replace("}","").replace("{field:","");if(fieldModel=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",r),"undefined"!=typeof fieldModel){fieldModel.set("clean",!1),fieldModel.on("change:value",e.changeField,e);var o=t.getCalcValue(fieldModel);t.updateCalcFields(e,r,o),n=t.replaceKey("field",r,o,n)}}));var o=i.match(new RegExp(/{calc:(.*?)}/g));o&&(o=o.map(function(i){var r=i.replace("}","").replace("{calc:",""),o=e.collection.findWhere({name:r});if(void 0!==o){o.on("change:value",e.changeCalc,e);var a=o.get("value");n=t.replaceKey("calc",r,a,n)}})),n=(n=n.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,0)).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+n+" -> "+this.localeDecodeEquation(n)+" (Setup)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(n))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},updateCalcFields:function(e,t,i){var n=e.get("fields");n[t]=i,e.set("fields",n)},getCalcValue:function(e){var t=nfRadio.channel(e.get("type")).request("get:calcValue",e),i=e.get("value");void 0!==t&&(t||0===t)&&(i=t);var n=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point),o=n.numberDecoder(i),a=n.numberEncoder(i);return t=void 0!==o&&jQuery.isNumeric(o)?a:0,e.get("visible")||(t=0),t},replaceKey:function(e,t,i,n){n=n||calcModel.get("eq"),tag="{"+e+":"+t+"}";var r=new RegExp(tag,"g");calcTag="{"+e+":"+t+":calc}";var o=new RegExp(calcTag,"g");return n=(n=n.replace(r,i)).replace(o,i)},replaceAllKeys:function(e){var t=e.get("eq"),i=this;_.each(e.get("fields"),function(e,n){t=i.replaceKey("field",n,e,t)});var n=t.match(new RegExp(/{calc:(.*?)}/g));return n&&_.each(n,function(i){var n=i.replace("}","").replace("{calc:",""),r=e.collection.findWhere({name:n});if(void 0!==r){var o=new RegExp(i,"g");t=t.replace(o,r.get("value"))}}),t},changeField:function(e,t){var i=t.get("key"),n=this.getCalcValue(t);this.updateCalcFields(e,i,n);var r=this.replaceAllKeys(e);r=(r=r.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,"0")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+r+" -> "+this.localeDecodeEquation(r)+" (Change Field)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(r))).toFixed(e.get("dec")))}catch(e){this.debug()&&console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},initDisplayField:function(e){if(e.get("default")&&"string"==typeof e.get("default")){var t=e.get("default").match(new RegExp(/{calc:(.*?)}/g));t&&_.each(t,function(t){t=t.replace("{calc:","").replace("}","").replace(":2",""),this.displayFields[t]=this.displayFields[t]||[],this.displayFields[t].push(e)},this)}},updateDisplayFields:function(e){var t=this;void 0!==this.displayFields[e.get("name")]&&_.each(this.displayFields[e.get("name")],function(i){var n="",r=(n="html"===i.get("type")?i.get("value"):i.get("default")).match(new RegExp(/<span data-key="calc:(.*?)<\/span>/g));_.each(r,function(e){var t="{"+e.replace('<span data-key="',"").replace(/">(.*?)<\/span>/,"")+"}";n=n.replace(e,t)});var o=n.match(new RegExp(/{calc:(.*?)}/g));_.each(o,function(e){var r=e.replace("}","").replace("{calc:","").replace(":2",""),o=t.calcs[i.get("formID")].findWhere({name:r}),a=new RegExp(e,"g"),l=o.get("value");void 0!==l&&(l=t.applyLocaleFormatting(l,o)),n="html"===i.get("type")?n.replace(a,'<span data-key="calc:'+r+'">'+l+"</span>"):l}),i.set("value",n),t.init[e.get("name")]||i.trigger("reRender"),t.init[e.get("name")]=!1})},getCalc:function(e,t){return this.calcs[t].findWhere({name:e})},changeCalc:function(e,t){var i=this.replaceAllKeys(e);i=(i=i.replace("[","").replace("]","")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+i+" -> "+this.localeDecodeEquation(i)+" (Change Calc)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(i))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},applyLocaleFormatting:function(e,t){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e,t.get("dec"))},localeDecodeEquation:function(e){var t="",i="",n=/[0-9.,]/,o=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point);return(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").forEach(function(e){n.test(e)?i+=e:(0<i.length&&(t+=o.numberDecoder(i),i=""),t+=e)}),0<i.length&&(t+=o.numberDecoder(i)),t},debug:function(e){window.nfCalculationsDebug&&console.log(e)}})}),i("controllers/dateBackwardsCompat",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(Backbone.Radio.channel("pikaday-bc"),"init",this.dateBackwardsCompat)},dateBackwardsCompat:function(e,t){if(e.pikaday={},e.pikaday._o={},nfRadio.channel("pikaday").trigger("init",e,t),void 0!==e.pikaday._o.disableDayFn&&e.set("disable",[e.pikaday._o.disableDayFn]),void 0!==e.pikaday._o.i18n||void 0!==e.pikaday._o.firstDay){let t=e.config.locale;void 0!==e.pikaday._o.firstDay&&(t.firstDayOfWeek=e.pikaday._o.firstDay),void 0!==e.pikaday._o.i18n&&(void 0!==e.pikaday._o.i18n.weekdays&&(t.weekdays.longhand=e.pikaday._o.i18n.weekdays),void 0!==e.pikaday._o.i18n.weekdaysShort&&(t.weekdays.shorthand=e.pikaday._o.i18n.weekdaysShort),void 0!==e.pikaday._o.i18n.months&&jQuery(".flatpickr-monthDropdown-months > option").each(function(){this.text=e.pikaday._o.i18n.months[this.value]})),e.set("locale",t)}Object.keys(e.pikaday._o).length>0&&(console.log("%cDeprecated Ninja Forms Pikaday custom code detected.","color: Red; font-size: large"),console.log("You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details."))}})}),i("controllers/fieldDate",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("date"),"init:model",this.initModel),this.listenTo(nfRadio.channel("date"),"render:view",this.initDatepicker)},initModel:function(e){this.registerFunctions(e)},registerFunctions:function(e){e.set("renderHourOptions",this.renderHourOptions),e.set("renderMinuteOptions",this.renderMinuteOptions),e.set("maybeRenderAMPM",this.maybeRenderAMPM),e.set("customClasses",this.customClasses),e.getValue=this.getValue},renderHourOptions:function(){return this.hours_options},renderMinuteOptions:function(){return this.minutes_options},maybeRenderAMPM:function(){if(void 0!==this.hours_24&&1!=this.hours_24)return`<div style="float:left;" class="time-wrap"><select id="ampm-select" class="ampm extra" aria-label="am-pm-select" ${1==this.required?'aria-required="true" required':""}><option value="am">AM</option><option value="pm">PM</option></select></div>`},initDatepicker:function(e){e.model.set("el",e.el);var t=jQuery(e.el).find(".nf-element")[0];if(e.listenTo(nfRadio.channel("form-"+e.model.get("formID")),"before:submit",this.beforeSubmit,e),void 0!==e.model.get("date_mode")&&"time_only"==e.model.get("date_mode"))return jQuery(t).hide(),!1;var i=this.convertDateFormat(e.model.get("date_format"));e.model.set("date_format",i);var n={onReady:(e,i,n)=>{n.altInput.setAttribute("aria-labelledby",jQuery(t).attr("aria-labelledby")),n.altInput.setAttribute("aria-invalid",!1)},dateFormat:i,altFormat:i,altInput:!0,ariaDateFormat:i,mode:"single",allowInput:!0,disableMobile:"true",minDate:this.getMinDate(e.model),maxDate:this.getMaxDate(e.model)};const r=this.checkCustomLocale();r&&(n.locale=r);let o=nfRadio.channel("flatpickr").request("filter:settings",n,e);void 0!==o&&(n=o);var a=flatpickr(t,n);1!=e.model.get("date_default")||e.model.get("value")||(a.defaultDate=new Date,a.setDate(a.defaultDate),e.model.set("value",a.defaultDate)),1==e.model.get("date_default")&&"string"==typeof e.model.get("id")&&e.model.get("id").includes(".")&&"object"==typeof e.model.get("value")&&this.isSameDay(e.model.get("value"),new Date)&&(a.defaultDate=new Date,a.setDate(a.defaultDate,!0),e.model.set("value",a.defaultDate)),nfRadio.channel("pikaday-bc").trigger("init",a,e.model,e),nfRadio.channel("flatpickr").trigger("init",a,e.model,e)},beforeSubmit:function(e){if(_.isObject(this.model.get("value"))){const e=this.el.querySelector("input[type='hidden']").value;this.model.set("value",e)}if(-1!==this.el.dataset.fieldId.search(".")&&(nfRadio.channel("field-repeater").trigger("set:value"),"time_only"===this.model.get("date_mode")))return;if("date_only"==this.model.get("date_mode"))return!1;let t=jQuery(this.el).find(".hour").val(),i=jQuery(this.el).find(".minute").val(),n=jQuery(this.el).find(".ampm").val(),r=this.model.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a={date:o,hour:t,minute:i,ampm:n};this.model.set("value",a)},getMinDate:function(e){let t=null;if(void 0!==e.get("year_range_start")){const i=e.get("year_range_start");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},getMaxDate:function(e){let t=null;if(void 0!==e.get("year_range_end")){const i=e.get("year_range_end");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},convertDateFormat:function(e){!e&&this.model&&(e=this.model.get("date_format")),e||(e="default");const t={"MM/DD/YYYY":"m/d/Y","MM-DD-YYYY":"m-d-Y","MM.DD.YYYY":"m.d.Y","DD/MM/YYYY":"d/m/Y","DD-MM-YYYY":"d-m-Y","DD.MM.YYYY":"d.m.Y","YYYY-MM-DD":"Y-m-d","YYYY/MM/DD":"Y/m/d","YYYY.MM.DD":"Y.m.d","dddd, MMMM D YYYY":"l, F d Y",default:nfi18n.dateFormat?nfi18n.dateFormat:"default"};return Object.keys(t).includes(e)?t[e]:e},customClasses:function(e){return"date_and_time"==this.date_mode&&(e+=" date-and-time"),e},checkCustomLocale:function(){let e={};return nfi18n&&((nfi18n.months||nfi18n.monthsShort)&&(e.months={},nfi18n.months&&(e.months.longhand=nfi18n.months),nfi18n.monthsShort&&(e.months.shorthand=nfi18n.monthsShort)),(nfi18n.weekdays||nfi18n.weekdaysShort)&&(e.weekdays={},nfi18n.weekdays&&(e.weekdays.longhand=nfi18n.weekdays),nfi18n.weekdaysShort&&(e.weekdays.shorthand=nfi18n.weekdaysShort)),nfi18n.startOfWeek&&(e.firstDayOfWeek=nfi18n.startOfWeek)),!_.isEmpty(e)&&e},getValue:function(){if("date_only"==this.get("date_mode"))return this.get("value");let e=this.get("el"),t=jQuery(e).find(".hour").val(),i=jQuery(e).find(".minute").val(),n=jQuery(e).find(".ampm").val(),r=this.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a="";return void 0!==o&&(a+=o),void 0!==t&&void 0!==i&&(a+=" "+t+":"+i),void 0!==n&&(a+=" "+n),a},isSameDay:function(e,t){const i=new Date(e),n=new Date(t);return i.setHours(0,0,0,0),n.setHours(0,0,0,0),i.getTime()===n.getTime()}})}),i("controllers/fieldRecaptcha",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha"),"init:model",this.initRecaptcha),this.listenTo(nfRadio.channel("forms"),"submit:response",this.resetRecaptcha)},initRecaptcha:function(e){nfRadio.channel("recaptcha").reply("update:response",this.updateResponse,this,e.id)},updateResponse:function(e,t){var i=nfRadio.channel("fields").request("get:field",t);i.set("value",e),nfRadio.channel("fields").request("remove:error",i.get("id"),"required-error")},resetRecaptcha:function(){var e=0;jQuery(".g-recaptcha").each(function(){try{grecaptcha.reset(e)}catch(e){console.log("Notice: Error trying to reset grecaptcha.")}e++})}})}),i("controllers/fieldRecaptchaV3",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha_v3"),"init:model",this.initRecaptcha)},initRecaptcha:function(e){const t=e.get("formID");this.processRecaptcha(t,e),setInterval(this.processRecaptcha,11e4,t,e)},processRecaptcha:function(e,t){try{nfRadio.channel("form-"+e).trigger("disable:submit",t),grecaptcha.ready(function(){grecaptcha.execute(t.get("site_key"),{action:"register"}).then(function(i){t.set("value",i),nfRadio.channel("form-"+e).trigger("enable:submit",t)})})}catch(e){jQuery(document).on("nfFormReady",e=>{let i,n=nf_check_recaptcha_consent();t.collection.models.forEach(e=>{"submit"===e.get("type")&&(i=e.get("id"))}),nfRadio.channel("fields").request("add:error",i,"recaptcha-v3-missing",t.collection.options.formModel.get("settings").recaptchaConsentMissing),this.nf_build_default_consent_action(t,n.services,i,e)})}},nf_build_default_consent_action:function(e,t,i,n){if(!(t.length<=1&&t.includes("missing_cookie")||t.length<=0)){let r=document.createElement("div");r.setAttribute("id","nf_recaptcha_consent_event"),r.innerText+=e.collection.options.formModel.get("settings").recaptchaConsentEvent;let o=new CustomEvent("nf_consent_link",{detail:{services:t,element:r,submitFieldID:i,layoutView:n}});document.dispatchEvent(o);const a=document.getElementsByClassName("nf-error-recaptcha-v3-missing");Array.prototype.slice.call(a).forEach(e=>{e.append(r)})}}})}),i("controllers/fieldHTML",[],function(){return Marionette.Object.extend({htmlFields:[],trackedMergeTags:[],initialize:function(){this.listenTo(Backbone.Radio.channel("fields-html"),"init:model",this.setupFieldMergeTagTracking)},setupFieldMergeTagTracking:function(e){this.htmlFields.push(e);var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"init:model",function(t){var i=e.get("default").match(new RegExp(/{field:(.*?)}/g));i&&(_.each(i,function(e){var i=e.replace("{field:","").replace("}",""),n=t.get("fields").findWhere({key:i});void 0!==n&&(this.trackedMergeTags.push(n),this.listenTo(nfRadio.channel("field-"+n.get("id")),"change:modelValue",this.updateFieldMergeTags))},this),this.updateFieldMergeTags())},this)},updateFieldMergeTags:function(e){_.each(this.htmlFields,function(e){var t=e.get("value");_.each(this.trackedMergeTags,function(e){var i=t.match(new RegExp(/<span data-key="field:(.*?)<\/span>/g));_.each(i,function(i){-1<i.indexOf('data-key="field:'+e.get("key"))&&(t=t.replace(i,"{field:"+e.get("key")+"}"))});var n="{field:"+e.get("key")+"}";const r="repeater"===e.get("type")?this.displayRepeaterData(e):e.getValue();t=t.replace(n,'<span data-key="field:'+e.get("key")+'">'+r+"</span>")},this),e.set("value",t),e.trigger("reRender")},this)},displayRepeaterData:function(e){const t=Object.keys(e.getValue());let i="",n=[];return _.each(t,function(e){if(-1===n.indexOf(e)){const t=nfRadio.channel("fields").request("get:field",e);if(void 0!==t){if(-1===["submit","html","hidden","password","passwordconfirm","divider","hr","note","unknown","button","confirm","creditcard","creditcardcvc","creditcardexpiration","creditcardfullname","creditcardnumber","creditcardzip","recaptcha","recaptcha_v3"].indexOf(t.get("type"))&&t.getValue().toString().length>0){const r=Number(e.split("_").pop())+1;i+="<p>"+t.get("label")+" "+r+" : "+t.getValue()+"</p>",n.push(e)}}}}),i}})}),i("controllers/helpText",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"render:view",this.initHelpText),this.listenTo(nfRadio.channel("field-repeater"),"fieldset:added",this.initHelpText),nfRadio.channel("form").reply("init:help",this.initHelpText)},initHelpText:function(e){e&&!e.el&&"function"==typeof e.get&&"repeater"===e.get("type")&&(e.el="#nf-form-"+e.get("formID")+"-cont"),jQuery(e.el).find(".nf-help").each(function(e){var t=jQuery(this).jBox("Tooltip",{theme:"TooltipBorder",content:jQuery(this).data("text"),trigger:"mouseenter focus",closeOnMouseleave:!0,closeOnClick:!0});jQuery(this).on("keydown mouseleave",function(){t.close()})})}})}),i("controllers/fieldTextbox",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("textbox").reply("get:calcValue",this.getCalcValue,this)},getCalcValue:function(e){if("currency"==e.get("mask")){var t=nfRadio.channel("app").request("get:form",e.get("formID")),i=void 0!==t?t.get("currencySymbol"):"",n=jQuery("<textarea />").html(i).text();return e.get("value").replace(n,"")}return e.get("value")}})}),i("controllers/fieldTextareaRTE",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("textarea"),"render:view",this.initTextareaRTEs),this.listenTo(nfRadio.channel("textarea"),"click:extra",this.clickExtra),this.meta_image_frame,this.currentContext={},void 0!==jQuery.summernote&&(jQuery.summernote.options.icons={align:"dashicons dashicons-editor-alignleft",alignCenter:"dashicons dashicons-editor-aligncenter",alignJustify:"dashicons dashicons-editor-justify",alignLeft:"dashicons dashicons-editor-alignleft",alignRight:"dashicons dashicons-editor-alignright",indent:"dashicons dashicons-editor-indent",outdent:"dashicons dashicons-editor-outdent",bold:"dashicons dashicons-editor-bold",caret:"dashicons dashicons-arrow-down",close:"dashicons dashicons-dismiss",code:"dashicons dashicons-editor-code",eraser:"dashicons dashicons-editor-removeformatting",italic:"dashicons dashicons-editor-italic",link:"dashicons dashicons-admin-links",unlink:"dashicons dashicons-editor-unlink",magic:"dashicons dashicons-editor-paragraph",minus:"dashicons dashicons-minus",orderedlist:"dashicons dashicons-editor-ol",redo:"dashicons dashicons-redo",square:"dashicons fa-square",table:"dashicons dashicons-editor-table",underline:"dashicons dashicons-editor-underline",undo:"dashicons dashicons-undo",unorderedlist:"dashicons dashicons-editor-ul"})},initTextareaRTEs:function(e){if(1!=e.model.get("textarea_rte"))return!1;var t=this,i=[["paragraphStyle",["style"]],["fontStyle",["bold","italic","underline","clear"]],["lists",["ul","ol"]],["paragraph",["paragraph"]],["customGroup",["linkButton","unlink"]],["table",["table"]],["actions",["undo","redo"]]];1==e.model.get("textarea_media")&&0!=userSettings.uid&&i.push(["tools",["mediaButton"]]),jQuery(e.el).find(".nf-element").summernote({toolbar:i,buttons:{linkButton:function(e){return t.linkButton(e)},mediaButton:function(e){return t.mediaButton(e)}},height:150,codemirror:{theme:"monokai",lineNumbers:!0},prettifyHtml:!0,callbacks:{onChange:function(t){e.model.set("value",jQuery(this).summernote("code"))}}});var n=jQuery(e.el).find(".link-button").next(".dropdown-menu").find("button");n.replaceWith(function(){return jQuery("<div/>",{class:jQuery(n).attr("class"),html:this.innerHTML})})},linkButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-button"),r=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-dropdown");return i.buttonGroup([i.button({className:"dropdown-toggle link-button",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertLink,click:function(i){t.clickLinkButton(i,e)},data:{toggle:"dropdown"}}),i.dropdown([i.buttonGroup({children:[i.button({contents:r({}),tooltip:""})]})])]).render()},mediaButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-media-button");return i.button({className:"dropdown-toggle",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertMedia,click:function(i){t.openMediaManager(i,e)}}).render()},openMediaManager:function(e,t){if(t.invoke("editor.saveRange"),this.meta_image_frame)this.meta_image_frame.open();else{this.meta_image_frame=wp.media.frames.meta_image_frame=wp.media({title:nfi18n.fieldTextareaRTESelectAFile,button:{text:"insert"}});var i=this;this.meta_image_frame.on("select",function(){var e=i.meta_image_frame.state().get("selection").first().toJSON();i.insertMedia(e,t)}),this.meta_image_frame.open()}},clickLinkButton:function(e,t){var i=t.invoke("editor.createRange");t.invoke("editor.saveRange");var n=i.toString();this.currentContext=t,jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("hide.bs.dropdown",function(e){return!1}),jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("shown.bs.dropdown",function(e){jQuery(e.target).parent().parent().find(".link-text").val(n),jQuery(e.target).parent().parent().find(".link-url").focus()})},clickExtra:function(e){var t=jQuery(e.target).parent().find(".link-text"),i=jQuery(e.target).parent().find(".link-url"),n=jQuery(e.target).parent().find(".link-new-window");if(this.currentContext.invoke("editor.restoreRange"),jQuery(e.target).hasClass("insert-link")){var r=t.val(),o=i.val(),a=!!n.prop("checked");0!=r.length&&0!=o.length&&this.currentContext.invoke("editor.createLink",{text:r,url:o,isNewWindow:a})}t.val(""),i.val(""),n.prop("checked",!1),jQuery(e.target).closest("div.note-btn-group.open").removeClass("open")},insertMedia:function(e,t){t.invoke("editor.restoreRange"),"image"==e.type?t.invoke("editor.insertImage",e.url):t.invoke("editor.createLink",{text:e.filename,url:e.url})}})}),i("controllers/fieldStarRating",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("starrating"),"init:model",this.register),this.listenTo(nfRadio.channel("starrating"),"render:view",this.initRating)},register:function(e){e.set("renderRatings",this.renderRatings)},initRating:function(e){jQuery(e.el).find(".starrating").rating()},renderRatings:function(){for(var e=document.createElement("span"),t=0;t<=this.number_of_stars-1;t++){var i=nfRadio.channel("app").request("get:template","#tmpl-nf-field-starrating-star"),n=t+1,r="";this.value==n&&(r="checked");var o=i({id:this.id,classes:this.classes,num:n,checked:r,required:this.required});e.appendChild(document.createRange().createContextualFragment(o))}return e.innerHTML}})}),i("controllers/fieldTerms",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("terms"),"init:model",this.register)},register:function(e){this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:extra",this.clickExtra),this.listenTo(nfRadio.channel("field-"+e.get("id")),"keyup:field",this.keyUpExtra)},clickExtra:function(e,t){var i=jQuery(e.currentTarget).parent().find(".extra-value").val();this.addOption(t,i)},keyUpExtra:function(e,t,i){13==i&&this.addOption(t,e.val())},addOption:function(e,t){if(t){var i={label:t,value:t,selected:0};e.get("options").push(i),e.get("value").push(t),e.trigger("reRender")}}})}),i("controllers/formContentFilters",[],function(){return Marionette.Object.extend({initialize:function(){this.viewFilters=[],this.loadFilters=[],nfRadio.channel("formContent").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("formContent").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("formContent").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("formContent").reply("get:loadFilters",this.getLoadFilters,this),nfRadio.channel("fieldContents").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("fieldContents").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("fieldContents").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("fieldContents").reply("get:loadFilters",this.getLoadFilters,this)},addViewFilter:function(e,t){this.viewFilters[t]=e},getViewFilters:function(){return this.viewFilters},addLoadFilter:function(e,t){this.loadFilters[t]=e},getLoadFilters:function(){return this.loadFilters}})}),i("views/fieldItem",[],function(){return Marionette.ItemView.extend({tagName:"div",initialize:function(){this.listenTo(this.model,"reRender",this.render,this),this.listenTo(this.model,"change:addWrapperClass",this.addWrapperClass,this),this.listenTo(this.model,"change:removeWrapperClass",this.removeWrapperClass,this),this.listenTo(this.model,"change:invalid",this.toggleAriaInvalid,this),this.template="#tmpl-nf-field-"+this.model.get("wrap_template")},test:function(e){console.log("firing from trigger 1")},addWrapperClass:function(){var e=this.model.get("addWrapperClass");""!=e&&(jQuery(this.el).addClass(e),this.model.set("addWrapperClass",""))},removeWrapperClass:function(){var e=this.model.get("removeWrapperClass");""!=e&&(jQuery(this.el).removeClass(e),this.model.set("removeWrapperClass",""))},toggleAriaInvalid:function(){var e=this.model.get("invalid");jQuery("[aria-invalid]",this.el).attr("aria-invalid",JSON.stringify(e))},onRender:function(){if(this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el),void 0!==this.model.get("mask")&&""!=String(this.model.get("mask")).trim()){if("custom"==this.model.get("mask"))var e=this.model.get("custom_mask");else e=this.model.get("mask");if(Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e},Number.isInteger(e)&&(e=e.toString()),"currency"==e){var t=nfRadio.channel("app").request("get:form",this.model.get("formID")),i=t.get("thousands_sep");" "!=i&&160!=i.charCodeAt(0)||(i=" ");var n=jQuery("<div/>").html(t.get("currencySymbol")).text(),r={digitGroupSeparator:i=jQuery("<div/>").html(i).text(),decimalCharacter:jQuery("<div/>").html(t.get("decimal_point")).text(),currencySymbol:n,modifyValueOnWheel:!1},o=jQuery(jQuery(this.el).find(".nf-element")[0]);new AutoNumeric(jQuery(this.el).find(".nf-element")[0],r);var a=this;o.on("change",function(e){a.model.set("value",e.target.value)})}else jQuery(this.el).find(".nf-element").mask(e)}nfRadio.channel(this.model.get("type")).trigger("render:view",this),nfRadio.channel("fields").trigger("render:view",this)},templateHelpers:function(){var e=this;return{renderElement:function(){this.clean&&!this.value&&0===this.default&&(this.value="0");var e=_.find(this.element_templates,function(e){if(0<jQuery("#tmpl-nf-field-"+e).length)return!0});return nfRadio.channel("app").request("get:template","#tmpl-nf-field-"+e)(this)},renderLabel:function(){return nfRadio.channel("app").request("get:template","#tmpl-nf-field-label")(this)},renderLabelClasses:function(){var e="";return void 0!==this.customLabelClasses&&(e=this.customLabelClasses(e)),e},renderPlaceholder:function(){var e=this.placeholder;return void 0!==this.customPlaceholder&&(e=this.customPlaceholder(e)),""!=String(e).trim()?'placeholder="'+_.escape(e)+'"':""},renderWrapClass:function(){var e="field-wrap "+this.type+"-wrap";return this.type!==this.parentType&&(e=e+" "+this.parentType+"-wrap"),void 0!==this.old_classname&&0<String(this.old_classname).trim().length&&(e+=" "+this.old_classname+"-wrap"),"undefined"!=typeof customWrapClass&&(e=customWrapClass(e)),e},renderClasses:function(){var e=this.classes;return this.error?e+=" nf-error":e=e.replace("nf-error",""),void 0!==this.element_class&&0<String(this.element_class).trim().length&&(e+=" "+this.element_class),void 0!==this.customClasses&&(e=this.customClasses(e)),e},maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},maybeDisabled:function(){return 1==this.disable_input?"disabled":""},maybeRequired:function(){return 1==this.required?'aria-required="true" required':""},maybeDisableAutocomplete:function(){if(1==this.disable_browser_autocomplete)return'autocomplete="off"';return'autocomplete="'+this.translateAutoCompletionType(this.type)+'"'},translateAutoCompletionType:function(e){switch(e){case"address":return"street-address";case"address2":return"address-line2";case"city":return"address-level2";case"email":return"email";case"firstname":return"given-name";case"lastname":return"family-name";case"zip":return"postal-code";case"phone":return"tel";default:return"on"}},maybeInputLimit:function(){return"characters"==this.input_limit_type&&""!=String(this.input_limit).trim()?'maxlength="'+this.input_limit+'"':""},getHelpText:function(){return void 0!==this.help_text?this.help_text:""},maybeRenderHelp:function(){var e=document.createElement("p");e.innerHTML=this.help_text;var t=!1;if((0!=String(jQuery(e).text()).trim().length||0<jQuery(e).find("img").length)&&(t=!0),void 0!==this.help_text&&t){var i=document.createElement("span");i.classList.add("fa","fa-info-circle","nf-help"),i.setAttribute("data-text",this.getHelpText()),i.setAttribute("tabindex","0"),i.setAttribute("aria-describedby","hidden-help-text-"+this.id);var n=document.createElement("span");return n.textContent=this.help_text.replace(/<\/?[^>]+(>|$)/g,"").trim(),n.id="hidden-help-text-"+this.id,n.classList.add("nf-sr-only"),n.setAttribute("role","tooltip"),i.appendChild(n),i.outerHTML}return""},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.setAttribute("aria-hidden","true"),n.setAttribute("id","nf-description-"+this.id),n.appendChild(i),n.outerHTML):"")},renderNumberDefault:function(){return this.clean?0===this.default||this.default?this.default:this.placeholder?"":this.value:this.value},renderCurrencyFormatting:function(t){var i=t.toString().replace(".","||").replace(/\B(?=(\d{3})+(?!\d))/g,nfi18n.thousands_sep).replace("||",nfi18n.decimal_point);return nfRadio.channel("app").request("get:form",e.model.get("formID")).get("settings").currency_symbol+i},maybeRenderTime:function(){return"time_only"==this.date_mode||"date_and_time"==this.date_mode}}},events:{"change .nf-element":"fieldChange","keyup .nf-element":"fieldKeyup","click .nf-element":"fieldClick","click .extra":"extraClick","change .extra":"extraChange","blur .nf-element":"fieldBlur"},fieldChange:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("nfAdmin").request("change:field",t,this.model)},fieldKeyup:function(e){var t=jQuery(e.currentTarget),i=e.keyCode;nfRadio.channel("field-"+this.model.get("id")).trigger("keyup:field",t,this.model,i),nfRadio.channel(this.model.get("type")).trigger("keyup:field",t,this.model,i),nfRadio.channel("fields").trigger("keyup:field",t,this.model,i)},fieldClick:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("click:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("click:field",t,this.model),nfRadio.channel("fields").trigger("click:field",t,this.model)},extraClick:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("click:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("click:extra",e,this.model),nfRadio.channel("fields").trigger("click:extra",e,this.model)},extraChange:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("change:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("change:extra",e,this.model),nfRadio.channel("fields").trigger("change:extra",e,this.model)},fieldBlur:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("blur:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("blur:field",t,this.model),nfRadio.channel("fields").trigger("blur:field",t,this.model)},onAttach:function(){nfRadio.channel(this.model.get("type")).trigger("attach:view",this)}})}),i("views/beforeField",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-before"})}),i("views/fieldErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-error",onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)}})}),i("views/fieldErrorCollection",["views/fieldErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e,initialize:function(e){this.fieldModel=e.fieldModel},onRender:function(){0==this.fieldModel.get("errors").models.length?(this.fieldModel.removeWrapperClass("nf-error"),this.fieldModel.removeWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-pass"),this.fieldModel.setInvalid(!1)):(this.fieldModel.removeWrapperClass("nf-pass"),this.fieldModel.addWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-error"),this.fieldModel.setInvalid(!0))}})}),i("views/inputLimit",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-input-limit",initialize:function(){this.listenTo(nfRadio.channel("field-"+this.model.get("id")),"keyup:field",this.updateCount),this.count=this.model.get("input_limit"),this.render()},updateCount:function(e,t){var i=jQuery(e).val(),n=String(i).trim().replace(/\s+/gi," ").split(" "),r=n.length,o=i.length;if("characters"==this.model.get("input_limit_type")||"char"==this.model.get("input_limit_type"))jQuery(e).attr("maxlength",this.model.get("input_limit")),this.count=this.model.get("input_limit")-o;else{this.count=this.model.get("input_limit")-r;var a=this.model.get("input_limit");r>a&&jQuery(e).val(n.slice(0,a).join(" "))}this.render()},templateHelpers:function(){var e=this;return{currentCount:function(){return e.count}}}})}),i("views/afterField",["views/fieldErrorCollection","views/inputLimit"],function(e,t){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-after",initialize:function(){this.model.on("change:errors",this.changeError,this)},onRender:function(){var i=jQuery(this.el).children(".nf-error-wrap");if(this.errorCollectionView=new e({el:i,collection:this.model.get("errors"),fieldModel:this.model}),0<this.model.get("errors").length&&this.errorCollectionView.render(),void 0!==this.model.get("input_limit")&&""!=String(this.model.get("input_limit")).trim()){var n=jQuery(this.el).children(".nf-input-limit");this.inputLimitView=new t({el:n,model:this.model}),n.attr("aria-live","polite"),n.attr("role","status"),n.attr("aria-relevant","additions"),n.attr("aria-atomic",!0)}},changeError:function(){this.errorCollectionView.render()}})}),i("views/fieldRepeaterFieldLayout",["views/fieldItem","views/beforeField","views/afterField"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model})))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("views/fieldRepeaterFieldCollection",["views/fieldRepeaterFieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("views/fieldRepeaterSetLayout",["views/fieldRepeaterFieldCollection"],function(e){return Marionette.LayoutView.extend({tagName:"fieldset",template:"#tmpl-nf-field-repeater-set",regions:{fields:".nf-repeater-fieldset"},onRender:function(){this.fields.show(new e({collection:this.model.get("fields")}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"}}},events:{"click .nf-remove-fieldset":"removeSet"},removeSet:function(){nfRadio.channel("field-repeater").trigger("remove:fieldset",this.model)}})}),i("views/fieldRepeaterSetCollection",["views/fieldRepeaterSetLayout"],function(e){return Marionette.CollectionView.extend({tagName:"div",childView:e})}),i("views/fieldRepeaterLayout",["views/fieldRepeaterSetCollection"],function(e){return Marionette.LayoutView.extend({tagName:"div",template:"#tmpl-nf-field-repeater",regions:{sets:".nf-repeater-fieldsets"},initialize:function(){this.collection=this.model.get("sets"),this.listenTo(nfRadio.channel("field-repeater"),"rerender:fieldsets",this.render)},onRender:function(){this.sets.show(new e({collection:this.collection}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.appendChild(i),n.outerHTML):"")}}},events:{"click .nf-add-fieldset":"addSet"},addSet:function(){nfRadio.channel("field-repeater").trigger("add:fieldset",this.model.id)},beforeSubmit:function(){this.collection.beforeSubmit(this.model.get("sets"))}})}),i("views/fieldLayout",["views/fieldItem","views/beforeField","views/afterField","views/fieldRepeaterLayout"],function(e,t,i,n){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&("repeater"==this.model.get("type")?this.field.show(new n({model:this.model})):(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model}))))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("controllers/loadViews",["views/fieldItem","views/fieldLayout"],function(e,t){return Marionette.Object.extend({initialize:function(){nfRadio.channel("views").reply("get:fieldItem",this.getFieldItem),nfRadio.channel("views").reply("get:fieldLayout",this.getFieldLayout)},getFieldItem:function(t){return e},getFieldLayout:function(){return t}})}),i("controllers/formErrors",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"add:error",this.addError),this.listenTo(nfRadio.channel("fields"),"remove:error",this.removeError),nfRadio.channel("form").reply("get:errors",this.getFormErrors)},addError:function(e,t,i){var n=nfRadio.channel("app").request("get:form",e.get("formID"));void 0===n.get("fieldErrors")[e.get("id")]&&(n.get("fieldErrors")[e.get("id")]={}),n.get("fieldErrors")[e.get("id")][t]=i,nfRadio.channel("form-"+e.get("formID")).request("add:error","field-errors",n.get("settings").formErrorsCorrectErrors)},removeError:function(e,t){var i=nfRadio.channel("app").request("get:form",e.get("formID"));i.get("fieldErrors")[e.get("id")]=_.omit(i.get("fieldErrors")[e.get("id")],t),0==_.size(i.get("fieldErrors")[e.get("id")])&&delete i.get("fieldErrors")[e.get("id")],0==_.size(i.get("fieldErrors"))&&nfRadio.channel("form-"+e.get("formID")).request("remove:error","field-errors")},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),i}})}),i("controllers/submit",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"init:model",this.registerSubmitHandler)},registerSubmitHandler:function(e){nfRadio.channel("form-"+e.get("id")).reply("submit",this.submit)},submit:function(e){nfRadio.channel("forms").trigger("before:submit",e),nfRadio.channel("form-"+e.get("id")).trigger("before:submit",e);var t=nfRadio.channel("forms").request("maybe:validate",e);if(!1!==t&&(_.each(e.get("fields").models,function(e){e.set("clean",!1)}),e.get("formContentData").validateFields()),0==nfRadio.channel("form-"+e.get("id")).request("maybe:submit",e))return nfRadio.channel("forms").trigger("submit:cancel",e),void nfRadio.channel("form-"+e.get("id")).trigger("submit:cancel",e);if(!1!==t){var i=_.filter(e.get("errors").models,function(e){return"invalid_email"!=e.get("id")&&"email_not_sent"!=e.get("id")});if(0!=_.size(i))return nfRadio.channel("forms").trigger("submit:failed",e),nfRadio.channel("form-"+e.get("id")).trigger("submit:failed",e),!1}nfRadio.channel("forms").trigger("after:submitValidation",e),nfRadio.channel("form-"+e.get("id")).trigger("after:submitValidation",e);var n=e.get("id"),r={};_.each(e.get("fields").models,function(e){var t={value:e.get("value"),id:e.get("id")};r[e.get("id")]=nfRadio.channel(e.get("type")).request("get:submitData",t,e)||t});var o=e.get("extra"),a=e.get("settings");delete a.formContentData;var l=JSON.stringify({id:n,fields:r,settings:a,extra:o}),s={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nonce_ts:nfFrontEnd.nonce_ts,formData:l};jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:s,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n),jQuery(document).trigger("nfFormSubmitResponse",{response:r,id:e.get("id")})}catch(e){console.log(e),console.log("Parse Error"),console.log(e)}},error:function(t,i,n){console.log("ERRORS: "+n),console.log(t);try{var r=jQuery.parseJSON(t.responseText);nfRadio.channel("forms").trigger("submit:response",r,i,t,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,t)}catch(i){console.log("Parse Error: "+t.responseText),nfRadio.channel("form-"+e.get("id")).request("add:error","parse-response-ERROR",n)}}})}})}),i("views/fieldCollection",["views/fieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("controllers/defaultFilters",["views/fieldCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"before:filterData",this.registerDefaultDataFilter)},registerDefaultDataFilter:function(e){nfRadio.channel("formContent").request("add:loadFilter",this.defaultFormContentLoad,10,this),nfRadio.channel("formContent").request("add:viewFilter",this.defaultFormContentView,10,this)},defaultFormContentLoad:function(e,i,n){var r=i.get("fields"),o=nfRadio.channel("formContent").request("get:loadFilters");if(1==_.without(o,void 0).length||void 0===e||!0==e instanceof Backbone.Collection)return i.get("fields");var a=_.map(e,function(e){return i.get("fields").findWhere({key:e})},this),l=new t(a);return r.on("reset",function(e){var t=[];l.each(function(i){"submit"!=i.get("type")?t.push(e.findWhere({key:i.get("key")})):t.push(i)}),l.options={formModel:i},l.reset(t)}),l},defaultFormContentView:function(){return e}})}),i("controllers/uniqueFieldError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.removeError),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.removeError),this.listenTo(nfRadio.channel("fields"),"blur:field",this.removeError)},removeError:function(e,t){t=t||e,nfRadio.channel("fields").request("remove:error",t.get("id"),"unique_field")}})});let n=[];i("models/fieldRepeaterSetModel",[],function(){return Backbone.Model.extend({initialize:function(e,t){this.repeaterFieldModel=t.repeaterFieldModel,this.set("label",this.repeaterFieldModel.get("label")),e&&t&&this.initAllRepeaterFieldsModels(e,t),nfRadio.channel("field-repeater").reply("get:repeaterFields",this.getRepeaterFields,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldById",this.getRepeaterFieldById,this),nfRadio.channel("field-repeater").reply("get:repeaterModels",this.getAllRepeaterFieldsModels,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsetsByForm",this.getAllFieldsetsByForm,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsModelsArrayByForm",this.getAllFieldsModelsArrayByForm,this),this.listenTo(nfRadio.channel("field-repeater"),"set:repeaterModels",this.setAllRepeaterFieldsModels),this.listenTo(nfRadio.channel("field-repeater"),"set:value",this.setAllRepeatersValues)},setAllRepeaterFieldsModels:function(){this.set("repeaterFieldsetsModels",n),this.allRepeatersFieldsetsModels=n},initAllRepeaterFieldsModels:function(e,t){const i=t.repeaterFieldModel.get("formID"),r=t.repeaterFieldModel.get("id"),o=e.fields.models;let a=n.find(e=>e.id===r&&e.form===i);a?a.fields=a.fields.concat(o):n.push({form:i,id:r,fields:o}),this.setAllRepeaterFieldsModels()},getAllRepeaterFieldsModels:function(){return n},getAllFieldsetsByForm:function(e){const t=this.getAllRepeaterFieldsModels().filter(t=>t.form===e);return t},getAllFieldsModelsArrayByForm:function(e){const t=this.getAllFieldsetsByForm(e);let i=[];return t.map(e=>{i=i.concat(e.fields)}),i},getRepeaterFields:function(e){const t=this.getAllRepeaterFieldsModels();let i=t.find(t=>String(t.id)===String(e));return void 0===i&&(i=this.reverseResearchFieldsetModel(e,t)),i},reverseResearchFieldsetModel:function(e,t){let i;return _.each(t,function(t){_.each(t.fields,function(n){String(n.id).startsWith(e)&&(i=t)})}),i},getRepeaterFieldById:function(e){const t=String(e).split(".")[0],i=this.getRepeaterFields(t);if(void 0===i)return;return i.fields.find(t=>t.id===e)},setAllRepeatersValues:function(){const e=this.getAllRepeaterFieldsModels();e.length>0&&_.each(e,function(e){let t=e.fields,i=nfRadio.channel("fields").request("get:field",e.id);if(t.length>0){let e={};_.each(t,function(t){let i=t.get("value"),n=t.get("id");if(n.split("_").length>2){let t=n.split("_");t[1]=t[1].split(".")[1];let i=t[0]+"."+t[1]+"_"+t[2];delete e[n],n=i}e[n]={value:i,id:n},"date"!==t.get("type")||"string"!=typeof i||"date_and_time"!==t.get("date_mode")&&"time_only"!==t.get("date_mode")||(e[n].value={date:i,hour:t.attributes.selected_hour,minute:t.attributes.selected_minute,ampm:t.attributes.selected_ampm}),"file_upload"===t.get("type")&&t.get("value")&&(e[n].files=t.attributes.files)}),i.set("isUpdated",!1),nfRadio.channel("nfAdmin").request("update:field",i,e)}})}})}),i("models/fieldRepeaterSetCollection",["models/fieldRepeaterSetModel","models/fieldCollection"],function(e,t){return Backbone.Collection.extend({model:e,initialize:function(e,t){this.options=t,this.listenTo(nfRadio.channel("field-repeater"),"sort:fieldsets",this.sortIDs),this.listenTo(nfRadio.channel("field-repeater"),"remove:fieldset",this.removeSet),this.listenTo(nfRadio.channel("field-repeater"),"add:fieldset",this.addSet),nfRadio.channel("field-repeater").reply("get:fieldsets",this.getFieldSets,this)},addSet:function(e=!1){let i;if(e){const n=this.options.repeaterFieldModel.id===e&&this.options.repeaterFieldModel;if(i=n,n){let e=new t(this.options.templateFields,{formModel:this.options.formModel,repeaterFieldModel:n});this.add({fields:e},{repeaterFieldModel:n})}}this.sortIDs(),nfRadio.channel("field-repeater").trigger("fieldset:added",i)},removeSet:function(e){this.removeRequiredFieldsErrors(e);const t=e.repeaterFieldModel.get("formID"),i=e.repeaterFieldModel.get("id"),r=n.find(e=>e.id===i&&e.form===t);if(r){let t=[];_.each(r.fields,(i,n)=>{void 0!==i&&_.each(e.get("fields").models,n=>{const r=void 0!==i.id?i.id:i.get("id");n.id===r&&(delete e.repeaterFieldModel.get("value")[n.id],t.push(r))})}),r.fields=_.reject(r.fields,e=>void 0===e||!!t.includes(e.id)),nfRadio.channel("field-repeater").trigger("set:repeaterModels")}this.remove(e),e.destroy(),this.sortIDs(),nfRadio.channel("field-repeater").trigger("set:value")},removeRequiredFieldsErrors:function(e){let t=e.get("fields");_.each(t.models,function(e){nfRadio.channel("fields").request("remove:error",e.get("id"),"required-error")})},getFieldsets:function(){return this.models},checkTimeField:function(e){const t=e.get("id"),i=document.getElementById("hour-select-"+t),n=document.getElementById("minute-select-"+t),r=0===e.attributes.hours_24?"12":"00";if(!i||!n)return;n.value=void 0!==e.attributes.selected_minute?e.attributes.selected_minute:"00",i.value=void 0!==e.attributes.selected_hour?e.attributes.selected_hour:r;const o=document.getElementById("nf-field-"+t+"-wrap").querySelector("#ampm-select");o&&(o.value=void 0!==e.attributes.selected_ampm?e.attributes.selected_ampm:"am")},sortIDs:function(){const e=this.getFieldsets(),t=[];_.each(e,function(e,i){let n=e.get("fields");e.set("index",i+1),_.each(n.models,function(e){const n=String(e.id).split("_")[0],r=String(n).split(".").length>1&&String(n).split(".").pop();if(!r)return;const o=e.collection.options.repeaterFieldModel.id+"."+r+"_"+i;e.set("id",o),"date"!==e.get("type")||"date_and_time"!==e.get("date_mode")&&"time_only"!==e.get("date_mode")||t.push(e)})}),nfRadio.channel("field-repeater").trigger("rerender:fieldsets"),t.forEach(e=>{this.checkTimeField(e)})}})}),i("controllers/fieldRepeater",["models/fieldRepeaterSetCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("repeater"),"init:model",this.initRepeater)},initRepeater:function(i){if(void 0===i.collection.options.formModel)return!1;let n=new t(i.get("fields"),{formModel:i.collection.options.formModel,repeaterFieldModel:i});i.set("sets",new e([{fields:n}],{templateFields:i.get("fields"),formModel:i.collection.options.formModel,repeaterFieldModel:i})),nfRadio.channel("field-repeater").trigger("sort:fieldsets")}})}),i("controllers/actionGA",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSendGaEvent)},actionSendGaEvent:function(e){void 0!==e.data.actions&&void 0!==e.data.actions.googleanalytics&&e.data.actions.googleanalytics.forEach(t=>{const i=t.event_name;if(void 0!==i)if(void 0!==t.method_type&&"ga4"===t.method_type)if("function"==typeof gtag){const t={event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};gtag("event",i,t)}else"object"==typeof dataLayer?console.warn("gtag isn't defined. But GTM was detected, did you mean to use GTM in the action settings?"):console.warn("gtag isn't defined. Please make sure you have GA4 installed on your site.");else if(void 0!==t.method_type&&"gtm"===t.method_type)if("object"==typeof dataLayer){const t={event:i,event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};dataLayer.push(t)}else"function"==typeof gtag?console.warn("GTM isn't defined. But GA4 was detected, did you mean to use GA4 in the action settings?"):console.warn("GTM isn't defined. Please make sure you have GTM installed on your site.");else console.warn("GTM and gtag aren't defined. Please make sure you have GTM or GA4 installed on your site.");else console.warn("No event name defined in the GA4 action settings. Please define an event name.")})}})}),i("controllers/loadControllers",["controllers/formData","controllers/fieldError","controllers/changeField","controllers/changeEmail","controllers/changeDate","controllers/fieldCheckbox","controllers/fieldCheckboxList","controllers/fieldImageList","controllers/fieldRadio","controllers/fieldNumber","controllers/mirrorField","controllers/confirmField","controllers/updateFieldModel","controllers/submitButton","controllers/submitDebug","controllers/getFormErrors","controllers/validateRequired","controllers/submitError","controllers/actionRedirect","controllers/actionSuccess","controllers/fieldSelect","controllers/coreSubmitResponse","controllers/fieldProduct","controllers/fieldTotal","controllers/fieldQuantity","controllers/calculations","controllers/dateBackwardsCompat","controllers/fieldDate","controllers/fieldRecaptcha","controllers/fieldRecaptchaV3","controllers/fieldHTML","controllers/helpText","controllers/fieldTextbox","controllers/fieldTextareaRTE","controllers/fieldStarRating","controllers/fieldTerms","controllers/formContentFilters","controllers/loadViews","controllers/formErrors","controllers/submit","controllers/defaultFilters","controllers/uniqueFieldError","controllers/fieldRepeater","controllers/actionGA"],function(e,t,i,n,r,o,a,l,s,d,c,f,u,h,m,g,p,v,y,b,R,_,w,F,x,M,C,k,T,E,j,D,q,V,I,O,Q,S,L,A,N,z,B,Y){return Marionette.Object.extend({initialize:function(){new S,new L,new A,new o,new a,new l,new s,new d,new R,new w,new F,new x,new T,new E,new j,new D,new q,new V,new I,new O,new Q,new z,new B,new t,new i,new n,new r,new c,new f,new u,new h,new m,new g,new p,new v,new y,new b,new Y,new _,new M,new N,new C,new k,new e}})}),i("views/beforeForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-form"})}),i("views/formErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-error",onRender:function(){}})}),i("views/formErrorCollection",["views/formErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e})}),i("views/honeyPot",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-hp",events:{"keyup .nf-field-hp":"maybeError","change .nf-field-hp":"maybeError"},maybeError:function(e){if(0==jQuery(e.target).val().length)nfRadio.channel("form-"+this.model.get("id")).request("remove:error","honeyPot");else{var t=nfRadio.channel("app").request("get:form",this.model.get("id"));nfRadio.channel("form-"+this.model.get("id")).request("add:error","honeyPot",t.get("settings").honeypotHoneypotError)}}})}),i("views/afterFormContent",["views/formErrorCollection","views/honeyPot"],function(e,t){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-after-fields",regions:{errors:".nf-form-errors",hp:".nf-form-hp"},onShow:function(){this.errors.show(new e({collection:this.model.get("errors")})),this.hp.show(new t({model:this.model}))}})}),i("views/beforeFormContent",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-fields",templateHelpers:function(){return{renderFieldsMarkedRequired:function(){return this.fields.filter({required:1}).length?this.fieldsMarkedRequired:""}}}})}),i("views/formLayout",["views/afterFormContent","views/beforeFormContent","models/fieldCollection"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-form-layout",regions:{beforeFormContent:".nf-before-form-content",formContent:".nf-form-content",afterFormContent:".nf-after-form-content"},initialize:function(){nfRadio.channel("form-"+this.model.get("id")).reply("get:el",this.getEl,this),this.listenTo(this.model,"hide",this.hide)},onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)},onShow:function(){this.beforeFormContent.show(new t({model:this.model}));var i=this.model.get("formContentData"),n=nfRadio.channel("formContent").request("get:viewFilters"),r=_.without(n,void 0),o=_.first(r);formContentView=o();var a={data:i,formModel:this.model};!1!=i instanceof Backbone.Collection?a.collection=i:!1!=i instanceof Backbone.Model&&(a.model=i),this.formContent.show(new formContentView(a)),this.afterFormContent.show(new e({model:this.model}))},getEl:function(){return this.el},templateHelpers:function(){return{renderClasses:function(){return""}}},hide:function(){jQuery(this.el).hide()}})}),i("views/afterForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-after-form"})}),i("views/mainLayout",["views/beforeForm","views/formLayout","views/afterForm"],function(e,t,i){return Marionette.LayoutView.extend({template:"#tmpl-nf-layout",regions:{responseMsg:".nf-response-msg",beforeForm:".nf-before-form",formLayout:".nf-form-layout",afterForm:".nf-after-form"},initialize:function(){this.$el=jQuery("#nf-form-"+this.model.id+"-cont"),this.el="#nf-form-"+this.model.id+"-cont",this.render(),this.beforeForm.show(new e({model:this.model})),this.formLayout.show(new t({model:this.model,fieldCollection:this.options.fieldCollection})),this.afterForm.show(new i({model:this.model})),this.listenTo(this.model,"hide",this.hide)},hide:function(){jQuery(this.el).find(".nf-form-title").hide()}})});var r=function(e,t,i){void 0!==e&&0<e.length?this.locale=e.split("_").join("-"):this.locale="en-US",this.thousands_sep=t||",",this.decimal_sep=i||".",this.uniqueElememts=function(e,t,i){return i.indexOf(e)===t},this.numberDecoder=function(e){var t="",i=!1;"-"===(e=e.toString()).charAt(0)&&(i=!0,e=e.replace("-",""));var n=(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").filter(function(e){return!e.match(/[0-9]/)}),r=n.filter(this.uniqueElememts);switch(r.length){case 0:t=e;break;case 1:var o="";if(1==n.length)separator=n.pop(),o=3==e.split(separator).pop().length&&separator==this.thousands_sep?"":".";else separator=r.pop();t=e.split(separator).join(o);break;case 2:var a,l=r[0];a="."===l?new RegExp("[.]","g"):new RegExp(l,"g"),t=e.replace(a,"");var s,d=r[1];s="."===d?new RegExp("[.]","g"):new RegExp(d,"g"),t=t.replace(s,".");break;default:return"NaN"}return i&&(t="-"+t),this.debug("Number Decoder "+e+" -> "+t),t},this.numberEncoder=function(e,t){return e=this.numberDecoder(e),Intl.NumberFormat(this.locale,{minimumFractionDigits:t,maximumFractionDigits:t}).format(e)},this.debug=function(e){window.nfLocaleConverterDebug&&console.log(e)}};i("../nfLocaleConverter",function(){}),void 0!==nfInlineVars.nfForms&&(window.nfForms=nfInlineVars.nfForms),function(e){var t=e.fn.val;e.fn.val=function(){var i;arguments.length>0&&(i=t.apply(this,[]));var n=t.apply(this,arguments);return arguments.length>0&&i!=t.apply(this,[])&&e(this).hasClass("nf-element")&&e(this).change(),n}}(jQuery),document.addEventListener("DOMContentLoaded",function(){t(["models/formCollection","models/formModel","models/fieldCollection","controllers/loadControllers","views/mainLayout","../nfLocaleConverter"],function(e,t,i,n,o){if("undefined"!=typeof nfForms){var a=Marionette.Application.extend({forms:{},initialize:function(e){var t=this;Marionette.Renderer.render=function(e,i){return(e=t.template(e))(i)},this.urlParameters=_.object(_.compact(_.map(location.search.slice(1).split("&"),function(e){if(e)return e.split("=")}))),void 0!==this.urlParameters.nf_resume&&this.listenTo(nfRadio.channel("form-"+this.urlParameters.nf_resume),"loaded",this.restart),nfRadio.channel("app").reply("locale:decodeNumber",this.decodeNumber),nfRadio.channel("app").reply("locale:encodeNumber",this.encodeNumber);new n;nfRadio.channel("app").trigger("after:loadControllers"),nfRadio.channel("app").reply("get:template",this.template)},onStart:function(){var e=nfRadio.channel("app").request("get:forms");_.each(e.models,function(e,t){var i=new o({model:e,fieldCollection:e.get("fields")});nfRadio.channel("form").trigger("render:view",i),jQuery(document).trigger("nfFormReady",i)})},restart:function(e){if(void 0!==this.urlParameters.nf_resume){var t={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nf_resume:this.urlParameters};nfRadio.channel("form-"+e.get("id")).trigger("disable:submit"),nfRadio.channel("form-"+e.get("id")).trigger("processingLabel"),this.listenTo(nfRadio.channel("form"),"render:view",function(){jQuery("#nf-form-"+e.get("id")+"-cont .nf-field-container:not(.submit-container)").hide()}),jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:t,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n)}catch(e){console.log("Parse Error")}},error:function(e,t,i){console.log("ERRORS: "+t),nfRadio.channel("forms").trigger("submit:response","error",t,e,i)}})}},template:function(e){return e.startsWith("script")||(e="script"+e),_.template(jQuery(e).html(),{evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"})},encodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e)},decodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberDecoder(e)}});(new a).start()}else jQuery(".nf-form-cont").empty()})}),i("main",function(){})}();1 !function(){var e,t,i;!function(n){var r,o,a,l,s={},d={},c={},f={},u=Object.prototype.hasOwnProperty,h=[].slice,m=/\.js$/;function g(e,t){return u.call(e,t)}function p(e,t){var i,n,r,o,a,l,s,d,f,u,h,g=t&&t.split("/"),p=c.map,v=p&&p["*"]||{};if(e){for(a=(e=e.split("/")).length-1,c.nodeIdCompat&&m.test(e[a])&&(e[a]=e[a].replace(m,"")),"."===e[0].charAt(0)&&g&&(e=g.slice(0,g.length-1).concat(e)),f=0;f<e.length;f++)if("."===(h=e[f]))e.splice(f,1),f-=1;else if(".."===h){if(0===f||1===f&&".."===e[2]||".."===e[f-1])continue;f>0&&(e.splice(f-1,2),f-=2)}e=e.join("/")}if((g||v)&&p){for(f=(i=e.split("/")).length;f>0;f-=1){if(n=i.slice(0,f).join("/"),g)for(u=g.length;u>0;u-=1)if((r=p[g.slice(0,u).join("/")])&&(r=r[n])){o=r,l=f;break}if(o)break;!s&&v&&v[n]&&(s=v[n],d=f)}!o&&s&&(o=s,l=d),o&&(i.splice(0,l,o),e=i.join("/"))}return e}function v(e,t){return function(){var i=h.call(arguments,0);return"string"!=typeof i[0]&&1===i.length&&i.push(null),o.apply(n,i.concat([e,t]))}}function y(e){return function(t){s[e]=t}}function b(e){if(g(d,e)){var t=d[e];delete d[e],f[e]=!0,r.apply(n,t)}if(!g(s,e)&&!g(f,e))throw new Error("No "+e);return s[e]}function R(e){var t,i=e?e.indexOf("!"):-1;return i>-1&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function _(e){return e?R(e):[]}function w(e){return function(){return c&&c.config&&c.config[e]||{}}}a=function(e,t){var i,n,r=R(e),o=r[0],a=t[1];return e=r[1],o&&(i=b(o=p(o,a))),o?e=i&&i.normalize?i.normalize(e,(n=a,function(e){return p(e,n)})):p(e,a):(o=(r=R(e=p(e,a)))[0],e=r[1],o&&(i=b(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:i}},l={require:function(e){return v(e)},exports:function(e){var t=s[e];return void 0!==t?t:s[e]={}},module:function(e){return{id:e,uri:"",exports:s[e],config:w(e)}}},r=function(e,t,i,r){var o,c,u,h,m,p,R,w=[],F=typeof i;if(p=_(r=r||e),"undefined"===F||"function"===F){for(t=!t.length&&i.length?["require","exports","module"]:t,m=0;m<t.length;m+=1)if("require"===(c=(h=a(t[m],p)).f))w[m]=l.require(e);else if("exports"===c)w[m]=l.exports(e),R=!0;else if("module"===c)o=w[m]=l.module(e);else if(g(s,c)||g(d,c)||g(f,c))w[m]=b(c);else{if(!h.p)throw new Error(e+" missing "+c);h.p.load(h.n,v(r,!0),y(c),{}),w[m]=s[c]}u=i?i.apply(s[e],w):void 0,e&&(o&&o.exports!==n&&o.exports!==s[e]?s[e]=o.exports:u===n&&R||(s[e]=u))}else e&&(s[e]=i)},e=t=o=function(e,t,i,s,d){if("string"==typeof e)return l[e]?l[e](t):b(a(e,_(t)).f);if(!e.splice){if((c=e).deps&&o(c.deps,c.callback),!t)return;t.splice?(e=t,t=i,i=null):e=n}return t=t||function(){},"function"==typeof i&&(i=s,s=d),s?r(n,e,t,i):setTimeout(function(){r(n,e,t,i)},4),o},o.config=function(e){return o(e)},e._defined=s,(i=function(e,t,i){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(i=t,t=[]),g(s,e)||g(d,e)||(d[e]=[e,t,i])}).amd={jQuery:!0}}(),i("../../../node_modules/almond/almond",function(){}),i("models/fieldErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/fieldErrorCollection",["models/fieldErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/fieldModel",["models/fieldErrorCollection"],function(e){return Backbone.Model.extend({defaults:{placeholder:"",value:"",label_pos:"",classes:"ninja-forms-field",reRender:!1,mirror_field:!1,confirm_field:!1,clean:!0,disabled:"",visible:!0,invalid:!1},initialize:function(){var t=this.get("type");this.set("formID",this.collection.options.formModel.get("id")),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"reset",this.resetModel),this.bind("change",this.changeModel,this),this.bind("change:value",this.changeValue,this),this.set("errors",new e),"listimage"===t&&(this.get=this.listimageGet,this.set=this.listimageSet),nfRadio.channel("fields").trigger("init:model",this),nfRadio.channel(this.get("type")).trigger("init:model",this),nfRadio.channel("fields-"+this.get("type")).trigger("init:model",this),void 0!==this.get("parentType")&&nfRadio.channel(this.get("parentType")).trigger("init:model",this),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"loaded",this.formLoaded),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"before:submit",this.beforeSubmit)},listimageGet:function(e){return"options"===e&&(e="image_options"),Backbone.Model.prototype.get.call(this,e)},listimageSet:function(e,t){return"options"===e&&(e="image_options"),Backbone.Model.prototype.set.call(this,e,t)},changeModel:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:model",this),nfRadio.channel(this.get("type")).trigger("change:model",this),nfRadio.channel("fields").trigger("change:model",this)},changeValue:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:modelValue",this),nfRadio.channel(this.get("type")).trigger("change:modelValue",this),nfRadio.channel("fields").trigger("change:modelValue",this)},addWrapperClass:function(e){this.set("addWrapperClass",e)},removeWrapperClass:function(e){this.set("removeWrapperClass",e)},setInvalid:function(e){this.set("invalid",e)},formLoaded:function(){nfRadio.channel("fields").trigger("formLoaded",this),nfRadio.channel("fields-"+this.get("type")).trigger("formLoaded",this)},beforeSubmit:function(e){nfRadio.channel(this.get("type")).trigger("before:submit",this),nfRadio.channel("fields").trigger("before:submit",this)},getValue:function(){return this.get("value")}})}),i("models/fieldCollection",["models/fieldModel"],function(e){var t=Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,this.on("reset",function(e){nfRadio.channel("fields").trigger("reset:collection",e)},this),nfRadio.channel("fields").reply("get:firstFieldByOrder",this.getFirstFieldByOrder)},validateFields:function(){_.each(this.models,function(e){if("repeater"===e.get("type")){const t=nfRadio.channel("field-repeater").request("get:repeaterFieldsModelsArrayByForm",e.get("formID"));_.each(t,function(e){e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)})}else e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)},this);var e=nfRadio.channel("form-"+this.models[0].get("formID")).request("get:form");_.size(e.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(e.get("fieldErrors")))},showFields:function(){this.invoke("set",{visible:!0}),this.invoke(function(){this.trigger("change:value",this)})},hideFields:function(){this.invoke("set",{visible:!1}),this.invoke(function(){this.trigger("change:value",this)})},getFirstFieldByOrder:function(e){let t=0;return _.each(e,function(e){const i=nfRadio.channel("fields").request("get:field",e).get("order");t=0===t||i<t?e:t}),t}});return t}),i("models/formErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/formErrorCollection",["models/formErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/formModel",["models/fieldCollection","models/formErrorCollection"],function(e,t){return Backbone.Model.extend({defaults:{beforeForm:"",afterForm:"",beforeFields:"",afterFields:"",wrapper_class:"",element_class:"",hp:"",fieldErrors:{},extra:{}},initialize:function(){_.each(this.get("settings"),function(e,t){this.set(t,e)},this),this.set("loadedFields",this.get("fields")),this.set("fields",new e(this.get("fields"),{formModel:this})),this.set("errors",new t),nfRadio.channel("form").trigger("before:filterData",this);var i=this.get("formContentData");i||(i=this.get("fieldContentsData"));var n=nfRadio.channel("formContent").request("get:loadFilters"),r=_.without(n,void 0);i=_.first(r)(i,this,this),this.set("formContentData",i),nfRadio.channel("forms").trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).reply("get:fieldByKey",this.getFieldByKey,this),nfRadio.channel("form-"+this.get("id")).reply("add:error",this.addError,this),nfRadio.channel("form-"+this.get("id")).reply("remove:error",this.removeError,this),nfRadio.channel("form-"+this.get("id")).reply("get:extra",this.getExtra,this),nfRadio.channel("form-"+this.get("id")).reply("add:extra",this.addExtra,this),nfRadio.channel("form-"+this.get("id")).reply("remove:extra",this.removeExtra,this),nfRadio.channel("form-"+this.get("id")).reply("get:form",this.getForm,this),nfRadio.channel("form").trigger("loaded",this),nfRadio.channel("form").trigger("after:loaded",this),nfRadio.channel("form-"+this.get("id")).trigger("loaded",this)},getFieldByKey:function(e){return this.get("fields").findWhere({key:e})},addError:function(e,t){this.get("errors").add({id:e,msg:t}),nfRadio.channel("form-"+this.get("id")).trigger("add:error",this,e,t)},removeError:function(e){var t=this.get("errors"),i=t.get(e);t.remove(i),nfRadio.channel("form-"+this.get("id")).trigger("remove:error",this,e)},getExtra:function(e){var t=this.get("extra");return void 0===e?t:t[e]},addExtra:function(e,t){this.get("extra")[e]=t,nfRadio.channel("form-"+this.get("id")).trigger("add:extra",this,e,t)},removeExtra:function(e){delete this.get("extra")[e],nfRadio.channel("form-"+this.get("id")).trigger("remove:extra",this,e)},getForm:function(){return this}})}),i("models/formCollection",["models/formModel"],function(e){return Backbone.Collection.extend({model:e})}),i("controllers/formData",["models/formModel","models/formCollection","models/fieldCollection","models/formErrorCollection"],function(e,t,i,n){return Marionette.Object.extend({initialize:function(){this.collection=new t(nfForms),nfRadio.channel("forms").trigger("loaded",this.collection),nfRadio.channel("app").trigger("forms:loaded",this.collection),nfRadio.channel("app").reply("get:form",this.getForm,this),nfRadio.channel("app").reply("get:forms",this.getForms,this),nfRadio.channel("fields").reply("get:field",this.getField,this)},getForm:function(e){return this.collection.get(e)},getForms:function(){return this.collection},getField:function(e){var t=!1;return _.each(this.collection.models,function(i){t||(t=i.get("fields").get(e))}),void 0===t&&-1!==String(e).indexOf(".")&&(t=nfRadio.channel("field-repeater").request("get:repeaterFieldById",e)),t}})}),i("controllers/fieldError",["models/fieldErrorModel"],function(e){return Marionette.Object.extend({initialize:function(){nfRadio.channel("fields").reply("add:error",this.addError),nfRadio.channel("fields").reply("remove:error",this.removeError),nfRadio.channel("fields").reply("get:error",this.getError)},addError:function(e,t,i){var n=nfRadio.channel("fields").request("get:field",e);if(void 0!==n){var r=n.get("errors");r.add({id:t,msg:i}),n.set("errors",r),n.trigger("change:errors",n),n.set("clean",!1),nfRadio.channel("fields").trigger("add:error",n,t,i)}},removeError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e);if(void 0!==i){var n=i.get("errors"),r=n.get(t);void 0!==r&&(n.remove(r),i.set("errors",n),i.trigger("change:errors",i),nfRadio.channel("fields").trigger("remove:error",i,t))}},getError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e).get("errors").get(t);return"undefined"!=i&&i}})}),i("controllers/changeField",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("change:field",this.changeField),this.listenTo(nfRadio.channel("fields"),"blur:field",this.blurField)},changeField:function(e,t){var i=nfRadio.channel(t.get("type")).request("before:updateField",e,t);i=void 0!==(i=void 0!==i?i:nfRadio.channel(t.get("parentType")).request("before:updateField",e,t))?i:jQuery(e).val(),t.set("isUpdated",!1),t.set("clean",!1),nfRadio.channel("field-"+t.get("id")).trigger("change:field",e,t),nfRadio.channel(t.get("type")).trigger("change:field",e,t),nfRadio.channel("fields").trigger("change:field",e,t),nfRadio.channel("nfAdmin").request("update:field",t,i),t.get("repeaterField")&&nfRadio.channel("field-repeater").trigger("set:value")},blurField:function(e,t){t.set("clean",!1)}})}),i("controllers/changeEmail",[],function(){var e=nfRadio.channel("email"),t=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,i="invalid-email";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.emailKeyup),this.listenTo(e,"blur:field",this.onBlurField)},onChangeModelValue:function(e){var t=e.get("value"),i=e.get("id");this.emailChange(t,i)},onBlurField:function(e,t){var i=jQuery(e).val(),n=t.get("id");this.emailChange(i,n)},emailChange:function(e,n){if(0<e.length)if(t.test(e))nfRadio.channel("fields").request("remove:error",n,i);else{var r=nfRadio.channel("fields").request("get:field",n),o=nfRadio.channel("app").request("get:form",r.get("formID"));nfRadio.channel("fields").request("add:error",n,i,o.get("settings").changeEmailErrorMsg)}else nfRadio.channel("fields").request("remove:error",n,i)},emailKeyup:function(e,n,r){if(9==r)return!1;var o=jQuery(e).val(),a=n.get("id");if(0==o.length)nfRadio.channel("fields").request("remove:error",a,i);else if(t.test(o)||n.get("clean"))t.test(o)&&(nfRadio.channel("fields").request("remove:error",a,i),n.addWrapperClass("nf-pass"),n.set("clean",!1));else{var l=nfRadio.channel("fields").request("get:field",a),s=nfRadio.channel("app").request("get:form",l.get("formID"));nfRadio.channel("fields").request("add:error",a,i,s.get("settings").changeEmailErrorMsg),n.removeWrapperClass("nf-pass")}}})}),i("controllers/changeDate",[],function(){var e=nfRadio.channel("date"),t="invalid-date";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.dateKeyup),this.listenTo(e,"blur:field",this.onBlurField),this.listenTo(e,"change:extra",this.changeHoursMinutes,this)},onChangeModelValue:function(e){var t=moment.locale();moment.locale("ninja-forms"),this.dateChange(e),moment.locale(t)},onBlurField:function(e,t){var i=moment.locale();moment.locale("ninja-forms"),this.dateChange(t),moment.locale(i)},dateChange:function(e){var i=e.get("id"),n=e.get("value"),r=e.get("date_format");if("time_only"==e.get("date_mode"))return!1;if(0<n.length)if(this.isDateValid(n,r,i))nfRadio.channel("fields").request("remove:error",i,t);else{var o=nfRadio.channel("fields").request("get:field",i),a=nfRadio.channel("app").request("get:form",o.get("formID"));nfRadio.channel("fields").request("add:error",i,t,a.get("settings").changeDateErrorMsg)}else nfRadio.channel("fields").request("remove:error",i,t)},dateKeyup:function(e,i,n){if(9==n)return!1;var r=jQuery(e).val(),o=i.get("id"),a=i.get("date_format"),l=moment.locale();if(moment.locale("ninja-forms"),0==r.length)nfRadio.channel("fields").request("remove:error",o,t);else if(this.isDateValid(r,a,o)||i.get("clean"))this.isDateValid(r,a,o)&&(nfRadio.channel("fields").request("remove:error",o,t),i.addWrapperClass("nf-pass"),i.set("clean",!1));else{var s=nfRadio.channel("fields").request("get:field",o),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",o,t,d.get("settings").changeDateErrorMsg),i.removeWrapperClass("nf-pass")}moment.locale(l)},changeHoursMinutes:function(e,t){let i=jQuery(e.target).closest(".nf-field-element"),n=jQuery(i).find(".hour").val(),r=jQuery(i).find(".minute").val(),o=jQuery(i).find(".ampm").val();if(t.set("selected_hour",n),t.set("selected_minute",r),t.set("selected_ampm",o),"time_only"===t.get("date_mode")){const e=void 0!==o?n+":"+r+" "+o:n+":"+r;t.set("value",e)}const a=t.get("id");"string"==typeof a&&-1!==a.search(".")&&nfRadio.channel("field-repeater").trigger("set:value")},isDateValid:function(e,t,i){if(null===document.querySelector("[name='nf-field-"+i+"']"))return;const n=document.querySelector("[name='nf-field-"+i+"']")._flatpickr.parseDate(e,t);if(!n)return!1;const r=n.getTime();if(isNaN(r))return!1;const o=new Date(r);return document.querySelector("[name='nf-field-"+i+"']")._flatpickr.formatDate(o,t)===e}})}),i("controllers/fieldCheckbox",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("checkbox"),"init:model",this.registerRenderClasses),nfRadio.channel("checkbox").reply("validate:required",this.validateRequired),nfRadio.channel("checkbox").reply("validate:modelData",this.validateModelData),nfRadio.channel("checkbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("checkbox").reply("get:calcValue",this.getCalcValue,this)},beforeUpdateField:function(e,t){if(jQuery(e).prop("checked")){var i=1;jQuery(e).addClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}else{i=0;jQuery(e).removeClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label")}return i},validateRequired:function(e,t){return e[0].checked},validateModelData:function(e){return 0!=e.get("value")},getCalcValue:function(e){return 1==e.get("value")?calcValue=e.get("checked_calc_value"):calcValue=e.get("unchecked_calc_value"),calcValue},registerRenderClasses:function(e){"checked"==e.get("default_value")?e.set("value",1):e.set("value",0),e.set("customClasses",this.customClasses),e.set("customLabelClasses",this.customLabelClasses),e.set("maybeChecked",this.maybeChecked)},customClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked":e.replace("nf-checked",""),e},customLabelClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked-label":e.replace("nf-checked-label",""),e},maybeChecked:function(){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?" checked":""}})}),i("controllers/fieldCheckboxList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listcheckbox"),"init:model",this.register),this.listenTo(nfRadio.channel("terms"),"init:model",this.register),nfRadio.channel("listcheckbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("terms").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listcheckbox").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("terms").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("options").length){var t=_.filter(e.get("options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;if(_.each(this.options,function(i,n){Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],i.value)||_.indexOf(this.value,i.value))&&(t=!0),i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.fieldID=this.id,i.classes=this.classes,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label;var r=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),i.value)&&-1===_.indexOf(this.value,i.value)||(r=!0):_.isArray(this.value)||i.value!=this.value?1==i.selected&&this.clean&&void 0===this.value&&(r=!0):r=!0,i.selected=r,i.isSelected=r,i.required=this.required,i.maybeFilterHTML=this.maybeFilterHTML;var o=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-option");e+=o(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");return 0!=i.length&&_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t=Number(t)+Number(n.calc)}),t},beforeUpdateField:function(e,t){var i=t.get("value")||[];"string"==typeof i&&(i=[i]);var n=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(n),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var r=i.indexOf(n);if(-1!=r)i.splice(r,1);else if(Array.isArray(i)){var o=void 0!==i[0]?i[0].split(","):[],a=o.indexOf(n);-1!==a&&o.splice(a,1),i=o.join(",")}}return _.clone(i)}})}),i("controllers/fieldImageList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listimage"),"init:model",this.register),nfRadio.channel("listimage").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listimage").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("image_options").length){var t=_.filter(e.get("image_options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;1===this.allow_multi_select?(this.old_classname="list-checkbox",this.image_type="checkbox"):this.image_type="radio","horizontal"===this.list_orientation?this.flex_direction="row":this.flex_direction="column";var i=this,n=parseInt(this.num_columns)||1,r=1,o=1;if(_.each(this.image_options,function(a,l){this.show_option_labels?a.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(a.label):a.label:a.label="",Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],a.value)||_.indexOf(this.value,a.value))&&(t=!0),a.value==this.value&&(t=!0),void 0===a.visible&&(a.visible=!0),"horizontal"===i.list_orientation&&r<=n&&(a.styles="margin:auto;grid-column: "+r+"; grid-row = "+o,r===n?(r=1,o+=1):r+=1),a.image_type=i.image_type,a.fieldID=this.id,a.classes=this.classes,a.index=l;var s=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),a.value)&&-1===_.indexOf(this.value,a.value)||(s=!0):(_.isArray(this.value)||a.value!=this.value)&&(1!=a.selected||!this.clean||void 0!==this.value&&""!==this.value)||(s=!0),a.selected=s,a.isSelected=s,a.required=this.required,a.maybeFilterHTML=this.maybeFilterHTML;var d=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-option");e+=d(a)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var a={fieldID:this.id,classes:this.classes,value:this.value,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},l=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other");e+=l(a)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if(1==parseInt(e.get("allow_multi_select")))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0!==n&&(t=n.calc)}return t},beforeUpdateField:function(e,t){if(1!==t.get("allow_multi_select")){var i=jQuery(e).val(),n=t.get("image_options");_.each(n,function(e,t){e.value===i?(e.isSelected=!0,e.selected=!0):(e.isSelected=!1,e.selected=!1),e.isSelected?(jQuery("#nf-field-"+e.fieldID+"-"+t).addClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).addClass("nf-checked-label")):(e.selected=!1,jQuery("#nf-field-"+e.fieldID+"-"+t).removeClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).removeClass("nf-checked-label"))})}else{"string"==typeof(i=t.get("value")||[])&&(i=[i]);var r=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(r),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var o=i.indexOf(r);if(-1!=o)i.splice(o,1);else if(Array.isArray(i)){var a=i[0].split(","),l=a.indexOf(r);-1!==l&&a.splice(l,1),i=a.join(",")}}}return _.clone(i)}})}),i("controllers/fieldRadio",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listradio"),"change:modelValue",this.changeModelValue),this.listenTo(nfRadio.channel("listradio"),"init:model",this.register),nfRadio.channel("listradio").reply("get:calcValue",this.getCalcValue,this),this.listenTo(nfRadio.channel("listradio"),"change:field",this.updateCheckedClass,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),0!=e.get("options").length){var t=_.find(e.get("options"),function(e){return 1==e.selected});void 0!==t&&e.set("value",t.value)}},changeModelValue:function(e){1==e.get("show_other")&&e.trigger("reRender")},renderOptions:function(){var e="";if(""==this.value)var t=!0;else t=!1;if(_.each(this.options,function(i,n){i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.selected=!1,i.fieldID=this.id,i.classes=this.classes,i.currentValue=this.value,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label,i.required=this.required,this.clean&&1==this.selected||this.value==i.value?i.selected=!0:i.selected=!1,i.maybeFilterHTML=this.maybeFilterHTML;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-option");e+=r(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other-text")(e)}},getCalcValue:function(e){var t=0;if(0!=e.get("options").length){var i=_.find(e.get("options"),function(t){return e.get("value")==t.value});void 0!==i&&(t=i.calc)}return t},updateCheckedClass:function(e,t){jQuery('[name="'+jQuery(e).attr("name")+'"]').removeClass("nf-checked"),jQuery(e).closest("ul").find("label").removeClass("nf-checked-label"),jQuery(e).addClass("nf-checked"),jQuery(e).closest("li").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}})}),i("controllers/fieldNumber",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("number"),"init:model",this.maybeMinDefault),this.listenTo(nfRadio.channel("number"),"keyup:field",this.validateEntry)},maybeMinDefault:function(e){if(""==e.get("value")&&""==e.get("placeholder")){var t=e.get("num_min");e.set("placeholder",t)}},validateEntry:function(e,t){var i=jQuery(e),n=i.val(),r=parseFloat(n),o=i.attr("min"),a=i.attr("max"),l=i.attr("step")?i.attr("step"):"1";if(o&&r<o){var s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-min",d.get("settings").fieldNumberNumMinError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-min");if(a&&r>a){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-max",d.get("settings").fieldNumberNumMaxError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-max");let c=n.split(".");c=void 0!==c[1]?c[1].length:0;let f=l.split(".");f=void 0!==f[1]?f[1].length:0;let u=Math.pow(10,f);if(l&&n&&(c>f||0!==parseInt((u*r).toFixed())%parseInt((u*parseFloat(l)).toFixed()))){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-step",d.get("settings").fieldNumberIncrementBy+l)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-step")}})}),i("controllers/mirrorField",[],function(){var e=nfRadio.channel("fields");return Marionette.Object.extend({listeningModel:"",initialize:function(){this.listenTo(e,"init:model",this.registerMirror)},registerMirror:function(e){if(e.get("mirror_field")){this.listeningModel=e;var t=e.get("mirror_field");this.listenTo(nfRadio.channel("field-"+t),"change:modelValue",this.changeValue)}},changeValue:function(e){this.listeningModel.set("value",e.get("value")),this.listeningModel.trigger("reRender")}})}),i("controllers/confirmField",[],function(){var e=nfRadio.channel("fields"),t="confirm-mismatch";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"init:model",this.registerConfirm),this.listenTo(e,"keyup:field",this.confirmKeyup)},registerConfirm:function(e){e.get("confirm_field")&&this.listenTo(nfRadio.channel("form"),"loaded",function(t){this.registerConfirmListeners(e)})},registerConfirmListeners:function(e){var t=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",e.get("confirm_field"));void 0!==t&&(t.set("confirm_with",e.get("id")),this.listenTo(nfRadio.channel("field-"+t.get("id")),"change:modelValue",this.changeValue),this.listenTo(nfRadio.channel("field-"+e.get("id")),"change:modelValue",this.changeValue))},changeValue:function(i){if(void 0===i.get("confirm_with"))var n=i,r=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",n.get("confirm_field"));else r=i,n=e.request("get:field",r.get("confirm_with"));r.get("id");var o=n.get("id");if(""==n.get("value")||n.get("value")==r.get("value"))nfRadio.channel("fields").request("remove:error",o,t);else{var a=nfRadio.channel("fields").request("get:field",o),l=nfRadio.channel("app").request("get:form",a.get("formID"));nfRadio.channel("fields").request("add:error",o,t,l.get("settings").confirmFieldErrorMsg)}},confirmKeyup:function(e,i,n){var r=jQuery(e).val();if(i.get("confirm_field"))var o=i,a=i.get("id"),l=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",o.get("confirm_field")).get("value"),s=r;else if(i.get("confirm_with"))a=(o=nfRadio.channel("fields").request("get:field",i.get("confirm_with"))).get("id"),l=s=o.get("value");if(void 0!==o)if(""==s)nfRadio.channel("fields").request("remove:error",a,t);else if(r==l)nfRadio.channel("fields").request("remove:error",a,t);else{var d=nfRadio.channel("fields").request("get:field",a),c=nfRadio.channel("app").request("get:form",d.get("formID"));nfRadio.channel("fields").request("add:error",a,t,c.get("settings").confirmFieldErrorMsg)}}})}),i("controllers/updateFieldModel",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("update:field",this.updateField)},updateField:function(e,t){e.get("isUpdated")||(e.set("value",t),e.set("isUpdated",!0),_.isArray(t)&&e.trigger("change:value",e))}})}),i("controllers/submitButton",["controllers/submitButton"],function(e){return Marionette.Object.extend({bound:{},initialize:function(){this.listenTo(nfRadio.channel("submit"),"init:model",this.registerHandlers)},registerHandlers:function(e){if(void 0!==this.bound[e.get("id")])return!1;this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:field",this.click,this),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"before:submit",this.beforeSubmit,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:failed",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:response",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"enable:submit",this.maybeEnable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"disable:submit",this.maybeDisable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"processingLabel",this.processingLabel,e),e.listenTo(nfRadio.channel("fields"),"add:error",this.maybeDisable,e),e.listenTo(nfRadio.channel("fields"),"remove:error",this.maybeEnable,e),this.bound[e.get("id")]=!0},click:function(e,t){var i=nfRadio.channel("app").request("get:form",t.get("formID"));_.size(i.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(i.get("fieldErrors"))),nfRadio.channel("form-"+t.get("formID")).request("submit",i)},beforeSubmit:function(){this.get("disabled")||(this.set("disabled",!0),nfRadio.channel("form-"+this.get("formID")).trigger("processingLabel",this))},maybeDisable:function(e){void 0!==e&&e.get("formID")!=this.get("formID")||(this.set("disabled",!0),this.trigger("reRender"))},maybeEnable:function(e){if(void 0!==e&&e.get("formID")!=this.get("formID"))return!1;var t=nfRadio.channel("app").request("get:form",this.get("formID"));0==_.size(t.get("fieldErrors"))&&(this.set("disabled",!1),this.trigger("reRender"))},processingLabel:function(){this.set("oldLabel",this.get("label")),this.set("label",this.get("processing_label")),this.set("disabled",!0),this.trigger("reRender")},resetLabel:function(e){void 0!==e.errors&&void 0!==e.errors.nonce&&_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts||(void 0!==this.get("oldLabel")&&this.set("label",this.get("oldLabel")),this.set("disabled",!1),this.trigger("reRender"))}})}),i("controllers/submitDebug",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitDebug)},submitDebug:function(e,t,i,n){if(void 0!==e.debug){if(void 0!==e.debug.form){var r=document.createElement("span");_.each(e.debug.form,function(e,t){var i=document.createTextNode(e);r.appendChild(i),r.appendChild(document.createElement("br"))}),jQuery(".nf-debug-msg").html(r)}if(void 0!==e.debug.console){console.log("%c%s","","NINJA SUPPORT"),_.each(e.debug.console,function(e,t){console.log(e)}),console.log("%c%s","","END NINJA SUPPORT")}}}})}),i("controllers/getFormErrors",[],function(){nfRadio.channel("fields");return Marionette.Object.extend({initialize:function(e){nfRadio.channel("form").reply("get:errors",this.getFormErrors)},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&(0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),_.each(t.get("fields").models,function(e){"submit"!=e.get("type")&&e.get("errors").length>0&&((i=i||{})[e.get("id")]=e.get("errors"))})),i}})}),i("controllers/validateRequired",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"blur:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"change:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.validateKeyup),this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.validateModelData),this.listenTo(nfRadio.channel("submit"),"validate:field",this.validateModelData)},validateKeyup:function(e,t,i){if(1!=t.get("required"))return!1;t.get("clean")||this.validateRequired(e,t)},validateRequired:function(e,t){if(1!=t.get("required")||!t.get("visible"))return!1;var i=jQuery(e).val(),n=nfRadio.channel(t.get("type")).request("validate:required",e,t),r=!0,o=this.getMask(t);if(o&&i===o&&(0<t.get("errors").length||!t.get("clean"))&&(r=!1),String(i).trim()||(r=!1),void 0!==n)var a=n;else a=r;this.maybeError(a,t)},getMask:function(e){var t=e.get("mask");if(void 0!==t){switch(t){case"":break;case"currency":t=nfi18n.currencySymbol;break;case"custom":t=e.get("custom_mask");default:t=(t=(t=t.replace(/9/g,"_")).replace(/a/g,"_")).replace(/\*/g,"_")}return t}},validateModelData:function(e){if(1!=e.get("required")||!e.get("visible")||e.get("clean"))return!1;if(e.get("errors").get("required-error"))return!1;currentValue=e.get("value");var t=!0;String(currentValue).trim()||(t=!1);var i=nfRadio.channel(e.get("type")).request("validate:modelData",e);if(void 0!==i)var n=i;else n=t;this.maybeError(n,e)},maybeError:function(e,t){if(e)nfRadio.channel("fields").request("remove:error",t.get("id"),"required-error");else{var i=nfRadio.channel("form-"+t.get("formID")).request("get:form");void 0!==i&&nfRadio.channel("fields").request("add:error",t.get("id"),"required-error",i.get("settings").validateRequiredField)}}})}),i("controllers/submitError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitErrors),nfRadio.channel("submit").reply("focus:firstInvalidInput",this.focusFirstInvalidInput)},submitErrors:function(e,t,i,n){if(_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts){nfFrontEnd.ajaxNonce=e.errors.nonce.new_nonce,nfFrontEnd.nonce_ts=e.errors.nonce.nonce_ts;var r=nfRadio.channel("app").request("get:form",n);nfRadio.channel("form-"+n).request("submit",r)}if(_.size(e.errors.fields)>0&&_.each(e.errors.fields,function(e,t){"object"==typeof e?nfRadio.channel("fields").request("add:error",t,e.slug,e.message):nfRadio.channel("fields").request("add:error",t,"required-error",e)}),_.size(e.errors.form)>0&&_.each(e.errors.form,function(e,t){nfRadio.channel("form-"+n).request("remove:error",t),nfRadio.channel("form-"+n).request("add:error",t,e)}),void 0!==e.errors.last&&void 0!==e.errors.last.message){var o="background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;";console.log("%c NINJA FORMS SUPPORT: SERVER ERROR",o),console.log(e.errors.last.message),console.log("%c END SERVER ERROR MESSAGE",o)}jQuery("#nf-form-"+n+"-cont .nf-field-container").show()},focusFirstInvalidInput:function(e){const t=nfRadio.channel("fields").request("get:firstFieldByOrder",e);null!==document.getElementById("nf-field-"+t)&&document.getElementById("nf-field-"+t).focus()}})}),i("controllers/actionRedirect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionRedirect)},actionRedirect:function(e){void 0!==e.data.halt&&void 0!==e.data.halt.redirect&&""!=e.data.halt.redirect&&(window.location=e.data.halt.redirect),0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.redirect&&""!=e.data.actions.redirect&&(window.location=e.data.actions.redirect)}})}),i("controllers/actionSuccess",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){if(0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.success_message&&""!=e.data.actions.success_message){var t=e.data.form_id,i=jQuery("#nf-form-"+t+"-cont .nf-response-msg");const l=e.data.actions.success_message.replace(/(<([^>]+)>)/gi,"");i.attr("tabindex","0"),i.attr("aria-live","assertive"),i.attr("aria-label",l),i.html(e.data.actions.success_message).show(),i.focus();var n=i.offset().top,r=i.offset().top+i.outerHeight(),o=jQuery(window).scrollTop()+jQuery(window).height(),a=jQuery(window).scrollTop();o>r&&a<n||jQuery("html, body").animate({scrollTop:i.offset().top-50},300)}}})}),i("controllers/fieldSelect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"init:model",function(e){"list"==e.get("parentType")&&this.register(e)},this),nfRadio.channel("listselect").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("listmultiselect").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherAttributes",this.renderOtherAttributes),0!=e.get("options").length){var t=e.get("value");if("listmultiselect"==e.get("type"))var i=_.filter(e.get("options"),function(e){return 1==e.selected}),n=i=_.map(i,function(e){return e.value});else if("listradio"!==e.get("type")){if(void 0===(i=_.find(e.get("options"),function(e){return 1==e.selected}))&&(i=_.first(e.get("options"))),void 0!==i&&void 0!==i.value)n=i.value;else if(void 0!==i)n=i.label}void 0!==t&&""!==t&&Array.isArray(t)?e.set("value",t):void 0!==i&&e.set("value",n)}},renderOptions:function(){var e="";return _.each(this.options,function(t){if(_.isArray(this.value)){if("listmultiselect"===this.type&&0<this.value.length&&-1!=_.indexOf(this.value[0].split(","),t.value))var i=!0;else if(-1!=_.indexOf(this.value,t.value))i=!0}else if(_.isArray(this.value)||t.value!=this.value)if(1==t.selected&&this.clean&&void 0===this.value)i=!0;else i=!1;else var i=!0;void 0===t.visible&&(t.visible=!0),t.selected=i,t.fieldID=this.id,t.classes=this.classes,t.currentValue=this.value,t.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(t.label):t.label,t.maybeFilterHTML=this.maybeFilterHTML;var n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listselect-option");e+=n(t)},this),e},renderOtherAttributes:function(){var e="";"listmultiselect"==this.type&&(e=(e+=" multiple")+' size="'+(this.multi_size||5)+'"');return e},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if("listmultiselect"==e.get("type"))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0===n&&(n=e.get("options")[0]),t=n.calc}return t}})}),i("controllers/coreSubmitResponse",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){var t=nfRadio.channel("app").request("get:form",e.data.form_id);if(0!=_.size(e.errors))return!1;1==e.data.settings.clear_complete&&(t.get("fields").reset(t.get("loadedFields")),1!=e.data.settings.hide_complete&&nfRadio.channel("captcha").trigger("reset")),1==e.data.settings.hide_complete&&t.trigger("hide")}})}),i("controllers/fieldProduct",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("product"),"init:model",this.register),nfRadio.channel("product").reply("get:calcValue",this.getCalcValue,this)},register:function(e){e.set("renderProductQuantity",this.renderProductQuantity),e.set("renderProduct",this.renderProduct),e.set("renderOptions",this.renderOptions)},renderProduct:function(){switch(this.product_type){case"user":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-textbox")(this);case"hidden":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-hidden")(this);case"dropdown":return nfRadio.channel("app").request("get:template","#tmpl-nf-product-dropdown")(this);default:return nfRadio.channel("app").request("get:template","#tmpl-nf-product-single")(this)}},renderProductQuantity:function(){if(1==this.product_use_quantity)return nfRadio.channel("app").request("get:template","#tmpl-nf-product-quantity")(this)},renderOptions:function(){var e=this,t="";return _.each(this.options,function(i){if(1==i.selected)var n=!0;else n=!1;i.selected=n,i.fieldID=e.id,i.classes=e.classes,i.currentValue=e.value;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-product-"+e.product_type+"-option");t+=r(i)}),t},getCalcValue:function(e){return e.get("product_price")*e.get("value")}})}),i("controllers/fieldTotal",[],function(){return Marionette.Object.extend({totalModel:{},productTotals:{},initialize:function(){this.listenTo(nfRadio.channel("total"),"init:model",this.register),this.listenTo(nfRadio.channel("shipping"),"init:model",this.registerShipping)},register:function(e){this.totalModel=e;var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"loaded",this.onFormLoaded),this.listenTo(nfRadio.channel("product"),"change:modelValue",this.onChangeProduct),this.listenTo(nfRadio.channel("quantity"),"change:modelValue",this.onChangeQuantity)},registerShipping:function(e){this.shippingCost=e.get("shipping_cost")},onFormLoaded:function(e){var t=e.get("fields").models,i={},n={};for(var r in t){var o=t[r],a=o.get("id");if("product"==o.get("type"))i[a]=o;else if("quantity"==o.get("type")){n[l=o.get("product_assignment")]=o}}for(var l in i){var s=i[l],d=Number(s.get("product_price"));n[l]?d*=n[l].get("value"):1==s.get("product_use_quantity")&&(d*=s.get("value")),this.productTotals[l]=d}this.updateTotal()},onChangeProduct:function(e){var t=e.get("id"),i=Number(e.get("product_price")),n=Number(e.get("value"))*i;this.productTotals[t]=n,this.updateTotal()},onChangeQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t),n=Number(i.get("product_price")),r=Number(e.get("value"))*n;this.productTotals[t]=r,this.updateTotal()},updateTotal:function(){var e=0;for(var t in this.productTotals)e+=Number(this.productTotals[t]);e&&this.shippingCost&&(e+=Number(this.shippingCost)),this.totalModel.set("value",e.toFixed(2)),this.totalModel.trigger("reRender")}})}),i("controllers/fieldQuantity",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("quantity"),"init:model",this.registerQuantity)},registerQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t);i&&i.set("product_use_quantity",0)}})}),i("models/calcModel",[],function(){return Backbone.Model.extend({initialize:function(){this.set("formID",this.collection.options.formModel.get("id")),this.set("fields",{}),nfRadio.channel("calc").trigger("init:model",this),this.on("change:value",this.changeValue,this)},changeField:function(e){nfRadio.channel("calc").trigger("change:field",this,e)},changeCalc:function(e){nfRadio.channel("calc").trigger("change:calc",this,e)},changeValue:function(){nfRadio.channel("calc").trigger("change:value",this)}})}),i("models/calcCollection",["models/calcModel"],function(e){return Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,_.each(e,function(e){void 0!==e.dec&&(""===e.dec.toString().trim()&&(e.dec=2),e.dec=parseInt(e.dec))}),nfRadio.channel("form-"+t.formModel.get("id")).reply("get:calc",this.getCalc,this)},getCalc:function(e){return this.findWhere({name:e})}})}),i("controllers/calculations",["models/calcCollection"],function(e){return Marionette.Object.extend({initialize:function(){this.calcs={},this.displayFields={},this.listenTo(nfRadio.channel("form"),"loaded",this.registerCalcs),this.listenTo(nfRadio.channel("fields"),"reset:collection",this.resetCalcs),this.listenTo(nfRadio.channel("calc"),"change:field",this.changeField),this.listenTo(nfRadio.channel("calc"),"change:calc",this.changeCalc);var e=this;_.each(nfFrontEnd.use_merge_tags.calculations,function(t){e.listenTo(nfRadio.channel("fields-"+t),"init:model",e.initDisplayField)}),this.listenTo(nfRadio.channel("calc"),"change:value",this.updateDisplayFields),this.init={}},resetCalcs:function(e){void 0!==e.options.formModel&&this.registerCalcs(e.options.formModel)},registerCalcs:function(t){var i=new e(t.get("settings").calculations,{formModel:t});this.calcs[t.get("id")]=i;var n=this;_.each(i.models,function(e){n.init[e.get("name")]=!0,n.setupCalc(e)})},setupCalc:function(e){var t=this,i=e.get("eq"),n=i,r=(e.get("name"),i.match(new RegExp(/{field:(.*?)}/g)));r&&(r=r.map(function(i){var r=i.replace(":calc}","").replace("}","").replace("{field:","");if(fieldModel=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",r),"undefined"!=typeof fieldModel){fieldModel.set("clean",!1),fieldModel.on("change:value",e.changeField,e);var o=t.getCalcValue(fieldModel);t.updateCalcFields(e,r,o),n=t.replaceKey("field",r,o,n)}}));var o=i.match(new RegExp(/{calc:(.*?)}/g));o&&(o=o.map(function(i){var r=i.replace("}","").replace("{calc:",""),o=e.collection.findWhere({name:r});if(void 0!==o){o.on("change:value",e.changeCalc,e);var a=o.get("value");n=t.replaceKey("calc",r,a,n)}})),n=(n=n.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,0)).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+n+" -> "+this.localeDecodeEquation(n)+" (Setup)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(n))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},updateCalcFields:function(e,t,i){var n=e.get("fields");n[t]=i,e.set("fields",n)},getCalcValue:function(e){var t=nfRadio.channel(e.get("type")).request("get:calcValue",e),i=e.get("value");void 0!==t&&(t||0===t)&&(i=t);var n=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point),o=n.numberDecoder(i),a=n.numberEncoder(i);return t=void 0!==o&&jQuery.isNumeric(o)?a:0,e.get("visible")||(t=0),t},replaceKey:function(e,t,i,n){n=n||calcModel.get("eq"),tag="{"+e+":"+t+"}";var r=new RegExp(tag,"g");calcTag="{"+e+":"+t+":calc}";var o=new RegExp(calcTag,"g");return n=(n=n.replace(r,i)).replace(o,i)},replaceAllKeys:function(e){var t=e.get("eq"),i=this;_.each(e.get("fields"),function(e,n){t=i.replaceKey("field",n,e,t)});var n=t.match(new RegExp(/{calc:(.*?)}/g));return n&&_.each(n,function(i){var n=i.replace("}","").replace("{calc:",""),r=e.collection.findWhere({name:n});if(void 0!==r){var o=new RegExp(i,"g");t=t.replace(o,r.get("value"))}}),t},changeField:function(e,t){var i=t.get("key"),n=this.getCalcValue(t);this.updateCalcFields(e,i,n);var r=this.replaceAllKeys(e);r=(r=r.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,"0")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+r+" -> "+this.localeDecodeEquation(r)+" (Change Field)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(r))).toFixed(e.get("dec")))}catch(e){this.debug()&&console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},initDisplayField:function(e){if(e.get("default")&&"string"==typeof e.get("default")){var t=e.get("default").match(new RegExp(/{calc:(.*?)}/g));t&&_.each(t,function(t){t=t.replace("{calc:","").replace("}","").replace(":2",""),this.displayFields[t]=this.displayFields[t]||[],this.displayFields[t].push(e)},this)}},updateDisplayFields:function(e){var t=this;void 0!==this.displayFields[e.get("name")]&&_.each(this.displayFields[e.get("name")],function(i){var n="",r=(n="html"===i.get("type")?i.get("value"):i.get("default")).match(new RegExp(/<span data-key="calc:(.*?)<\/span>/g));_.each(r,function(e){var t="{"+e.replace('<span data-key="',"").replace(/">(.*?)<\/span>/,"")+"}";n=n.replace(e,t)});var o=n.match(new RegExp(/{calc:(.*?)}/g));_.each(o,function(e){var r=e.replace("}","").replace("{calc:","").replace(":2",""),o=t.calcs[i.get("formID")].findWhere({name:r}),a=new RegExp(e,"g"),l=o.get("value");void 0!==l&&(l=t.applyLocaleFormatting(l,o)),n="html"===i.get("type")?n.replace(a,'<span data-key="calc:'+r+'">'+l+"</span>"):l}),i.set("value",n),t.init[e.get("name")]||i.trigger("reRender"),t.init[e.get("name")]=!1})},getCalc:function(e,t){return this.calcs[t].findWhere({name:e})},changeCalc:function(e,t){var i=this.replaceAllKeys(e);i=(i=i.replace("[","").replace("]","")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+i+" -> "+this.localeDecodeEquation(i)+" (Change Calc)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(i))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},applyLocaleFormatting:function(e,t){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e,t.get("dec"))},localeDecodeEquation:function(e){var t="",i="",n=/[0-9.,]/,o=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point);return(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").forEach(function(e){n.test(e)?i+=e:(0<i.length&&(t+=o.numberDecoder(i),i=""),t+=e)}),0<i.length&&(t+=o.numberDecoder(i)),t},debug:function(e){window.nfCalculationsDebug&&console.log(e)}})}),i("controllers/dateBackwardsCompat",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(Backbone.Radio.channel("pikaday-bc"),"init",this.dateBackwardsCompat)},dateBackwardsCompat:function(e,t){if(e.pikaday={},e.pikaday._o={},nfRadio.channel("pikaday").trigger("init",e,t),void 0!==e.pikaday._o.disableDayFn&&e.set("disable",[e.pikaday._o.disableDayFn]),void 0!==e.pikaday._o.i18n||void 0!==e.pikaday._o.firstDay){let t=e.config.locale;void 0!==e.pikaday._o.firstDay&&(t.firstDayOfWeek=e.pikaday._o.firstDay),void 0!==e.pikaday._o.i18n&&(void 0!==e.pikaday._o.i18n.weekdays&&(t.weekdays.longhand=e.pikaday._o.i18n.weekdays),void 0!==e.pikaday._o.i18n.weekdaysShort&&(t.weekdays.shorthand=e.pikaday._o.i18n.weekdaysShort),void 0!==e.pikaday._o.i18n.months&&jQuery(".flatpickr-monthDropdown-months > option").each(function(){this.text=e.pikaday._o.i18n.months[this.value]})),e.set("locale",t)}Object.keys(e.pikaday._o).length>0&&(console.log("%cDeprecated Ninja Forms Pikaday custom code detected.","color: Red; font-size: large"),console.log("You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details."))}})}),i("controllers/fieldDate",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("date"),"init:model",this.initModel),this.listenTo(nfRadio.channel("date"),"render:view",this.initDatepicker)},initModel:function(e){this.registerFunctions(e)},registerFunctions:function(e){e.set("renderHourOptions",this.renderHourOptions),e.set("renderMinuteOptions",this.renderMinuteOptions),e.set("maybeRenderAMPM",this.maybeRenderAMPM),e.set("customClasses",this.customClasses),e.getValue=this.getValue},renderHourOptions:function(){return this.hours_options},renderMinuteOptions:function(){return this.minutes_options},maybeRenderAMPM:function(){if(void 0!==this.hours_24&&1!=this.hours_24)return`<div style="float:left;" class="time-wrap"><select id="ampm-select" class="ampm extra" aria-label="am-pm-select" ${1==this.required?'aria-required="true" required':""}><option value="am">AM</option><option value="pm">PM</option></select></div>`},initDatepicker:function(e){e.model.set("el",e.el);var t=jQuery(e.el).find(".nf-element")[0];if(e.listenTo(nfRadio.channel("form-"+e.model.get("formID")),"before:submit",this.beforeSubmit,e),void 0!==e.model.get("date_mode")&&"time_only"==e.model.get("date_mode"))return jQuery(t).hide(),!1;var i=this.convertDateFormat(e.model.get("date_format"));e.model.set("date_format",i);var n={onReady:(e,i,n)=>{n.altInput.setAttribute("aria-labelledby",jQuery(t).attr("aria-labelledby")),n.altInput.setAttribute("aria-invalid",!1)},dateFormat:i,altFormat:i,altInput:!0,ariaDateFormat:i,mode:"single",allowInput:!0,disableMobile:"true",minDate:this.getMinDate(e.model),maxDate:this.getMaxDate(e.model)};const r=this.checkCustomLocale();r&&(n.locale=r);let o=nfRadio.channel("flatpickr").request("filter:settings",n,e);void 0!==o&&(n=o);var a=flatpickr(t,n);1!=e.model.get("date_default")||e.model.get("value")||(a.defaultDate=new Date,a.setDate(a.defaultDate),e.model.set("value",a.defaultDate)),1==e.model.get("date_default")&&"string"==typeof e.model.get("id")&&e.model.get("id").includes(".")&&"object"==typeof e.model.get("value")&&this.isSameDay(e.model.get("value"),new Date)&&(a.defaultDate=new Date,a.setDate(a.defaultDate,!0),e.model.set("value",a.defaultDate)),nfRadio.channel("pikaday-bc").trigger("init",a,e.model,e),nfRadio.channel("flatpickr").trigger("init",a,e.model,e)},beforeSubmit:function(e){if(_.isObject(this.model.get("value"))){const e=this.el.querySelector("input[type='hidden']").value;this.model.set("value",e)}if(-1!==this.el.dataset.fieldId.search(".")&&(nfRadio.channel("field-repeater").trigger("set:value"),"time_only"===this.model.get("date_mode")))return;if("date_only"==this.model.get("date_mode"))return!1;let t=jQuery(this.el).find(".hour").val(),i=jQuery(this.el).find(".minute").val(),n=jQuery(this.el).find(".ampm").val(),r=this.model.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a={date:o,hour:t,minute:i,ampm:n};this.model.set("value",a)},getMinDate:function(e){let t=null;if(void 0!==e.get("year_range_start")){const i=e.get("year_range_start");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},getMaxDate:function(e){let t=null;if(void 0!==e.get("year_range_end")){const i=e.get("year_range_end");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},convertDateFormat:function(e){!e&&this.model&&(e=this.model.get("date_format")),e||(e="default");const t={"MM/DD/YYYY":"m/d/Y","MM-DD-YYYY":"m-d-Y","MM.DD.YYYY":"m.d.Y","DD/MM/YYYY":"d/m/Y","DD-MM-YYYY":"d-m-Y","DD.MM.YYYY":"d.m.Y","YYYY-MM-DD":"Y-m-d","YYYY/MM/DD":"Y/m/d","YYYY.MM.DD":"Y.m.d","dddd, MMMM D YYYY":"l, F d Y",default:nfi18n.dateFormat?nfi18n.dateFormat:"default"};return Object.keys(t).includes(e)?t[e]:e},customClasses:function(e){return"date_and_time"==this.date_mode&&(e+=" date-and-time"),e},checkCustomLocale:function(){let e={};return nfi18n&&((nfi18n.months||nfi18n.monthsShort)&&(e.months={},nfi18n.months&&(e.months.longhand=nfi18n.months),nfi18n.monthsShort&&(e.months.shorthand=nfi18n.monthsShort)),(nfi18n.weekdays||nfi18n.weekdaysShort)&&(e.weekdays={},nfi18n.weekdays&&(e.weekdays.longhand=nfi18n.weekdays),nfi18n.weekdaysShort&&(e.weekdays.shorthand=nfi18n.weekdaysShort)),nfi18n.startOfWeek&&(e.firstDayOfWeek=nfi18n.startOfWeek)),!_.isEmpty(e)&&e},getValue:function(){if("date_only"==this.get("date_mode"))return this.get("value");let e=this.get("el"),t=jQuery(e).find(".hour").val(),i=jQuery(e).find(".minute").val(),n=jQuery(e).find(".ampm").val(),r=this.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a="";return void 0!==o&&(a+=o),void 0!==t&&void 0!==i&&(a+=" "+t+":"+i),void 0!==n&&(a+=" "+n),a},isSameDay:function(e,t){const i=new Date(e),n=new Date(t);return i.setHours(0,0,0,0),n.setHours(0,0,0,0),i.getTime()===n.getTime()}})}),i("controllers/fieldRecaptcha",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha"),"init:model",this.initRecaptcha),this.listenTo(nfRadio.channel("forms"),"submit:response",this.resetRecaptcha)},initRecaptcha:function(e){nfRadio.channel("recaptcha").reply("update:response",this.updateResponse,this,e.id)},updateResponse:function(e,t){var i=nfRadio.channel("fields").request("get:field",t);i.set("value",e),nfRadio.channel("fields").request("remove:error",i.get("id"),"required-error")},resetRecaptcha:function(){var e=0;jQuery(".g-recaptcha").each(function(){try{grecaptcha.reset(e)}catch(e){console.log("Notice: Error trying to reset grecaptcha.")}e++})}})}),i("controllers/fieldRecaptchaV3",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha_v3"),"init:model",this.initRecaptcha)},initRecaptcha:function(e){const t=e.get("formID");this.processRecaptcha(t,e),setInterval(this.processRecaptcha,11e4,t,e)},processRecaptcha:function(e,t){try{nfRadio.channel("form-"+e).trigger("disable:submit",t),grecaptcha.ready(function(){grecaptcha.execute(t.get("site_key"),{action:"register"}).then(function(i){t.set("value",i),nfRadio.channel("form-"+e).trigger("enable:submit",t)})})}catch(e){jQuery(document).on("nfFormReady",e=>{let i,n=nf_check_recaptcha_consent();t.collection.models.forEach(e=>{"submit"===e.get("type")&&(i=e.get("id"))}),nfRadio.channel("fields").request("add:error",i,"recaptcha-v3-missing",t.collection.options.formModel.get("settings").recaptchaConsentMissing),this.nf_build_default_consent_action(t,n.services,i,e)})}},nf_build_default_consent_action:function(e,t,i,n){if(!(t.length<=1&&t.includes("missing_cookie")||t.length<=0)){let r=document.createElement("div");r.setAttribute("id","nf_recaptcha_consent_event"),r.innerText+=e.collection.options.formModel.get("settings").recaptchaConsentEvent;let o=new CustomEvent("nf_consent_link",{detail:{services:t,element:r,submitFieldID:i,layoutView:n}});document.dispatchEvent(o);const a=document.getElementsByClassName("nf-error-recaptcha-v3-missing");Array.prototype.slice.call(a).forEach(e=>{e.append(r)})}}})}),i("controllers/fieldHTML",[],function(){return Marionette.Object.extend({htmlFields:[],trackedMergeTags:[],initialize:function(){this.listenTo(Backbone.Radio.channel("fields-html"),"init:model",this.setupFieldMergeTagTracking)},setupFieldMergeTagTracking:function(e){this.htmlFields.push(e);var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"init:model",function(t){var i=e.get("default").match(new RegExp(/{field:(.*?)}/g));i&&(_.each(i,function(e){var i=e.replace("{field:","").replace("}",""),n=t.get("fields").findWhere({key:i});void 0!==n&&(this.trackedMergeTags.push(n),this.listenTo(nfRadio.channel("field-"+n.get("id")),"change:modelValue",this.updateFieldMergeTags))},this),this.updateFieldMergeTags())},this)},updateFieldMergeTags:function(e){_.each(this.htmlFields,function(e){var t=e.get("value");_.each(this.trackedMergeTags,function(e){var i=t.match(new RegExp(/<span data-key="field:(.*?)<\/span>/g));_.each(i,function(i){-1<i.indexOf('data-key="field:'+e.get("key"))&&(t=t.replace(i,"{field:"+e.get("key")+"}"))});var n="{field:"+e.get("key")+"}";const r="repeater"===e.get("type")?this.displayRepeaterData(e):e.getValue();t=t.replace(n,'<span data-key="field:'+e.get("key")+'">'+r+"</span>")},this),e.set("value",t),e.trigger("reRender")},this)},displayRepeaterData:function(e){const t=Object.keys(e.getValue());let i="",n=[];return _.each(t,function(e){if(-1===n.indexOf(e)){const t=nfRadio.channel("fields").request("get:field",e);if(void 0!==t){if(-1===["submit","html","hidden","password","passwordconfirm","divider","hr","note","unknown","button","confirm","creditcard","creditcardcvc","creditcardexpiration","creditcardfullname","creditcardnumber","creditcardzip","recaptcha","recaptcha_v3"].indexOf(t.get("type"))&&t.getValue().toString().length>0){const r=Number(e.split("_").pop())+1;i+="<p>"+t.get("label")+" "+r+" : "+t.getValue()+"</p>",n.push(e)}}}}),i}})}),i("controllers/helpText",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"render:view",this.initHelpText),this.listenTo(nfRadio.channel("field-repeater"),"fieldset:added",this.initHelpText),nfRadio.channel("form").reply("init:help",this.initHelpText)},initHelpText:function(e){e&&!e.el&&"function"==typeof e.get&&"repeater"===e.get("type")&&(e.el="#nf-form-"+e.get("formID")+"-cont"),jQuery(e.el).find(".nf-help").each(function(e){var t=jQuery(this).jBox("Tooltip",{theme:"TooltipBorder",content:jQuery(this).data("text"),trigger:"mouseenter focus",closeOnMouseleave:!0,closeOnClick:!0});jQuery(this).on("keydown mouseleave",function(){t.close()})})}})}),i("controllers/fieldTextbox",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("textbox").reply("get:calcValue",this.getCalcValue,this)},getCalcValue:function(e){if("currency"==e.get("mask")){var t=nfRadio.channel("app").request("get:form",e.get("formID")),i=void 0!==t?t.get("currencySymbol"):"",n=jQuery("<textarea />").html(i).text();return e.get("value").replace(n,"")}return e.get("value")}})}),i("controllers/fieldTextareaRTE",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("textarea"),"render:view",this.initTextareaRTEs),this.listenTo(nfRadio.channel("textarea"),"click:extra",this.clickExtra),this.meta_image_frame,this.currentContext={},void 0!==jQuery.summernote&&(jQuery.summernote.options.icons={align:"dashicons dashicons-editor-alignleft",alignCenter:"dashicons dashicons-editor-aligncenter",alignJustify:"dashicons dashicons-editor-justify",alignLeft:"dashicons dashicons-editor-alignleft",alignRight:"dashicons dashicons-editor-alignright",indent:"dashicons dashicons-editor-indent",outdent:"dashicons dashicons-editor-outdent",bold:"dashicons dashicons-editor-bold",caret:"dashicons dashicons-arrow-down",close:"dashicons dashicons-dismiss",code:"dashicons dashicons-editor-code",eraser:"dashicons dashicons-editor-removeformatting",italic:"dashicons dashicons-editor-italic",link:"dashicons dashicons-admin-links",unlink:"dashicons dashicons-editor-unlink",magic:"dashicons dashicons-editor-paragraph",minus:"dashicons dashicons-minus",orderedlist:"dashicons dashicons-editor-ol",redo:"dashicons dashicons-redo",square:"dashicons fa-square",table:"dashicons dashicons-editor-table",underline:"dashicons dashicons-editor-underline",undo:"dashicons dashicons-undo",unorderedlist:"dashicons dashicons-editor-ul"})},initTextareaRTEs:function(e){if(1!=e.model.get("textarea_rte"))return!1;var t=this,i=[["paragraphStyle",["style"]],["fontStyle",["bold","italic","underline","clear"]],["lists",["ul","ol"]],["paragraph",["paragraph"]],["customGroup",["linkButton","unlink"]],["table",["table"]],["actions",["undo","redo"]]];1==e.model.get("textarea_media")&&0!=userSettings.uid&&i.push(["tools",["mediaButton"]]),jQuery(e.el).find(".nf-element").summernote({toolbar:i,buttons:{linkButton:function(e){return t.linkButton(e)},mediaButton:function(e){return t.mediaButton(e)}},height:150,codemirror:{theme:"monokai",lineNumbers:!0},prettifyHtml:!0,callbacks:{onChange:function(t){e.model.set("value",jQuery(this).summernote("code"))}}});var n=jQuery(e.el).find(".link-button").next(".dropdown-menu").find("button");n.replaceWith(function(){return jQuery("<div/>",{class:jQuery(n).attr("class"),html:this.innerHTML})})},linkButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-button"),r=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-dropdown");return i.buttonGroup([i.button({className:"dropdown-toggle link-button",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertLink,click:function(i){t.clickLinkButton(i,e)},data:{toggle:"dropdown"}}),i.dropdown([i.buttonGroup({children:[i.button({contents:r({}),tooltip:""})]})])]).render()},mediaButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-media-button");return i.button({className:"dropdown-toggle",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertMedia,click:function(i){t.openMediaManager(i,e)}}).render()},openMediaManager:function(e,t){if(t.invoke("editor.saveRange"),this.meta_image_frame)this.meta_image_frame.open();else{this.meta_image_frame=wp.media.frames.meta_image_frame=wp.media({title:nfi18n.fieldTextareaRTESelectAFile,button:{text:"insert"}});var i=this;this.meta_image_frame.on("select",function(){var e=i.meta_image_frame.state().get("selection").first().toJSON();i.insertMedia(e,t)}),this.meta_image_frame.open()}},clickLinkButton:function(e,t){var i=t.invoke("editor.createRange");t.invoke("editor.saveRange");var n=i.toString();this.currentContext=t,jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("hide.bs.dropdown",function(e){return!1}),jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("shown.bs.dropdown",function(e){jQuery(e.target).parent().parent().find(".link-text").val(n),jQuery(e.target).parent().parent().find(".link-url").focus()})},clickExtra:function(e){var t=jQuery(e.target).parent().find(".link-text"),i=jQuery(e.target).parent().find(".link-url"),n=jQuery(e.target).parent().find(".link-new-window");if(this.currentContext.invoke("editor.restoreRange"),jQuery(e.target).hasClass("insert-link")){var r=t.val(),o=i.val(),a=!!n.prop("checked");0!=r.length&&0!=o.length&&this.currentContext.invoke("editor.createLink",{text:r,url:o,isNewWindow:a})}t.val(""),i.val(""),n.prop("checked",!1),jQuery(e.target).closest("div.note-btn-group.open").removeClass("open")},insertMedia:function(e,t){t.invoke("editor.restoreRange"),"image"==e.type?t.invoke("editor.insertImage",e.url):t.invoke("editor.createLink",{text:e.filename,url:e.url})}})}),i("controllers/fieldStarRating",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("starrating"),"init:model",this.register),this.listenTo(nfRadio.channel("starrating"),"render:view",this.initRating)},register:function(e){e.set("renderRatings",this.renderRatings)},initRating:function(e){jQuery(e.el).find(".starrating").rating()},renderRatings:function(){for(var e=document.createElement("span"),t=0;t<=this.number_of_stars-1;t++){var i=nfRadio.channel("app").request("get:template","#tmpl-nf-field-starrating-star"),n=t+1,r="";this.value==n&&(r="checked");var o=i({id:this.id,classes:this.classes,num:n,checked:r,required:this.required});e.appendChild(document.createRange().createContextualFragment(o))}return e.innerHTML}})}),i("controllers/fieldTerms",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("terms"),"init:model",this.register)},register:function(e){this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:extra",this.clickExtra),this.listenTo(nfRadio.channel("field-"+e.get("id")),"keyup:field",this.keyUpExtra)},clickExtra:function(e,t){var i=jQuery(e.currentTarget).parent().find(".extra-value").val();this.addOption(t,i)},keyUpExtra:function(e,t,i){13==i&&this.addOption(t,e.val())},addOption:function(e,t){if(t){var i={label:t,value:t,selected:0};e.get("options").push(i),e.get("value").push(t),e.trigger("reRender")}}})}),i("controllers/formContentFilters",[],function(){return Marionette.Object.extend({initialize:function(){this.viewFilters=[],this.loadFilters=[],nfRadio.channel("formContent").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("formContent").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("formContent").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("formContent").reply("get:loadFilters",this.getLoadFilters,this),nfRadio.channel("fieldContents").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("fieldContents").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("fieldContents").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("fieldContents").reply("get:loadFilters",this.getLoadFilters,this)},addViewFilter:function(e,t){this.viewFilters[t]=e},getViewFilters:function(){return this.viewFilters},addLoadFilter:function(e,t){this.loadFilters[t]=e},getLoadFilters:function(){return this.loadFilters}})}),i("views/fieldItem",[],function(){return Marionette.ItemView.extend({tagName:"div",initialize:function(){this.listenTo(this.model,"reRender",this.render,this),this.listenTo(this.model,"change:addWrapperClass",this.addWrapperClass,this),this.listenTo(this.model,"change:removeWrapperClass",this.removeWrapperClass,this),this.listenTo(this.model,"change:invalid",this.toggleAriaInvalid,this),this.template="#tmpl-nf-field-"+this.model.get("wrap_template")},test:function(e){console.log("firing from trigger 1")},addWrapperClass:function(){var e=this.model.get("addWrapperClass");""!=e&&(jQuery(this.el).addClass(e),this.model.set("addWrapperClass",""))},removeWrapperClass:function(){var e=this.model.get("removeWrapperClass");""!=e&&(jQuery(this.el).removeClass(e),this.model.set("removeWrapperClass",""))},toggleAriaInvalid:function(){var e=this.model.get("invalid");jQuery("[aria-invalid]",this.el).attr("aria-invalid",JSON.stringify(e))},onRender:function(){if(this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el),void 0!==this.model.get("mask")&&""!=String(this.model.get("mask")).trim()){if("custom"==this.model.get("mask"))var e=this.model.get("custom_mask");else e=this.model.get("mask");if(Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e},Number.isInteger(e)&&(e=e.toString()),"currency"==e){var t=nfRadio.channel("app").request("get:form",this.model.get("formID")),i=t.get("thousands_sep");" "!=i&&160!=i.charCodeAt(0)||(i=" ");var n=jQuery("<div/>").html(t.get("currencySymbol")).text(),r={digitGroupSeparator:i=jQuery("<div/>").html(i).text(),decimalCharacter:jQuery("<div/>").html(t.get("decimal_point")).text(),currencySymbol:n,modifyValueOnWheel:!1},o=jQuery(jQuery(this.el).find(".nf-element")[0]);new AutoNumeric(jQuery(this.el).find(".nf-element")[0],r);var a=this;o.on("change",function(e){a.model.set("value",e.target.value)})}else jQuery(this.el).find(".nf-element").mask(e)}nfRadio.channel(this.model.get("type")).trigger("render:view",this),nfRadio.channel("fields").trigger("render:view",this)},templateHelpers:function(){var e=this;return{renderElement:function(){this.clean&&!this.value&&0===this.default&&(this.value="0");var e=_.find(this.element_templates,function(e){if(0<jQuery("#tmpl-nf-field-"+e).length)return!0});return nfRadio.channel("app").request("get:template","#tmpl-nf-field-"+e)(this)},renderLabel:function(){return nfRadio.channel("app").request("get:template","#tmpl-nf-field-label")(this)},renderLabelClasses:function(){var e="";return void 0!==this.customLabelClasses&&(e=this.customLabelClasses(e)),e},renderPlaceholder:function(){var e=this.placeholder;return void 0!==this.customPlaceholder&&(e=this.customPlaceholder(e)),""!=String(e).trim()?'placeholder="'+_.escape(e)+'"':""},renderWrapClass:function(){var e="field-wrap "+this.type+"-wrap";return this.type!==this.parentType&&(e=e+" "+this.parentType+"-wrap"),void 0!==this.old_classname&&0<String(this.old_classname).trim().length&&(e+=" "+this.old_classname+"-wrap"),"undefined"!=typeof customWrapClass&&(e=customWrapClass(e)),e},renderClasses:function(){var e=this.classes;return this.error?e+=" nf-error":e=e.replace("nf-error",""),void 0!==this.element_class&&0<String(this.element_class).trim().length&&(e+=" "+this.element_class),void 0!==this.customClasses&&(e=this.customClasses(e)),e},maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},maybeDisabled:function(){return 1==this.disable_input?"disabled":""},maybeRequired:function(){return 1==this.required?'aria-required="true" required':""},maybeDisableAutocomplete:function(){if(1==this.disable_browser_autocomplete)return'autocomplete="off"';return'autocomplete="'+this.translateAutoCompletionType(this.type)+'"'},translateAutoCompletionType:function(e){switch(e){case"address":return"street-address";case"address2":return"address-line2";case"city":return"address-level2";case"email":return"email";case"firstname":return"given-name";case"lastname":return"family-name";case"zip":return"postal-code";case"phone":return"tel";default:return"on"}},maybeInputLimit:function(){return"characters"==this.input_limit_type&&""!=String(this.input_limit).trim()?'maxlength="'+this.input_limit+'"':""},getHelpText:function(){return void 0!==this.help_text?this.help_text:""},maybeRenderHelp:function(){var e=document.createElement("p");e.innerHTML=this.help_text;var t=!1;if((0!=String(jQuery(e).text()).trim().length||0<jQuery(e).find("img").length)&&(t=!0),void 0!==this.help_text&&t){var i=document.createElement("span");i.classList.add("fa","fa-info-circle","nf-help"),i.setAttribute("data-text",this.getHelpText()),i.setAttribute("tabindex","0"),i.setAttribute("aria-describedby","hidden-help-text-"+this.id);var n=document.createElement("span");return n.textContent=this.help_text.replace(/<\/?[^>]+(>|$)/g,"").trim(),n.id="hidden-help-text-"+this.id,n.classList.add("nf-sr-only"),n.setAttribute("role","tooltip"),i.appendChild(n),i.outerHTML}return""},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.setAttribute("aria-hidden","true"),n.setAttribute("id","nf-description-"+this.id),n.appendChild(i),n.outerHTML):"")},renderNumberDefault:function(){return this.clean?0===this.default||this.default?this.default:this.placeholder?"":this.value:this.value},renderCurrencyFormatting:function(t){var i=t.toString().replace(".","||").replace(/\B(?=(\d{3})+(?!\d))/g,nfi18n.thousands_sep).replace("||",nfi18n.decimal_point);return nfRadio.channel("app").request("get:form",e.model.get("formID")).get("settings").currency_symbol+i},maybeRenderTime:function(){return"time_only"==this.date_mode||"date_and_time"==this.date_mode}}},events:{"change .nf-element":"fieldChange","keyup .nf-element":"fieldKeyup","click .nf-element":"fieldClick","click .extra":"extraClick","change .extra":"extraChange","blur .nf-element":"fieldBlur"},fieldChange:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("nfAdmin").request("change:field",t,this.model)},fieldKeyup:function(e){var t=jQuery(e.currentTarget),i=e.keyCode;nfRadio.channel("field-"+this.model.get("id")).trigger("keyup:field",t,this.model,i),nfRadio.channel(this.model.get("type")).trigger("keyup:field",t,this.model,i),nfRadio.channel("fields").trigger("keyup:field",t,this.model,i)},fieldClick:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("click:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("click:field",t,this.model),nfRadio.channel("fields").trigger("click:field",t,this.model)},extraClick:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("click:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("click:extra",e,this.model),nfRadio.channel("fields").trigger("click:extra",e,this.model)},extraChange:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("change:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("change:extra",e,this.model),nfRadio.channel("fields").trigger("change:extra",e,this.model)},fieldBlur:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("blur:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("blur:field",t,this.model),nfRadio.channel("fields").trigger("blur:field",t,this.model)},onAttach:function(){nfRadio.channel(this.model.get("type")).trigger("attach:view",this)}})}),i("views/beforeField",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-before"})}),i("views/fieldErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-error",onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)}})}),i("views/fieldErrorCollection",["views/fieldErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e,initialize:function(e){this.fieldModel=e.fieldModel},onRender:function(){0==this.fieldModel.get("errors").models.length?(this.fieldModel.removeWrapperClass("nf-error"),this.fieldModel.removeWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-pass"),this.fieldModel.setInvalid(!1)):(this.fieldModel.removeWrapperClass("nf-pass"),this.fieldModel.addWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-error"),this.fieldModel.setInvalid(!0))}})}),i("views/inputLimit",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-input-limit",initialize:function(){this.listenTo(nfRadio.channel("field-"+this.model.get("id")),"keyup:field",this.updateCount),this.count=this.model.get("input_limit"),this.render()},updateCount:function(e,t){var i=jQuery(e).val(),n=String(i).trim().replace(/\s+/gi," ").split(" "),r=n.length,o=i.length;if("characters"==this.model.get("input_limit_type")||"char"==this.model.get("input_limit_type"))jQuery(e).attr("maxlength",this.model.get("input_limit")),this.count=this.model.get("input_limit")-o;else{this.count=this.model.get("input_limit")-r;var a=this.model.get("input_limit");r>a&&jQuery(e).val(n.slice(0,a).join(" "))}this.render()},templateHelpers:function(){var e=this;return{currentCount:function(){return e.count}}}})}),i("views/afterField",["views/fieldErrorCollection","views/inputLimit"],function(e,t){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-after",initialize:function(){this.model.on("change:errors",this.changeError,this)},onRender:function(){var i=jQuery(this.el).children(".nf-error-wrap");if(this.errorCollectionView=new e({el:i,collection:this.model.get("errors"),fieldModel:this.model}),0<this.model.get("errors").length&&this.errorCollectionView.render(),void 0!==this.model.get("input_limit")&&""!=String(this.model.get("input_limit")).trim()){var n=jQuery(this.el).children(".nf-input-limit");this.inputLimitView=new t({el:n,model:this.model}),n.attr("aria-live","polite"),n.attr("role","status"),n.attr("aria-relevant","additions"),n.attr("aria-atomic",!0)}},changeError:function(){this.errorCollectionView.render()}})}),i("views/fieldRepeaterFieldLayout",["views/fieldItem","views/beforeField","views/afterField"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model})))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("views/fieldRepeaterFieldCollection",["views/fieldRepeaterFieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("views/fieldRepeaterSetLayout",["views/fieldRepeaterFieldCollection"],function(e){return Marionette.LayoutView.extend({tagName:"fieldset",template:"#tmpl-nf-field-repeater-set",regions:{fields:".nf-repeater-fieldset"},onRender:function(){this.fields.show(new e({collection:this.model.get("fields")}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"}}},events:{"click .nf-remove-fieldset":"removeSet"},removeSet:function(){nfRadio.channel("field-repeater").trigger("remove:fieldset",this.model)}})}),i("views/fieldRepeaterSetCollection",["views/fieldRepeaterSetLayout"],function(e){return Marionette.CollectionView.extend({tagName:"div",childView:e})}),i("views/fieldRepeaterLayout",["views/fieldRepeaterSetCollection"],function(e){return Marionette.LayoutView.extend({tagName:"div",template:"#tmpl-nf-field-repeater",regions:{sets:".nf-repeater-fieldsets"},initialize:function(){this.collection=this.model.get("sets"),this.listenTo(nfRadio.channel("field-repeater"),"rerender:fieldsets",this.render)},onRender:function(){this.sets.show(new e({collection:this.collection}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.appendChild(i),n.outerHTML):"")}}},events:{"click .nf-add-fieldset":"addSet"},addSet:function(){nfRadio.channel("field-repeater").trigger("add:fieldset",this.model.id)},beforeSubmit:function(){this.collection.beforeSubmit(this.model.get("sets"))}})}),i("views/fieldLayout",["views/fieldItem","views/beforeField","views/afterField","views/fieldRepeaterLayout"],function(e,t,i,n){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&("repeater"==this.model.get("type")?this.field.show(new n({model:this.model})):(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model}))))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("controllers/loadViews",["views/fieldItem","views/fieldLayout"],function(e,t){return Marionette.Object.extend({initialize:function(){nfRadio.channel("views").reply("get:fieldItem",this.getFieldItem),nfRadio.channel("views").reply("get:fieldLayout",this.getFieldLayout)},getFieldItem:function(t){return e},getFieldLayout:function(){return t}})}),i("controllers/formErrors",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"add:error",this.addError),this.listenTo(nfRadio.channel("fields"),"remove:error",this.removeError),nfRadio.channel("form").reply("get:errors",this.getFormErrors)},addError:function(e,t,i){var n=nfRadio.channel("app").request("get:form",e.get("formID"));void 0===n.get("fieldErrors")[e.get("id")]&&(n.get("fieldErrors")[e.get("id")]={}),n.get("fieldErrors")[e.get("id")][t]=i,nfRadio.channel("form-"+e.get("formID")).request("add:error","field-errors",n.get("settings").formErrorsCorrectErrors)},removeError:function(e,t){var i=nfRadio.channel("app").request("get:form",e.get("formID"));i.get("fieldErrors")[e.get("id")]=_.omit(i.get("fieldErrors")[e.get("id")],t),0==_.size(i.get("fieldErrors")[e.get("id")])&&delete i.get("fieldErrors")[e.get("id")],0==_.size(i.get("fieldErrors"))&&nfRadio.channel("form-"+e.get("formID")).request("remove:error","field-errors")},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),i}})}),i("controllers/submit",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"init:model",this.registerSubmitHandler)},registerSubmitHandler:function(e){nfRadio.channel("form-"+e.get("id")).reply("submit",this.submit)},submit:function(e){nfRadio.channel("forms").trigger("before:submit",e),nfRadio.channel("form-"+e.get("id")).trigger("before:submit",e);var t=nfRadio.channel("forms").request("maybe:validate",e);if(!1!==t&&(_.each(e.get("fields").models,function(e){e.set("clean",!1)}),e.get("formContentData").validateFields()),0==nfRadio.channel("form-"+e.get("id")).request("maybe:submit",e))return nfRadio.channel("forms").trigger("submit:cancel",e),void nfRadio.channel("form-"+e.get("id")).trigger("submit:cancel",e);if(!1!==t){var i=_.filter(e.get("errors").models,function(e){return"invalid_email"!=e.get("id")&&"email_not_sent"!=e.get("id")});if(0!=_.size(i))return nfRadio.channel("forms").trigger("submit:failed",e),nfRadio.channel("form-"+e.get("id")).trigger("submit:failed",e),!1}nfRadio.channel("forms").trigger("after:submitValidation",e),nfRadio.channel("form-"+e.get("id")).trigger("after:submitValidation",e);var n=e.get("id"),r={};_.each(e.get("fields").models,function(e){var t={value:e.get("value"),id:e.get("id")};r[e.get("id")]=nfRadio.channel(e.get("type")).request("get:submitData",t,e)||t});var o=e.get("extra"),a=e.get("settings");delete a.formContentData;var l=JSON.stringify({id:n,fields:r,settings:a,extra:o}),s={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nonce_ts:nfFrontEnd.nonce_ts,formData:l};jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:s,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n),jQuery(document).trigger("nfFormSubmitResponse",{response:r,id:e.get("id")})}catch(e){console.log(e),console.log("Parse Error"),console.log(e)}},error:function(t,i,n){console.log("ERRORS: "+n),console.log(t);try{var r=jQuery.parseJSON(t.responseText);nfRadio.channel("forms").trigger("submit:response",r,i,t,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,t)}catch(i){console.log("Parse Error: "+t.responseText),nfRadio.channel("form-"+e.get("id")).request("add:error","parse-response-ERROR",n)}}})}})}),i("views/fieldCollection",["views/fieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("controllers/defaultFilters",["views/fieldCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"before:filterData",this.registerDefaultDataFilter)},registerDefaultDataFilter:function(e){nfRadio.channel("formContent").request("add:loadFilter",this.defaultFormContentLoad,10,this),nfRadio.channel("formContent").request("add:viewFilter",this.defaultFormContentView,10,this)},defaultFormContentLoad:function(e,i,n){var r=i.get("fields"),o=nfRadio.channel("formContent").request("get:loadFilters");if(1==_.without(o,void 0).length||void 0===e||!0==e instanceof Backbone.Collection)return i.get("fields");var a=_.map(e,function(e){return i.get("fields").findWhere({key:e})},this),l=new t(a);return r.on("reset",function(e){var t=[];l.each(function(i){"submit"!=i.get("type")?t.push(e.findWhere({key:i.get("key")})):t.push(i)}),l.options={formModel:i},l.reset(t)}),l},defaultFormContentView:function(){return e}})}),i("controllers/uniqueFieldError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.removeError),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.removeError),this.listenTo(nfRadio.channel("fields"),"blur:field",this.removeError)},removeError:function(e,t){t=t||e,nfRadio.channel("fields").request("remove:error",t.get("id"),"unique_field")}})});let n=[];i("models/fieldRepeaterSetModel",[],function(){return Backbone.Model.extend({initialize:function(e,t){this.repeaterFieldModel=t.repeaterFieldModel,this.set("label",this.repeaterFieldModel.get("label")),e&&t&&this.initAllRepeaterFieldsModels(e,t),nfRadio.channel("field-repeater").reply("get:repeaterFields",this.getRepeaterFields,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldById",this.getRepeaterFieldById,this),nfRadio.channel("field-repeater").reply("get:repeaterModels",this.getAllRepeaterFieldsModels,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsetsByForm",this.getAllFieldsetsByForm,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsModelsArrayByForm",this.getAllFieldsModelsArrayByForm,this),this.listenTo(nfRadio.channel("field-repeater"),"set:repeaterModels",this.setAllRepeaterFieldsModels),this.listenTo(nfRadio.channel("field-repeater"),"set:value",this.setAllRepeatersValues)},setAllRepeaterFieldsModels:function(){this.set("repeaterFieldsetsModels",n),this.allRepeatersFieldsetsModels=n},initAllRepeaterFieldsModels:function(e,t){const i=t.repeaterFieldModel.get("formID"),r=t.repeaterFieldModel.get("id"),o=e.fields.models;let a=n.find(e=>e.id===r&&e.form===i);a?a.fields=a.fields.concat(o):n.push({form:i,id:r,fields:o}),this.setAllRepeaterFieldsModels()},getAllRepeaterFieldsModels:function(){return n},getAllFieldsetsByForm:function(e){const t=this.getAllRepeaterFieldsModels().filter(t=>t.form===e);return t},getAllFieldsModelsArrayByForm:function(e){const t=this.getAllFieldsetsByForm(e);let i=[];return t.map(e=>{i=i.concat(e.fields)}),i},getRepeaterFields:function(e){const t=this.getAllRepeaterFieldsModels();let i=t.find(t=>String(t.id)===String(e));return void 0===i&&(i=this.reverseResearchFieldsetModel(e,t)),i},reverseResearchFieldsetModel:function(e,t){let i;return _.each(t,function(t){_.each(t.fields,function(n){String(n.id).startsWith(e)&&(i=t)})}),i},getRepeaterFieldById:function(e){const t=String(e).split(".")[0],i=this.getRepeaterFields(t);if(void 0===i)return;return i.fields.find(t=>t.id===e)},setAllRepeatersValues:function(){const e=this.getAllRepeaterFieldsModels();e.length>0&&_.each(e,function(e){let t=e.fields,i=nfRadio.channel("fields").request("get:field",e.id);if(t.length>0){let e={};_.each(t,function(t){let i=t.get("value"),n=t.get("id");if(n.split("_").length>2){let t=n.split("_");t[1]=t[1].split(".")[1];let i=t[0]+"."+t[1]+"_"+t[2];delete e[n],n=i}e[n]={value:i,id:n},"date"!==t.get("type")||"string"!=typeof i||"date_and_time"!==t.get("date_mode")&&"time_only"!==t.get("date_mode")||(e[n].value={date:i,hour:t.attributes.selected_hour,minute:t.attributes.selected_minute,ampm:t.attributes.selected_ampm}),"file_upload"===t.get("type")&&t.get("value")&&(e[n].files=t.attributes.files)}),i.set("isUpdated",!1),nfRadio.channel("nfAdmin").request("update:field",i,e)}})}})}),i("models/fieldRepeaterSetCollection",["models/fieldRepeaterSetModel","models/fieldCollection"],function(e,t){return Backbone.Collection.extend({model:e,initialize:function(e,t){this.options=t,this.listenTo(nfRadio.channel("field-repeater"),"sort:fieldsets",this.sortIDs),this.listenTo(nfRadio.channel("field-repeater"),"remove:fieldset",this.removeSet),this.listenTo(nfRadio.channel("field-repeater"),"add:fieldset",this.addSet),nfRadio.channel("field-repeater").reply("get:fieldsets",this.getFieldSets,this)},addSet:function(e=!1){let i;if(e){const n=this.options.repeaterFieldModel.id===e&&this.options.repeaterFieldModel;if(i=n,n){let e=new t(this.options.templateFields,{formModel:this.options.formModel,repeaterFieldModel:n});this.add({fields:e},{repeaterFieldModel:n})}}this.sortIDs(),nfRadio.channel("field-repeater").trigger("fieldset:added",i)},removeSet:function(e){this.removeRequiredFieldsErrors(e);const t=e.repeaterFieldModel.get("formID"),i=e.repeaterFieldModel.get("id"),r=n.find(e=>e.id===i&&e.form===t);if(r){let t=[];_.each(r.fields,(i,n)=>{void 0!==i&&_.each(e.get("fields").models,n=>{const r=void 0!==i.id?i.id:i.get("id");n.id===r&&(delete e.repeaterFieldModel.get("value")[n.id],t.push(r))})}),r.fields=_.reject(r.fields,e=>void 0===e||!!t.includes(e.id)),nfRadio.channel("field-repeater").trigger("set:repeaterModels")}this.remove(e),e.destroy(),this.sortIDs(),nfRadio.channel("field-repeater").trigger("set:value")},removeRequiredFieldsErrors:function(e){let t=e.get("fields");_.each(t.models,function(e){nfRadio.channel("fields").request("remove:error",e.get("id"),"required-error")})},getFieldsets:function(){return this.models},checkTimeField:function(e){const t=e.get("id"),i=document.getElementById("hour-select-"+t),n=document.getElementById("minute-select-"+t),r=0===e.attributes.hours_24?"12":"00";if(!i||!n)return;n.value=void 0!==e.attributes.selected_minute?e.attributes.selected_minute:"00",i.value=void 0!==e.attributes.selected_hour?e.attributes.selected_hour:r;const o=document.getElementById("nf-field-"+t+"-wrap").querySelector("#ampm-select");o&&(o.value=void 0!==e.attributes.selected_ampm?e.attributes.selected_ampm:"am")},sortIDs:function(){const e=this.getFieldsets(),t=[];_.each(e,function(e,i){let n=e.get("fields");e.set("index",i+1),_.each(n.models,function(e){const n=String(e.id).split("_")[0],r=String(n).split(".").length>1&&String(n).split(".").pop();if(!r)return;const o=e.collection.options.repeaterFieldModel.id+"."+r+"_"+i;e.set("id",o),"date"!==e.get("type")||"date_and_time"!==e.get("date_mode")&&"time_only"!==e.get("date_mode")||t.push(e)})}),nfRadio.channel("field-repeater").trigger("rerender:fieldsets"),t.forEach(e=>{this.checkTimeField(e)})}})}),i("controllers/fieldRepeater",["models/fieldRepeaterSetCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("repeater"),"init:model",this.initRepeater)},initRepeater:function(i){if(void 0===i.collection.options.formModel)return!1;let n=new t(i.get("fields"),{formModel:i.collection.options.formModel,repeaterFieldModel:i});i.set("sets",new e([{fields:n}],{templateFields:i.get("fields"),formModel:i.collection.options.formModel,repeaterFieldModel:i})),nfRadio.channel("field-repeater").trigger("sort:fieldsets")}})}),i("controllers/actionGA",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSendGaEvent)},actionSendGaEvent:function(e){void 0!==e.data.actions&&void 0!==e.data.actions.googleanalytics&&e.data.actions.googleanalytics.forEach(t=>{const i=t.event_name;if(void 0!==i)if(void 0!==t.method_type&&"ga4"===t.method_type)if("function"==typeof gtag){const t={event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};gtag("event",i,t)}else"object"==typeof dataLayer?console.warn("gtag isn't defined. But GTM was detected, did you mean to use GTM in the action settings?"):console.warn("gtag isn't defined. Please make sure you have GA4 installed on your site.");else if(void 0!==t.method_type&&"gtm"===t.method_type)if("object"==typeof dataLayer){const t={event:i,event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};dataLayer.push(t)}else"function"==typeof gtag?console.warn("GTM isn't defined. But GA4 was detected, did you mean to use GA4 in the action settings?"):console.warn("GTM isn't defined. Please make sure you have GTM installed on your site.");else console.warn("GTM and gtag aren't defined. Please make sure you have GTM or GA4 installed on your site.");else console.warn("No event name defined in the GA4 action settings. Please define an event name.")})}})}),i("controllers/loadControllers",["controllers/formData","controllers/fieldError","controllers/changeField","controllers/changeEmail","controllers/changeDate","controllers/fieldCheckbox","controllers/fieldCheckboxList","controllers/fieldImageList","controllers/fieldRadio","controllers/fieldNumber","controllers/mirrorField","controllers/confirmField","controllers/updateFieldModel","controllers/submitButton","controllers/submitDebug","controllers/getFormErrors","controllers/validateRequired","controllers/submitError","controllers/actionRedirect","controllers/actionSuccess","controllers/fieldSelect","controllers/coreSubmitResponse","controllers/fieldProduct","controllers/fieldTotal","controllers/fieldQuantity","controllers/calculations","controllers/dateBackwardsCompat","controllers/fieldDate","controllers/fieldRecaptcha","controllers/fieldRecaptchaV3","controllers/fieldHTML","controllers/helpText","controllers/fieldTextbox","controllers/fieldTextareaRTE","controllers/fieldStarRating","controllers/fieldTerms","controllers/formContentFilters","controllers/loadViews","controllers/formErrors","controllers/submit","controllers/defaultFilters","controllers/uniqueFieldError","controllers/fieldRepeater","controllers/actionGA"],function(e,t,i,n,r,o,a,l,s,d,c,f,u,h,m,g,p,v,y,b,R,_,w,F,x,M,C,k,T,E,j,D,q,V,I,O,Q,S,L,A,N,z,B,Y){return Marionette.Object.extend({initialize:function(){new S,new L,new A,new o,new a,new l,new s,new d,new R,new w,new F,new x,new T,new E,new j,new D,new q,new V,new I,new O,new Q,new z,new B,new t,new i,new n,new r,new c,new f,new u,new h,new m,new g,new p,new v,new y,new b,new Y,new _,new M,new N,new C,new k,new e}})}),i("views/beforeForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-form"})}),i("views/formErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-error",onRender:function(){}})}),i("views/formErrorCollection",["views/formErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e})}),i("views/honeyPot",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-hp",events:{"keyup .nf-field-hp":"maybeError","change .nf-field-hp":"maybeError"},maybeError:function(e){if(0==jQuery(e.target).val().length)nfRadio.channel("form-"+this.model.get("id")).request("remove:error","honeyPot");else{var t=nfRadio.channel("app").request("get:form",this.model.get("id"));nfRadio.channel("form-"+this.model.get("id")).request("add:error","honeyPot",t.get("settings").honeypotHoneypotError)}}})}),i("views/afterFormContent",["views/formErrorCollection","views/honeyPot"],function(e,t){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-after-fields",regions:{errors:".nf-form-errors",hp:".nf-form-hp"},onShow:function(){this.errors.show(new e({collection:this.model.get("errors")})),this.hp.show(new t({model:this.model}))}})}),i("views/beforeFormContent",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-fields",templateHelpers:function(){return{renderFieldsMarkedRequired:function(){return this.fields.filter({required:1}).length?this.fieldsMarkedRequired:""}}}})}),i("views/formLayout",["views/afterFormContent","views/beforeFormContent","models/fieldCollection"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-form-layout",regions:{beforeFormContent:".nf-before-form-content",formContent:".nf-form-content",afterFormContent:".nf-after-form-content"},initialize:function(){nfRadio.channel("form-"+this.model.get("id")).reply("get:el",this.getEl,this),this.listenTo(this.model,"hide",this.hide)},onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)},onShow:function(){this.beforeFormContent.show(new t({model:this.model}));var i=this.model.get("formContentData"),n=nfRadio.channel("formContent").request("get:viewFilters"),r=_.without(n,void 0),o=_.first(r);formContentView=o();var a={data:i,formModel:this.model};!1!=i instanceof Backbone.Collection?a.collection=i:!1!=i instanceof Backbone.Model&&(a.model=i),this.formContent.show(new formContentView(a)),this.afterFormContent.show(new e({model:this.model}))},getEl:function(){return this.el},templateHelpers:function(){return{renderClasses:function(){return""}}},hide:function(){jQuery(this.el).hide()}})}),i("views/afterForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-after-form"})}),i("views/mainLayout",["views/beforeForm","views/formLayout","views/afterForm"],function(e,t,i){return Marionette.LayoutView.extend({template:"#tmpl-nf-layout",regions:{responseMsg:".nf-response-msg",beforeForm:".nf-before-form",formLayout:".nf-form-layout",afterForm:".nf-after-form"},initialize:function(){this.$el=jQuery("#nf-form-"+this.model.id+"-cont"),this.el="#nf-form-"+this.model.id+"-cont",this.render(),this.beforeForm.show(new e({model:this.model})),this.formLayout.show(new t({model:this.model,fieldCollection:this.options.fieldCollection})),this.afterForm.show(new i({model:this.model})),this.listenTo(this.model,"hide",this.hide)},hide:function(){jQuery(this.el).find(".nf-form-title").hide()}})});var r=function(e,t,i){void 0!==e&&0<e.length?this.locale=e.split("_").join("-"):this.locale="en-US",this.thousands_sep=t||",",this.decimal_sep=i||".",this.uniqueElememts=function(e,t,i){return i.indexOf(e)===t},this.numberDecoder=function(e){var t="",i=!1;"-"===(e=e.toString()).charAt(0)&&(i=!0,e=e.replace("-",""));var n=(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").filter(function(e){return!e.match(/[0-9]/)}),r=n.filter(this.uniqueElememts);switch(r.length){case 0:t=e;break;case 1:var o="";if(1==n.length)separator=n.pop(),o=3==e.split(separator).pop().length&&separator==this.thousands_sep?"":".";else separator=r.pop();t=e.split(separator).join(o);break;case 2:var a,l=r[0];a="."===l?new RegExp("[.]","g"):new RegExp(l,"g"),t=e.replace(a,"");var s,d=r[1];s="."===d?new RegExp("[.]","g"):new RegExp(d,"g"),t=t.replace(s,".");break;default:return"NaN"}return i&&(t="-"+t),this.debug("Number Decoder "+e+" -> "+t),t},this.numberEncoder=function(e,t){return e=this.numberDecoder(e),Intl.NumberFormat(this.locale,{minimumFractionDigits:t,maximumFractionDigits:t}).format(e)},this.debug=function(e){window.nfLocaleConverterDebug&&console.log(e)}};i("../nfLocaleConverter",function(){}),void 0!==nfInlineVars.nfForms&&(window.nfForms=nfInlineVars.nfForms),function(e){var t=e.fn.val;e.fn.val=function(){var i;arguments.length>0&&(i=t.apply(this,[]));var n=t.apply(this,arguments);return arguments.length>0&&i!=t.apply(this,[])&&e(this).hasClass("nf-element")&&e(this).change(),n}}(jQuery),document.addEventListener("DOMContentLoaded",function(){t(["models/formCollection","models/formModel","models/fieldCollection","controllers/loadControllers","views/mainLayout","../nfLocaleConverter"],function(e,t,i,n,o){if("undefined"!=typeof nfForms){var a=Marionette.Application.extend({forms:{},initialize:function(e){var t=this;Marionette.Renderer.render=function(e,i){return(e=t.template(e))(i)},this.urlParameters=_.object(_.compact(_.map(location.search.slice(1).split("&"),function(e){if(e)return e.split("=")}))),void 0!==this.urlParameters.nf_resume&&this.listenTo(nfRadio.channel("form-"+this.urlParameters.nf_resume),"loaded",this.restart),nfRadio.channel("app").reply("locale:decodeNumber",this.decodeNumber),nfRadio.channel("app").reply("locale:encodeNumber",this.encodeNumber);new n;nfRadio.channel("app").trigger("after:loadControllers"),nfRadio.channel("app").reply("get:template",this.template)},onStart:function(){var e=nfRadio.channel("app").request("get:forms");_.each(e.models,function(e,t){var i=new o({model:e,fieldCollection:e.get("fields")});nfRadio.channel("form").trigger("render:view",i),jQuery(document).trigger("nfFormReady",i)})},restart:function(e){if(void 0!==this.urlParameters.nf_resume){var t={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nf_resume:this.urlParameters};nfRadio.channel("form-"+e.get("id")).trigger("disable:submit"),nfRadio.channel("form-"+e.get("id")).trigger("processingLabel"),this.listenTo(nfRadio.channel("form"),"render:view",function(){jQuery("#nf-form-"+e.get("id")+"-cont .nf-field-container:not(.submit-container)").hide()}),jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:t,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n)}catch(e){console.log("Parse Error")}},error:function(e,t,i){console.log("ERRORS: "+t),nfRadio.channel("forms").trigger("submit:response","error",t,e,i)}})}},template:function(e){return e.startsWith("script")||(e="script"+e),_.template(jQuery(e).html(),{evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"})},encodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e)},decodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberDecoder(e)}});(new a).start()}else jQuery(".nf-form-cont").empty()})}),i("main",function(){})}(); 2 2 //# sourceMappingURL=front-end.js.map -
ninja-forms/tags/3.10.4/assets/js/min/front-end.js.map
r3320170 r3323843 1 {"version":3,"sources":["../../../config-wrap-start-default.js","../../../node_modules/almond/almond.js","models/fieldErrorModel.js","models/fieldErrorCollection.js","models/fieldModel.js","models/fieldCollection.js","models/formErrorModel.js","models/formErrorCollection.js","models/formModel.js","models/formCollection.js","controllers/formData.js","controllers/fieldError.js","controllers/changeField.js","controllers/changeEmail.js","controllers/changeDate.js","controllers/fieldCheckbox.js","controllers/fieldCheckboxList.js","controllers/fieldImageList.js","controllers/fieldRadio.js","controllers/fieldNumber.js","controllers/mirrorField.js","controllers/confirmField.js","controllers/updateFieldModel.js","controllers/submitButton.js","controllers/submitDebug.js","controllers/getFormErrors.js","controllers/validateRequired.js","controllers/submitError.js","controllers/actionRedirect.js","controllers/actionSuccess.js","controllers/fieldSelect.js","controllers/coreSubmitResponse.js","controllers/fieldProduct.js","controllers/fieldTotal.js","controllers/fieldQuantity.js","models/calcModel.js","models/calcCollection.js","controllers/calculations.js","controllers/dateBackwardsCompat.js","controllers/fieldDate.js","controllers/fieldRecaptcha.js","controllers/fieldRecaptchaV3.js","controllers/fieldHTML.js","controllers/helpText.js","controllers/fieldTextbox.js","controllers/fieldTextareaRTE.js","controllers/fieldStarRating.js","controllers/fieldTerms.js","controllers/formContentFilters.js","views/fieldItem.js","views/beforeField.js","views/fieldErrorItem.js","views/fieldErrorCollection.js","views/inputLimit.js","views/afterField.js","views/fieldRepeaterFieldLayout.js","views/fieldRepeaterFieldCollection.js","views/fieldRepeaterSetLayout.js","views/fieldRepeaterSetCollection.js","views/fieldRepeaterLayout.js","views/fieldLayout.js","controllers/loadViews.js","controllers/formErrors.js","controllers/submit.js","views/fieldCollection.js","controllers/defaultFilters.js","controllers/uniqueFieldError.js","models/fieldRepeaterSetModel.js","models/fieldRepeaterSetCollection.js","controllers/fieldRepeater.js","controllers/actionGA.js","controllers/loadControllers.js","views/beforeForm.js","views/formErrorItem.js","views/formErrorCollection.js","views/honeyPot.js","views/afterFormContent.js","views/beforeFormContent.js","views/formLayout.js","views/afterForm.js","views/mainLayout.js","../nfLocaleConverter.js","main.js"],"names":["requirejs","require","define","undef","main","req","makeMap","handlers","defined","waiting","config","defining","hasOwn","Object","prototype","hasOwnProperty","aps","slice","jsSuffixRegExp","hasProp","obj","prop","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","starMap","length","nodeIdCompat","test","replace","charAt","concat","splice","join","makeRequire","relName","forceSync","args","arguments","push","apply","makeLoad","depName","value","callDep","Error","splitPrefix","prefix","index","indexOf","substring","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","Backbone","Model","extend","errorModel","Collection","model","fieldErrorCollection","defaults","placeholder","label_pos","classes","reRender","mirror_field","confirm_field","clean","disabled","visible","invalid","initialize","type","this","get","set","collection","options","formModel","listenTo","nfRadio","channel","resetModel","bind","changeModel","changeValue","listimageGet","listimageSet","trigger","formLoaded","beforeSubmit","attr","attributes","addWrapperClass","cl","removeWrapperClass","setInvalid","getValue","fieldModel","comparator","models","on","fieldCollection","reply","getFirstFieldByOrder","validateFields","_","each","repeaterModels","request","repeaterFieldModel","size","keys","showFields","invoke","hideFields","ids_array","targetID","order","FieldCollection","ErrorCollection","beforeForm","afterForm","beforeFields","afterFields","wrapper_class","element_class","hp","fieldErrors","extra","setting","formContentData","formContentLoadFilters","sortedArray","without","first","getFieldByKey","addError","removeError","getExtra","addExtra","removeExtra","getForm","key","findWhere","msg","add","errors","remove","extraData","FormModel","FormCollection","Marionette","nfForms","getForms","getField","form","String","fieldErrorModel","getError","targetError","changeField","blurField","el","val","radioChannel","emailReg","errorID","onChangeModelValue","emailKeyup","onBlurField","fieldID","emailChange","changeEmailErrorMsg","keyCode","dateKeyup","changeHoursMinutes","original","moment","locale","dateChange","format","isDateValid","changeDateErrorMsg","container","target","closest","selected_hour","find","selected_minute","selected_ampm"," fieldId","search","setValue","document","querySelector","parseDate","_flatpickr","timestamp","getTime","isNaN","parsedDate","Date","formatDate","registerRenderClasses","validateRequired","validateModelData","beforeUpdateField","getCalcValue","addClass","removeClass","checked","calcValue","customClasses","customLabelClasses","maybeChecked","default_value","register","renderOptions","renderOtherText","selected","filter","opt","savedVal","Array","isArray","html","valueFound","option","label","nfFrontEnd","filter_esc_status","escape","isSelected","required","maybeFilterHTML","template","show_other","data","currentValue","calc_value","tmp_opt","Number","calc","parent","optionArray","valueIndex","clone","allow_multi_select","old_classname","image_type","list_orientation","flex_direction","that","num_columns","parseInt","current_column","current_row","image_options","image","show_option_labels","styles","changeModelValue","updateCheckedClass","maybeMinDefault","validateEntry","min","$el","floatVal","parseFloat","max","step","fieldNumberNumMinError","fieldNumberNumMaxError","testVal","testStep","factor","Math","pow","toFixed","fieldNumberIncrementBy","listeningModel","registerMirror","targetModel","registerConfirm","confirmKeyup","confirmModel","formModal","registerConfirmListeners","confirmID","confirmFieldErrorMsg","compareValue","confirmValue","updateField","submitButton","bound","registerHandlers","click","resetLabel","maybeEnable","maybeDisable","processingLabel","response","nonce","new_nonce","nonce_ts","submitDebug","textStatus","jqXHR","formID","debug","debugMessages","createElement","message","messageText","createTextNode","appendChild","console","log","getFormErrors","error","field","validateKeyup","customReqValidation","defaultReqValidation","maskPlaceholder","getMask","trim","valid","maybeError","mask","nfi18n","currencySymbol","validateRequiredField","submitErrors","focusFirstInvalidInput","ajaxNonce","fields","slug","last","style","show","getElementById","focus","actionRedirect","halt","redirect","window","location","actions","actionSubmit","success_message","form_id","read","top_of_success_message","offset","top","bottom_of_success_message","outerHeight","bottom_of_screen","scrollTop","height","top_of_screen","animate","renderOtherAttributes","otherAttributes","multi_size","settings","clear_complete","reset","hide_complete","renderProductQuantity","renderProduct","product_type","product_use_quantity","totalModel","productTotals","registerShipping","onFormLoaded","onChangeProduct","onChangeQuantity","shippingModel","shippingCost","fieldModels","productFields","quantityFields","productID","product","productPrice","updateTotal","newTotal","productField","registerQuantity","changeCalc","targetCalcModel","CalcModel","dec","toString","getCalc","CalcCollection","calcs","displayFields","registerCalcs","resetCalcs","use_merge_tags","calculations","fieldType","initDisplayField","updateDisplayFields","init","calcCollection","calcModel","setupCalc","eq","eqValues","match","RegExp","updateCalcFields","replaceKey","localeDecodeEquation","mexp","Mexp","eval","localeConverter","nfLocaleConverter","siteLocale","thousands_sep","decimal_point","machineNumber","numberDecoder","formattedNumber","numberEncoder","isNumeric","tag","reTag","calcTag","reCalcTag","replaceAllKeys","re","calcName","spans","spanVar","tmpCalcTag","applyLocaleFormatting","number","result","expression","pattern","forEach","character","nfCalculationsDebug","Radio","dateBackwardsCompat","dateObject","pikaday","_o","disableDayFn","i18n","firstDay","firstDayOfWeek","weekdays","longhand","weekdaysShort","shorthand","months","text","initModel","initDatepicker","registerFunctions","renderHourOptions","renderMinuteOptions","maybeRenderAMPM","hours_options","minutes_options","hours_24","view","hide","dateFormat","convertDateFormat","dateSettings","onReady","selectedDates","datestr","altInput","setAttribute","altFormat","ariaDateFormat","mode","allowInput","disableMobile","minDate","getMinDate","maxDate","getMaxDate","nfCustomLocale","checkCustomLocale","filteredDatePickerSettings","flatpickr","defaultDate","setDate","includes","isSameDay","isObject","date_value","dataset","hour","minute","ampm","current_value","date","yearRangeStart","yearRangeEnd","lookup","default","date_mode","customLocale","monthsShort","startOfWeek","isEmpty","date1","date2","d1","d2","setHours","initRecaptcha","resetRecaptcha","updateResponse","recaptchaID","grecaptcha","processRecaptcha","setInterval","ready","execute","action","then","token","layoutView","submitFieldID","consent","nf_check_recaptcha_consent","recaptchaConsentMissing","nf_build_default_consent_action","services","actionElement","innerText","recaptchaConsentEvent","nf_consent_link_event","CustomEvent","detail","element","dispatchEvent","genericErrorElements","getElementsByClassName","append","htmlFields","trackedMergeTags","setupFieldMergeTagTracking","mergeTags","mergeTag","fieldKey","updateFieldMergeTags","htmlFieldModel","fieldValue","displayRepeaterData","repeaterFieldIDs","returnHTML","passedFields","pop","initHelpText","jBox","theme","content","closeOnMouseleave","closeOnClick","close","currencySymbolDecoded","initTextareaRTEs","clickExtra","meta_image_frame","currentContext","summernote","icons","align","alignCenter","alignJustify","alignLeft","alignRight","indent","outdent","bold","caret","code","eraser","italic","link","unlink","magic","minus","orderedlist","redo","square","table","underline","undo","unorderedlist","toolbar","userSettings","uid","buttons","linkButton","context","mediaButton","codemirror","lineNumbers","prettifyHtml","callbacks","onChange","linkMenu","next","replaceWith","class","innerHTML","ui","linkDropdown","buttonGroup","button","className","contents","tooltip","fieldTextareaRTEInsertLink","clickLinkButton","toggle","dropdown","children","render","fieldTextareaRTEInsertMedia","openMediaManager","open","wp","media","frames","title","fieldTextareaRTESelectAFile","media_attachment","state","toJSON","insertMedia","range","textEl","urlEl","isNewWindowEl","hasClass","url","isNewWindow","filename","initRating","renderRatings","rating","number_of_stars","num","htmlFragment","createRange","createContextualFragment","keyUpExtra","currentTarget","addOption","new_option","viewFilters","loadFilters","addViewFilter","addLoadFilter","getViewFilters","getLoadFilters","priority","ItemView","tagName","toggleAriaInvalid","JSON","stringify","onRender","unwrap","setElement","isInteger","isFinite","floor","charCodeAt","autoNumericOptions","digitGroupSeparator","decimalCharacter","modifyValueOnWheel","autoN_el","AutoNumeric","templateHelpers","renderElement","tmpl","element_templates","renderLabel","renderLabelClasses","renderPlaceholder","customPlaceholder","renderWrapClass","wrapClass","parentType","customWrapClass","renderClasses","maybeDisabled","disable_input","maybeRequired","maybeDisableAutocomplete","disable_browser_autocomplete","translateAutoCompletionType","maybeInputLimit","input_limit_type","input_limit","getHelpText","help_text","maybeRenderHelp","check_text_par","shouldRenderHelpText","icon","classList","hiddenHelpText","textContent","outerHTML","renderDescText","desc_text","check","checkText","descriptionText","fieldDescription","renderNumberDefault","renderCurrencyFormatting","currency_symbol","maybeRenderTime","events","fieldChange","fieldKeyup","fieldClick","extraClick","extraChange","fieldBlur","onAttach","fieldErrorItem","CollectionView","childView","updateCount","count","words","wordCount","charCount","limit","currentCount","InputLimitView","changeError","errorEl","errorCollectionView","inputLimitEl","inputLimitView","fieldItem","beforeField","afterField","LayoutView","regions","getTemplate","renderContainerClass","containerClass","desc_pos","container_class","fieldLayout","removeSet","repeaterSetLayout","repeaterSetCollection","sets","addSet","repeaterFieldLayout","fieldItemView","fieldLayoutView","getFieldItem","getFieldLayout","errorMsg","formErrorsCorrectErrors","omit","registerSubmitHandler","submit","validate","blockingFormErrors","fieldDataDefaults","formData","security","ajax","adminAjax","cache","success","errorThrown","parseJSON","responseText","FieldCollectionView","registerDefaultDataFilter","defaultFormContentLoad","defaultFormContentView","currentFieldCollection","resetFields","nfAllRepeaterFieldsModels","initAllRepeaterFieldsModels","getRepeaterFields","getRepeaterFieldById","getAllRepeaterFieldsModels","getAllFieldsetsByForm","getAllFieldsModelsArrayByForm","setAllRepeaterFieldsModels","setAllRepeatersValues","allRepeatersFieldsetsModels","repeaterID","currentModels","isModelSet","thisFormModels","singleArray","allModels","reverseResearchFieldsetModel","fieldsetModel","startsWith","fieldObject","repeaters","repeater","repeaterFieldValue","idArray","newID","files","repeaterSetModel","sortIDs","getFieldSets","repeaterFieldID","templateFields","fieldset","removeRequiredFieldsErrors","isRepeaterModelSet","rep","fieldsetField","reject","destroy","getFieldsets","checkTimeField","hourEl","minEl","defaultHour","ampmEl","fieldsets","timeFields","modelIndex","cutEl","fieldIndex","initRepeater","actionSendGaEvent","googleanalytics","eventName","event_name","method_type","gtag","eventParams","event_category","event_label","dataLayer","warn","event","FormData","FieldError","ChangeField","ChangeEmail","ChangeDate","FieldCheckbox","FieldCheckboxList","FieldImageList","FieldRadio","FieldNumber","MirrorField","ConfirmField","UpdateFieldModel","SubmitButton","SubmitDebug","GetFormErrors","ValidateRequired","SubmitError","ActionRedirect","ActionSuccess","FieldSelect","CoreSubmitResponse","FieldProduct","FieldTotal","FieldQuantity","Calculations","DateBackwardsCompat","FieldDate","FieldRecaptcha","FieldRecaptchaV3","FieldHTML","HelpText","FieldTextbox","FieldTextareaRTE","FieldStarRating","FieldTerms","FormContentFilters","LoadViews","FormErrors","Submit","DefaultFilters","UniqueFieldError","FieldRepeater","ActionGA","formErrorItem","honeypotHoneypotError","HoneyPot","onShow","renderFieldsMarkedRequired","fieldsMarkedRequired","AfterFormContent","BeforeFormContent","beforeFormContent","formContent","afterFormContent","getEl","formContentViewFilters","formContentView","BeforeForm","FormLayout","AfterForm","responseMsg","formLayout","newLocale","decimal_sep","uniqueElememts","self","formatted","negative","separators","final_separators","replacer","separator","re_one","find_one","re_two","find_two","percision","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","nfLocaleConverterDebug","nfInlineVars","originalVal","fn","prev","change","addEventListener","formCollection","LoadControllers","mainLayout","NinjaForms","Application","forms","Renderer","urlParameters","object","compact","item","nf_resume","restart","decodeNumber","encodeNumber","onStart","evaluate","interpolate","variable","start","empty"],"mappings":"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K,UAAA,CAEA,MAAAH,EAAA,CACAK,MAAAT,EACAK,eAAA,cACAC,YAAA,qBACA5f,QAAAlD,EAAAhE,KAAAkH,SAEA6f,UAAAj1B,KAAA80B,EACA,KAAA,mBAAAD,KACA5hB,QAAAiiB,KAAA,4FAEAjiB,QAAAiiB,KAAA,iFAGAjiB,QAAAiiB,KAAA,kGAnCAjiB,QAAAiiB,KAAA,mFAuCA,GAKA,GAEAt4B,EC3DA,8BAAA,CACA,uBACA,yBACA,0BACA,0BACA,yBACA,4BACA,gCACA,6BACA,yBACA,0BACA,0BACA,2BACA,+BACA,2BACA,0BACA,4BACA,+BACA,0BACA,6BACA,4BACA,0BACA,iCACA,2BACA,yBACA,4BACA,2BACA,kCACA,wBACA,6BACA,+BACA,wBACA,uBACA,2BACA,+BACA,8BACA,yBACA,iCACA,wBACA,yBACA,qBACA,6BACA,+BACA,4BACA,wBAEA,SACAw4B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAuEA,OArEAnvB,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAKA,IAAA8zB,EACA,IAAAC,EACA,IAAAC,EAKA,IAAAlC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAW,EACA,IAAAE,EACA,IAAAC,EACA,IAAAC,EACA,IAAAI,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAK,EACA,IAAAC,EAKA,IAAAzC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EAEA,IAAAM,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,I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","file":"front-end.js","sourcesContent":["(function () {\n","/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\ndefine(\"../../../node_modules/almond/almond\", function(){});\n\n","define( 'models/fieldErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/fieldErrorCollection',['models/fieldErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/fieldModel',['models/fieldErrorCollection'], function( fieldErrorCollection ) {\n\tvar model = Backbone.Model.extend( {\n\t\tdefaults: {\n\t\t\tplaceholder: '',\n\t\t\tvalue: '',\n\t\t\tlabel_pos: '',\n\t\t\tclasses: 'ninja-forms-field',\n\t\t\treRender: false,\n\t\t\tmirror_field: false,\n\t\t\tconfirm_field: false,\n\t\t\tclean: true,\n\t\t\tdisabled: '',\n\t\t\tvisible: true,\n\t\t\tinvalid: false\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tvar type = this.get('type');\n\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'reset', this.resetModel );\n\n \t\tthis.bind( 'change', this.changeModel, this );\n \t\tthis.bind( 'change:value', this.changeValue, this );\n \t\tthis.set( 'errors', new fieldErrorCollection() );\n\n\t\t\tif (type === 'listimage') {\n\t\t\t\tthis.get = this.listimageGet;\n\t\t\t\tthis.set = this.listimageSet;\n\t\t\t}\n\n \t\t/*\n\t\t\t * Trigger an init event on two channels:\n\t\t\t * \n\t\t\t * fields\n\t\t\t * field-type\n\t\t\t *\n\t\t\t * This lets specific field types modify model attributes before anything uses them.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'init:model', this );\n\n\t\t\tif( 'undefined' != typeof this.get( 'parentType' ) ){\n\t\t\t\tnfRadio.channel( this.get( 'parentType' ) ).trigger( 'init:model', this );\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * When we load our form, fire another event for this field.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'loaded', this.formLoaded );\n\t\t\n\t\t\t/*\n\t\t\t * Before we submit our form, send out a message so that this field can be modified if necessary.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'before:submit', this.beforeSubmit );\n\t\t},\n\n\t\tlistimageGet: function(attr) {\n if(attr === 'options') {\n\t\t\t\t\tattr = 'image_options';\n\t\t\t}\n\n return Backbone.Model.prototype.get.call(this, attr);\n\t\t},\n\t\t\n\t\tlistimageSet: function(attributes, options) {\n\t\t\tif ('options' === attributes) {\n\t\t\t\tattributes = 'image_options';\n\t\t\t}\n\t\t\treturn Backbone.Model.prototype.set.call(this, attributes, options);\n\t\t},\n\n\t\tchangeModel: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:model', this );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:modelValue', this );\n\t\t},\n\n\t\taddWrapperClass: function( cl ) {\n\t\t\tthis.set( 'addWrapperClass', cl );\n\t\t},\n\n\t\tremoveWrapperClass: function( cl ) {\n\t\t\tthis.set( 'removeWrapperClass', cl );\n\t\t},\n\n\t\tsetInvalid: function( invalid ) {\n\t\t\tthis.set( 'invalid', invalid );\n\t\t},\n\n\t\tformLoaded: function() {\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'formLoaded', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'formLoaded', this );\n\t\t},\n\n\t\tbeforeSubmit: function( formModel ) {\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'before:submit', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'before:submit', this );\n\t\t},\n\n\t\t/**\n\t\t * Return the value of this field.\n\t\t * This method exists so that more complex fields can return more than just the field value.\n\t\t * Those advanced fields should create their own method with this name.\n\t\t * \n\t\t * @since 3.5\n\t\t * @return {string} Value of this field.\n\t\t */\n\t\tgetValue: function() {\n\t\t\treturn this.get( 'value' );\n\t\t}\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldCollection',['models/fieldModel'], function( fieldModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: fieldModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n this.on( 'reset', function( fieldCollection ){\n nfRadio.channel( 'fields' ).trigger( 'reset:collection', fieldCollection );\n }, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:firstFieldByOrder', this.getFirstFieldByOrder );\n\t\t},\n\n\t\tvalidateFields: function() {\n\t\t\t_.each( this.models, function( fieldModel ) {\n\t\t\t\tif(fieldModel.get(\"type\") === \"repeater\"){\n\t\t\t\t\tconst repeaterModels = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldsModelsArrayByForm', fieldModel.get('formID') );\n\t\t\t\t\t_.each( repeaterModels, function( repeaterFieldModel ) {\n\t\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\t\trepeaterFieldModel.set( 'clean', false );\n\t\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', repeaterFieldModel );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\tfieldModel.set( 'clean', false );\n\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', fieldModel );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t\t//Focus the first invalid input when found\n\t\t\tvar formModel = nfRadio.channel( 'form-' + this.models[0].get( 'formID' ) ).request( 'get:form' );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t},\n\n\t\tshowFields: function() {\n\t\t\tthis.invoke( 'set', { visible: true } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\thideFields: function() {\n\t\t\tthis.invoke( 'set', { visible: false } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\tgetFirstFieldByOrder: function( ids_array ) {\n\t\t\tlet targetID = 0;\n\t\t\t//Loop through an array of fieldIDs to return the one that is positioned first\n\t\t\t_.each(ids_array, function( id ) {\n\t\t\t\t//Get field order\n\t\t\t\tconst order = nfRadio.channel( 'fields' ).request( 'get:field', id ).get('order');\n\t\t\t\t//Set it as the target when the lowest order is found\n\t\t\t\ttargetID = (targetID === 0 || order < targetID) ? id : targetID;\n\t\t\t});\n\n\t\t\treturn targetID;\n\t\t}\n\t} );\n\treturn collection;\n} );\n\n","define( 'models/formErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/formErrorCollection',['models/formErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/formModel',[\n\t'models/fieldCollection',\n\t'models/formErrorCollection'\n\t], function(\n\t\tFieldCollection,\n\t\tErrorCollection\n\t) {\n\tvar model = Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tbeforeForm: '',\n\t\t\tafterForm: '',\n\t\t\tbeforeFields: '',\n\t\t\tafterFields: '',\n\t\t\twrapper_class: '',\n\t\t\telement_class: '',\n\t\t\thp: '',\n\t\t\tfieldErrors: {},\n\t\t\textra: {}\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\t// Loop over settings and map to attributes\n\t\t\t_.each( this.get( 'settings' ), function( value, setting ) {\n\t\t\t\tthis.set( setting, value );\n\t\t\t}, this );\n\n\t\t\tthis.set( 'loadedFields', this.get( 'fields' ) );\n\t\t\tthis.set( 'fields', new FieldCollection( this.get( 'fields' ), { formModel: this } ) );\n\t\t\tthis.set( 'errors', new ErrorCollection() );\n\n\t\t\t/*\n\t\t\t * Send out a radio message so that anyone who wants to filter our content data can register their filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).trigger( 'before:filterData', this );\n\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.get( 'formContentData' );\n\n\t\t\t/*\n\t\t\t * The formContentData variable used to be fieldContentsData.\n\t\t\t * If we don't have a 'formContentData' setting, check to see if we have an old 'fieldContentsData'.\n\t\t\t * \n\t\t\t * TODO: This is for backwards compatibility and should be removed eventually. \n\t\t\t */\n\t\t\tif ( ! formContentData ) {\n\t\t\t\tformContentData = this.get( 'fieldContentsData' );\n\t\t\t}\n\t\t\t\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentData = callback( formContentData, this, this );\n\t\t\t\n\t\t\tthis.set( 'formContentData', formContentData );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'init:model', this );\n\n\t\t\t// Fields\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:fieldByKey', this.getFieldByKey, this );\n\n\t\t\t// Form Errors\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:error', this.addError, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:error', this.removeError, this );\n\n\t\t\t// Extra Data\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:extra', this.getExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:extra', this.addExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:extra', this.removeExtra, this );\n\t\t\n\t\t\t// Respond to requests to get this model.\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:form', \t this.getForm, \t this );\n\n\t\t\tnfRadio.channel( 'form' ).trigger( 'loaded', this );\n\t\t\tnfRadio.channel( 'form' ).trigger( 'after:loaded', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'loaded', \t this );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Fields\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetFieldByKey: function( key ) {\n\t\t\treturn this.get( 'fields' ).findWhere( { key: key } );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Form Errors\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\taddError: function( id, msg ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\terrors.add( { id: id, msg: msg } );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:error', this, id, msg );\n\t\t},\n\n\t\tremoveError: function( id ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\tvar errorModel = errors.get( id );\n\t\t\terrors.remove( errorModel );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:error', this, id );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Extra Data\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tif( 'undefined' == typeof key ) return extraData;\n\t\t\treturn extraData[ key ];\n\t\t},\n\n\t\taddExtra: function( key, value ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\textraData[ key ] = value;\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:extra', this, key, value );\n\t\t},\n\n\t\tremoveExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tdelete extraData[ key ];\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:extra', this, key );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Get this form\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\t\tgetForm: function() {\n\t\t\treturn this;\n\t\t}\n\t} );\n\n\treturn model;\n} );\n","define( 'models/formCollection',['models/formModel'], function( formModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: formModel\n\t} );\n\treturn collection;\n} );\n","/*\n * Handles setting up our form.\n *\n * Holds a collection of our fields.\n * Replies to requests for field data.\n * Updates field models.\n */\ndefine('controllers/formData',['models/formModel', 'models/formCollection', 'models/fieldCollection', 'models/formErrorCollection'], function( FormModel, FormCollection, FieldCollection, ErrorCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\t/*\n\t\t\t * Setup our field collections.\n\t\t\t */\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Initialize our form collection (incase we have multiple forms on the page)\n\t\t\t */\n\t\t\tthis.collection = new FormCollection( nfForms );\t\t\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'loaded', this.collection );\n\t\t\tnfRadio.channel( 'app' ).trigger( 'forms:loaded', this.collection );\n\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:form', this.getForm, this );\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:forms', this.getForms, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:field', this.getField, this );\n\t\t},\n\n\t\tgetForm: function( id ) {\n\t\t\treturn this.collection.get( id );\n\t\t},\n\n\t\tgetForms: function() {\n\t\t\treturn this.collection;\n\t\t},\n\n\t\tgetField: function( id ) {\n\t\t\tvar model = false;\n\t\t\t\n\t\t\t_.each( this.collection.models, function( form ) {\n\t\t\t\tif ( ! model ) {\n\t\t\t\t\tmodel = form.get( 'fields' ).get( id );\t\n\t\t\t\t}\t\t\t\n\t\t\t} );\n\n\t\t\tif(typeof model == \"undefined\" && String(id).indexOf('.') !== -1){\n\t\t\t\tmodel = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldById', id );\n\t\t\t}\n\t\t\t\n\t\t\treturn model;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldError',['models/fieldErrorModel'], function( fieldErrorModel ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'fields' ).reply( 'add:error', this.addError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'remove:error', this.removeError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:error', this.getError );\n\t\t},\n\n\t\taddError: function( targetID, id, msg ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\terrors.add( { 'id': id, 'msg' : msg } );\n\t\t\tmodel.set( 'errors', errors );\n\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\tmodel.set( 'clean', false );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'add:error', model, id, msg );\n\t\t},\n\n\t\tremoveError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\n\t\t\tif ( 'undefined' != typeof targetError ) {\n\t\t\t\terrors.remove( targetError );\n\t\t\t\tmodel.set( 'errors', errors );\n\t\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\t\tnfRadio.channel( 'fields' ).trigger( 'remove:error', model, id );\n\t\t\t}\n\t\t},\n\n\t\tgetError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\t\t\tif ( 'undefined' != targetError ) {\n\t\t\t\treturn targetError;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for replying to a Radio request stating that a field has been changed.\n *\n * This controller sends out a message to the field-specific channel, the field type channel,\n * and the public fields channel so that the data model can be updated.\n */\n\ndefine('controllers/changeField',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Reply to our request for changing a field.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'change:field', this.changeField );\n\n\t\t\t/*\n\t\t\t * If we blur our field, set the model attribute of 'clean' to false.\n\t\t\t * 'clean' tracks whether or not the user has every interacted with this element.\n\t\t\t * Some validation, like required, uses this to decide whether or not to add an error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.blurField );\n\t\t},\n\n\t\tchangeField: function( el, model ) {\n\t\t\t// Get our current value.\n\t\t\tvar value = nfRadio.channel( model.get( 'type' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : nfRadio.channel( model.get( 'parentType' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : jQuery( el ).val();\n\n\t\t\t// Set our 'isUpdated' flag to false.\n\t\t\tmodel.set( 'isUpdated', false );\n\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\n\t\t\t/*\n\t\t\t * Send out a message saying that we've changed a field.\n\t\t\t * The first channel is field id/key specific.\n\t\t\t * The second channel is the field type, i.e. text, email, radio\n\t\t\t * The third channel is a generic 'field' channel.\n\t\t\t *\n\t\t\t * If the submitted value you wish to store in the data model isn't the same as the value received above,\n\t\t\t * you can set that model in the actions below and set the 'isUpdated' model attribute to true.\n\t\t\t * i.e. model.set( 'isUpdated', true );\n\t\t\t */\n\t\t\tnfRadio.channel( 'field-' + model.get( 'id' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( model.get( 'type' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:field', el, model );\n\n\t\t\t/*\n\t\t\t * Send a request out on our nfAdmin channel to update our field model.\n\t\t\t * If the field model has a 'isUpdated' property of false, nothing will be updated.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', model, value );\n\n\t\t\t/*\n\t\t\t * If the field is in a repeater, update the repeater Value\n\t\t\t */\n\t\t\tif(model.get(\"repeaterField\")){\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t\t}\n\t\t},\n\n\t\tblurField: function( el, model ) {\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeEmail',[], function() {\n\tvar radioChannel = nfRadio.channel( 'email' );\n\t// var emailReg = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\n\tvar emailReg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\tvar errorID = 'invalid-email';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.emailKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar value = jQuery( el ).val();\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\temailChange: function( value, fieldID ) {\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\tif( emailReg.test( value ) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an email field, track their keypresses and add the appropriate class.\n\t\t * If the value validates as an email, add a class of nf-pass\n\t\t * If the value does not validate as email, add a class of nf-fail\n\t\t * \n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\temailKeyup: function( el, model, keyCode ) {\n\t\t\t\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid email.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t} else if ( ! emailReg.test( value ) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t} else if ( emailReg.test( value ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeDate',[], function() {\n\tvar radioChannel = nfRadio.channel( 'date' );\n\tvar errorID = 'invalid-date';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.dateKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t\t\n\t\t\tthis.listenTo( radioChannel, 'change:extra', this.changeHoursMinutes, this)\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tdateChange: function( model ) {\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\t// If we are dealing with purely a time field, bail early.\n\t\t\tif ( 'time_only' == model.get( 'date_mode' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\t\tif( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an dat field, track their keypresses\n\t\t * and add the appropriate class.\n\t\t * If the value validates as an date, add a class of nf-pass\n\t\t * If the value does not validate as date, add a class of nf-fail\n\t\t *\n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\tdateKeyup: function( el, model, keyCode ) {\n\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t* Get our current date format\n\t\t\t */\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid date.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( ! this.isDateValid(value, format, fieldID) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tchangeHoursMinutes: function( e, fieldModel ) {\n\t\t\tlet type = '';\n\t\t\tlet container = jQuery( e.target ).closest( '.nf-field-element' );\n\n\t\t\t// Set our hour, minute, and ampm\n\t\t\tlet selected_hour = jQuery( container ).find( '.hour' ).val();\n\t\t\tlet selected_minute = jQuery( container ).find( '.minute' ).val();\n\t\t\tlet selected_ampm = jQuery( container ).find( '.ampm' ).val();\n\n\t\t\tfieldModel.set( 'selected_hour', selected_hour );\n\t\t\tfieldModel.set( 'selected_minute', selected_minute );\n\t\t\tfieldModel.set( 'selected_ampm', selected_ampm );\n\n\t\t\t// Detect time field inside a repeatable fieldset field to set correct value\n\t\t\tconst fieldId = fieldModel.get( 'id' );\n\t\t\tif(typeof fieldId === 'string' && fieldId.search(\".\") !== -1){\n\t\t\t\tconst setValue = typeof selected_ampm !== \"undefined\" ?\n\t\t\t\t\tselected_hour + \":\" + selected_minute + \" \" + selected_ampm :\n\t\t\t\t\tselected_hour + \":\" + selected_minute;\n\n\t\t\t\tif ( 'time_only' === fieldModel.get( 'date_mode' ) ) {\n\t\t\t\t\tfieldModel.set( 'value', setValue );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnfRadio.channel('field-repeater').trigger('set:value');\n\t\t\t}\n\t\t},\n\n\t\tisDateValid: function(value, format, fieldID){\n\t\t\tif(document.querySelector(\"[name='nf-field-\" + fieldID + \"']\") === null) return;\n\t\t\t//Get Date and Timestamp using the precise flatPickr instance of the field to catch the locale\n\t\t\tconst parseDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.parseDate(value, format);\n\t\t\t// If parsedDate is undefined, the date is invalid\n\t\t\tif (!parseDate) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst timestamp = parseDate.getTime();\n\t\t\tif (isNaN(timestamp)) {\n\t\t\t\treturn false; // Invalid date\n\t\t\t}\n\t\t\t//Convert timestamp back to Date object and string\n\t\t\tconst parsedDate = new Date(timestamp);\n\t\t\tconst formattedDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.formatDate(parsedDate, format);\n\t\t\t// Check vlaue and date string are deeply equals\n\t\t\treturn formattedDate === value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * When we init our checkbox model, register our renderClasses() function\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'checkbox' ), 'init:model', this.registerRenderClasses );\n\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:required', this.validateRequired );\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:modelData', this.validateModelData );\n nfRadio.channel( 'checkbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'checkbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tbeforeUpdateField: function( el, model ) {\n\t\t\tvar checked = jQuery( el ).prop( 'checked' );\n\t\t\tif ( checked ) {\n\t\t\t\tvar value = 1;\n\t\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\t\t\t} else {\n\t\t\t\tvar value = 0;\n\t\t\t\tjQuery( el ).removeClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\treturn el[0].checked;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\t\t\treturn model.get( 'value' ) != 0;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tif ( 1 == fieldModel.get( 'value' ) ) {\n\t\t\t\tcalcValue = fieldModel.get( 'checked_calc_value' );\n\t\t\t} else {\n\t\t\t\tcalcValue = fieldModel.get( 'unchecked_calc_value' );\n\t\t\t}\n\n\t\t\treturn calcValue;\n\t\t},\n\n\t\tregisterRenderClasses: function( model ) {\n\t\t\tif ( 'checked' == model.get( 'default_value' ) ) {\n\t\t\t\tmodel.set( 'value', 1 );\n\t\t\t} else {\n\t\t\t\tmodel.set( 'value', 0 );\n\t\t\t}\n\t\t\tmodel.set( 'customClasses', this.customClasses );\n\t\t\tmodel.set( 'customLabelClasses', this.customLabelClasses );\n\t\t\tmodel.set( 'maybeChecked', this.maybeChecked );\n\t\t},\n\n\t\tcustomClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tcustomLabelClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked-label';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked-label', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tmaybeChecked: function() {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\treturn ' checked';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckboxList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listcheckbox' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n nfRadio.channel( 'listcheckbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'terms' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listcheckbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n nfRadio.channel( 'terms' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'options' ).length ) {\n var selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n\n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n _.each( this.options, function( option, index ) {\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], option.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, option.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( option.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.fieldID = this.id;\n option.classes = this.classes;\n option.index = index;\n option.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n \n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), option.value )\n\t\t || -1 !== _.indexOf( this.value, option.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == option.selected && this.clean ) && 'undefined' === typeof this.value ) {\n\t\t selected = true;\n\t }\n\n\n // else if( ( option.selected && \"0\" != option.selected ) && this.clean ){\n\t // isSelected = true;\n\t // } else {\n\t // var testValues = _.map( this.value, function( value ) {\n\t // return value.toString();\n\t // } );\n\t //\n\t // option.isSelected = ( -1 != testValues.indexOf( option.value.toString() ) );\n\t // }\n\t option.selected = selected;\n\t option.isSelected = selected;\n\t option.required = this.required;\n option.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-option' );\n html += template( option );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n var calc_value = 0;\n var options = fieldModel.get( 'options' );\n if ( 0 != options.length ) {\n _.each( fieldModel.get( 'value' ), function( val ) {\n var tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n calc_value = Number( calc_value ) + Number( tmp_opt.calc );\n } );\n }\n return calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n \tvar optionArray = typeof selected[0] !== \"undefined\" ? selected[0].split( ',' ) : [];\n \tvar valueIndex = optionArray.indexOf( value );\n \tif( -1 !== valueIndex) {\n \t\toptionArray.splice( valueIndex, 1 );\n\t }\n \tselected = optionArray.join( ',' );\n }\n }\n\n // if ( 1 == model.get( 'show_other' ) ) {\n // model.set( 'reRender', true );\n // }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldImageList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listimage' ), 'init:model', this.register );\n nfRadio.channel( 'listimage' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listimage' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'image_options' ).length ) {\n var selected = _.filter( model.get( 'image_options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n \n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n if (this.allow_multi_select === 1) {\n this.old_classname = 'list-checkbox';\n this.image_type = 'checkbox';\n } else {\n this.image_type = 'radio';\n }\n\n if(this.list_orientation === 'horizontal') {\n this.flex_direction = 'row';\n } else {\n this.flex_direction = 'column';\n }\n var that = this;\n\n var num_columns = parseInt(this.num_columns) || 1;\n var current_column = 1;\n var current_row = 1;\n \n _.each( this.image_options, function( image, index ) {\n if (!this.show_option_labels) {\n image.label = '';\n } else {\n image.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(image.label) : image.label;\n }\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], image.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, image.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( image.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof image.visible ) {\n image.visible = true;\n }\n \n if(that.list_orientation === 'horizontal' && current_column <= num_columns) {\n image.styles = \"margin:auto;grid-column: \" + current_column + \"; grid-row = \" + current_row;\n\n if(current_column === num_columns) {\n current_column = 1;\n current_row += 1;\n } else {\n current_column += 1;\n }\n }\n\n image.image_type = that.image_type; \n image.fieldID = this.id;\n image.classes = this.classes;\n image.index = index;\n\n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), image.value )\n\t\t || -1 !== _.indexOf( this.value, image.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && image.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == image.selected && this.clean ) && ('undefined' === typeof this.value || '' === this.value)) {\n\t\t selected = true;\n\t }\n\n\t image.selected = selected;\n\t image.isSelected = selected;\n\t image.required = this.required;\n image.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-option' );\n html += template( image );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n value: this.value,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 1 == parseInt( fieldModel.get( 'allow_multi_select' ) ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a selcted value, use it.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n\n if(model.get('allow_multi_select') !== 1) {\n var selected = jQuery( el ).val();\n var options = model.get('image_options');\n _.each(options, function(option, index) {\n if(option.value === selected) {\n option.isSelected = true;\n option.selected = true;\n } else {\n option.isSelected = false;\n option.selected = false;\n }\n if(!option.isSelected) {\n option.selected = false;\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked-label');\n } else {\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked-label');\n }\n });\n } else {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n var optionArray = selected[0].split( ',' );\n var valueIndex = optionArray.indexOf( value );\n if( -1 !== valueIndex) {\n optionArray.splice( valueIndex, 1 );\n }\n selected = optionArray.join( ',' );\n }\n }\n }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRadio',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:modelValue', this.changeModelValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'init:model', this.register );\n\t\t\tnfRadio.channel( 'listradio' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:field', this.updateCheckedClass, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherText', this.renderOtherText );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\n\t\t\t\tif ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', selected.value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tchangeModelValue: function( model ) {\n\t\t\tif ( 1 == model.get( 'show_other' ) ) {\n\t\t\t\t// model.set( 'reRender', true );\n\t\t\t\tmodel.trigger( 'reRender');\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\t\t\tif ( '' == this.value ) {\n\t\t\t\tvar valueFound = true;\n\t\t\t} else {\n\t\t\t\tvar valueFound = false;\n\t\t\t}\n\t\t\t\n\t\t\t_.each( this.options, function( option, index ) {\n\t\t\t\tif ( option.value == this.value ) {\n\t\t\t\t\tvalueFound = true;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.selected = false;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.index = index;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\toption.required = this.required;\n\n\t\t\t\t/*\n\t\t\t\t * If we haven't edited this field yet, use the default checked\n\t\t\t\t */\n\t\t\t\tif ( this.clean && 1 == this.selected ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else if ( this.value == option.value ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-option' );\n\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\tif ( 1 == this.show_other ) {\n\t\t\t\tif ( 'nf-other' == this.value ) {\n\t\t\t\t\tvalueFound = false;\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.id,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.value,\n\t\t\t\t\trenderOtherText: this.renderOtherText,\n\t\t\t\t\tvalueFound: valueFound\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other' );\n\t\t\t\thtml += template( data );\n\t\t\t}\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherText: function() {\n\t\t\tif ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n\t\t\t\tif ( 'nf-other' == this.currentValue ) {\n\t\t\t\t\tthis.currentValue = '';\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.fieldID,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.currentValue\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other-text' );\n\t\t\t\treturn template( data );\n\t\t\t}\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t\n /*\n * Default to 0, in case we have no selection.\n */\n var calc_value = 0;\n \n\t\t\tif ( 0 != fieldModel.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( fieldModel.get( 'options' ), function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t},\n\n\t\tupdateCheckedClass: function( el, model ) {\n\t\t\tjQuery( '[name=\"' + jQuery( el ).attr( 'name' ) + '\"]' ).removeClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'ul' ).find( 'label' ).removeClass( 'nf-checked-label' );\n\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'li' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldNumber',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'number' ), 'init:model', this.maybeMinDefault );\n this.listenTo( nfRadio.channel( 'number' ), 'keyup:field', this.validateEntry );\n },\n\n maybeMinDefault: function( model ) {\n\n if( '' == model.get( 'value' ) && '' == model.get( 'placeholder' ) ){\n var min = model.get( 'num_min' );\n model.set( 'placeholder', min );\n }\n },\n\n validateEntry: function( el, model ) {\n var $el = jQuery( el );\n var val = $el.val();\n var floatVal = parseFloat( val );\n var min = $el.attr( 'min' );\n var max = $el.attr( 'max' );\n var step = $el.attr( 'step' ) ? $el.attr( 'step' ) : '1';\n\n if( min && floatVal < min ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-min', formModel.get( 'settings' ).fieldNumberNumMinError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-min' );\n }\n\n if ( max && floatVal > max ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-max', formModel.get( 'settings' ).fieldNumberNumMaxError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-max' );\n }\n\n let testVal = val.split('.');\n testVal = typeof(testVal[1]) !== 'undefined' ? testVal[1].length : 0;\n let testStep = step.split('.');\n testStep = typeof(testStep[1]) !== 'undefined' ? testStep[1].length : 0;\n let factor = Math.pow(10, testStep);\n\n if( step && val && ( testVal > testStep\n || 0 !== parseInt((factor * floatVal).toFixed()) % parseInt((factor * parseFloat(step)).toFixed()) ) ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-step', formModel.get( 'settings' ).fieldNumberIncrementBy + step );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-step' );\n }\n }\n\n });\n\n return controller;\n} );\n","define( 'controllers/mirrorField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\n\tvar controller = Marionette.Object.extend( {\n\t\tlisteningModel: '',\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerMirror );\n\t\t},\n\n\t\tregisterMirror: function( model ) {\n\t\t\tif ( model.get( 'mirror_field' ) ) {\n\t\t\t\tthis.listeningModel = model;\n\t\t\t\tvar targetID = model.get( 'mirror_field' );\n\t\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetID ), 'change:modelValue', this.changeValue );\n\t\t\t}\n\t\t},\n\n\t\tchangeValue: function( targetModel ) {\n\t\t\tthis.listeningModel.set( 'value', targetModel.get( 'value' ) );\n\t\t\t// this.listeningModel.set( 'reRender', true );\n\t\t\tthis.listeningModel.trigger( 'reRender' );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define( 'controllers/confirmField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar errorID = 'confirm-mismatch';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerConfirm );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.confirmKeyup );\n\t\t},\n\n\t\tregisterConfirm: function( confirmModel ) {\n\t\t\tif ( ! confirmModel.get( 'confirm_field' ) ) return;\n\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', function( formModal ){\n\t\t\t\tthis.registerConfirmListeners( confirmModel );\n\t\t\t});\n\t\t},\n\n\t\tregisterConfirmListeners: function( confirmModel ) {\n\t\t\t\n\t\t\tvar targetModel = nfRadio.channel( 'form-' + confirmModel.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\n\t\t\t//TODO: Add better handling for password confirm fields on the front end.\n\t\t\tif( 'undefined' == typeof targetModel ) return;\n\n\t\t\ttargetModel.set( 'confirm_with', confirmModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + confirmModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t},\n\n\t\tchangeValue: function( model ) {\n\t\t\tif ( 'undefined' == typeof model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t} else {\n\t\t\t\tvar targetModel = model;\n\t\t\t\tvar confirmModel = radioChannel.request( 'get:field', targetModel.get( 'confirm_with' ) );\n\t\t\t}\n\t\t\tvar targetID = targetModel.get( 'id' );\n\t\t\tvar confirmID = confirmModel.get( 'id' );\n\n\t\t\tif ( '' == confirmModel.get( 'value' ) || confirmModel.get( 'value' ) == targetModel.get( 'value' ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t} else {\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t}\n\t\t},\n\t\t\n\t\tconfirmKeyup: function( el, model, keyCode ) {\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tif ( model.get( 'confirm_field' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar confirmID = model.get( 'id' );\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t\tvar compareValue = targetModel.get( 'value' );\n\t\t\t\tvar confirmValue = currentValue;\n\t\t\t} else if ( model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'confirm_with' ) );\n\t\t\t\tvar confirmID = confirmModel.get( 'id' );\n\t\t\t\tvar confirmValue = confirmModel.get( 'value' );\n\t\t\t\tvar compareValue = confirmValue;\n\t\t\t}\n\n\t\t\tif ( 'undefined' !== typeof confirmModel ) {\n\t\t\t\tif ( '' == confirmValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else if ( currentValue == compareValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/updateFieldModel',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'update:field', this.updateField );\n\t\t},\n\n\t\tupdateField: function( model, value ) {\n\t\t\tif ( ! model.get( 'isUpdated' ) ) {\n\t\t\t\tmodel.set( 'value', value );\n\t\t\t\tmodel.set( 'isUpdated', true );\n\t\t\t\t/*\n\t\t\t\t * If we're working with an array, it won't trigger a change event on the value attribute.\n\t\t\t\t * Instead, we have to manually trigger a change event.\n\t\t\t\t */ \n\t\t\t\tif ( _.isArray( value ) ) {\n\t\t\t\t\tmodel.trigger( 'change:value', model );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitButton',['controllers/submitButton'], function( submitButton ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tbound: {},\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'init:model', this.registerHandlers );\n\t\t},\n\n\t\tregisterHandlers: function( fieldModel ) {\n\t\t\tif ( 'undefined' != typeof this.bound[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'click:field', this.click, this );\n\t\t\t/*\n\t\t\t * Register an interest in the 'before:submit' event of our form.\n\t\t\t */\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'before:submit', this.beforeSubmit, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:failed', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:response', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'enable:submit', this.maybeEnable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'disable:submit', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'processingLabel', this.processingLabel, fieldModel );\n\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.maybeEnable, fieldModel );\n\t\t\t\n\t\t\tthis.bound[ fieldModel.get( 'id') ] = true;\n\t\t},\n\n\t\tclick: function( e, fieldModel ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'submit', formModel );\n\t\t},\n\n\t\tbeforeSubmit: function() {\n\t\t\tif(this.get('disabled')) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'formID' ) ).trigger( 'processingLabel', this );\n\t\t},\n\n\t\tmaybeDisable: function( fieldModel ) {\n\n\t\t\tif( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tmaybeEnable: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * If the field reporting the error is not on the same form as the submit button, return false;\n\t\t\t */\n\t\t\tif ( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', this.get( 'formID' ) );\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\tthis.set( 'disabled', false );\n\t\t\t\tthis.trigger( 'reRender' );\n\t\t\t}\n\t\t},\n\n\t\tprocessingLabel: function() {\n\n\t\t\tthis.set( 'oldLabel', this.get( 'label' ) );\n\t\t\tthis.set( 'label', this.get( 'processing_label' ) );\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tresetLabel: function( response ) {\n\t\t\tif ( 'undefined' != typeof response.errors &&\n\t\t\t\t 'undefined' != typeof response.errors.nonce &&\n\t\t\t\t _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Do not reset label for nonce errors, which will re-submit the form.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n\t\t\t\tthis.set( 'label', this.get( 'oldLabel' ) );\n\t\t\t}\n\t\t\tthis.set( 'disabled', false );\n\t\t\tthis.trigger( 'reRender' );\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitDebug',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitDebug );\n },\n\n submitDebug: function( response, textStatus, jqXHR, formID ) {\n\n if( 'undefined' == typeof response.debug ) return;\n\n /* Form Debug Messages */\n if( 'undefined' != typeof response.debug.form ) {\n var debugMessages = document.createElement( 'span' );\n _.each(response.debug.form, function (message, index) {\n var messageText = document.createTextNode( message );\n debugMessages.appendChild( messageText );\n debugMessages.appendChild(\n document.createElement( 'br' )\n );\n });\n jQuery('.nf-debug-msg').html( debugMessages );\n }\n\n /* Console Debug Messages */\n if( 'undefined' != typeof response.debug.console ) {\n var style = '';\n console.log( '%c%s', style, 'NINJA SUPPORT' );\n _.each(response.debug.console, function (message, index) {\n console.log( message );\n });\n console.log( '%c%s', style, 'END NINJA SUPPORT' );\n }\n }\n\n });\n\n return controller;\n} );\n\n","define('controllers/getFormErrors',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function( model ) {\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\t\tif ( field.get( 'type' ) != 'submit' && field.get( 'errors' ).length > 0 ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ field.get( 'id' ) ] = field.get( 'errors' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn errors;\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","define('controllers/validateRequired',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.validateKeyup );\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.validateModelData );\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'validate:field', this.validateModelData );\n\t\t},\n\t\t\n\t\tvalidateKeyup: function( el, model, keyCode ) {\n\t\t\tif ( 1 != model.get( 'required' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( ! model.get( 'clean' ) ) {\n\t\t\t\tthis.validateRequired( el, model );\n\t\t\t}\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:required', el, model );\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tvar maskPlaceholder = this.getMask( model );\n\n // If the field has a mask...\n // AND that mask is equal to the current value... \n if ( maskPlaceholder && currentValue === maskPlaceholder ) {\n // If we have a pre-existing error...\n // OR if this field has been previously focused...\n if ( 0 < model.get( 'errors' ).length || ! model.get( 'clean' ) ) {\n // Persist that error.\n defaultReqValidation = false;\n }\n }\n // If our value is an empty string...\n if ( ! String(currentValue).trim() ) {\n // Throw an error.\n defaultReqValidation = false;\n }\n\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\t\t},\n\n\t\tgetMask: function( model ) {\n\t\t\tvar mask = model.get( 'mask' );\n\n\t\t\tif(\"undefined\" === typeof mask) return;\n\t\t\t\n\t\t\tswitch(mask) {\n\t\t\t\tcase '':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'currency':\n\t\t\t\t\tmask = nfi18n.currencySymbol;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\t\tmask = model.get( 'custom_mask' );\n\t\t\t\t\t/**\n\t\t\t\t\t * Break intentionally excluded so that this case\n\t\t\t\t\t * also executes the contents of default.\n\t\t\t\t\t */\n\t\t\t\tdefault:\n\t\t\t\t\tmask = mask.replace( /9/g, '_' );\n\t\t\t\t\tmask = mask.replace( /a/g, '_' );\n\t\t\t\t\tmask = mask.replace( /\\*/g, '_' );\n\t\t\t}\n\t\t\treturn mask;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) || model.get( 'clean' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * If we already have a required error on this model, return false\n\t\t\t */\n\t\t\tif ( model.get( 'errors' ).get( 'required-error' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcurrentValue = model.get( 'value' );\n\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tif ( ! String(currentValue).trim() ) {\n\t\t\t\tdefaultReqValidation = false;\n\t\t\t}\n\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:modelData', model );\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\n\t\t},\n\n\t\tmaybeError: function( valid, model ) {\n\t\t\tif ( ! valid ) {\n\n\t\t\t\tvar formModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:form' );\n\t\t\t\t\n\t\t\t\tif( 'undefined' != typeof formModel ) {\n\t\t\t\t\tnfRadio.channel('fields').request('add:error', model.get('id'), 'required-error', formModel.get('settings').validateRequiredField );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n\t\t\t}\t\t\t\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/submitError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitErrors );\n\t\t\t//Focus first invalid input after catching errors during submission\n\t\t\tnfRadio.channel( 'submit' ).reply( 'focus:firstInvalidInput', this.focusFirstInvalidInput );\n\t\t},\n\n\t\tsubmitErrors: function( response, textStatus, jqXHR, formID ) {\n\n\t\t\t// Check for nonce error.\n\t\t\tif ( _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Update nonce from response.\n\t\t\t\t\tnfFrontEnd.ajaxNonce = response.errors.nonce.new_nonce;\n\t\t\t\t\tnfFrontEnd.nonce_ts = response.errors.nonce.nonce_ts;\n\t\t\t\t\t// Re-submit form.\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'submit', formModel );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.fields ) > 0 ) {\n\t\t\t\t_.each( response.errors.fields, function( data, fieldID ) {\n if ( typeof( data ) === 'object' ) {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, data.slug, data.message );\n } else {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, 'required-error', data );\n }\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.form ) > 0 ) {\n\t\t\t\t_.each( response.errors.form, function( msg, errorID ) {\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'remove:error', errorID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'add:error', errorID, msg );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( 'undefined' != typeof response.errors.last ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.last.message ) {\n\t\t\t\t\tvar style = 'background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;';\n\t\t\t\t\tconsole.log( '%c NINJA FORMS SUPPORT: SERVER ERROR', style );\n\t\t\t\t\tconsole.log( response.errors.last.message );\n\t\t\t\t\tconsole.log( '%c END SERVER ERROR MESSAGE', style );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t */\n\t\t\t/*\n\t\t\t * Re-show any hidden fields during a form submission re-start.\n\t\t\t */\n\t\t\tjQuery( '#nf-form-' + formID + '-cont .nf-field-container' ).show();\n\t\t},\n\n\t\tfocusFirstInvalidInput: function(errors) {\n\t\t\tconst targetID = nfRadio.channel( 'fields' ).request( 'get:firstFieldByOrder', errors );\n\t\t\tif(document.getElementById(\"nf-field-\"+ targetID) !== null){\n\t\t\t\tdocument.getElementById(\"nf-field-\"+ targetID).focus();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/actionRedirect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionRedirect );\n\t\t},\n\n\t\tactionRedirect: function( response ) {\n\n\t\t\tif ( 'undefined' != typeof response.data.halt && 'undefined' != typeof response.data.halt.redirect && '' != response.data.halt.redirect ) {\n\t\t\t\twindow.location = response.data.halt.redirect;\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.redirect && '' != response.data.actions.redirect ) {\n\t\t\t\t\twindow.location = response.data.actions.redirect;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/actionSuccess',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.success_message && '' != response.data.actions.success_message ) {\n\t\t\t\t\tvar form_id = response.data.form_id;\n\t\t\t\t\tvar success_message = jQuery( '#nf-form-' + form_id + '-cont .nf-response-msg' );\n\t\t\t\t\tconst read = response.data.actions.success_message.replace( /(<([^>]+)>)/ig, '');\n\t\t\t\t\tsuccess_message.attr('tabindex', '0');\n\t\t\t\t\tsuccess_message.attr('aria-live', 'assertive');\n\t\t\t\t\tsuccess_message.attr(\"aria-label\", read);\n\t\t\t\t\t\n\t\t\t\t\tsuccess_message.html( response.data.actions.success_message ).show();\n\t\t\t\t\tsuccess_message.focus();\n\t\t\t\t\t//Let's check if the success message is already fully visible in the viewport without scrolling\n\t\t\t\t\tvar top_of_success_message = success_message.offset().top;\n\t\t\t\t\tvar bottom_of_success_message = success_message.offset().top + success_message.outerHeight();\n\t\t\t\t\tvar bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).height();\n\t\t\t\t\tvar top_of_screen = jQuery(window).scrollTop();\n\n\t\t\t\t\tvar the_element_is_visible = ((bottom_of_screen > bottom_of_success_message) && (top_of_screen < top_of_success_message));\n\n\t\t\t\t\tif(!the_element_is_visible){\n\t\t\t\t\t\t//The element isn't visible, so let's scroll to the success message as in the previous release, but with a short animation\n\t\t\t\t\t\tjQuery('html, body').animate({\n\t\t\t\t\t\t\tscrollTop: ( success_message.offset().top - 50 )\n\t\t\t\t\t\t}, 300 );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldSelect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'init:model', function( model ){\n\t\t\t\tif( 'list' == model.get( 'parentType' ) ) this.register( model );\n\t\t\t}, this );\n\n\t\t\tnfRadio.channel( 'listselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\tnfRadio.channel( 'listmultiselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherAttributes', this.renderOtherAttributes );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t//Check to see if there is a value set for the field\n\t\t\t\tvar savedVal = model.get( 'value' );\n\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\tselected = _.map( selected, function( opt ) { return opt.value } );\n\t\t\t\t\tvar value = selected;\n\t\t\t\t} else if ( 'listradio' !== model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = _.first( model.get( 'options' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof selected\n\t\t\t\t\t\t&& 'undefined' != typeof selected.value ) {\n\t\t\t\t\t\tvar value = selected.value;\n\t\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\t\tvar value = selected.label;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t/*\n\t * This part is re-worked to take into account custom user-meta\n\t * values for fields.\n\t */\n\t\t\t\tif( 'undefined' !== typeof savedVal && '' !== savedVal\n\t\t\t\t\t&& Array.isArray( savedVal ) ) {\n\t\t\t\t\tmodel.set( 'value', savedVal );\n\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\n\t\t\t_.each( this.options, function( option ) {\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t\t\t\tif ( _.isArray( this.value ) ) {\n // If we have a multiselect list...\n // AND it has selected values...\n\t\t\t\t\tif( 'listmultiselect' === this.type && 0 < this.value.length &&\n\t\t\t\t\t\t-1 != _.indexOf( this.value[ 0 ].split( ',' ), option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t} else if( -1 != _.indexOf( this.value, option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t}\n\t\t\t\t} else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else if ( ( 1 == option.selected && this.clean )\n\t\t\t\t\t&& 'undefined' === typeof this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else {\n\t\t\t\t\tvar selected = false;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n\t\t\t\toption.selected = selected;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\t\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listselect-option' );\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherAttributes: function() {\n\t\t\tvar otherAttributes = '';\n\n\t\t\tif( 'listmultiselect' == this.type ){\n\t\t\t\totherAttributes = otherAttributes + ' multiple';\n\n\t\t\t\tvar multiSize = this.multi_size || 5;\n\t\t\t\totherAttributes = otherAttributes + ' size=\"' + multiSize + '\"';\n\t\t\t}\n\n\t\t\treturn otherAttributes;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == fieldModel.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = fieldModel.get( 'options' )[0];\n\t\t\t\t\t}\t\t\n\t\t\t\t\tcalc_value = selected.calc;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/coreSubmitResponse',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', response.data.form_id );\n\t\t\t/*\n\t\t\t * If we have errors, don't hide or clear.\n\t\t\t */\n\t\t\tif ( 0 != _.size( response.errors ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.clear_complete ) {\n\t\t\t\t// nfRadio.channel( 'form-' + response.data.form_id ).trigger( 'reset' );\n\t\t\t\tformModel.get( 'fields' ).reset( formModel.get( 'loadedFields' ) );\n if ( 1 != response.data.settings.hide_complete ) {\n nfRadio.channel( 'captcha' ).trigger( 'reset' );\n }\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.hide_complete ) {\n\t\t\t\t/**\n\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t */\n\t\t\t\tformModel.trigger( 'hide' );\n\t\t\t\t// jQuery( '.nf-fields' ).hide();\n\t\t\t\t// jQuery( '.nf-form-title' ).hide();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldProduct',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'product' ), 'init:model', this.register );\n nfRadio.channel( 'product' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderProductQuantity', this.renderProductQuantity );\n model.set( 'renderProduct', this.renderProduct );\n model.set( 'renderOptions', this.renderOptions );\n },\n\n renderProduct: function(){\n switch( this.product_type ) {\n case 'user':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-textbox' );\n return template( this );\n break;\n case 'hidden':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-hidden' );\n return template( this );\n break;\n\n case 'dropdown':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-dropdown' );\n return template( this );\n break;\n default:\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-single' );\n return template( this );\n }\n },\n\n renderProductQuantity: function(){\n if ( 1 == this.product_use_quantity ) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-quantity' );\n return template( this );\n }\n },\n\n renderOptions: function() {\n var that = this;\n var html = '';\n _.each( this.options, function( option ) {\n if ( 1 == option.selected ) {\n var selected = true;\n } else {\n var selected = false;\n }\n\n option.selected = selected;\n option.fieldID = that.id;\n option.classes = that.classes;\n option.currentValue = that.value;\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-' + that.product_type + '-option' );\n html += template( option );\n } );\n\n return html;\n },\n\n getCalcValue: function( fieldModel ) {\n\n var product_price = fieldModel.get( 'product_price' );\n var product_quantity = fieldModel.get( 'value' );\n\n return product_price * product_quantity;\n }\n });\n\n return controller;\n} );\n\n","define('controllers/fieldTotal',[], function() {\n var controller = Marionette.Object.extend( {\n\n totalModel: {},\n\n productTotals: {},\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'total' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'shipping' ), 'init:model', this.registerShipping );\n },\n\n register: function( totalModel ){\n this.totalModel = totalModel;\n\n var formID = totalModel.get( 'formID' );\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'loaded', this.onFormLoaded );\n\n this.listenTo( nfRadio.channel( 'product' ), 'change:modelValue', this.onChangeProduct );\n this.listenTo( nfRadio.channel( 'quantity' ), 'change:modelValue', this.onChangeQuantity );\n },\n\n registerShipping: function( shippingModel ){\n this.shippingCost = shippingModel.get( 'shipping_cost' );\n },\n\n onFormLoaded: function( formModel ){\n\n var fieldModels = formModel.get( 'fields' ).models;\n\n var productFields = {};\n var quantityFields = {};\n\n for( var model in fieldModels ){\n\n var field = fieldModels[ model ];\n var fieldID = field.get( 'id' );\n\n // TODO: Maybe use switch\n if( 'product' == field.get( 'type' ) ){\n productFields[ fieldID ] = field;\n } else if( 'quantity' == field.get( 'type' ) ){\n var productID = field.get( 'product_assignment' );\n quantityFields[ productID ] = field;\n }\n }\n\n for( var productID in productFields ){\n\n var product = productFields[ productID ];\n\n var productPrice = Number( product.get( 'product_price' ) );\n\n if( quantityFields[ productID ] ){\n\n productPrice *= quantityFields[ productID ].get( 'value' );\n\n } else if( 1 == product.get( 'product_use_quantity' ) ){\n\n productPrice *= product.get( 'value' );\n\n }\n\n this.productTotals[ productID ] = productPrice;\n }\n\n this.updateTotal();\n },\n\n onChangeProduct: function( model ){\n var productID = model.get( 'id' );\n var productPrice = Number( model.get( 'product_price' ) );\n var productQuantity = Number( model.get( 'value' ) );\n var newTotal = productQuantity * productPrice;\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n onChangeQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var productField = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n var productPrice = Number( productField.get( 'product_price' ) );\n\n var quantity = Number( model.get( 'value' ) );\n\n var newTotal = quantity * productPrice;\n\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n updateTotal: function(){\n\n var newTotal = 0;\n\n for( var product in this.productTotals ){\n newTotal += Number( this.productTotals[ product ] );\n }\n\n if( newTotal && this.shippingCost ) {\n // Only add shipping if there is a cost.\n newTotal += Number(this.shippingCost);\n }\n\n this.totalModel.set( 'value', newTotal.toFixed( 2 ) );\n this.totalModel.trigger( 'reRender' );\n }\n });\n\n return controller;\n});\n","define('controllers/fieldQuantity',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'quantity' ), 'init:model', this.registerQuantity );\n },\n\n registerQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var product = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n\n if( product ) {\n product.set('product_use_quantity', 0);\n }\n },\n\n });\n\n return controller;\n});\n","/**\n * Model that represents a calculation.\n *\n * On init, we trigger a radio message so that controllers can do things when a calc model inits.\n */\ndefine( 'models/calcModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\t\tinitialize: function() {\n\t\t\t// Set our form id\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\t// Set our initial fields object to empty. This will hold our key/value pairs.\n\t\t\tthis.set( 'fields', {} );\n\t\t\t// Trigger a radio message to let controllers know we've inited this model.\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'init:model', this );\n\t\t\t// When we change the value of this calculation, send out a radio message\n\t\t\tthis.on( 'change:value', this.changeValue, this );\n\t\t},\n\n\t\t/**\n\t\t * Trigger a radio message when a field present in our calculation changes\n\t\t *\n\t\t * The listener that triggers/calls this function is in controllers/calculations\n\t\t * \n\t\t * @since 3.0\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( fieldModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:field', this, fieldModel );\n\t\t},\n\n\t\tchangeCalc: function( targetCalcModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:calc', this, targetCalcModel );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:value', this );\n\t\t}\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/calcCollection',['models/calcModel'], function( CalcModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: CalcModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n _.each( models, function( model ) {\n \tif( 'undefined' == typeof model.dec ) return;\n if ( '' === model.dec.toString().trim() ) model.dec = 2;\n model.dec = parseInt( model.dec );\n } );\n\t\t\t/*\n\t\t\t * Respond to requests for our calc model\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + options.formModel.get( 'id' ) ).reply( 'get:calc', this.getCalc, this );\n\t\t},\n\n\t\tgetCalc: function( key ) {\n\t\t\treturn this.findWhere( { name: key } );\n\t\t}\n\t} );\n\treturn collection;\n} );\n","/**\n * Controller responsible for keeping up with calculations.\n */\ndefine('controllers/calculations',['models/calcCollection'], function( CalcCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.calcs = {};\n\t\t\tthis.displayFields = {};\n\t\t\t// When our form initialises, check to see if there are any calculations that need to be tracked.\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', this.registerCalcs );\n \n // When our collection gets reset, reset calculation tracking as well.\n this.listenTo( nfRadio.channel( 'fields' ), 'reset:collection', this.resetCalcs );\n\n\t\t\t// When a calc model is initialised, run a setup function.\n\t\t\t// this.listenTo( nfRadio.channel( 'calc' ), 'init:model', this.setupCalc );\n\n\t\t\t// When a field referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:field', this.changeField );\n\n\t\t\t// When a calculation referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:calc', this.changeCalc );\n\n\t\t\t/*\n\t\t\t * Listen to our field model init for fields that want to display calc values.\n\t\t\t * If that field has a calc merge tag, replace it with the default calc value.\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t_.each( nfFrontEnd.use_merge_tags.calculations, function( fieldType ) {\n\t\t\t\tthat.listenTo( nfRadio.channel( 'fields-' + fieldType ), 'init:model', that.initDisplayField );\n\t\t\t} );\n\t\t\t\n\t\t\t// When we change our calc value, update any display fields.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:value', this.updateDisplayFields );\n\n\t\t\t// Set an init variable so that we only call reRender on the display field on change, not on init.\n\t\t\tthis.init = {};\n\t\t},\n \n /**\n * Passthrough function to reset tracking of calculations when the fieldCollection is reset.\n * \n * @since 3.2\n * @param backbone.collection fieldCollection\n * @return void\n */\n resetCalcs: function( fieldCollection ) {\n if( 'undefined' != typeof( fieldCollection.options.formModel ) ) {\n this.registerCalcs( fieldCollection.options.formModel ); \n }\n },\n\n\t\t/**\n\t\t * When our form loads, create a collection out of any calculations.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model formModel\n\t\t * @return void\n\t\t */\n\t\tregisterCalcs: function( formModel ) {\n\t\t\tvar calcCollection = new CalcCollection( formModel.get( 'settings' ).calculations, { formModel: formModel } );\n\t\t\tthis.calcs[ formModel.get( 'id' ) ] = calcCollection;\n\t\t\tvar that = this;\n\n\t\t\t_.each( calcCollection.models, function( calcModel ) {\n\t\t\t\t/*\n\t\t\t\t * We set a property on our init variable for the calc model we're looping over.\n\t\t\t\t * This property is set to true so that when we make changes to the calc model on the next line\n\t\t\t\t * the field view doesn't try to redraw itself.\n\t\t\t\t * If we don't do this, the 'reRender' attribute of the model will be set before the view is initialized,\n\t\t\t\t * which means that setting 'reRender' to true will never re-render the view.\n\t\t\t\t */\n\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = true;\n\t\t\t\t// Setup our calculation models with initial values and register listeners for calc-related fields.\n\t\t\t\tthat.setupCalc( calcModel );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * When a calculation model is instantiated from the registerCalcs function:\n\t\t *\n\t\t * Use a regex to get an array of the field keys\n\t\t * Setup an initial key/values array\n\t\t * Check for any references to other calculations\n\t\t * Set the initial value of our calculation\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @return void\n\t\t */\n\t\tsetupCalc: function( calcModel ) {\n\t\t\t// Setup our that var so we can access 'this' context in our loop.\n\t\t\tvar that = this;\n\t\t\t// Get our equation\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\t// We want to keep our original eq intact, so we use a different var for string replacment.\n\t\t\tvar eqValues = eq;\n // Store the name for debugging later.\n var calcName = calcModel.get( 'name' );\n\n\t\t\t/* TODO:\n\t\t\t * It might be possible to refactor these two if statements.\n\t\t\t * The difficulty is that each has a different method of retreiving the specific data model.\n\t\t\t */\n\t\t\t// Check to see if we have any field merge tags in our equation.\n\t\t\tvar fields = eq.match( new RegExp( /{field:(.*?)}/g ) );\n\t\t\tif ( fields ) {\n\t\t\t\t/*\n\t\t\t\t * fields is now an array of field keys that looks like:\n\t\t\t\t * ['{field:key'], ['{field:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our field keys to setup our field key array and hook up our field change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tfields = fields.map( function( field ) {\n\t\t\t\t\t// field will be {field:key}\n\t\t\t\t\tvar key = field.replace( ':calc}', '' ).replace( '}', '' ).replace( '{field:', '' );\n\n\t\t\t\t\t// Get our field model\n\t\t\t\t\tfieldModel = nfRadio.channel( 'form-' + calcModel.get( 'formID' ) ).request( 'get:fieldByKey', key );\n\n if( 'undefined' == typeof fieldModel ) return;\n\n fieldModel.set( 'clean', false );\n\n\t\t\t\t\t// Register a listener in our field model for value changes.\n\t\t\t\t\tfieldModel.on( 'change:value', calcModel.changeField, calcModel );\n\t\t\t\t\t// Get our calc value from our field model.\n\t\t\t\t\tvar calcValue = that.getCalcValue( fieldModel );\n\t\t\t\t\t// Add this field to our internal key/value object.\n\t\t\t\t\tthat.updateCalcFields( calcModel, key, calcValue );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'field', key, calcValue, eqValues );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check to see if we have any calc merge tags in our equation.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t/*\n\t\t\t\t * calcs is now an array of calc keys that looks like:\n\t\t\t\t * ['{calc:key'], ['{calc:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our calc keys to setup our calc key array and hook up our calc change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tcalcs = calcs.map( function( calc ) {\n\t\t\t\t\t// calc will be {calc:name}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\t// Get our calc model\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n\n\t\t\t\t\tif( 'undefined' == typeof targetCalcModel ) return;\n\n\t\t\t\t\t// Listen for changes on our calcluation, since we need to update our calc when it changes.\n\t\t\t\t\ttargetCalcModel.on( 'change:value', calcModel.changeCalc, calcModel );\n\t\t\t\t\t// // Get our calc value from our calc model.\n\t\t\t\t\tvar calcValue = targetCalcModel.get( 'value' );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'calc', name, calcValue, eqValues );\n\t\t\t\t} );\n\n\t\t\t}\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, 0 );\n // Scrub line breaks.\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n\t\t\t// Evaluate the equation and update the value of this model.\n\t\t\ttry {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Setup)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n\t\t\t} catch( e ) {\n //console.log( calcName );\n\t\t\t\tconsole.log( e );\n\t\t\t}\n \n // If for whatever reason, we got NaN, reset that to 0.\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\n\t\t},\n\n\t\t/**\n\t\t * Update an item in our key/value pair that represents our fields and calc values.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @param string \t\t\tkey\n\t\t * @param string \t\t\tcalcValue\n\t\t * @return void\n\t\t */\n\t\tupdateCalcFields: function( calcModel, key, calcValue ) {\n\t\t\tvar fields = calcModel.get( 'fields' );\n\t\t\tfields[ key ] = calcValue;\n\t\t\tcalcModel.set( 'fields', fields );\n\t\t},\n\n\t\t/**\n\t\t * Get a calc value from a field model.\n\t\t *\n\t\t * Sends a request to see if there's a special calc value\n\t\t * Uses the value of the field if there is not.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model fieldModel\n\t\t * @return value\n\t\t */\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * Send out a request on the field type and parent type channel asking if they need to modify the calc value.\n\t\t\t * This is helpful for fields like lists that can have a different calc_value than selected value.\n\t\t\t */\n\t\t\tvar value = nfRadio.channel( fieldModel.get( 'type' ) ).request( 'get:calcValue', fieldModel );\n\t\t\t\n\t\t\t// Preset with our field value.\n\t\t\tvar calcValue = fieldModel.get( 'value' );\n\t\t\tif( 'undefined' !== typeof value ) {\n\t\t\t\tif( value || 0 === value ) {\n\t\t\t\t\t// If we got a valid number, use that instead.\n\t\t\t\t\tcalcValue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\tvar machineNumber = localeConverter.numberDecoder(calcValue);\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(calcValue);\n\n\t\t\tif ( 'undefined' !== typeof machineNumber && jQuery.isNumeric( machineNumber ) ) {\n\t\t\t\tvalue = formattedNumber;\n\t\t\t} else {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\t// }\n\n\t\t\tif ( ! fieldModel.get( 'visible' ) ) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * Replace instances of key with calcValue. This is used to replace one key at a time.\n\t\t *\n\t\t * If no eq is passed, use calcModel eq.\n\t\t *\n\t\t * Returns a string with instances of key replaced with calcValue.\n\t\t * \n\t\t * @since version\n\t\t * @param string \tkey \n\t\t * @param string \tcalcValue \n\t\t * @param string \teq \n\t\t * @return string \teq \n\t\t */\n\t\treplaceKey: function( type, key, calcValue, eq ) {\n\t\t\teq = eq || calcModel.get( 'eq' );\n\n\t\t\ttag = '{' + type + ':' + key + '}';\n\t\t\tvar reTag = new RegExp( tag, 'g' );\n\n\t\t\tcalcTag = '{' + type + ':' + key + ':calc}';\n\t\t\tvar reCalcTag = new RegExp( calcTag, 'g' );\n\n\t\t\teq = eq.replace( reTag, calcValue );\n\t\t\teq = eq.replace( reCalcTag, calcValue );\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Takes a calcModel and returns a string eq with all keys replaced by their appropriate calcValues.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @return string\t\t\teq\n\t\t */\n\t\treplaceAllKeys: function( calcModel ) {\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\tvar that = this;\n\t\t\t_.each( calcModel.get( 'fields' ), function( value, key ) {\n\t\t\t\teq = that.replaceKey( 'field', key, value, eq );\n\t\t\t} );\n\n\t\t\t// If we have any calc merge tags, replace those as well.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calc ) {\n\t\t\t\t\t// calc will be {calc:key}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n if( 'undefined' == typeof targetCalcModel ) return;\n\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\teq = eq.replace( re, targetCalcModel.get( 'value' ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Function that's called when a field within the calculation changes.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @param backbone.model fieldModel\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( calcModel, fieldModel ) {\n\t\t\n\t\t\tvar key = fieldModel.get( 'key' );\n\t\t\tvar value = this.getCalcValue( fieldModel );\n\t\t\t\n\t\t\tthis.updateCalcFields( calcModel, key, value );\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, '0' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Field)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n if(this.debug())console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\t\t\n\t\t},\n\n\t\tinitDisplayField: function( fieldModel ) {\n\n\t\t\tif( ! fieldModel.get( 'default' ) || 'string' != typeof fieldModel.get( 'default' ) ) return;\n\n\t\t\tvar calcs = fieldModel.get( 'default' ).match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calcName ) {\n\t\t\t\t\tcalcName = calcName.replace( '{calc:', '' ).replace( '}', '' ).replace( ':2', '' );\n\t\t\t\t\tthis.displayFields[ calcName ] = this.displayFields[ calcName ] || [];\n\t\t\t\t\tthis.displayFields[ calcName ].push( fieldModel );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\tupdateDisplayFields: function( calcModel ) {\n\t\t\tvar that = this;\n\t\t\tif ( 'undefined' != typeof this.displayFields[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t_.each( this.displayFields[ calcModel.get( 'name' ) ], function( fieldModel ) {\n\n\t\t\t\t\tvar value = '';\n\n\t\t\t\t\t/**\n\t\t\t\t\t * if we have a html field, we want to use the actual\n\t\t\t\t\t * value and re-evaluate\n\t\t\t\t **/\n\t\t\t\t\tif( \"html\" === fieldModel.get( 'type' ) ) {\n\t\t\t\t\t\tvalue = fieldModel.get( 'value' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if not a html field, use default to re-evaluate\n\t\t\t\t\t\tvalue = fieldModel.get( 'default' );\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t This is a fix for the issue of the merge tags being\n\t\t\t\t\t display'd\n\t\t\t\t\t */\n\n\t\t\t\t\t// Find spans with calc data-key values\n\t\t\t\t\tvar spans = value.match( new RegExp( /<span data-key=\"calc:(.*?)<\\/span>/g ));\n\t\t\t\t\t_.each( spans, function( spanVar ) {\n\t\t\t\t\t\t// transform the span back into a merge tag\n\t\t\t\t\t\tvar tmpCalcTag = \"{\" + spanVar.replace(\"<span\" +\n\t\t\t\t\t\t\t\" data-key=\\\"\", \"\" ).replace( /\">(.*?)<\\/span>/, \"\" ) + \"}\";\n\n\t\t\t\t\t\tvalue = value.replace( spanVar, tmpCalcTag );\n\t\t\t\t\t} );\n\t\t\t\t\tvar calcs = value.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\t\t\t_.each( calcs, function( calc ) {\n//\t\t\t\t\t\tvar rounding = false;\n\t\t\t\t\t\t// calc will be {calc:key} or {calc:key:2}\n\t\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' ).replace( ':2', '' );\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * TODO: Bandaid for rounding calculations to two decimal places when displaying the merge tag.\n\t\t\t\t\t\t * Checks to see if we have a :2. If we do, remove it and set our rounding variable to true.\n\t\t\t\t\t\t */\n//\t\t\t\t\t\tif ( -1 != name.indexOf( ':2' ) ) {\n//\t\t\t\t\t\t\trounding = true;\n//\t\t\t\t\t\t\tname = name.replace( ':2', '' );\n//\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar calcModel = that.calcs[ fieldModel.get( 'formID' ) ].findWhere( { name: name } );\n\t\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\t\tvar calcValue = calcModel.get( 'value' ) ;\n//\t\t\t\t\t\tif ( rounding ) {\n//\t\t\t\t\t\t\tcalcValue = calcValue.toFixed( 2 );\n//\t\t\t\t\t\t\trounding = false;\n//\t\t\t\t\t\t}\n\t\t\t\t\t\t\n if( 'undefined' != typeof( calcValue ) ) {\n calcValue = that.applyLocaleFormatting( calcValue, calcModel );\n\t\t\t\t\t\t}\n /*\n * We replace the merge tag with the value\n\t\t\t\t\t\t * surrounded by a span so that we can still find it\n\t\t\t\t\t\t * and not affect itself or other field merge tags\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Unless this isn't a html field, then we just set\n\t\t\t\t\t\t * value to calcValue\n\t\t\t\t\t\t*/\n if( \"html\" === fieldModel.get( 'type' ) ) {\n\t value = value.replace(re, \"<span data-key=\\\"calc:\" + name + \"\\\">\"\n\t\t + calcValue + \"</span>\");\n } else {\n \tvalue = calcValue;\n }\n\t\t\t\t\t} );\n\t\t\t\t\t\n\t\t\t\t\tfieldModel.set( 'value', value );\n\t\t\t\t\tif ( ! that.init[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t\t\t// fieldModel.set( 'reRender', true );\n\t\t\t\t\t\tfieldModel.trigger( 'reRender' );\n\t\t\t\t\t}\n\t\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = false;\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\tgetCalc: function( name, formID ) {\n\t\t\treturn this.calcs[ formID ].findWhere( { name: name } );\n\t\t},\n\n\t\tchangeCalc: function( calcModel, targetCalcModel ) {\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\t\t\t\n\t\t\teqValues = eqValues.replace( '[', '' ).replace( ']', '' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Calc)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation( eqValues ) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\t\t},\n \n /**\n * Function to apply Locale Formatting to Calculations\n * @since Version 3.1\n * @param Str number\n * \n * @return Str\n */\n applyLocaleFormatting: function( number, calcModel ) {\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(number, calcModel.get('dec'));\n \n // // Split our string on the decimal to preserve context.\n // var splitNumber = number.split('.');\n // // If we have more than one element (if we had a decimal point)...\n // if ( splitNumber.length > 1 ) {\n // // Update the thousands and remerge the array.\n // splitNumber[ 0 ] = splitNumber[ 0 ].replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // var formattedNumber = splitNumber.join( nfi18n.decimal_point );\n // }\n // // Otherwise (we had no decimal point)...\n // else {\n // // Update the thousands.\n // var formattedNumber = number.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // }\n return formattedNumber;\n\t\t},\n\t\t\n\t\tlocaleDecodeEquation: function( eq ) {\n\t\t\tvar result = '';\n\t\t\tvar expression = '';\n\t\t\tvar pattern = /[0-9.,]/;\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\t// This pattern accounts for all whitespace characters (including thin space).\n\t\t\teq = eq.replace( /\\s/g, '' );\n\t\t\teq = eq.replace( / /g, '' );\n\t\t\tvar characters = eq.split('');\n\t\t\t// foreach ( characters as character ) {\n\t\t\tcharacters.forEach( function( character ) {\n\t\t\t\t// If the character is numeric or '.' or ','\n\t\t\t\tif (pattern.test(character)) {\n\t\t\t\t\texpression = expression + character;\n\t\t\t\t} else {\n\t\t\t\t\t// If we reach an operator char, append the expression to the result\n\t\t\t\t\tif ( 0 < expression.length ) {\n\t\t\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t\t\t\texpression = '';\n\t\t\t\t\t}\n\t\t\t\t\tresult = result + character;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// The following catches the case of the last character being a digit.\n\t\t\tif ( 0 < expression.length ) {\n\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\tdebug: function(message) {\n\t\t\tif ( window.nfCalculationsDebug || false ) console.log(message);\n\t\t}\n\t\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/dateBackwardsCompat',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'pikaday-bc' ), 'init', this.dateBackwardsCompat );\t\n },\n\n dateBackwardsCompat: function( dateObject, fieldModel ) {\n \n /**\n * Start backwards compatibility for old pikaday customisation\n */\n // Legacy properties\n dateObject.pikaday = {};\n dateObject.pikaday._o = {};\n\n //Old hook for Pikaday Custom code\n nfRadio.channel( 'pikaday' ).trigger( 'init', dateObject, fieldModel );\n\n // If we've set a disableDayFn property in custom code, hook it up to Flatpickr\n if ( typeof dateObject.pikaday._o.disableDayFn !== 'undefined') {\n dateObject.set( 'disable', [ dateObject.pikaday._o.disableDayFn ] );\n }\n\n //Compatibility for i18n pikaday function\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined' || typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n\n let locale = dateObject.config.locale;\n\n if ( typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n locale.firstDayOfWeek = dateObject.pikaday._o.firstDay;\n }\n\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined') {\n if ( typeof dateObject.pikaday._o.i18n.weekdays !== 'undefined') {\n locale.weekdays.longhand = dateObject.pikaday._o.i18n.weekdays;\n }\n\n if ( typeof dateObject.pikaday._o.i18n.weekdaysShort !== 'undefined') {\n locale.weekdays.shorthand = dateObject.pikaday._o.i18n.weekdaysShort;\n }\n \n if ( typeof dateObject.pikaday._o.i18n.months !== 'undefined') {\n jQuery( '.flatpickr-monthDropdown-months > option' ).each( function() {\n this.text = dateObject.pikaday._o.i18n.months[ this.value ];\n } );\n }\n }\n\n dateObject.set( 'locale', locale );\n \n }\n\n if ( Object.keys(dateObject.pikaday._o).length > 0 ) {\n console.log(\"%cDeprecated Ninja Forms Pikaday custom code detected.\", \"color: Red; font-size: large\");\n console.log(\"You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details.\");\n }\n\n }\n\n });\n\n return controller;\n});\n","define('controllers/fieldDate',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'date' ), 'init:model', this.initModel );\n this.listenTo( nfRadio.channel( 'date' ), 'render:view', this.initDatepicker );\n },\n\n initModel: function(model) {\n this.registerFunctions(model);\n },\n\n registerFunctions: function( model ) {\n model.set( 'renderHourOptions', this.renderHourOptions );\n model.set( 'renderMinuteOptions', this.renderMinuteOptions );\n model.set( 'maybeRenderAMPM', this.maybeRenderAMPM );\n model.set( 'customClasses', this.customClasses );\n // Overwrite the default getValue() method.\n model.getValue = this.getValue;\n },\n\n renderHourOptions: function() {\n return this.hours_options;\n },\n\n renderMinuteOptions: function() {\n return this.minutes_options;\n },\n\n maybeRenderAMPM: function() {\n if ( 'undefined' == typeof this.hours_24 || 1 == this.hours_24 ) {\n return;\n }\n var requiredAttr = (this.required == 1) ? 'aria-required=\"true\" required' : '';\n return `<div style=\"float:left;\" class=\"time-wrap\"><select id=\"ampm-select\" class=\"ampm extra\" aria-label=\"am-pm-select\" ${requiredAttr}><option value=\"am\">AM</option><option value=\"pm\">PM</option></select></div>`;\n },\n\n initDatepicker: function ( view ) {\n view.model.set( 'el', view.el );\n var el = jQuery( view.el ).find( '.nf-element' )[0];\n view.listenTo( nfRadio.channel( 'form-' + view.model.get( 'formID' ) ), 'before:submit', this.beforeSubmit, view );\n\n // If we are using a time_only date_mode, then hide the date input.\n if ( 'undefined' != typeof view.model.get( 'date_mode' ) && 'time_only' == view.model.get( 'date_mode' ) ) {\n jQuery( el ).hide();\n return false;\n }\n\n // Make sure date format is correctly converted.\n var dateFormat = this.convertDateFormat( view.model.get( 'date_format' ) );\n // Make sure this is a deep conversion of the original model.\n view.model.set('date_format', dateFormat);\n\n var dateSettings = {\n onReady: ( selectedDates, datestr, dateObject ) => {\n dateObject.altInput.setAttribute( 'aria-labelledby', jQuery( el ).attr( \"aria-labelledby\" ) );\n dateObject.altInput.setAttribute( 'aria-invalid', false );\n },\n dateFormat: dateFormat,\n altFormat: dateFormat,\n altInput: true,\n ariaDateFormat: dateFormat,\n mode: \"single\",\n allowInput: true,\n disableMobile: \"true\",\n minDate: this.getMinDate(view.model),\n maxDate: this.getMaxDate(view.model),\n };\n \n const nfCustomLocale = this.checkCustomLocale();\n if(nfCustomLocale){\n dateSettings.locale = nfCustomLocale;\n }\n\n // Filter our datepicker settings object.\n let filteredDatePickerSettings = nfRadio.channel( 'flatpickr' ).request( 'filter:settings', dateSettings, view );\n if ( 'undefined' != typeof filteredDatePickerSettings ) {\n dateSettings = filteredDatePickerSettings;\n }\n\n var dateObject = flatpickr( el, dateSettings );\n // Set default value only when value is missing\n if ( 1 == view.model.get( 'date_default' ) && ! view.model.get( 'value' ) ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate);\n view.model.set( 'value', dateObject.defaultDate );\n }\n // Set default value in RFF context, only if value equals today's date\n if( 1 == view.model.get( 'date_default' ) && \n typeof view.model.get('id') === \"string\" && \n view.model.get('id').includes('.') && \n typeof view.model.get( 'value' ) === \"object\" && \n this.isSameDay( view.model.get( 'value' ), new Date() )\n ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate, true);\n view.model.set( 'value', dateObject.defaultDate );\n }\n\n //Trigger Pikaday backwards compatibility\n nfRadio.channel( 'pikaday-bc' ).trigger( 'init', dateObject, view.model, view );\n\n nfRadio.channel( 'flatpickr' ).trigger( 'init', dateObject, view.model, view );\n },\n\n beforeSubmit: function( formModel ) { \n //Get value from input if the default date wasn't edited in the field and the value is still a global unformatted date object\n if( _.isObject( this.model.get( 'value' ) ) ){\n // We detect the flatpickr input inside the element by its type instead of ID as the dot in the repeater children ID is not compatible with query selector\n const date_value = this.el.querySelector(\"input[type='hidden']\").value;\n this.model.set( 'value', date_value );\n }\n //Detect repeater and set data at the repeater level\n const inputID = this.el.dataset.fieldId;\n if(inputID.search(\".\") !== -1){\n nfRadio.channel('field-repeater').trigger('set:value');\n // Don't convert string value into object for time_only type in repeatable fieldset field\n if(this.model.get( 'date_mode' ) === \"time_only\"){\n return;\n }\n }\n\n if ( 'date_only' == this.model.get( 'date_mode' ) ) {\n return false;\n }\n let hour = jQuery( this.el ).find( '.hour' ).val();\n let minute = jQuery( this.el ).find( '.minute' ).val();\n let ampm = jQuery( this.el ).find( '.ampm' ).val();\n let current_value = this.model.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let date_value = {\n date: date,\n hour: hour,\n minute: minute,\n ampm: ampm,\n };\n\n this.model.set( 'value', date_value );\n },\n\n getMinDate: function( fieldModel ) {\n let minDate = null;\n if(typeof fieldModel.get( 'year_range_start' ) !== \"undefined\"){\n const yearRangeStart = fieldModel.get( 'year_range_start' );\n if( yearRangeStart ) {\n minDate = flatpickr.formatDate(new Date(String( yearRangeStart )), fieldModel.get('date_format'));\n }\n } \n return minDate;\n },\n\n getMaxDate: function( fieldModel ) {\n let maxDate = null;\n if(typeof fieldModel.get( 'year_range_end' ) !== \"undefined\"){\n const yearRangeEnd = fieldModel.get( 'year_range_end' );\n if( yearRangeEnd ) {\n maxDate = flatpickr.formatDate(new Date(String( yearRangeEnd )), fieldModel.get('date_format'));\n }\n }\n return maxDate;\n },\n\n convertDateFormat: function( dateFormat ) {\n //If dateFormat is empty or null, try to get a value from the Field's model\n if(!dateFormat && this.model){\n dateFormat = this.model.get('date_format');\n } \n //If it is still empty or null set it to be \"default\"\n if (!dateFormat){\n dateFormat = \"default\";\n }\n //Convert PHP format in setting to flatPickr expected setting if needed\n const lookup = {\n 'MM/DD/YYYY': 'm/d/Y',\n 'MM-DD-YYYY': 'm-d-Y',\n 'MM.DD.YYYY': 'm.d.Y',\n 'DD/MM/YYYY': 'd/m/Y',\n 'DD-MM-YYYY': 'd-m-Y',\n 'DD.MM.YYYY': 'd.m.Y',\n 'YYYY-MM-DD': 'Y-m-d',\n 'YYYY/MM/DD': 'Y/m/d',\n 'YYYY.MM.DD': 'Y.m.d',\n 'dddd, MMMM D YYYY': 'l, F d Y',\n 'default': nfi18n.dateFormat ? nfi18n.dateFormat : 'default'\n };\n return Object.keys(lookup).includes(dateFormat) ? lookup[dateFormat] : dateFormat;\n },\n\n customClasses: function( classes ) {\n if ( 'date_and_time' == this.date_mode ) {\n classes += ' date-and-time';\n }\n return classes;\n },\n //retrieve localized values and assign them to flatpickr locale format\n checkCustomLocale: function() {\n let customLocale = {};\n if(nfi18n){\n if(nfi18n.months || nfi18n.monthsShort){\n customLocale.months = {};\n if(nfi18n.months){\n customLocale.months.longhand = nfi18n.months;\n }\n if(nfi18n.monthsShort){\n customLocale.months.shorthand = nfi18n.monthsShort;\n }\n }\n if(nfi18n.weekdays || nfi18n.weekdaysShort){\n customLocale.weekdays = {};\n if(nfi18n.weekdays){\n customLocale.weekdays.longhand = nfi18n.weekdays;\n }\n if(nfi18n.weekdaysShort){\n customLocale.weekdays.shorthand = nfi18n.weekdaysShort;\n }\n }\n if(nfi18n.startOfWeek){\n customLocale.firstDayOfWeek = nfi18n.startOfWeek;\n }\n }\n return _.isEmpty(customLocale) ? false : customLocale;\n },\n\n // This function is called whenever we want to know the value of the date field.\n // Since it could be a date/time field, we can't return just the value.\n getValue: function() {\n\n if ( 'date_only' == this.get( 'date_mode' ) ) {\n return this.get( 'value' );\n }\n let el = this.get( 'el' );\n let hour = jQuery( el ).find( '.hour' ).val();\n let minute = jQuery( el ).find( '.minute' ).val();\n let ampm = jQuery( el ).find( '.ampm' ).val();\n let current_value = this.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let value = '';\n\n if ( 'undefined' != typeof date ) {\n value += date;\n }\n\n if ( 'undefined' != typeof hour && 'undefined' != typeof minute ) {\n value += ' ' + hour + ':' + minute;\n }\n\n if ( 'undefined' != typeof ampm ) {\n value += ' ' + ampm;\n }\n\n return value;\n\n // let date_value = {\n // date: date,\n // hour: hour,\n // minute: minute,\n // ampm: ampm,\n // };\n\n // this.model.set( 'value', date_value );\n },\n\n isSameDay: function(date1, date2) {\n const d1 = new Date(date1);\n const d2 = new Date(date2);\n d1.setHours(0, 0, 0, 0);\n d2.setHours(0, 0, 0, 0);\n return d1.getTime() === d2.getTime();\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldRecaptcha',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha' ), 'init:model', this.initRecaptcha );\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.resetRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\n \t\tnfRadio.channel( 'recaptcha' ).reply( 'update:response', this.updateResponse, this, model.id );\n },\n\n updateResponse: function( response, fieldID ) {\n \tvar model = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\tmodel.set( 'value', response );\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n },\n\n resetRecaptcha: function() {\n\t\t\tvar recaptchaID = 0;\n\t\t\tjQuery( '.g-recaptcha' ).each( function() {\n\t\t\t\ttry {\n\t\t\t\t\tgrecaptcha.reset( recaptchaID );\n\t\t\t\t} catch( e ){\n\t\t\t\t\tconsole.log( 'Notice: Error trying to reset grecaptcha.' );\n\t\t\t\t}\n\t\t\t\trecaptchaID++;\n\t\t\t} );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRecaptchaV3',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha_v3' ), 'init:model', this.initRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\t\t\t\n\t const formID = model.get( 'formID' );\n\t\t\t//Run recaptcha on init to allow cookie validation process\n\t\t\tthis.processRecaptcha(formID, model);\n\t\t\t//Rerun process every 110 seconds ( prevent Google recaptcha timeout out at 12O seconds )\n\t\t\tsetInterval(this.processRecaptcha, 110000, formID, model );\n },\n\n\t\tprocessRecaptcha: function(formID, model) {\n\t\t\ttry{\n\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'disable:submit', model );\n\t\t\t\tgrecaptcha.ready( function() {\n\t\t\t\t\tgrecaptcha.execute( model.get( 'site_key' ), {\n\t\t\t\t\t\taction: 'register'\n\t\t\t\t\t} ).then( function( token ) {\n\t\t\t\t\t\tmodel.set( 'value', token );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'enable:submit', model );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t} catch (e) {\n\t\t\t\t//Wait for the form to fully load and display error\n\t\t\t\tjQuery(document).on( 'nfFormReady', (layoutView) => {\n\t\t\t\t\t//Get consent details as recaptcha failed to load\n\t\t\t\t\tlet consent = nf_check_recaptcha_consent();\n\t\t\t\t\n\t\t\t\t\t//Get submit button\n\t\t\t\t\tlet submitFieldID;\n\t\t\t\t\tmodel.collection.models.forEach( (fieldModel) => {\n\t\t\t\t\t\tif(fieldModel.get(\"type\") === \"submit\"){\n\t\t\t\t\t\t\tsubmitFieldID = fieldModel.get(\"id\");\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\t//Display generic error\n\t\t\t\t\tnfRadio.channel( 'fields' ).request(\"add:error\", submitFieldID, \"recaptcha-v3-missing\", model.collection.options.formModel.get(\"settings\").recaptchaConsentMissing );\n\t\t\t\t\t//Create error message and add possible interaction with cookie consent depending on consent result\n\t\t\t\t\t//Display filterable error to add consent\n\t\t\t\t\tthis.nf_build_default_consent_action(model, consent.services, submitFieldID, layoutView );\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tnf_build_default_consent_action: function ( model, services, submitFieldID, layoutView ) {\n\t\t\t//Return if no consent management is detected\n\t\t\tconst returnIf = services.length <= 1 && services.includes(\"missing_cookie\") || services.length <= 0;\n\t\t\tif( !returnIf ){ \n\t\t\t\tlet actionElement = document.createElement(\"div\");\n\t\t\t\tactionElement.setAttribute(\"id\", \"nf_recaptcha_consent_event\");\n\t\t\t\tactionElement.innerText += model.collection.options.formModel.get(\"settings\").recaptchaConsentEvent;\n\n\t\t\t\tconst detailData = {\n\t\t\t\t\t\"services\": services,\n\t\t\t\t\t\"element\": actionElement,\n\t\t\t\t\t\"submitFieldID\": submitFieldID, \n\t\t\t\t\t\"layoutView\": layoutView\n\t\t\t\t}\n\t\t\t\t//Allow filtering of the element before printing it\n\t\t\t\tlet nf_consent_link_event = new CustomEvent('nf_consent_link', {detail: detailData});\n\t\t\t\tdocument.dispatchEvent(nf_consent_link_event);\n\n\t\t\t\t//Append action to error element\n\t\t\t\tconst genericErrorElements = document.getElementsByClassName(\"nf-error-recaptcha-v3-missing\");\n\t\t\t\tconst genericErrorElementsList = Array.prototype.slice.call(genericErrorElements);\n\t\t\t\tgenericErrorElementsList.forEach( (error) => {\n\t\t\t\t\terror.append( actionElement );\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n });\n\n return controller;\n} );\n","define('controllers/fieldHTML',[], function() {\n var controller = Marionette.Object.extend({\n\n htmlFields: [],\n trackedMergeTags: [],\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'fields-html' ), 'init:model', this.setupFieldMergeTagTracking );\n },\n\n setupFieldMergeTagTracking: function( fieldModel ) {\n this.htmlFields.push( fieldModel );\n\n var formID = fieldModel.get( 'formID' );\n\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'init:model', function( formModel ){\n\n var mergeTags = fieldModel.get( 'default' ).match( new RegExp( /{field:(.*?)}/g ) );\n if ( ! mergeTags ) return;\n\n _.each( mergeTags, function( mergeTag ) {\n var fieldKey = mergeTag.replace( '{field:', '' ).replace( '}', '' );\n var fieldModel = formModel.get( 'fields' ).findWhere({ key: fieldKey });\n if( 'undefined' == typeof fieldModel ) return;\n\n this.trackedMergeTags.push( fieldModel );\n this.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'change:modelValue', this.updateFieldMergeTags );\n }, this );\n\n // Let's get this party started!\n this.updateFieldMergeTags();\n }, this );\n },\n\n updateFieldMergeTags: function( fieldModel ) {\n _.each( this.htmlFields, function( htmlFieldModel ){\n var value = htmlFieldModel.get( 'value' );\n _.each( this.trackedMergeTags, function( fieldModel ){\n\n /* Search the value for any spans with mergetag data-key\n * values\n */\n var spans = value.match( new RegExp( /<span data-key=\"field:(.*?)<\\/span>/g ) );\n\t _.each( spans, function( spanVar ) {\n\t /* See if the span string contains the current\n * fieldModel's key. If so replace the span with a\n * merge tag for evaluation.\n */\n if( -1 < spanVar.indexOf( \"data-key=\\\"field:\" + fieldModel.get( 'key' ) ) ) {\n\t value = value.replace( spanVar, \"{field:\" + fieldModel.get( 'key' ) + \"}\" );\n }\n\t } );\n\n var mergeTag = '{field:' + fieldModel.get( 'key' ) + '}';\n\n const fieldValue = fieldModel.get( 'type' ) === \"repeater\" ? this.displayRepeaterData(fieldModel) : fieldModel.getValue();\n\n\t /* We replace the merge tag with the value\n\t * surrounded by a span so that we can still find it\n\t * and not affect itself or other field merge tags\n\t */\n value = value.replace( mergeTag, \"<span data-key=\\\"field:\"\n + fieldModel.get( 'key' ) + \"\\\">\"\n + fieldValue + \"</span>\" );\n }, this ) ;\n htmlFieldModel.set( 'value', value );\n htmlFieldModel.trigger( 'reRender' );\n }, this );\n },\n\n displayRepeaterData: function(fieldModel) {\n const repeaterFieldIDs = Object.keys(fieldModel.getValue());\n let returnHTML = \"\", passedFields = [];\n\n _.each(repeaterFieldIDs, function(fieldID){\n if(passedFields.indexOf(fieldID) === -1) {\n const field = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n if(typeof field !== \"undefined\"){\n const excluded = ['submit', 'html', 'hidden', 'password', 'passwordconfirm', 'divider', 'hr', 'note', 'unknown', 'button', 'confirm', 'creditcard', 'creditcardcvc', 'creditcardexpiration', 'creditcardfullname', 'creditcardnumber', 'creditcardzip', 'recaptcha', 'recaptcha_v3' ];\n if(excluded.indexOf(field.get('type')) === -1 && field.getValue().toString().length > 0){\n const index = Number(fieldID.split(\"_\").pop()) + 1;\n returnHTML += \"<p>\"+ field.get(\"label\") + \" \" + index + \" : \" + field.getValue() + \"</p>\";\n passedFields.push(fieldID);\n } \n }\n }\n });\n\n return returnHTML;\n }\n\n });\n\n return controller;\n});\n\n","/**\n* When a form is loaded, enable any help text that appears on the page.\n*/\ndefine('controllers/helpText',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', this.initHelpText );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'fieldset:added', this.initHelpText );\n\n\t\t\tnfRadio.channel( 'form' ).reply( 'init:help', this.initHelpText );\n\t\t},\n\n\t\tinitHelpText: function( view ) {\n\n\t\t\tif(view && !view.el && typeof view.get === 'function'){\n\t\t\t\t//Catch repeater fieldset added event\n\t\t\t\tif(view.get(\"type\") === \"repeater\"){\n\t\t\t\t\tview.el = \"#nf-form-\" + view.get(\"formID\") + \"-cont\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-help' ).each( function(el) {\n\t\t\t\tvar jBox = jQuery( this ).jBox( 'Tooltip', {\n\t\t\t\t\ttheme: 'TooltipBorder',\n\t\t\t\t\tcontent: jQuery( this ).data( 'text' ),\n\t\t\t\t\ttrigger: 'mouseenter focus',\n\t\t\t\t\tcloseOnMouseleave: true,\n\t\t\t\t\tcloseOnClick: true\n\t\t\t\t});\n\t\t\t// Hide tooltip on keydown and mouseleave\n\t\t\tjQuery(this).on('keydown mouseleave', function() {\n\t\t\t\tjBox.close();\n\t\t\t});\n\t\t\t} );\n\t\t}\n\t});\n\n\treturn controller;\n } );\n\n","define('controllers/fieldTextbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n nfRadio.channel( 'textbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n if('currency' == fieldModel.get('mask')){\n var form = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n var currencySymbol = ('undefined' !== typeof form) ? form.get( 'currencySymbol' ) : '';\n var currencySymbolDecoded = jQuery('<textarea />').html(currencySymbol).text();\n return fieldModel.get( 'value' ).replace(currencySymbolDecoded, '');\n }\n\n\t\t\treturn fieldModel.get( 'value' );\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","/**\n * When a form is loaded, enable any rtes in textareas.\n */\ndefine('controllers/fieldTextareaRTE',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'render:view', this.initTextareaRTEs );\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'click:extra', this.clickExtra );\n\n\t\t\t// Instantiates the variable that holds the media library frame.\n\t\t\tthis.meta_image_frame;\n\n\t\t\tthis.currentContext = {};\n\n\t\t\tif( 'undefined' == typeof jQuery.summernote ) return;\n\n\t\t\tjQuery.summernote.options.icons = {\n\t\t 'align': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignCenter': 'dashicons dashicons-editor-aligncenter',\n\t\t 'alignJustify': 'dashicons dashicons-editor-justify',\n\t\t 'alignLeft': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignRight': 'dashicons dashicons-editor-alignright',\n\t\t 'indent': 'dashicons dashicons-editor-indent',\n\t\t 'outdent': 'dashicons dashicons-editor-outdent',\n\t\t // 'arrowsAlt': 'dashicons fa-arrows-alt',\n\t\t 'bold': 'dashicons dashicons-editor-bold',\n\t\t 'caret': 'dashicons dashicons-arrow-down',\n\t\t // 'circle': 'dashicons fa-circle',\n\t\t 'close': 'dashicons dashicons-dismiss',\n\t\t 'code': 'dashicons dashicons-editor-code',\n\t\t 'eraser': 'dashicons dashicons-editor-removeformatting',\n\t\t // 'font': 'dashicons fa-font',\n\t\t // 'frame': 'dashicons fa-frame',\n\t\t 'italic': 'dashicons dashicons-editor-italic',\n\t\t 'link': 'dashicons dashicons-admin-links',\n\t\t 'unlink': 'dashicons dashicons-editor-unlink',\n\t\t 'magic': 'dashicons dashicons-editor-paragraph',\n\t\t // 'menuCheck': 'dashicons fa-check',\n\t\t 'minus': 'dashicons dashicons-minus',\n\t\t 'orderedlist': 'dashicons dashicons-editor-ol',\n\t\t // 'pencil': 'dashicons fa-pencil',\n\t\t // 'picture': 'dashicons fa-picture-o',\n\t\t // 'question': 'dashicons fa-question',\n\t\t 'redo': 'dashicons dashicons-redo',\n\t\t 'square': 'dashicons fa-square',\n\t\t // 'strikethrough': 'dashicons fa-strikethrough',\n\t\t // 'subscript': 'dashicons fa-subscript',\n\t\t // 'superscript': 'dashicons fa-superscript',\n\t\t 'table': 'dashicons dashicons-editor-table',\n\t\t // 'textHeight': 'dashicons fa-text-height',\n\t\t // 'trash': 'dashicons fa-trash',\n\t\t 'underline': 'dashicons dashicons-editor-underline',\n\t\t 'undo': 'dashicons dashicons-undo',\n\t\t 'unorderedlist': 'dashicons dashicons-editor-ul',\n\t\t // 'video': 'dashicons fa-youtube-play'\n\t\t };\n\n\t\t},\n\n\t\tinitTextareaRTEs: function( view ) {\n\t\t\tif ( 1 != view.model.get( 'textarea_rte' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Custom Button for links\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t// var linkButton = this.linkButton();\n\t\t\tvar linkButton = function( context ) {\n\t\t\t\treturn that.linkButton( context );\n\t\t\t}\n\t\t\tvar mediaButton = function( context ) {\n\t\t\t\treturn that.mediaButton( context );\n\t\t\t}\n\n\t\t\tvar toolbar = [\n\t\t\t\t[ 'paragraphStyle', ['style'] ],\n\t\t\t\t[ 'fontStyle', [ 'bold', 'italic', 'underline','clear' ] ],\n\t\t\t\t[ 'lists', [ 'ul', 'ol' ] ],\n\t\t\t [ 'paragraph', [ 'paragraph' ] ],\n\t\t\t [ 'customGroup', [ 'linkButton', 'unlink' ] ],\n\t\t\t [ 'table', [ 'table' ] ],\n\t\t\t [ 'actions', [ 'undo', 'redo' ] ],\n\t\t\t];\n\n\t\t\tif ( 1 == view.model.get( 'textarea_media' ) && 0 != userSettings.uid ) {\n\t\t\t\ttoolbar.push( [ 'tools', [ 'mediaButton' ] ] );\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-element' ).summernote( {\n\t\t\t\ttoolbar: toolbar,\n\t\t\t\tbuttons: {\n\t\t\t\t\tlinkButton: linkButton,\n\t\t\t\t\tmediaButton: mediaButton\n\t\t\t\t},\n\t\t\t\theight: 150, //set editable area's height\n\t\t\t\tcodemirror: { // codemirror options\n\t\t\t\t theme: 'monokai',\n\t\t\t\t lineNumbers: true\n\t\t\t\t},\n\t\t\t\tprettifyHtml: true,\n\t\t\t\tcallbacks: {\n\t\t\t\t\tonChange: function( e ) {\n\t\t\t\t\t\tview.model.set( 'value', jQuery( this ).summernote( 'code' ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar linkMenu = jQuery( view.el ).find( '.link-button' ).next( '.dropdown-menu' ).find( 'button' );\n\t\t\tlinkMenu.replaceWith(function () {\n\t\t\t return jQuery( '<div/>', {\n\t\t\t class: jQuery( linkMenu ).attr( 'class' ),\n\t\t\t html: this.innerHTML\n\t\t\t } );\n\t\t\t} );\n\t\t},\n\n\t\tlinkButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar linkButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-button' );\n\t\t\tvar linkDropdown = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-dropdown' );\n\t\t\treturn ui.buttonGroup([\n\t\t\t\tui.button({\n\t className: 'dropdown-toggle link-button',\n\t contents: linkButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertLink,\n\t click: function( e ) {\n\t \tthat.clickLinkButton( e, context );\n\t },\n\t data: {\n\t toggle: 'dropdown'\n\t }\n\t }),\n\t\t\t\tui.dropdown([\n\t ui.buttonGroup({\n\t children: [\n\t ui.button({\n\t contents: linkDropdown({}),\n\t tooltip: ''\n\t }),\n\t ]\n\t })\n\t ])\n\t\t\t]).render();\n\t\t},\n\n\t\tmediaButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar mediaButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-media-button' );\n\t\t\treturn ui.button({\n\t className: 'dropdown-toggle',\n\t contents: mediaButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertMedia,\n\t click: function( e ) {\n\t \tthat.openMediaManager( e, context );\n\t }\n\t }).render();\n\t\t},\n\n\t\topenMediaManager: function( e, context ) {\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\t// If the frame already exists, re-open it.\n\t\t\tif ( this.meta_image_frame ) {\n\t\t\t\tthis.meta_image_frame.open();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Sets up the media library frame\n\t\t\tthis.meta_image_frame = wp.media.frames.meta_image_frame = wp.media({\n\t\t\t\ttitle: nfi18n.fieldTextareaRTESelectAFile,\n\t\t\t\tbutton: { text: 'insert' }\n\t\t\t});\n\n\t\t\tvar that = this;\n\n\t\t\t// Runs when an image is selected.\n\t\t\tthis.meta_image_frame.on('select', function(){\n\n\t\t\t\t// Grabs the attachment selection and creates a JSON representation of the model.\n\t\t\t\tvar media_attachment = that.meta_image_frame.state().get('selection').first().toJSON();\n\t\t\t\tthat.insertMedia( media_attachment, context );\n\t\t\t});\n\n\t\t\t// Opens the media library frame.\n\t\t\tthis.meta_image_frame.open();\n\t\t},\n\n\t\tclickLinkButton: function ( e, context ) {\n\t\t\tvar range = context.invoke( 'editor.createRange' );\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\tvar text = range.toString()\n\t\t\tthis.currentContext = context;\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('hide.bs.dropdown', function ( e ) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('shown.bs.dropdown', function ( e ) {\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-text' ).val( text );\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-url' ).focus();\n\t\t\t});\n\t\t},\n\n\t\tclickExtra: function( e ) {\n\t\t\tvar textEl = jQuery( e.target ).parent().find( '.link-text' );\n\t\t\tvar urlEl = jQuery( e.target ).parent().find( '.link-url' );\n\t\t\tvar isNewWindowEl = jQuery( e.target ).parent().find( '.link-new-window' );\n\t\t\tthis.currentContext.invoke( 'editor.restoreRange' );\n\t\t\tif ( jQuery( e.target ).hasClass( 'insert-link' ) ) {\n\t\t\t\tvar text = textEl.val();\n\t\t\t\tvar url = urlEl.val();\n\t\t\t\tvar isNewWindow = ( isNewWindowEl.prop( 'checked' ) ) ? true: false;\n\t\t\t\tif ( 0 != text.length && 0 != url.length ) {\n\t\t\t\t\tthis.currentContext.invoke( 'editor.createLink', { text:text, url: url, isNewWindow: isNewWindow } );\n\t\t\t\t}\n\t\t\t}\n\t\t\ttextEl.val( '' );\n\t\t\turlEl.val( '' );\n\t\t\tisNewWindowEl.prop( 'checked', false );\n\t\t\tjQuery( e.target ).closest( 'div.note-btn-group.open' ).removeClass( 'open' );\n\t\t},\n\n\t\tinsertMedia: function( media, context ) {\n\t\t\tcontext.invoke( 'editor.restoreRange' );\n\t\t\tif ( 'image' == media.type ) {\n\t\t\t\tcontext.invoke( 'editor.insertImage', media.url );\n\t\t\t} else {\n\t\t\t\tcontext.invoke( 'editor.createLink', { text: media.filename, url: media.url } );\n\t\t\t}\n\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldStarRating',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'starrating' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'starrating' ), 'render:view', this.initRating );\n },\n\n register: function( model ) {\n\t\t\tmodel.set( 'renderRatings', this.renderRatings );\n\t\t},\n\n initRating: function( view ){\n jQuery( view.el ).find( '.starrating' ).rating();\n\n },\n\n renderRatings: function() {\n \tvar html = document.createElement( 'span' );\n \t// changed from 'default' to 'number_of_stars'\n \tfor (var i = 0; i <= this.number_of_stars - 1; i++) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-starrating-star' );\n var num = i + 1;\n var checked = '';\n\n // Check to see if current 'star' matches the default value\n\t\t if ( this.value == num ) {\n\t\t \tchecked = 'checked';\n\t\t }\n var htmlFragment = template( { id: this.id, classes: this.classes, num: num, checked: checked, required: this.required } );\n html.appendChild(\n document.createRange().createContextualFragment( htmlFragment )\n );\n \t}\n \treturn html.innerHTML;\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldTerms',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n },\n\n register: function( model ) {\n // nfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'click:extra', this.clickExtra );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'keyup:field', this.keyUpExtra );\n },\n \n clickExtra: function( e, model ) {\n var el = jQuery( e.currentTarget );\n var value = el.parent().find( '.extra-value' ).val();\n this.addOption( model, value );\n },\n\n keyUpExtra: function( el, model, keyCode ) {\n if( 13 != keyCode ) return;\n this.addOption( model, el.val() );\n },\n\n addOption: function( model, value ) {\n if( ! value ) return;\n var options = model.get( 'options' );\n var new_option = {\n label: value,\n value: value,\n selected: 0,\n };\n options.push( new_option );\n\n var selected = model.get( 'value' );\n selected.push( value );\n\n // model.set( 'reRender', true );\n model.trigger( 'reRender' );\n }\n \n });\n\n return controller;\n} );\n","/**\n * Before we display our form content, ask if anyone wants to give us a different view.\n * Before we do anything with the data, pass it through any loading filters.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2016 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/formContentFilters',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Init our fieldContent view and load filter arrays.\n\t\t\t */\n\t\t\tthis.viewFilters = [];\n\t\t\tthis.loadFilters = [];\n\n\t\t\t/*\n\t\t\t * Listen for requests to add new formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\n\t\t\t/*\n\t\t\t * -- DEPRECATED RADIO REPLIES --\n\t\t\t * \n\t\t\t * The 'fieldContents' channel has been deprecated as of 3.0 (it was present in the RC) in favour of 'formContent'.\n\t\t\t * Listen for requests to add new fieldContent filters.\n\t\t\t * \n\t\t\t * TODO: These radio listeners on the 'fieldContents' channels are here for backwards compatibility and should be removed eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our fieldContent filters.\n\t\t\t * TODO: Remove eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\t\t\n\t\t\t/*\n\t\t\t * -- END DEPRECATED --\n\t\t\t */\n\t\t},\n\n\t\taddViewFilter: function( callback, priority ) {\n\t\t\tthis.viewFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetViewFilters: function() {\n\t\t\treturn this.viewFilters;\n\t\t},\n\n\t\taddLoadFilter: function( callback, priority ) {\n\t\t\tthis.loadFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetLoadFilters: function() {\n\t\t\treturn this.loadFilters;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define( 'views/fieldItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'div',\n\n\t\tinitialize: function() {\n \t\tthis.listenTo( this.model, 'reRender', this.render, this );\n \t\tthis.listenTo( this.model, 'change:addWrapperClass', this.addWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:removeWrapperClass', this.removeWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:invalid', this.toggleAriaInvalid, this );\n\n \t\tthis.template = '#tmpl-nf-field-' + this.model.get( 'wrap_template' );\n\t\t},\n\n\t\ttest: function( model ) {\n\t\t\tconsole.log( 'firing from trigger 1' );\n\t\t},\n\n\t\taddWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'addWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).addClass( cl );\n\t\t\t\tthis.model.set( 'addWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\tremoveWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'removeWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).removeClass( cl );\n\t\t\t\tthis.model.set( 'removeWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\ttoggleAriaInvalid: function() {\n\t\t\tvar invalid = this.model.get( 'invalid' );\n\t\t\tjQuery( '[aria-invalid]', this.el ).attr( 'aria-invalid', JSON.stringify( invalid ) );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\n\t \t\t/*\n \t\t * If we have an input mask, init that mask.\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'mask' ) && '' != String(this.model.get( 'mask' )).trim() ) {\n \t\t\tif ( 'custom' == this.model.get( 'mask') ) {\n \t\t\t\tvar mask = this.model.get( 'custom_mask' );\n \t\t\t} else {\n \t\t\t\tvar mask = this.model.get( 'mask' );\n \t\t\t}\n\n\t\t\t\t/* POLYFILL */ Number.isInteger = Number.isInteger || function(value) { return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value; };\n \t\t\tif ( Number.isInteger( mask ) ) {\n \t\t\t\tmask = mask.toString();\n \t\t\t}\n\n\t\t\t\tif ( 'currency' == mask ) {\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'formID' ) );\n\n\t\t\t\t\tvar thousands_sep = form.get( 'thousands_sep' );\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: if we have a , replace it with a string with a space\n\t\t\t\t\t */\n\t\t\t\t\tif ( ' ' == thousands_sep || 160==thousands_sep.charCodeAt(0) ) {\n\t\t\t\t\t\tthousands_sep = ' ';\n\t\t\t\t\t}\n\t\t\t\t\tvar currencySymbol = jQuery( '<div/>' ).html( form.get( 'currencySymbol' ) ).text();\n\t\t\t\t\tthousands_sep = jQuery( '<div/>' ).html( thousands_sep ).text();\n\t\t\t\t\tvar decimal_point = jQuery( '<div/>' ).html( form.get( 'decimal_point' ) ).text();\n\t\t\t\t\t\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: Currently, these options use the plugin-wide defaults for locale.\n\t\t\t\t\t * When per-form locales are implemented, these will need to be revisited.\n\t\t\t\t\t */\n\t\t\t\t\tvar autoNumericOptions = {\n\t\t\t\t\t digitGroupSeparator : thousands_sep,\n\t\t\t\t\t decimalCharacter : decimal_point,\n\t\t\t\t\t currencySymbol : currencySymbol,\n\t\t\t\t\t\tmodifyValueOnWheel : false\n\t\t\t\t\t};\n\n\t\t\t\t\t// Initialization\n\t\t\t\t\tvar autoN_el = jQuery(jQuery( this.el ).find( '.nf-element' )[ 0 ]);\n\t\t\t\t\tnew AutoNumeric( jQuery( this.el ).find( '.nf-element' )[ 0 ], autoNumericOptions );\n\t\t\t\t\t// update the value for the model so it gets saved to\n\t\t\t\t\t// the database properly\n\t\t\t\t\tvar context = this;\n\t\t\t\t\tautoN_el.on( 'change', function( e ) {\n\t\t\t\t\t\tcontext.model.set( 'value', e.target.value );\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tjQuery( this.el ).find( '.nf-element' ).mask( mask );\n\t\t\t\t} \t\t\t\n\t \t\t}\n\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'render:view', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'render:view', this );\n\t\t},\n\n\t\ttemplateHelpers: function () {\n\t\t\tvar that = this;\n\t \treturn {\n\n\t\t\t\trenderElement: function(){\n\t\t\t\t\t// Account for falsey default value of 0.\n\t\t\t\t\tif( this.clean && ! this.value && 0 === this.default ) this.value = '0';\n\t\t\t\t\tvar tmpl = _.find( this.element_templates, function( tmpl ) {\n\t\t\t\t\t\tif ( 0 < jQuery( '#tmpl-nf-field-' + tmpl ).length ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-' + tmpl );\n\t\t\t\t\t\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabel: function() {\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-label' );\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabelClasses: function () {\n\t\t\t\t\tvar classes = '';\n\t\t\t\t\tif ( 'undefined' != typeof this.customLabelClasses ) {\n\t\t\t\t\t\tclasses = this.customLabelClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\trenderPlaceholder: function() {\n\t\t\t\t\tvar placeholder = this.placeholder;\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customPlaceholder ) {\n\t\t\t\t\t\tplaceholder = this.customPlaceholder( placeholder );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( '' != String(placeholder).trim() ) {\n\t\t\t\t\t\treturn 'placeholder=\"' + _.escape( placeholder ) + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderWrapClass: function() {\n\t\t\t\t\tvar wrapClass = 'field-wrap ' + this.type + '-wrap';\n\n\t\t\t\t\t// Check if type and parentType are different. If, so\n\t\t\t\t\t// then add appropriate parentType wrap class\n\t\t\t\t\tif ( this.type !== this.parentType ) {\n\t\t\t\t\t\twrapClass = wrapClass + ' ' + this.parentType + '-wrap';\n\t\t\t\t\t}\n\t\t\t\t\t// If we have an old_classname defined, output wrap class for backward compatibility\n\t\t\t\t\tif ( 'undefined' != typeof this.old_classname && 0 < String(this.old_classname).trim().length ) {\n\t\t\t\t\t\twrapClass += ' ' + this.old_classname + '-wrap';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof customWrapClass ) {\n\t\t\t\t\t\twrapClass = customWrapClass( wrapClass );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn wrapClass;\n\t\t\t\t},\n\n\t\t\t\trenderClasses: function() {\n\t\t\t\t\tvar classes = this.classes;\n\n\t\t\t\t\tif ( this.error ) {\n\t\t\t\t\t\tclasses += ' nf-error';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclasses = classes.replace( 'nf-error', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof this.element_class && 0 < String(this.element_class).trim().length ) {\n\t\t\t\t\t\tclasses += ' ' + this.element_class;\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a function for adding extra classes, add those.\n\t\t\t\t\t */\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customClasses ) {\n\t\t\t\t\t\tclasses = this.customClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n\n\t\t\t\tmaybeDisabled: function() {\n\t\t\t\t\tif ( 1 == this.disable_input ) {\n\t\t\t\t\t\treturn 'disabled';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n maybeRequired: function() {\n if ( 1 == this.required ) {\n return 'aria-required=\"true\" required';\n } else {\n return '';\n }\n },\n\n\t\t\t\tmaybeDisableAutocomplete: function() {\n\t\t\t\t\tif ( 1 == this.disable_browser_autocomplete ) {\n\t\t\t\t\t\treturn 'autocomplete=\"off\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst autoType = this.translateAutoCompletionType( this.type );\n\t\t\t\t\t\treturn 'autocomplete=\"' + autoType + '\"';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\ttranslateAutoCompletionType: function( type ){\n\t\t\t\t\t//https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n\t\t\t\t\tswitch( type ){\n\t\t\t\t\t\tcase 'address':\n\t\t\t\t\t\t\treturn 'street-address';\n\t\t\t\t\t\tcase 'address2':\n\t\t\t\t\t\t\treturn 'address-line2';\n\t\t\t\t\t\tcase 'city':\n\t\t\t\t\t\t\treturn 'address-level2';\n\t\t\t\t\t\tcase 'email':\n\t\t\t\t\t\t\treturn 'email';\n\t\t\t\t\t\tcase 'firstname':\n\t\t\t\t\t\t\treturn 'given-name';\n\t\t\t\t\t\tcase 'lastname':\n\t\t\t\t\t\t\treturn 'family-name';\n\t\t\t\t\t\tcase 'zip':\n\t\t\t\t\t\t\treturn 'postal-code';\n\t\t\t\t\t\tcase 'phone':\n\t\t\t\t\t\t\treturn 'tel';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn 'on';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tmaybeInputLimit: function() {\n\t\t\t\t\tif ( 'characters' == this.input_limit_type && '' != String(this.input_limit).trim() ) {\n\t\t\t\t\t\treturn 'maxlength=\"' + this.input_limit + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tgetHelpText: function() {\n\t\t\t\t\t// this.help_text = jQuery( this.help_text ).html();\n\t\t\t\t\t// return ( 'undefined' != typeof this.help_text ) ? this.help_text.replace(/\"/g, \""\") : '';\n\t\t\t\t\treturn ( 'undefined' != typeof this.help_text ) ? this.help_text : '';\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderHelp: function() {\n\n\t\t\t\t\t// use jQuery().text() to make sure help_text has actual\n\t\t\t\t\t// text and not just HTML tags.\n\t\t\t\t\tvar check_text_par = document.createElement( 'p' );\n check_text_par.innerHTML = this.help_text;\n\n var shouldRenderHelpText = false;\n // Check for text or image tags\n\t\t\t\t\tif ( 0 != String(jQuery( check_text_par ).text()).trim().length\n\t\t\t\t\t\t|| 0 < jQuery( check_text_par ).find('img').length ) {\n \tshouldRenderHelpText = true;\n }\n\n\t\t\t\t\tif ( 'undefined' != typeof this.help_text && shouldRenderHelpText ) {\n\n\t\t\t\t\t\t// Strip HTML tags for accessibility\n\t\t\t\t\t\tfunction stripTags( input ) {\n\t\t\t\t\t\t\treturn input.replace(/<\\/?[^>]+(>|$)/g, \"\").trim();\n\t\t\t\t\t\t}\n \n\t\t\t\t\t\tvar icon = document.createElement( 'span' );\n\t\t\t\t\t\ticon.classList.add( 'fa', 'fa-info-circle', 'nf-help' );\n\t\t\t\t\t\ticon.setAttribute( 'data-text', this.getHelpText() );\n\t\t\t\t\t\ticon.setAttribute( 'tabindex', '0' ); // Make it focusable\n\t\t\t\t\t\ticon.setAttribute( 'aria-describedby', 'hidden-help-text-' + this.id ); // Link to the hidden description\n\t\t\t\t\t \n\t\t\t\t\t\t// Create a hidden element for screen readers\n\t\t\t\t\t\tvar hiddenHelpText = document.createElement( 'span' );\n\t\t\t\t\t\thiddenHelpText.textContent = stripTags( this.help_text ); // Output the help text without tags\n\t\t\t\t\t\thiddenHelpText.id = 'hidden-help-text-' + this.id;\n\t\t\t\t\t\thiddenHelpText.classList.add( 'nf-sr-only' ); // Visually hidden but available for screen readers\n\t\t\t\t\t\thiddenHelpText.setAttribute( 'role', 'tooltip' );\n\t\t\t\t\t \n\t\t\t\t\t\ticon.appendChild( hiddenHelpText ); // Append the hidden help text\n \n\t\t\t\t\t\treturn icon.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tfieldDescription.setAttribute('id', 'nf-description-' + this.id);\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n renderNumberDefault: function() {\n // If the field is clean...\n if ( this.clean ) {\n // If we have a default...\n if ( 0 === this.default || this.default ) {\n return this.default;\n } // If we do not have a placeholder...\n else if ( ! this.placeholder ) {\n return this.value;\n } // Otherwise...\n else {\n return '';\n }\n } // Otherwise... (The field is not clean.)\n else {\n return this.value;\n }\n },\n\n\t\t\t\trenderCurrencyFormatting: function( number ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Our number will have a . as a decimal point. We want to replace that with our locale decimal, nfi18n.decimal_point.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedDecimal = number.toString().replace( '.', '||' );\n\t\t\t\t\t/*\n\t\t\t\t\t * Add thousands separator. Our original number var won't have thousands separators.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedThousands = replacedDecimal.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n\t\t\t\t\tvar formattedNumber = replacedThousands.replace( '||', nfi18n.decimal_point );\n\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', that.model.get( 'formID' ) );\n\t\t\t\t\tvar currency_symbol = form.get( 'settings' ).currency_symbol;\n\t\t\t\t\treturn currency_symbol + formattedNumber;\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderTime: function() {\n\t\t\t\t\tif ( 'time_only' == this.date_mode || 'date_and_time' == this.date_mode ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\n\t\tevents: {\n\t\t\t'change .nf-element': 'fieldChange',\n\t\t\t'keyup .nf-element': 'fieldKeyup',\n\t\t\t'click .nf-element': 'fieldClick',\n\t\t\t'click .extra': 'extraClick',\n\t\t\t'change .extra': 'extraChange',\n\t\t\t'blur .nf-element': 'fieldBlur'\n\t\t},\n\n\t\tfieldChange: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar response = nfRadio.channel( 'nfAdmin' ).request( 'change:field', el, this.model );\n\t\t},\n\n\t\tfieldKeyup: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar keyCode = e.keyCode;\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t},\n\n\t\tfieldClick: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:field', el, this.model );\n\t\t},\n\n\t\textraClick: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:extra', e, this.model );\n\t\t},\n\n\t\textraChange: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:extra', e, this.model );\n\t\t},\n\n\t\tfieldBlur: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'blur:field', el, this.model );\n\t\t},\n\n\t\tonAttach: function() {\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'attach:view', this );\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/beforeField',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-before'\n });\n\n return view;\n} );\n","define( 'views/fieldErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-field-error',\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldErrorCollection',['views/fieldErrorItem'], function( fieldErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: fieldErrorItem,\n\n\t\tinitialize: function( options ) {\n\t\t\tthis.fieldModel = options.fieldModel;\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tif ( 0 == this.fieldModel.get( 'errors' ).models.length ) {\n this.fieldModel.removeWrapperClass( 'nf-error' );\n this.fieldModel.removeWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-pass' );\n this.fieldModel.setInvalid( false );\n } else {\n this.fieldModel.removeWrapperClass( 'nf-pass' );\n this.fieldModel.addWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-error' );\n this.fieldModel.setInvalid( true );\n }\n\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/inputLimit',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-input-limit',\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'field-' + this.model.get( 'id' ) ), 'keyup:field', this.updateCount );\n \tthis.count = this.model.get( 'input_limit' );\n \tthis.render();\n },\n\n updateCount: function( el, model ) {\n var value = jQuery( el ).val();\n var regex = /\\s+/gi;\n var words = String(value).trim().replace(regex, ' ').split(' ');\n var wordCount = words.length;\n var charCount = value.length;\n \n /**\n * PHP Config has 'char' instead of 'characters', so I changed it to\n * 'characters', but added 'char' here so existing form fields will\n * act correctly\n **/\n if ( 'characters' == this.model.get( 'input_limit_type' )\n || 'char' == this.model.get( 'input_limit_type' ) ) {\n jQuery( el ).attr( 'maxlength', this.model.get( 'input_limit' ) );\n this.count = this.model.get( 'input_limit' ) - charCount;\n } else {\n this.count = this.model.get( 'input_limit' ) - wordCount;\n var limit = this.model.get( 'input_limit' );\n if( wordCount > limit ){\n jQuery( el ).val( words.slice( 0, limit).join( ' ' ) );\n }\n }\n\n \tthis.render();\n },\n\n templateHelpers: function() {\n \tvar that = this;\n \treturn {\n \t\tcurrentCount: function() {\n \t\t\treturn that.count;\n \t\t}\n \t}\n }\n\n });\n\n return view;\n} );\n","define( 'views/afterField',['views/fieldErrorCollection', 'views/inputLimit'], function( fieldErrorCollection, InputLimitView ) {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-after',\n\n initialize: function() {\n \t\tthis.model.on( 'change:errors', this.changeError, this );\n },\n\n onRender: function() {\n \t/*\n \t * If we have an error, render our error view.\n \t * TODO: Perhaps move to a controller?\n \t */\n \tvar errorEl = jQuery( this.el ).children( '.nf-error-wrap' );\n \t\tthis.errorCollectionView = new fieldErrorCollection( { el: errorEl, collection: this.model.get( 'errors' ), fieldModel: this.model } );\n if ( 0 < this.model.get( 'errors' ).length ) {\n this.errorCollectionView.render(); \n }\n \n \t\t/*\n \t\t * If we have an input limit set, render the view that contains our counter\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'input_limit' ) && '' != String(this.model.get( 'input_limit' )).trim() ){\n \t\t\tvar inputLimitEl = jQuery( this.el ).children( '.nf-input-limit');\n \t\t\tthis.inputLimitView = new InputLimitView( { el: inputLimitEl, model: this.model } );\n\t\t\t\tinputLimitEl.attr('aria-live', 'polite');\n\t\t\t\tinputLimitEl.attr('role', 'status');\n\t\t\t\tinputLimitEl.attr('aria-relevant', 'additions');\n\t\t\t\tinputLimitEl.attr( 'aria-atomic', true );\n \t\t}\n },\n\n changeError: function() {\n\t\t\tthis.errorCollectionView.render();\n\t\t},\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterFieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField'], function( fieldItem, beforeField, afterField ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n return containerClass;\n }\n }\n }\n });\n\n return view;\n} );\n\n","define( 'views/fieldRepeaterFieldCollection',['views/fieldRepeaterFieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterSetLayout',[ 'views/fieldRepeaterFieldCollection' ], function( fieldCollection ) {\n var view = Marionette.LayoutView.extend({\n tagName: 'fieldset',\n template: '#tmpl-nf-field-repeater-set',\n\n regions: {\n fields: '.nf-repeater-fieldset',\n },\n\n onRender: function() {\n this.fields.show( new fieldCollection( { collection: this.model.get( 'fields' ) } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-remove-fieldset': 'removeSet',\n },\n\n removeSet: function() {\n nfRadio.channel( \"field-repeater\" ).trigger( 'remove:fieldset', this.model )\n }\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterSetCollection',['views/fieldRepeaterSetLayout'], function( repeaterSetLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'div',\n\t\tchildView: repeaterSetLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterLayout',[ 'views/fieldRepeaterSetCollection' ], function( repeaterSetCollection ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'div',\n template: '#tmpl-nf-field-repeater',\n\n regions: {\n sets: '.nf-repeater-fieldsets',\n },\n\n initialize: function() {\n\n this.collection = this.model.get( 'sets' );\n\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'rerender:fieldsets', this.render );\n\n },\n\n onRender: function() { \n this.sets.show( new repeaterSetCollection( { collection: this.collection } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n renderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-add-fieldset': 'addSet'\n },\n\n addSet: function() {\n nfRadio.channel( 'field-repeater' ).trigger( 'add:fieldset', this.model.id ); \n },\n\n beforeSubmit: function() {\n\t\t\tthis.collection.beforeSubmit( this.model.get( 'sets' ) );\n\t\t}\n \n\n });\n\n return view;\n} );\n","define( 'views/fieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField', 'views/fieldRepeaterLayout'], function( fieldItem, beforeField, afterField, repeaterFieldLayout ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n \n if ( 'repeater' == this.model.get( 'type' ) ) {\n this.field.show( new repeaterFieldLayout( { model: this.model } ) );\n } else {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n \n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n\n return containerClass;\n }\n }\n }\n\n });\n\n return view;\n} );\n\n","/**\n * Return views that might be used in extensions.\n * These are un-instantiated views.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/loadViews',['views/fieldItem', 'views/fieldLayout'], function( fieldItemView, fieldLayoutView ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t// Reply to requests for our field item view.\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldItem', this.getFieldItem );\n\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldLayout', this.getFieldLayout );\n\t\t},\n\n\t\tgetFieldItem: function( model ) {\n\t\t\treturn fieldItemView;\n\t\t},\n\n\t\tgetFieldLayout: function() {\n\t\t\treturn fieldLayoutView;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * If a form has at least one field error, we should disable the submit button and add a form error.\n * If a form had errors, but all the field errors have been removed, we should remove the form error.\n *\n * @since 3.0\n */\ndefine('controllers/formErrors',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen for error messages being added to and removed from fields.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.addError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.removeError );\n\n\t\t\t/*\n\t\t\t * Respond to requests to get form errors\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\taddError: function( fieldModel, errorID, errorMsg ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t/*\n\t\t\t * We store our errors in this object by field ID so that we don't have to loop over all our fields when we're testing for errors.\n\t\t\t * They are stored as an object within an array, using the field ID as the key.\n\t\t\t *\n\t\t\t * If we haven't setup an array item for this field, set it as an object.\n\t\t\t */\n\t\t\tif ( 'undefined' == typeof formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = {};\n\t\t\t}\n\t\t\t// Add an error to our tracking array\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ][ errorID ] = errorMsg;\n\t\t\t/*\n\t\t\t * We have at least one field error, so submmission should be prevented.\n\t\t\t * Add a form error.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'add:error', 'field-errors', formModel.get( 'settings' ).formErrorsCorrectErrors );\n\t\t},\n\n\t\tremoveError: function( fieldModel, errorID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t// Remove this error ID from our tracking array.\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = _.omit( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ], errorID );\n\t\t\t/*\n\t\t\t * If we don't have any more error IDs on this field, then we need to remove this field from the array.\n\t\t\t *\n\t\t\t * Then, if the fieldErrors tracking array has a length of 0, we remove our form error, because all field errors have been dealt with.\n\t\t\t */\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) ) {\n\t\t\t\tdelete formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ];\n\t\t\t}\n\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\t// Remove our form error.\n\t\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'remove:error', 'field-errors' );\n\t\t\t}\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n\t\t\treturn errors;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Handles submission of our form.\n */\ndefine('controllers/submit',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'init:model', this.registerSubmitHandler );\n\t\t},\n\n\t\t/**\n\t\t * Register the submission handler function.\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tregisterSubmitHandler: function( formModel ) {\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).reply( 'submit', this.submit );\n\t\t},\n\n\t\t/**\n\t\t * Handles the actual submission of our form.\n\t\t * When we submit:\n\t\t *\n\t\t * 1) Send out a message saying that we're about to begin form submission.\n\t\t * 2) Check the form for errors\n\t\t * 3) Submit the data\n\t\t * 4) Send out a message with our response\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tsubmit: function( formModel ) {\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'before:submit', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'before:submit', formModel );\n\n\t\t\t/*\n\t\t\t * Validate our field models.\n\t\t\t */\n\t\t\tvar validate = nfRadio.channel( 'forms' ).request( 'maybe:validate', formModel );\n\t\t \tif( false !== validate ){\n\n // When validating all fields, set clean to false to force validation.\n _.each( formModel.get( 'fields' ).models, function( fieldModel ) {\n fieldModel.set( 'clean', false );\n } );\n\n\t\t\t\t/*\n\t\t\t\t * This method is defined in our models/fieldCollection.js file,\n\t\t\t\t * except where overridden by an add-on (ie Layout & Styles).\n\t\t\t\t */\n\t\t\t\tformModel.get( 'formContentData' ).validateFields();\n\t\t\t}\n\n\t\t\tvar submit = nfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'maybe:submit', formModel );\n\t\t\tif ( false == submit ) {\n\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:cancel', formModel );\n\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:cancel', formModel );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif( false !== validate ){\n\n\t\t\t\t// Ignore non-blocking errors.\n\t\t\t\tvar blockingFormErrors = _.filter( formModel.get( 'errors' ).models, function( error ){\n\n\t\t\t\t\t// Ignore email action related errors.\n\t\t\t\t\tif( 'invalid_email' == error.get( 'id' ) || 'email_not_sent' == error.get( 'id' ) ) return false;\n\n\t\t\t\t\treturn true; // Error is blocking.\n\t\t\t\t});\n\n\t\t\t\t/*\n\t\t\t\t * Make sure we don't have any form errors before we submit.\n\t\t\t\t * Return false if we do.\n\t\t\t\t */\n\t\t\t\tif ( 0 != _.size( blockingFormErrors ) ) {\n\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:failed', formModel );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:failed', formModel );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'after:submitValidation', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'after:submitValidation', formModel );\n\n\t\t\t/*\n\t\t\t * Actually submit our form, and send out a message with our response.\n\t\t\t */\n\n \t\t\tvar formID = formModel.get( 'id' );\n\t\t\tvar fields = {};\n\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\tvar fieldDataDefaults = { value:field.get( 'value' ), id:field.get( 'id' ) };\n\n\t\t\t\t// Add field data at the field ID for efficient access.\n\t\t\t\tfields[ field.get( 'id' ) ] = nfRadio.channel( field.get( 'type' ) ).request( 'get:submitData', fieldDataDefaults, field ) || fieldDataDefaults;;\n\t\t\t} );\n\t\t\tvar extra = formModel.get( 'extra' );\n\t\t\tvar settings = formModel.get( 'settings' );\n\t\t\tdelete settings.formContentData;\n\t\t\tvar formData = JSON.stringify( { id: formID, fields: fields, settings: settings, extra: extra } );\n\t\t\tvar data = {\n\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t'nonce_ts': nfFrontEnd.nonce_ts,\n\t\t\t\t'formData': formData\n\t\t\t}\n\n\t\t\tvar that = this;\n\n\t\t\tjQuery.ajax({\n\t\t\t url: nfFrontEnd.adminAjax,\n\t\t\t type: 'POST',\n\t\t\t data: data,\n\t\t\t cache: false,\n\t\t\t \tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t \t\ttry {\n\t\t\t\t \t\tvar response = data;\n\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t \tjQuery( document ).trigger( 'nfFormSubmitResponse', { response: response, id: formModel.get( 'id' ) } );\n\t\t\t \t\t} catch( e ) {\n\t\t\t \t\t\tconsole.log( e );\n\t\t\t \t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\tconsole.log( e );\n\t\t\t \t\t}\n\n\t\t\t },\n\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t // Handle errors here\n\t\t\t console.log('ERRORS: ' + errorThrown);\n\t\t\t\t\tconsole.log( jqXHR );\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar response = jQuery.parseJSON( jqXHR.responseText );\n\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\tconsole.log( 'Parse Error: ' + jqXHR.responseText);\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'add:error', 'parse-response-ERROR', errorThrown );\n\t\t\t\t\t}\n\n\t\t\t }\n\t\t\t});\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define( 'views/fieldCollection',['views/fieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout\n\n\t});\n\n\treturn view;\n} );\n","/**\n * Default filters\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/defaultFilters',[ 'views/fieldCollection', 'models/fieldCollection' ], function( FieldCollectionView, FieldCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'before:filterData', this.registerDefaultDataFilter );\n\t\t},\n\n\t\tregisterDefaultDataFilter: function( formModel ) {\n\t\t\t/*\n\t\t\t * Set our default formContent load filter\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:loadFilter', this.defaultFormContentLoad, 10, this );\n\t\t\t/*\n\t\t\t * Set our default formContentView.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:viewFilter', this.defaultFormContentView, 10, this );\n\t\t},\n\n\t\tdefaultFormContentLoad: function( formContentData, formModel, context ) {\n\t\t\tvar fieldCollection = formModel.get( 'fields' );\n\t\t\t/*\n\t\t\t * If we only have one load filter, we can just return the field collection.\n\t\t\t */\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tif ( 1 == sortedArray.length || 'undefined' == typeof formContentData || true === formContentData instanceof Backbone.Collection ) return formModel.get( 'fields' );\n\n \tvar fieldModels = _.map( formContentData, function( key ) {\n \t\treturn formModel.get( 'fields' ).findWhere( { key: key } );\n \t}, this );\n\n \tvar currentFieldCollection = new FieldCollection( fieldModels );\n\n \tfieldCollection.on( 'reset', function( collection ) {\n \t\tvar resetFields = [];\n \t\tcurrentFieldCollection.each( function( fieldModel ) {\n \t\t\tif ( 'submit' != fieldModel.get( 'type' ) ) {\n \t\t\t\tresetFields.push( collection.findWhere( { key: fieldModel.get( 'key' ) } ) );\n \t\t\t} else {\n \t\t\t\tresetFields.push( fieldModel );\n \t\t\t}\n \t\t} );\n\n currentFieldCollection.options = { formModel: formModel };\n \t\tcurrentFieldCollection.reset( resetFields );\n \t} );\n\n \treturn currentFieldCollection;\n },\n\n defaultFormContentView: function() {\n \treturn FieldCollectionView;\n }\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for removing unique field errors.\n */\n\ndefine('controllers/uniqueFieldError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen to keyup and field changes.\n\t\t\t *\n\t\t\t * If those fields have a unique field error, remove that error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.removeError );\n\n\t\t},\n\n\t\tremoveError: function( el, model ) {\n\t\t\tmodel = model || el;\n\t\t\t/*\n\t\t\t * Remove any unique field errors.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'unique_field' );\n\t\t},\n\n\t});\n\n\treturn controller;\n} );\n","let nfAllRepeaterFieldsModels = [];\ndefine( 'models/fieldRepeaterSetModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t\tinitialize: function(collection, options) {\n\n\t\t\tthis.repeaterFieldModel = options.repeaterFieldModel;\n\n\t\t\tthis.set( 'label', this.repeaterFieldModel.get('label') );\n\n\t\t\tif(collection && options){\n\t\t\t\tthis.initAllRepeaterFieldsModels(collection, options);\n\t\t\t}\n\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFields', this.getRepeaterFields, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldById', this.getRepeaterFieldById, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterModels', this.getAllRepeaterFieldsModels, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsetsByForm', this.getAllFieldsetsByForm, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsModelsArrayByForm', this.getAllFieldsModelsArrayByForm, this );\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:repeaterModels', this.setAllRepeaterFieldsModels);\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:value', this.setAllRepeatersValues );\n\t\t},\n\n\t\tsetAllRepeaterFieldsModels: function() {\n\t\t\tthis.set( 'repeaterFieldsetsModels', nfAllRepeaterFieldsModels );\n\t\t\tthis.allRepeatersFieldsetsModels = nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tinitAllRepeaterFieldsModels: function(collection, options) {\t\n\t\t\tconst formID = options.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = options.repeaterFieldModel.get('id');\n\t\t\tconst currentModels = collection.fields.models;\n\t\t\t\n\t\t\tlet isModelSet = nfAllRepeaterFieldsModels.find(model => model.id === repeaterID && model.form === formID);\n\n\t\t\tif ( isModelSet ){\n\t\t\t\tisModelSet.fields = isModelSet.fields.concat(currentModels);\n\t\t\t} else {\n\t\t\t\tnfAllRepeaterFieldsModels.push( {\n\t\t\t\t\tform: formID,\n\t\t\t\t\tid: repeaterID,\n\t\t\t\t\tfields: currentModels\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.setAllRepeaterFieldsModels();\n\t\t},\n\n\t\tgetAllRepeaterFieldsModels: function() {\n\t\t\treturn nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tgetAllFieldsetsByForm: function(formID) {\n\t\t\tconst allFormsModels = this.getAllRepeaterFieldsModels();\n\t\t\tconst thisFormModels = allFormsModels.filter( model => model.form === formID );\n\n\t\t\treturn thisFormModels;\n\t\t},\n\n\t\tgetAllFieldsModelsArrayByForm: function(formID) {\n\t\t\tconst thisFormModels = this.getAllFieldsetsByForm(formID);\n\t\t\tlet singleArray = [];\n\t\t\tthisFormModels.map( model => {\n\t\t\t\tsingleArray = singleArray.concat(model.fields);\n\t\t\t});\n\n\t\t\treturn singleArray;\n\t\t},\n\n\t\tgetRepeaterFields: function(repeaterID) {\n\t\t\tconst allModels = this.getAllRepeaterFieldsModels();\n\t\t\tlet fields = allModels.find(model => String(model.id) === String(repeaterID));\n\t\t\tif(typeof fields === \"undefined\"){\n\t\t\t\tfields = this.reverseResearchFieldsetModel(repeaterID, allModels);\n\t\t\t}\n\n\t\t\treturn fields;\n\t\t},\n\n\t\treverseResearchFieldsetModel: function(repeaterID, allModels) {\n\t\t\tlet fields;\n\t\t\t_.each(allModels, function(fieldsetModel) {\n\t\t\t\t_.each(fieldsetModel.fields, function(fieldModel){\n\t\t\t\t\tif(String(fieldModel.id).startsWith(repeaterID)){\n\t\t\t\t\t\tfields = fieldsetModel;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn fields;\n\t\t},\n\n\t\tgetRepeaterFieldById: function( id ){\n\t\t\tconst repeaterID = String(id).split('.')[0];\n\t\t\tconst fieldObject = this.getRepeaterFields(repeaterID);\n\t\t\t//return early if no match found by ID\n\t\t\tif(typeof fieldObject === 'undefined') return;\n\n\t\t\tconst model = fieldObject.fields.find(field => field.id === id);\n\n\t\t\treturn model;\n\t\t},\n\n\t\tsetAllRepeatersValues: function() {\n\t\t\tconst repeaters = this.getAllRepeaterFieldsModels();\n\t\t\tif(repeaters.length > 0) {\n\t\t\t\t\n\t\t\t\t_.each(repeaters, function(repeater){\n\t\t\t\t\tlet fields = repeater.fields;\n\t\t\t\t\tlet repeaterFieldModel = nfRadio.channel( 'fields' ).request( 'get:field', repeater.id );\n\n\t\t\t\t\tif(fields.length > 0){\n\t\t\t\t\t\tlet repeaterFieldValue = {};\n\t\t\t\t\t\t//Loop through fields\n\t\t\t\t\t\t_.each( fields, function( field ){\n\t\t\t\t\t\t\t//Get ID and Value to format and store them in the repeaterFieldValue object\n\t\t\t\t\t\t\tlet value = field.get('value');\n\t\t\t\t\t\t\tlet id = field.get('id');\n\t\t\t\t\t\t\t//Refactor ID used in case we have multiple same form on the DOM and using a changed ID for main repeater field.\n\t\t\t\t\t\t\tif(id.split(\"_\").length > 2){\n\t\t\t\t\t\t\t\tlet idArray = id.split(\"_\");\n\t\t\t\t\t\t\t\tidArray[1] = idArray[1].split(\".\")[1];\n\t\t\t\t\t\t\t\tlet newID = idArray[0] + \".\" + idArray[1] + \"_\" + idArray[2];\n\t\t\t\t\t\t\t\tdelete repeaterFieldValue[id];\n\t\t\t\t\t\t\t\tid = newID;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trepeaterFieldValue[id] = {\n\t\t\t\t\t\t\t\t\"value\": value,\n\t\t\t\t\t\t\t\t\"id\": id\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//Check if time is correctly added on Date/time fields\n\t\t\t\t\t\t\tif(field.get('type') === \"date\" && typeof value === \"string\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" )){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].value = {\n\t\t\t\t\t\t\t\t\t\"date\": value,\n\t\t\t\t\t\t\t\t\t\"hour\": field.attributes.selected_hour,\n\t\t\t\t\t\t\t\t\t\"minute\": field.attributes.selected_minute,\n\t\t\t\t\t\t\t\t\t\"ampm\": field.attributes.selected_ampm\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(field.get('type') === \"file_upload\" && field.get('value')){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].files = field.attributes.files;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\trepeaterFieldModel.set( 'isUpdated', false);\n\t\t\t\t\t\t//Update repeater field value with repeaterFieldValue \n\t\t\t\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', repeaterFieldModel, repeaterFieldValue);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldRepeaterSetCollection',['models/fieldRepeaterSetModel', 'models/fieldCollection' ], function( repeaterSetModel, fieldCollection ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: repeaterSetModel,\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'sort:fieldsets', this.sortIDs );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'remove:fieldset', this.removeSet );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'add:fieldset', this.addSet );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:fieldsets', this.getFieldSets, this );\n\n\t\t},\n\n\t\taddSet: function(repeaterFieldID = false) {\n\t\t\tlet repeater;\n\t\t\tif(repeaterFieldID){\n\t\t\t\t//Get correct Field Model in case of multiple Repeater fields use\n\t\t\t\tconst repeaterFieldModel = this.options.repeaterFieldModel.id === repeaterFieldID ? this.options.repeaterFieldModel : false;\n\t\t\t\trepeater = repeaterFieldModel;\n\t\t\t\tif(repeaterFieldModel){\n\t\t\t\t\t//Create a new collection\n\t\t\t\t\tlet fields = new fieldCollection( this.options.templateFields, { formModel: this.options.formModel, repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t\t//Add it th sets of collection\n\t\t\t\t\tthis.add( { fields: fields }, {repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t}\n\t\t\t}\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger('fieldset:added', repeater);\n\t\t},\n\n\t\tremoveSet: function( fieldset ) {\n\t\t\t// Remove possible form errors related to required fields\n\t\t\tthis.removeRequiredFieldsErrors(fieldset);\n\n\t\t\t//Remove field models saved globally\n\t\t\tconst formID = fieldset.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = fieldset.repeaterFieldModel.get('id');\n\t\t\tconst isRepeaterModelSet = nfAllRepeaterFieldsModels.find(rep => rep.id === repeaterID && rep.form === formID );\n\t\t\tif ( isRepeaterModelSet ){\n\t\t\t\tlet remove = [];\n\t\t\t\t_.each(isRepeaterModelSet.fields, (field, index) => {\n\t\t\t\t\tif(typeof field !== \"undefined\"){\n\t\t\t\t\t\t_.each(fieldset.get('fields').models, (fieldsetField) => {\n\t\t\t\t\t\t\tconst fieldID = typeof field.id !== \"undefined\" ? field.id : field.get('id');\n\t\t\t\t\t\t\tif(fieldsetField.id === fieldID){\n\t\t\t\t\t\t\t\t// Delete any input values.\n\t\t\t\t\t\t\t\tdelete fieldset.repeaterFieldModel.get('value')[fieldsetField.id];\n\t\t\t\t\t\t\t\tremove.push(fieldID);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tisRepeaterModelSet.fields = _.reject(isRepeaterModelSet.fields, (field) =>{\n\t\t\t\t\tif(typeof field === \"undefined\") return true;\n\t\t\t\t\tif(remove.includes(field.id)) return true;\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:repeaterModels' );\n\t\t\t}\n\n\t\t\t//Remove the fieldset\n\t\t\tthis.remove( fieldset );\n\t\t\tfieldset.destroy();\n\t\t\t\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\n\t\t\t//Reset values\n\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t},\n\n\t\tremoveRequiredFieldsErrors: function( fieldset ) {\n\t\t\tlet fields = fieldset.get('fields');\n\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', field.get(\"id\"), \"required-error\" );\n\t\t\t});\n\t\t},\n\n\t\tgetFieldsets: function() {\n\t\t\treturn this.models;\n\t\t},\n\n\t\tcheckTimeField: function(field){\n\t\t\tconst id = field.get('id');\n\t\t\t//Get elements\n\t\t\tconst hourEl = document.getElementById(\"hour-select-\" + id),\n\t\t\tminEl = document.getElementById(\"minute-select-\" + id),\n\t\t\tdefaultHour = field.attributes.hours_24 === 0 ? \"12\" : \"00\";\n\t\t\t// set field values to element\n\t\t\tif(!hourEl || !minEl) return;\n\t\t\tminEl.value = typeof field.attributes.selected_minute !== \"undefined\" ? field.attributes.selected_minute : \"00\";\n\t\t\thourEl.value = typeof field.attributes.selected_hour !== \"undefined\" ? field.attributes.selected_hour : defaultHour;\n\n\t\t\tconst wrapper = document.getElementById(\"nf-field-\" + id + \"-wrap\");\n\t\t\tconst ampmEl = wrapper.querySelector('#ampm-select');\n\t\t\tif( ! ampmEl ) return;\n\t\t\tampmEl.value = typeof field.attributes.selected_ampm !== \"undefined\" ? field.attributes.selected_ampm : \"am\";\n\t\t},\n\n\t\tsortIDs: function(){\n\t\t\tconst fieldsets = this.getFieldsets();\n\t\t\tconst timeFields = [];\n\t\t\t//Reset repeater fields IDs when adding / removing a field\n\t\t\t_.each(fieldsets, function(fieldset, modelIndex){\n\t\t\t\tlet fields = fieldset.get('fields');\n\t\t\t\tfieldset.set( 'index', modelIndex + 1 );\n\t\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\t\t//Always rebuild ID to allow same form multiple times on DOM\n\t\t\t\t\t//Remove suffix if it has one\n\t\t\t\t\tconst cutEl = String(field.id).split('_')[0];\n\t\t\t\t\t//Extract Field index of ID\n\t\t\t\t\tconst fieldIndex = String( cutEl ).split(\".\").length > 1 ? String( cutEl ).split(\".\").pop() : false;\n\t\t\t\t\t//The loop makes first fieldset of second same form to miss correct index here, next iteration will get that correct index\n\t\t\t\t\tif(!fieldIndex) return;\n\t\t\t\t\t//Update FieldID using ( REPEATER FIELD id . field index in the repeater field _ fieldset index in the repeater field ) format\n\t\t\t\t\tconst newID = field.collection.options.repeaterFieldModel.id + \".\" + fieldIndex + \"_\" + modelIndex;\n\t\t\t\t\tfield.set(\"id\", newID);\n\n\t\t\t\t\t// Detect time fields, fix inconsistency of date field when associated with time, as we don't use flatPickr display for time\n\t\t\t\t\tif(field.get('type') === \"date\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" ) ){\n\t\t\t\t\t\ttimeFields.push(field);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\t\t\t//Reload repeater field view ( collection of fieldsets updated )\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger( 'rerender:fieldsets' );\n\t\t\t\n\t\t\t//Process time fields values\n\t\t\ttimeFields.forEach( (field) => {\n\t\t\t\tthis.checkTimeField(field);\n\t\t\t});\n\t\t}\n\n\t} );\n\treturn collection;\n} );\n","define('controllers/fieldRepeater',[ 'models/fieldRepeaterSetCollection', 'models/fieldCollection' ], function( repeaterSetCollection, fieldCollection ) {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'repeater' ), 'init:model', this.initRepeater );\n },\n\n initRepeater: function ( model ) {\n \tif ( 'undefined' == typeof model.collection.options.formModel ) {\n \t\treturn false;\n \t}\n\n \tlet fields = new fieldCollection( model.get( 'fields' ), { formModel: model.collection.options.formModel, repeaterFieldModel: model } );\n model.set( 'sets', new repeaterSetCollection( [ { fields: fields } ], { templateFields: model.get( 'fields' ), formModel: model.collection.options.formModel, repeaterFieldModel: model } ) );\n //Trigger Fields IDs sorting in case of same form being printed multiple times on DOM\n nfRadio.channel( \"field-repeater\" ).trigger( 'sort:fieldsets' );\n },\n\n });\n\n return controller;\n});\n","define('controllers/actionGA',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSendGaEvent );\n\t\t},\n\n\t\tactionSendGaEvent: function( response ) {\n if (typeof response.data.actions === 'undefined' || typeof response.data.actions.googleanalytics === 'undefined') {\n return;\n }\n \n response.data.actions.googleanalytics.forEach( (action) => {\n const eventName = action.event_name;\n if(typeof eventName === 'undefined') {\n console.warn('No event name defined in the GA4 action settings. Please define an event name.');\n return;\n }\n\n if(typeof action.method_type !== 'undefined' && action.method_type === 'ga4'){\n if(typeof gtag === 'function') {\n const eventParams = {\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n gtag('event', eventName, eventParams);\n } else if (typeof dataLayer === 'object'){\n console.warn('gtag isn\\'t defined. But GTM was detected, did you mean to use GTM in the action settings?');\n } else {\n console.warn('gtag isn\\'t defined. Please make sure you have GA4 installed on your site.');\n }\n } else if( typeof action.method_type !== 'undefined' && action.method_type === 'gtm'){\n \n \n if (typeof dataLayer === 'object') {\n //Process with GTM dataLayer\n const eventParams = {\n 'event': eventName,\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n dataLayer.push(eventParams);\n } else if (typeof gtag === 'function') {\n console.warn('GTM isn\\'t defined. But GA4 was detected, did you mean to use GA4 in the action settings?');\n } else {\n console.warn('GTM isn\\'t defined. Please make sure you have GTM installed on your site.');\n }\n } else {\n console.warn('GTM and gtag aren\\'t defined. Please make sure you have GTM or GA4 installed on your site.');\n }\n });\n \n\t\t}\n\n\t});\n\n\treturn controller;\n});\n\n","define(\n\t'controllers/loadControllers',[\n\t\t'controllers/formData',\n\t\t'controllers/fieldError',\n\t\t'controllers/changeField',\n\t\t'controllers/changeEmail',\n\t\t'controllers/changeDate',\n\t\t'controllers/fieldCheckbox',\n\t\t'controllers/fieldCheckboxList',\n\t\t'controllers/fieldImageList',\n\t\t'controllers/fieldRadio',\n\t\t'controllers/fieldNumber',\n\t\t'controllers/mirrorField',\n\t\t'controllers/confirmField',\n\t\t'controllers/updateFieldModel',\n\t\t'controllers/submitButton',\n\t\t'controllers/submitDebug',\n\t\t'controllers/getFormErrors',\n\t\t'controllers/validateRequired',\n\t\t'controllers/submitError',\n\t\t'controllers/actionRedirect',\n\t\t'controllers/actionSuccess',\n\t\t'controllers/fieldSelect',\n\t\t'controllers/coreSubmitResponse',\n\t\t'controllers/fieldProduct',\n\t\t'controllers/fieldTotal',\n\t\t'controllers/fieldQuantity',\n\t\t'controllers/calculations',\n\t\t'controllers/dateBackwardsCompat',\n\t\t'controllers/fieldDate',\n\t\t'controllers/fieldRecaptcha',\n\t\t'controllers/fieldRecaptchaV3',\n\t\t'controllers/fieldHTML',\n\t\t'controllers/helpText',\n\t\t'controllers/fieldTextbox',\n\t\t'controllers/fieldTextareaRTE',\n\t\t'controllers/fieldStarRating',\n\t\t'controllers/fieldTerms',\n\t\t'controllers/formContentFilters',\n\t\t'controllers/loadViews',\n\t\t'controllers/formErrors',\n\t\t'controllers/submit',\n\t\t'controllers/defaultFilters',\n\t\t'controllers/uniqueFieldError',\n\t\t'controllers/fieldRepeater',\n\t\t'controllers/actionGA',\n\t],\n\tfunction(\n\t\tFormData,\n\t\tFieldError,\n\t\tChangeField,\n\t\tChangeEmail,\n\t\tChangeDate,\n\t\tFieldCheckbox,\n\t\tFieldCheckboxList,\n\t\tFieldImageList,\n\t\tFieldRadio,\n\t\tFieldNumber,\n\t\tMirrorField,\n\t\tConfirmField,\n\t\tUpdateFieldModel,\n\t\tSubmitButton,\n\t\tSubmitDebug,\n\t\tGetFormErrors,\n\t\tValidateRequired,\n\t\tSubmitError,\n\t\tActionRedirect,\n\t\tActionSuccess,\n\t\tFieldSelect,\n\t\tCoreSubmitResponse,\n\t\tFieldProduct,\n\t\tFieldTotal,\n\t\tFieldQuantity,\n\t\tCalculations,\n\t\tDateBackwardsCompat,\n\t\tFieldDate,\n\t\tFieldRecaptcha,\n\t\tFieldRecaptchaV3,\n\t\tFieldHTML,\n\t\tHelpText,\n\t\tFieldTextbox,\n\t\tFieldTextareaRTE,\n\t\tFieldStarRating,\n\t\tFieldTerms,\n\t\tFormContentFilters,\n\t\tLoadViews,\n\t\tFormErrors,\n\t\tSubmit,\n\t\tDefaultFilters,\n\t\tUniqueFieldError,\n\t\tFieldRepeater,\n\t\tActionGA\n\t) {\n\t\tvar controller = Marionette.Object.extend( {\n\t\t\tinitialize: function() {\n\n\t\t\t\t/**\n\t\t\t\t * App Controllers\n\t\t\t\t */\n\t\t\t\tnew LoadViews();\n\t\t\t\tnew FormErrors();\n\t\t\t\tnew Submit();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Field type controllers\n\t\t\t\t */\n\t\t\t\tnew FieldCheckbox();\n\t\t\t\tnew FieldCheckboxList();\n\t\t\t\tnew FieldImageList();\n\t\t\t\tnew FieldRadio();\n\t\t\t\tnew FieldNumber();\n\t\t\t\tnew FieldSelect();\n\t\t\t\tnew FieldProduct();\n\t\t\t\tnew FieldTotal();\n\t\t\t\tnew FieldQuantity();\n\t\t\t\tnew FieldRecaptcha();\n\t\t\t\tnew FieldRecaptchaV3();\n\t\t\t\tnew FieldHTML();\n\t\t\t\tnew HelpText();\n\t\t\t\tnew FieldTextbox();\n\t\t\t\tnew FieldTextareaRTE();\n\t\t\t\tnew FieldStarRating();\n\t\t\t\tnew FieldTerms();\n\t\t\t\tnew FormContentFilters();\n\t\t\t\tnew UniqueFieldError();\n\t\t\t\tnew FieldRepeater();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Misc controllers\n\t\t\t\t */\n\t\t\t\tnew FieldError();\n\t\t\t\tnew ChangeField();\n\t\t\t\tnew ChangeEmail();\n\t\t\t\tnew ChangeDate();\n\t\t\t\t\n\t\t\t\tnew MirrorField();\n\t\t\t\tnew ConfirmField();\n\t\t\t\tnew UpdateFieldModel();\n\t\t\t\tnew SubmitButton();\n\t\t\t\tnew SubmitDebug();\n\t\t\t\tnew GetFormErrors();\n\t\t\t\tnew ValidateRequired();\n\t\t\t\tnew SubmitError();\n\t\t\t\tnew ActionRedirect();\n\t\t\t\tnew ActionSuccess();\n\t\t\t\tnew ActionGA();\n\t\t\t\t\n\t\t\t\tnew CoreSubmitResponse();\n\t\t\t\tnew Calculations();\n\n\t\t\t\tnew DefaultFilters();\n\n\t\t\t\t/**\n\t\t\t\t * Data controllers\n\t\t\t\t */\n\t\t\t\tnew DateBackwardsCompat();\n\t\t\t\tnew FieldDate();\n\t\t\t\tnew FormData();\n\t\t\t\t\n\t\t\t}\n\t\t});\n\n\t\treturn controller;\n} );\n\n","define( 'views/beforeForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-before-form\",\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-form-error',\n\n\t\tonRender: function() {\n\t\t\t// this.$el = this.$el.children();\n\t\t\t// this.$el.unwrap();\n\t\t\t// this.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorCollection',['views/formErrorItem'], function( formErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: formErrorItem\n\t});\n\n\treturn view;\n} );\n","define( 'views/honeyPot',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-form-hp',\n\n events: {\n \t'keyup .nf-field-hp': 'maybeError',\n 'change .nf-field-hp': 'maybeError'\n },\n\n maybeError: function( e ) {\n /*\n * If we have an empty honeyPot field, remove the honeypot form error.\n * If we do not have an empty honeyPot field, add the honeypot form error.\n */\n if ( 0 == jQuery( e.target ).val().length ) {\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'remove:error', 'honeyPot' );\n } else {\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'id' ) );\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'add:error', 'honeyPot', formModel.get( 'settings' ).honeypotHoneypotError );\n }\n }\n });\n\n return view;\n} );\n","define( 'views/afterFormContent',['views/formErrorCollection', 'views/honeyPot'], function( FormErrors, HoneyPot ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-after-fields\",\n\n\t\tregions: {\n\t\t\terrors: \".nf-form-errors\",\n hp: \".nf-form-hp\"\n\t\t},\n\n onShow: function() {\n \tthis.errors.show( new FormErrors( { collection: this.model.get( 'errors' ) } ) );\n this.hp.show( new HoneyPot( { model: this.model } ) );\n }\n\n });\n\n return view;\n} );\n","define( 'views/beforeFormContent',[], function( ) {\n\n var view = Marionette.ItemView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-before-fields\",\n\n templateHelpers: function () {\n return {\n\n renderFieldsMarkedRequired: function() {\n\n var requiredFields = this.fields.filter( { required: 1 } );\n return ( requiredFields.length ) ? this.fieldsMarkedRequired : '';\n },\n };\n },\n\n });\n\n return view;\n} );\n","define( 'views/formLayout',[ 'views/afterFormContent', 'views/beforeFormContent', 'models/fieldCollection' ], function( AfterFormContent, BeforeFormContent, FieldCollection ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-form-layout\",\n\n\t\tregions: {\n\t\t\tbeforeFormContent: \".nf-before-form-content\",\n\t\t\tformContent: \".nf-form-content\",\n\t\t\tafterFormContent: \".nf-after-form-content\"\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'form-' + this.model.get( 'id' ) ).reply( 'get:el', this.getEl, this );\n\t\t\t\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\n\t\tonShow: function() {\n\t\t\tthis.beforeFormContent.show( new BeforeFormContent( { model: this.model } ) );\n\t\t\t\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.model.get( 'formContentData' );\n\t\t\t\n\t\t\t/*\n\t\t\t * Check our fieldContentViewsFilter to see if we have any defined.\n\t\t\t * If we do, overwrite our default with the view returned from the filter.\n\t\t\t */\n\t\t\tvar formContentViewFilters = nfRadio.channel( 'formContent' ).request( 'get:viewFilters' );\n\t\t\t\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentViewFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentView = callback();\n\t\t\t\n\t\t\tvar options = {\n\t\t\t\tdata: formContentData,\n\t\t\t\tformModel: this.model\n\t\t\t};\n\t\t\t\n\t\t\t/*\n\t\t\t * If we have a collection, pass the returned data as the collection.\n\t\t\t *\n\t\t\t * If we have a model, pass the returned data as the collection.\n\t\t\t */\n\t\t\tif ( false !== formContentData instanceof Backbone.Collection ) {\n\t\t\t\toptions.collection = formContentData;\n\t\t\t} else if ( false !== formContentData instanceof Backbone.Model ) {\n\t\t\t\toptions.model = formContentData;\n\t\t\t}\n\n\t\t\tthis.formContent.show( new formContentView( options ) );\n\t\t\tthis.afterFormContent.show( new AfterFormContent( { model: this.model } ) );\n\t\t},\n\n\t\tgetEl: function() {\n\t\t\treturn this.el;\n\t\t},\n\n templateHelpers: function () {\n return {\n\n renderClasses: function() {\n return '';\n }\n\n };\n },\n\n hide: function() {\n \tjQuery( this.el ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/afterForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-after-form\",\n\t\t\n\t});\n\n\treturn view;\n} );\n","define( 'views/mainLayout',['views/beforeForm', 'views/formLayout', 'views/afterForm'], function( BeforeForm, FormLayout, AfterForm ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttemplate: '#tmpl-nf-layout',\n\n\t\tregions: {\n\t\t\tresponseMsg: '.nf-response-msg',\n\t\t\tbeforeForm: '.nf-before-form',\n\t\t\tformLayout: '.nf-form-layout',\n\t\t\tafterForm: '.nf-after-form'\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis.$el = jQuery( '#nf-form-' + this.model.id + '-cont' );\n\t\t\tthis.el = '#nf-form-' + this.model.id + '-cont';\n\n\t\t\tthis.render();\n\n\t\t\tthis.beforeForm.show( new BeforeForm( { model: this.model } ) );\n\t\t\tthis.formLayout.show( new FormLayout( { model: this.model, fieldCollection: this.options.fieldCollection } ) );\n\t\t\tthis.afterForm.show( new AfterForm( { model: this.model } ) );\n\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n hide: function() {\n \tjQuery( this.el ).find( '.nf-form-title' ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","// const Intl = require('intl');\n\n// class nfLocaleConverter {\nvar nfLocaleConverter = function(newLocale, thousands_sep, decimal_sep) {\n\n // constructor(newLocale = 'en-US', thousands_sep, decimal_sep) {\n if ('undefined' !== typeof newLocale && 0 < newLocale.length) {\n this.locale = newLocale.split('_').join('-');\n } else {\n this.locale = 'en-US';\n }\n\n this.thousands_sep = thousands_sep || ',';\n this.decimal_sep = decimal_sep || '.';\n // }\n\n this.uniqueElememts = function( value, index, self ) {\n return self.indexOf(value) === index;\n }\n\n this.numberDecoder = function(num) {\n num = num.toString();\n // let thousands_sep = ',';\n var formatted = '';\n\n // Account for negative numbers.\n var negative = false;\n \n if ('-' === num.charAt(0)) {\n negative = true;\n num = num.replace( '-', '' );\n }\n \n // Account for a space as the thousands separator.\n // This pattern accounts for all whitespace characters (including thin space).\n num = num.replace( /\\s/g, '' );\n num = num.replace( / /g, '' );\n\n // Determine what our existing separators are.\n var myArr = num.split('');\n var separators = myArr.filter(function(el) {\n return !el.match(/[0-9]/);\n });\n \n var final_separators = separators.filter(this.uniqueElememts);\n \n switch( final_separators.length ) {\n case 0:\n formatted = num;\n break;\n case 1:\n var replacer = '';\n if ( 1 == separators.length ) {\n separator = separators.pop();\n var sides = num.split(separator);\n var last = sides.pop();\n if ( 3 == last.length && separator == this.thousands_sep ) {\n replacer = '';\n } else {\n replacer = '.';\n }\n } else {\n separator = final_separators.pop();\n }\n\n formatted = num.split(separator).join(replacer);\n break;\n case 2:\n var find_one = final_separators[0];\n var re_one;\n if('.' === find_one) {\n re_one = new RegExp('[.]', 'g');\n } else {\n re_one = new RegExp(find_one, 'g');\n }\n formatted = num.replace(re_one, '');\n \n var find_two = final_separators[1];\n \n var re_two;\n if('.' === find_two) {\n re_two = new RegExp('[.]', 'g');\n } else {\n re_two = new RegExp(find_two, 'g');\n }\n formatted = formatted.replace(re_two, '.' );\n break;\n default:\n return 'NaN';\n }\n\n if ( negative ) {\n formatted = '-' + formatted;\n }\n this.debug('Number Decoder ' + num + ' -> ' + formatted );\n return formatted;\n }\n\n this.numberEncoder = function(num, percision) {\n num = this.numberDecoder(num);\n\n return Intl.NumberFormat(this.locale, { minimumFractionDigits: percision, maximumFractionDigits: percision }).format(num);\n }\n\n this.debug = function(message) {\n if ( window.nfLocaleConverterDebug || false ) console.log(message);\n }\n}\n\n// module.exports = nfLocaleConverter;\ndefine(\"../nfLocaleConverter\", function(){});\n\n","//Inline data converted to globally available vars sent via wp_localize_script\nif('undefined' !== typeof(nfInlineVars.nfForms)) {\n\twindow.nfForms = nfInlineVars.nfForms;\n}\n\n/*\n * Because our backbone listens to .change() events on elements, changes made using jQuery .val() don't bubble properly.\n * This patch overwrites the default behaviour of jQuery .val() so that IF the item has an nf-element class, we fire a change event.\n */\n( function( jQuery ) {\n\t/*\n\t * Store our original .val() function.\n\t */\n var originalVal = jQuery.fn.val;\n /*\n * Create our own .val() function.\n */\n jQuery.fn.val = function(){\n var prev;\n /* \n * Store a copy of the results of the original .val() call.\n * We use this to make sure that we've actually changed something.\n */\n if( arguments.length > 0 ){\n prev = originalVal.apply( this,[] );\n }\n /*\n * Get the results of the original .val() call. \n */\n var result = originalVal.apply( this, arguments );\n\n /*\n * If we have arguments, we have actually made a change, AND this has the nf-element class, trigger .change().\n */\n if( arguments.length > 0 && prev != originalVal.apply( this, [] ) && jQuery( this ).hasClass( 'nf-element' ) ) {\n\t\t\tjQuery(this).change();\n }\n\n return result;\n };\n} ) ( jQuery );\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n\trequire( [ 'models/formCollection', 'models/formModel', 'models/fieldCollection', 'controllers/loadControllers', 'views/mainLayout', '../nfLocaleConverter'], function( formCollection, FormModel, FieldCollection, LoadControllers, mainLayout ) {\n\n\t\tif( 'undefined' == typeof nfForms ) {\n\t\t\t/*\n\t\t\t * nfForms is not defined. This means that something went wrong loading the form data.\n\t\t\t * Bail form setup and empty the form containers to remove any loading animations.\n\t\t\t */\n\t\t\tjQuery( '.nf-form-cont' ).empty();\n\t\t\treturn;\n\t\t}\n\n\t\tvar NinjaForms = Marionette.Application.extend({\n\t\t\tforms: {},\n\t\t\tinitialize: function( options ) {\n\t\t\t\tvar that = this;\n\t\t\t\tMarionette.Renderer.render = function(template, data){\n\t\t\t\t\tvar template = that.template( template );\n\t\t\t\t\treturn template( data );\n\t\t\t\t};\n\n\t\t\t\t// Underscore one-liner for getting URL Parameters\n\t\t\t\tthis.urlParameters = _.object(_.compact(_.map(location.search.slice(1).split('&'), function(item) { if (item) return item.split('='); })));\n\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ) {\n\t\t\t\t\tthis.listenTo(nfRadio.channel('form-' + this.urlParameters.nf_resume), 'loaded', this.restart);\n\t\t\t\t}\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:decodeNumber', this.decodeNumber);\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:encodeNumber',this.encodeNumber);\n\n\t\t\t\tvar loadControllers = new LoadControllers();\n\t\t\t\tnfRadio.channel( 'app' ).trigger( 'after:loadControllers' );\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'get:template', this.template );\t\t\t},\n\t\t\t\n\t\t\tonStart: function() {\n\t\t\t\tvar formCollection = nfRadio.channel( 'app' ).request( 'get:forms' );\n\t\t\t\t_.each( formCollection.models, function( form, index ) {\n\t\t\t\t\tvar layoutView = new mainLayout( { model: form, fieldCollection: form.get( 'fields' ) } );\t\t\t\n\t\t\t\t\tnfRadio.channel( 'form' ).trigger( 'render:view', layoutView );\n\t\t\t\t\tjQuery( document ).trigger( 'nfFormReady', layoutView );\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\trestart: function( formModel ) {\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ){\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t\t\t'nf_resume': this.urlParameters\n\t\t\t\t\t};\n\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'disable:submit' );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'processingLabel' );\n\n\t\t\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', function() {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Hide form fields (but not the submit button).\n\t\t\t\t\t\t */\n\t\t\t\t\t\tjQuery( '#nf-form-' + formModel.get( 'id' ) + '-cont .nf-field-container:not(.submit-container)' ).hide();\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO: Refactor Duplication\n\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: nfFrontEnd.adminAjax,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\tcache: false,\n\t\t\t\t\t\tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t \t\tvar response = data;\n\t\t\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t },\n\t\t\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t\t\t // Handle errors here\n\t\t\t\t\t console.log('ERRORS: ' + textStatus);\n\t\t\t\t\t // STOP LOADING SPINNER\n\t\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', 'error', textStatus, jqXHR, errorThrown );\n\t\t\t\t\t }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttemplate: function( template ) {\n\t\t\t\tif (!template.startsWith('script')) {\n\t\t\t\t\ttemplate = 'script'+template;\n\t\t\t\t}\n\t\t\t\treturn _.template( jQuery( template ).html(), {\n\t\t\t\t\tevaluate: /<#([\\s\\S]+?)#>/g,\n\t\t\t\t\tinterpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n\t\t\t\t\tescape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n\t\t\t\t\tvariable: 'data'\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tencodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberEncoder(num);\n\t\t\t},\n\n\t\t\tdecodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberDecoder(num);\n\t\t\t}\n\t\t});\n\t\n\t\tvar ninjaForms = new NinjaForms();\n\t\tninjaForms.start();\t\t\n\t} );\n} );\n\ndefine(\"main\", function(){});\n\n"]}1 {"version":3,"sources":["../../../config-wrap-start-default.js","../../../node_modules/almond/almond.js","models/fieldErrorModel.js","models/fieldErrorCollection.js","models/fieldModel.js","models/fieldCollection.js","models/formErrorModel.js","models/formErrorCollection.js","models/formModel.js","models/formCollection.js","controllers/formData.js","controllers/fieldError.js","controllers/changeField.js","controllers/changeEmail.js","controllers/changeDate.js","controllers/fieldCheckbox.js","controllers/fieldCheckboxList.js","controllers/fieldImageList.js","controllers/fieldRadio.js","controllers/fieldNumber.js","controllers/mirrorField.js","controllers/confirmField.js","controllers/updateFieldModel.js","controllers/submitButton.js","controllers/submitDebug.js","controllers/getFormErrors.js","controllers/validateRequired.js","controllers/submitError.js","controllers/actionRedirect.js","controllers/actionSuccess.js","controllers/fieldSelect.js","controllers/coreSubmitResponse.js","controllers/fieldProduct.js","controllers/fieldTotal.js","controllers/fieldQuantity.js","models/calcModel.js","models/calcCollection.js","controllers/calculations.js","controllers/dateBackwardsCompat.js","controllers/fieldDate.js","controllers/fieldRecaptcha.js","controllers/fieldRecaptchaV3.js","controllers/fieldHTML.js","controllers/helpText.js","controllers/fieldTextbox.js","controllers/fieldTextareaRTE.js","controllers/fieldStarRating.js","controllers/fieldTerms.js","controllers/formContentFilters.js","views/fieldItem.js","views/beforeField.js","views/fieldErrorItem.js","views/fieldErrorCollection.js","views/inputLimit.js","views/afterField.js","views/fieldRepeaterFieldLayout.js","views/fieldRepeaterFieldCollection.js","views/fieldRepeaterSetLayout.js","views/fieldRepeaterSetCollection.js","views/fieldRepeaterLayout.js","views/fieldLayout.js","controllers/loadViews.js","controllers/formErrors.js","controllers/submit.js","views/fieldCollection.js","controllers/defaultFilters.js","controllers/uniqueFieldError.js","models/fieldRepeaterSetModel.js","models/fieldRepeaterSetCollection.js","controllers/fieldRepeater.js","controllers/actionGA.js","controllers/loadControllers.js","views/beforeForm.js","views/formErrorItem.js","views/formErrorCollection.js","views/honeyPot.js","views/afterFormContent.js","views/beforeFormContent.js","views/formLayout.js","views/afterForm.js","views/mainLayout.js","../nfLocaleConverter.js","main.js"],"names":["requirejs","require","define","undef","main","req","makeMap","handlers","defined","waiting","config","defining","hasOwn","Object","prototype","hasOwnProperty","aps","slice","jsSuffixRegExp","hasProp","obj","prop","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","starMap","length","nodeIdCompat","test","replace","charAt","concat","splice","join","makeRequire","relName","forceSync","args","arguments","push","apply","makeLoad","depName","value","callDep","Error","splitPrefix","prefix","index","indexOf","substring","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","Backbone","Model","extend","errorModel","Collection","model","fieldErrorCollection","defaults","placeholder","label_pos","classes","reRender","mirror_field","confirm_field","clean","disabled","visible","invalid","initialize","type","this","get","set","collection","options","formModel","listenTo","nfRadio","channel","resetModel","bind","changeModel","changeValue","listimageGet","listimageSet","trigger","formLoaded","beforeSubmit","attr","attributes","addWrapperClass","cl","removeWrapperClass","setInvalid","getValue","fieldModel","comparator","models","on","fieldCollection","reply","getFirstFieldByOrder","validateFields","_","each","repeaterModels","request","repeaterFieldModel","size","keys","showFields","invoke","hideFields","ids_array","targetID","order","FieldCollection","ErrorCollection","beforeForm","afterForm","beforeFields","afterFields","wrapper_class","element_class","hp","fieldErrors","extra","setting","formContentData","formContentLoadFilters","sortedArray","without","first","getFieldByKey","addError","removeError","getExtra","addExtra","removeExtra","getForm","key","findWhere","msg","add","errors","remove","extraData","FormModel","FormCollection","Marionette","nfForms","getForms","getField","form","String","fieldErrorModel","getError","targetError","changeField","blurField","el","val","radioChannel","emailReg","errorID","onChangeModelValue","emailKeyup","onBlurField","fieldID","emailChange","changeEmailErrorMsg","keyCode","dateKeyup","changeHoursMinutes","original","moment","locale","dateChange","format","isDateValid","changeDateErrorMsg","container","target","closest","selected_hour","find","selected_minute","selected_ampm","setValue","fieldId","search","document","querySelector","parseDate","_flatpickr","timestamp","getTime","isNaN","parsedDate","Date","formatDate","registerRenderClasses","validateRequired","validateModelData","beforeUpdateField","getCalcValue","addClass","removeClass","checked","calcValue","customClasses","customLabelClasses","maybeChecked","default_value","register","renderOptions","renderOtherText","selected","filter","opt","savedVal","Array","isArray","html","valueFound","option","label","nfFrontEnd","filter_esc_status","escape","isSelected","required","maybeFilterHTML","template","show_other","data","currentValue","calc_value","tmp_opt","Number","calc","parent","optionArray","valueIndex","clone","allow_multi_select","old_classname","image_type","list_orientation","flex_direction","that","num_columns","parseInt","current_column","current_row","image_options","image","show_option_labels","styles","changeModelValue","updateCheckedClass","maybeMinDefault","validateEntry","min","$el","floatVal","parseFloat","max","step","fieldNumberNumMinError","fieldNumberNumMaxError","testVal","testStep","factor","Math","pow","toFixed","fieldNumberIncrementBy","listeningModel","registerMirror","targetModel","registerConfirm","confirmKeyup","confirmModel","formModal","registerConfirmListeners","confirmID","confirmFieldErrorMsg","compareValue","confirmValue","updateField","submitButton","bound","registerHandlers","click","resetLabel","maybeEnable","maybeDisable","processingLabel","response","nonce","new_nonce","nonce_ts","submitDebug","textStatus","jqXHR","formID","debug","debugMessages","createElement","message","messageText","createTextNode","appendChild","console","log","getFormErrors","error","field","validateKeyup","customReqValidation","defaultReqValidation","maskPlaceholder","getMask","trim","valid","maybeError","mask","nfi18n","currencySymbol","validateRequiredField","submitErrors","focusFirstInvalidInput","ajaxNonce","fields","slug","last","style","show","getElementById","focus","actionRedirect","halt","redirect","window","location","actions","actionSubmit","success_message","form_id","read","top_of_success_message","offset","top","bottom_of_success_message","outerHeight","bottom_of_screen","scrollTop","height","top_of_screen","animate","renderOtherAttributes","otherAttributes","multi_size","settings","clear_complete","reset","hide_complete","renderProductQuantity","renderProduct","product_type","product_use_quantity","totalModel","productTotals","registerShipping","onFormLoaded","onChangeProduct","onChangeQuantity","shippingModel","shippingCost","fieldModels","productFields","quantityFields","productID","product","productPrice","updateTotal","newTotal","productField","registerQuantity","changeCalc","targetCalcModel","CalcModel","dec","toString","getCalc","CalcCollection","calcs","displayFields","registerCalcs","resetCalcs","use_merge_tags","calculations","fieldType","initDisplayField","updateDisplayFields","init","calcCollection","calcModel","setupCalc","eq","eqValues","match","RegExp","updateCalcFields","replaceKey","localeDecodeEquation","mexp","Mexp","eval","localeConverter","nfLocaleConverter","siteLocale","thousands_sep","decimal_point","machineNumber","numberDecoder","formattedNumber","numberEncoder","isNumeric","tag","reTag","calcTag","reCalcTag","replaceAllKeys","re","calcName","spans","spanVar","tmpCalcTag","applyLocaleFormatting","number","result","expression","pattern","forEach","character","nfCalculationsDebug","Radio","dateBackwardsCompat","dateObject","pikaday","_o","disableDayFn","i18n","firstDay","firstDayOfWeek","weekdays","longhand","weekdaysShort","shorthand","months","text","initModel","initDatepicker","registerFunctions","renderHourOptions","renderMinuteOptions","maybeRenderAMPM","hours_options","minutes_options","hours_24","view","hide","dateFormat","convertDateFormat","dateSettings","onReady","selectedDates","datestr","altInput","setAttribute","altFormat","ariaDateFormat","mode","allowInput","disableMobile","minDate","getMinDate","maxDate","getMaxDate","nfCustomLocale","checkCustomLocale","filteredDatePickerSettings","flatpickr","defaultDate","setDate","includes","isSameDay","isObject","date_value","dataset","hour","minute","ampm","current_value","date","yearRangeStart","yearRangeEnd","lookup","default","date_mode","customLocale","monthsShort","startOfWeek","isEmpty","date1","date2","d1","d2","setHours","initRecaptcha","resetRecaptcha","updateResponse","recaptchaID","grecaptcha","processRecaptcha","setInterval","ready","execute","action","then","token","layoutView","submitFieldID","consent","nf_check_recaptcha_consent","recaptchaConsentMissing","nf_build_default_consent_action","services","actionElement","innerText","recaptchaConsentEvent","nf_consent_link_event","CustomEvent","detail","element","dispatchEvent","genericErrorElements","getElementsByClassName","append","htmlFields","trackedMergeTags","setupFieldMergeTagTracking","mergeTags","mergeTag","fieldKey","updateFieldMergeTags","htmlFieldModel","fieldValue","displayRepeaterData","repeaterFieldIDs","returnHTML","passedFields","pop","initHelpText","jBox","theme","content","closeOnMouseleave","closeOnClick","close","currencySymbolDecoded","initTextareaRTEs","clickExtra","meta_image_frame","currentContext","summernote","icons","align","alignCenter","alignJustify","alignLeft","alignRight","indent","outdent","bold","caret","code","eraser","italic","link","unlink","magic","minus","orderedlist","redo","square","table","underline","undo","unorderedlist","toolbar","userSettings","uid","buttons","linkButton","context","mediaButton","codemirror","lineNumbers","prettifyHtml","callbacks","onChange","linkMenu","next","replaceWith","class","innerHTML","ui","linkDropdown","buttonGroup","button","className","contents","tooltip","fieldTextareaRTEInsertLink","clickLinkButton","toggle","dropdown","children","render","fieldTextareaRTEInsertMedia","openMediaManager","open","wp","media","frames","title","fieldTextareaRTESelectAFile","media_attachment","state","toJSON","insertMedia","range","textEl","urlEl","isNewWindowEl","hasClass","url","isNewWindow","filename","initRating","renderRatings","rating","number_of_stars","num","htmlFragment","createRange","createContextualFragment","keyUpExtra","currentTarget","addOption","new_option","viewFilters","loadFilters","addViewFilter","addLoadFilter","getViewFilters","getLoadFilters","priority","ItemView","tagName","toggleAriaInvalid","JSON","stringify","onRender","unwrap","setElement","isInteger","isFinite","floor","charCodeAt","autoNumericOptions","digitGroupSeparator","decimalCharacter","modifyValueOnWheel","autoN_el","AutoNumeric","templateHelpers","renderElement","tmpl","element_templates","renderLabel","renderLabelClasses","renderPlaceholder","customPlaceholder","renderWrapClass","wrapClass","parentType","customWrapClass","renderClasses","maybeDisabled","disable_input","maybeRequired","maybeDisableAutocomplete","disable_browser_autocomplete","translateAutoCompletionType","maybeInputLimit","input_limit_type","input_limit","getHelpText","help_text","maybeRenderHelp","check_text_par","shouldRenderHelpText","icon","classList","hiddenHelpText","textContent","outerHTML","renderDescText","desc_text","check","checkText","descriptionText","fieldDescription","renderNumberDefault","renderCurrencyFormatting","currency_symbol","maybeRenderTime","events","fieldChange","fieldKeyup","fieldClick","extraClick","extraChange","fieldBlur","onAttach","fieldErrorItem","CollectionView","childView","updateCount","count","words","wordCount","charCount","limit","currentCount","InputLimitView","changeError","errorEl","errorCollectionView","inputLimitEl","inputLimitView","fieldItem","beforeField","afterField","LayoutView","regions","getTemplate","renderContainerClass","containerClass","desc_pos","container_class","fieldLayout","removeSet","repeaterSetLayout","repeaterSetCollection","sets","addSet","repeaterFieldLayout","fieldItemView","fieldLayoutView","getFieldItem","getFieldLayout","errorMsg","formErrorsCorrectErrors","omit","registerSubmitHandler","submit","validate","blockingFormErrors","fieldDataDefaults","formData","security","ajax","adminAjax","cache","success","errorThrown","parseJSON","responseText","FieldCollectionView","registerDefaultDataFilter","defaultFormContentLoad","defaultFormContentView","currentFieldCollection","resetFields","nfAllRepeaterFieldsModels","initAllRepeaterFieldsModels","getRepeaterFields","getRepeaterFieldById","getAllRepeaterFieldsModels","getAllFieldsetsByForm","getAllFieldsModelsArrayByForm","setAllRepeaterFieldsModels","setAllRepeatersValues","allRepeatersFieldsetsModels","repeaterID","currentModels","isModelSet","thisFormModels","singleArray","allModels","reverseResearchFieldsetModel","fieldsetModel","startsWith","fieldObject","repeaters","repeater","repeaterFieldValue","idArray","newID","files","repeaterSetModel","sortIDs","getFieldSets","repeaterFieldID","templateFields","fieldset","removeRequiredFieldsErrors","isRepeaterModelSet","rep","fieldsetField","reject","destroy","getFieldsets","checkTimeField","hourEl","minEl","defaultHour","ampmEl","fieldsets","timeFields","modelIndex","cutEl","fieldIndex","initRepeater","actionSendGaEvent","googleanalytics","eventName","event_name","method_type","gtag","eventParams","event_category","event_label","dataLayer","warn","event","FormData","FieldError","ChangeField","ChangeEmail","ChangeDate","FieldCheckbox","FieldCheckboxList","FieldImageList","FieldRadio","FieldNumber","MirrorField","ConfirmField","UpdateFieldModel","SubmitButton","SubmitDebug","GetFormErrors","ValidateRequired","SubmitError","ActionRedirect","ActionSuccess","FieldSelect","CoreSubmitResponse","FieldProduct","FieldTotal","FieldQuantity","Calculations","DateBackwardsCompat","FieldDate","FieldRecaptcha","FieldRecaptchaV3","FieldHTML","HelpText","FieldTextbox","FieldTextareaRTE","FieldStarRating","FieldTerms","FormContentFilters","LoadViews","FormErrors","Submit","DefaultFilters","UniqueFieldError","FieldRepeater","ActionGA","formErrorItem","honeypotHoneypotError","HoneyPot","onShow","renderFieldsMarkedRequired","fieldsMarkedRequired","AfterFormContent","BeforeFormContent","beforeFormContent","formContent","afterFormContent","getEl","formContentViewFilters","formContentView","BeforeForm","FormLayout","AfterForm","responseMsg","formLayout","newLocale","decimal_sep","uniqueElememts","self","formatted","negative","separators","final_separators","replacer","separator","re_one","find_one","re_two","find_two","percision","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","nfLocaleConverterDebug","nfInlineVars","originalVal","fn","prev","change","addEventListener","formCollection","LoadControllers","mainLayout","NinjaForms","Application","forms","Renderer","urlParameters","object","compact","item","nf_resume","restart","decodeNumber","encodeNumber","onStart","evaluate","interpolate","variable","start","empty"],"mappings":"CAAA,WCQA,IAAAA,EAAAC,EAAAC,GACA,SAAAC,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAA,CAAA,EACAC,EAAA,CAAA,EACAC,EAAA,CAAA,EACAC,EAAA,CAAA,EACAC,EAAAC,OAAAC,UAAAC,eACAC,EAAA,GAAAC,MACAC,EAAA,QAEA,SAAAC,EAAAC,EAAAC,GACA,OAAAT,EAAAU,KAAAF,EAAAC,EACA,CAUA,SAAAE,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAZ,GAAAA,EAAAa,MAAA,KACAC,EAAA7B,EAAA6B,IACAC,EAAAD,GAAAA,EAAA,MAAA,CAAA,EAGA,GAAAf,EAAA,CAwBA,IAtBAM,GADAN,EAAAA,EAAAc,MAAA,MACAG,OAAA,EAMA/B,EAAAgC,cAAAxB,EAAAyB,KAAAnB,EAAAM,MACAN,EAAAM,GAAAN,EAAAM,GAAAc,QAAA1B,EAAA,KAIA,MAAAM,EAAA,GAAAqB,OAAA,IAAAR,IAOAb,EADAa,EAAApB,MAAA,EAAAoB,EAAAI,OAAA,GACAK,OAAAtB,IAIAU,EAAA,EAAAA,EAAAV,EAAAiB,OAAAP,IAEA,GAAA,OADAE,EAAAZ,EAAAU,IAEAV,EAAAuB,OAAAb,EAAA,GACAA,GAAA,OACA,GAAA,OAAAE,EAAA,CAMA,GAAA,IAAAF,GAAA,IAAAA,GAAA,OAAAV,EAAA,IAAA,OAAAA,EAAAU,EAAA,GACA,SACAA,EAAA,IACAV,EAAAuB,OAAAb,EAAA,EAAA,GACAA,GAAA,EAEA,CAIAV,EAAAA,EAAAwB,KAAA,IACA,CAGA,IAAAX,GAAAG,IAAAD,EAAA,CAGA,IAAAL,GAFAR,EAAAF,EAAAc,MAAA,MAEAG,OAAAP,EAAA,EAAAA,GAAA,EAAA,CAGA,GAFAP,EAAAD,EAAAT,MAAA,EAAAiB,GAAAc,KAAA,KAEAX,EAGA,IAAAF,EAAAE,EAAAI,OAAAN,EAAA,EAAAA,GAAA,EAKA,IAJAP,EAAAW,EAAAF,EAAApB,MAAA,EAAAkB,GAAAa,KAAA,SAKApB,EAAAA,EAAAD,IACA,CAEAE,EAAAD,EACAG,EAAAG,EACA,KACA,CAKA,GAAAL,EACA,OAMAG,GAAAQ,GAAAA,EAAAb,KACAK,EAAAQ,EAAAb,GACAM,EAAAC,EAEA,EAEAL,GAAAG,IACAH,EAAAG,EACAD,EAAAE,GAGAJ,IACAH,EAAAqB,OAAA,EAAAhB,EAAAF,GACAL,EAAAE,EAAAsB,KAAA,KAEA,CAEA,OAAAxB,CACA,CAEA,SAAAyB,EAAAC,EAAAC,GACA,OAAA,WAIA,IAAAC,EAAApC,EAAAM,KAAA+B,UAAA,GAQA,MAHA,iBAAAD,EAAA,IAAA,IAAAA,EAAAX,QACAW,EAAAE,KAAA,MAEAjD,EAAAkD,MAAApD,EAAAiD,EAAAN,OAAA,CAAAI,EAAAC,IACA,CACA,CAQA,SAAAK,EAAAC,GACA,OAAA,SAAAC,GACAlD,EAAAiD,GAAAC,CACA,CACA,CAEA,SAAAC,EAAAnC,GACA,GAAAL,EAAAV,EAAAe,GAAA,CACA,IAAA4B,EAAA3C,EAAAe,UACAf,EAAAe,GACAb,EAAAa,IAAA,EACApB,EAAAmD,MAAApD,EAAAiD,EACA,CAEA,IAAAjC,EAAAX,EAAAgB,KAAAL,EAAAR,EAAAa,GACA,MAAA,IAAAoC,MAAA,MAAApC,GAEA,OAAAhB,EAAAgB,EACA,CAKA,SAAAqC,EAAArC,GACA,IAAAsC,EACAC,EAAAvC,EAAAA,EAAAwC,QAAA,MAAA,EAKA,OAJAD,GAAA,IACAD,EAAAtC,EAAAyC,UAAA,EAAAF,GACAvC,EAAAA,EAAAyC,UAAAF,EAAA,EAAAvC,EAAAiB,SAEA,CAAAqB,EAAAtC,EACA,CAIA,SAAA0C,EAAAhB,GACA,OAAAA,EAAAW,EAAAX,GAAA,EACA,CA8CA,SAAAiB,EAAA3C,GACA,OAAA,WACA,OAAAd,GAAAA,EAAAA,QAAAA,EAAAA,OAAAc,IAAA,CAAA,CACA,CACA,CA3CAlB,EAAA,SAAAkB,EAAA4C,GACA,IAAAC,EAnDAnB,EAoDAoB,EAAAT,EAAArC,GACAsC,EAAAQ,EAAA,GACAC,EAAAH,EAAA,GA2BA,OAzBA5C,EAAA8C,EAAA,GAEAR,IAEAO,EAAAV,EADAG,EAAAvC,EAAAuC,EAAAS,KAKAT,EAEAtC,EADA6C,GAAAA,EAAA9C,UACA8C,EAAA9C,UAAAC,GAlEA0B,EAkEAqB,EAjEA,SAAA/C,GACA,OAAAD,EAAAC,EAAA0B,EACA,IAiEA3B,EAAAC,EAAA+C,IAKAT,GADAQ,EAAAT,EADArC,EAAAD,EAAAC,EAAA+C,KAEA,GACA/C,EAAA8C,EAAA,GACAR,IACAO,EAAAV,EAAAG,KAKA,CACAU,EAAAV,EAAAA,EAAA,IAAAtC,EAAAA,EACAiD,EAAAjD,EACAkD,GAAAZ,EACAa,EAAAN,EAEA,EAQA9D,EAAA,CACAN,QAAA,SAAAuB,GACA,OAAAyB,EAAAzB,EACA,EACAoD,QAAA,SAAApD,GACA,IAAAqD,EAAArE,EAAAgB,GACA,YAAA,IAAAqD,EACAA,EAEArE,EAAAgB,GAAA,CAAA,CAEA,EACAsD,OAAA,SAAAtD,GACA,MAAA,CACAuD,GAAAvD,EACAwD,IAAA,GACAJ,QAAApE,EAAAgB,GACAd,OAAAyD,EAAA3C,GAEA,GAGApB,EAAA,SAAAoB,EAAAyD,EAAAC,EAAAhC,GACA,IAAAiC,EAAA1B,EAAA2B,EAAA7C,EAAAL,EAAAkC,EAGAiB,EAFAjC,EAAA,GACAkC,SAAAJ,EAQA,GAHAd,EAAAF,EADAhB,EAAAA,GAAA1B,GAIA,cAAA8D,GAAA,aAAAA,EAAA,CAKA,IADAL,GAAAA,EAAAxC,QAAAyC,EAAAzC,OAAA,CAAA,UAAA,UAAA,UAAAwC,EACA/C,EAAA,EAAAA,EAAA+C,EAAAxC,OAAAP,GAAA,EAKA,GAAA,aAHAuB,GADAlB,EAAAjC,EAAA2E,EAAA/C,GAAAkC,IACAI,GAIApB,EAAAlB,GAAA3B,EAAAN,QAAAuB,QACA,GAAA,YAAAiC,EAEAL,EAAAlB,GAAA3B,EAAAqE,QAAApD,GACA6D,GAAA,OACA,GAAA,WAAA5B,EAEA0B,EAAA/B,EAAAlB,GAAA3B,EAAAuE,OAAAtD,QACA,GAAAL,EAAAX,EAAAiD,IACAtC,EAAAV,EAAAgD,IACAtC,EAAAR,EAAA8C,GACAL,EAAAlB,GAAAyB,EAAAF,OACA,KAAAlB,EAAAoC,EAIA,MAAA,IAAAf,MAAApC,EAAA,YAAAiC,GAHAlB,EAAAoC,EAAAY,KAAAhD,EAAAkC,EAAAxB,EAAAC,GAAA,GAAAM,EAAAC,GAAA,CAAA,GACAL,EAAAlB,GAAA1B,EAAAiD,EAGA,CAGA2B,EAAAF,EAAAA,EAAA3B,MAAA/C,EAAAgB,GAAA4B,QAAAoC,EAEAhE,IAIA2D,GAAAA,EAAAP,UAAAzE,GACAgF,EAAAP,UAAApE,EAAAgB,GACAhB,EAAAgB,GAAA2D,EAAAP,QACAQ,IAAAjF,GAAAkF,IAEA7E,EAAAgB,GAAA4D,GAGA,MAAA5D,IAGAhB,EAAAgB,GAAA0D,EAEA,EAEAlF,EAAAC,EAAAI,EAAA,SAAA4E,EAAAC,EAAAhC,EAAAC,EAAAsC,GACA,GAAA,iBAAAR,EACA,OAAA1E,EAAA0E,GAEA1E,EAAA0E,GAAAC,GAMAvB,EAAArD,EAAA2E,EAAAf,EAAAgB,IAAAV,GACA,IAAAS,EAAAlC,OAAA,CAMA,IAJArC,EAAAuE,GACAA,MACA5E,EAAAK,EAAAuE,KAAAvE,EAAAwE,WAEAA,EACA,OAGAA,EAAAnC,QAGAkC,EAAAC,EACAA,EAAAhC,EACAA,EAAA,MAEA+B,EAAA9E,CAEA,CA2BA,OAxBA+E,EAAAA,GAAA,WAAA,EAIA,mBAAAhC,IACAA,EAAAC,EACAA,EAAAsC,GAIAtC,EACA/C,EAAAD,EAAA8E,EAAAC,EAAAhC,GAQAwC,WAAA,WACAtF,EAAAD,EAAA8E,EAAAC,EAAAhC,EACA,EAAA,GAGA7C,CACA,EAMAA,EAAAK,OAAA,SAAAiF,GACA,OAAAtF,EAAAsF,EACA,EAKA3F,EAAA4F,SAAApF,GAEAN,EAAA,SAAAsB,EAAAyD,EAAAC,GACA,GAAA,iBAAA1D,EACA,MAAA,IAAAoC,MAAA,6DAIAqB,EAAAlC,SAIAmC,EAAAD,EACAA,EAAA,IAGA9D,EAAAX,EAAAgB,IAAAL,EAAAV,EAAAe,KACAf,EAAAe,GAAA,CAAAA,EAAAyD,EAAAC,GAEA,GAEAW,IAAA,CACAC,QAAA,EAEA,CAxaA,GA0aA5F,EAAA,sCAAA,WAAA,GAEAA,EAAA,yBAAA,GAAA,WChbA,OAJA6F,SAAAC,MAAAC,OAAA,CAEA,EAGA,GACA/F,EAAA,8BAAA,CAAA,0BAAA,SAAAgG,GCHA,OAHAH,SAAAI,WAAAF,OAAA,CACAG,MAAAF,GAGA,GACAhG,EAAA,oBAAA,CAAA,+BAAA,SAAAmG,GCmHA,OAxHAN,SAAAC,MAAAC,OAAA,CACAK,SAAA,CACAC,YAAA,GACA7C,MAAA,GACA8C,UAAA,GACAC,QAAA,oBACAC,UAAA,EACAC,cAAA,EACAC,eAAA,EACAC,OAAA,EACAC,SAAA,GACAC,SAAA,EACAC,SAAA,GAGAC,WAAA,WACA,IAAAC,EAAAC,KAAAC,IAAA,QAEAD,KAAAE,IAAA,SAAAF,KAAAG,WAAAC,QAAAC,UAAAJ,IAAA,OACAD,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,QAAAD,KAAAS,YAEAT,KAAAU,KAAA,SAAAV,KAAAW,YAAAX,MACAA,KAAAU,KAAA,eAAAV,KAAAY,YAAAZ,MACAA,KAAAE,IAAA,SAAA,IAAAhB,GAEA,cAAAa,IACAC,KAAAC,IAAAD,KAAAa,aACAb,KAAAE,IAAAF,KAAAc,cAWAP,QAAAC,QAAA,UAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,MACAO,QAAAC,QAAA,UAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,WAEA,IAAAA,KAAAC,IAAA,eACAM,QAAAC,QAAAR,KAAAC,IAAA,eAAAc,QAAA,aAAAf,MAMAA,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,SAAAD,KAAAgB,YAKAhB,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,gBAAAD,KAAAiB,aACA,EAEAJ,aAAA,SAAAK,GAKA,MAJA,YAAAA,IACAA,EAAA,iBAGAtC,SAAAC,MAAAlF,UAAAsG,IAAA9F,KAAA6F,KAAAkB,EACA,EAEAJ,aAAA,SAAAK,EAAAf,GAIA,MAHA,YAAAe,IACAA,EAAA,iBAEAvC,SAAAC,MAAAlF,UAAAuG,IAAA/F,KAAA6F,KAAAmB,EAAAf,EACA,EAEAO,YAAA,WACAJ,QAAAC,QAAA,SAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,eAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,eAAAf,KACA,EAEAY,YAAA,WACAL,QAAAC,QAAA,SAAAR,KAAAC,IAAA,OAAAc,QAAA,oBAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,oBAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,oBAAAf,KACA,EAEAoB,gBAAA,SAAAC,GACArB,KAAAE,IAAA,kBAAAmB,EACA,EAEAC,mBAAA,SAAAD,GACArB,KAAAE,IAAA,qBAAAmB,EACA,EAEAE,WAAA,SAAA1B,GACAG,KAAAE,IAAA,UAAAL,EACA,EAEAmB,WAAA,WACAT,QAAAC,QAAA,UAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAA,UAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,KACA,EAEAiB,aAAA,SAAAZ,GACAE,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,gBAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,gBAAAf,KACA,EAUAwB,SAAA,WACA,OAAAxB,KAAAC,IAAA,QACA,GAKA,GAEAlH,EAAA,yBAAA,CAAA,qBAAA,SAAA0I,GC3HA,IAAAtB,EAAAvB,SAAAI,WAAAF,OAAA,CACAG,MAAAwC,EACAC,WAAA,QAEA5B,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EACAJ,KAAA4B,GAAA,QAAA,SAAAC,GACAtB,QAAAC,QAAA,UAAAO,QAAA,mBAAAc,EACA,EAAA7B,MAEAO,QAAAC,QAAA,UAAAsB,MAAA,wBAAA9B,KAAA+B,qBACA,EAEAC,eAAA,WACAC,EAAAC,KAAAlC,KAAA2B,OAAA,SAAAF,GACA,GAAA,aAAAA,EAAAxB,IAAA,QAAA,CACA,MAAAkC,EAAA5B,QAAAC,QAAA,kBAAA4B,QAAA,sCAAAX,EAAAxB,IAAA,WACAgC,EAAAC,KAAAC,EAAA,SAAAE,GAEAA,EAAAnC,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,iBAAAsB,EACA,EACA,MAEAZ,EAAAvB,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,iBAAAU,EAEA,EAAAzB,MAEA,IAAAK,EAAAE,QAAAC,QAAA,QAAAR,KAAA2B,OAAA,GAAA1B,IAAA,WAAAmC,QAAA,YACAH,EAAAK,KAAAjC,EAAAJ,IAAA,gBAAA,GACAM,QAAAC,QAAA,UAAA4B,QAAA,0BAAA1I,OAAA6I,KAAAlC,EAAAJ,IAAA,gBAEA,EAEAuC,WAAA,WACAxC,KAAAyC,OAAA,MAAA,CAAA7C,SAAA,IACAI,KAAAyC,OAAA,WACAzC,KAAAe,QAAA,eAAAf,KACA,EACA,EAEA0C,WAAA,WACA1C,KAAAyC,OAAA,MAAA,CAAA7C,SAAA,IACAI,KAAAyC,OAAA,WACAzC,KAAAe,QAAA,eAAAf,KACA,EACA,EAEA+B,qBAAA,SAAAY,GACA,IAAAC,EAAA,EASA,OAPAX,EAAAC,KAAAS,EAAA,SAAA/E,GAEA,MAAAiF,EAAAtC,QAAAC,QAAA,UAAA4B,QAAA,YAAAxE,GAAAqC,IAAA,SAEA2C,EAAA,IAAAA,GAAAC,EAAAD,EAAAhF,EAAAgF,CACA,GAEAA,CACA,IAEA,OAAAzC,CACA,GAEApH,EAAA,wBAAA,GAAA,WC7DA,OAJA6F,SAAAC,MAAAC,OAAA,CAEA,EAGA,GACA/F,EAAA,6BAAA,CAAA,yBAAA,SAAAgG,GCHA,OAHAH,SAAAI,WAAAF,OAAA,CACAG,MAAAF,GAGA,GACAhG,EAAA,mBAAA,CCLA,yBACA,8BACA,SACA+J,EACAC,GA6IA,OA3IAnE,SAAAC,MAAAC,OAAA,CACAK,SAAA,CACA6D,WAAA,GACAC,UAAA,GACAC,aAAA,GACAC,YAAA,GACAC,cAAA,GACAC,cAAA,GACAC,GAAA,GACAC,YAAA,CAAA,EACAC,MAAA,CAAA,GAGA1D,WAAA,WAEAmC,EAAAC,KAAAlC,KAAAC,IAAA,YAAA,SAAA1D,EAAAkH,GACAzD,KAAAE,IAAAuD,EAAAlH,EACA,EAAAyD,MAEAA,KAAAE,IAAA,eAAAF,KAAAC,IAAA,WACAD,KAAAE,IAAA,SAAA,IAAA4C,EAAA9C,KAAAC,IAAA,UAAA,CAAAI,UAAAL,QACAA,KAAAE,IAAA,SAAA,IAAA6C,GAKAxC,QAAAC,QAAA,QAAAO,QAAA,oBAAAf,MAKA,IAAA0D,EAAA1D,KAAAC,IAAA,mBAQAyD,IACAA,EAAA1D,KAAAC,IAAA,sBAGA,IAAA0D,EAAApD,QAAAC,QAAA,eAAA4B,QAAA,mBAIAwB,EAAA3B,EAAA4B,QAAAF,OAAAtF,GAEAqF,EADAzB,EAAA6B,MAAAF,EACA7F,CAAA2F,EAAA1D,KAAAA,MAEAA,KAAAE,IAAA,kBAAAwD,GAEAnD,QAAAC,QAAA,SAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,aAAAf,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,iBAAA9B,KAAA+D,cAAA/D,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,YAAA9B,KAAAgE,SAAAhE,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,eAAA9B,KAAAiE,YAAAjE,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,YAAA9B,KAAAkE,SAAAlE,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,YAAA9B,KAAAmE,SAAAnE,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,eAAA9B,KAAAoE,YAAApE,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,WAAA9B,KAAAqE,QAAArE,MAEAO,QAAAC,QAAA,QAAAO,QAAA,SAAAf,MACAO,QAAAC,QAAA,QAAAO,QAAA,eAAAf,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,SAAAf,KACA,EAQA+D,cAAA,SAAAO,GACA,OAAAtE,KAAAC,IAAA,UAAAsE,UAAA,CAAAD,IAAAA,GACA,EAQAN,SAAA,SAAApG,EAAA4G,GACAxE,KAAAC,IAAA,UACAwE,IAAA,CAAA7G,GAAAA,EAAA4G,IAAAA,IACAjE,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,YAAAf,KAAApC,EAAA4G,EACA,EAEAP,YAAA,SAAArG,GACA,IAAA8G,EAAA1E,KAAAC,IAAA,UACAlB,EAAA2F,EAAAzE,IAAArC,GACA8G,EAAAC,OAAA5F,GACAwB,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,KAAApC,EACA,EAQAsG,SAAA,SAAAI,GACA,IAAAM,EAAA5E,KAAAC,IAAA,SACA,YAAA,IAAAqE,EAAAM,EACAA,EAAAN,EACA,EAEAH,SAAA,SAAAG,EAAA/H,GACAyD,KAAAC,IAAA,SACAqE,GAAA/H,EACAgE,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,YAAAf,KAAAsE,EAAA/H,EACA,EAEA6H,YAAA,SAAAE,UACAtE,KAAAC,IAAA,SACAqE,GACA/D,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,KAAAsE,EACA,EAOAD,QAAA,WACA,OAAArE,IACA,GAIA,GACAjH,EAAA,wBAAA,CAAA,oBAAA,SAAAsH,GChJA,OAHAzB,SAAAI,WAAAF,OAAA,CACAG,MAAAoB,GAGA,GCEAtH,EAAA,uBAAA,CAAA,mBAAA,wBAAA,yBAAA,8BAAA,SAAA8L,EAAAC,EAAAhC,EAAAC,GA+CA,OA9CAgC,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAUAE,KAAAG,WAAA,IAAA2E,EAAAE,SACAzE,QAAAC,QAAA,SAAAO,QAAA,SAAAf,KAAAG,YACAI,QAAAC,QAAA,OAAAO,QAAA,eAAAf,KAAAG,YAEAI,QAAAC,QAAA,OAAAsB,MAAA,WAAA9B,KAAAqE,QAAArE,MACAO,QAAAC,QAAA,OAAAsB,MAAA,YAAA9B,KAAAiF,SAAAjF,MAEAO,QAAAC,QAAA,UAAAsB,MAAA,YAAA9B,KAAAkF,SAAAlF,KACA,EAEAqE,QAAA,SAAAzG,GACA,OAAAoC,KAAAG,WAAAF,IAAArC,EACA,EAEAqH,SAAA,WACA,OAAAjF,KAAAG,UACA,EAEA+E,SAAA,SAAAtH,GACA,IAAAqB,GAAA,EAYA,OAVAgD,EAAAC,KAAAlC,KAAAG,WAAAwB,OAAA,SAAAwD,GACAlG,IACAA,EAAAkG,EAAAlF,IAAA,UAAAA,IAAArC,GAEA,QAEA,IAAAqB,IAAA,IAAAmG,OAAAxH,GAAAf,QAAA,OACAoC,EAAAsB,QAAAC,QAAA,kBAAA4B,QAAA,wBAAAxE,IAGAqB,CACA,GAIA,GAEAlG,EAAA,yBAAA,CAAA,0BAAA,SAAAsM,GCTA,OA/CAN,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,UAAAsB,MAAA,YAAA9B,KAAAgE,UACAzD,QAAAC,QAAA,UAAAsB,MAAA,eAAA9B,KAAAiE,aACA1D,QAAAC,QAAA,UAAAsB,MAAA,YAAA9B,KAAAsF,SACA,EAEAtB,SAAA,SAAApB,EAAAhF,EAAA4G,GACA,IAAAvF,EAAAsB,QAAAC,QAAA,UAAA4B,QAAA,YAAAQ,GAEA,QAAA,IAAA3D,EAAA,CAEA,IAAAyF,EAAAzF,EAAAgB,IAAA,UACAyE,EAAAD,IAAA,CAAA7G,GAAAA,EAAA4G,IAAAA,IACAvF,EAAAiB,IAAA,SAAAwE,GACAzF,EAAA8B,QAAA,gBAAA9B,GACAA,EAAAiB,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,YAAA9B,EAAArB,EAAA4G,EAPA,CAQA,EAEAP,YAAA,SAAArB,EAAAhF,GACA,IAAAqB,EAAAsB,QAAAC,QAAA,UAAA4B,QAAA,YAAAQ,GAEA,QAAA,IAAA3D,EAAA,CACA,IAAAyF,EAAAzF,EAAAgB,IAAA,UACAsF,EAAAb,EAAAzE,IAAArC,QAEA,IAAA2H,IACAb,EAAAC,OAAAY,GACAtG,EAAAiB,IAAA,SAAAwE,GACAzF,EAAA8B,QAAA,gBAAA9B,GACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAA9B,EAAArB,GARA,CAUA,EAEA0H,SAAA,SAAA1C,EAAAhF,GACA,IAEA2H,EAFAhF,QAAAC,QAAA,UAAA4B,QAAA,YAAAQ,GACA3C,IAAA,UACAA,IAAArC,GACA,MAAA,aAAA2H,GACAA,CAIA,GAIA,GC1CAxM,EAAA,0BAAA,GAAA,WA+DA,OA9DAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WAIAS,QAAAC,QAAA,WAAAsB,MAAA,eAAA9B,KAAAwF,aAOAxF,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAyF,UACA,EAEAD,YAAA,SAAAE,EAAAzG,GAEA,IAAA1C,EAAAgE,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAmC,QAAA,qBAAAsD,EAAAzG,GAEA1C,OAAA,KADAA,OAAA,IAAAA,EAAAA,EAAAgE,QAAAC,QAAAvB,EAAAgB,IAAA,eAAAmC,QAAA,qBAAAsD,EAAAzG,IACA1C,EAAAoC,OAAA+G,GAAAC,MAGA1G,EAAAiB,IAAA,aAAA,GAGAjB,EAAAiB,IAAA,SAAA,GAYAK,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAAc,QAAA,eAAA2E,EAAAzG,GACAsB,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAc,QAAA,eAAA2E,EAAAzG,GACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAA2E,EAAAzG,GAMAsB,QAAAC,QAAA,WAAA4B,QAAA,eAAAnD,EAAA1C,GAKA0C,EAAAgB,IAAA,kBACAM,QAAAC,QAAA,kBAAAO,QAAA,YAEA,EAEA0E,UAAA,SAAAC,EAAAzG,GAEAA,EAAAiB,IAAA,SAAA,EACA,GAIA,GACAnH,EAAA,0BAAA,GAAA,WCvEA,IAAA6M,EAAArF,QAAAC,QAAA,SAEAqF,EAAA,yJACAC,EAAA,gBAuFA,OArFAf,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAsF,EAAA,oBAAA5F,KAAA+F,oBACA/F,KAAAM,SAAAsF,EAAA,cAAA5F,KAAAgG,YACAhG,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAiG,YACA,EAEAF,mBAAA,SAAA9G,GACA,IAAA1C,EAAA0C,EAAAgB,IAAA,SACAiG,EAAAjH,EAAAgB,IAAA,MACAD,KAAAmG,YAAA5J,EAAA2J,EACA,EAEAD,YAAA,SAAAP,EAAAzG,GACA,IAAA1C,EAAAoC,OAAA+G,GAAAC,MACAO,EAAAjH,EAAAgB,IAAA,MACAD,KAAAmG,YAAA5J,EAAA2J,EACA,EAEAC,YAAA,SAAA5J,EAAA2J,GACA,GAAA,EAAA3J,EAAAjB,OACA,GAAAuK,EAAArK,KAAAe,GACAgE,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAAmG,oBACA,MAEA7F,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,EAEA,EAYAE,WAAA,SAAAN,EAAAzG,EAAAoH,GAKA,GAAA,GAAAA,EACA,OAAA,EAKA,IAAA9J,EAAAoC,OAAA+G,GAAAC,MAKAO,EAAAjH,EAAAgB,IAAA,MAKA,GAAA,GAAA1D,EAAAjB,OACAiF,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,QACA,GAAAD,EAAArK,KAAAe,IAAA0C,EAAAgB,IAAA,SAOA4F,EAAArK,KAAAe,KACAgE,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,GAIA7G,EAAAmC,gBAAA,WACAnC,EAAAiB,IAAA,SAAA,QAbA,CAEA,IAAAuB,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAAmG,qBAEAnH,EAAAqC,mBAAA,UACA,CAQA,GAIA,GACAvI,EAAA,yBAAA,GAAA,WC5FA,IAAA6M,EAAArF,QAAAC,QAAA,QACAsF,EAAA,eAmKA,OAjKAf,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAsF,EAAA,oBAAA5F,KAAA+F,oBACA/F,KAAAM,SAAAsF,EAAA,cAAA5F,KAAAsG,WACAtG,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAiG,aAEAjG,KAAAM,SAAAsF,EAAA,eAAA5F,KAAAuG,mBAAAvG,KACA,EAEA+F,mBAAA,SAAA9G,GACA,IAAAuH,EAAAC,OAAAC,SACAD,OAAAC,OAAA,eACA1G,KAAA2G,WAAA1H,GACAwH,OAAAC,OAAAF,EACA,EAEAP,YAAA,SAAAP,EAAAzG,GACA,IAAAuH,EAAAC,OAAAC,SACAD,OAAAC,OAAA,eACA1G,KAAA2G,WAAA1H,GACAwH,OAAAC,OAAAF,EACA,EAEAG,WAAA,SAAA1H,GACA,IAAAiH,EAAAjH,EAAAgB,IAAA,MACA1D,EAAA0C,EAAAgB,IAAA,SACA2G,EAAA3H,EAAAgB,IAAA,eAGA,GAAA,aAAAhB,EAAAgB,IAAA,aACA,OAAA,EAGA,GAAA,EAAA1D,EAAAjB,OAEA,GAAA0E,KAAA6G,YAAAtK,EAAAqK,EAAAV,GACA3F,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAA6G,mBACA,MAEAvG,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,EAEA,EAaAQ,UAAA,SAAAZ,EAAAzG,EAAAoH,GAKA,GAAA,GAAAA,EACA,OAAA,EAKA,IAAA9J,EAAAoC,OAAA+G,GAAAC,MAKAO,EAAAjH,EAAAgB,IAAA,MAKA2G,EAAA3H,EAAAgB,IAAA,eAEAuG,EAAAC,OAAAC,SAMA,GALAD,OAAAC,OAAA,eAKA,GAAAnK,EAAAjB,OACAiF,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,QAGA,GAAA9F,KAAA6G,YAAAtK,EAAAqK,EAAAV,IAAAjH,EAAAgB,IAAA,SASAD,KAAA6G,YAAAtK,EAAAqK,EAAAV,KACA3F,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,GAIA7G,EAAAmC,gBAAA,WACAnC,EAAAiB,IAAA,SAAA,QAfA,CAEA,IAAAuB,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAA6G,oBAEA7H,EAAAqC,mBAAA,UACA,CAUAmF,OAAAC,OAAAF,EACA,EAEAD,mBAAA,SAAA7I,EAAA+D,GACA,IACAsF,EAAApI,OAAAjB,EAAAsJ,QAAAC,QAAA,qBAGAC,EAAAvI,OAAAoI,GAAAI,KAAA,SAAAxB,MACAyB,EAAAzI,OAAAoI,GAAAI,KAAA,WAAAxB,MACA0B,EAAA1I,OAAAoI,GAAAI,KAAA,SAAAxB,MAMA,GAJAlE,EAAAvB,IAAA,gBAAAgH,GACAzF,EAAAvB,IAAA,kBAAAkH,GACA3F,EAAAvB,IAAA,gBAAAmH,GAEA,cAAA5F,EAAAxB,IAAA,aAAA,CACA,MAAAqH,OAAA,IAAAD,EACAH,EAAA,IAAAE,EAAA,IAAAC,EACAH,EAAA,IAAAE,EAEA3F,EAAAvB,IAAA,QAAAoH,EACA,CAGA,MAAAC,EAAA9F,EAAAxB,IAAA,MACA,iBAAAsH,IAAA,IAAAA,EAAAC,OAAA,MACAjH,QAAAC,QAAA,kBAAAO,QAAA,YAEA,EAEA8F,YAAA,SAAAtK,EAAAqK,EAAAV,GACA,GAAA,OAAAuB,SAAAC,cAAA,mBAAAxB,EAAA,MAAA,OAEA,MAAAyB,EAAAF,SAAAC,cAAA,mBAAAxB,EAAA,MAAA0B,WAAAD,UAAApL,EAAAqK,GAEA,IAAAe,EACA,OAAA,EAEA,MAAAE,EAAAF,EAAAG,UACA,GAAAC,MAAAF,GACA,OAAA,EAGA,MAAAG,EAAA,IAAAC,KAAAJ,GAGA,OAFAJ,SAAAC,cAAA,mBAAAxB,EAAA,MAAA0B,WAAAM,WAAAF,EAAApB,KAEArK,CACA,GAKA,GACAxD,EAAA,4BAAA,GAAA,WClFA,OApFAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAIAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAAmI,uBAEA5H,QAAAC,QAAA,YAAAsB,MAAA,oBAAA9B,KAAAoI,kBACA7H,QAAAC,QAAA,YAAAsB,MAAA,qBAAA9B,KAAAqI,mBACA9H,QAAAC,QAAA,YAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,YAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAsI,kBAAA,SAAA5C,EAAAzG,GAEA,GADAN,OAAA+G,GAAAxL,KAAA,WACA,CACA,IAAAqC,EAAA,EACAoC,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAuB,QAAA,eAAAE,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,mBACA,KAAA,CACAjM,EAAA,EACAoC,OAAA+G,GAAA+C,YAAA,cACA9J,OAAA+G,GAAAuB,QAAA,eAAAE,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAuO,YAAA,mBACA,CAEA,OAAAlM,CACA,EAEA6L,iBAAA,SAAA1C,EAAAzG,GACA,OAAAyG,EAAA,GAAAgD,OACA,EAEAL,kBAAA,SAAApJ,GACA,OAAA,GAAAA,EAAAgB,IAAA,QACA,EAEAsI,aAAA,SAAA9G,GAOA,OANA,GAAAA,EAAAxB,IAAA,SACA0I,UAAAlH,EAAAxB,IAAA,sBAEA0I,UAAAlH,EAAAxB,IAAA,wBAGA0I,SACA,EAEAR,sBAAA,SAAAlJ,GACA,WAAAA,EAAAgB,IAAA,iBACAhB,EAAAiB,IAAA,QAAA,GAEAjB,EAAAiB,IAAA,QAAA,GAEAjB,EAAAiB,IAAA,gBAAAF,KAAA4I,eACA3J,EAAAiB,IAAA,qBAAAF,KAAA6I,oBACA5J,EAAAiB,IAAA,eAAAF,KAAA8I,aACA,EAEAF,cAAA,SAAAtJ,GAMA,OALA,GAAAU,KAAAzD,OAAAyD,KAAAN,YAAA,IAAAM,KAAA+I,eAAA,WAAA/I,KAAA+I,cACAzJ,GAAA,cAEAA,EAAA7D,QAAA,aAAA,IAEA6D,CACA,EAEAuJ,mBAAA,SAAAvJ,GAMA,OALA,GAAAU,KAAAzD,OAAAyD,KAAAN,YAAA,IAAAM,KAAA+I,eAAA,WAAA/I,KAAA+I,cACAzJ,GAAA,oBAEAA,EAAA7D,QAAA,mBAAA,IAEA6D,CACA,EAEAwJ,aAAA,WACA,OAAA,GAAA9I,KAAAzD,OAAAyD,KAAAN,YAAA,IAAAM,KAAA+I,eAAA,WAAA/I,KAAA+I,cACA,WAEA,EAEA,GAIA,GACAhQ,EAAA,gCAAA,GAAA,WCsGA,OA5LAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,gBAAA,aAAAR,KAAAgJ,UACAhJ,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,gBAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,SAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,gBAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,MACAO,QAAAC,QAAA,SAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GASA,GARAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,kBAAAF,KAAAkJ,iBACAjK,EAAAiB,IAAA,WAAA,IAMA,GAAAjB,EAAAgB,IAAA,WAAA3E,OAAA,CACA,IAAA6N,EAAAlH,EAAAmH,OAAAnK,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,GACAA,EAAAlH,EAAA7G,IAAA+N,EAAA,SAAAE,GAAA,OAAAA,EAAA9M,KAAA,EACA,CAMA,IAAA+M,EAAArK,EAAAgB,IAAA,cACA,IAAAqJ,GAAAC,MAAAC,QAAAF,GACArK,EAAAiB,IAAA,QAAAoJ,QACA,IAAAH,GACAlK,EAAAiB,IAAA,QAAAiJ,EAEA,EAEAF,cAAA,WACA,IAAAQ,EAAA,GAEA,GAAA,IAAAzJ,KAAAzD,OAAAgN,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,EAAA0E,KAAAzD,MAAAjB,OACA,IAAAoO,GAAA,OAEAA,GAAA,EAgEA,GA7DAzH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,EAAA/M,GACA2M,MAAAC,QAAAxJ,KAAAzD,SACAgN,MAAAC,QAAAxJ,KAAAzD,MAAA,MAAA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAA,GAAAoN,EAAApN,QAGA0F,EAAApF,QAAAmD,KAAAzD,MAAAoN,EAAApN,UAFAmN,GAAA,GAOAC,EAAApN,OAAAyD,KAAAzD,QACAmN,GAAA,QAOA,IAAAC,EAAA/J,UACA+J,EAAA/J,SAAA,GAGA+J,EAAAzD,QAAAlG,KAAApC,GACA+L,EAAArK,QAAAU,KAAAV,QACAqK,EAAA/M,MAAAA,EACA+M,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAAJ,EAAAC,OAAAD,EAAAC,MAEA,IAAAT,GAAA,EAKAI,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,IAAA2G,EAAApF,QAAAmD,KAAAzD,MAAA,GAAApB,MAAA,KAAAwO,EAAApN,SACA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAAoN,EAAApN,SACA4M,GAAA,GAEAlH,EAAAuH,QAAAxJ,KAAAzD,QAAAoN,EAAApN,OAAAyD,KAAAzD,MAEA,GAAAoN,EAAAR,UAAAnJ,KAAAN,YAAA,IAAAM,KAAAzD,QACA4M,GAAA,GAFAA,GAAA,EAeAQ,EAAAR,SAAAA,EACAQ,EAAAK,WAAAb,EACAQ,EAAAM,SAAAjK,KAAAiK,SACAN,EAAAO,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,sCACAqH,GAAAU,EAAAR,EACA,EAAA3J,MAEA,GAAAA,KAAAoK,WAAA,CACA,YAAApK,KAAAzD,QACAmN,GAAA,GAEA,IAAAW,EAAA,CACAnE,QAAAlG,KAAApC,GACA0B,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAzD,MACA2M,gBAAAlJ,KAAAkJ,gBACAQ,WAAAA,GAGAS,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,qCACAqH,GAAAU,EAAAE,EAEA,CAEA,OAAAZ,CACA,EAEAP,gBAAA,WACA,GAAA,YAAAlJ,KAAAsK,eAAAtK,KAAA0J,WAAA,CACA,YAAA1J,KAAAsK,eACAtK,KAAAsK,aAAA,IAEA,IAAAD,EAAA,CACAnE,QAAAlG,KAAAkG,QACA5G,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAsK,cAGA,OADA/J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,yCACA+H,CAAAE,EACA,CACA,EAEA9B,aAAA,SAAA9G,GACA,IAAA8I,EAAA,EACAnK,EAAAqB,EAAAxB,IAAA,WAOA,OANA,GAAAG,EAAA9E,QACA2G,EAAAC,KAAAT,EAAAxB,IAAA,SAAA,SAAA0F,GACA,IAAA6E,EAAAvI,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAAA,EAAA9M,OAAAoJ,CAAA,GACA4E,EAAAE,OAAAF,GAAAE,OAAAD,EAAAE,KACA,GAEAH,CACA,EAEAjC,kBAAA,SAAA5C,EAAAzG,GACA,IAAAkK,EAAAlK,EAAAgB,IAAA,UAAA,GACA,iBAAAkJ,IAAAA,EAAA,CAAAA,IAEA,IAAA5M,EAAAoC,OAAA+G,GAAAC,MAEA,GADAhH,OAAA+G,GAAAxL,KAAA,WAEAiP,EAAAhN,KAAAI,GACAoC,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,wBACA,CACA7J,OAAA+G,GAAA+C,YAAA,cACA9J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAuO,YAAA,oBACA,IAAA1N,EAAAoO,EAAAtM,QAAAN,GACA,IAAA,GAAAxB,EACAoO,EAAAvN,OAAAb,EAAA,QACA,GAAAwO,MAAAC,QAAAL,GAAA,CACA,IAAAyB,OAAA,IAAAzB,EAAA,GAAAA,EAAA,GAAAhO,MAAA,KAAA,GACA0P,EAAAD,EAAA/N,QAAAN,IACA,IAAAsO,GACAD,EAAAhP,OAAAiP,EAAA,GAEA1B,EAAAyB,EAAA/O,KAAA,IACA,CACA,CAMA,OAAAoG,EAAA6I,MAAA3B,EACA,GAIA,GACApQ,EAAA,6BAAA,GAAA,WCyDA,OAvPAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,aAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,aAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GASA,GARAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,kBAAAF,KAAAkJ,iBACAjK,EAAAiB,IAAA,WAAA,IAMA,GAAAjB,EAAAgB,IAAA,iBAAA3E,OAAA,CACA,IAAA6N,EAAAlH,EAAAmH,OAAAnK,EAAAgB,IAAA,iBAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,GACAA,EAAAlH,EAAA7G,IAAA+N,EAAA,SAAAE,GAAA,OAAAA,EAAA9M,KAAA,EACA,CAMA,IAAA+M,EAAArK,EAAAgB,IAAA,cACA,IAAAqJ,GAAAC,MAAAC,QAAAF,GACArK,EAAAiB,IAAA,QAAAoJ,QACA,IAAAH,GACAlK,EAAAiB,IAAA,QAAAiJ,EAEA,EAEAF,cAAA,WACA,IAAAQ,EAAA,GAEA,GAAA,IAAAzJ,KAAAzD,OAAAgN,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,EAAA0E,KAAAzD,MAAAjB,OACA,IAAAoO,GAAA,OAEAA,GAAA,EAGA,IAAA1J,KAAA+K,oBACA/K,KAAAgL,cAAA,gBACAhL,KAAAiL,WAAA,YAEAjL,KAAAiL,WAAA,QAGA,eAAAjL,KAAAkL,iBACAlL,KAAAmL,eAAA,MAEAnL,KAAAmL,eAAA,SAEA,IAAAC,EAAApL,KAEAqL,EAAAC,SAAAtL,KAAAqL,cAAA,EACAE,EAAA,EACAC,EAAA,EAqEA,GAnEAvJ,EAAAC,KAAAlC,KAAAyL,cAAA,SAAAC,EAAA9O,GACAoD,KAAA2L,mBAGAD,EAAA9B,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAA2B,EAAA9B,OAAA8B,EAAA9B,MAFA8B,EAAA9B,MAAA,GAIAL,MAAAC,QAAAxJ,KAAAzD,SACAgN,MAAAC,QAAAxJ,KAAAzD,MAAA,MAAA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAA,GAAAmP,EAAAnP,QAGA0F,EAAApF,QAAAmD,KAAAzD,MAAAmP,EAAAnP,UAFAmN,GAAA,GAOAgC,EAAAnP,OAAAyD,KAAAzD,QACAmN,GAAA,QAOA,IAAAgC,EAAA9L,UACA8L,EAAA9L,SAAA,GAGA,eAAAwL,EAAAF,kBAAAK,GAAAF,IACAK,EAAAE,OAAA,4BAAAL,EAAA,gBAAAC,EAEAD,IAAAF,GACAE,EAAA,EACAC,GAAA,GAEAD,GAAA,GAIAG,EAAAT,WAAAG,EAAAH,WACAS,EAAAxF,QAAAlG,KAAApC,GACA8N,EAAApM,QAAAU,KAAAV,QACAoM,EAAA9O,MAAAA,EAEA,IAAAuM,GAAA,EAKAI,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,IAAA2G,EAAApF,QAAAmD,KAAAzD,MAAA,GAAApB,MAAA,KAAAuQ,EAAAnP,SACA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAAmP,EAAAnP,SACA4M,GAAA,IAEAlH,EAAAuH,QAAAxJ,KAAAzD,QAAAmP,EAAAnP,OAAAyD,KAAAzD,SAEA,GAAAmP,EAAAvC,WAAAnJ,KAAAN,YAAA,IAAAM,KAAAzD,OAAA,KAAAyD,KAAAzD,SADA4M,GAAA,GAKAuC,EAAAvC,SAAAA,EACAuC,EAAA1B,WAAAb,EACAuC,EAAAzB,SAAAjK,KAAAiK,SACAyB,EAAAxB,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,mCACAqH,GAAAU,EAAAuB,EACA,EAAA1L,MAEA,GAAAA,KAAAoK,WAAA,CACA,YAAApK,KAAAzD,QACAmN,GAAA,GAEA,IAAAW,EAAA,CACAnE,QAAAlG,KAAApC,GACA0B,QAAAU,KAAAV,QACA/C,MAAAyD,KAAAzD,MACA+N,aAAAtK,KAAAzD,MACA2M,gBAAAlJ,KAAAkJ,gBACAQ,WAAAA,GAGAS,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kCACAqH,GAAAU,EAAAE,EAEA,CAEA,OAAAZ,CACA,EAEAP,gBAAA,WACA,GAAA,YAAAlJ,KAAAsK,eAAAtK,KAAA0J,WAAA,CACA,YAAA1J,KAAAsK,eACAtK,KAAAsK,aAAA,IAEA,IAAAD,EAAA,CACAnE,QAAAlG,KAAAkG,QACA5G,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAsK,cAGA,OADA/J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,sCACA+H,CAAAE,EACA,CACA,EAEA9B,aAAA,SAAA9G,GACA,IAAA8I,EAAA,EACAnK,EAAAqB,EAAAxB,IAAA,WACA,GAAA,GAAAG,EAAA9E,OAIA,GAAA,GAAAgQ,SAAA7J,EAAAxB,IAAA,uBAIAgC,EAAAC,KAAAT,EAAAxB,IAAA,SAAA,SAAA0F,GACA,IAAA6E,EAAAvI,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAAA,EAAA9M,OAAAoJ,CAAA,GACA4E,GAAAE,OAAAD,EAAAE,KACA,OACA,CAIA,IAAAvB,EAAAlH,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAA5H,EAAAxB,IAAA,UAAAoJ,EAAA9M,KAAA,QAIA,IAAA4M,IACAoB,EAAApB,EAAAuB,KAEA,CAEA,OAAAH,CACA,EAEAjC,kBAAA,SAAA5C,EAAAzG,GAEA,GAAA,IAAAA,EAAAgB,IAAA,sBAAA,CACA,IAAAkJ,EAAAxK,OAAA+G,GAAAC,MACAvF,EAAAnB,EAAAgB,IAAA,iBACAgC,EAAAC,KAAA9B,EAAA,SAAAuJ,EAAA/M,GACA+M,EAAApN,QAAA4M,GACAQ,EAAAK,YAAA,EACAL,EAAAR,UAAA,IAEAQ,EAAAK,YAAA,EACAL,EAAAR,UAAA,GAEAQ,EAAAK,YAKArL,OAAA,aAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA4L,SAAA,cACA7J,OAAA,mBAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA4L,SAAA,sBALAmB,EAAAR,UAAA,EACAxK,OAAA,aAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA6L,YAAA,cACA9J,OAAA,mBAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA6L,YAAA,oBAKA,EACA,KAAA,CAEA,iBADAU,EAAAlK,EAAAgB,IAAA,UAAA,MACAkJ,EAAA,CAAAA,IACA,IAAA5M,EAAAoC,OAAA+G,GAAAC,MAEA,GADAhH,OAAA+G,GAAAxL,KAAA,WAEAiP,EAAAhN,KAAAI,GACAoC,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,wBACA,CACA7J,OAAA+G,GAAA+C,YAAA,cACA9J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAuO,YAAA,oBACA,IAAA1N,EAAAoO,EAAAtM,QAAAN,GACA,IAAA,GAAAxB,EACAoO,EAAAvN,OAAAb,EAAA,QACA,GAAAwO,MAAAC,QAAAL,GAAA,CACA,IAAAyB,EAAAzB,EAAA,GAAAhO,MAAA,KACA0P,EAAAD,EAAA/N,QAAAN,IACA,IAAAsO,GACAD,EAAAhP,OAAAiP,EAAA,GAEA1B,EAAAyB,EAAA/O,KAAA,IACA,CACA,CACA,CAEA,OAAAoG,EAAA6I,MAAA3B,EACA,GAIA,GACApQ,EAAA,yBAAA,GAAA,WCxGA,OAjJAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,oBAAAR,KAAA6L,kBACA7L,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,aAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,MAEAA,KAAAM,SAAAC,QAAAC,QAAA,aAAA,eAAAR,KAAA8L,mBAAA9L,KACA,EAEAgJ,SAAA,SAAA/J,GAOA,GANAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,kBAAAF,KAAAkJ,iBAKA,GAAAjK,EAAAgB,IAAA,WAAA3E,OAAA,CAIA,IAAA6N,EAAAlH,EAAAkF,KAAAlI,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,QAEA,IAAAA,GACAlK,EAAAiB,IAAA,QAAAiJ,EAAA5M,MAEA,CACA,EAEAsP,iBAAA,SAAA5M,GACA,GAAAA,EAAAgB,IAAA,eAEAhB,EAAA8B,QAAA,WAEA,EAEAkI,cAAA,WACA,IAAAQ,EAAA,GACA,GAAA,IAAAzJ,KAAAzD,MACA,IAAAmN,GAAA,OAEAA,GAAA,EAyCA,GAtCAzH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,EAAA/M,GACA+M,EAAApN,OAAAyD,KAAAzD,QACAmN,GAAA,QAOA,IAAAC,EAAA/J,UACA+J,EAAA/J,SAAA,GAGA+J,EAAAR,UAAA,EACAQ,EAAAzD,QAAAlG,KAAApC,GACA+L,EAAArK,QAAAU,KAAAV,QACAqK,EAAAW,aAAAtK,KAAAzD,MACAoN,EAAA/M,MAAAA,EACA+M,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAAJ,EAAAC,OAAAD,EAAAC,MACAD,EAAAM,SAAAjK,KAAAiK,SAKAjK,KAAAN,OAAA,GAAAM,KAAAmJ,UAEAnJ,KAAAzD,OAAAoN,EAAApN,MADAoN,EAAAR,UAAA,EAIAQ,EAAAR,UAAA,EAGAQ,EAAAO,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,mCAEAqH,GAAAU,EAAAR,EACA,EAAA3J,MAEA,GAAAA,KAAAoK,WAAA,CACA,YAAApK,KAAAzD,QACAmN,GAAA,GAEA,IAAAW,EAAA,CACAnE,QAAAlG,KAAApC,GACA0B,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAzD,MACA2M,gBAAAlJ,KAAAkJ,gBACAQ,WAAAA,GAEAS,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kCACAqH,GAAAU,EAAAE,EACA,CAEA,OAAAZ,CACA,EAEAP,gBAAA,WACA,GAAA,YAAAlJ,KAAAsK,eAAAtK,KAAA0J,WAAA,CACA,YAAA1J,KAAAsK,eACAtK,KAAAsK,aAAA,IAEA,IAAAD,EAAA,CACAnE,QAAAlG,KAAAkG,QACA5G,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAsK,cAGA,OADA/J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,sCACA+H,CAAAE,EACA,CACA,EAEA9B,aAAA,SAAA9G,GAKA,IAAA8I,EAAA,EAEA,GAAA,GAAA9I,EAAAxB,IAAA,WAAA3E,OAAA,CAIA,IAAA6N,EAAAlH,EAAAkF,KAAA1F,EAAAxB,IAAA,WAAA,SAAAoJ,GAAA,OAAA5H,EAAAxB,IAAA,UAAAoJ,EAAA9M,KAAA,QACA,IAAA4M,IACAoB,EAAApB,EAAAuB,KAGA,CACA,OAAAH,CACA,EAEAuB,mBAAA,SAAApG,EAAAzG,GACAN,OAAA,UAAAA,OAAA+G,GAAAxE,KAAA,QAAA,MAAAuH,YAAA,cACA9J,OAAA+G,GAAAuB,QAAA,MAAAE,KAAA,SAAAsB,YAAA,oBACA9J,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAuB,QAAA,MAAAE,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,mBAGA,GAKA,GACAzP,EAAA,0BAAA,GAAA,WC3FA,OAxDAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAA+L,iBACA/L,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAgM,cACA,EAEAD,gBAAA,SAAA9M,GAEA,GAAA,IAAAA,EAAAgB,IAAA,UAAA,IAAAhB,EAAAgB,IAAA,eAAA,CACA,IAAAgM,EAAAhN,EAAAgB,IAAA,WACAhB,EAAAiB,IAAA,cAAA+L,EACA,CACA,EAEAD,cAAA,SAAAtG,EAAAzG,GACA,IAAAiN,EAAAvN,OAAA+G,GACAC,EAAAuG,EAAAvG,MACAwG,EAAAC,WAAAzG,GACAsG,EAAAC,EAAAhL,KAAA,OACAmL,EAAAH,EAAAhL,KAAA,OACAoL,EAAAJ,EAAAhL,KAAA,QAAAgL,EAAAhL,KAAA,QAAA,IAEA,GAAA+K,GAAAE,EAAAF,EAAA,CACA,IAAAxK,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,aAAAI,EAAAJ,IAAA,YAAAsM,uBACA,MACAhM,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,cAGA,GAAAoM,GAAAF,EAAAE,EAAA,CACA5K,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,aAAAI,EAAAJ,IAAA,YAAAuM,uBACA,MACAjM,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,cAGA,IAAAwM,EAAA9G,EAAAxK,MAAA,KACAsR,OAAA,IAAAA,EAAA,GAAAA,EAAA,GAAAnR,OAAA,EACA,IAAAoR,EAAAJ,EAAAnR,MAAA,KACAuR,OAAA,IAAAA,EAAA,GAAAA,EAAA,GAAApR,OAAA,EACA,IAAAqR,EAAAC,KAAAC,IAAA,GAAAH,GAEA,GAAAJ,GAAA3G,IAAA8G,EAAAC,GACA,IAAApB,UAAAqB,EAAAR,GAAAW,WAAAxB,UAAAqB,EAAAP,WAAAE,IAAAQ,YAAA,CACArL,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,cAAAI,EAAAJ,IAAA,YAAA8M,uBAAAT,EACA,MACA/L,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,cAEA,GAKA,GACAlH,EAAA,0BAAA,GAAA,WC1DA,IAAA6M,EAAArF,QAAAC,QAAA,UAwBA,OAtBAuE,WAAArL,OAAAoF,OAAA,CACAkO,eAAA,GAEAlN,WAAA,WACAE,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAiN,eACA,EAEAA,eAAA,SAAAhO,GACA,GAAAA,EAAAgB,IAAA,gBAAA,CACAD,KAAAgN,eAAA/N,EACA,IAAA2D,EAAA3D,EAAAgB,IAAA,gBACAD,KAAAM,SAAAC,QAAAC,QAAA,SAAAoC,GAAA,oBAAA5C,KAAAY,YACA,CACA,EAEAA,YAAA,SAAAsM,GACAlN,KAAAgN,eAAA9M,IAAA,QAAAgN,EAAAjN,IAAA,UAEAD,KAAAgN,eAAAjM,QAAA,WACA,GAIA,GACAhI,EAAA,2BAAA,GAAA,WC1BA,IAAA6M,EAAArF,QAAAC,QAAA,UACAsF,EAAA,mBA+EA,OA7EAf,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAmN,iBACAnN,KAAAM,SAAAsF,EAAA,cAAA5F,KAAAoN,aACA,EAEAD,gBAAA,SAAAE,GACAA,EAAApN,IAAA,kBAEAD,KAAAM,SAAAC,QAAAC,QAAA,QAAA,SAAA,SAAA8M,GACAtN,KAAAuN,yBAAAF,EACA,EACA,EAEAE,yBAAA,SAAAF,GAEA,IAAAH,EAAA3M,QAAAC,QAAA,QAAA6M,EAAApN,IAAA,WAAAmC,QAAA,iBAAAiL,EAAApN,IAAA,uBAGA,IAAAiN,IAEAA,EAAAhN,IAAA,eAAAmN,EAAApN,IAAA,OACAD,KAAAM,SAAAC,QAAAC,QAAA,SAAA0M,EAAAjN,IAAA,OAAA,oBAAAD,KAAAY,aACAZ,KAAAM,SAAAC,QAAAC,QAAA,SAAA6M,EAAApN,IAAA,OAAA,oBAAAD,KAAAY,aACA,EAEAA,YAAA,SAAA3B,GACA,QAAA,IAAAA,EAAAgB,IAAA,gBACA,IAAAoN,EAAApO,EACAiO,EAAA3M,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAmC,QAAA,iBAAAiL,EAAApN,IAAA,uBAEAiN,EAAAjO,EACAoO,EAAAzH,EAAAxD,QAAA,YAAA8K,EAAAjN,IAAA,iBAEAiN,EAAAjN,IAAA,MAAA,IACAuN,EAAAH,EAAApN,IAAA,MAEA,GAAA,IAAAoN,EAAApN,IAAA,UAAAoN,EAAApN,IAAA,UAAAiN,EAAAjN,IAAA,SACAM,QAAAC,QAAA,UAAA4B,QAAA,eAAAoL,EAAA1H,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,GACAnN,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,EAAA1H,EAAAzF,EAAAJ,IAAA,YAAAwN,qBACA,CACA,EAEAL,aAAA,SAAA1H,EAAAzG,EAAAoH,GAEA,IAAAiE,EAAA3L,OAAA+G,GAAAC,MACA,GAAA1G,EAAAgB,IAAA,iBACA,IAAAoN,EAAApO,EACAuO,EAAAvO,EAAAgB,IAAA,MAEAyN,EADAnN,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAmC,QAAA,iBAAAiL,EAAApN,IAAA,kBACAA,IAAA,SACA0N,EAAArD,OACA,GAAArL,EAAAgB,IAAA,gBAEAuN,GADAH,EAAA9M,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,kBACAA,IAAA,MAEAyN,EADAC,EAAAN,EAAApN,IAAA,SAIA,QAAA,IAAAoN,EACA,GAAA,IAAAM,EACApN,QAAAC,QAAA,UAAA4B,QAAA,eAAAoL,EAAA1H,QACA,GAAAwE,GAAAoD,EACAnN,QAAAC,QAAA,UAAA4B,QAAA,eAAAoL,EAAA1H,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,GACAnN,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,EAAA1H,EAAAzF,EAAAJ,IAAA,YAAAwN,qBACA,CAEA,GAIA,GACA1U,EAAA,+BAAA,GAAA,WC9DA,OApBAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,WAAAsB,MAAA,eAAA9B,KAAA4N,YACA,EAEAA,YAAA,SAAA3O,EAAA1C,GACA0C,EAAAgB,IAAA,eACAhB,EAAAiB,IAAA,QAAA3D,GACA0C,EAAAiB,IAAA,aAAA,GAKA+B,EAAAuH,QAAAjN,IACA0C,EAAA8B,QAAA,eAAA9B,GAGA,GAIA,GACAlG,EAAA,2BAAA,CAAA,4BAAA,SAAA8U,GCuEA,OA7FA9I,WAAArL,OAAAoF,OAAA,CACAgP,MAAA,CAAA,EAEAhO,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAA+N,iBACA,EAEAA,iBAAA,SAAAtM,GACA,QAAA,IAAAzB,KAAA8N,MAAArM,EAAAxB,IAAA,OACA,OAAA,EAGAD,KAAAM,SAAAC,QAAAC,QAAA,SAAAiB,EAAAxB,IAAA,OAAA,cAAAD,KAAAgO,MAAAhO,MAIAyB,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAiB,aAAAQ,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAiO,WAAAxM,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,kBAAAD,KAAAiO,WAAAxM,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAkO,YAAAzM,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,iBAAAD,KAAAmO,aAAA1M,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,kBAAAD,KAAAoO,gBAAA3M,GAEAA,EAAAnB,SAAAC,QAAAC,QAAA,UAAA,YAAAR,KAAAmO,aAAA1M,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAkO,YAAAzM,GAEAzB,KAAA8N,MAAArM,EAAAxB,IAAA,QAAA,CACA,EAEA+N,MAAA,SAAAtQ,EAAA+D,GACA,IAAApB,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAgC,EAAAK,KAAAjC,EAAAJ,IAAA,gBAAA,GACAM,QAAAC,QAAA,UAAA4B,QAAA,0BAAA1I,OAAA6I,KAAAlC,EAAAJ,IAAA,iBAEAM,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAmC,QAAA,SAAA/B,EACA,EAEAY,aAAA,WACAjB,KAAAC,IAAA,cAEAD,KAAAE,IAAA,YAAA,GACAK,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAAc,QAAA,kBAAAf,MACA,EAEAmO,aAAA,SAAA1M,QAEA,IAAAA,GAAAA,EAAAxB,IAAA,WAAAD,KAAAC,IAAA,YAEAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,YACA,EAEAmN,YAAA,SAAAzM,GAIA,QAAA,IAAAA,GAAAA,EAAAxB,IAAA,WAAAD,KAAAC,IAAA,UACA,OAAA,EAGA,IAAAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAApC,KAAAC,IAAA,WACA,GAAAgC,EAAAK,KAAAjC,EAAAJ,IAAA,kBACAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,YAEA,EAEAqN,gBAAA,WAEApO,KAAAE,IAAA,WAAAF,KAAAC,IAAA,UACAD,KAAAE,IAAA,QAAAF,KAAAC,IAAA,qBACAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,WACA,EAEAkN,WAAA,SAAAI,QACA,IAAAA,EAAA3J,aACA,IAAA2J,EAAA3J,OAAA4J,OACArM,EAAAK,KAAA+L,EAAA3J,OAAA4J,OAAA,QACA,IAAAD,EAAA3J,OAAA4J,MAAAC,gBAAA,IAAAF,EAAA3J,OAAA4J,MAAAE,gBAKA,IAAAxO,KAAAC,IAAA,aACAD,KAAAE,IAAA,QAAAF,KAAAC,IAAA,aAEAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,YACA,GAKA,GACAhI,EAAA,0BAAA,GAAA,WC5DA,OAnCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAyO,YACA,EAEAA,YAAA,SAAAJ,EAAAK,EAAAC,EAAAC,GAEA,QAAA,IAAAP,EAAAQ,MAAA,CAGA,QAAA,IAAAR,EAAAQ,MAAA1J,KAAA,CACA,IAAA2J,EAAArH,SAAAsH,cAAA,QACA9M,EAAAC,KAAAmM,EAAAQ,MAAA1J,KAAA,SAAA6J,EAAApS,GACA,IAAAqS,EAAAxH,SAAAyH,eAAAF,GACAF,EAAAK,YAAAF,GACAH,EAAAK,YACA1H,SAAAsH,cAAA,MAEA,GACApQ,OAAA,iBAAA8K,KAAAqF,EACA,CAGA,QAAA,IAAAT,EAAAQ,MAAAO,QAAA,CAEAA,QAAAC,IAAA,OADA,GACA,iBACApN,EAAAC,KAAAmM,EAAAQ,MAAAO,QAAA,SAAAJ,EAAApS,GACAwS,QAAAC,IAAAL,EACA,GACAI,QAAAC,IAAA,OALA,GAKA,oBACA,CAvBA,CAwBA,GAKA,GAEAtW,EAAA,4BAAA,GAAA,WCtCAwH,QAAAC,QAAA,UAgCA,OA/BAuE,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,SAAAb,GACAsB,QAAAC,QAAA,QAAAsB,MAAA,aAAA9B,KAAAsP,cACA,EAEAA,cAAA,SAAAV,GACA,IAAAvO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAwM,GACAlK,GAAA,EAoBA,OAlBArE,IAIA,IAAAA,EAAAJ,IAAA,UAAA3E,QACA2G,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA4N,IACA7K,EAAAA,GAAA,CAAA,GACA6K,EAAAtP,IAAA,OAAAsP,EAAAtP,IAAA,MACA,GAGAgC,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA6N,GACA,UAAAA,EAAAvP,IAAA,SAAAuP,EAAAvP,IAAA,UAAA3E,OAAA,KACAoJ,EAAAA,GAAA,CAAA,GACA8K,EAAAvP,IAAA,OAAAuP,EAAAvP,IAAA,UAEA,IAEAyE,CACA,GAIA,GACA3L,EAAA,+BAAA,GAAA,WC6FA,OA/HAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAoI,kBACApI,KAAAM,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAoI,kBACApI,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAyP,eAEAzP,KAAAM,SAAAC,QAAAC,QAAA,UAAA,oBAAAR,KAAAqI,mBACArI,KAAAM,SAAAC,QAAAC,QAAA,UAAA,iBAAAR,KAAAqI,kBACA,EAEAoH,cAAA,SAAA/J,EAAAzG,EAAAoH,GACA,GAAA,GAAApH,EAAAgB,IAAA,YACA,OAAA,EAGAhB,EAAAgB,IAAA,UACAD,KAAAoI,iBAAA1C,EAAAzG,EAEA,EAEAmJ,iBAAA,SAAA1C,EAAAzG,GACA,GAAA,GAAAA,EAAAgB,IAAA,cAAAhB,EAAAgB,IAAA,WACA,OAAA,EAGA,IAAAqK,EAAA3L,OAAA+G,GAAAC,MACA+J,EAAAnP,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAmC,QAAA,oBAAAsD,EAAAzG,GACA0Q,GAAA,EAEAC,EAAA5P,KAAA6P,QAAA5Q,GAkBA,GAdA2Q,GAAAtF,IAAAsF,IAGA,EAAA3Q,EAAAgB,IAAA,UAAA3E,SAAA2D,EAAAgB,IAAA,YAEA0P,GAAA,GAIAvK,OAAAkF,GAAAwF,SAEAH,GAAA,QAGA,IAAAD,EACA,IAAAK,EAAAL,OAEAK,EAAAJ,EAGA3P,KAAAgQ,WAAAD,EAAA9Q,EACA,EAEA4Q,QAAA,SAAA5Q,GACA,IAAAgR,EAAAhR,EAAAgB,IAAA,QAEA,QAAA,IAAAgQ,EAAA,CAEA,OAAAA,GACA,IAAA,GACA,MACA,IAAA,WACAA,EAAAC,OAAAC,eACA,MACA,IAAA,SACAF,EAAAhR,EAAAgB,IAAA,eAKA,QAGAgQ,GADAA,GADAA,EAAAA,EAAAxU,QAAA,KAAA,MACAA,QAAA,KAAA,MACAA,QAAA,MAAA,KAEA,OAAAwU,CAnBA,CAoBA,EAEA5H,kBAAA,SAAApJ,GAEA,GAAA,GAAAA,EAAAgB,IAAA,cAAAhB,EAAAgB,IAAA,YAAAhB,EAAAgB,IAAA,SACA,OAAA,EAMA,GAAAhB,EAAAgB,IAAA,UAAAA,IAAA,kBACA,OAAA,EAGAqK,aAAArL,EAAAgB,IAAA,SAEA,IAAA0P,GAAA,EAEAvK,OAAAkF,cAAAwF,SACAH,GAAA,GAGA,IAAAD,EAAAnP,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAmC,QAAA,qBAAAnD,GACA,QAAA,IAAAyQ,EACA,IAAAK,EAAAL,OAEAK,EAAAJ,EAGA3P,KAAAgQ,WAAAD,EAAA9Q,EAEA,EAEA+Q,WAAA,SAAAD,EAAA9Q,GACA,GAAA8Q,EAQAxP,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,sBARA,CAEA,IAAAI,EAAAE,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAmC,QAAA,iBAEA,IAAA/B,GACAE,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,iBAAAI,EAAAJ,IAAA,YAAAmQ,sBAEA,CAGA,GAIA,GAEArX,EAAA,0BAAA,GAAA,WCjEA,OAjEAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAqQ,cAEA9P,QAAAC,QAAA,UAAAsB,MAAA,0BAAA9B,KAAAsQ,uBACA,EAEAD,aAAA,SAAAhC,EAAAK,EAAAC,EAAAC,GAGA,GAAA3M,EAAAK,KAAA+L,EAAA3J,OAAA4J,OAAA,QACA,IAAAD,EAAA3J,OAAA4J,MAAAC,gBAAA,IAAAF,EAAA3J,OAAA4J,MAAAE,SAAA,CAEA3E,WAAA0G,UAAAlC,EAAA3J,OAAA4J,MAAAC,UACA1E,WAAA2E,SAAAH,EAAA3J,OAAA4J,MAAAE,SAEA,IAAAnO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAwM,GACArO,QAAAC,QAAA,QAAAoO,GAAAxM,QAAA,SAAA/B,EACA,CAoBA,GAjBA4B,EAAAK,KAAA+L,EAAA3J,OAAA8L,QAAA,GACAvO,EAAAC,KAAAmM,EAAA3J,OAAA8L,OAAA,SAAAnG,EAAAnE,GACA,iBAAA,EACA3F,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAmE,EAAAoG,KAAApG,EAAA2E,SAEAzO,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAA,iBAAAmE,EAEA,GAGApI,EAAAK,KAAA+L,EAAA3J,OAAAS,MAAA,GACAlD,EAAAC,KAAAmM,EAAA3J,OAAAS,KAAA,SAAAX,EAAAsB,GACAvF,QAAAC,QAAA,QAAAoO,GAAAxM,QAAA,eAAA0D,GACAvF,QAAAC,QAAA,QAAAoO,GAAAxM,QAAA,YAAA0D,EAAAtB,EACA,QAGA,IAAA6J,EAAA3J,OAAAgM,WACA,IAAArC,EAAA3J,OAAAgM,KAAA1B,QAAA,CACA,IAAA2B,EAAA,yEACAvB,QAAAC,IAAA,uCAAAsB,GACAvB,QAAAC,IAAAhB,EAAA3J,OAAAgM,KAAA1B,SACAI,QAAAC,IAAA,8BAAAsB,EACA,CASAhS,OAAA,YAAAiQ,EAAA,6BAAAgC,MACA,EAEAN,uBAAA,SAAA5L,GACA,MAAA9B,EAAArC,QAAAC,QAAA,UAAA4B,QAAA,wBAAAsC,GACA,OAAA+C,SAAAoJ,eAAA,YAAAjO,IACA6E,SAAAoJ,eAAA,YAAAjO,GAAAkO,OAEA,GAKA,GAEA/X,EAAA,6BAAA,GAAA,WC/CA,OArBAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAA+Q,eACA,EAEAA,eAAA,SAAA1C,QAEA,IAAAA,EAAAhE,KAAA2G,WAAA,IAAA3C,EAAAhE,KAAA2G,KAAAC,UAAA,IAAA5C,EAAAhE,KAAA2G,KAAAC,WACAC,OAAAC,SAAA9C,EAAAhE,KAAA2G,KAAAC,UAGA,GAAAhP,EAAAK,KAAA+L,EAAA3J,cAAA,IAAA2J,EAAAhE,KAAA+G,cAEA,IAAA/C,EAAAhE,KAAA+G,QAAAH,UAAA,IAAA5C,EAAAhE,KAAA+G,QAAAH,WACAC,OAAAC,SAAA9C,EAAAhE,KAAA+G,QAAAH,SAGA,GAKA,GACAlY,EAAA,4BAAA,GAAA,WCcA,OArCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAqR,aACA,EAEAA,aAAA,SAAAhD,GACA,GAAA,GAAApM,EAAAK,KAAA+L,EAAA3J,cAAA,IAAA2J,EAAAhE,KAAA+G,cACA,IAAA/C,EAAAhE,KAAA+G,QAAAE,iBAAA,IAAAjD,EAAAhE,KAAA+G,QAAAE,gBAAA,CACA,IAAAC,EAAAlD,EAAAhE,KAAAkH,QACAD,EAAA3S,OAAA,YAAA4S,EAAA,0BACA,MAAAC,EAAAnD,EAAAhE,KAAA+G,QAAAE,gBAAA7V,QAAA,gBAAA,IACA6V,EAAApQ,KAAA,WAAA,KACAoQ,EAAApQ,KAAA,YAAA,aACAoQ,EAAApQ,KAAA,aAAAsQ,GAEAF,EAAA7H,KAAA4E,EAAAhE,KAAA+G,QAAAE,iBAAAV,OACAU,EAAAR,QAEA,IAAAW,EAAAH,EAAAI,SAAAC,IACAC,EAAAN,EAAAI,SAAAC,IAAAL,EAAAO,cACAC,EAAAnT,OAAAuS,QAAAa,YAAApT,OAAAuS,QAAAc,SACAC,EAAAtT,OAAAuS,QAAAa,YAEAD,EAAAF,GAAAK,EAAAR,GAIA9S,OAAA,cAAAuT,QAAA,CACAH,UAAAT,EAAAI,SAAAC,IAAA,IACA,IAEA,CAEA,GAKA,GAEA5Y,EAAA,0BAAA,GAAA,WCwHA,OAhKAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAEAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAA,SAAAvB,GACA,QAAAA,EAAAgB,IAAA,eAAAD,KAAAgJ,SAAA/J,EACA,EAAAe,MAEAO,QAAAC,QAAA,cAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,MACAO,QAAAC,QAAA,mBAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GAOA,GANAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,wBAAAF,KAAAmS,uBAKA,GAAAlT,EAAAgB,IAAA,WAAA3E,OAAA,CAEA,IAAAgO,EAAArK,EAAAgB,IAAA,SAKA,GAAA,mBAAAhB,EAAAgB,IAAA,QAIA,IAAAkJ,EAAAlH,EAAAmH,OAAAnK,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,GAEA5M,EADA4M,EAAAlH,EAAA7G,IAAA+N,EAAA,SAAAE,GAAA,OAAAA,EAAA9M,KAAA,QAEA,GAAA,cAAA0C,EAAAgB,IAAA,QAAA,CAYA,QAJA,KAJAkJ,EAAAlH,EAAAkF,KAAAlI,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,MAKAA,EAAAlH,EAAA6B,MAAA7E,EAAAgB,IAAA,kBAGA,IAAAkJ,QACA,IAAAA,EAAA5M,MACAA,EAAA4M,EAAA5M,WACA,QAAA,IAAA4M,EACA5M,EAAA4M,EAAAS,KAEA,MAMA,IAAAN,GAAA,KAAAA,GACAC,MAAAC,QAAAF,GACArK,EAAAiB,IAAA,QAAAoJ,QACA,IAAAH,GACAlK,EAAAiB,IAAA,QAAA3D,EAEA,CACA,EAEA0M,cAAA,WACA,IAAAQ,EAAA,GA4CA,OA1CAxH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,GAKA,GAAA1H,EAAAuH,QAAAxJ,KAAAzD,QAGA,GAAA,oBAAAyD,KAAAD,MAAA,EAAAC,KAAAzD,MAAAjB,SACA,GAAA2G,EAAApF,QAAAmD,KAAAzD,MAAA,GAAApB,MAAA,KAAAwO,EAAApN,OACA,IAAA4M,GAAA,OACA,IAAA,GAAAlH,EAAApF,QAAAmD,KAAAzD,MAAAoN,EAAApN,OACA4M,GAAA,OAEA,GAAAlH,EAAAuH,QAAAxJ,KAAAzD,QAAAoN,EAAApN,OAAAyD,KAAAzD,MAEA,GAAA,GAAAoN,EAAAR,UAAAnJ,KAAAN,YACA,IAAAM,KAAAzD,MACA4M,GAAA,OAEAA,GAAA,OALA,IAAAA,GAAA,OAYA,IAAAQ,EAAA/J,UACA+J,EAAA/J,SAAA,GAGA+J,EAAAR,SAAAA,EACAQ,EAAAzD,QAAAlG,KAAApC,GACA+L,EAAArK,QAAAU,KAAAV,QACAqK,EAAAW,aAAAtK,KAAAzD,MACAoN,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAAJ,EAAAC,OAAAD,EAAAC,MAEAD,EAAAO,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,oCACAqH,GAAAU,EAAAR,EACA,EAAA3J,MAEAyJ,CACA,EAEA0I,sBAAA,WACA,IAAAC,EAAA,GAEA,mBAAApS,KAAAD,OAIAqS,GAHAA,GAAA,aAGA,WADApS,KAAAqS,YAAA,GACA,KAGA,OAAAD,CACA,EAEA7J,aAAA,SAAA9G,GACA,IAAA8I,EAAA,EACAnK,EAAAqB,EAAAxB,IAAA,WACA,GAAA,GAAAG,EAAA9E,OAIA,GAAA,mBAAAmG,EAAAxB,IAAA,QAIAgC,EAAAC,KAAAT,EAAAxB,IAAA,SAAA,SAAA0F,GACA,IAAA6E,EAAAvI,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAAA,EAAA9M,OAAAoJ,CAAA,GACA4E,GAAAE,OAAAD,EAAAE,KACA,OACA,CAIA,IAAAvB,EAAAlH,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAA5H,EAAAxB,IAAA,UAAAoJ,EAAA9M,KAAA,QAIA,IAAA4M,IACAA,EAAA1H,EAAAxB,IAAA,WAAA,IAEAsK,EAAApB,EAAAuB,IACA,CAEA,OAAAH,CACA,GAKA,GAEAxR,EAAA,iCAAA,GAAA,WCjIA,OAlCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAqR,aACA,EAEAA,aAAA,SAAAhD,GACA,IAAAhO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAiM,EAAAhE,KAAAkH,SAIA,GAAA,GAAAtP,EAAAK,KAAA+L,EAAA3J,QACA,OAAA,EAGA,GAAA2J,EAAAhE,KAAAiI,SAAAC,iBAEAlS,EAAAJ,IAAA,UAAAuS,MAAAnS,EAAAJ,IAAA,iBACA,GAAAoO,EAAAhE,KAAAiI,SAAAG,eACAlS,QAAAC,QAAA,WAAAO,QAAA,UAIA,GAAAsN,EAAAhE,KAAAiI,SAAAG,eAIApS,EAAAU,QAAA,OAIA,GAKA,GACAhI,EAAA,2BAAA,GAAA,WCmCA,OAvEAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,WAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,WAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GACAA,EAAAiB,IAAA,wBAAAF,KAAA0S,uBACAzT,EAAAiB,IAAA,gBAAAF,KAAA2S,eACA1T,EAAAiB,IAAA,gBAAAF,KAAAiJ,cACA,EAEA0J,cAAA,WACA,OAAA3S,KAAA4S,cACA,IAAA,OAEA,OADArS,QAAAC,QAAA,OAAA4B,QAAA,eAAA,yBACA+H,CAAAnK,MAEA,IAAA,SAEA,OADAO,QAAAC,QAAA,OAAA4B,QAAA,eAAA,wBACA+H,CAAAnK,MAGA,IAAA,WAEA,OADAO,QAAAC,QAAA,OAAA4B,QAAA,eAAA,4BACA+H,CAAAnK,MAEA,QAEA,OADAO,QAAAC,QAAA,OAAA4B,QAAA,eAAA,0BACA+H,CAAAnK,MAEA,EAEA0S,sBAAA,WACA,GAAA,GAAA1S,KAAA6S,qBAEA,OADAtS,QAAAC,QAAA,OAAA4B,QAAA,eAAA,4BACA+H,CAAAnK,KAEA,EAEAiJ,cAAA,WACA,IAAAmC,EAAApL,KACAyJ,EAAA,GAiBA,OAhBAxH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,GACA,GAAA,GAAAA,EAAAR,SACA,IAAAA,GAAA,OAEAA,GAAA,EAGAQ,EAAAR,SAAAA,EACAQ,EAAAzD,QAAAkF,EAAAxN,GACA+L,EAAArK,QAAA8L,EAAA9L,QACAqK,EAAAW,aAAAc,EAAA7O,MAEA,IAAA4N,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,oBAAAgJ,EAAAwH,aAAA,WACAnJ,GAAAU,EAAAR,EACA,GAEAF,CACA,EAEAlB,aAAA,SAAA9G,GAKA,OAHAA,EAAAxB,IAAA,iBACAwB,EAAAxB,IAAA,QAGA,GAIA,GAEAlH,EAAA,yBAAA,GAAA,WCoCA,OA9GAgM,WAAArL,OAAAoF,OAAA,CAEAgU,WAAA,CAAA,EAEAC,cAAA,CAAA,EAEAjT,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAgJ,UACAhJ,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAAgT,iBACA,EAEAhK,SAAA,SAAA8J,GACA9S,KAAA8S,WAAAA,EAEA,IAAAlE,EAAAkE,EAAA7S,IAAA,UACAD,KAAAM,SAAAC,QAAAC,QAAA,QAAAoO,GAAA,SAAA5O,KAAAiT,cAEAjT,KAAAM,SAAAC,QAAAC,QAAA,WAAA,oBAAAR,KAAAkT,iBACAlT,KAAAM,SAAAC,QAAAC,QAAA,YAAA,oBAAAR,KAAAmT,iBACA,EAEAH,iBAAA,SAAAI,GACApT,KAAAqT,aAAAD,EAAAnT,IAAA,gBACA,EAEAgT,aAAA,SAAA5S,GAEA,IAAAiT,EAAAjT,EAAAJ,IAAA,UAAA0B,OAEA4R,EAAA,CAAA,EACAC,EAAA,CAAA,EAEA,IAAA,IAAAvU,KAAAqU,EAAA,CAEA,IAAA9D,EAAA8D,EAAArU,GACAiH,EAAAsJ,EAAAvP,IAAA,MAGA,GAAA,WAAAuP,EAAAvP,IAAA,QACAsT,EAAArN,GAAAsJ,OACA,GAAA,YAAAA,EAAAvP,IAAA,QAAA,CAEAuT,EADAC,EAAAjE,EAAAvP,IAAA,uBACAuP,CACA,CACA,CAEA,IAAA,IAAAiE,KAAAF,EAAA,CAEA,IAAAG,EAAAH,EAAAE,GAEAE,EAAAlJ,OAAAiJ,EAAAzT,IAAA,kBAEAuT,EAAAC,GAEAE,GAAAH,EAAAC,GAAAxT,IAAA,SAEA,GAAAyT,EAAAzT,IAAA,0BAEA0T,GAAAD,EAAAzT,IAAA,UAIAD,KAAA+S,cAAAU,GAAAE,CACA,CAEA3T,KAAA4T,aACA,EAEAV,gBAAA,SAAAjU,GACA,IAAAwU,EAAAxU,EAAAgB,IAAA,MACA0T,EAAAlJ,OAAAxL,EAAAgB,IAAA,kBAEA4T,EADApJ,OAAAxL,EAAAgB,IAAA,UACA0T,EACA3T,KAAA+S,cAAAU,GAAAI,EAEA7T,KAAA4T,aACA,EAEAT,iBAAA,SAAAlU,GACA,IAAAwU,EAAAxU,EAAAgB,IAAA,sBACA6T,EAAAvT,QAAAC,QAAA,UAAA4B,QAAA,YAAAqR,GACAE,EAAAlJ,OAAAqJ,EAAA7T,IAAA,kBAIA4T,EAFApJ,OAAAxL,EAAAgB,IAAA,UAEA0T,EAEA3T,KAAA+S,cAAAU,GAAAI,EAEA7T,KAAA4T,aACA,EAEAA,YAAA,WAEA,IAAAC,EAAA,EAEA,IAAA,IAAAH,KAAA1T,KAAA+S,cACAc,GAAApJ,OAAAzK,KAAA+S,cAAAW,IAGAG,GAAA7T,KAAAqT,eAEAQ,GAAApJ,OAAAzK,KAAAqT,eAGArT,KAAA8S,WAAA5S,IAAA,QAAA2T,EAAA/G,QAAA,IACA9M,KAAA8S,WAAA/R,QAAA,WACA,GAIA,GACAhI,EAAA,4BAAA,GAAA,WC/FA,OAjBAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAA+T,iBACA,EAEAA,iBAAA,SAAA9U,GACA,IAAAwU,EAAAxU,EAAAgB,IAAA,sBACAyT,EAAAnT,QAAAC,QAAA,UAAA4B,QAAA,YAAAqR,GAEAC,GACAA,EAAAxT,IAAA,uBAAA,EAEA,GAKA,GCdAnH,EAAA,mBAAA,GAAA,WAkCA,OAjCA6F,SAAAC,MAAAC,OAAA,CACAgB,WAAA,WAEAE,KAAAE,IAAA,SAAAF,KAAAG,WAAAC,QAAAC,UAAAJ,IAAA,OAEAD,KAAAE,IAAA,SAAA,CAAA,GAEAK,QAAAC,QAAA,QAAAO,QAAA,aAAAf,MAEAA,KAAA4B,GAAA,eAAA5B,KAAAY,YAAAZ,KACA,EAUAwF,YAAA,SAAA/D,GACAlB,QAAAC,QAAA,QAAAO,QAAA,eAAAf,KAAAyB,EACA,EAEAuS,WAAA,SAAAC,GACA1T,QAAAC,QAAA,QAAAO,QAAA,cAAAf,KAAAiU,EACA,EAEArT,YAAA,WACAL,QAAAC,QAAA,QAAAO,QAAA,eAAAf,KACA,GAIA,GAEAjH,EAAA,wBAAA,CAAA,oBAAA,SAAAmb,GCpBA,OArBAtV,SAAAI,WAAAF,OAAA,CACAG,MAAAiV,EACAxS,WAAA,QAEA5B,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EACA6B,EAAAC,KAAAP,EAAA,SAAA1C,QACA,IAAAA,EAAAkV,MACA,KAAAlV,EAAAkV,IAAAC,WAAAtE,SAAA7Q,EAAAkV,IAAA,GACAlV,EAAAkV,IAAA7I,SAAArM,EAAAkV,KACA,GAIA5T,QAAAC,QAAA,QAAAJ,EAAAC,UAAAJ,IAAA,OAAA6B,MAAA,WAAA9B,KAAAqU,QAAArU,KACA,EAEAqU,QAAA,SAAA/P,GACA,OAAAtE,KAAAuE,UAAA,CAAAlK,KAAAiK,GACA,GAGA,GCpBAvL,EAAA,2BAAA,CAAA,yBAAA,SAAAub,GAigBA,OAhgBAvP,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAuU,MAAA,CAAA,EACAvU,KAAAwU,cAAA,CAAA,EAEAxU,KAAAM,SAAAC,QAAAC,QAAA,QAAA,SAAAR,KAAAyU,eAGAzU,KAAAM,SAAAC,QAAAC,QAAA,UAAA,mBAAAR,KAAA0U,YAMA1U,KAAAM,SAAAC,QAAAC,QAAA,QAAA,eAAAR,KAAAwF,aAGAxF,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAAgU,YAMA,IAAA5I,EAAApL,KACAiC,EAAAC,KAAA2H,WAAA8K,eAAAC,aAAA,SAAAC,GACAzJ,EAAA9K,SAAAC,QAAAC,QAAA,UAAAqU,GAAA,aAAAzJ,EAAA0J,iBACA,GAGA9U,KAAAM,SAAAC,QAAAC,QAAA,QAAA,eAAAR,KAAA+U,qBAGA/U,KAAAgV,KAAA,CAAA,CACA,EASAN,WAAA,SAAA7S,QACA,IAAAA,EAAAzB,QAAA,WACAJ,KAAAyU,cAAA5S,EAAAzB,QAAAC,UAEA,EASAoU,cAAA,SAAApU,GACA,IAAA4U,EAAA,IAAAX,EAAAjU,EAAAJ,IAAA,YAAA2U,aAAA,CAAAvU,UAAAA,IACAL,KAAAuU,MAAAlU,EAAAJ,IAAA,OAAAgV,EACA,IAAA7J,EAAApL,KAEAiC,EAAAC,KAAA+S,EAAAtT,OAAA,SAAAuT,GAQA9J,EAAA4J,KAAAE,EAAAjV,IAAA,UAAA,EAEAmL,EAAA+J,UAAAD,EACA,EACA,EAcAC,UAAA,SAAAD,GAEA,IAAA9J,EAAApL,KAEAoV,EAAAF,EAAAjV,IAAA,MAEAoV,EAAAD,EASA5E,GAPA0E,EAAAjV,IAAA,QAOAmV,EAAAE,MAAA,IAAAC,OAAA,oBACA/E,IAQAA,EAAAA,EAAApV,IAAA,SAAAoU,GAEA,IAAAlL,EAAAkL,EAAA/T,QAAA,SAAA,IAAAA,QAAA,IAAA,IAAAA,QAAA,UAAA,IAKA,GAFAgG,WAAAlB,QAAAC,QAAA,QAAA0U,EAAAjV,IAAA,WAAAmC,QAAA,iBAAAkC,GAEA,oBAAA7C,WAAA,CAEAA,WAAAvB,IAAA,SAAA,GAGAuB,WAAAG,GAAA,eAAAsT,EAAA1P,YAAA0P,GAEA,IAAAvM,EAAAyC,EAAA7C,aAAA9G,YAEA2J,EAAAoK,iBAAAN,EAAA5Q,EAAAqE,GAEA0M,EAAAjK,EAAAqK,WAAA,QAAAnR,EAAAqE,EAAA0M,EAXA,CAYA,IAIA,IAAAd,EAAAa,EAAAE,MAAA,IAAAC,OAAA,kBACAhB,IAQAA,EAAAA,EAAAnZ,IAAA,SAAAsP,GAEA,IAAArQ,EAAAqQ,EAAAjP,QAAA,IAAA,IAAAA,QAAA,SAAA,IAEAwY,EAAAiB,EAAA/U,WAAAoE,UAAA,CAAAlK,KAAAA,IAEA,QAAA,IAAA4Z,EAAA,CAGAA,EAAArS,GAAA,eAAAsT,EAAAlB,WAAAkB,GAEA,IAAAvM,EAAAsL,EAAAhU,IAAA,SAEAoV,EAAAjK,EAAAqK,WAAA,OAAApb,EAAAsO,EAAA0M,EAPA,CAQA,IAOAA,GAFAA,EAAAA,EAAA5Z,QAAA,0BAAA,IAEAA,QAAA,YAAA,IAEA,IACAuE,KAAA6O,MAAA,uBAAAwG,EAAA,OAAArV,KAAA0V,qBAAAL,GAAA,YACA,MAAAM,EAAA,IAAAC,KACAV,EAAAhV,IAAA,QAAAuK,OAAAkL,EAAAE,KAAA7V,KAAA0V,qBAAAL,KAAAvI,QAAAoI,EAAAjV,IAAA,QACA,CAAA,MAAAvC,GAEA0R,QAAAC,IAAA3R,EACA,CAGA,QAAAwX,EAAAjV,IAAA,UAAAiV,EAAAhV,IAAA,QAAA,IAIA,EAWAsV,iBAAA,SAAAN,EAAA5Q,EAAAqE,GACA,IAAA6H,EAAA0E,EAAAjV,IAAA,UACAuQ,EAAAlM,GAAAqE,EACAuM,EAAAhV,IAAA,SAAAsQ,EACA,EAYAjI,aAAA,SAAA9G,GAKA,IAAAlF,EAAAgE,QAAAC,QAAAiB,EAAAxB,IAAA,SAAAmC,QAAA,gBAAAX,GAGAkH,EAAAlH,EAAAxB,IAAA,cACA,IAAA1D,IACAA,GAAA,IAAAA,KAEAoM,EAAApM,GAIA,IAAAuZ,EAAA,IAAAC,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eACAC,EAAAL,EAAAM,cAAAzN,GACA0N,EAAAP,EAAAQ,cAAA3N,GAaA,OAVApM,OADA,IAAA4Z,GAAAxX,OAAA4X,UAAAJ,GACAE,EAEA,EAIA5U,EAAAxB,IAAA,aACA1D,EAAA,GAGAA,CACA,EAeAkZ,WAAA,SAAA1V,EAAAuE,EAAAqE,EAAAyM,GACAA,EAAAA,GAAAF,UAAAjV,IAAA,MAEAuW,IAAA,IAAAzW,EAAA,IAAAuE,EAAA,IACA,IAAAmS,EAAA,IAAAlB,OAAAiB,IAAA,KAEAE,QAAA,IAAA3W,EAAA,IAAAuE,EAAA,SACA,IAAAqS,EAAA,IAAApB,OAAAmB,QAAA,KAKA,OAFAtB,GADAA,EAAAA,EAAA3Z,QAAAgb,EAAA9N,IACAlN,QAAAkb,EAAAhO,EAGA,EASAiO,eAAA,SAAA1B,GACA,IAAAE,EAAAF,EAAAjV,IAAA,MACAmL,EAAApL,KACAiC,EAAAC,KAAAgT,EAAAjV,IAAA,UAAA,SAAA1D,EAAA+H,GACA8Q,EAAAhK,EAAAqK,WAAA,QAAAnR,EAAA/H,EAAA6Y,EACA,GAGA,IAAAb,EAAAa,EAAAE,MAAA,IAAAC,OAAA,kBAYA,OAXAhB,GACAtS,EAAAC,KAAAqS,EAAA,SAAA7J,GAEA,IAAArQ,EAAAqQ,EAAAjP,QAAA,IAAA,IAAAA,QAAA,SAAA,IACAwY,EAAAiB,EAAA/U,WAAAoE,UAAA,CAAAlK,KAAAA,IACA,QAAA,IAAA4Z,EAAA,CACA,IAAA4C,EAAA,IAAAtB,OAAA7K,EAAA,KACA0K,EAAAA,EAAA3Z,QAAAob,EAAA5C,EAAAhU,IAAA,SAFA,CAGA,GAGAmV,CACA,EAUA5P,YAAA,SAAA0P,EAAAzT,GAEA,IAAA6C,EAAA7C,EAAAxB,IAAA,OACA1D,EAAAyD,KAAAuI,aAAA9G,GAEAzB,KAAAwV,iBAAAN,EAAA5Q,EAAA/H,GACA,IAAA8Y,EAAArV,KAAA4W,eAAA1B,GAIAG,GADAA,EAAAA,EAAA5Z,QAAA,0BAAA,MACAA,QAAA,YAAA,IACA,IACAuE,KAAA6O,MAAA,uBAAAwG,EAAA,OAAArV,KAAA0V,qBAAAL,GAAA,mBACA,MAAAM,EAAA,IAAAC,KACAV,EAAAhV,IAAA,QAAAuK,OAAAkL,EAAAE,KAAA7V,KAAA0V,qBAAAL,KAAAvI,QAAAoI,EAAAjV,IAAA,QACA,CAAA,MAAAvC,GACAsC,KAAA6O,SAAAO,QAAAC,IAAA3R,EACA,CACA,QAAAwX,EAAAjV,IAAA,UAAAiV,EAAAhV,IAAA,QAAA,IAIA,EAEA4U,iBAAA,SAAArT,GAEA,GAAAA,EAAAxB,IAAA,YAAA,iBAAAwB,EAAAxB,IAAA,WAAA,CAEA,IAAAsU,EAAA9S,EAAAxB,IAAA,WAAAqV,MAAA,IAAAC,OAAA,kBACAhB,GACAtS,EAAAC,KAAAqS,EAAA,SAAAuC,GACAA,EAAAA,EAAArb,QAAA,SAAA,IAAAA,QAAA,IAAA,IAAAA,QAAA,KAAA,IACAuE,KAAAwU,cAAAsC,GAAA9W,KAAAwU,cAAAsC,IAAA,GACA9W,KAAAwU,cAAAsC,GAAA3a,KAAAsF,EACA,EAAAzB,KARA,CAUA,EAEA+U,oBAAA,SAAAG,GACA,IAAA9J,EAAApL,UACA,IAAAA,KAAAwU,cAAAU,EAAAjV,IAAA,UACAgC,EAAAC,KAAAlC,KAAAwU,cAAAU,EAAAjV,IAAA,SAAA,SAAAwB,GAEA,IAAAlF,EAAA,GAmBAwa,GAZAxa,EADA,SAAAkF,EAAAxB,IAAA,QACAwB,EAAAxB,IAAA,SAGAwB,EAAAxB,IAAA,YASAqV,MAAA,IAAAC,OAAA,wCACAtT,EAAAC,KAAA6U,EAAA,SAAAC,GAEA,IAAAC,EAAA,IAAAD,EAAAvb,QAAA,mBACA,IAAAA,QAAA,kBAAA,IAAA,IAEAc,EAAAA,EAAAd,QAAAub,EAAAC,EACA,GACA,IAAA1C,EAAAhY,EAAA+Y,MAAA,IAAAC,OAAA,kBACAtT,EAAAC,KAAAqS,EAAA,SAAA7J,GAGA,IAAArQ,EAAAqQ,EAAAjP,QAAA,IAAA,IAAAA,QAAA,SAAA,IAAAA,QAAA,KAAA,IAWAyZ,EAAA9J,EAAAmJ,MAAA9S,EAAAxB,IAAA,WAAAsE,UAAA,CAAAlK,KAAAA,IACAwc,EAAA,IAAAtB,OAAA7K,EAAA,KACA/B,EAAAuM,EAAAjV,IAAA,cAMA,IAAA,IACA0I,EAAAyC,EAAA8L,sBAAAvO,EAAAuM,IAWA3Y,EADA,SAAAkF,EAAAxB,IAAA,QACA1D,EAAAd,QAAAob,EAAA,wBAAAxc,EAAA,KACAsO,EAAA,WAEAA,CAEA,GAEAlH,EAAAvB,IAAA,QAAA3D,GACA6O,EAAA4J,KAAAE,EAAAjV,IAAA,UAEAwB,EAAAV,QAAA,YAEAqK,EAAA4J,KAAAE,EAAAjV,IAAA,UAAA,CACA,EAEA,EAEAoU,QAAA,SAAAha,EAAAuU,GACA,OAAA5O,KAAAuU,MAAA3F,GAAArK,UAAA,CAAAlK,KAAAA,GACA,EAEA2Z,WAAA,SAAAkB,EAAAjB,GACA,IAAAoB,EAAArV,KAAA4W,eAAA1B,GAGAG,GADAA,EAAAA,EAAA5Z,QAAA,IAAA,IAAAA,QAAA,IAAA,KACAA,QAAA,YAAA,IACA,IACAuE,KAAA6O,MAAA,uBAAAwG,EAAA,OAAArV,KAAA0V,qBAAAL,GAAA,kBACA,MAAAM,EAAA,IAAAC,KACAV,EAAAhV,IAAA,QAAAuK,OAAAkL,EAAAE,KAAA7V,KAAA0V,qBAAAL,KAAAvI,QAAAoI,EAAAjV,IAAA,QACA,CAAA,MAAAvC,GACA0R,QAAAC,IAAA3R,EACA,CACA,QAAAwX,EAAAjV,IAAA,UAAAiV,EAAAhV,IAAA,QAAA,IACA,EASAgX,sBAAA,SAAAC,EAAAjC,GAmBA,OAjBA,IAAAa,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eAEAI,cAAAa,EAAAjC,EAAAjV,IAAA,OAgBA,EAEAyV,qBAAA,SAAAN,GACA,IAAAgC,EAAA,GACAC,EAAA,GACAC,EAAA,UACAxB,EAAA,IAAAC,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eAuBA,OApBAd,GADAA,EAAAA,EAAA3Z,QAAA,MAAA,KACAA,QAAA,UAAA,KACAN,MAAA,IAEAoc,QAAA,SAAAC,GAEAF,EAAA9b,KAAAgc,GACAH,GAAAG,GAGA,EAAAH,EAAA/b,SACA8b,GAAAtB,EAAAM,cAAAiB,GACAA,EAAA,IAEAD,GAAAI,EAEA,GAEA,EAAAH,EAAA/b,SACA8b,GAAAtB,EAAAM,cAAAiB,IAEAD,CACA,EAEAvI,MAAA,SAAAG,GACAkC,OAAAuG,qBAAArI,QAAAC,IAAAL,EACA,GAKA,GAEAjW,EAAA,kCAAA,GAAA,WCzcA,OA7DAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAA1B,SAAA8Y,MAAAlX,QAAA,cAAA,OAAAR,KAAA2X,oBACA,EAEAA,oBAAA,SAAAC,EAAAnW,GAkBA,GAZAmW,EAAAC,QAAA,CAAA,EACAD,EAAAC,QAAAC,GAAA,CAAA,EAGAvX,QAAAC,QAAA,WAAAO,QAAA,OAAA6W,EAAAnW,QAGA,IAAAmW,EAAAC,QAAAC,GAAAC,cACAH,EAAA1X,IAAA,UAAA,CAAA0X,EAAAC,QAAAC,GAAAC,oBAIA,IAAAH,EAAAC,QAAAC,GAAAE,WAAA,IAAAJ,EAAAC,QAAAC,GAAAG,SAAA,CAEA,IAAAvR,EAAAkR,EAAAre,OAAAmN,YAEA,IAAAkR,EAAAC,QAAAC,GAAAG,WACAvR,EAAAwR,eAAAN,EAAAC,QAAAC,GAAAG,eAGA,IAAAL,EAAAC,QAAAC,GAAAE,YACA,IAAAJ,EAAAC,QAAAC,GAAAE,KAAAG,WACAzR,EAAAyR,SAAAC,SAAAR,EAAAC,QAAAC,GAAAE,KAAAG,eAGA,IAAAP,EAAAC,QAAAC,GAAAE,KAAAK,gBACA3R,EAAAyR,SAAAG,UAAAV,EAAAC,QAAAC,GAAAE,KAAAK,oBAGA,IAAAT,EAAAC,QAAAC,GAAAE,KAAAO,QACA5Z,OAAA,4CAAAuD,KAAA,WACAlC,KAAAwY,KAAAZ,EAAAC,QAAAC,GAAAE,KAAAO,OAAAvY,KAAAzD,MACA,IAIAqb,EAAA1X,IAAA,SAAAwG,EAEA,CAEAhN,OAAA6I,KAAAqV,EAAAC,QAAAC,IAAAxc,OAAA,IACA8T,QAAAC,IAAA,yDAAA,gCACAD,QAAAC,IAAA,mMAGA,GAKA,GACAtW,EAAA,wBAAA,GAAA,WC8NA,OA7RAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,aAAAR,KAAAyY,WACAzY,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAA0Y,eACA,EAEAD,UAAA,SAAAxZ,GACAe,KAAA2Y,kBAAA1Z,EACA,EAEA0Z,kBAAA,SAAA1Z,GACAA,EAAAiB,IAAA,oBAAAF,KAAA4Y,mBACA3Z,EAAAiB,IAAA,sBAAAF,KAAA6Y,qBACA5Z,EAAAiB,IAAA,kBAAAF,KAAA8Y,iBACA7Z,EAAAiB,IAAA,gBAAAF,KAAA4I,eAEA3J,EAAAuC,SAAAxB,KAAAwB,QACA,EAEAoX,kBAAA,WACA,OAAA5Y,KAAA+Y,aACA,EAEAF,oBAAA,WACA,OAAA7Y,KAAAgZ,eACA,EAEAF,gBAAA,WACA,QAAA,IAAA9Y,KAAAiZ,UAAA,GAAAjZ,KAAAiZ,SAIA,MAAA,oHADA,GAAAjZ,KAAAiK,SAAA,gCAAA,gFAEA,EAEAyO,eAAA,SAAAQ,GACAA,EAAAja,MAAAiB,IAAA,KAAAgZ,EAAAxT,IACA,IAAAA,EAAA/G,OAAAua,EAAAxT,IAAAyB,KAAA,eAAA,GAIA,GAHA+R,EAAA5Y,SAAAC,QAAAC,QAAA,QAAA0Y,EAAAja,MAAAgB,IAAA,WAAA,gBAAAD,KAAAiB,aAAAiY,QAGA,IAAAA,EAAAja,MAAAgB,IAAA,cAAA,aAAAiZ,EAAAja,MAAAgB,IAAA,aAEA,OADAtB,OAAA+G,GAAAyT,QACA,EAIA,IAAAC,EAAApZ,KAAAqZ,kBAAAH,EAAAja,MAAAgB,IAAA,gBAEAiZ,EAAAja,MAAAiB,IAAA,cAAAkZ,GAEA,IAAAE,EAAA,CACAC,QAAA,CAAAC,EAAAC,EAAA7B,KACAA,EAAA8B,SAAAC,aAAA,kBAAAhb,OAAA+G,GAAAxE,KAAA,oBACA0W,EAAA8B,SAAAC,aAAA,gBAAA,IAEAP,WAAAA,EACAQ,UAAAR,EACAM,UAAA,EACAG,eAAAT,EACAU,KAAA,SACAC,YAAA,EACAC,cAAA,OACAC,QAAAja,KAAAka,WAAAhB,EAAAja,OACAkb,QAAAna,KAAAoa,WAAAlB,EAAAja,QAGA,MAAAob,EAAAra,KAAAsa,oBACAD,IACAf,EAAA5S,OAAA2T,GAIA,IAAAE,EAAAha,QAAAC,QAAA,aAAA4B,QAAA,kBAAAkX,EAAAJ,QACA,IAAAqB,IACAjB,EAAAiB,GAGA,IAAA3C,EAAA4C,UAAA9U,EAAA4T,GAEA,GAAAJ,EAAAja,MAAAgB,IAAA,iBAAAiZ,EAAAja,MAAAgB,IAAA,WACA2X,EAAA6C,YAAA,IAAAxS,KACA2P,EAAA8C,QAAA9C,EAAA6C,aACAvB,EAAAja,MAAAiB,IAAA,QAAA0X,EAAA6C,cAGA,GAAAvB,EAAAja,MAAAgB,IAAA,iBACA,iBAAAiZ,EAAAja,MAAAgB,IAAA,OACAiZ,EAAAja,MAAAgB,IAAA,MAAA0a,SAAA,MACA,iBAAAzB,EAAAja,MAAAgB,IAAA,UACAD,KAAA4a,UAAA1B,EAAAja,MAAAgB,IAAA,SAAA,IAAAgI,QAEA2P,EAAA6C,YAAA,IAAAxS,KACA2P,EAAA8C,QAAA9C,EAAA6C,aAAA,GACAvB,EAAAja,MAAAiB,IAAA,QAAA0X,EAAA6C,cAIAla,QAAAC,QAAA,cAAAO,QAAA,OAAA6W,EAAAsB,EAAAja,MAAAia,GAEA3Y,QAAAC,QAAA,aAAAO,QAAA,OAAA6W,EAAAsB,EAAAja,MAAAia,EACA,EAEAjY,aAAA,SAAAZ,GAEA,GAAA4B,EAAA4Y,SAAA7a,KAAAf,MAAAgB,IAAA,UAAA,CAEA,MAAA6a,EAAA9a,KAAA0F,GAAAgC,cAAA,wBAAAnL,MACAyD,KAAAf,MAAAiB,IAAA,QAAA4a,EACA,CAGA,IAAA,IADA9a,KAAA0F,GAAAqV,QAAAxT,QACAC,OAAA,OACAjH,QAAAC,QAAA,kBAAAO,QAAA,aAEA,cAAAf,KAAAf,MAAAgB,IAAA,cACA,OAIA,GAAA,aAAAD,KAAAf,MAAAgB,IAAA,aACA,OAAA,EAEA,IAAA+a,EAAArc,OAAAqB,KAAA0F,IAAAyB,KAAA,SAAAxB,MACAsV,EAAAtc,OAAAqB,KAAA0F,IAAAyB,KAAA,WAAAxB,MACAuV,EAAAvc,OAAAqB,KAAA0F,IAAAyB,KAAA,SAAAxB,MACAwV,EAAAnb,KAAAf,MAAAgB,IAAA,SACAmb,GAAA,EAGAA,EADAnZ,EAAA4Y,SAAAM,GACAA,EAAAC,KAEAD,EAGA,IAAAL,EAAA,CACAM,KAAAA,EACAJ,KAAAA,EACAC,OAAAA,EACAC,KAAAA,GAGAlb,KAAAf,MAAAiB,IAAA,QAAA4a,EACA,EAEAZ,WAAA,SAAAzY,GACA,IAAAwY,EAAA,KACA,QAAA,IAAAxY,EAAAxB,IAAA,oBAAA,CACA,MAAAob,EAAA5Z,EAAAxB,IAAA,oBACAob,IACApB,EAAAO,UAAAtS,WAAA,IAAAD,KAAA7C,OAAAiW,IAAA5Z,EAAAxB,IAAA,gBAEA,CACA,OAAAga,CACA,EAEAG,WAAA,SAAA3Y,GACA,IAAA0Y,EAAA,KACA,QAAA,IAAA1Y,EAAAxB,IAAA,kBAAA,CACA,MAAAqb,EAAA7Z,EAAAxB,IAAA,kBACAqb,IACAnB,EAAAK,UAAAtS,WAAA,IAAAD,KAAA7C,OAAAkW,IAAA7Z,EAAAxB,IAAA,gBAEA,CACA,OAAAka,CACA,EAEAd,kBAAA,SAAAD,IAEAA,GAAApZ,KAAAf,QACAma,EAAApZ,KAAAf,MAAAgB,IAAA,gBAGAmZ,IACAA,EAAA,WAGA,MAAAmC,EAAA,CACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,oBAAA,WACAC,QAAAtL,OAAAkJ,WAAAlJ,OAAAkJ,WAAA,WAEA,OAAA1f,OAAA6I,KAAAgZ,GAAAZ,SAAAvB,GAAAmC,EAAAnC,GAAAA,CACA,EAEAxQ,cAAA,SAAAtJ,GAIA,MAHA,iBAAAU,KAAAyb,YACAnc,GAAA,kBAEAA,CACA,EAEAgb,kBAAA,WACA,IAAAoB,EAAA,CAAA,EAwBA,OAvBAxL,UACAA,OAAAqI,QAAArI,OAAAyL,eACAD,EAAAnD,OAAA,CAAA,EACArI,OAAAqI,SACAmD,EAAAnD,OAAAH,SAAAlI,OAAAqI,QAEArI,OAAAyL,cACAD,EAAAnD,OAAAD,UAAApI,OAAAyL,eAGAzL,OAAAiI,UAAAjI,OAAAmI,iBACAqD,EAAAvD,SAAA,CAAA,EACAjI,OAAAiI,WACAuD,EAAAvD,SAAAC,SAAAlI,OAAAiI,UAEAjI,OAAAmI,gBACAqD,EAAAvD,SAAAG,UAAApI,OAAAmI,gBAGAnI,OAAA0L,cACAF,EAAAxD,eAAAhI,OAAA0L,eAGA3Z,EAAA4Z,QAAAH,IAAAA,CACA,EAIAla,SAAA,WAEA,GAAA,aAAAxB,KAAAC,IAAA,aACA,OAAAD,KAAAC,IAAA,SAEA,IAAAyF,EAAA1F,KAAAC,IAAA,MACA+a,EAAArc,OAAA+G,GAAAyB,KAAA,SAAAxB,MACAsV,EAAAtc,OAAA+G,GAAAyB,KAAA,WAAAxB,MACAuV,EAAAvc,OAAA+G,GAAAyB,KAAA,SAAAxB,MACAwV,EAAAnb,KAAAC,IAAA,SACAmb,GAAA,EAGAA,EADAnZ,EAAA4Y,SAAAM,GACAA,EAAAC,KAEAD,EAGA,IAAA5e,EAAA,GAcA,YAZA,IAAA6e,IACA7e,GAAA6e,QAGA,IAAAJ,QAAA,IAAAC,IACA1e,GAAA,IAAAye,EAAA,IAAAC,QAGA,IAAAC,IACA3e,GAAA,IAAA2e,GAGA3e,CAUA,EAEAqe,UAAA,SAAAkB,EAAAC,GACA,MAAAC,EAAA,IAAA/T,KAAA6T,GACAG,EAAA,IAAAhU,KAAA8T,GAGA,OAFAC,EAAAE,SAAA,EAAA,EAAA,EAAA,GACAD,EAAAC,SAAA,EAAA,EAAA,EAAA,GACAF,EAAAlU,YAAAmU,EAAAnU,SACA,GAKA,GAEA/O,EAAA,6BAAA,GAAA,WClQA,OA9BAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAmc,eACAnc,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAoc,eACA,EAEAD,cAAA,SAAAld,GACAsB,QAAAC,QAAA,aAAAsB,MAAA,kBAAA9B,KAAAqc,eAAArc,KAAAf,EAAArB,GACA,EAEAye,eAAA,SAAAhO,EAAAnI,GACA,IAAAjH,EAAAsB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACAjH,EAAAiB,IAAA,QAAAmO,GACA9N,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,iBACA,EAEAmc,eAAA,WACA,IAAAE,EAAA,EACA3d,OAAA,gBAAAuD,KAAA,WACA,IACAqa,WAAA/J,MAAA8J,EACA,CAAA,MAAA5e,GACA0R,QAAAC,IAAA,4CACA,CACAiN,GACA,EACA,GAIA,GACAvjB,EAAA,+BAAA,GAAA,WC6CA,OA7EAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,gBAAA,aAAAR,KAAAmc,cACA,EAEAA,cAAA,SAAAld,GACA,MAAA2P,EAAA3P,EAAAgB,IAAA,UAEAD,KAAAwc,iBAAA5N,EAAA3P,GAEAwd,YAAAzc,KAAAwc,iBAAA,KAAA5N,EAAA3P,EACA,EAEAud,iBAAA,SAAA5N,EAAA3P,GACA,IACAsB,QAAAC,QAAA,QAAAoO,GAAA7N,QAAA,iBAAA9B,GACAsd,WAAAG,MAAA,WACAH,WAAAI,QAAA1d,EAAAgB,IAAA,YAAA,CACA2c,OAAA,aACAC,KAAA,SAAAC,GACA7d,EAAAiB,IAAA,QAAA4c,GACAvc,QAAAC,QAAA,QAAAoO,GAAA7N,QAAA,gBAAA9B,EACA,EACA,EACA,CAAA,MAAAvB,GAEAiB,OAAA8I,UAAA7F,GAAA,cAAAmb,IAEA,IAGAC,EAHAC,EAAAC,6BAIAje,EAAAkB,WAAAwB,OAAA4V,QAAA9V,IACA,WAAAA,EAAAxB,IAAA,UACA+c,EAAAvb,EAAAxB,IAAA,SAIAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA4a,EAAA,uBAAA/d,EAAAkB,WAAAC,QAAAC,UAAAJ,IAAA,YAAAkd,yBAGAnd,KAAAod,gCAAAne,EAAAge,EAAAI,SAAAL,EAAAD,IAEA,CACA,EAEAK,gCAAA,SAAAne,EAAAoe,EAAAL,EAAAD,GAGA,KADAM,EAAA/hB,QAAA,GAAA+hB,EAAA1C,SAAA,mBAAA0C,EAAA/hB,QAAA,GACA,CACA,IAAAgiB,EAAA7V,SAAAsH,cAAA,OACAuO,EAAA3D,aAAA,KAAA,8BACA2D,EAAAC,WAAAte,EAAAkB,WAAAC,QAAAC,UAAAJ,IAAA,YAAAud,sBASA,IAAAC,EAAA,IAAAC,YAAA,kBAAA,CAAAC,OAPA,CACAN,SAAAA,EACAO,QAAAN,EACAN,cAAAA,EACAD,WAAAA,KAIAtV,SAAAoW,cAAAJ,GAGA,MAAAK,EAAArW,SAAAsW,uBAAA,iCACAxU,MAAA5P,UAAAG,MAAAK,KAAA2jB,GACAvG,QAAAhI,IACAA,EAAAyO,OAAAV,IAGA,CACA,GAKA,GACAvkB,EAAA,wBAAA,GAAA,WCaA,OA5FAgM,WAAArL,OAAAoF,OAAA,CAEAmf,WAAA,GACAC,iBAAA,GAEApe,WAAA,WACAE,KAAAM,SAAA1B,SAAA8Y,MAAAlX,QAAA,eAAA,aAAAR,KAAAme,2BACA,EAEAA,2BAAA,SAAA1c,GACAzB,KAAAie,WAAA9hB,KAAAsF,GAEA,IAAAmN,EAAAnN,EAAAxB,IAAA,UAEAD,KAAAM,SAAAC,QAAAC,QAAA,QAAAoO,GAAA,aAAA,SAAAvO,GAEA,IAAA+d,EAAA3c,EAAAxB,IAAA,WAAAqV,MAAA,IAAAC,OAAA,mBACA6I,IAEAnc,EAAAC,KAAAkc,EAAA,SAAAC,GACA,IAAAC,EAAAD,EAAA5iB,QAAA,UAAA,IAAAA,QAAA,IAAA,IACAgG,EAAApB,EAAAJ,IAAA,UAAAsE,UAAA,CAAAD,IAAAga,SACA,IAAA7c,IAEAzB,KAAAke,iBAAA/hB,KAAAsF,GACAzB,KAAAM,SAAAC,QAAAC,QAAA,SAAAiB,EAAAxB,IAAA,OAAA,oBAAAD,KAAAue,sBACA,EAAAve,MAGAA,KAAAue,uBACA,EAAAve,KACA,EAEAue,qBAAA,SAAA9c,GACAQ,EAAAC,KAAAlC,KAAAie,WAAA,SAAAO,GACA,IAAAjiB,EAAAiiB,EAAAve,IAAA,SACAgC,EAAAC,KAAAlC,KAAAke,iBAAA,SAAAzc,GAKA,IAAAsV,EAAAxa,EAAA+Y,MAAA,IAAAC,OAAA,yCACAtT,EAAAC,KAAA6U,EAAA,SAAAC,IAKA,EAAAA,EAAAna,QAAA,mBAAA4E,EAAAxB,IAAA,UACA1D,EAAAA,EAAAd,QAAAub,EAAA,UAAAvV,EAAAxB,IAAA,OAAA,KAEA,GAEA,IAAAoe,EAAA,UAAA5c,EAAAxB,IAAA,OAAA,IAEA,MAAAwe,EAAA,aAAAhd,EAAAxB,IAAA,QAAAD,KAAA0e,oBAAAjd,GAAAA,EAAAD,WAMAjF,EAAAA,EAAAd,QAAA4iB,EAAA,yBACA5c,EAAAxB,IAAA,OAAA,KACAwe,EAAA,UACA,EAAAze,MACAwe,EAAAte,IAAA,QAAA3D,GACAiiB,EAAAzd,QAAA,WACA,EAAAf,KACA,EAEA0e,oBAAA,SAAAjd,GACA,MAAAkd,EAAAjlB,OAAA6I,KAAAd,EAAAD,YACA,IAAAod,EAAA,GAAAC,EAAA,GAgBA,OAdA5c,EAAAC,KAAAyc,EAAA,SAAAzY,GACA,IAAA,IAAA2Y,EAAAhiB,QAAAqJ,GAAA,CACA,MAAAsJ,EAAAjP,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA,QAAA,IAAAsJ,EAAA,CAEA,IAAA,IADA,CAAA,SAAA,OAAA,SAAA,WAAA,kBAAA,UAAA,KAAA,OAAA,UAAA,SAAA,UAAA,aAAA,gBAAA,uBAAA,qBAAA,mBAAA,gBAAA,YAAA,gBACA3S,QAAA2S,EAAAvP,IAAA,UAAAuP,EAAAhO,WAAA4S,WAAA9Y,OAAA,EAAA,CACA,MAAAsB,EAAA6N,OAAAvE,EAAA/K,MAAA,KAAA2jB,OAAA,EACAF,GAAA,MAAApP,EAAAvP,IAAA,SAAA,IAAArD,EAAA,MAAA4S,EAAAhO,WAAA,OACAqd,EAAA1iB,KAAA+J,EACA,CACA,CACA,CACA,GAEA0Y,CACA,GAKA,GC3FA7lB,EAAA,uBAAA,GAAA,WAkCA,OAjCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAA+e,cACA/e,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,iBAAAR,KAAA+e,cAEAxe,QAAAC,QAAA,QAAAsB,MAAA,YAAA9B,KAAA+e,aACA,EAEAA,aAAA,SAAA7F,GAEAA,IAAAA,EAAAxT,IAAA,mBAAAwT,EAAAjZ,KAEA,aAAAiZ,EAAAjZ,IAAA,UACAiZ,EAAAxT,GAAA,YAAAwT,EAAAjZ,IAAA,UAAA,SAIAtB,OAAAua,EAAAxT,IAAAyB,KAAA,YAAAjF,KAAA,SAAAwD,GACA,IAAAsZ,EAAArgB,OAAAqB,MAAAgf,KAAA,UAAA,CACAC,MAAA,gBACAC,QAAAvgB,OAAAqB,MAAAqK,KAAA,QACAtJ,QAAA,mBACAoe,mBAAA,EACAC,cAAA,IAGAzgB,OAAAqB,MAAA4B,GAAA,qBAAA,WACAod,EAAAK,OACA,EACA,EACA,GAIA,GAEAtmB,EAAA,2BAAA,GAAA,WCtBA,OAjBAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,WAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAuI,aAAA,SAAA9G,GACA,GAAA,YAAAA,EAAAxB,IAAA,QAAA,CACA,IAAAkF,EAAA5E,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAkQ,OAAA,IAAAhL,EAAAA,EAAAlF,IAAA,kBAAA,GACAqf,EAAA3gB,OAAA,gBAAA8K,KAAA0G,GAAAqI,OACA,OAAA/W,EAAAxB,IAAA,SAAAxE,QAAA6jB,EAAA,GACA,CAEA,OAAA7d,EAAAxB,IAAA,QACA,GAIA,GChBAlH,EAAA,+BAAA,GAAA,WAwOA,OAvOAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,cAAAR,KAAAuf,kBACAvf,KAAAM,SAAAC,QAAAC,QAAA,YAAA,cAAAR,KAAAwf,YAGAxf,KAAAyf,iBAEAzf,KAAA0f,eAAA,CAAA,OAEA,IAAA/gB,OAAAghB,aAEAhhB,OAAAghB,WAAAvf,QAAAwf,MAAA,CACAC,MAAA,uCACAC,YAAA,yCACAC,aAAA,qCACAC,UAAA,uCACAC,WAAA,wCACAC,OAAA,oCACAC,QAAA,qCAEAC,KAAA,kCACAC,MAAA,iCAEAhB,MAAA,8BACAiB,KAAA,kCACAC,OAAA,8CAGAC,OAAA,oCACAC,KAAA,kCACAC,OAAA,oCACAC,MAAA,uCAEAC,MAAA,4BACAC,YAAA,gCAIAC,KAAA,2BACAC,OAAA,sBAIAC,MAAA,mCAGAC,UAAA,uCACAC,KAAA,2BACAC,cAAA,iCAIA,EAEA5B,iBAAA,SAAArG,GACA,GAAA,GAAAA,EAAAja,MAAAgB,IAAA,gBACA,OAAA,EAKA,IAAAmL,EAAApL,KASAohB,EAAA,CACA,CAAA,iBAAA,CAAA,UACA,CAAA,YAAA,CAAA,OAAA,SAAA,YAAA,UACA,CAAA,QAAA,CAAA,KAAA,OACA,CAAA,YAAA,CAAA,cACA,CAAA,cAAA,CAAA,aAAA,WACA,CAAA,QAAA,CAAA,UACA,CAAA,UAAA,CAAA,OAAA,UAGA,GAAAlI,EAAAja,MAAAgB,IAAA,mBAAA,GAAAohB,aAAAC,KACAF,EAAAjlB,KAAA,CAAA,QAAA,CAAA,iBAGAwC,OAAAua,EAAAxT,IAAAyB,KAAA,eAAAwY,WAAA,CACAyB,QAAAA,EACAG,QAAA,CACAC,WAxBA,SAAAC,GACA,OAAArW,EAAAoW,WAAAC,EACA,EAuBAC,YAtBA,SAAAD,GACA,OAAArW,EAAAsW,YAAAD,EACA,GAsBAzP,OAAA,IACA2P,WAAA,CACA1C,MAAA,UACA2C,aAAA,GAEAC,cAAA,EACAC,UAAA,CACAC,SAAA,SAAArkB,GACAwb,EAAAja,MAAAiB,IAAA,QAAAvB,OAAAqB,MAAA2f,WAAA,QACA,KAIA,IAAAqC,EAAArjB,OAAAua,EAAAxT,IAAAyB,KAAA,gBAAA8a,KAAA,kBAAA9a,KAAA,UACA6a,EAAAE,YAAA,WACA,OAAAvjB,OAAA,SAAA,CACAwjB,MAAAxjB,OAAAqjB,GAAA9gB,KAAA,SACAuI,KAAAzJ,KAAAoiB,WAEA,EACA,EAEAZ,WAAA,SAAAC,GACA,IAAArW,EAAApL,KACAqiB,EAAA1jB,OAAAghB,WAAA0C,GACAb,EAAAjhB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,4BACAkgB,EAAA/hB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,8BACA,OAAAigB,EAAAE,YAAA,CACAF,EAAAG,OAAA,CACAC,UAAA,8BACAC,SAAAlB,EAAA,CAAA,GACAmB,QAAAzS,OAAA0S,2BACA5U,MAAA,SAAAtQ,GACA0N,EAAAyX,gBAAAnlB,EAAA+jB,EACA,EACApX,KAAA,CACAyY,OAAA,cAGAT,EAAAU,SAAA,CACAV,EAAAE,YAAA,CACAS,SAAA,CACAX,EAAAG,OAAA,CACAE,SAAAJ,EAAA,CAAA,GACAK,QAAA,YAKAM,QACA,EAEAvB,YAAA,SAAAD,GACA,IAAArW,EAAApL,KACAqiB,EAAA1jB,OAAAghB,WAAA0C,GACAX,EAAAnhB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,6BACA,OAAAigB,EAAAG,OAAA,CACAC,UAAA,kBACAC,SAAAhB,EAAA,CAAA,GACAiB,QAAAzS,OAAAgT,4BACAlV,MAAA,SAAAtQ,GACA0N,EAAA+X,iBAAAzlB,EAAA+jB,EACA,IACAwB,QACA,EAEAE,iBAAA,SAAAzlB,EAAA+jB,GAGA,GAFAA,EAAAhf,OAAA,oBAEAzC,KAAAyf,iBACAzf,KAAAyf,iBAAA2D,WADA,CAMApjB,KAAAyf,iBAAA4D,GAAAC,MAAAC,OAAA9D,iBAAA4D,GAAAC,MAAA,CACAE,MAAAtT,OAAAuT,4BACAjB,OAAA,CAAAhK,KAAA,YAGA,IAAApN,EAAApL,KAGAA,KAAAyf,iBAAA7d,GAAA,SAAA,WAGA,IAAA8hB,EAAAtY,EAAAqU,iBAAAkE,QAAA1jB,IAAA,aAAA6D,QAAA8f,SACAxY,EAAAyY,YAAAH,EAAAjC,EACA,GAGAzhB,KAAAyf,iBAAA2D,MAnBA,CAoBA,EAEAP,gBAAA,SAAAnlB,EAAA+jB,GACA,IAAAqC,EAAArC,EAAAhf,OAAA,sBACAgf,EAAAhf,OAAA,oBACA,IAAA+V,EAAAsL,EAAA1P,WACApU,KAAA0f,eAAA+B,EAEA9iB,OAAAjB,EAAAsJ,QAAAC,QAAA,uCAAArF,GAAA,mBAAA,SAAAlE,GACA,OAAA,CACA,GAEAiB,OAAAjB,EAAAsJ,QAAAC,QAAA,uCAAArF,GAAA,oBAAA,SAAAlE,GACAiB,OAAAjB,EAAAsJ,QAAA2D,SAAAA,SAAAxD,KAAA,cAAAxB,IAAA6S,GACA7Z,OAAAjB,EAAAsJ,QAAA2D,SAAAA,SAAAxD,KAAA,aAAA2J,OACA,EACA,EAEA0O,WAAA,SAAA9hB,GACA,IAAAqmB,EAAAplB,OAAAjB,EAAAsJ,QAAA2D,SAAAxD,KAAA,cACA6c,EAAArlB,OAAAjB,EAAAsJ,QAAA2D,SAAAxD,KAAA,aACA8c,EAAAtlB,OAAAjB,EAAAsJ,QAAA2D,SAAAxD,KAAA,oBAEA,GADAnH,KAAA0f,eAAAjd,OAAA,uBACA9D,OAAAjB,EAAAsJ,QAAAkd,SAAA,eAAA,CACA,IAAA1L,EAAAuL,EAAApe,MACAwe,EAAAH,EAAAre,MACAye,IAAAH,EAAA/pB,KAAA,WACA,GAAAse,EAAAld,QAAA,GAAA6oB,EAAA7oB,QACA0E,KAAA0f,eAAAjd,OAAA,oBAAA,CAAA+V,KAAAA,EAAA2L,IAAAA,EAAAC,YAAAA,GAEA,CACAL,EAAApe,IAAA,IACAqe,EAAAre,IAAA,IACAse,EAAA/pB,KAAA,WAAA,GACAyE,OAAAjB,EAAAsJ,QAAAC,QAAA,2BAAAwB,YAAA,OACA,EAEAob,YAAA,SAAAP,EAAA7B,GACAA,EAAAhf,OAAA,uBACA,SAAA6gB,EAAAvjB,KACA0hB,EAAAhf,OAAA,qBAAA6gB,EAAAa,KAEA1C,EAAAhf,OAAA,oBAAA,CAAA+V,KAAA8K,EAAAe,SAAAF,IAAAb,EAAAa,KAGA,GAIA,GACAprB,EAAA,8BAAA,GAAA,WCtMA,OAtCAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,cAAA,aAAAR,KAAAgJ,UACAhJ,KAAAM,SAAAC,QAAAC,QAAA,cAAA,cAAAR,KAAAskB,WACA,EAEAtb,SAAA,SAAA/J,GACAA,EAAAiB,IAAA,gBAAAF,KAAAukB,cACA,EAEAD,WAAA,SAAApL,GACAva,OAAAua,EAAAxT,IAAAyB,KAAA,eAAAqd,QAEA,EAEAD,cAAA,WAGA,IAFA,IAAA9a,EAAAhC,SAAAsH,cAAA,QAEAhU,EAAA,EAAAA,GAAAiF,KAAAykB,gBAAA,EAAA1pB,IAAA,CACA,IAAAoP,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kCACAsiB,EAAA3pB,EAAA,EACA2N,EAAA,GAGA1I,KAAAzD,OAAAmoB,IACAhc,EAAA,WAEA,IAAAic,EAAAxa,EAAA,CAAAvM,GAAAoC,KAAApC,GAAA0B,QAAAU,KAAAV,QAAAolB,IAAAA,EAAAhc,QAAAA,EAAAuB,SAAAjK,KAAAiK,WACAR,EAAA0F,YACA1H,SAAAmd,cAAAC,yBAAAF,GAEA,CACA,OAAAlb,EAAA2Y,SACA,GAKA,GAEArpB,EAAA,yBAAA,GAAA,WCAA,OAzCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAgJ,SACA,EAEAA,SAAA,SAAA/J,GAEAe,KAAAM,SAAAC,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAA,cAAAD,KAAAwf,YACAxf,KAAAM,SAAAC,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAA,cAAAD,KAAA8kB,WACA,EAEAtF,WAAA,SAAA9hB,EAAAuB,GACA,IACA1C,EADAoC,OAAAjB,EAAAqnB,eACApa,SAAAxD,KAAA,gBAAAxB,MACA3F,KAAAglB,UAAA/lB,EAAA1C,EACA,EAEAuoB,WAAA,SAAApf,EAAAzG,EAAAoH,GACA,IAAAA,GACArG,KAAAglB,UAAA/lB,EAAAyG,EAAAC,MACA,EAEAqf,UAAA,SAAA/lB,EAAA1C,GACA,GAAAA,EAAA,CACA,IACA0oB,EAAA,CACArb,MAAArN,EACAA,MAAAA,EACA4M,SAAA,GAJAlK,EAAAgB,IAAA,WAMA9D,KAAA8oB,GAEAhmB,EAAAgB,IAAA,SACA9D,KAAAI,GAGA0C,EAAA8B,QAAA,WAbA,CAcA,GAKA,GClCAhI,EAAA,iCAAA,GAAA,WA8DA,OA7DAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAIAE,KAAAklB,YAAA,GACAllB,KAAAmlB,YAAA,GAKA5kB,QAAAC,QAAA,eAAAsB,MAAA,iBAAA9B,KAAAolB,cAAAplB,MACAO,QAAAC,QAAA,eAAAsB,MAAA,iBAAA9B,KAAAqlB,cAAArlB,MAKAO,QAAAC,QAAA,eAAAsB,MAAA,kBAAA9B,KAAAslB,eAAAtlB,MACAO,QAAAC,QAAA,eAAAsB,MAAA,kBAAA9B,KAAAulB,eAAAvlB,MAUAO,QAAAC,QAAA,iBAAAsB,MAAA,iBAAA9B,KAAAolB,cAAAplB,MACAO,QAAAC,QAAA,iBAAAsB,MAAA,iBAAA9B,KAAAqlB,cAAArlB,MAMAO,QAAAC,QAAA,iBAAAsB,MAAA,kBAAA9B,KAAAslB,eAAAtlB,MACAO,QAAAC,QAAA,iBAAAsB,MAAA,kBAAA9B,KAAAulB,eAAAvlB,KAKA,EAEAolB,cAAA,SAAArnB,EAAAynB,GACAxlB,KAAAklB,YAAAM,GAAAznB,CACA,EAEAunB,eAAA,WACA,OAAAtlB,KAAAklB,WACA,EAEAG,cAAA,SAAAtnB,EAAAynB,GACAxlB,KAAAmlB,YAAAK,GAAAznB,CACA,EAEAwnB,eAAA,WACA,OAAAvlB,KAAAmlB,WACA,GAKA,GACApsB,EAAA,kBAAA,GAAA,WC+VA,OAvaAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,MAEA5lB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,WAAAe,KAAAijB,OAAAjjB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,yBAAAe,KAAAoB,gBAAApB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,4BAAAe,KAAAsB,mBAAAtB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAA2lB,kBAAA3lB,MAEAA,KAAAmK,SAAA,kBAAAnK,KAAAf,MAAAgB,IAAA,gBACA,EAEAzE,KAAA,SAAAyD,GACAmQ,QAAAC,IAAA,wBACA,EAEAjO,gBAAA,WACA,IAAAC,EAAArB,KAAAf,MAAAgB,IAAA,mBACA,IAAAoB,IACA1C,OAAAqB,KAAA0F,IAAA8C,SAAAnH,GACArB,KAAAf,MAAAiB,IAAA,kBAAA,IAEA,EAEAoB,mBAAA,WACA,IAAAD,EAAArB,KAAAf,MAAAgB,IAAA,sBACA,IAAAoB,IACA1C,OAAAqB,KAAA0F,IAAA+C,YAAApH,GACArB,KAAAf,MAAAiB,IAAA,qBAAA,IAEA,EAEAylB,kBAAA,WACA,IAAA9lB,EAAAG,KAAAf,MAAAgB,IAAA,WACAtB,OAAA,iBAAAqB,KAAA0F,IAAAxE,KAAA,eAAA0kB,KAAAC,UAAAhmB,GACA,EAEAimB,SAAA,WASA,GARA9lB,KAAAkM,IAAAlM,KAAAkM,IAAA8W,WACAhjB,KAAAkM,IAAA6Z,SACA/lB,KAAAgmB,WAAAhmB,KAAAkM,UAMA,IAAAlM,KAAAf,MAAAgB,IAAA,SAAA,IAAAmF,OAAApF,KAAAf,MAAAgB,IAAA,SAAA6P,OAAA,CACA,GAAA,UAAA9P,KAAAf,MAAAgB,IAAA,QACA,IAAAgQ,EAAAjQ,KAAAf,MAAAgB,IAAA,oBAEAgQ,EAAAjQ,KAAAf,MAAAgB,IAAA,QAQA,GALAwK,OAAAwb,UAAAxb,OAAAwb,WAAA,SAAA1pB,GAAA,MAAA,iBAAAA,GAAA2pB,SAAA3pB,IAAAqQ,KAAAuZ,MAAA5pB,KAAAA,CAAA,EACAkO,OAAAwb,UAAAhW,KACAA,EAAAA,EAAAmE,YAGA,YAAAnE,EAAA,CACA,IAAA9K,EAAA5E,QAAAC,QAAA,OAAA4B,QAAA,WAAApC,KAAAf,MAAAgB,IAAA,WAEAgW,EAAA9Q,EAAAlF,IAAA,iBAIA,UAAAgW,GAAA,KAAAA,EAAAmQ,WAAA,KACAnQ,EAAA,KAEA,IAAA9F,EAAAxR,OAAA,UAAA8K,KAAAtE,EAAAlF,IAAA,mBAAAuY,OAQA6N,EAAA,CACAC,oBARArQ,EAAAtX,OAAA,UAAA8K,KAAAwM,GAAAuC,OASA+N,iBARA5nB,OAAA,UAAA8K,KAAAtE,EAAAlF,IAAA,kBAAAuY,OASArI,eAAAA,EACAqW,oBAAA,GAIAC,EAAA9nB,OAAAA,OAAAqB,KAAA0F,IAAAyB,KAAA,eAAA,IACA,IAAAuf,YAAA/nB,OAAAqB,KAAA0F,IAAAyB,KAAA,eAAA,GAAAkf,GAGA,IAAA5E,EAAAzhB,KACAymB,EAAA7kB,GAAA,SAAA,SAAAlE,GACA+jB,EAAAxiB,MAAAiB,IAAA,QAAAxC,EAAAsJ,OAAAzK,MACA,EACA,MACAoC,OAAAqB,KAAA0F,IAAAyB,KAAA,eAAA8I,KAAAA,EAEA,CAEA1P,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,cAAAf,KACA,EAEA2mB,gBAAA,WACA,IAAAvb,EAAApL,KACA,MAAA,CAEA4mB,cAAA,WAEA5mB,KAAAN,QAAAM,KAAAzD,OAAA,IAAAyD,KAAAwb,UAAAxb,KAAAzD,MAAA,KACA,IAAAsqB,EAAA5kB,EAAAkF,KAAAnH,KAAA8mB,kBAAA,SAAAD,GACA,GAAA,EAAAloB,OAAA,kBAAAkoB,GAAAvrB,OACA,OAAA,CAEA,GAGA,OAFAiF,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kBAAAykB,EAEA1c,CAAAnK,KACA,EAEA+mB,YAAA,WAEA,OADAxmB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,uBACA+H,CAAAnK,KACA,EAEAgnB,mBAAA,WACA,IAAA1nB,EAAA,GAIA,YAHA,IAAAU,KAAA6I,qBACAvJ,EAAAU,KAAA6I,mBAAAvJ,IAEAA,CACA,EAEA2nB,kBAAA,WACA,IAAA7nB,EAAAY,KAAAZ,YAMA,YAJA,IAAAY,KAAAknB,oBACA9nB,EAAAY,KAAAknB,kBAAA9nB,IAGA,IAAAgG,OAAAhG,GAAA0Q,OACA,gBAAA7N,EAAA8H,OAAA3K,GAAA,IAEA,EAEA,EAEA+nB,gBAAA,WACA,IAAAC,EAAA,cAAApnB,KAAAD,KAAA,QAgBA,OAZAC,KAAAD,OAAAC,KAAAqnB,aACAD,EAAAA,EAAA,IAAApnB,KAAAqnB,WAAA,cAGA,IAAArnB,KAAAgL,eAAA,EAAA5F,OAAApF,KAAAgL,eAAA8E,OAAAxU,SACA8rB,GAAA,IAAApnB,KAAAgL,cAAA,SAGA,oBAAAsc,kBACAF,EAAAE,gBAAAF,IAGAA,CACA,EAEAG,cAAA,WACA,IAAAjoB,EAAAU,KAAAV,QAoBA,OAlBAU,KAAAuP,MACAjQ,GAAA,YAEAA,EAAAA,EAAA7D,QAAA,WAAA,SAGA,IAAAuE,KAAAqD,eAAA,EAAA+B,OAAApF,KAAAqD,eAAAyM,OAAAxU,SACAgE,GAAA,IAAAU,KAAAqD,oBAOA,IAAArD,KAAA4I,gBACAtJ,EAAAU,KAAA4I,cAAAtJ,IAGAA,CACA,EAEA4K,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,OACA,EAEA0d,cAAA,WACA,OAAA,GAAAxnB,KAAAynB,cACA,WAEA,EAEA,EAEAC,cAAA,WACA,OAAA,GAAA1nB,KAAAiK,SACA,gCAEA,EAEA,EAEA0d,yBAAA,WACA,GAAA,GAAA3nB,KAAA4nB,6BACA,MAAA,qBAGA,MAAA,iBADA5nB,KAAA6nB,4BAAA7nB,KAAAD,MACA,GAEA,EAEA8nB,4BAAA,SAAA9nB,GAEA,OAAAA,GACA,IAAA,UACA,MAAA,iBACA,IAAA,WACA,MAAA,gBACA,IAAA,OACA,MAAA,iBACA,IAAA,QACA,MAAA,QACA,IAAA,YACA,MAAA,aACA,IAAA,WACA,MAAA,cACA,IAAA,MACA,MAAA,cACA,IAAA,QACA,MAAA,MACA,QACA,MAAA,KAEA,EAEA+nB,gBAAA,WACA,MAAA,cAAA9nB,KAAA+nB,kBAAA,IAAA3iB,OAAApF,KAAAgoB,aAAAlY,OACA,cAAA9P,KAAAgoB,YAAA,IAEA,EAEA,EAEAC,YAAA,WAGA,YAAA,IAAAjoB,KAAAkoB,UAAAloB,KAAAkoB,UAAA,EACA,EAEAC,gBAAA,WAIA,IAAAC,EAAA3gB,SAAAsH,cAAA,KACAqZ,EAAAhG,UAAApiB,KAAAkoB,UAEA,IAAAG,GAAA,EAOA,IALA,GAAAjjB,OAAAzG,OAAAypB,GAAA5P,QAAA1I,OAAAxU,QACA,EAAAqD,OAAAypB,GAAAjhB,KAAA,OAAA7L,UACA+sB,GAAA,QAGA,IAAAroB,KAAAkoB,WAAAG,EAAA,CAOA,IAAAC,EAAA7gB,SAAAsH,cAAA,QACAuZ,EAAAC,UAAA9jB,IAAA,KAAA,iBAAA,WACA6jB,EAAA3O,aAAA,YAAA3Z,KAAAioB,eACAK,EAAA3O,aAAA,WAAA,KACA2O,EAAA3O,aAAA,mBAAA,oBAAA3Z,KAAApC,IAGA,IAAA4qB,EAAA/gB,SAAAsH,cAAA,QAQA,OAPAyZ,EAAAC,YAAAzoB,KAAAkoB,UAXAzsB,QAAA,kBAAA,IAAAqU,OAYA0Y,EAAA5qB,GAAA,oBAAAoC,KAAApC,GACA4qB,EAAAD,UAAA9jB,IAAA,cACA+jB,EAAA7O,aAAA,OAAA,WAEA2O,EAAAnZ,YAAAqZ,GAEAF,EAAAI,SACA,CACA,MAAA,EAEA,EAEAC,eAAA,WACA,QAAA,IAAA3oB,KAAA4oB,UACA,MAAA,GAIA,IAIAC,EAAAC,EAKAC,EAAAC,EATAxQ,EAAA/Q,SAAAsH,cAAA,KAEA,OADAyJ,EAAA4J,UAAApiB,KAAA4oB,UACA,GAAAxjB,OAAAoT,EAAA+E,WAAAzN,OAAAxU,OAAA,IAGAwtB,EAAArhB,SAAAyH,eAAAlP,KAAA4oB,YACAC,EAAAphB,SAAAsH,cAAA,MACAI,YAAA2Z,GACA,GAAA1jB,OAAAzG,OAAAkqB,GAAArQ,QAAA1I,OAAAxU,QAEAytB,EAAAthB,SAAAmd,cAAAC,yBAAA7kB,KAAA4oB,YACAI,EAAAvhB,SAAAsH,cAAA,QACAwZ,UAAA9jB,IAAA,wBACAukB,EAAArP,aAAA,cAAA,QACAqP,EAAArP,aAAA,KAAA,kBAAA3Z,KAAApC,IACAorB,EAAA7Z,YAAA4Z,GACAC,EAAAN,WAEA,GAEA,EAEAO,oBAAA,WAEA,OAAAjpB,KAAAN,MAEA,IAAAM,KAAAwb,SAAAxb,KAAAwb,QACAxb,KAAAwb,QAEAxb,KAAAZ,YAIA,GAHAY,KAAAzD,MAOAyD,KAAAzD,KAEA,EAEA2sB,yBAAA,SAAA/R,GAIA,IAKAd,EALAc,EAAA/C,WAAA3Y,QAAA,IAAA,MAIAA,QAAA,wBAAAyU,OAAA+F,eACAxa,QAAA,KAAAyU,OAAAgG,eAIA,OAFA3V,QAAAC,QAAA,OAAA4B,QAAA,WAAAgJ,EAAAnM,MAAAgB,IAAA,WACAA,IAAA,YAAAkpB,gBACA9S,CACA,EAEA+S,gBAAA,WACA,MAAA,aAAAppB,KAAAyb,WAAA,iBAAAzb,KAAAyb,SAIA,EAEA,EAEA4N,OAAA,CACA,qBAAA,cACA,oBAAA,aACA,oBAAA,aACA,eAAA,aACA,gBAAA,cACA,mBAAA,aAGAC,YAAA,SAAA5rB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACAxkB,QAAAC,QAAA,WAAA4B,QAAA,eAAAsD,EAAA1F,KAAAf,MACA,EAEAsqB,WAAA,SAAA7rB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACA1e,EAAA3I,EAAA2I,QACA9F,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,MAAAoH,GACA9F,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,MAAAoH,GACA9F,QAAAC,QAAA,UAAAO,QAAA,cAAA2E,EAAA1F,KAAAf,MAAAoH,EACA,EAEAmjB,WAAA,SAAA9rB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACAxkB,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,cAAA2E,EAAA1F,KAAAf,MACA,EAEAwqB,WAAA,SAAA/rB,GACA6C,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,cAAArD,EAAAsC,KAAAf,MACA,EAEAyqB,YAAA,SAAAhsB,GACA6C,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,eAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,eAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAArD,EAAAsC,KAAAf,MACA,EAEA0qB,UAAA,SAAAjsB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACAxkB,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,aAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,aAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,aAAA2E,EAAA1F,KAAAf,MACA,EAEA2qB,SAAA,WACArpB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAf,KACA,GAIA,GAEAjH,EAAA,oBAAA,GAAA,WCraA,OALAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,yBAIA,GACApR,EAAA,uBAAA,GAAA,WCIA,OAXAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,uBAEA2b,SAAA,WACA9lB,KAAAkM,IAAAlM,KAAAkM,IAAA8W,WACAhjB,KAAAkM,IAAA6Z,SACA/lB,KAAAgmB,WAAAhmB,KAAAkM,IACA,GAIA,GACAnT,EAAA,6BAAA,CAAA,wBAAA,SAAA8wB,GCWA,OAxBA9kB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,YACAqE,UAAAF,EAEA/pB,WAAA,SAAAM,GACAJ,KAAAyB,WAAArB,EAAAqB,UACA,EAEAqkB,SAAA,WACA,GAAA9lB,KAAAyB,WAAAxB,IAAA,UAAA0B,OAAArG,QACA0E,KAAAyB,WAAAH,mBAAA,YACAtB,KAAAyB,WAAAH,mBAAA,WACAtB,KAAAyB,WAAAL,gBAAA,WACApB,KAAAyB,WAAAF,YAAA,KAEAvB,KAAAyB,WAAAH,mBAAA,WACAtB,KAAAyB,WAAAL,gBAAA,WACApB,KAAAyB,WAAAL,gBAAA,YACApB,KAAAyB,WAAAF,YAAA,GAGA,GAIA,GAEAxI,EAAA,mBAAA,GAAA,WCqBA,OAhDAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,6BAEArK,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAA,cAAAD,KAAAgqB,aACAhqB,KAAAiqB,MAAAjqB,KAAAf,MAAAgB,IAAA,eACAD,KAAAijB,QACA,EAEA+G,YAAA,SAAAtkB,EAAAzG,GACA,IAAA1C,EAAAoC,OAAA+G,GAAAC,MAEAukB,EAAA9kB,OAAA7I,GAAAuT,OAAArU,QADA,QACA,KAAAN,MAAA,KACAgvB,EAAAD,EAAA5uB,OACA8uB,EAAA7tB,EAAAjB,OAOA,GAAA,cAAA0E,KAAAf,MAAAgB,IAAA,qBACA,QAAAD,KAAAf,MAAAgB,IAAA,oBACAtB,OAAA+G,GAAAxE,KAAA,YAAAlB,KAAAf,MAAAgB,IAAA,gBACAD,KAAAiqB,MAAAjqB,KAAAf,MAAAgB,IAAA,eAAAmqB,MACA,CACApqB,KAAAiqB,MAAAjqB,KAAAf,MAAAgB,IAAA,eAAAkqB,EACA,IAAAE,EAAArqB,KAAAf,MAAAgB,IAAA,eACAkqB,EAAAE,GACA1rB,OAAA+G,GAAAC,IAAAukB,EAAApwB,MAAA,EAAAuwB,GAAAxuB,KAAA,KAEA,CAEAmE,KAAAijB,QACA,EAEA0D,gBAAA,WACA,IAAAvb,EAAApL,KACA,MAAA,CACAsqB,aAAA,WACA,OAAAlf,EAAA6e,KACA,EAEA,GAKA,GACAlxB,EAAA,mBAAA,CAAA,6BAAA,oBAAA,SAAAmG,EAAAqrB,GCXA,OAvCAxlB,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,uBAEArK,WAAA,WACAE,KAAAf,MAAA2C,GAAA,gBAAA5B,KAAAwqB,YAAAxqB,KACA,EAEA8lB,SAAA,WAKA,IAAA2E,EAAA9rB,OAAAqB,KAAA0F,IAAAsd,SAAA,kBAUA,GATAhjB,KAAA0qB,oBAAA,IAAAxrB,EAAA,CAAAwG,GAAA+kB,EAAAtqB,WAAAH,KAAAf,MAAAgB,IAAA,UAAAwB,WAAAzB,KAAAf,QACA,EAAAe,KAAAf,MAAAgB,IAAA,UAAA3E,QACA0E,KAAA0qB,oBAAAzH,cAOA,IAAAjjB,KAAAf,MAAAgB,IAAA,gBAAA,IAAAmF,OAAApF,KAAAf,MAAAgB,IAAA,gBAAA6P,OAAA,CACA,IAAA6a,EAAAhsB,OAAAqB,KAAA0F,IAAAsd,SAAA,mBACAhjB,KAAA4qB,eAAA,IAAAL,EAAA,CAAA7kB,GAAAilB,EAAA1rB,MAAAe,KAAAf,QACA0rB,EAAAzpB,KAAA,YAAA,UACAypB,EAAAzpB,KAAA,OAAA,UACAypB,EAAAzpB,KAAA,gBAAA,aACAypB,EAAAzpB,KAAA,eAAA,EACA,CACA,EAEAspB,YAAA,WACAxqB,KAAA0qB,oBAAAzH,QACA,GAKA,GACAlqB,EAAA,iCAAA,CAAA,kBAAA,oBAAA,oBAAA,SAAA8xB,EAAAC,EAAAC,GCcA,OAtDAhmB,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,WAEAuF,QAAA,CACAH,YAAA,mBACAtb,MAAA,YACAub,WAAA,mBAGAjrB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAAijB,OAAAjjB,KACA,EAEAkrB,YAAA,WACA,OAAAlrB,KAAAf,MAAAgB,IAAA,WACA,wBAEA,gBAEA,EAEA6lB,SAAA,WACA9lB,KAAAf,MAAAgB,IAAA,aACAD,KAAA8qB,YAAAla,KAAA,IAAAka,EAAA,CAAA7rB,MAAAe,KAAAf,SACAe,KAAAwP,MAAAoB,KAAA,IAAAia,EAAA,CAAA5rB,MAAAe,KAAAf,SACAe,KAAA+qB,WAAAna,KAAA,IAAAma,EAAA,CAAA9rB,MAAAe,KAAAf,SAEA,EAEA0nB,gBAAA,WACA,MAAA,CACAwE,qBAAA,WACA,IAAAC,EAAA,UAAAprB,KAAAX,UAAA,IAgBA,YAdA,IAAAW,KAAAqrB,WACAD,GAAA,QAAAprB,KAAAqrB,SAAA,UAGA,IAAArrB,KAAAsrB,iBAAA,EAAAlmB,OAAApF,KAAAsrB,iBAAAxb,OAAAxU,SACA8vB,GAAAprB,KAAAsrB,gBAAA,KAMAtrB,KAAAD,OAAAC,KAAAqnB,aACA+D,GAAA,IAAAprB,KAAAqnB,WAAA,cAEA+D,CACA,EAEA,GAIA,GAEAryB,EAAA,qCAAA,CAAA,kCAAA,SAAAwyB,GCrDA,OALAxmB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,iBACAqE,UAAAwB,GAIA,GACAxyB,EAAA,+BAAA,CAAA,sCAAA,SAAA8I,GCuBA,OA9BAkD,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,WACAvb,SAAA,8BAEA8gB,QAAA,CACAza,OAAA,yBAGAsV,SAAA,WACA9lB,KAAAwQ,OAAAI,KAAA,IAAA/O,EAAA,CAAA1B,WAAAH,KAAAf,MAAAgB,IAAA,YACA,EAEA0mB,gBAAA,WACA,MAAA,CACAzc,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,OACA,EAEA,EAEAuf,OAAA,CACA,4BAAA,aAGAmC,UAAA,WACAjrB,QAAAC,QAAA,kBAAAO,QAAA,kBAAAf,KAAAf,MACA,GAKA,GACAlG,EAAA,mCAAA,CAAA,gCAAA,SAAA0yB,GC3BA,OALA1mB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,MACAqE,UAAA0B,GAIA,GACA1yB,EAAA,4BAAA,CAAA,oCAAA,SAAA2yB,GC8DA,OApEA3mB,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,MACAvb,SAAA,0BAEA8gB,QAAA,CACAU,KAAA,0BAGA7rB,WAAA,WAEAE,KAAAG,WAAAH,KAAAf,MAAAgB,IAAA,QAEAD,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,qBAAAR,KAAAijB,OAEA,EAEA6C,SAAA,WACA9lB,KAAA2rB,KAAA/a,KAAA,IAAA8a,EAAA,CAAAvrB,WAAAH,KAAAG,aACA,EAEAwmB,gBAAA,WACA,MAAA,CACAzc,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,OACA,EACA6e,eAAA,WACA,QAAA,IAAA3oB,KAAA4oB,UACA,MAAA,GAIA,IAIAC,EAAAC,EAKAC,EAAAC,EATAxQ,EAAA/Q,SAAAsH,cAAA,KAEA,OADAyJ,EAAA4J,UAAApiB,KAAA4oB,UACA,GAAAxjB,OAAAoT,EAAA+E,WAAAzN,OAAAxU,OAAA,IAGAwtB,EAAArhB,SAAAyH,eAAAlP,KAAA4oB,YACAC,EAAAphB,SAAAsH,cAAA,MACAI,YAAA2Z,GACA,GAAA1jB,OAAAzG,OAAAkqB,GAAArQ,QAAA1I,OAAAxU,QAEAytB,EAAAthB,SAAAmd,cAAAC,yBAAA7kB,KAAA4oB,YACAI,EAAAvhB,SAAAsH,cAAA,QACAwZ,UAAA9jB,IAAA,wBACAukB,EAAA7Z,YAAA4Z,GACAC,EAAAN,WAEA,GAEA,EAEA,EAEAW,OAAA,CACA,yBAAA,UAGAuC,OAAA,WACArrB,QAAAC,QAAA,kBAAAO,QAAA,eAAAf,KAAAf,MAAArB,GACA,EAEAqD,aAAA,WACAjB,KAAAG,WAAAc,aAAAjB,KAAAf,MAAAgB,IAAA,QACA,GAMA,GACAlH,EAAA,oBAAA,CAAA,kBAAA,oBAAA,mBAAA,6BAAA,SAAA8xB,EAAAC,EAAAC,EAAAc,GCRA,OA9DA9mB,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,WAEAuF,QAAA,CACAH,YAAA,mBACAtb,MAAA,YACAub,WAAA,mBAGAjrB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAAijB,OAAAjjB,KACA,EAEAkrB,YAAA,WACA,OAAAlrB,KAAAf,MAAAgB,IAAA,WACA,wBAEA,gBAEA,EAEA6lB,SAAA,WACA9lB,KAAAf,MAAAgB,IAAA,aAEA,YAAAD,KAAAf,MAAAgB,IAAA,QACAD,KAAAwP,MAAAoB,KAAA,IAAAib,EAAA,CAAA5sB,MAAAe,KAAAf,UAEAe,KAAA8qB,YAAAla,KAAA,IAAAka,EAAA,CAAA7rB,MAAAe,KAAAf,SACAe,KAAAwP,MAAAoB,KAAA,IAAAia,EAAA,CAAA5rB,MAAAe,KAAAf,SACAe,KAAA+qB,WAAAna,KAAA,IAAAma,EAAA,CAAA9rB,MAAAe,KAAAf,UAIA,EAEA0nB,gBAAA,WACA,MAAA,CACAwE,qBAAA,WACA,IAAAC,EAAA,UAAAprB,KAAAX,UAAA,IAiBA,YAfA,IAAAW,KAAAqrB,WACAD,GAAA,QAAAprB,KAAAqrB,SAAA,UAGA,IAAArrB,KAAAsrB,iBAAA,EAAAlmB,OAAApF,KAAAsrB,iBAAAxb,OAAAxU,SACA8vB,GAAAprB,KAAAsrB,gBAAA,KAMAtrB,KAAAD,OAAAC,KAAAqnB,aACA+D,GAAA,IAAAprB,KAAAqnB,WAAA,cAGA+D,CACA,EAEA,GAKA,GCxDAryB,EAAA,wBAAA,CAAA,kBAAA,qBAAA,SAAA+yB,EAAAC,GAmBA,OAlBAhnB,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAEAS,QAAAC,QAAA,SAAAsB,MAAA,gBAAA9B,KAAAgsB,cAEAzrB,QAAAC,QAAA,SAAAsB,MAAA,kBAAA9B,KAAAisB,eACA,EAEAD,aAAA,SAAA/sB,GACA,OAAA6sB,CACA,EAEAG,eAAA,WACA,OAAAF,CACA,GAKA,GCvBAhzB,EAAA,yBAAA,GAAA,WA2EA,OA1EAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAIAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,YAAAR,KAAAgE,UACAhE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAiE,aAKA1D,QAAAC,QAAA,QAAAsB,MAAA,aAAA9B,KAAAsP,cACA,EAEAtL,SAAA,SAAAvC,EAAAqE,EAAAomB,GACA,IAAA7rB,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,gBAOA,IAAAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,SACAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA,CAAA,GAGAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA6F,GAAAomB,EAKA3rB,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAmC,QAAA,YAAA,eAAA/B,EAAAJ,IAAA,YAAAksB,wBACA,EAEAloB,YAAA,SAAAxC,EAAAqE,GACA,IAAAzF,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WAEAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAAgC,EAAAmqB,KAAA/rB,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA6F,GAMA,GAAA7D,EAAAK,KAAAjC,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,gBACAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAGA,GAAAgC,EAAAK,KAAAjC,EAAAJ,IAAA,iBAEAM,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAmC,QAAA,eAAA,eAEA,EAEAkN,cAAA,SAAAV,GACA,IAAAvO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAwM,GACAlK,GAAA,EAeA,OAbArE,GAIA,IAAAA,EAAAJ,IAAA,UAAA3E,QACA2G,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA4N,IACA7K,EAAAA,GAAA,CAAA,GACA6K,EAAAtP,IAAA,OAAAsP,EAAAtP,IAAA,MACA,GAKAyE,CACA,GAIA,GC/EA3L,EAAA,qBAAA,GAAA,WA6JA,OA5JAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAqsB,sBACA,EASAA,sBAAA,SAAAhsB,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAA6B,MAAA,SAAA9B,KAAAssB,OACA,EAeAA,OAAA,SAAAjsB,GAMAE,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,GAKA,IAAAksB,EAAAhsB,QAAAC,QAAA,SAAA4B,QAAA,iBAAA/B,GAgBA,IAfA,IAAAksB,IAGAtqB,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAAF,GACAA,EAAAvB,IAAA,SAAA,EACA,GAMAG,EAAAJ,IAAA,mBAAA+B,kBAIA,GADAzB,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAmC,QAAA,eAAA/B,GAIA,OAFAE,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,QACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,GAIA,IAAA,IAAAksB,EAAA,CAGA,IAAAC,EAAAvqB,EAAAmH,OAAA/I,EAAAJ,IAAA,UAAA0B,OAAA,SAAA4N,GAGA,MAAA,iBAAAA,EAAAtP,IAAA,OAAA,kBAAAsP,EAAAtP,IAAA,KAGA,GAMA,GAAA,GAAAgC,EAAAK,KAAAkqB,GAGA,OAFAjsB,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,IACA,CAEA,CAMAE,QAAAC,QAAA,SAAAO,QAAA,yBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,yBAAAV,GAMA,IAAAuO,EAAAvO,EAAAJ,IAAA,MACAuQ,EAAA,CAAA,EACAvO,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA6N,GACA,IAAAid,EAAA,CAAAlwB,MAAAiT,EAAAvP,IAAA,SAAArC,GAAA4R,EAAAvP,IAAA,OAGAuQ,EAAAhB,EAAAvP,IAAA,OAAAM,QAAAC,QAAAgP,EAAAvP,IAAA,SAAAmC,QAAA,iBAAAqqB,EAAAjd,IAAAid,CACA,GACA,IAAAjpB,EAAAnD,EAAAJ,IAAA,SACAqS,EAAAjS,EAAAJ,IAAA,mBACAqS,EAAA5O,gBACA,IAAAgpB,EAAA9G,KAAAC,UAAA,CAAAjoB,GAAAgR,EAAA4B,OAAAA,EAAA8B,SAAAA,EAAA9O,MAAAA,IACA6G,EAAA,CACAuS,OAAA,iBACA+P,SAAA9iB,WAAA0G,UACA/B,SAAA3E,WAAA2E,SACAke,SAAAA,GAKA/tB,OAAAiuB,KAAA,CACAzI,IAAAta,WAAAgjB,UACA9sB,KAAA,OACAsK,KAAAA,EACAyiB,OAAA,EACAC,QAAA,SAAA1iB,EAAAqE,EAAAC,GACA,IACA,IAAAN,EAAAhE,EACA9J,QAAAC,QAAA,SAAAO,QAAA,kBAAAsN,EAAAK,EAAAC,EAAAtO,EAAAJ,IAAA,OACAM,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBAAAsN,EAAAK,EAAAC,GACAhQ,OAAA8I,UAAA1G,QAAA,uBAAA,CAAAsN,SAAAA,EAAAzQ,GAAAyC,EAAAJ,IAAA,OACA,CAAA,MAAAvC,GACA0R,QAAAC,IAAA3R,GACA0R,QAAAC,IAAA,eACAD,QAAAC,IAAA3R,EACA,CAEA,EACA6R,MAAA,SAAAZ,EAAAD,EAAAse,GAEA5d,QAAAC,IAAA,WAAA2d,GACA5d,QAAAC,IAAAV,GAEA,IACA,IAAAN,EAAA1P,OAAAsuB,UAAAte,EAAAue,cACA3sB,QAAAC,QAAA,SAAAO,QAAA,kBAAAsN,EAAAK,EAAAC,EAAAtO,EAAAJ,IAAA,OACAM,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBAAAsN,EAAAK,EAAAC,EACA,CAAA,MAAAjR,GACA0R,QAAAC,IAAA,gBAAAV,EAAAue,cACA3sB,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAmC,QAAA,YAAA,uBAAA4qB,EACA,CAEA,GAGA,GAKA,GAEAj0B,EAAA,wBAAA,CAAA,qBAAA,SAAAwyB,GC5JA,OANAxmB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,iBACAqE,UAAAwB,GAKA,GCAAxyB,EAAA,6BAAA,CAAA,wBAAA,0BAAA,SAAAo0B,EAAArqB,GAuDA,OAtDAiC,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,oBAAAR,KAAAotB,0BACA,EAEAA,0BAAA,SAAA/sB,GAIAE,QAAAC,QAAA,eAAA4B,QAAA,iBAAApC,KAAAqtB,uBAAA,GAAArtB,MAIAO,QAAAC,QAAA,eAAA4B,QAAA,iBAAApC,KAAAstB,uBAAA,GAAAttB,KACA,EAEAqtB,uBAAA,SAAA3pB,EAAArD,EAAAohB,GACA,IAAA5f,EAAAxB,EAAAJ,IAAA,UAIA0D,EAAApD,QAAAC,QAAA,eAAA4B,QAAA,mBAEA,GAAA,GADAH,EAAA4B,QAAAF,OAAAtF,GACA/C,aAAA,IAAAoI,IAAA,GAAAA,aAAA9E,SAAAI,WAAA,OAAAqB,EAAAJ,IAAA,UAEA,IAAAqT,EAAArR,EAAA7G,IAAAsI,EAAA,SAAAY,GACA,OAAAjE,EAAAJ,IAAA,UAAAsE,UAAA,CAAAD,IAAAA,GACA,EAAAtE,MAEAutB,EAAA,IAAAzqB,EAAAwQ,GAgBA,OAdAzR,EAAAD,GAAA,QAAA,SAAAzB,GACA,IAAAqtB,EAAA,GACAD,EAAArrB,KAAA,SAAAT,GACA,UAAAA,EAAAxB,IAAA,QACAutB,EAAArxB,KAAAgE,EAAAoE,UAAA,CAAAD,IAAA7C,EAAAxB,IAAA,UAEAutB,EAAArxB,KAAAsF,EAEA,GAEA8rB,EAAAntB,QAAA,CAAAC,UAAAA,GACAktB,EAAA/a,MAAAgb,EACA,GAEAD,CACA,EAEAD,uBAAA,WACA,OAAAH,CACA,GAKA,GC5DAp0B,EAAA,+BAAA,GAAA,WAyBA,OAxBAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WAMAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,oBAAAR,KAAAiE,aACAjE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAiE,aACAjE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAiE,YAEA,EAEAA,YAAA,SAAAyB,EAAAzG,GACAA,EAAAA,GAAAyG,EAIAnF,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,eACA,GAKA,GACA,IAAAwtB,EAAA,GC9BA10B,EAAA,+BAAA,GAAA,WA4JA,OA3JA6F,SAAAC,MAAAC,OAAA,CAEAgB,WAAA,SAAAK,EAAAC,GAEAJ,KAAAqC,mBAAAjC,EAAAiC,mBAEArC,KAAAE,IAAA,QAAAF,KAAAqC,mBAAApC,IAAA,UAEAE,GAAAC,GACAJ,KAAA0tB,4BAAAvtB,EAAAC,GAGAG,QAAAC,QAAA,kBAAAsB,MAAA,qBAAA9B,KAAA2tB,kBAAA3tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,wBAAA9B,KAAA4tB,qBAAA5tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,qBAAA9B,KAAA6tB,2BAAA7tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,8BAAA9B,KAAA8tB,sBAAA9tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,sCAAA9B,KAAA+tB,8BAAA/tB,MACAA,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,qBAAAR,KAAAguB,4BACAhuB,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,YAAAR,KAAAiuB,sBACA,EAEAD,2BAAA,WACAhuB,KAAAE,IAAA,0BAAAutB,GACAztB,KAAAkuB,4BAAAT,CACA,EAEAC,4BAAA,SAAAvtB,EAAAC,GACA,MAAAwO,EAAAxO,EAAAiC,mBAAApC,IAAA,UACAkuB,EAAA/tB,EAAAiC,mBAAApC,IAAA,MACAmuB,EAAAjuB,EAAAqQ,OAAA7O,OAEA,IAAA0sB,EAAAZ,EAAAtmB,KAAAlI,GAAAA,EAAArB,KAAAuwB,GAAAlvB,EAAAkG,OAAAyJ,GAEAyf,EACAA,EAAA7d,OAAA6d,EAAA7d,OAAA7U,OAAAyyB,GAEAX,EAAAtxB,KAAA,CACAgJ,KAAAyJ,EACAhR,GAAAuwB,EACA3d,OAAA4d,IAIApuB,KAAAguB,4BACA,EAEAH,2BAAA,WACA,OAAAJ,CACA,EAEAK,sBAAA,SAAAlf,GACA,MACA0f,EADAtuB,KAAA6tB,6BACAzkB,OAAAnK,GAAAA,EAAAkG,OAAAyJ,GAEA,OAAA0f,CACA,EAEAP,8BAAA,SAAAnf,GACA,MAAA0f,EAAAtuB,KAAA8tB,sBAAAlf,GACA,IAAA2f,EAAA,GAKA,OAJAD,EAAAlzB,IAAA6D,IACAsvB,EAAAA,EAAA5yB,OAAAsD,EAAAuR,UAGA+d,CACA,EAEAZ,kBAAA,SAAAQ,GACA,MAAAK,EAAAxuB,KAAA6tB,6BACA,IAAArd,EAAAge,EAAArnB,KAAAlI,GAAAmG,OAAAnG,EAAArB,MAAAwH,OAAA+oB,IAKA,YAJA,IAAA3d,IACAA,EAAAxQ,KAAAyuB,6BAAAN,EAAAK,IAGAhe,CACA,EAEAie,6BAAA,SAAAN,EAAAK,GACA,IAAAhe,EASA,OARAvO,EAAAC,KAAAssB,EAAA,SAAAE,GACAzsB,EAAAC,KAAAwsB,EAAAle,OAAA,SAAA/O,GACA2D,OAAA3D,EAAA7D,IAAA+wB,WAAAR,KACA3d,EAAAke,EAEA,EACA,GAEAle,CACA,EAEAod,qBAAA,SAAAhwB,GACA,MAAAuwB,EAAA/oB,OAAAxH,GAAAzC,MAAA,KAAA,GACAyzB,EAAA5uB,KAAA2tB,kBAAAQ,GAEA,QAAA,IAAAS,EAAA,OAIA,OAFAA,EAAApe,OAAArJ,KAAAqI,GAAAA,EAAA5R,KAAAA,EAGA,EAEAqwB,sBAAA,WACA,MAAAY,EAAA7uB,KAAA6tB,6BACAgB,EAAAvzB,OAAA,GAEA2G,EAAAC,KAAA2sB,EAAA,SAAAC,GACA,IAAAte,EAAAse,EAAAte,OACAnO,EAAA9B,QAAAC,QAAA,UAAA4B,QAAA,YAAA0sB,EAAAlxB,IAEA,GAAA4S,EAAAlV,OAAA,EAAA,CACA,IAAAyzB,EAAA,CAAA,EAEA9sB,EAAAC,KAAAsO,EAAA,SAAAhB,GAEA,IAAAjT,EAAAiT,EAAAvP,IAAA,SACArC,EAAA4R,EAAAvP,IAAA,MAEA,GAAArC,EAAAzC,MAAA,KAAAG,OAAA,EAAA,CACA,IAAA0zB,EAAApxB,EAAAzC,MAAA,KACA6zB,EAAA,GAAAA,EAAA,GAAA7zB,MAAA,KAAA,GACA,IAAA8zB,EAAAD,EAAA,GAAA,IAAAA,EAAA,GAAA,IAAAA,EAAA,UACAD,EAAAnxB,GACAA,EAAAqxB,CACA,CAEAF,EAAAnxB,GAAA,CACArB,MAAAA,EACAqB,GAAAA,GAIA,SAAA4R,EAAAvP,IAAA,SAAA,iBAAA1D,GAAA,kBAAAiT,EAAAvP,IAAA,cAAA,cAAAuP,EAAAvP,IAAA,eACA8uB,EAAAnxB,GAAArB,MAAA,CACA6e,KAAA7e,EACAye,KAAAxL,EAAArO,WAAA+F,cACA+T,OAAAzL,EAAArO,WAAAiG,gBACA8T,KAAA1L,EAAArO,WAAAkG,gBAIA,gBAAAmI,EAAAvP,IAAA,SAAAuP,EAAAvP,IAAA,WACA8uB,EAAAnxB,GAAAsxB,MAAA1f,EAAArO,WAAA+tB,MAEA,GAEA7sB,EAAAnC,IAAA,aAAA,GAEAK,QAAAC,QAAA,WAAA4B,QAAA,eAAAC,EAAA0sB,EACA,CACA,EAEA,GAKA,GAEAh2B,EAAA,oCAAA,CAAA,+BAAA,0BAAA,SAAAo2B,EAAAttB,GCvBA,OAxIAjD,SAAAI,WAAAF,OAAA,CACAG,MAAAkwB,EAEArvB,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EAEAJ,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,iBAAAR,KAAAovB,SACApvB,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,kBAAAR,KAAAwrB,WACAxrB,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,eAAAR,KAAA4rB,QACArrB,QAAAC,QAAA,kBAAAsB,MAAA,gBAAA9B,KAAAqvB,aAAArvB,KAEA,EAEA4rB,OAAA,SAAA0D,GAAA,GACA,IAAAR,EACA,GAAAQ,EAAA,CAEA,MAAAjtB,EAAArC,KAAAI,QAAAiC,mBAAAzE,KAAA0xB,GAAAtvB,KAAAI,QAAAiC,mBAEA,GADAysB,EAAAzsB,EACAA,EAAA,CAEA,IAAAmO,EAAA,IAAA3O,EAAA7B,KAAAI,QAAAmvB,eAAA,CAAAlvB,UAAAL,KAAAI,QAAAC,UAAAgC,mBAAAA,IAEArC,KAAAyE,IAAA,CAAA+L,OAAAA,GAAA,CAAAnO,mBAAAA,GACA,CACA,CAEArC,KAAAovB,UACA7uB,QAAAC,QAAA,kBAAAO,QAAA,iBAAA+tB,EACA,EAEAtD,UAAA,SAAAgE,GAEAxvB,KAAAyvB,2BAAAD,GAGA,MAAA5gB,EAAA4gB,EAAAntB,mBAAApC,IAAA,UACAkuB,EAAAqB,EAAAntB,mBAAApC,IAAA,MACAyvB,EAAAjC,EAAAtmB,KAAAwoB,GAAAA,EAAA/xB,KAAAuwB,GAAAwB,EAAAxqB,OAAAyJ,GACA,GAAA8gB,EAAA,CACA,IAAA/qB,EAAA,GACA1C,EAAAC,KAAAwtB,EAAAlf,OAAA,CAAAhB,EAAA5S,UACA,IAAA4S,GACAvN,EAAAC,KAAAstB,EAAAvvB,IAAA,UAAA0B,OAAAiuB,IACA,MAAA1pB,OAAA,IAAAsJ,EAAA5R,GAAA4R,EAAA5R,GAAA4R,EAAAvP,IAAA,MACA2vB,EAAAhyB,KAAAsI,WAEAspB,EAAAntB,mBAAApC,IAAA,SAAA2vB,EAAAhyB,IACA+G,EAAAxI,KAAA+J,QAKAwpB,EAAAlf,OAAAvO,EAAA4tB,OAAAH,EAAAlf,OAAAhB,QACA,IAAAA,KACA7K,EAAAgW,SAAAnL,EAAA5R,KAGA2C,QAAAC,QAAA,kBAAAO,QAAA,qBACA,CAGAf,KAAA2E,OAAA6qB,GACAA,EAAAM,UAGA9vB,KAAAovB,UAGA7uB,QAAAC,QAAA,kBAAAO,QAAA,YACA,EAEA0uB,2BAAA,SAAAD,GACA,IAAAhf,EAAAgf,EAAAvvB,IAAA,UACAgC,EAAAC,KAAAsO,EAAA7O,OAAA,SAAA6N,GACAjP,QAAAC,QAAA,UAAA4B,QAAA,eAAAoN,EAAAvP,IAAA,MAAA,iBACA,EACA,EAEA8vB,aAAA,WACA,OAAA/vB,KAAA2B,MACA,EAEAquB,eAAA,SAAAxgB,GACA,MAAA5R,EAAA4R,EAAAvP,IAAA,MAEAgwB,EAAAxoB,SAAAoJ,eAAA,eAAAjT,GACAsyB,EAAAzoB,SAAAoJ,eAAA,iBAAAjT,GACAuyB,EAAA,IAAA3gB,EAAArO,WAAA8X,SAAA,KAAA,KAEA,IAAAgX,IAAAC,EAAA,OACAA,EAAA3zB,WAAA,IAAAiT,EAAArO,WAAAiG,gBAAAoI,EAAArO,WAAAiG,gBAAA,KACA6oB,EAAA1zB,WAAA,IAAAiT,EAAArO,WAAA+F,cAAAsI,EAAArO,WAAA+F,cAAAipB,EAEA,MACAC,EADA3oB,SAAAoJ,eAAA,YAAAjT,EAAA,SACA8J,cAAA,gBACA0oB,IACAA,EAAA7zB,WAAA,IAAAiT,EAAArO,WAAAkG,cAAAmI,EAAArO,WAAAkG,cAAA,KACA,EAEA+nB,QAAA,WACA,MAAAiB,EAAArwB,KAAA+vB,eACAO,EAAA,GAEAruB,EAAAC,KAAAmuB,EAAA,SAAAb,EAAAe,GACA,IAAA/f,EAAAgf,EAAAvvB,IAAA,UACAuvB,EAAAtvB,IAAA,QAAAqwB,EAAA,GACAtuB,EAAAC,KAAAsO,EAAA7O,OAAA,SAAA6N,GAGA,MAAAghB,EAAAprB,OAAAoK,EAAA5R,IAAAzC,MAAA,KAAA,GAEAs1B,EAAArrB,OAAAorB,GAAAr1B,MAAA,KAAAG,OAAA,GAAA8J,OAAAorB,GAAAr1B,MAAA,KAAA2jB,MAEA,IAAA2R,EAAA,OAEA,MAAAxB,EAAAzf,EAAArP,WAAAC,QAAAiC,mBAAAzE,GAAA,IAAA6yB,EAAA,IAAAF,EACA/gB,EAAAtP,IAAA,KAAA+uB,GAGA,SAAAzf,EAAAvP,IAAA,SAAA,kBAAAuP,EAAAvP,IAAA,cAAA,cAAAuP,EAAAvP,IAAA,cACAqwB,EAAAn0B,KAAAqT,EAGA,EACA,GAEAjP,QAAAC,QAAA,kBAAAO,QAAA,sBAGAuvB,EAAA/Y,QAAA/H,IACAxP,KAAAgwB,eAAAxgB,IAEA,GAIA,GACAzW,EAAA,4BAAA,CAAA,oCAAA,0BAAA,SAAA2yB,EAAA7pB,GCvHA,OAnBAkD,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAA0wB,aACA,EAEAA,aAAA,SAAAzxB,GACA,QAAA,IAAAA,EAAAkB,WAAAC,QAAAC,UACA,OAAA,EAGA,IAAAmQ,EAAA,IAAA3O,EAAA5C,EAAAgB,IAAA,UAAA,CAAAI,UAAApB,EAAAkB,WAAAC,QAAAC,UAAAgC,mBAAApD,IACAA,EAAAiB,IAAA,OAAA,IAAAwrB,EAAA,CAAA,CAAAlb,OAAAA,IAAA,CAAA+e,eAAAtwB,EAAAgB,IAAA,UAAAI,UAAApB,EAAAkB,WAAAC,QAAAC,UAAAgC,mBAAApD,KAEAsB,QAAAC,QAAA,kBAAAO,QAAA,iBACA,GAKA,GACAhI,EAAA,uBAAA,GAAA,WCmCA,OAxDAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAA2wB,kBACA,EAEAA,kBAAA,SAAAtiB,QACA,IAAAA,EAAAhE,KAAA+G,cAAA,IAAA/C,EAAAhE,KAAA+G,QAAAwf,iBAIAviB,EAAAhE,KAAA+G,QAAAwf,gBAAArZ,QAAAqF,IACA,MAAAiU,EAAAjU,EAAAkU,WACA,QAAA,IAAAD,EAKA,QAAA,IAAAjU,EAAAmU,aAAA,QAAAnU,EAAAmU,YACA,GAAA,mBAAAC,KAAA,CACA,MAAAC,EAAA,CACAC,eAAA,cACAC,YAAA,qBACA5f,QAAAlD,EAAAhE,KAAAkH,SAEAyf,KAAA,QAAAH,EAAAI,EACA,KAAA,iBAAAG,UACAhiB,QAAAiiB,KAAA,6FAEAjiB,QAAAiiB,KAAA,kFAEA,QAAA,IAAAzU,EAAAmU,aAAA,QAAAnU,EAAAmU,YAGA,GAAA,iBAAAK,UAAA,CAEA,MAAAH,EAAA,CACAK,MAAAT,EACAK,eAAA,cACAC,YAAA,qBACA5f,QAAAlD,EAAAhE,KAAAkH,SAEA6f,UAAAj1B,KAAA80B,EACA,KAAA,mBAAAD,KACA5hB,QAAAiiB,KAAA,4FAEAjiB,QAAAiiB,KAAA,iFAGAjiB,QAAAiiB,KAAA,kGAnCAjiB,QAAAiiB,KAAA,mFAuCA,GAKA,GAEAt4B,EC3DA,8BAAA,CACA,uBACA,yBACA,0BACA,0BACA,yBACA,4BACA,gCACA,6BACA,yBACA,0BACA,0BACA,2BACA,+BACA,2BACA,0BACA,4BACA,+BACA,0BACA,6BACA,4BACA,0BACA,iCACA,2BACA,yBACA,4BACA,2BACA,kCACA,wBACA,6BACA,+BACA,wBACA,uBACA,2BACA,+BACA,8BACA,yBACA,iCACA,wBACA,yBACA,qBACA,6BACA,+BACA,4BACA,wBAEA,SACAw4B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAuEA,OArEAnvB,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAKA,IAAA8zB,EACA,IAAAC,EACA,IAAAC,EAKA,IAAAlC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAW,EACA,IAAAE,EACA,IAAAC,EACA,IAAAC,EACA,IAAAI,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAK,EACA,IAAAC,EAKA,IAAAzC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EAEA,IAAAM,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,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","file":"front-end.js","sourcesContent":["(function () {\n","/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\ndefine(\"../../../node_modules/almond/almond\", function(){});\n\n","define( 'models/fieldErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/fieldErrorCollection',['models/fieldErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/fieldModel',['models/fieldErrorCollection'], function( fieldErrorCollection ) {\n\tvar model = Backbone.Model.extend( {\n\t\tdefaults: {\n\t\t\tplaceholder: '',\n\t\t\tvalue: '',\n\t\t\tlabel_pos: '',\n\t\t\tclasses: 'ninja-forms-field',\n\t\t\treRender: false,\n\t\t\tmirror_field: false,\n\t\t\tconfirm_field: false,\n\t\t\tclean: true,\n\t\t\tdisabled: '',\n\t\t\tvisible: true,\n\t\t\tinvalid: false\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tvar type = this.get('type');\n\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'reset', this.resetModel );\n\n \t\tthis.bind( 'change', this.changeModel, this );\n \t\tthis.bind( 'change:value', this.changeValue, this );\n \t\tthis.set( 'errors', new fieldErrorCollection() );\n\n\t\t\tif (type === 'listimage') {\n\t\t\t\tthis.get = this.listimageGet;\n\t\t\t\tthis.set = this.listimageSet;\n\t\t\t}\n\n \t\t/*\n\t\t\t * Trigger an init event on two channels:\n\t\t\t * \n\t\t\t * fields\n\t\t\t * field-type\n\t\t\t *\n\t\t\t * This lets specific field types modify model attributes before anything uses them.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'init:model', this );\n\n\t\t\tif( 'undefined' != typeof this.get( 'parentType' ) ){\n\t\t\t\tnfRadio.channel( this.get( 'parentType' ) ).trigger( 'init:model', this );\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * When we load our form, fire another event for this field.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'loaded', this.formLoaded );\n\t\t\n\t\t\t/*\n\t\t\t * Before we submit our form, send out a message so that this field can be modified if necessary.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'before:submit', this.beforeSubmit );\n\t\t},\n\n\t\tlistimageGet: function(attr) {\n if(attr === 'options') {\n\t\t\t\t\tattr = 'image_options';\n\t\t\t}\n\n return Backbone.Model.prototype.get.call(this, attr);\n\t\t},\n\t\t\n\t\tlistimageSet: function(attributes, options) {\n\t\t\tif ('options' === attributes) {\n\t\t\t\tattributes = 'image_options';\n\t\t\t}\n\t\t\treturn Backbone.Model.prototype.set.call(this, attributes, options);\n\t\t},\n\n\t\tchangeModel: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:model', this );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:modelValue', this );\n\t\t},\n\n\t\taddWrapperClass: function( cl ) {\n\t\t\tthis.set( 'addWrapperClass', cl );\n\t\t},\n\n\t\tremoveWrapperClass: function( cl ) {\n\t\t\tthis.set( 'removeWrapperClass', cl );\n\t\t},\n\n\t\tsetInvalid: function( invalid ) {\n\t\t\tthis.set( 'invalid', invalid );\n\t\t},\n\n\t\tformLoaded: function() {\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'formLoaded', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'formLoaded', this );\n\t\t},\n\n\t\tbeforeSubmit: function( formModel ) {\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'before:submit', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'before:submit', this );\n\t\t},\n\n\t\t/**\n\t\t * Return the value of this field.\n\t\t * This method exists so that more complex fields can return more than just the field value.\n\t\t * Those advanced fields should create their own method with this name.\n\t\t * \n\t\t * @since 3.5\n\t\t * @return {string} Value of this field.\n\t\t */\n\t\tgetValue: function() {\n\t\t\treturn this.get( 'value' );\n\t\t}\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldCollection',['models/fieldModel'], function( fieldModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: fieldModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n this.on( 'reset', function( fieldCollection ){\n nfRadio.channel( 'fields' ).trigger( 'reset:collection', fieldCollection );\n }, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:firstFieldByOrder', this.getFirstFieldByOrder );\n\t\t},\n\n\t\tvalidateFields: function() {\n\t\t\t_.each( this.models, function( fieldModel ) {\n\t\t\t\tif(fieldModel.get(\"type\") === \"repeater\"){\n\t\t\t\t\tconst repeaterModels = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldsModelsArrayByForm', fieldModel.get('formID') );\n\t\t\t\t\t_.each( repeaterModels, function( repeaterFieldModel ) {\n\t\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\t\trepeaterFieldModel.set( 'clean', false );\n\t\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', repeaterFieldModel );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\tfieldModel.set( 'clean', false );\n\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', fieldModel );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t\t//Focus the first invalid input when found\n\t\t\tvar formModel = nfRadio.channel( 'form-' + this.models[0].get( 'formID' ) ).request( 'get:form' );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t},\n\n\t\tshowFields: function() {\n\t\t\tthis.invoke( 'set', { visible: true } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\thideFields: function() {\n\t\t\tthis.invoke( 'set', { visible: false } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\tgetFirstFieldByOrder: function( ids_array ) {\n\t\t\tlet targetID = 0;\n\t\t\t//Loop through an array of fieldIDs to return the one that is positioned first\n\t\t\t_.each(ids_array, function( id ) {\n\t\t\t\t//Get field order\n\t\t\t\tconst order = nfRadio.channel( 'fields' ).request( 'get:field', id ).get('order');\n\t\t\t\t//Set it as the target when the lowest order is found\n\t\t\t\ttargetID = (targetID === 0 || order < targetID) ? id : targetID;\n\t\t\t});\n\n\t\t\treturn targetID;\n\t\t}\n\t} );\n\treturn collection;\n} );\n\n","define( 'models/formErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/formErrorCollection',['models/formErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/formModel',[\n\t'models/fieldCollection',\n\t'models/formErrorCollection'\n\t], function(\n\t\tFieldCollection,\n\t\tErrorCollection\n\t) {\n\tvar model = Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tbeforeForm: '',\n\t\t\tafterForm: '',\n\t\t\tbeforeFields: '',\n\t\t\tafterFields: '',\n\t\t\twrapper_class: '',\n\t\t\telement_class: '',\n\t\t\thp: '',\n\t\t\tfieldErrors: {},\n\t\t\textra: {}\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\t// Loop over settings and map to attributes\n\t\t\t_.each( this.get( 'settings' ), function( value, setting ) {\n\t\t\t\tthis.set( setting, value );\n\t\t\t}, this );\n\n\t\t\tthis.set( 'loadedFields', this.get( 'fields' ) );\n\t\t\tthis.set( 'fields', new FieldCollection( this.get( 'fields' ), { formModel: this } ) );\n\t\t\tthis.set( 'errors', new ErrorCollection() );\n\n\t\t\t/*\n\t\t\t * Send out a radio message so that anyone who wants to filter our content data can register their filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).trigger( 'before:filterData', this );\n\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.get( 'formContentData' );\n\n\t\t\t/*\n\t\t\t * The formContentData variable used to be fieldContentsData.\n\t\t\t * If we don't have a 'formContentData' setting, check to see if we have an old 'fieldContentsData'.\n\t\t\t * \n\t\t\t * TODO: This is for backwards compatibility and should be removed eventually. \n\t\t\t */\n\t\t\tif ( ! formContentData ) {\n\t\t\t\tformContentData = this.get( 'fieldContentsData' );\n\t\t\t}\n\t\t\t\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentData = callback( formContentData, this, this );\n\t\t\t\n\t\t\tthis.set( 'formContentData', formContentData );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'init:model', this );\n\n\t\t\t// Fields\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:fieldByKey', this.getFieldByKey, this );\n\n\t\t\t// Form Errors\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:error', this.addError, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:error', this.removeError, this );\n\n\t\t\t// Extra Data\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:extra', this.getExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:extra', this.addExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:extra', this.removeExtra, this );\n\t\t\n\t\t\t// Respond to requests to get this model.\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:form', \t this.getForm, \t this );\n\n\t\t\tnfRadio.channel( 'form' ).trigger( 'loaded', this );\n\t\t\tnfRadio.channel( 'form' ).trigger( 'after:loaded', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'loaded', \t this );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Fields\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetFieldByKey: function( key ) {\n\t\t\treturn this.get( 'fields' ).findWhere( { key: key } );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Form Errors\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\taddError: function( id, msg ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\terrors.add( { id: id, msg: msg } );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:error', this, id, msg );\n\t\t},\n\n\t\tremoveError: function( id ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\tvar errorModel = errors.get( id );\n\t\t\terrors.remove( errorModel );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:error', this, id );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Extra Data\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tif( 'undefined' == typeof key ) return extraData;\n\t\t\treturn extraData[ key ];\n\t\t},\n\n\t\taddExtra: function( key, value ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\textraData[ key ] = value;\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:extra', this, key, value );\n\t\t},\n\n\t\tremoveExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tdelete extraData[ key ];\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:extra', this, key );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Get this form\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\t\tgetForm: function() {\n\t\t\treturn this;\n\t\t}\n\t} );\n\n\treturn model;\n} );\n","define( 'models/formCollection',['models/formModel'], function( formModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: formModel\n\t} );\n\treturn collection;\n} );\n","/*\n * Handles setting up our form.\n *\n * Holds a collection of our fields.\n * Replies to requests for field data.\n * Updates field models.\n */\ndefine('controllers/formData',['models/formModel', 'models/formCollection', 'models/fieldCollection', 'models/formErrorCollection'], function( FormModel, FormCollection, FieldCollection, ErrorCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\t/*\n\t\t\t * Setup our field collections.\n\t\t\t */\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Initialize our form collection (incase we have multiple forms on the page)\n\t\t\t */\n\t\t\tthis.collection = new FormCollection( nfForms );\t\t\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'loaded', this.collection );\n\t\t\tnfRadio.channel( 'app' ).trigger( 'forms:loaded', this.collection );\n\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:form', this.getForm, this );\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:forms', this.getForms, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:field', this.getField, this );\n\t\t},\n\n\t\tgetForm: function( id ) {\n\t\t\treturn this.collection.get( id );\n\t\t},\n\n\t\tgetForms: function() {\n\t\t\treturn this.collection;\n\t\t},\n\n\t\tgetField: function( id ) {\n\t\t\tvar model = false;\n\t\t\t\n\t\t\t_.each( this.collection.models, function( form ) {\n\t\t\t\tif ( ! model ) {\n\t\t\t\t\tmodel = form.get( 'fields' ).get( id );\t\n\t\t\t\t}\t\t\t\n\t\t\t} );\n\n\t\t\tif(typeof model == \"undefined\" && String(id).indexOf('.') !== -1){\n\t\t\t\tmodel = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldById', id );\n\t\t\t}\n\t\t\t\n\t\t\treturn model;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldError',['models/fieldErrorModel'], function( fieldErrorModel ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'fields' ).reply( 'add:error', this.addError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'remove:error', this.removeError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:error', this.getError );\n\t\t},\n\n\t\taddError: function( targetID, id, msg ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\terrors.add( { 'id': id, 'msg' : msg } );\n\t\t\tmodel.set( 'errors', errors );\n\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\tmodel.set( 'clean', false );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'add:error', model, id, msg );\n\t\t},\n\n\t\tremoveError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\n\t\t\tif ( 'undefined' != typeof targetError ) {\n\t\t\t\terrors.remove( targetError );\n\t\t\t\tmodel.set( 'errors', errors );\n\t\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\t\tnfRadio.channel( 'fields' ).trigger( 'remove:error', model, id );\n\t\t\t}\n\t\t},\n\n\t\tgetError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\t\t\tif ( 'undefined' != targetError ) {\n\t\t\t\treturn targetError;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for replying to a Radio request stating that a field has been changed.\n *\n * This controller sends out a message to the field-specific channel, the field type channel,\n * and the public fields channel so that the data model can be updated.\n */\n\ndefine('controllers/changeField',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Reply to our request for changing a field.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'change:field', this.changeField );\n\n\t\t\t/*\n\t\t\t * If we blur our field, set the model attribute of 'clean' to false.\n\t\t\t * 'clean' tracks whether or not the user has every interacted with this element.\n\t\t\t * Some validation, like required, uses this to decide whether or not to add an error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.blurField );\n\t\t},\n\n\t\tchangeField: function( el, model ) {\n\t\t\t// Get our current value.\n\t\t\tvar value = nfRadio.channel( model.get( 'type' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : nfRadio.channel( model.get( 'parentType' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : jQuery( el ).val();\n\n\t\t\t// Set our 'isUpdated' flag to false.\n\t\t\tmodel.set( 'isUpdated', false );\n\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\n\t\t\t/*\n\t\t\t * Send out a message saying that we've changed a field.\n\t\t\t * The first channel is field id/key specific.\n\t\t\t * The second channel is the field type, i.e. text, email, radio\n\t\t\t * The third channel is a generic 'field' channel.\n\t\t\t *\n\t\t\t * If the submitted value you wish to store in the data model isn't the same as the value received above,\n\t\t\t * you can set that model in the actions below and set the 'isUpdated' model attribute to true.\n\t\t\t * i.e. model.set( 'isUpdated', true );\n\t\t\t */\n\t\t\tnfRadio.channel( 'field-' + model.get( 'id' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( model.get( 'type' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:field', el, model );\n\n\t\t\t/*\n\t\t\t * Send a request out on our nfAdmin channel to update our field model.\n\t\t\t * If the field model has a 'isUpdated' property of false, nothing will be updated.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', model, value );\n\n\t\t\t/*\n\t\t\t * If the field is in a repeater, update the repeater Value\n\t\t\t */\n\t\t\tif(model.get(\"repeaterField\")){\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t\t}\n\t\t},\n\n\t\tblurField: function( el, model ) {\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeEmail',[], function() {\n\tvar radioChannel = nfRadio.channel( 'email' );\n\t// var emailReg = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\n\tvar emailReg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\tvar errorID = 'invalid-email';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.emailKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar value = jQuery( el ).val();\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\temailChange: function( value, fieldID ) {\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\tif( emailReg.test( value ) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an email field, track their keypresses and add the appropriate class.\n\t\t * If the value validates as an email, add a class of nf-pass\n\t\t * If the value does not validate as email, add a class of nf-fail\n\t\t * \n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\temailKeyup: function( el, model, keyCode ) {\n\t\t\t\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid email.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t} else if ( ! emailReg.test( value ) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t} else if ( emailReg.test( value ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeDate',[], function() {\n\tvar radioChannel = nfRadio.channel( 'date' );\n\tvar errorID = 'invalid-date';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.dateKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t\t\n\t\t\tthis.listenTo( radioChannel, 'change:extra', this.changeHoursMinutes, this)\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tdateChange: function( model ) {\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\t// If we are dealing with purely a time field, bail early.\n\t\t\tif ( 'time_only' == model.get( 'date_mode' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\t\tif( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an dat field, track their keypresses\n\t\t * and add the appropriate class.\n\t\t * If the value validates as an date, add a class of nf-pass\n\t\t * If the value does not validate as date, add a class of nf-fail\n\t\t *\n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\tdateKeyup: function( el, model, keyCode ) {\n\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t* Get our current date format\n\t\t\t */\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid date.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( ! this.isDateValid(value, format, fieldID) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tchangeHoursMinutes: function( e, fieldModel ) {\n\t\t\tlet type = '';\n\t\t\tlet container = jQuery( e.target ).closest( '.nf-field-element' );\n\n\t\t\t// Set our hour, minute, and ampm\n\t\t\tlet selected_hour = jQuery( container ).find( '.hour' ).val();\n\t\t\tlet selected_minute = jQuery( container ).find( '.minute' ).val();\n\t\t\tlet selected_ampm = jQuery( container ).find( '.ampm' ).val();\n\n\t\t\tfieldModel.set( 'selected_hour', selected_hour );\n\t\t\tfieldModel.set( 'selected_minute', selected_minute );\n\t\t\tfieldModel.set( 'selected_ampm', selected_ampm );\n\n\t\t\tif ( 'time_only' === fieldModel.get( 'date_mode' ) ) {\n\t\t\t\tconst setValue = typeof selected_ampm !== \"undefined\" ?\n\t\t\t\t\tselected_hour + \":\" + selected_minute + \" \" + selected_ampm :\n\t\t\t\t\tselected_hour + \":\" + selected_minute;\n\n\t\t\t\tfieldModel.set( 'value', setValue );\n\t\t\t}\n\n\t\t\t// Detect time field inside a repeatable fieldset field to set correct value\n\t\t\tconst fieldId = fieldModel.get( 'id' );\n\t\t\tif(typeof fieldId === 'string' && fieldId.search(\".\") !== -1){\n\t\t\t\tnfRadio.channel('field-repeater').trigger('set:value');\n\t\t\t}\n\t\t},\n\n\t\tisDateValid: function(value, format, fieldID){\n\t\t\tif(document.querySelector(\"[name='nf-field-\" + fieldID + \"']\") === null) return;\n\t\t\t//Get Date and Timestamp using the precise flatPickr instance of the field to catch the locale\n\t\t\tconst parseDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.parseDate(value, format);\n\t\t\t// If parsedDate is undefined, the date is invalid\n\t\t\tif (!parseDate) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst timestamp = parseDate.getTime();\n\t\t\tif (isNaN(timestamp)) {\n\t\t\t\treturn false; // Invalid date\n\t\t\t}\n\t\t\t//Convert timestamp back to Date object and string\n\t\t\tconst parsedDate = new Date(timestamp);\n\t\t\tconst formattedDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.formatDate(parsedDate, format);\n\t\t\t// Check vlaue and date string are deeply equals\n\t\t\treturn formattedDate === value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * When we init our checkbox model, register our renderClasses() function\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'checkbox' ), 'init:model', this.registerRenderClasses );\n\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:required', this.validateRequired );\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:modelData', this.validateModelData );\n nfRadio.channel( 'checkbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'checkbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tbeforeUpdateField: function( el, model ) {\n\t\t\tvar checked = jQuery( el ).prop( 'checked' );\n\t\t\tif ( checked ) {\n\t\t\t\tvar value = 1;\n\t\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\t\t\t} else {\n\t\t\t\tvar value = 0;\n\t\t\t\tjQuery( el ).removeClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\treturn el[0].checked;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\t\t\treturn model.get( 'value' ) != 0;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tif ( 1 == fieldModel.get( 'value' ) ) {\n\t\t\t\tcalcValue = fieldModel.get( 'checked_calc_value' );\n\t\t\t} else {\n\t\t\t\tcalcValue = fieldModel.get( 'unchecked_calc_value' );\n\t\t\t}\n\n\t\t\treturn calcValue;\n\t\t},\n\n\t\tregisterRenderClasses: function( model ) {\n\t\t\tif ( 'checked' == model.get( 'default_value' ) ) {\n\t\t\t\tmodel.set( 'value', 1 );\n\t\t\t} else {\n\t\t\t\tmodel.set( 'value', 0 );\n\t\t\t}\n\t\t\tmodel.set( 'customClasses', this.customClasses );\n\t\t\tmodel.set( 'customLabelClasses', this.customLabelClasses );\n\t\t\tmodel.set( 'maybeChecked', this.maybeChecked );\n\t\t},\n\n\t\tcustomClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tcustomLabelClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked-label';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked-label', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tmaybeChecked: function() {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\treturn ' checked';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckboxList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listcheckbox' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n nfRadio.channel( 'listcheckbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'terms' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listcheckbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n nfRadio.channel( 'terms' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'options' ).length ) {\n var selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n\n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n _.each( this.options, function( option, index ) {\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], option.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, option.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( option.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.fieldID = this.id;\n option.classes = this.classes;\n option.index = index;\n option.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n \n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), option.value )\n\t\t || -1 !== _.indexOf( this.value, option.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == option.selected && this.clean ) && 'undefined' === typeof this.value ) {\n\t\t selected = true;\n\t }\n\n\n // else if( ( option.selected && \"0\" != option.selected ) && this.clean ){\n\t // isSelected = true;\n\t // } else {\n\t // var testValues = _.map( this.value, function( value ) {\n\t // return value.toString();\n\t // } );\n\t //\n\t // option.isSelected = ( -1 != testValues.indexOf( option.value.toString() ) );\n\t // }\n\t option.selected = selected;\n\t option.isSelected = selected;\n\t option.required = this.required;\n option.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-option' );\n html += template( option );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n var calc_value = 0;\n var options = fieldModel.get( 'options' );\n if ( 0 != options.length ) {\n _.each( fieldModel.get( 'value' ), function( val ) {\n var tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n calc_value = Number( calc_value ) + Number( tmp_opt.calc );\n } );\n }\n return calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n \tvar optionArray = typeof selected[0] !== \"undefined\" ? selected[0].split( ',' ) : [];\n \tvar valueIndex = optionArray.indexOf( value );\n \tif( -1 !== valueIndex) {\n \t\toptionArray.splice( valueIndex, 1 );\n\t }\n \tselected = optionArray.join( ',' );\n }\n }\n\n // if ( 1 == model.get( 'show_other' ) ) {\n // model.set( 'reRender', true );\n // }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldImageList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listimage' ), 'init:model', this.register );\n nfRadio.channel( 'listimage' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listimage' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'image_options' ).length ) {\n var selected = _.filter( model.get( 'image_options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n \n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n if (this.allow_multi_select === 1) {\n this.old_classname = 'list-checkbox';\n this.image_type = 'checkbox';\n } else {\n this.image_type = 'radio';\n }\n\n if(this.list_orientation === 'horizontal') {\n this.flex_direction = 'row';\n } else {\n this.flex_direction = 'column';\n }\n var that = this;\n\n var num_columns = parseInt(this.num_columns) || 1;\n var current_column = 1;\n var current_row = 1;\n \n _.each( this.image_options, function( image, index ) {\n if (!this.show_option_labels) {\n image.label = '';\n } else {\n image.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(image.label) : image.label;\n }\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], image.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, image.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( image.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof image.visible ) {\n image.visible = true;\n }\n \n if(that.list_orientation === 'horizontal' && current_column <= num_columns) {\n image.styles = \"margin:auto;grid-column: \" + current_column + \"; grid-row = \" + current_row;\n\n if(current_column === num_columns) {\n current_column = 1;\n current_row += 1;\n } else {\n current_column += 1;\n }\n }\n\n image.image_type = that.image_type; \n image.fieldID = this.id;\n image.classes = this.classes;\n image.index = index;\n\n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), image.value )\n\t\t || -1 !== _.indexOf( this.value, image.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && image.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == image.selected && this.clean ) && ('undefined' === typeof this.value || '' === this.value)) {\n\t\t selected = true;\n\t }\n\n\t image.selected = selected;\n\t image.isSelected = selected;\n\t image.required = this.required;\n image.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-option' );\n html += template( image );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n value: this.value,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 1 == parseInt( fieldModel.get( 'allow_multi_select' ) ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a selcted value, use it.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n\n if(model.get('allow_multi_select') !== 1) {\n var selected = jQuery( el ).val();\n var options = model.get('image_options');\n _.each(options, function(option, index) {\n if(option.value === selected) {\n option.isSelected = true;\n option.selected = true;\n } else {\n option.isSelected = false;\n option.selected = false;\n }\n if(!option.isSelected) {\n option.selected = false;\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked-label');\n } else {\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked-label');\n }\n });\n } else {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n var optionArray = selected[0].split( ',' );\n var valueIndex = optionArray.indexOf( value );\n if( -1 !== valueIndex) {\n optionArray.splice( valueIndex, 1 );\n }\n selected = optionArray.join( ',' );\n }\n }\n }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRadio',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:modelValue', this.changeModelValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'init:model', this.register );\n\t\t\tnfRadio.channel( 'listradio' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:field', this.updateCheckedClass, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherText', this.renderOtherText );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\n\t\t\t\tif ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', selected.value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tchangeModelValue: function( model ) {\n\t\t\tif ( 1 == model.get( 'show_other' ) ) {\n\t\t\t\t// model.set( 'reRender', true );\n\t\t\t\tmodel.trigger( 'reRender');\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\t\t\tif ( '' == this.value ) {\n\t\t\t\tvar valueFound = true;\n\t\t\t} else {\n\t\t\t\tvar valueFound = false;\n\t\t\t}\n\t\t\t\n\t\t\t_.each( this.options, function( option, index ) {\n\t\t\t\tif ( option.value == this.value ) {\n\t\t\t\t\tvalueFound = true;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.selected = false;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.index = index;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\toption.required = this.required;\n\n\t\t\t\t/*\n\t\t\t\t * If we haven't edited this field yet, use the default checked\n\t\t\t\t */\n\t\t\t\tif ( this.clean && 1 == this.selected ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else if ( this.value == option.value ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-option' );\n\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\tif ( 1 == this.show_other ) {\n\t\t\t\tif ( 'nf-other' == this.value ) {\n\t\t\t\t\tvalueFound = false;\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.id,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.value,\n\t\t\t\t\trenderOtherText: this.renderOtherText,\n\t\t\t\t\tvalueFound: valueFound\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other' );\n\t\t\t\thtml += template( data );\n\t\t\t}\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherText: function() {\n\t\t\tif ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n\t\t\t\tif ( 'nf-other' == this.currentValue ) {\n\t\t\t\t\tthis.currentValue = '';\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.fieldID,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.currentValue\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other-text' );\n\t\t\t\treturn template( data );\n\t\t\t}\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t\n /*\n * Default to 0, in case we have no selection.\n */\n var calc_value = 0;\n \n\t\t\tif ( 0 != fieldModel.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( fieldModel.get( 'options' ), function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t},\n\n\t\tupdateCheckedClass: function( el, model ) {\n\t\t\tjQuery( '[name=\"' + jQuery( el ).attr( 'name' ) + '\"]' ).removeClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'ul' ).find( 'label' ).removeClass( 'nf-checked-label' );\n\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'li' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldNumber',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'number' ), 'init:model', this.maybeMinDefault );\n this.listenTo( nfRadio.channel( 'number' ), 'keyup:field', this.validateEntry );\n },\n\n maybeMinDefault: function( model ) {\n\n if( '' == model.get( 'value' ) && '' == model.get( 'placeholder' ) ){\n var min = model.get( 'num_min' );\n model.set( 'placeholder', min );\n }\n },\n\n validateEntry: function( el, model ) {\n var $el = jQuery( el );\n var val = $el.val();\n var floatVal = parseFloat( val );\n var min = $el.attr( 'min' );\n var max = $el.attr( 'max' );\n var step = $el.attr( 'step' ) ? $el.attr( 'step' ) : '1';\n\n if( min && floatVal < min ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-min', formModel.get( 'settings' ).fieldNumberNumMinError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-min' );\n }\n\n if ( max && floatVal > max ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-max', formModel.get( 'settings' ).fieldNumberNumMaxError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-max' );\n }\n\n let testVal = val.split('.');\n testVal = typeof(testVal[1]) !== 'undefined' ? testVal[1].length : 0;\n let testStep = step.split('.');\n testStep = typeof(testStep[1]) !== 'undefined' ? testStep[1].length : 0;\n let factor = Math.pow(10, testStep);\n\n if( step && val && ( testVal > testStep\n || 0 !== parseInt((factor * floatVal).toFixed()) % parseInt((factor * parseFloat(step)).toFixed()) ) ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-step', formModel.get( 'settings' ).fieldNumberIncrementBy + step );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-step' );\n }\n }\n\n });\n\n return controller;\n} );\n","define( 'controllers/mirrorField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\n\tvar controller = Marionette.Object.extend( {\n\t\tlisteningModel: '',\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerMirror );\n\t\t},\n\n\t\tregisterMirror: function( model ) {\n\t\t\tif ( model.get( 'mirror_field' ) ) {\n\t\t\t\tthis.listeningModel = model;\n\t\t\t\tvar targetID = model.get( 'mirror_field' );\n\t\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetID ), 'change:modelValue', this.changeValue );\n\t\t\t}\n\t\t},\n\n\t\tchangeValue: function( targetModel ) {\n\t\t\tthis.listeningModel.set( 'value', targetModel.get( 'value' ) );\n\t\t\t// this.listeningModel.set( 'reRender', true );\n\t\t\tthis.listeningModel.trigger( 'reRender' );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define( 'controllers/confirmField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar errorID = 'confirm-mismatch';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerConfirm );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.confirmKeyup );\n\t\t},\n\n\t\tregisterConfirm: function( confirmModel ) {\n\t\t\tif ( ! confirmModel.get( 'confirm_field' ) ) return;\n\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', function( formModal ){\n\t\t\t\tthis.registerConfirmListeners( confirmModel );\n\t\t\t});\n\t\t},\n\n\t\tregisterConfirmListeners: function( confirmModel ) {\n\t\t\t\n\t\t\tvar targetModel = nfRadio.channel( 'form-' + confirmModel.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\n\t\t\t//TODO: Add better handling for password confirm fields on the front end.\n\t\t\tif( 'undefined' == typeof targetModel ) return;\n\n\t\t\ttargetModel.set( 'confirm_with', confirmModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + confirmModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t},\n\n\t\tchangeValue: function( model ) {\n\t\t\tif ( 'undefined' == typeof model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t} else {\n\t\t\t\tvar targetModel = model;\n\t\t\t\tvar confirmModel = radioChannel.request( 'get:field', targetModel.get( 'confirm_with' ) );\n\t\t\t}\n\t\t\tvar targetID = targetModel.get( 'id' );\n\t\t\tvar confirmID = confirmModel.get( 'id' );\n\n\t\t\tif ( '' == confirmModel.get( 'value' ) || confirmModel.get( 'value' ) == targetModel.get( 'value' ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t} else {\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t}\n\t\t},\n\t\t\n\t\tconfirmKeyup: function( el, model, keyCode ) {\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tif ( model.get( 'confirm_field' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar confirmID = model.get( 'id' );\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t\tvar compareValue = targetModel.get( 'value' );\n\t\t\t\tvar confirmValue = currentValue;\n\t\t\t} else if ( model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'confirm_with' ) );\n\t\t\t\tvar confirmID = confirmModel.get( 'id' );\n\t\t\t\tvar confirmValue = confirmModel.get( 'value' );\n\t\t\t\tvar compareValue = confirmValue;\n\t\t\t}\n\n\t\t\tif ( 'undefined' !== typeof confirmModel ) {\n\t\t\t\tif ( '' == confirmValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else if ( currentValue == compareValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/updateFieldModel',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'update:field', this.updateField );\n\t\t},\n\n\t\tupdateField: function( model, value ) {\n\t\t\tif ( ! model.get( 'isUpdated' ) ) {\n\t\t\t\tmodel.set( 'value', value );\n\t\t\t\tmodel.set( 'isUpdated', true );\n\t\t\t\t/*\n\t\t\t\t * If we're working with an array, it won't trigger a change event on the value attribute.\n\t\t\t\t * Instead, we have to manually trigger a change event.\n\t\t\t\t */ \n\t\t\t\tif ( _.isArray( value ) ) {\n\t\t\t\t\tmodel.trigger( 'change:value', model );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitButton',['controllers/submitButton'], function( submitButton ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tbound: {},\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'init:model', this.registerHandlers );\n\t\t},\n\n\t\tregisterHandlers: function( fieldModel ) {\n\t\t\tif ( 'undefined' != typeof this.bound[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'click:field', this.click, this );\n\t\t\t/*\n\t\t\t * Register an interest in the 'before:submit' event of our form.\n\t\t\t */\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'before:submit', this.beforeSubmit, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:failed', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:response', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'enable:submit', this.maybeEnable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'disable:submit', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'processingLabel', this.processingLabel, fieldModel );\n\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.maybeEnable, fieldModel );\n\t\t\t\n\t\t\tthis.bound[ fieldModel.get( 'id') ] = true;\n\t\t},\n\n\t\tclick: function( e, fieldModel ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'submit', formModel );\n\t\t},\n\n\t\tbeforeSubmit: function() {\n\t\t\tif(this.get('disabled')) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'formID' ) ).trigger( 'processingLabel', this );\n\t\t},\n\n\t\tmaybeDisable: function( fieldModel ) {\n\n\t\t\tif( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tmaybeEnable: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * If the field reporting the error is not on the same form as the submit button, return false;\n\t\t\t */\n\t\t\tif ( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', this.get( 'formID' ) );\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\tthis.set( 'disabled', false );\n\t\t\t\tthis.trigger( 'reRender' );\n\t\t\t}\n\t\t},\n\n\t\tprocessingLabel: function() {\n\n\t\t\tthis.set( 'oldLabel', this.get( 'label' ) );\n\t\t\tthis.set( 'label', this.get( 'processing_label' ) );\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tresetLabel: function( response ) {\n\t\t\tif ( 'undefined' != typeof response.errors &&\n\t\t\t\t 'undefined' != typeof response.errors.nonce &&\n\t\t\t\t _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Do not reset label for nonce errors, which will re-submit the form.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n\t\t\t\tthis.set( 'label', this.get( 'oldLabel' ) );\n\t\t\t}\n\t\t\tthis.set( 'disabled', false );\n\t\t\tthis.trigger( 'reRender' );\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitDebug',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitDebug );\n },\n\n submitDebug: function( response, textStatus, jqXHR, formID ) {\n\n if( 'undefined' == typeof response.debug ) return;\n\n /* Form Debug Messages */\n if( 'undefined' != typeof response.debug.form ) {\n var debugMessages = document.createElement( 'span' );\n _.each(response.debug.form, function (message, index) {\n var messageText = document.createTextNode( message );\n debugMessages.appendChild( messageText );\n debugMessages.appendChild(\n document.createElement( 'br' )\n );\n });\n jQuery('.nf-debug-msg').html( debugMessages );\n }\n\n /* Console Debug Messages */\n if( 'undefined' != typeof response.debug.console ) {\n var style = '';\n console.log( '%c%s', style, 'NINJA SUPPORT' );\n _.each(response.debug.console, function (message, index) {\n console.log( message );\n });\n console.log( '%c%s', style, 'END NINJA SUPPORT' );\n }\n }\n\n });\n\n return controller;\n} );\n\n","define('controllers/getFormErrors',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function( model ) {\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\t\tif ( field.get( 'type' ) != 'submit' && field.get( 'errors' ).length > 0 ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ field.get( 'id' ) ] = field.get( 'errors' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn errors;\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","define('controllers/validateRequired',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.validateKeyup );\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.validateModelData );\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'validate:field', this.validateModelData );\n\t\t},\n\t\t\n\t\tvalidateKeyup: function( el, model, keyCode ) {\n\t\t\tif ( 1 != model.get( 'required' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( ! model.get( 'clean' ) ) {\n\t\t\t\tthis.validateRequired( el, model );\n\t\t\t}\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:required', el, model );\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tvar maskPlaceholder = this.getMask( model );\n\n // If the field has a mask...\n // AND that mask is equal to the current value... \n if ( maskPlaceholder && currentValue === maskPlaceholder ) {\n // If we have a pre-existing error...\n // OR if this field has been previously focused...\n if ( 0 < model.get( 'errors' ).length || ! model.get( 'clean' ) ) {\n // Persist that error.\n defaultReqValidation = false;\n }\n }\n // If our value is an empty string...\n if ( ! String(currentValue).trim() ) {\n // Throw an error.\n defaultReqValidation = false;\n }\n\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\t\t},\n\n\t\tgetMask: function( model ) {\n\t\t\tvar mask = model.get( 'mask' );\n\n\t\t\tif(\"undefined\" === typeof mask) return;\n\t\t\t\n\t\t\tswitch(mask) {\n\t\t\t\tcase '':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'currency':\n\t\t\t\t\tmask = nfi18n.currencySymbol;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\t\tmask = model.get( 'custom_mask' );\n\t\t\t\t\t/**\n\t\t\t\t\t * Break intentionally excluded so that this case\n\t\t\t\t\t * also executes the contents of default.\n\t\t\t\t\t */\n\t\t\t\tdefault:\n\t\t\t\t\tmask = mask.replace( /9/g, '_' );\n\t\t\t\t\tmask = mask.replace( /a/g, '_' );\n\t\t\t\t\tmask = mask.replace( /\\*/g, '_' );\n\t\t\t}\n\t\t\treturn mask;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) || model.get( 'clean' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * If we already have a required error on this model, return false\n\t\t\t */\n\t\t\tif ( model.get( 'errors' ).get( 'required-error' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcurrentValue = model.get( 'value' );\n\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tif ( ! String(currentValue).trim() ) {\n\t\t\t\tdefaultReqValidation = false;\n\t\t\t}\n\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:modelData', model );\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\n\t\t},\n\n\t\tmaybeError: function( valid, model ) {\n\t\t\tif ( ! valid ) {\n\n\t\t\t\tvar formModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:form' );\n\t\t\t\t\n\t\t\t\tif( 'undefined' != typeof formModel ) {\n\t\t\t\t\tnfRadio.channel('fields').request('add:error', model.get('id'), 'required-error', formModel.get('settings').validateRequiredField );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n\t\t\t}\t\t\t\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/submitError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitErrors );\n\t\t\t//Focus first invalid input after catching errors during submission\n\t\t\tnfRadio.channel( 'submit' ).reply( 'focus:firstInvalidInput', this.focusFirstInvalidInput );\n\t\t},\n\n\t\tsubmitErrors: function( response, textStatus, jqXHR, formID ) {\n\n\t\t\t// Check for nonce error.\n\t\t\tif ( _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Update nonce from response.\n\t\t\t\t\tnfFrontEnd.ajaxNonce = response.errors.nonce.new_nonce;\n\t\t\t\t\tnfFrontEnd.nonce_ts = response.errors.nonce.nonce_ts;\n\t\t\t\t\t// Re-submit form.\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'submit', formModel );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.fields ) > 0 ) {\n\t\t\t\t_.each( response.errors.fields, function( data, fieldID ) {\n if ( typeof( data ) === 'object' ) {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, data.slug, data.message );\n } else {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, 'required-error', data );\n }\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.form ) > 0 ) {\n\t\t\t\t_.each( response.errors.form, function( msg, errorID ) {\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'remove:error', errorID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'add:error', errorID, msg );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( 'undefined' != typeof response.errors.last ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.last.message ) {\n\t\t\t\t\tvar style = 'background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;';\n\t\t\t\t\tconsole.log( '%c NINJA FORMS SUPPORT: SERVER ERROR', style );\n\t\t\t\t\tconsole.log( response.errors.last.message );\n\t\t\t\t\tconsole.log( '%c END SERVER ERROR MESSAGE', style );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t */\n\t\t\t/*\n\t\t\t * Re-show any hidden fields during a form submission re-start.\n\t\t\t */\n\t\t\tjQuery( '#nf-form-' + formID + '-cont .nf-field-container' ).show();\n\t\t},\n\n\t\tfocusFirstInvalidInput: function(errors) {\n\t\t\tconst targetID = nfRadio.channel( 'fields' ).request( 'get:firstFieldByOrder', errors );\n\t\t\tif(document.getElementById(\"nf-field-\"+ targetID) !== null){\n\t\t\t\tdocument.getElementById(\"nf-field-\"+ targetID).focus();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/actionRedirect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionRedirect );\n\t\t},\n\n\t\tactionRedirect: function( response ) {\n\n\t\t\tif ( 'undefined' != typeof response.data.halt && 'undefined' != typeof response.data.halt.redirect && '' != response.data.halt.redirect ) {\n\t\t\t\twindow.location = response.data.halt.redirect;\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.redirect && '' != response.data.actions.redirect ) {\n\t\t\t\t\twindow.location = response.data.actions.redirect;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/actionSuccess',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.success_message && '' != response.data.actions.success_message ) {\n\t\t\t\t\tvar form_id = response.data.form_id;\n\t\t\t\t\tvar success_message = jQuery( '#nf-form-' + form_id + '-cont .nf-response-msg' );\n\t\t\t\t\tconst read = response.data.actions.success_message.replace( /(<([^>]+)>)/ig, '');\n\t\t\t\t\tsuccess_message.attr('tabindex', '0');\n\t\t\t\t\tsuccess_message.attr('aria-live', 'assertive');\n\t\t\t\t\tsuccess_message.attr(\"aria-label\", read);\n\t\t\t\t\t\n\t\t\t\t\tsuccess_message.html( response.data.actions.success_message ).show();\n\t\t\t\t\tsuccess_message.focus();\n\t\t\t\t\t//Let's check if the success message is already fully visible in the viewport without scrolling\n\t\t\t\t\tvar top_of_success_message = success_message.offset().top;\n\t\t\t\t\tvar bottom_of_success_message = success_message.offset().top + success_message.outerHeight();\n\t\t\t\t\tvar bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).height();\n\t\t\t\t\tvar top_of_screen = jQuery(window).scrollTop();\n\n\t\t\t\t\tvar the_element_is_visible = ((bottom_of_screen > bottom_of_success_message) && (top_of_screen < top_of_success_message));\n\n\t\t\t\t\tif(!the_element_is_visible){\n\t\t\t\t\t\t//The element isn't visible, so let's scroll to the success message as in the previous release, but with a short animation\n\t\t\t\t\t\tjQuery('html, body').animate({\n\t\t\t\t\t\t\tscrollTop: ( success_message.offset().top - 50 )\n\t\t\t\t\t\t}, 300 );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldSelect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'init:model', function( model ){\n\t\t\t\tif( 'list' == model.get( 'parentType' ) ) this.register( model );\n\t\t\t}, this );\n\n\t\t\tnfRadio.channel( 'listselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\tnfRadio.channel( 'listmultiselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherAttributes', this.renderOtherAttributes );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t//Check to see if there is a value set for the field\n\t\t\t\tvar savedVal = model.get( 'value' );\n\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\tselected = _.map( selected, function( opt ) { return opt.value } );\n\t\t\t\t\tvar value = selected;\n\t\t\t\t} else if ( 'listradio' !== model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = _.first( model.get( 'options' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof selected\n\t\t\t\t\t\t&& 'undefined' != typeof selected.value ) {\n\t\t\t\t\t\tvar value = selected.value;\n\t\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\t\tvar value = selected.label;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t/*\n\t * This part is re-worked to take into account custom user-meta\n\t * values for fields.\n\t */\n\t\t\t\tif( 'undefined' !== typeof savedVal && '' !== savedVal\n\t\t\t\t\t&& Array.isArray( savedVal ) ) {\n\t\t\t\t\tmodel.set( 'value', savedVal );\n\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\n\t\t\t_.each( this.options, function( option ) {\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t\t\t\tif ( _.isArray( this.value ) ) {\n // If we have a multiselect list...\n // AND it has selected values...\n\t\t\t\t\tif( 'listmultiselect' === this.type && 0 < this.value.length &&\n\t\t\t\t\t\t-1 != _.indexOf( this.value[ 0 ].split( ',' ), option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t} else if( -1 != _.indexOf( this.value, option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t}\n\t\t\t\t} else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else if ( ( 1 == option.selected && this.clean )\n\t\t\t\t\t&& 'undefined' === typeof this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else {\n\t\t\t\t\tvar selected = false;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n\t\t\t\toption.selected = selected;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\t\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listselect-option' );\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherAttributes: function() {\n\t\t\tvar otherAttributes = '';\n\n\t\t\tif( 'listmultiselect' == this.type ){\n\t\t\t\totherAttributes = otherAttributes + ' multiple';\n\n\t\t\t\tvar multiSize = this.multi_size || 5;\n\t\t\t\totherAttributes = otherAttributes + ' size=\"' + multiSize + '\"';\n\t\t\t}\n\n\t\t\treturn otherAttributes;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == fieldModel.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = fieldModel.get( 'options' )[0];\n\t\t\t\t\t}\t\t\n\t\t\t\t\tcalc_value = selected.calc;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/coreSubmitResponse',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', response.data.form_id );\n\t\t\t/*\n\t\t\t * If we have errors, don't hide or clear.\n\t\t\t */\n\t\t\tif ( 0 != _.size( response.errors ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.clear_complete ) {\n\t\t\t\t// nfRadio.channel( 'form-' + response.data.form_id ).trigger( 'reset' );\n\t\t\t\tformModel.get( 'fields' ).reset( formModel.get( 'loadedFields' ) );\n if ( 1 != response.data.settings.hide_complete ) {\n nfRadio.channel( 'captcha' ).trigger( 'reset' );\n }\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.hide_complete ) {\n\t\t\t\t/**\n\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t */\n\t\t\t\tformModel.trigger( 'hide' );\n\t\t\t\t// jQuery( '.nf-fields' ).hide();\n\t\t\t\t// jQuery( '.nf-form-title' ).hide();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldProduct',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'product' ), 'init:model', this.register );\n nfRadio.channel( 'product' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderProductQuantity', this.renderProductQuantity );\n model.set( 'renderProduct', this.renderProduct );\n model.set( 'renderOptions', this.renderOptions );\n },\n\n renderProduct: function(){\n switch( this.product_type ) {\n case 'user':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-textbox' );\n return template( this );\n break;\n case 'hidden':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-hidden' );\n return template( this );\n break;\n\n case 'dropdown':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-dropdown' );\n return template( this );\n break;\n default:\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-single' );\n return template( this );\n }\n },\n\n renderProductQuantity: function(){\n if ( 1 == this.product_use_quantity ) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-quantity' );\n return template( this );\n }\n },\n\n renderOptions: function() {\n var that = this;\n var html = '';\n _.each( this.options, function( option ) {\n if ( 1 == option.selected ) {\n var selected = true;\n } else {\n var selected = false;\n }\n\n option.selected = selected;\n option.fieldID = that.id;\n option.classes = that.classes;\n option.currentValue = that.value;\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-' + that.product_type + '-option' );\n html += template( option );\n } );\n\n return html;\n },\n\n getCalcValue: function( fieldModel ) {\n\n var product_price = fieldModel.get( 'product_price' );\n var product_quantity = fieldModel.get( 'value' );\n\n return product_price * product_quantity;\n }\n });\n\n return controller;\n} );\n\n","define('controllers/fieldTotal',[], function() {\n var controller = Marionette.Object.extend( {\n\n totalModel: {},\n\n productTotals: {},\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'total' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'shipping' ), 'init:model', this.registerShipping );\n },\n\n register: function( totalModel ){\n this.totalModel = totalModel;\n\n var formID = totalModel.get( 'formID' );\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'loaded', this.onFormLoaded );\n\n this.listenTo( nfRadio.channel( 'product' ), 'change:modelValue', this.onChangeProduct );\n this.listenTo( nfRadio.channel( 'quantity' ), 'change:modelValue', this.onChangeQuantity );\n },\n\n registerShipping: function( shippingModel ){\n this.shippingCost = shippingModel.get( 'shipping_cost' );\n },\n\n onFormLoaded: function( formModel ){\n\n var fieldModels = formModel.get( 'fields' ).models;\n\n var productFields = {};\n var quantityFields = {};\n\n for( var model in fieldModels ){\n\n var field = fieldModels[ model ];\n var fieldID = field.get( 'id' );\n\n // TODO: Maybe use switch\n if( 'product' == field.get( 'type' ) ){\n productFields[ fieldID ] = field;\n } else if( 'quantity' == field.get( 'type' ) ){\n var productID = field.get( 'product_assignment' );\n quantityFields[ productID ] = field;\n }\n }\n\n for( var productID in productFields ){\n\n var product = productFields[ productID ];\n\n var productPrice = Number( product.get( 'product_price' ) );\n\n if( quantityFields[ productID ] ){\n\n productPrice *= quantityFields[ productID ].get( 'value' );\n\n } else if( 1 == product.get( 'product_use_quantity' ) ){\n\n productPrice *= product.get( 'value' );\n\n }\n\n this.productTotals[ productID ] = productPrice;\n }\n\n this.updateTotal();\n },\n\n onChangeProduct: function( model ){\n var productID = model.get( 'id' );\n var productPrice = Number( model.get( 'product_price' ) );\n var productQuantity = Number( model.get( 'value' ) );\n var newTotal = productQuantity * productPrice;\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n onChangeQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var productField = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n var productPrice = Number( productField.get( 'product_price' ) );\n\n var quantity = Number( model.get( 'value' ) );\n\n var newTotal = quantity * productPrice;\n\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n updateTotal: function(){\n\n var newTotal = 0;\n\n for( var product in this.productTotals ){\n newTotal += Number( this.productTotals[ product ] );\n }\n\n if( newTotal && this.shippingCost ) {\n // Only add shipping if there is a cost.\n newTotal += Number(this.shippingCost);\n }\n\n this.totalModel.set( 'value', newTotal.toFixed( 2 ) );\n this.totalModel.trigger( 'reRender' );\n }\n });\n\n return controller;\n});\n","define('controllers/fieldQuantity',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'quantity' ), 'init:model', this.registerQuantity );\n },\n\n registerQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var product = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n\n if( product ) {\n product.set('product_use_quantity', 0);\n }\n },\n\n });\n\n return controller;\n});\n","/**\n * Model that represents a calculation.\n *\n * On init, we trigger a radio message so that controllers can do things when a calc model inits.\n */\ndefine( 'models/calcModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\t\tinitialize: function() {\n\t\t\t// Set our form id\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\t// Set our initial fields object to empty. This will hold our key/value pairs.\n\t\t\tthis.set( 'fields', {} );\n\t\t\t// Trigger a radio message to let controllers know we've inited this model.\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'init:model', this );\n\t\t\t// When we change the value of this calculation, send out a radio message\n\t\t\tthis.on( 'change:value', this.changeValue, this );\n\t\t},\n\n\t\t/**\n\t\t * Trigger a radio message when a field present in our calculation changes\n\t\t *\n\t\t * The listener that triggers/calls this function is in controllers/calculations\n\t\t * \n\t\t * @since 3.0\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( fieldModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:field', this, fieldModel );\n\t\t},\n\n\t\tchangeCalc: function( targetCalcModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:calc', this, targetCalcModel );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:value', this );\n\t\t}\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/calcCollection',['models/calcModel'], function( CalcModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: CalcModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n _.each( models, function( model ) {\n \tif( 'undefined' == typeof model.dec ) return;\n if ( '' === model.dec.toString().trim() ) model.dec = 2;\n model.dec = parseInt( model.dec );\n } );\n\t\t\t/*\n\t\t\t * Respond to requests for our calc model\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + options.formModel.get( 'id' ) ).reply( 'get:calc', this.getCalc, this );\n\t\t},\n\n\t\tgetCalc: function( key ) {\n\t\t\treturn this.findWhere( { name: key } );\n\t\t}\n\t} );\n\treturn collection;\n} );\n","/**\n * Controller responsible for keeping up with calculations.\n */\ndefine('controllers/calculations',['models/calcCollection'], function( CalcCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.calcs = {};\n\t\t\tthis.displayFields = {};\n\t\t\t// When our form initialises, check to see if there are any calculations that need to be tracked.\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', this.registerCalcs );\n \n // When our collection gets reset, reset calculation tracking as well.\n this.listenTo( nfRadio.channel( 'fields' ), 'reset:collection', this.resetCalcs );\n\n\t\t\t// When a calc model is initialised, run a setup function.\n\t\t\t// this.listenTo( nfRadio.channel( 'calc' ), 'init:model', this.setupCalc );\n\n\t\t\t// When a field referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:field', this.changeField );\n\n\t\t\t// When a calculation referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:calc', this.changeCalc );\n\n\t\t\t/*\n\t\t\t * Listen to our field model init for fields that want to display calc values.\n\t\t\t * If that field has a calc merge tag, replace it with the default calc value.\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t_.each( nfFrontEnd.use_merge_tags.calculations, function( fieldType ) {\n\t\t\t\tthat.listenTo( nfRadio.channel( 'fields-' + fieldType ), 'init:model', that.initDisplayField );\n\t\t\t} );\n\t\t\t\n\t\t\t// When we change our calc value, update any display fields.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:value', this.updateDisplayFields );\n\n\t\t\t// Set an init variable so that we only call reRender on the display field on change, not on init.\n\t\t\tthis.init = {};\n\t\t},\n \n /**\n * Passthrough function to reset tracking of calculations when the fieldCollection is reset.\n * \n * @since 3.2\n * @param backbone.collection fieldCollection\n * @return void\n */\n resetCalcs: function( fieldCollection ) {\n if( 'undefined' != typeof( fieldCollection.options.formModel ) ) {\n this.registerCalcs( fieldCollection.options.formModel ); \n }\n },\n\n\t\t/**\n\t\t * When our form loads, create a collection out of any calculations.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model formModel\n\t\t * @return void\n\t\t */\n\t\tregisterCalcs: function( formModel ) {\n\t\t\tvar calcCollection = new CalcCollection( formModel.get( 'settings' ).calculations, { formModel: formModel } );\n\t\t\tthis.calcs[ formModel.get( 'id' ) ] = calcCollection;\n\t\t\tvar that = this;\n\n\t\t\t_.each( calcCollection.models, function( calcModel ) {\n\t\t\t\t/*\n\t\t\t\t * We set a property on our init variable for the calc model we're looping over.\n\t\t\t\t * This property is set to true so that when we make changes to the calc model on the next line\n\t\t\t\t * the field view doesn't try to redraw itself.\n\t\t\t\t * If we don't do this, the 'reRender' attribute of the model will be set before the view is initialized,\n\t\t\t\t * which means that setting 'reRender' to true will never re-render the view.\n\t\t\t\t */\n\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = true;\n\t\t\t\t// Setup our calculation models with initial values and register listeners for calc-related fields.\n\t\t\t\tthat.setupCalc( calcModel );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * When a calculation model is instantiated from the registerCalcs function:\n\t\t *\n\t\t * Use a regex to get an array of the field keys\n\t\t * Setup an initial key/values array\n\t\t * Check for any references to other calculations\n\t\t * Set the initial value of our calculation\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @return void\n\t\t */\n\t\tsetupCalc: function( calcModel ) {\n\t\t\t// Setup our that var so we can access 'this' context in our loop.\n\t\t\tvar that = this;\n\t\t\t// Get our equation\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\t// We want to keep our original eq intact, so we use a different var for string replacment.\n\t\t\tvar eqValues = eq;\n // Store the name for debugging later.\n var calcName = calcModel.get( 'name' );\n\n\t\t\t/* TODO:\n\t\t\t * It might be possible to refactor these two if statements.\n\t\t\t * The difficulty is that each has a different method of retreiving the specific data model.\n\t\t\t */\n\t\t\t// Check to see if we have any field merge tags in our equation.\n\t\t\tvar fields = eq.match( new RegExp( /{field:(.*?)}/g ) );\n\t\t\tif ( fields ) {\n\t\t\t\t/*\n\t\t\t\t * fields is now an array of field keys that looks like:\n\t\t\t\t * ['{field:key'], ['{field:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our field keys to setup our field key array and hook up our field change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tfields = fields.map( function( field ) {\n\t\t\t\t\t// field will be {field:key}\n\t\t\t\t\tvar key = field.replace( ':calc}', '' ).replace( '}', '' ).replace( '{field:', '' );\n\n\t\t\t\t\t// Get our field model\n\t\t\t\t\tfieldModel = nfRadio.channel( 'form-' + calcModel.get( 'formID' ) ).request( 'get:fieldByKey', key );\n\n if( 'undefined' == typeof fieldModel ) return;\n\n fieldModel.set( 'clean', false );\n\n\t\t\t\t\t// Register a listener in our field model for value changes.\n\t\t\t\t\tfieldModel.on( 'change:value', calcModel.changeField, calcModel );\n\t\t\t\t\t// Get our calc value from our field model.\n\t\t\t\t\tvar calcValue = that.getCalcValue( fieldModel );\n\t\t\t\t\t// Add this field to our internal key/value object.\n\t\t\t\t\tthat.updateCalcFields( calcModel, key, calcValue );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'field', key, calcValue, eqValues );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check to see if we have any calc merge tags in our equation.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t/*\n\t\t\t\t * calcs is now an array of calc keys that looks like:\n\t\t\t\t * ['{calc:key'], ['{calc:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our calc keys to setup our calc key array and hook up our calc change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tcalcs = calcs.map( function( calc ) {\n\t\t\t\t\t// calc will be {calc:name}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\t// Get our calc model\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n\n\t\t\t\t\tif( 'undefined' == typeof targetCalcModel ) return;\n\n\t\t\t\t\t// Listen for changes on our calcluation, since we need to update our calc when it changes.\n\t\t\t\t\ttargetCalcModel.on( 'change:value', calcModel.changeCalc, calcModel );\n\t\t\t\t\t// // Get our calc value from our calc model.\n\t\t\t\t\tvar calcValue = targetCalcModel.get( 'value' );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'calc', name, calcValue, eqValues );\n\t\t\t\t} );\n\n\t\t\t}\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, 0 );\n // Scrub line breaks.\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n\t\t\t// Evaluate the equation and update the value of this model.\n\t\t\ttry {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Setup)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n\t\t\t} catch( e ) {\n //console.log( calcName );\n\t\t\t\tconsole.log( e );\n\t\t\t}\n \n // If for whatever reason, we got NaN, reset that to 0.\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\n\t\t},\n\n\t\t/**\n\t\t * Update an item in our key/value pair that represents our fields and calc values.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @param string \t\t\tkey\n\t\t * @param string \t\t\tcalcValue\n\t\t * @return void\n\t\t */\n\t\tupdateCalcFields: function( calcModel, key, calcValue ) {\n\t\t\tvar fields = calcModel.get( 'fields' );\n\t\t\tfields[ key ] = calcValue;\n\t\t\tcalcModel.set( 'fields', fields );\n\t\t},\n\n\t\t/**\n\t\t * Get a calc value from a field model.\n\t\t *\n\t\t * Sends a request to see if there's a special calc value\n\t\t * Uses the value of the field if there is not.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model fieldModel\n\t\t * @return value\n\t\t */\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * Send out a request on the field type and parent type channel asking if they need to modify the calc value.\n\t\t\t * This is helpful for fields like lists that can have a different calc_value than selected value.\n\t\t\t */\n\t\t\tvar value = nfRadio.channel( fieldModel.get( 'type' ) ).request( 'get:calcValue', fieldModel );\n\t\t\t\n\t\t\t// Preset with our field value.\n\t\t\tvar calcValue = fieldModel.get( 'value' );\n\t\t\tif( 'undefined' !== typeof value ) {\n\t\t\t\tif( value || 0 === value ) {\n\t\t\t\t\t// If we got a valid number, use that instead.\n\t\t\t\t\tcalcValue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\tvar machineNumber = localeConverter.numberDecoder(calcValue);\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(calcValue);\n\n\t\t\tif ( 'undefined' !== typeof machineNumber && jQuery.isNumeric( machineNumber ) ) {\n\t\t\t\tvalue = formattedNumber;\n\t\t\t} else {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\t// }\n\n\t\t\tif ( ! fieldModel.get( 'visible' ) ) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * Replace instances of key with calcValue. This is used to replace one key at a time.\n\t\t *\n\t\t * If no eq is passed, use calcModel eq.\n\t\t *\n\t\t * Returns a string with instances of key replaced with calcValue.\n\t\t * \n\t\t * @since version\n\t\t * @param string \tkey \n\t\t * @param string \tcalcValue \n\t\t * @param string \teq \n\t\t * @return string \teq \n\t\t */\n\t\treplaceKey: function( type, key, calcValue, eq ) {\n\t\t\teq = eq || calcModel.get( 'eq' );\n\n\t\t\ttag = '{' + type + ':' + key + '}';\n\t\t\tvar reTag = new RegExp( tag, 'g' );\n\n\t\t\tcalcTag = '{' + type + ':' + key + ':calc}';\n\t\t\tvar reCalcTag = new RegExp( calcTag, 'g' );\n\n\t\t\teq = eq.replace( reTag, calcValue );\n\t\t\teq = eq.replace( reCalcTag, calcValue );\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Takes a calcModel and returns a string eq with all keys replaced by their appropriate calcValues.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @return string\t\t\teq\n\t\t */\n\t\treplaceAllKeys: function( calcModel ) {\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\tvar that = this;\n\t\t\t_.each( calcModel.get( 'fields' ), function( value, key ) {\n\t\t\t\teq = that.replaceKey( 'field', key, value, eq );\n\t\t\t} );\n\n\t\t\t// If we have any calc merge tags, replace those as well.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calc ) {\n\t\t\t\t\t// calc will be {calc:key}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n if( 'undefined' == typeof targetCalcModel ) return;\n\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\teq = eq.replace( re, targetCalcModel.get( 'value' ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Function that's called when a field within the calculation changes.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @param backbone.model fieldModel\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( calcModel, fieldModel ) {\n\t\t\n\t\t\tvar key = fieldModel.get( 'key' );\n\t\t\tvar value = this.getCalcValue( fieldModel );\n\t\t\t\n\t\t\tthis.updateCalcFields( calcModel, key, value );\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, '0' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Field)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n if(this.debug())console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\t\t\n\t\t},\n\n\t\tinitDisplayField: function( fieldModel ) {\n\n\t\t\tif( ! fieldModel.get( 'default' ) || 'string' != typeof fieldModel.get( 'default' ) ) return;\n\n\t\t\tvar calcs = fieldModel.get( 'default' ).match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calcName ) {\n\t\t\t\t\tcalcName = calcName.replace( '{calc:', '' ).replace( '}', '' ).replace( ':2', '' );\n\t\t\t\t\tthis.displayFields[ calcName ] = this.displayFields[ calcName ] || [];\n\t\t\t\t\tthis.displayFields[ calcName ].push( fieldModel );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\tupdateDisplayFields: function( calcModel ) {\n\t\t\tvar that = this;\n\t\t\tif ( 'undefined' != typeof this.displayFields[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t_.each( this.displayFields[ calcModel.get( 'name' ) ], function( fieldModel ) {\n\n\t\t\t\t\tvar value = '';\n\n\t\t\t\t\t/**\n\t\t\t\t\t * if we have a html field, we want to use the actual\n\t\t\t\t\t * value and re-evaluate\n\t\t\t\t **/\n\t\t\t\t\tif( \"html\" === fieldModel.get( 'type' ) ) {\n\t\t\t\t\t\tvalue = fieldModel.get( 'value' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if not a html field, use default to re-evaluate\n\t\t\t\t\t\tvalue = fieldModel.get( 'default' );\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t This is a fix for the issue of the merge tags being\n\t\t\t\t\t display'd\n\t\t\t\t\t */\n\n\t\t\t\t\t// Find spans with calc data-key values\n\t\t\t\t\tvar spans = value.match( new RegExp( /<span data-key=\"calc:(.*?)<\\/span>/g ));\n\t\t\t\t\t_.each( spans, function( spanVar ) {\n\t\t\t\t\t\t// transform the span back into a merge tag\n\t\t\t\t\t\tvar tmpCalcTag = \"{\" + spanVar.replace(\"<span\" +\n\t\t\t\t\t\t\t\" data-key=\\\"\", \"\" ).replace( /\">(.*?)<\\/span>/, \"\" ) + \"}\";\n\n\t\t\t\t\t\tvalue = value.replace( spanVar, tmpCalcTag );\n\t\t\t\t\t} );\n\t\t\t\t\tvar calcs = value.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\t\t\t_.each( calcs, function( calc ) {\n//\t\t\t\t\t\tvar rounding = false;\n\t\t\t\t\t\t// calc will be {calc:key} or {calc:key:2}\n\t\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' ).replace( ':2', '' );\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * TODO: Bandaid for rounding calculations to two decimal places when displaying the merge tag.\n\t\t\t\t\t\t * Checks to see if we have a :2. If we do, remove it and set our rounding variable to true.\n\t\t\t\t\t\t */\n//\t\t\t\t\t\tif ( -1 != name.indexOf( ':2' ) ) {\n//\t\t\t\t\t\t\trounding = true;\n//\t\t\t\t\t\t\tname = name.replace( ':2', '' );\n//\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar calcModel = that.calcs[ fieldModel.get( 'formID' ) ].findWhere( { name: name } );\n\t\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\t\tvar calcValue = calcModel.get( 'value' ) ;\n//\t\t\t\t\t\tif ( rounding ) {\n//\t\t\t\t\t\t\tcalcValue = calcValue.toFixed( 2 );\n//\t\t\t\t\t\t\trounding = false;\n//\t\t\t\t\t\t}\n\t\t\t\t\t\t\n if( 'undefined' != typeof( calcValue ) ) {\n calcValue = that.applyLocaleFormatting( calcValue, calcModel );\n\t\t\t\t\t\t}\n /*\n * We replace the merge tag with the value\n\t\t\t\t\t\t * surrounded by a span so that we can still find it\n\t\t\t\t\t\t * and not affect itself or other field merge tags\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Unless this isn't a html field, then we just set\n\t\t\t\t\t\t * value to calcValue\n\t\t\t\t\t\t*/\n if( \"html\" === fieldModel.get( 'type' ) ) {\n\t value = value.replace(re, \"<span data-key=\\\"calc:\" + name + \"\\\">\"\n\t\t + calcValue + \"</span>\");\n } else {\n \tvalue = calcValue;\n }\n\t\t\t\t\t} );\n\t\t\t\t\t\n\t\t\t\t\tfieldModel.set( 'value', value );\n\t\t\t\t\tif ( ! that.init[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t\t\t// fieldModel.set( 'reRender', true );\n\t\t\t\t\t\tfieldModel.trigger( 'reRender' );\n\t\t\t\t\t}\n\t\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = false;\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\tgetCalc: function( name, formID ) {\n\t\t\treturn this.calcs[ formID ].findWhere( { name: name } );\n\t\t},\n\n\t\tchangeCalc: function( calcModel, targetCalcModel ) {\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\t\t\t\n\t\t\teqValues = eqValues.replace( '[', '' ).replace( ']', '' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Calc)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation( eqValues ) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\t\t},\n \n /**\n * Function to apply Locale Formatting to Calculations\n * @since Version 3.1\n * @param Str number\n * \n * @return Str\n */\n applyLocaleFormatting: function( number, calcModel ) {\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(number, calcModel.get('dec'));\n \n // // Split our string on the decimal to preserve context.\n // var splitNumber = number.split('.');\n // // If we have more than one element (if we had a decimal point)...\n // if ( splitNumber.length > 1 ) {\n // // Update the thousands and remerge the array.\n // splitNumber[ 0 ] = splitNumber[ 0 ].replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // var formattedNumber = splitNumber.join( nfi18n.decimal_point );\n // }\n // // Otherwise (we had no decimal point)...\n // else {\n // // Update the thousands.\n // var formattedNumber = number.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // }\n return formattedNumber;\n\t\t},\n\t\t\n\t\tlocaleDecodeEquation: function( eq ) {\n\t\t\tvar result = '';\n\t\t\tvar expression = '';\n\t\t\tvar pattern = /[0-9.,]/;\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\t// This pattern accounts for all whitespace characters (including thin space).\n\t\t\teq = eq.replace( /\\s/g, '' );\n\t\t\teq = eq.replace( / /g, '' );\n\t\t\tvar characters = eq.split('');\n\t\t\t// foreach ( characters as character ) {\n\t\t\tcharacters.forEach( function( character ) {\n\t\t\t\t// If the character is numeric or '.' or ','\n\t\t\t\tif (pattern.test(character)) {\n\t\t\t\t\texpression = expression + character;\n\t\t\t\t} else {\n\t\t\t\t\t// If we reach an operator char, append the expression to the result\n\t\t\t\t\tif ( 0 < expression.length ) {\n\t\t\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t\t\t\texpression = '';\n\t\t\t\t\t}\n\t\t\t\t\tresult = result + character;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// The following catches the case of the last character being a digit.\n\t\t\tif ( 0 < expression.length ) {\n\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\tdebug: function(message) {\n\t\t\tif ( window.nfCalculationsDebug || false ) console.log(message);\n\t\t}\n\t\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/dateBackwardsCompat',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'pikaday-bc' ), 'init', this.dateBackwardsCompat );\t\n },\n\n dateBackwardsCompat: function( dateObject, fieldModel ) {\n \n /**\n * Start backwards compatibility for old pikaday customisation\n */\n // Legacy properties\n dateObject.pikaday = {};\n dateObject.pikaday._o = {};\n\n //Old hook for Pikaday Custom code\n nfRadio.channel( 'pikaday' ).trigger( 'init', dateObject, fieldModel );\n\n // If we've set a disableDayFn property in custom code, hook it up to Flatpickr\n if ( typeof dateObject.pikaday._o.disableDayFn !== 'undefined') {\n dateObject.set( 'disable', [ dateObject.pikaday._o.disableDayFn ] );\n }\n\n //Compatibility for i18n pikaday function\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined' || typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n\n let locale = dateObject.config.locale;\n\n if ( typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n locale.firstDayOfWeek = dateObject.pikaday._o.firstDay;\n }\n\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined') {\n if ( typeof dateObject.pikaday._o.i18n.weekdays !== 'undefined') {\n locale.weekdays.longhand = dateObject.pikaday._o.i18n.weekdays;\n }\n\n if ( typeof dateObject.pikaday._o.i18n.weekdaysShort !== 'undefined') {\n locale.weekdays.shorthand = dateObject.pikaday._o.i18n.weekdaysShort;\n }\n \n if ( typeof dateObject.pikaday._o.i18n.months !== 'undefined') {\n jQuery( '.flatpickr-monthDropdown-months > option' ).each( function() {\n this.text = dateObject.pikaday._o.i18n.months[ this.value ];\n } );\n }\n }\n\n dateObject.set( 'locale', locale );\n \n }\n\n if ( Object.keys(dateObject.pikaday._o).length > 0 ) {\n console.log(\"%cDeprecated Ninja Forms Pikaday custom code detected.\", \"color: Red; font-size: large\");\n console.log(\"You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details.\");\n }\n\n }\n\n });\n\n return controller;\n});\n","define('controllers/fieldDate',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'date' ), 'init:model', this.initModel );\n this.listenTo( nfRadio.channel( 'date' ), 'render:view', this.initDatepicker );\n },\n\n initModel: function(model) {\n this.registerFunctions(model);\n },\n\n registerFunctions: function( model ) {\n model.set( 'renderHourOptions', this.renderHourOptions );\n model.set( 'renderMinuteOptions', this.renderMinuteOptions );\n model.set( 'maybeRenderAMPM', this.maybeRenderAMPM );\n model.set( 'customClasses', this.customClasses );\n // Overwrite the default getValue() method.\n model.getValue = this.getValue;\n },\n\n renderHourOptions: function() {\n return this.hours_options;\n },\n\n renderMinuteOptions: function() {\n return this.minutes_options;\n },\n\n maybeRenderAMPM: function() {\n if ( 'undefined' == typeof this.hours_24 || 1 == this.hours_24 ) {\n return;\n }\n var requiredAttr = (this.required == 1) ? 'aria-required=\"true\" required' : '';\n return `<div style=\"float:left;\" class=\"time-wrap\"><select id=\"ampm-select\" class=\"ampm extra\" aria-label=\"am-pm-select\" ${requiredAttr}><option value=\"am\">AM</option><option value=\"pm\">PM</option></select></div>`;\n },\n\n initDatepicker: function ( view ) {\n view.model.set( 'el', view.el );\n var el = jQuery( view.el ).find( '.nf-element' )[0];\n view.listenTo( nfRadio.channel( 'form-' + view.model.get( 'formID' ) ), 'before:submit', this.beforeSubmit, view );\n\n // If we are using a time_only date_mode, then hide the date input.\n if ( 'undefined' != typeof view.model.get( 'date_mode' ) && 'time_only' == view.model.get( 'date_mode' ) ) {\n jQuery( el ).hide();\n return false;\n }\n\n // Make sure date format is correctly converted.\n var dateFormat = this.convertDateFormat( view.model.get( 'date_format' ) );\n // Make sure this is a deep conversion of the original model.\n view.model.set('date_format', dateFormat);\n\n var dateSettings = {\n onReady: ( selectedDates, datestr, dateObject ) => {\n dateObject.altInput.setAttribute( 'aria-labelledby', jQuery( el ).attr( \"aria-labelledby\" ) );\n dateObject.altInput.setAttribute( 'aria-invalid', false );\n },\n dateFormat: dateFormat,\n altFormat: dateFormat,\n altInput: true,\n ariaDateFormat: dateFormat,\n mode: \"single\",\n allowInput: true,\n disableMobile: \"true\",\n minDate: this.getMinDate(view.model),\n maxDate: this.getMaxDate(view.model),\n };\n \n const nfCustomLocale = this.checkCustomLocale();\n if(nfCustomLocale){\n dateSettings.locale = nfCustomLocale;\n }\n\n // Filter our datepicker settings object.\n let filteredDatePickerSettings = nfRadio.channel( 'flatpickr' ).request( 'filter:settings', dateSettings, view );\n if ( 'undefined' != typeof filteredDatePickerSettings ) {\n dateSettings = filteredDatePickerSettings;\n }\n\n var dateObject = flatpickr( el, dateSettings );\n // Set default value only when value is missing\n if ( 1 == view.model.get( 'date_default' ) && ! view.model.get( 'value' ) ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate);\n view.model.set( 'value', dateObject.defaultDate );\n }\n // Set default value in RFF context, only if value equals today's date\n if( 1 == view.model.get( 'date_default' ) && \n typeof view.model.get('id') === \"string\" && \n view.model.get('id').includes('.') && \n typeof view.model.get( 'value' ) === \"object\" && \n this.isSameDay( view.model.get( 'value' ), new Date() )\n ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate, true);\n view.model.set( 'value', dateObject.defaultDate );\n }\n\n //Trigger Pikaday backwards compatibility\n nfRadio.channel( 'pikaday-bc' ).trigger( 'init', dateObject, view.model, view );\n\n nfRadio.channel( 'flatpickr' ).trigger( 'init', dateObject, view.model, view );\n },\n\n beforeSubmit: function( formModel ) { \n //Get value from input if the default date wasn't edited in the field and the value is still a global unformatted date object\n if( _.isObject( this.model.get( 'value' ) ) ){\n // We detect the flatpickr input inside the element by its type instead of ID as the dot in the repeater children ID is not compatible with query selector\n const date_value = this.el.querySelector(\"input[type='hidden']\").value;\n this.model.set( 'value', date_value );\n }\n //Detect repeater and set data at the repeater level\n const inputID = this.el.dataset.fieldId;\n if(inputID.search(\".\") !== -1){\n nfRadio.channel('field-repeater').trigger('set:value');\n // Don't convert string value into object for time_only type in repeatable fieldset field\n if(this.model.get( 'date_mode' ) === \"time_only\"){\n return;\n }\n }\n\n if ( 'date_only' == this.model.get( 'date_mode' ) ) {\n return false;\n }\n let hour = jQuery( this.el ).find( '.hour' ).val();\n let minute = jQuery( this.el ).find( '.minute' ).val();\n let ampm = jQuery( this.el ).find( '.ampm' ).val();\n let current_value = this.model.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let date_value = {\n date: date,\n hour: hour,\n minute: minute,\n ampm: ampm,\n };\n\n this.model.set( 'value', date_value );\n },\n\n getMinDate: function( fieldModel ) {\n let minDate = null;\n if(typeof fieldModel.get( 'year_range_start' ) !== \"undefined\"){\n const yearRangeStart = fieldModel.get( 'year_range_start' );\n if( yearRangeStart ) {\n minDate = flatpickr.formatDate(new Date(String( yearRangeStart )), fieldModel.get('date_format'));\n }\n } \n return minDate;\n },\n\n getMaxDate: function( fieldModel ) {\n let maxDate = null;\n if(typeof fieldModel.get( 'year_range_end' ) !== \"undefined\"){\n const yearRangeEnd = fieldModel.get( 'year_range_end' );\n if( yearRangeEnd ) {\n maxDate = flatpickr.formatDate(new Date(String( yearRangeEnd )), fieldModel.get('date_format'));\n }\n }\n return maxDate;\n },\n\n convertDateFormat: function( dateFormat ) {\n //If dateFormat is empty or null, try to get a value from the Field's model\n if(!dateFormat && this.model){\n dateFormat = this.model.get('date_format');\n } \n //If it is still empty or null set it to be \"default\"\n if (!dateFormat){\n dateFormat = \"default\";\n }\n //Convert PHP format in setting to flatPickr expected setting if needed\n const lookup = {\n 'MM/DD/YYYY': 'm/d/Y',\n 'MM-DD-YYYY': 'm-d-Y',\n 'MM.DD.YYYY': 'm.d.Y',\n 'DD/MM/YYYY': 'd/m/Y',\n 'DD-MM-YYYY': 'd-m-Y',\n 'DD.MM.YYYY': 'd.m.Y',\n 'YYYY-MM-DD': 'Y-m-d',\n 'YYYY/MM/DD': 'Y/m/d',\n 'YYYY.MM.DD': 'Y.m.d',\n 'dddd, MMMM D YYYY': 'l, F d Y',\n 'default': nfi18n.dateFormat ? nfi18n.dateFormat : 'default'\n };\n return Object.keys(lookup).includes(dateFormat) ? lookup[dateFormat] : dateFormat;\n },\n\n customClasses: function( classes ) {\n if ( 'date_and_time' == this.date_mode ) {\n classes += ' date-and-time';\n }\n return classes;\n },\n //retrieve localized values and assign them to flatpickr locale format\n checkCustomLocale: function() {\n let customLocale = {};\n if(nfi18n){\n if(nfi18n.months || nfi18n.monthsShort){\n customLocale.months = {};\n if(nfi18n.months){\n customLocale.months.longhand = nfi18n.months;\n }\n if(nfi18n.monthsShort){\n customLocale.months.shorthand = nfi18n.monthsShort;\n }\n }\n if(nfi18n.weekdays || nfi18n.weekdaysShort){\n customLocale.weekdays = {};\n if(nfi18n.weekdays){\n customLocale.weekdays.longhand = nfi18n.weekdays;\n }\n if(nfi18n.weekdaysShort){\n customLocale.weekdays.shorthand = nfi18n.weekdaysShort;\n }\n }\n if(nfi18n.startOfWeek){\n customLocale.firstDayOfWeek = nfi18n.startOfWeek;\n }\n }\n return _.isEmpty(customLocale) ? false : customLocale;\n },\n\n // This function is called whenever we want to know the value of the date field.\n // Since it could be a date/time field, we can't return just the value.\n getValue: function() {\n\n if ( 'date_only' == this.get( 'date_mode' ) ) {\n return this.get( 'value' );\n }\n let el = this.get( 'el' );\n let hour = jQuery( el ).find( '.hour' ).val();\n let minute = jQuery( el ).find( '.minute' ).val();\n let ampm = jQuery( el ).find( '.ampm' ).val();\n let current_value = this.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let value = '';\n\n if ( 'undefined' != typeof date ) {\n value += date;\n }\n\n if ( 'undefined' != typeof hour && 'undefined' != typeof minute ) {\n value += ' ' + hour + ':' + minute;\n }\n\n if ( 'undefined' != typeof ampm ) {\n value += ' ' + ampm;\n }\n\n return value;\n\n // let date_value = {\n // date: date,\n // hour: hour,\n // minute: minute,\n // ampm: ampm,\n // };\n\n // this.model.set( 'value', date_value );\n },\n\n isSameDay: function(date1, date2) {\n const d1 = new Date(date1);\n const d2 = new Date(date2);\n d1.setHours(0, 0, 0, 0);\n d2.setHours(0, 0, 0, 0);\n return d1.getTime() === d2.getTime();\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldRecaptcha',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha' ), 'init:model', this.initRecaptcha );\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.resetRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\n \t\tnfRadio.channel( 'recaptcha' ).reply( 'update:response', this.updateResponse, this, model.id );\n },\n\n updateResponse: function( response, fieldID ) {\n \tvar model = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\tmodel.set( 'value', response );\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n },\n\n resetRecaptcha: function() {\n\t\t\tvar recaptchaID = 0;\n\t\t\tjQuery( '.g-recaptcha' ).each( function() {\n\t\t\t\ttry {\n\t\t\t\t\tgrecaptcha.reset( recaptchaID );\n\t\t\t\t} catch( e ){\n\t\t\t\t\tconsole.log( 'Notice: Error trying to reset grecaptcha.' );\n\t\t\t\t}\n\t\t\t\trecaptchaID++;\n\t\t\t} );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRecaptchaV3',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha_v3' ), 'init:model', this.initRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\t\t\t\n\t const formID = model.get( 'formID' );\n\t\t\t//Run recaptcha on init to allow cookie validation process\n\t\t\tthis.processRecaptcha(formID, model);\n\t\t\t//Rerun process every 110 seconds ( prevent Google recaptcha timeout out at 12O seconds )\n\t\t\tsetInterval(this.processRecaptcha, 110000, formID, model );\n },\n\n\t\tprocessRecaptcha: function(formID, model) {\n\t\t\ttry{\n\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'disable:submit', model );\n\t\t\t\tgrecaptcha.ready( function() {\n\t\t\t\t\tgrecaptcha.execute( model.get( 'site_key' ), {\n\t\t\t\t\t\taction: 'register'\n\t\t\t\t\t} ).then( function( token ) {\n\t\t\t\t\t\tmodel.set( 'value', token );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'enable:submit', model );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t} catch (e) {\n\t\t\t\t//Wait for the form to fully load and display error\n\t\t\t\tjQuery(document).on( 'nfFormReady', (layoutView) => {\n\t\t\t\t\t//Get consent details as recaptcha failed to load\n\t\t\t\t\tlet consent = nf_check_recaptcha_consent();\n\t\t\t\t\n\t\t\t\t\t//Get submit button\n\t\t\t\t\tlet submitFieldID;\n\t\t\t\t\tmodel.collection.models.forEach( (fieldModel) => {\n\t\t\t\t\t\tif(fieldModel.get(\"type\") === \"submit\"){\n\t\t\t\t\t\t\tsubmitFieldID = fieldModel.get(\"id\");\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\t//Display generic error\n\t\t\t\t\tnfRadio.channel( 'fields' ).request(\"add:error\", submitFieldID, \"recaptcha-v3-missing\", model.collection.options.formModel.get(\"settings\").recaptchaConsentMissing );\n\t\t\t\t\t//Create error message and add possible interaction with cookie consent depending on consent result\n\t\t\t\t\t//Display filterable error to add consent\n\t\t\t\t\tthis.nf_build_default_consent_action(model, consent.services, submitFieldID, layoutView );\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tnf_build_default_consent_action: function ( model, services, submitFieldID, layoutView ) {\n\t\t\t//Return if no consent management is detected\n\t\t\tconst returnIf = services.length <= 1 && services.includes(\"missing_cookie\") || services.length <= 0;\n\t\t\tif( !returnIf ){ \n\t\t\t\tlet actionElement = document.createElement(\"div\");\n\t\t\t\tactionElement.setAttribute(\"id\", \"nf_recaptcha_consent_event\");\n\t\t\t\tactionElement.innerText += model.collection.options.formModel.get(\"settings\").recaptchaConsentEvent;\n\n\t\t\t\tconst detailData = {\n\t\t\t\t\t\"services\": services,\n\t\t\t\t\t\"element\": actionElement,\n\t\t\t\t\t\"submitFieldID\": submitFieldID, \n\t\t\t\t\t\"layoutView\": layoutView\n\t\t\t\t}\n\t\t\t\t//Allow filtering of the element before printing it\n\t\t\t\tlet nf_consent_link_event = new CustomEvent('nf_consent_link', {detail: detailData});\n\t\t\t\tdocument.dispatchEvent(nf_consent_link_event);\n\n\t\t\t\t//Append action to error element\n\t\t\t\tconst genericErrorElements = document.getElementsByClassName(\"nf-error-recaptcha-v3-missing\");\n\t\t\t\tconst genericErrorElementsList = Array.prototype.slice.call(genericErrorElements);\n\t\t\t\tgenericErrorElementsList.forEach( (error) => {\n\t\t\t\t\terror.append( actionElement );\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n });\n\n return controller;\n} );\n","define('controllers/fieldHTML',[], function() {\n var controller = Marionette.Object.extend({\n\n htmlFields: [],\n trackedMergeTags: [],\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'fields-html' ), 'init:model', this.setupFieldMergeTagTracking );\n },\n\n setupFieldMergeTagTracking: function( fieldModel ) {\n this.htmlFields.push( fieldModel );\n\n var formID = fieldModel.get( 'formID' );\n\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'init:model', function( formModel ){\n\n var mergeTags = fieldModel.get( 'default' ).match( new RegExp( /{field:(.*?)}/g ) );\n if ( ! mergeTags ) return;\n\n _.each( mergeTags, function( mergeTag ) {\n var fieldKey = mergeTag.replace( '{field:', '' ).replace( '}', '' );\n var fieldModel = formModel.get( 'fields' ).findWhere({ key: fieldKey });\n if( 'undefined' == typeof fieldModel ) return;\n\n this.trackedMergeTags.push( fieldModel );\n this.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'change:modelValue', this.updateFieldMergeTags );\n }, this );\n\n // Let's get this party started!\n this.updateFieldMergeTags();\n }, this );\n },\n\n updateFieldMergeTags: function( fieldModel ) {\n _.each( this.htmlFields, function( htmlFieldModel ){\n var value = htmlFieldModel.get( 'value' );\n _.each( this.trackedMergeTags, function( fieldModel ){\n\n /* Search the value for any spans with mergetag data-key\n * values\n */\n var spans = value.match( new RegExp( /<span data-key=\"field:(.*?)<\\/span>/g ) );\n\t _.each( spans, function( spanVar ) {\n\t /* See if the span string contains the current\n * fieldModel's key. If so replace the span with a\n * merge tag for evaluation.\n */\n if( -1 < spanVar.indexOf( \"data-key=\\\"field:\" + fieldModel.get( 'key' ) ) ) {\n\t value = value.replace( spanVar, \"{field:\" + fieldModel.get( 'key' ) + \"}\" );\n }\n\t } );\n\n var mergeTag = '{field:' + fieldModel.get( 'key' ) + '}';\n\n const fieldValue = fieldModel.get( 'type' ) === \"repeater\" ? this.displayRepeaterData(fieldModel) : fieldModel.getValue();\n\n\t /* We replace the merge tag with the value\n\t * surrounded by a span so that we can still find it\n\t * and not affect itself or other field merge tags\n\t */\n value = value.replace( mergeTag, \"<span data-key=\\\"field:\"\n + fieldModel.get( 'key' ) + \"\\\">\"\n + fieldValue + \"</span>\" );\n }, this ) ;\n htmlFieldModel.set( 'value', value );\n htmlFieldModel.trigger( 'reRender' );\n }, this );\n },\n\n displayRepeaterData: function(fieldModel) {\n const repeaterFieldIDs = Object.keys(fieldModel.getValue());\n let returnHTML = \"\", passedFields = [];\n\n _.each(repeaterFieldIDs, function(fieldID){\n if(passedFields.indexOf(fieldID) === -1) {\n const field = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n if(typeof field !== \"undefined\"){\n const excluded = ['submit', 'html', 'hidden', 'password', 'passwordconfirm', 'divider', 'hr', 'note', 'unknown', 'button', 'confirm', 'creditcard', 'creditcardcvc', 'creditcardexpiration', 'creditcardfullname', 'creditcardnumber', 'creditcardzip', 'recaptcha', 'recaptcha_v3' ];\n if(excluded.indexOf(field.get('type')) === -1 && field.getValue().toString().length > 0){\n const index = Number(fieldID.split(\"_\").pop()) + 1;\n returnHTML += \"<p>\"+ field.get(\"label\") + \" \" + index + \" : \" + field.getValue() + \"</p>\";\n passedFields.push(fieldID);\n } \n }\n }\n });\n\n return returnHTML;\n }\n\n });\n\n return controller;\n});\n\n","/**\n* When a form is loaded, enable any help text that appears on the page.\n*/\ndefine('controllers/helpText',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', this.initHelpText );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'fieldset:added', this.initHelpText );\n\n\t\t\tnfRadio.channel( 'form' ).reply( 'init:help', this.initHelpText );\n\t\t},\n\n\t\tinitHelpText: function( view ) {\n\n\t\t\tif(view && !view.el && typeof view.get === 'function'){\n\t\t\t\t//Catch repeater fieldset added event\n\t\t\t\tif(view.get(\"type\") === \"repeater\"){\n\t\t\t\t\tview.el = \"#nf-form-\" + view.get(\"formID\") + \"-cont\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-help' ).each( function(el) {\n\t\t\t\tvar jBox = jQuery( this ).jBox( 'Tooltip', {\n\t\t\t\t\ttheme: 'TooltipBorder',\n\t\t\t\t\tcontent: jQuery( this ).data( 'text' ),\n\t\t\t\t\ttrigger: 'mouseenter focus',\n\t\t\t\t\tcloseOnMouseleave: true,\n\t\t\t\t\tcloseOnClick: true\n\t\t\t\t});\n\t\t\t// Hide tooltip on keydown and mouseleave\n\t\t\tjQuery(this).on('keydown mouseleave', function() {\n\t\t\t\tjBox.close();\n\t\t\t});\n\t\t\t} );\n\t\t}\n\t});\n\n\treturn controller;\n } );\n\n","define('controllers/fieldTextbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n nfRadio.channel( 'textbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n if('currency' == fieldModel.get('mask')){\n var form = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n var currencySymbol = ('undefined' !== typeof form) ? form.get( 'currencySymbol' ) : '';\n var currencySymbolDecoded = jQuery('<textarea />').html(currencySymbol).text();\n return fieldModel.get( 'value' ).replace(currencySymbolDecoded, '');\n }\n\n\t\t\treturn fieldModel.get( 'value' );\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","/**\n * When a form is loaded, enable any rtes in textareas.\n */\ndefine('controllers/fieldTextareaRTE',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'render:view', this.initTextareaRTEs );\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'click:extra', this.clickExtra );\n\n\t\t\t// Instantiates the variable that holds the media library frame.\n\t\t\tthis.meta_image_frame;\n\n\t\t\tthis.currentContext = {};\n\n\t\t\tif( 'undefined' == typeof jQuery.summernote ) return;\n\n\t\t\tjQuery.summernote.options.icons = {\n\t\t 'align': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignCenter': 'dashicons dashicons-editor-aligncenter',\n\t\t 'alignJustify': 'dashicons dashicons-editor-justify',\n\t\t 'alignLeft': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignRight': 'dashicons dashicons-editor-alignright',\n\t\t 'indent': 'dashicons dashicons-editor-indent',\n\t\t 'outdent': 'dashicons dashicons-editor-outdent',\n\t\t // 'arrowsAlt': 'dashicons fa-arrows-alt',\n\t\t 'bold': 'dashicons dashicons-editor-bold',\n\t\t 'caret': 'dashicons dashicons-arrow-down',\n\t\t // 'circle': 'dashicons fa-circle',\n\t\t 'close': 'dashicons dashicons-dismiss',\n\t\t 'code': 'dashicons dashicons-editor-code',\n\t\t 'eraser': 'dashicons dashicons-editor-removeformatting',\n\t\t // 'font': 'dashicons fa-font',\n\t\t // 'frame': 'dashicons fa-frame',\n\t\t 'italic': 'dashicons dashicons-editor-italic',\n\t\t 'link': 'dashicons dashicons-admin-links',\n\t\t 'unlink': 'dashicons dashicons-editor-unlink',\n\t\t 'magic': 'dashicons dashicons-editor-paragraph',\n\t\t // 'menuCheck': 'dashicons fa-check',\n\t\t 'minus': 'dashicons dashicons-minus',\n\t\t 'orderedlist': 'dashicons dashicons-editor-ol',\n\t\t // 'pencil': 'dashicons fa-pencil',\n\t\t // 'picture': 'dashicons fa-picture-o',\n\t\t // 'question': 'dashicons fa-question',\n\t\t 'redo': 'dashicons dashicons-redo',\n\t\t 'square': 'dashicons fa-square',\n\t\t // 'strikethrough': 'dashicons fa-strikethrough',\n\t\t // 'subscript': 'dashicons fa-subscript',\n\t\t // 'superscript': 'dashicons fa-superscript',\n\t\t 'table': 'dashicons dashicons-editor-table',\n\t\t // 'textHeight': 'dashicons fa-text-height',\n\t\t // 'trash': 'dashicons fa-trash',\n\t\t 'underline': 'dashicons dashicons-editor-underline',\n\t\t 'undo': 'dashicons dashicons-undo',\n\t\t 'unorderedlist': 'dashicons dashicons-editor-ul',\n\t\t // 'video': 'dashicons fa-youtube-play'\n\t\t };\n\n\t\t},\n\n\t\tinitTextareaRTEs: function( view ) {\n\t\t\tif ( 1 != view.model.get( 'textarea_rte' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Custom Button for links\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t// var linkButton = this.linkButton();\n\t\t\tvar linkButton = function( context ) {\n\t\t\t\treturn that.linkButton( context );\n\t\t\t}\n\t\t\tvar mediaButton = function( context ) {\n\t\t\t\treturn that.mediaButton( context );\n\t\t\t}\n\n\t\t\tvar toolbar = [\n\t\t\t\t[ 'paragraphStyle', ['style'] ],\n\t\t\t\t[ 'fontStyle', [ 'bold', 'italic', 'underline','clear' ] ],\n\t\t\t\t[ 'lists', [ 'ul', 'ol' ] ],\n\t\t\t [ 'paragraph', [ 'paragraph' ] ],\n\t\t\t [ 'customGroup', [ 'linkButton', 'unlink' ] ],\n\t\t\t [ 'table', [ 'table' ] ],\n\t\t\t [ 'actions', [ 'undo', 'redo' ] ],\n\t\t\t];\n\n\t\t\tif ( 1 == view.model.get( 'textarea_media' ) && 0 != userSettings.uid ) {\n\t\t\t\ttoolbar.push( [ 'tools', [ 'mediaButton' ] ] );\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-element' ).summernote( {\n\t\t\t\ttoolbar: toolbar,\n\t\t\t\tbuttons: {\n\t\t\t\t\tlinkButton: linkButton,\n\t\t\t\t\tmediaButton: mediaButton\n\t\t\t\t},\n\t\t\t\theight: 150, //set editable area's height\n\t\t\t\tcodemirror: { // codemirror options\n\t\t\t\t theme: 'monokai',\n\t\t\t\t lineNumbers: true\n\t\t\t\t},\n\t\t\t\tprettifyHtml: true,\n\t\t\t\tcallbacks: {\n\t\t\t\t\tonChange: function( e ) {\n\t\t\t\t\t\tview.model.set( 'value', jQuery( this ).summernote( 'code' ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar linkMenu = jQuery( view.el ).find( '.link-button' ).next( '.dropdown-menu' ).find( 'button' );\n\t\t\tlinkMenu.replaceWith(function () {\n\t\t\t return jQuery( '<div/>', {\n\t\t\t class: jQuery( linkMenu ).attr( 'class' ),\n\t\t\t html: this.innerHTML\n\t\t\t } );\n\t\t\t} );\n\t\t},\n\n\t\tlinkButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar linkButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-button' );\n\t\t\tvar linkDropdown = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-dropdown' );\n\t\t\treturn ui.buttonGroup([\n\t\t\t\tui.button({\n\t className: 'dropdown-toggle link-button',\n\t contents: linkButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertLink,\n\t click: function( e ) {\n\t \tthat.clickLinkButton( e, context );\n\t },\n\t data: {\n\t toggle: 'dropdown'\n\t }\n\t }),\n\t\t\t\tui.dropdown([\n\t ui.buttonGroup({\n\t children: [\n\t ui.button({\n\t contents: linkDropdown({}),\n\t tooltip: ''\n\t }),\n\t ]\n\t })\n\t ])\n\t\t\t]).render();\n\t\t},\n\n\t\tmediaButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar mediaButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-media-button' );\n\t\t\treturn ui.button({\n\t className: 'dropdown-toggle',\n\t contents: mediaButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertMedia,\n\t click: function( e ) {\n\t \tthat.openMediaManager( e, context );\n\t }\n\t }).render();\n\t\t},\n\n\t\topenMediaManager: function( e, context ) {\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\t// If the frame already exists, re-open it.\n\t\t\tif ( this.meta_image_frame ) {\n\t\t\t\tthis.meta_image_frame.open();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Sets up the media library frame\n\t\t\tthis.meta_image_frame = wp.media.frames.meta_image_frame = wp.media({\n\t\t\t\ttitle: nfi18n.fieldTextareaRTESelectAFile,\n\t\t\t\tbutton: { text: 'insert' }\n\t\t\t});\n\n\t\t\tvar that = this;\n\n\t\t\t// Runs when an image is selected.\n\t\t\tthis.meta_image_frame.on('select', function(){\n\n\t\t\t\t// Grabs the attachment selection and creates a JSON representation of the model.\n\t\t\t\tvar media_attachment = that.meta_image_frame.state().get('selection').first().toJSON();\n\t\t\t\tthat.insertMedia( media_attachment, context );\n\t\t\t});\n\n\t\t\t// Opens the media library frame.\n\t\t\tthis.meta_image_frame.open();\n\t\t},\n\n\t\tclickLinkButton: function ( e, context ) {\n\t\t\tvar range = context.invoke( 'editor.createRange' );\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\tvar text = range.toString()\n\t\t\tthis.currentContext = context;\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('hide.bs.dropdown', function ( e ) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('shown.bs.dropdown', function ( e ) {\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-text' ).val( text );\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-url' ).focus();\n\t\t\t});\n\t\t},\n\n\t\tclickExtra: function( e ) {\n\t\t\tvar textEl = jQuery( e.target ).parent().find( '.link-text' );\n\t\t\tvar urlEl = jQuery( e.target ).parent().find( '.link-url' );\n\t\t\tvar isNewWindowEl = jQuery( e.target ).parent().find( '.link-new-window' );\n\t\t\tthis.currentContext.invoke( 'editor.restoreRange' );\n\t\t\tif ( jQuery( e.target ).hasClass( 'insert-link' ) ) {\n\t\t\t\tvar text = textEl.val();\n\t\t\t\tvar url = urlEl.val();\n\t\t\t\tvar isNewWindow = ( isNewWindowEl.prop( 'checked' ) ) ? true: false;\n\t\t\t\tif ( 0 != text.length && 0 != url.length ) {\n\t\t\t\t\tthis.currentContext.invoke( 'editor.createLink', { text:text, url: url, isNewWindow: isNewWindow } );\n\t\t\t\t}\n\t\t\t}\n\t\t\ttextEl.val( '' );\n\t\t\turlEl.val( '' );\n\t\t\tisNewWindowEl.prop( 'checked', false );\n\t\t\tjQuery( e.target ).closest( 'div.note-btn-group.open' ).removeClass( 'open' );\n\t\t},\n\n\t\tinsertMedia: function( media, context ) {\n\t\t\tcontext.invoke( 'editor.restoreRange' );\n\t\t\tif ( 'image' == media.type ) {\n\t\t\t\tcontext.invoke( 'editor.insertImage', media.url );\n\t\t\t} else {\n\t\t\t\tcontext.invoke( 'editor.createLink', { text: media.filename, url: media.url } );\n\t\t\t}\n\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldStarRating',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'starrating' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'starrating' ), 'render:view', this.initRating );\n },\n\n register: function( model ) {\n\t\t\tmodel.set( 'renderRatings', this.renderRatings );\n\t\t},\n\n initRating: function( view ){\n jQuery( view.el ).find( '.starrating' ).rating();\n\n },\n\n renderRatings: function() {\n \tvar html = document.createElement( 'span' );\n \t// changed from 'default' to 'number_of_stars'\n \tfor (var i = 0; i <= this.number_of_stars - 1; i++) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-starrating-star' );\n var num = i + 1;\n var checked = '';\n\n // Check to see if current 'star' matches the default value\n\t\t if ( this.value == num ) {\n\t\t \tchecked = 'checked';\n\t\t }\n var htmlFragment = template( { id: this.id, classes: this.classes, num: num, checked: checked, required: this.required } );\n html.appendChild(\n document.createRange().createContextualFragment( htmlFragment )\n );\n \t}\n \treturn html.innerHTML;\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldTerms',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n },\n\n register: function( model ) {\n // nfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'click:extra', this.clickExtra );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'keyup:field', this.keyUpExtra );\n },\n \n clickExtra: function( e, model ) {\n var el = jQuery( e.currentTarget );\n var value = el.parent().find( '.extra-value' ).val();\n this.addOption( model, value );\n },\n\n keyUpExtra: function( el, model, keyCode ) {\n if( 13 != keyCode ) return;\n this.addOption( model, el.val() );\n },\n\n addOption: function( model, value ) {\n if( ! value ) return;\n var options = model.get( 'options' );\n var new_option = {\n label: value,\n value: value,\n selected: 0,\n };\n options.push( new_option );\n\n var selected = model.get( 'value' );\n selected.push( value );\n\n // model.set( 'reRender', true );\n model.trigger( 'reRender' );\n }\n \n });\n\n return controller;\n} );\n","/**\n * Before we display our form content, ask if anyone wants to give us a different view.\n * Before we do anything with the data, pass it through any loading filters.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2016 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/formContentFilters',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Init our fieldContent view and load filter arrays.\n\t\t\t */\n\t\t\tthis.viewFilters = [];\n\t\t\tthis.loadFilters = [];\n\n\t\t\t/*\n\t\t\t * Listen for requests to add new formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\n\t\t\t/*\n\t\t\t * -- DEPRECATED RADIO REPLIES --\n\t\t\t * \n\t\t\t * The 'fieldContents' channel has been deprecated as of 3.0 (it was present in the RC) in favour of 'formContent'.\n\t\t\t * Listen for requests to add new fieldContent filters.\n\t\t\t * \n\t\t\t * TODO: These radio listeners on the 'fieldContents' channels are here for backwards compatibility and should be removed eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our fieldContent filters.\n\t\t\t * TODO: Remove eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\t\t\n\t\t\t/*\n\t\t\t * -- END DEPRECATED --\n\t\t\t */\n\t\t},\n\n\t\taddViewFilter: function( callback, priority ) {\n\t\t\tthis.viewFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetViewFilters: function() {\n\t\t\treturn this.viewFilters;\n\t\t},\n\n\t\taddLoadFilter: function( callback, priority ) {\n\t\t\tthis.loadFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetLoadFilters: function() {\n\t\t\treturn this.loadFilters;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define( 'views/fieldItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'div',\n\n\t\tinitialize: function() {\n \t\tthis.listenTo( this.model, 'reRender', this.render, this );\n \t\tthis.listenTo( this.model, 'change:addWrapperClass', this.addWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:removeWrapperClass', this.removeWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:invalid', this.toggleAriaInvalid, this );\n\n \t\tthis.template = '#tmpl-nf-field-' + this.model.get( 'wrap_template' );\n\t\t},\n\n\t\ttest: function( model ) {\n\t\t\tconsole.log( 'firing from trigger 1' );\n\t\t},\n\n\t\taddWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'addWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).addClass( cl );\n\t\t\t\tthis.model.set( 'addWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\tremoveWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'removeWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).removeClass( cl );\n\t\t\t\tthis.model.set( 'removeWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\ttoggleAriaInvalid: function() {\n\t\t\tvar invalid = this.model.get( 'invalid' );\n\t\t\tjQuery( '[aria-invalid]', this.el ).attr( 'aria-invalid', JSON.stringify( invalid ) );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\n\t \t\t/*\n \t\t * If we have an input mask, init that mask.\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'mask' ) && '' != String(this.model.get( 'mask' )).trim() ) {\n \t\t\tif ( 'custom' == this.model.get( 'mask') ) {\n \t\t\t\tvar mask = this.model.get( 'custom_mask' );\n \t\t\t} else {\n \t\t\t\tvar mask = this.model.get( 'mask' );\n \t\t\t}\n\n\t\t\t\t/* POLYFILL */ Number.isInteger = Number.isInteger || function(value) { return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value; };\n \t\t\tif ( Number.isInteger( mask ) ) {\n \t\t\t\tmask = mask.toString();\n \t\t\t}\n\n\t\t\t\tif ( 'currency' == mask ) {\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'formID' ) );\n\n\t\t\t\t\tvar thousands_sep = form.get( 'thousands_sep' );\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: if we have a , replace it with a string with a space\n\t\t\t\t\t */\n\t\t\t\t\tif ( ' ' == thousands_sep || 160==thousands_sep.charCodeAt(0) ) {\n\t\t\t\t\t\tthousands_sep = ' ';\n\t\t\t\t\t}\n\t\t\t\t\tvar currencySymbol = jQuery( '<div/>' ).html( form.get( 'currencySymbol' ) ).text();\n\t\t\t\t\tthousands_sep = jQuery( '<div/>' ).html( thousands_sep ).text();\n\t\t\t\t\tvar decimal_point = jQuery( '<div/>' ).html( form.get( 'decimal_point' ) ).text();\n\t\t\t\t\t\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: Currently, these options use the plugin-wide defaults for locale.\n\t\t\t\t\t * When per-form locales are implemented, these will need to be revisited.\n\t\t\t\t\t */\n\t\t\t\t\tvar autoNumericOptions = {\n\t\t\t\t\t digitGroupSeparator : thousands_sep,\n\t\t\t\t\t decimalCharacter : decimal_point,\n\t\t\t\t\t currencySymbol : currencySymbol,\n\t\t\t\t\t\tmodifyValueOnWheel : false\n\t\t\t\t\t};\n\n\t\t\t\t\t// Initialization\n\t\t\t\t\tvar autoN_el = jQuery(jQuery( this.el ).find( '.nf-element' )[ 0 ]);\n\t\t\t\t\tnew AutoNumeric( jQuery( this.el ).find( '.nf-element' )[ 0 ], autoNumericOptions );\n\t\t\t\t\t// update the value for the model so it gets saved to\n\t\t\t\t\t// the database properly\n\t\t\t\t\tvar context = this;\n\t\t\t\t\tautoN_el.on( 'change', function( e ) {\n\t\t\t\t\t\tcontext.model.set( 'value', e.target.value );\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tjQuery( this.el ).find( '.nf-element' ).mask( mask );\n\t\t\t\t} \t\t\t\n\t \t\t}\n\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'render:view', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'render:view', this );\n\t\t},\n\n\t\ttemplateHelpers: function () {\n\t\t\tvar that = this;\n\t \treturn {\n\n\t\t\t\trenderElement: function(){\n\t\t\t\t\t// Account for falsey default value of 0.\n\t\t\t\t\tif( this.clean && ! this.value && 0 === this.default ) this.value = '0';\n\t\t\t\t\tvar tmpl = _.find( this.element_templates, function( tmpl ) {\n\t\t\t\t\t\tif ( 0 < jQuery( '#tmpl-nf-field-' + tmpl ).length ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-' + tmpl );\n\t\t\t\t\t\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabel: function() {\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-label' );\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabelClasses: function () {\n\t\t\t\t\tvar classes = '';\n\t\t\t\t\tif ( 'undefined' != typeof this.customLabelClasses ) {\n\t\t\t\t\t\tclasses = this.customLabelClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\trenderPlaceholder: function() {\n\t\t\t\t\tvar placeholder = this.placeholder;\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customPlaceholder ) {\n\t\t\t\t\t\tplaceholder = this.customPlaceholder( placeholder );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( '' != String(placeholder).trim() ) {\n\t\t\t\t\t\treturn 'placeholder=\"' + _.escape( placeholder ) + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderWrapClass: function() {\n\t\t\t\t\tvar wrapClass = 'field-wrap ' + this.type + '-wrap';\n\n\t\t\t\t\t// Check if type and parentType are different. If, so\n\t\t\t\t\t// then add appropriate parentType wrap class\n\t\t\t\t\tif ( this.type !== this.parentType ) {\n\t\t\t\t\t\twrapClass = wrapClass + ' ' + this.parentType + '-wrap';\n\t\t\t\t\t}\n\t\t\t\t\t// If we have an old_classname defined, output wrap class for backward compatibility\n\t\t\t\t\tif ( 'undefined' != typeof this.old_classname && 0 < String(this.old_classname).trim().length ) {\n\t\t\t\t\t\twrapClass += ' ' + this.old_classname + '-wrap';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof customWrapClass ) {\n\t\t\t\t\t\twrapClass = customWrapClass( wrapClass );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn wrapClass;\n\t\t\t\t},\n\n\t\t\t\trenderClasses: function() {\n\t\t\t\t\tvar classes = this.classes;\n\n\t\t\t\t\tif ( this.error ) {\n\t\t\t\t\t\tclasses += ' nf-error';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclasses = classes.replace( 'nf-error', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof this.element_class && 0 < String(this.element_class).trim().length ) {\n\t\t\t\t\t\tclasses += ' ' + this.element_class;\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a function for adding extra classes, add those.\n\t\t\t\t\t */\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customClasses ) {\n\t\t\t\t\t\tclasses = this.customClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n\n\t\t\t\tmaybeDisabled: function() {\n\t\t\t\t\tif ( 1 == this.disable_input ) {\n\t\t\t\t\t\treturn 'disabled';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n maybeRequired: function() {\n if ( 1 == this.required ) {\n return 'aria-required=\"true\" required';\n } else {\n return '';\n }\n },\n\n\t\t\t\tmaybeDisableAutocomplete: function() {\n\t\t\t\t\tif ( 1 == this.disable_browser_autocomplete ) {\n\t\t\t\t\t\treturn 'autocomplete=\"off\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst autoType = this.translateAutoCompletionType( this.type );\n\t\t\t\t\t\treturn 'autocomplete=\"' + autoType + '\"';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\ttranslateAutoCompletionType: function( type ){\n\t\t\t\t\t//https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n\t\t\t\t\tswitch( type ){\n\t\t\t\t\t\tcase 'address':\n\t\t\t\t\t\t\treturn 'street-address';\n\t\t\t\t\t\tcase 'address2':\n\t\t\t\t\t\t\treturn 'address-line2';\n\t\t\t\t\t\tcase 'city':\n\t\t\t\t\t\t\treturn 'address-level2';\n\t\t\t\t\t\tcase 'email':\n\t\t\t\t\t\t\treturn 'email';\n\t\t\t\t\t\tcase 'firstname':\n\t\t\t\t\t\t\treturn 'given-name';\n\t\t\t\t\t\tcase 'lastname':\n\t\t\t\t\t\t\treturn 'family-name';\n\t\t\t\t\t\tcase 'zip':\n\t\t\t\t\t\t\treturn 'postal-code';\n\t\t\t\t\t\tcase 'phone':\n\t\t\t\t\t\t\treturn 'tel';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn 'on';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tmaybeInputLimit: function() {\n\t\t\t\t\tif ( 'characters' == this.input_limit_type && '' != String(this.input_limit).trim() ) {\n\t\t\t\t\t\treturn 'maxlength=\"' + this.input_limit + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tgetHelpText: function() {\n\t\t\t\t\t// this.help_text = jQuery( this.help_text ).html();\n\t\t\t\t\t// return ( 'undefined' != typeof this.help_text ) ? this.help_text.replace(/\"/g, \""\") : '';\n\t\t\t\t\treturn ( 'undefined' != typeof this.help_text ) ? this.help_text : '';\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderHelp: function() {\n\n\t\t\t\t\t// use jQuery().text() to make sure help_text has actual\n\t\t\t\t\t// text and not just HTML tags.\n\t\t\t\t\tvar check_text_par = document.createElement( 'p' );\n check_text_par.innerHTML = this.help_text;\n\n var shouldRenderHelpText = false;\n // Check for text or image tags\n\t\t\t\t\tif ( 0 != String(jQuery( check_text_par ).text()).trim().length\n\t\t\t\t\t\t|| 0 < jQuery( check_text_par ).find('img').length ) {\n \tshouldRenderHelpText = true;\n }\n\n\t\t\t\t\tif ( 'undefined' != typeof this.help_text && shouldRenderHelpText ) {\n\n\t\t\t\t\t\t// Strip HTML tags for accessibility\n\t\t\t\t\t\tfunction stripTags( input ) {\n\t\t\t\t\t\t\treturn input.replace(/<\\/?[^>]+(>|$)/g, \"\").trim();\n\t\t\t\t\t\t}\n \n\t\t\t\t\t\tvar icon = document.createElement( 'span' );\n\t\t\t\t\t\ticon.classList.add( 'fa', 'fa-info-circle', 'nf-help' );\n\t\t\t\t\t\ticon.setAttribute( 'data-text', this.getHelpText() );\n\t\t\t\t\t\ticon.setAttribute( 'tabindex', '0' ); // Make it focusable\n\t\t\t\t\t\ticon.setAttribute( 'aria-describedby', 'hidden-help-text-' + this.id ); // Link to the hidden description\n\t\t\t\t\t \n\t\t\t\t\t\t// Create a hidden element for screen readers\n\t\t\t\t\t\tvar hiddenHelpText = document.createElement( 'span' );\n\t\t\t\t\t\thiddenHelpText.textContent = stripTags( this.help_text ); // Output the help text without tags\n\t\t\t\t\t\thiddenHelpText.id = 'hidden-help-text-' + this.id;\n\t\t\t\t\t\thiddenHelpText.classList.add( 'nf-sr-only' ); // Visually hidden but available for screen readers\n\t\t\t\t\t\thiddenHelpText.setAttribute( 'role', 'tooltip' );\n\t\t\t\t\t \n\t\t\t\t\t\ticon.appendChild( hiddenHelpText ); // Append the hidden help text\n \n\t\t\t\t\t\treturn icon.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tfieldDescription.setAttribute('id', 'nf-description-' + this.id);\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n renderNumberDefault: function() {\n // If the field is clean...\n if ( this.clean ) {\n // If we have a default...\n if ( 0 === this.default || this.default ) {\n return this.default;\n } // If we do not have a placeholder...\n else if ( ! this.placeholder ) {\n return this.value;\n } // Otherwise...\n else {\n return '';\n }\n } // Otherwise... (The field is not clean.)\n else {\n return this.value;\n }\n },\n\n\t\t\t\trenderCurrencyFormatting: function( number ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Our number will have a . as a decimal point. We want to replace that with our locale decimal, nfi18n.decimal_point.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedDecimal = number.toString().replace( '.', '||' );\n\t\t\t\t\t/*\n\t\t\t\t\t * Add thousands separator. Our original number var won't have thousands separators.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedThousands = replacedDecimal.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n\t\t\t\t\tvar formattedNumber = replacedThousands.replace( '||', nfi18n.decimal_point );\n\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', that.model.get( 'formID' ) );\n\t\t\t\t\tvar currency_symbol = form.get( 'settings' ).currency_symbol;\n\t\t\t\t\treturn currency_symbol + formattedNumber;\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderTime: function() {\n\t\t\t\t\tif ( 'time_only' == this.date_mode || 'date_and_time' == this.date_mode ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\n\t\tevents: {\n\t\t\t'change .nf-element': 'fieldChange',\n\t\t\t'keyup .nf-element': 'fieldKeyup',\n\t\t\t'click .nf-element': 'fieldClick',\n\t\t\t'click .extra': 'extraClick',\n\t\t\t'change .extra': 'extraChange',\n\t\t\t'blur .nf-element': 'fieldBlur'\n\t\t},\n\n\t\tfieldChange: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar response = nfRadio.channel( 'nfAdmin' ).request( 'change:field', el, this.model );\n\t\t},\n\n\t\tfieldKeyup: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar keyCode = e.keyCode;\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t},\n\n\t\tfieldClick: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:field', el, this.model );\n\t\t},\n\n\t\textraClick: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:extra', e, this.model );\n\t\t},\n\n\t\textraChange: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:extra', e, this.model );\n\t\t},\n\n\t\tfieldBlur: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'blur:field', el, this.model );\n\t\t},\n\n\t\tonAttach: function() {\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'attach:view', this );\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/beforeField',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-before'\n });\n\n return view;\n} );\n","define( 'views/fieldErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-field-error',\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldErrorCollection',['views/fieldErrorItem'], function( fieldErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: fieldErrorItem,\n\n\t\tinitialize: function( options ) {\n\t\t\tthis.fieldModel = options.fieldModel;\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tif ( 0 == this.fieldModel.get( 'errors' ).models.length ) {\n this.fieldModel.removeWrapperClass( 'nf-error' );\n this.fieldModel.removeWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-pass' );\n this.fieldModel.setInvalid( false );\n } else {\n this.fieldModel.removeWrapperClass( 'nf-pass' );\n this.fieldModel.addWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-error' );\n this.fieldModel.setInvalid( true );\n }\n\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/inputLimit',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-input-limit',\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'field-' + this.model.get( 'id' ) ), 'keyup:field', this.updateCount );\n \tthis.count = this.model.get( 'input_limit' );\n \tthis.render();\n },\n\n updateCount: function( el, model ) {\n var value = jQuery( el ).val();\n var regex = /\\s+/gi;\n var words = String(value).trim().replace(regex, ' ').split(' ');\n var wordCount = words.length;\n var charCount = value.length;\n \n /**\n * PHP Config has 'char' instead of 'characters', so I changed it to\n * 'characters', but added 'char' here so existing form fields will\n * act correctly\n **/\n if ( 'characters' == this.model.get( 'input_limit_type' )\n || 'char' == this.model.get( 'input_limit_type' ) ) {\n jQuery( el ).attr( 'maxlength', this.model.get( 'input_limit' ) );\n this.count = this.model.get( 'input_limit' ) - charCount;\n } else {\n this.count = this.model.get( 'input_limit' ) - wordCount;\n var limit = this.model.get( 'input_limit' );\n if( wordCount > limit ){\n jQuery( el ).val( words.slice( 0, limit).join( ' ' ) );\n }\n }\n\n \tthis.render();\n },\n\n templateHelpers: function() {\n \tvar that = this;\n \treturn {\n \t\tcurrentCount: function() {\n \t\t\treturn that.count;\n \t\t}\n \t}\n }\n\n });\n\n return view;\n} );\n","define( 'views/afterField',['views/fieldErrorCollection', 'views/inputLimit'], function( fieldErrorCollection, InputLimitView ) {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-after',\n\n initialize: function() {\n \t\tthis.model.on( 'change:errors', this.changeError, this );\n },\n\n onRender: function() {\n \t/*\n \t * If we have an error, render our error view.\n \t * TODO: Perhaps move to a controller?\n \t */\n \tvar errorEl = jQuery( this.el ).children( '.nf-error-wrap' );\n \t\tthis.errorCollectionView = new fieldErrorCollection( { el: errorEl, collection: this.model.get( 'errors' ), fieldModel: this.model } );\n if ( 0 < this.model.get( 'errors' ).length ) {\n this.errorCollectionView.render(); \n }\n \n \t\t/*\n \t\t * If we have an input limit set, render the view that contains our counter\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'input_limit' ) && '' != String(this.model.get( 'input_limit' )).trim() ){\n \t\t\tvar inputLimitEl = jQuery( this.el ).children( '.nf-input-limit');\n \t\t\tthis.inputLimitView = new InputLimitView( { el: inputLimitEl, model: this.model } );\n\t\t\t\tinputLimitEl.attr('aria-live', 'polite');\n\t\t\t\tinputLimitEl.attr('role', 'status');\n\t\t\t\tinputLimitEl.attr('aria-relevant', 'additions');\n\t\t\t\tinputLimitEl.attr( 'aria-atomic', true );\n \t\t}\n },\n\n changeError: function() {\n\t\t\tthis.errorCollectionView.render();\n\t\t},\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterFieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField'], function( fieldItem, beforeField, afterField ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n return containerClass;\n }\n }\n }\n });\n\n return view;\n} );\n\n","define( 'views/fieldRepeaterFieldCollection',['views/fieldRepeaterFieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterSetLayout',[ 'views/fieldRepeaterFieldCollection' ], function( fieldCollection ) {\n var view = Marionette.LayoutView.extend({\n tagName: 'fieldset',\n template: '#tmpl-nf-field-repeater-set',\n\n regions: {\n fields: '.nf-repeater-fieldset',\n },\n\n onRender: function() {\n this.fields.show( new fieldCollection( { collection: this.model.get( 'fields' ) } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-remove-fieldset': 'removeSet',\n },\n\n removeSet: function() {\n nfRadio.channel( \"field-repeater\" ).trigger( 'remove:fieldset', this.model )\n }\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterSetCollection',['views/fieldRepeaterSetLayout'], function( repeaterSetLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'div',\n\t\tchildView: repeaterSetLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterLayout',[ 'views/fieldRepeaterSetCollection' ], function( repeaterSetCollection ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'div',\n template: '#tmpl-nf-field-repeater',\n\n regions: {\n sets: '.nf-repeater-fieldsets',\n },\n\n initialize: function() {\n\n this.collection = this.model.get( 'sets' );\n\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'rerender:fieldsets', this.render );\n\n },\n\n onRender: function() { \n this.sets.show( new repeaterSetCollection( { collection: this.collection } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n renderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-add-fieldset': 'addSet'\n },\n\n addSet: function() {\n nfRadio.channel( 'field-repeater' ).trigger( 'add:fieldset', this.model.id ); \n },\n\n beforeSubmit: function() {\n\t\t\tthis.collection.beforeSubmit( this.model.get( 'sets' ) );\n\t\t}\n \n\n });\n\n return view;\n} );\n","define( 'views/fieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField', 'views/fieldRepeaterLayout'], function( fieldItem, beforeField, afterField, repeaterFieldLayout ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n \n if ( 'repeater' == this.model.get( 'type' ) ) {\n this.field.show( new repeaterFieldLayout( { model: this.model } ) );\n } else {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n \n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n\n return containerClass;\n }\n }\n }\n\n });\n\n return view;\n} );\n\n","/**\n * Return views that might be used in extensions.\n * These are un-instantiated views.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/loadViews',['views/fieldItem', 'views/fieldLayout'], function( fieldItemView, fieldLayoutView ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t// Reply to requests for our field item view.\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldItem', this.getFieldItem );\n\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldLayout', this.getFieldLayout );\n\t\t},\n\n\t\tgetFieldItem: function( model ) {\n\t\t\treturn fieldItemView;\n\t\t},\n\n\t\tgetFieldLayout: function() {\n\t\t\treturn fieldLayoutView;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * If a form has at least one field error, we should disable the submit button and add a form error.\n * If a form had errors, but all the field errors have been removed, we should remove the form error.\n *\n * @since 3.0\n */\ndefine('controllers/formErrors',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen for error messages being added to and removed from fields.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.addError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.removeError );\n\n\t\t\t/*\n\t\t\t * Respond to requests to get form errors\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\taddError: function( fieldModel, errorID, errorMsg ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t/*\n\t\t\t * We store our errors in this object by field ID so that we don't have to loop over all our fields when we're testing for errors.\n\t\t\t * They are stored as an object within an array, using the field ID as the key.\n\t\t\t *\n\t\t\t * If we haven't setup an array item for this field, set it as an object.\n\t\t\t */\n\t\t\tif ( 'undefined' == typeof formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = {};\n\t\t\t}\n\t\t\t// Add an error to our tracking array\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ][ errorID ] = errorMsg;\n\t\t\t/*\n\t\t\t * We have at least one field error, so submmission should be prevented.\n\t\t\t * Add a form error.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'add:error', 'field-errors', formModel.get( 'settings' ).formErrorsCorrectErrors );\n\t\t},\n\n\t\tremoveError: function( fieldModel, errorID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t// Remove this error ID from our tracking array.\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = _.omit( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ], errorID );\n\t\t\t/*\n\t\t\t * If we don't have any more error IDs on this field, then we need to remove this field from the array.\n\t\t\t *\n\t\t\t * Then, if the fieldErrors tracking array has a length of 0, we remove our form error, because all field errors have been dealt with.\n\t\t\t */\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) ) {\n\t\t\t\tdelete formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ];\n\t\t\t}\n\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\t// Remove our form error.\n\t\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'remove:error', 'field-errors' );\n\t\t\t}\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n\t\t\treturn errors;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Handles submission of our form.\n */\ndefine('controllers/submit',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'init:model', this.registerSubmitHandler );\n\t\t},\n\n\t\t/**\n\t\t * Register the submission handler function.\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tregisterSubmitHandler: function( formModel ) {\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).reply( 'submit', this.submit );\n\t\t},\n\n\t\t/**\n\t\t * Handles the actual submission of our form.\n\t\t * When we submit:\n\t\t *\n\t\t * 1) Send out a message saying that we're about to begin form submission.\n\t\t * 2) Check the form for errors\n\t\t * 3) Submit the data\n\t\t * 4) Send out a message with our response\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tsubmit: function( formModel ) {\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'before:submit', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'before:submit', formModel );\n\n\t\t\t/*\n\t\t\t * Validate our field models.\n\t\t\t */\n\t\t\tvar validate = nfRadio.channel( 'forms' ).request( 'maybe:validate', formModel );\n\t\t \tif( false !== validate ){\n\n // When validating all fields, set clean to false to force validation.\n _.each( formModel.get( 'fields' ).models, function( fieldModel ) {\n fieldModel.set( 'clean', false );\n } );\n\n\t\t\t\t/*\n\t\t\t\t * This method is defined in our models/fieldCollection.js file,\n\t\t\t\t * except where overridden by an add-on (ie Layout & Styles).\n\t\t\t\t */\n\t\t\t\tformModel.get( 'formContentData' ).validateFields();\n\t\t\t}\n\n\t\t\tvar submit = nfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'maybe:submit', formModel );\n\t\t\tif ( false == submit ) {\n\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:cancel', formModel );\n\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:cancel', formModel );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif( false !== validate ){\n\n\t\t\t\t// Ignore non-blocking errors.\n\t\t\t\tvar blockingFormErrors = _.filter( formModel.get( 'errors' ).models, function( error ){\n\n\t\t\t\t\t// Ignore email action related errors.\n\t\t\t\t\tif( 'invalid_email' == error.get( 'id' ) || 'email_not_sent' == error.get( 'id' ) ) return false;\n\n\t\t\t\t\treturn true; // Error is blocking.\n\t\t\t\t});\n\n\t\t\t\t/*\n\t\t\t\t * Make sure we don't have any form errors before we submit.\n\t\t\t\t * Return false if we do.\n\t\t\t\t */\n\t\t\t\tif ( 0 != _.size( blockingFormErrors ) ) {\n\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:failed', formModel );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:failed', formModel );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'after:submitValidation', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'after:submitValidation', formModel );\n\n\t\t\t/*\n\t\t\t * Actually submit our form, and send out a message with our response.\n\t\t\t */\n\n \t\t\tvar formID = formModel.get( 'id' );\n\t\t\tvar fields = {};\n\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\tvar fieldDataDefaults = { value:field.get( 'value' ), id:field.get( 'id' ) };\n\n\t\t\t\t// Add field data at the field ID for efficient access.\n\t\t\t\tfields[ field.get( 'id' ) ] = nfRadio.channel( field.get( 'type' ) ).request( 'get:submitData', fieldDataDefaults, field ) || fieldDataDefaults;;\n\t\t\t} );\n\t\t\tvar extra = formModel.get( 'extra' );\n\t\t\tvar settings = formModel.get( 'settings' );\n\t\t\tdelete settings.formContentData;\n\t\t\tvar formData = JSON.stringify( { id: formID, fields: fields, settings: settings, extra: extra } );\n\t\t\tvar data = {\n\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t'nonce_ts': nfFrontEnd.nonce_ts,\n\t\t\t\t'formData': formData\n\t\t\t}\n\n\t\t\tvar that = this;\n\n\t\t\tjQuery.ajax({\n\t\t\t url: nfFrontEnd.adminAjax,\n\t\t\t type: 'POST',\n\t\t\t data: data,\n\t\t\t cache: false,\n\t\t\t \tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t \t\ttry {\n\t\t\t\t \t\tvar response = data;\n\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t \tjQuery( document ).trigger( 'nfFormSubmitResponse', { response: response, id: formModel.get( 'id' ) } );\n\t\t\t \t\t} catch( e ) {\n\t\t\t \t\t\tconsole.log( e );\n\t\t\t \t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\tconsole.log( e );\n\t\t\t \t\t}\n\n\t\t\t },\n\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t // Handle errors here\n\t\t\t console.log('ERRORS: ' + errorThrown);\n\t\t\t\t\tconsole.log( jqXHR );\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar response = jQuery.parseJSON( jqXHR.responseText );\n\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\tconsole.log( 'Parse Error: ' + jqXHR.responseText);\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'add:error', 'parse-response-ERROR', errorThrown );\n\t\t\t\t\t}\n\n\t\t\t }\n\t\t\t});\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define( 'views/fieldCollection',['views/fieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout\n\n\t});\n\n\treturn view;\n} );\n","/**\n * Default filters\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/defaultFilters',[ 'views/fieldCollection', 'models/fieldCollection' ], function( FieldCollectionView, FieldCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'before:filterData', this.registerDefaultDataFilter );\n\t\t},\n\n\t\tregisterDefaultDataFilter: function( formModel ) {\n\t\t\t/*\n\t\t\t * Set our default formContent load filter\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:loadFilter', this.defaultFormContentLoad, 10, this );\n\t\t\t/*\n\t\t\t * Set our default formContentView.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:viewFilter', this.defaultFormContentView, 10, this );\n\t\t},\n\n\t\tdefaultFormContentLoad: function( formContentData, formModel, context ) {\n\t\t\tvar fieldCollection = formModel.get( 'fields' );\n\t\t\t/*\n\t\t\t * If we only have one load filter, we can just return the field collection.\n\t\t\t */\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tif ( 1 == sortedArray.length || 'undefined' == typeof formContentData || true === formContentData instanceof Backbone.Collection ) return formModel.get( 'fields' );\n\n \tvar fieldModels = _.map( formContentData, function( key ) {\n \t\treturn formModel.get( 'fields' ).findWhere( { key: key } );\n \t}, this );\n\n \tvar currentFieldCollection = new FieldCollection( fieldModels );\n\n \tfieldCollection.on( 'reset', function( collection ) {\n \t\tvar resetFields = [];\n \t\tcurrentFieldCollection.each( function( fieldModel ) {\n \t\t\tif ( 'submit' != fieldModel.get( 'type' ) ) {\n \t\t\t\tresetFields.push( collection.findWhere( { key: fieldModel.get( 'key' ) } ) );\n \t\t\t} else {\n \t\t\t\tresetFields.push( fieldModel );\n \t\t\t}\n \t\t} );\n\n currentFieldCollection.options = { formModel: formModel };\n \t\tcurrentFieldCollection.reset( resetFields );\n \t} );\n\n \treturn currentFieldCollection;\n },\n\n defaultFormContentView: function() {\n \treturn FieldCollectionView;\n }\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for removing unique field errors.\n */\n\ndefine('controllers/uniqueFieldError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen to keyup and field changes.\n\t\t\t *\n\t\t\t * If those fields have a unique field error, remove that error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.removeError );\n\n\t\t},\n\n\t\tremoveError: function( el, model ) {\n\t\t\tmodel = model || el;\n\t\t\t/*\n\t\t\t * Remove any unique field errors.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'unique_field' );\n\t\t},\n\n\t});\n\n\treturn controller;\n} );\n","let nfAllRepeaterFieldsModels = [];\ndefine( 'models/fieldRepeaterSetModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t\tinitialize: function(collection, options) {\n\n\t\t\tthis.repeaterFieldModel = options.repeaterFieldModel;\n\n\t\t\tthis.set( 'label', this.repeaterFieldModel.get('label') );\n\n\t\t\tif(collection && options){\n\t\t\t\tthis.initAllRepeaterFieldsModels(collection, options);\n\t\t\t}\n\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFields', this.getRepeaterFields, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldById', this.getRepeaterFieldById, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterModels', this.getAllRepeaterFieldsModels, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsetsByForm', this.getAllFieldsetsByForm, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsModelsArrayByForm', this.getAllFieldsModelsArrayByForm, this );\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:repeaterModels', this.setAllRepeaterFieldsModels);\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:value', this.setAllRepeatersValues );\n\t\t},\n\n\t\tsetAllRepeaterFieldsModels: function() {\n\t\t\tthis.set( 'repeaterFieldsetsModels', nfAllRepeaterFieldsModels );\n\t\t\tthis.allRepeatersFieldsetsModels = nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tinitAllRepeaterFieldsModels: function(collection, options) {\t\n\t\t\tconst formID = options.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = options.repeaterFieldModel.get('id');\n\t\t\tconst currentModels = collection.fields.models;\n\t\t\t\n\t\t\tlet isModelSet = nfAllRepeaterFieldsModels.find(model => model.id === repeaterID && model.form === formID);\n\n\t\t\tif ( isModelSet ){\n\t\t\t\tisModelSet.fields = isModelSet.fields.concat(currentModels);\n\t\t\t} else {\n\t\t\t\tnfAllRepeaterFieldsModels.push( {\n\t\t\t\t\tform: formID,\n\t\t\t\t\tid: repeaterID,\n\t\t\t\t\tfields: currentModels\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.setAllRepeaterFieldsModels();\n\t\t},\n\n\t\tgetAllRepeaterFieldsModels: function() {\n\t\t\treturn nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tgetAllFieldsetsByForm: function(formID) {\n\t\t\tconst allFormsModels = this.getAllRepeaterFieldsModels();\n\t\t\tconst thisFormModels = allFormsModels.filter( model => model.form === formID );\n\n\t\t\treturn thisFormModels;\n\t\t},\n\n\t\tgetAllFieldsModelsArrayByForm: function(formID) {\n\t\t\tconst thisFormModels = this.getAllFieldsetsByForm(formID);\n\t\t\tlet singleArray = [];\n\t\t\tthisFormModels.map( model => {\n\t\t\t\tsingleArray = singleArray.concat(model.fields);\n\t\t\t});\n\n\t\t\treturn singleArray;\n\t\t},\n\n\t\tgetRepeaterFields: function(repeaterID) {\n\t\t\tconst allModels = this.getAllRepeaterFieldsModels();\n\t\t\tlet fields = allModels.find(model => String(model.id) === String(repeaterID));\n\t\t\tif(typeof fields === \"undefined\"){\n\t\t\t\tfields = this.reverseResearchFieldsetModel(repeaterID, allModels);\n\t\t\t}\n\n\t\t\treturn fields;\n\t\t},\n\n\t\treverseResearchFieldsetModel: function(repeaterID, allModels) {\n\t\t\tlet fields;\n\t\t\t_.each(allModels, function(fieldsetModel) {\n\t\t\t\t_.each(fieldsetModel.fields, function(fieldModel){\n\t\t\t\t\tif(String(fieldModel.id).startsWith(repeaterID)){\n\t\t\t\t\t\tfields = fieldsetModel;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn fields;\n\t\t},\n\n\t\tgetRepeaterFieldById: function( id ){\n\t\t\tconst repeaterID = String(id).split('.')[0];\n\t\t\tconst fieldObject = this.getRepeaterFields(repeaterID);\n\t\t\t//return early if no match found by ID\n\t\t\tif(typeof fieldObject === 'undefined') return;\n\n\t\t\tconst model = fieldObject.fields.find(field => field.id === id);\n\n\t\t\treturn model;\n\t\t},\n\n\t\tsetAllRepeatersValues: function() {\n\t\t\tconst repeaters = this.getAllRepeaterFieldsModels();\n\t\t\tif(repeaters.length > 0) {\n\t\t\t\t\n\t\t\t\t_.each(repeaters, function(repeater){\n\t\t\t\t\tlet fields = repeater.fields;\n\t\t\t\t\tlet repeaterFieldModel = nfRadio.channel( 'fields' ).request( 'get:field', repeater.id );\n\n\t\t\t\t\tif(fields.length > 0){\n\t\t\t\t\t\tlet repeaterFieldValue = {};\n\t\t\t\t\t\t//Loop through fields\n\t\t\t\t\t\t_.each( fields, function( field ){\n\t\t\t\t\t\t\t//Get ID and Value to format and store them in the repeaterFieldValue object\n\t\t\t\t\t\t\tlet value = field.get('value');\n\t\t\t\t\t\t\tlet id = field.get('id');\n\t\t\t\t\t\t\t//Refactor ID used in case we have multiple same form on the DOM and using a changed ID for main repeater field.\n\t\t\t\t\t\t\tif(id.split(\"_\").length > 2){\n\t\t\t\t\t\t\t\tlet idArray = id.split(\"_\");\n\t\t\t\t\t\t\t\tidArray[1] = idArray[1].split(\".\")[1];\n\t\t\t\t\t\t\t\tlet newID = idArray[0] + \".\" + idArray[1] + \"_\" + idArray[2];\n\t\t\t\t\t\t\t\tdelete repeaterFieldValue[id];\n\t\t\t\t\t\t\t\tid = newID;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trepeaterFieldValue[id] = {\n\t\t\t\t\t\t\t\t\"value\": value,\n\t\t\t\t\t\t\t\t\"id\": id\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//Check if time is correctly added on Date/time fields\n\t\t\t\t\t\t\tif(field.get('type') === \"date\" && typeof value === \"string\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" )){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].value = {\n\t\t\t\t\t\t\t\t\t\"date\": value,\n\t\t\t\t\t\t\t\t\t\"hour\": field.attributes.selected_hour,\n\t\t\t\t\t\t\t\t\t\"minute\": field.attributes.selected_minute,\n\t\t\t\t\t\t\t\t\t\"ampm\": field.attributes.selected_ampm\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(field.get('type') === \"file_upload\" && field.get('value')){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].files = field.attributes.files;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\trepeaterFieldModel.set( 'isUpdated', false);\n\t\t\t\t\t\t//Update repeater field value with repeaterFieldValue \n\t\t\t\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', repeaterFieldModel, repeaterFieldValue);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldRepeaterSetCollection',['models/fieldRepeaterSetModel', 'models/fieldCollection' ], function( repeaterSetModel, fieldCollection ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: repeaterSetModel,\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'sort:fieldsets', this.sortIDs );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'remove:fieldset', this.removeSet );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'add:fieldset', this.addSet );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:fieldsets', this.getFieldSets, this );\n\n\t\t},\n\n\t\taddSet: function(repeaterFieldID = false) {\n\t\t\tlet repeater;\n\t\t\tif(repeaterFieldID){\n\t\t\t\t//Get correct Field Model in case of multiple Repeater fields use\n\t\t\t\tconst repeaterFieldModel = this.options.repeaterFieldModel.id === repeaterFieldID ? this.options.repeaterFieldModel : false;\n\t\t\t\trepeater = repeaterFieldModel;\n\t\t\t\tif(repeaterFieldModel){\n\t\t\t\t\t//Create a new collection\n\t\t\t\t\tlet fields = new fieldCollection( this.options.templateFields, { formModel: this.options.formModel, repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t\t//Add it th sets of collection\n\t\t\t\t\tthis.add( { fields: fields }, {repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t}\n\t\t\t}\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger('fieldset:added', repeater);\n\t\t},\n\n\t\tremoveSet: function( fieldset ) {\n\t\t\t// Remove possible form errors related to required fields\n\t\t\tthis.removeRequiredFieldsErrors(fieldset);\n\n\t\t\t//Remove field models saved globally\n\t\t\tconst formID = fieldset.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = fieldset.repeaterFieldModel.get('id');\n\t\t\tconst isRepeaterModelSet = nfAllRepeaterFieldsModels.find(rep => rep.id === repeaterID && rep.form === formID );\n\t\t\tif ( isRepeaterModelSet ){\n\t\t\t\tlet remove = [];\n\t\t\t\t_.each(isRepeaterModelSet.fields, (field, index) => {\n\t\t\t\t\tif(typeof field !== \"undefined\"){\n\t\t\t\t\t\t_.each(fieldset.get('fields').models, (fieldsetField) => {\n\t\t\t\t\t\t\tconst fieldID = typeof field.id !== \"undefined\" ? field.id : field.get('id');\n\t\t\t\t\t\t\tif(fieldsetField.id === fieldID){\n\t\t\t\t\t\t\t\t// Delete any input values.\n\t\t\t\t\t\t\t\tdelete fieldset.repeaterFieldModel.get('value')[fieldsetField.id];\n\t\t\t\t\t\t\t\tremove.push(fieldID);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tisRepeaterModelSet.fields = _.reject(isRepeaterModelSet.fields, (field) =>{\n\t\t\t\t\tif(typeof field === \"undefined\") return true;\n\t\t\t\t\tif(remove.includes(field.id)) return true;\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:repeaterModels' );\n\t\t\t}\n\n\t\t\t//Remove the fieldset\n\t\t\tthis.remove( fieldset );\n\t\t\tfieldset.destroy();\n\t\t\t\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\n\t\t\t//Reset values\n\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t},\n\n\t\tremoveRequiredFieldsErrors: function( fieldset ) {\n\t\t\tlet fields = fieldset.get('fields');\n\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', field.get(\"id\"), \"required-error\" );\n\t\t\t});\n\t\t},\n\n\t\tgetFieldsets: function() {\n\t\t\treturn this.models;\n\t\t},\n\n\t\tcheckTimeField: function(field){\n\t\t\tconst id = field.get('id');\n\t\t\t//Get elements\n\t\t\tconst hourEl = document.getElementById(\"hour-select-\" + id),\n\t\t\tminEl = document.getElementById(\"minute-select-\" + id),\n\t\t\tdefaultHour = field.attributes.hours_24 === 0 ? \"12\" : \"00\";\n\t\t\t// set field values to element\n\t\t\tif(!hourEl || !minEl) return;\n\t\t\tminEl.value = typeof field.attributes.selected_minute !== \"undefined\" ? field.attributes.selected_minute : \"00\";\n\t\t\thourEl.value = typeof field.attributes.selected_hour !== \"undefined\" ? field.attributes.selected_hour : defaultHour;\n\n\t\t\tconst wrapper = document.getElementById(\"nf-field-\" + id + \"-wrap\");\n\t\t\tconst ampmEl = wrapper.querySelector('#ampm-select');\n\t\t\tif( ! ampmEl ) return;\n\t\t\tampmEl.value = typeof field.attributes.selected_ampm !== \"undefined\" ? field.attributes.selected_ampm : \"am\";\n\t\t},\n\n\t\tsortIDs: function(){\n\t\t\tconst fieldsets = this.getFieldsets();\n\t\t\tconst timeFields = [];\n\t\t\t//Reset repeater fields IDs when adding / removing a field\n\t\t\t_.each(fieldsets, function(fieldset, modelIndex){\n\t\t\t\tlet fields = fieldset.get('fields');\n\t\t\t\tfieldset.set( 'index', modelIndex + 1 );\n\t\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\t\t//Always rebuild ID to allow same form multiple times on DOM\n\t\t\t\t\t//Remove suffix if it has one\n\t\t\t\t\tconst cutEl = String(field.id).split('_')[0];\n\t\t\t\t\t//Extract Field index of ID\n\t\t\t\t\tconst fieldIndex = String( cutEl ).split(\".\").length > 1 ? String( cutEl ).split(\".\").pop() : false;\n\t\t\t\t\t//The loop makes first fieldset of second same form to miss correct index here, next iteration will get that correct index\n\t\t\t\t\tif(!fieldIndex) return;\n\t\t\t\t\t//Update FieldID using ( REPEATER FIELD id . field index in the repeater field _ fieldset index in the repeater field ) format\n\t\t\t\t\tconst newID = field.collection.options.repeaterFieldModel.id + \".\" + fieldIndex + \"_\" + modelIndex;\n\t\t\t\t\tfield.set(\"id\", newID);\n\n\t\t\t\t\t// Detect time fields, fix inconsistency of date field when associated with time, as we don't use flatPickr display for time\n\t\t\t\t\tif(field.get('type') === \"date\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" ) ){\n\t\t\t\t\t\ttimeFields.push(field);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\t\t\t//Reload repeater field view ( collection of fieldsets updated )\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger( 'rerender:fieldsets' );\n\t\t\t\n\t\t\t//Process time fields values\n\t\t\ttimeFields.forEach( (field) => {\n\t\t\t\tthis.checkTimeField(field);\n\t\t\t});\n\t\t}\n\n\t} );\n\treturn collection;\n} );\n","define('controllers/fieldRepeater',[ 'models/fieldRepeaterSetCollection', 'models/fieldCollection' ], function( repeaterSetCollection, fieldCollection ) {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'repeater' ), 'init:model', this.initRepeater );\n },\n\n initRepeater: function ( model ) {\n \tif ( 'undefined' == typeof model.collection.options.formModel ) {\n \t\treturn false;\n \t}\n\n \tlet fields = new fieldCollection( model.get( 'fields' ), { formModel: model.collection.options.formModel, repeaterFieldModel: model } );\n model.set( 'sets', new repeaterSetCollection( [ { fields: fields } ], { templateFields: model.get( 'fields' ), formModel: model.collection.options.formModel, repeaterFieldModel: model } ) );\n //Trigger Fields IDs sorting in case of same form being printed multiple times on DOM\n nfRadio.channel( \"field-repeater\" ).trigger( 'sort:fieldsets' );\n },\n\n });\n\n return controller;\n});\n","define('controllers/actionGA',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSendGaEvent );\n\t\t},\n\n\t\tactionSendGaEvent: function( response ) {\n if (typeof response.data.actions === 'undefined' || typeof response.data.actions.googleanalytics === 'undefined') {\n return;\n }\n \n response.data.actions.googleanalytics.forEach( (action) => {\n const eventName = action.event_name;\n if(typeof eventName === 'undefined') {\n console.warn('No event name defined in the GA4 action settings. Please define an event name.');\n return;\n }\n\n if(typeof action.method_type !== 'undefined' && action.method_type === 'ga4'){\n if(typeof gtag === 'function') {\n const eventParams = {\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n gtag('event', eventName, eventParams);\n } else if (typeof dataLayer === 'object'){\n console.warn('gtag isn\\'t defined. But GTM was detected, did you mean to use GTM in the action settings?');\n } else {\n console.warn('gtag isn\\'t defined. Please make sure you have GA4 installed on your site.');\n }\n } else if( typeof action.method_type !== 'undefined' && action.method_type === 'gtm'){\n \n \n if (typeof dataLayer === 'object') {\n //Process with GTM dataLayer\n const eventParams = {\n 'event': eventName,\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n dataLayer.push(eventParams);\n } else if (typeof gtag === 'function') {\n console.warn('GTM isn\\'t defined. But GA4 was detected, did you mean to use GA4 in the action settings?');\n } else {\n console.warn('GTM isn\\'t defined. Please make sure you have GTM installed on your site.');\n }\n } else {\n console.warn('GTM and gtag aren\\'t defined. Please make sure you have GTM or GA4 installed on your site.');\n }\n });\n \n\t\t}\n\n\t});\n\n\treturn controller;\n});\n\n","define(\n\t'controllers/loadControllers',[\n\t\t'controllers/formData',\n\t\t'controllers/fieldError',\n\t\t'controllers/changeField',\n\t\t'controllers/changeEmail',\n\t\t'controllers/changeDate',\n\t\t'controllers/fieldCheckbox',\n\t\t'controllers/fieldCheckboxList',\n\t\t'controllers/fieldImageList',\n\t\t'controllers/fieldRadio',\n\t\t'controllers/fieldNumber',\n\t\t'controllers/mirrorField',\n\t\t'controllers/confirmField',\n\t\t'controllers/updateFieldModel',\n\t\t'controllers/submitButton',\n\t\t'controllers/submitDebug',\n\t\t'controllers/getFormErrors',\n\t\t'controllers/validateRequired',\n\t\t'controllers/submitError',\n\t\t'controllers/actionRedirect',\n\t\t'controllers/actionSuccess',\n\t\t'controllers/fieldSelect',\n\t\t'controllers/coreSubmitResponse',\n\t\t'controllers/fieldProduct',\n\t\t'controllers/fieldTotal',\n\t\t'controllers/fieldQuantity',\n\t\t'controllers/calculations',\n\t\t'controllers/dateBackwardsCompat',\n\t\t'controllers/fieldDate',\n\t\t'controllers/fieldRecaptcha',\n\t\t'controllers/fieldRecaptchaV3',\n\t\t'controllers/fieldHTML',\n\t\t'controllers/helpText',\n\t\t'controllers/fieldTextbox',\n\t\t'controllers/fieldTextareaRTE',\n\t\t'controllers/fieldStarRating',\n\t\t'controllers/fieldTerms',\n\t\t'controllers/formContentFilters',\n\t\t'controllers/loadViews',\n\t\t'controllers/formErrors',\n\t\t'controllers/submit',\n\t\t'controllers/defaultFilters',\n\t\t'controllers/uniqueFieldError',\n\t\t'controllers/fieldRepeater',\n\t\t'controllers/actionGA',\n\t],\n\tfunction(\n\t\tFormData,\n\t\tFieldError,\n\t\tChangeField,\n\t\tChangeEmail,\n\t\tChangeDate,\n\t\tFieldCheckbox,\n\t\tFieldCheckboxList,\n\t\tFieldImageList,\n\t\tFieldRadio,\n\t\tFieldNumber,\n\t\tMirrorField,\n\t\tConfirmField,\n\t\tUpdateFieldModel,\n\t\tSubmitButton,\n\t\tSubmitDebug,\n\t\tGetFormErrors,\n\t\tValidateRequired,\n\t\tSubmitError,\n\t\tActionRedirect,\n\t\tActionSuccess,\n\t\tFieldSelect,\n\t\tCoreSubmitResponse,\n\t\tFieldProduct,\n\t\tFieldTotal,\n\t\tFieldQuantity,\n\t\tCalculations,\n\t\tDateBackwardsCompat,\n\t\tFieldDate,\n\t\tFieldRecaptcha,\n\t\tFieldRecaptchaV3,\n\t\tFieldHTML,\n\t\tHelpText,\n\t\tFieldTextbox,\n\t\tFieldTextareaRTE,\n\t\tFieldStarRating,\n\t\tFieldTerms,\n\t\tFormContentFilters,\n\t\tLoadViews,\n\t\tFormErrors,\n\t\tSubmit,\n\t\tDefaultFilters,\n\t\tUniqueFieldError,\n\t\tFieldRepeater,\n\t\tActionGA\n\t) {\n\t\tvar controller = Marionette.Object.extend( {\n\t\t\tinitialize: function() {\n\n\t\t\t\t/**\n\t\t\t\t * App Controllers\n\t\t\t\t */\n\t\t\t\tnew LoadViews();\n\t\t\t\tnew FormErrors();\n\t\t\t\tnew Submit();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Field type controllers\n\t\t\t\t */\n\t\t\t\tnew FieldCheckbox();\n\t\t\t\tnew FieldCheckboxList();\n\t\t\t\tnew FieldImageList();\n\t\t\t\tnew FieldRadio();\n\t\t\t\tnew FieldNumber();\n\t\t\t\tnew FieldSelect();\n\t\t\t\tnew FieldProduct();\n\t\t\t\tnew FieldTotal();\n\t\t\t\tnew FieldQuantity();\n\t\t\t\tnew FieldRecaptcha();\n\t\t\t\tnew FieldRecaptchaV3();\n\t\t\t\tnew FieldHTML();\n\t\t\t\tnew HelpText();\n\t\t\t\tnew FieldTextbox();\n\t\t\t\tnew FieldTextareaRTE();\n\t\t\t\tnew FieldStarRating();\n\t\t\t\tnew FieldTerms();\n\t\t\t\tnew FormContentFilters();\n\t\t\t\tnew UniqueFieldError();\n\t\t\t\tnew FieldRepeater();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Misc controllers\n\t\t\t\t */\n\t\t\t\tnew FieldError();\n\t\t\t\tnew ChangeField();\n\t\t\t\tnew ChangeEmail();\n\t\t\t\tnew ChangeDate();\n\t\t\t\t\n\t\t\t\tnew MirrorField();\n\t\t\t\tnew ConfirmField();\n\t\t\t\tnew UpdateFieldModel();\n\t\t\t\tnew SubmitButton();\n\t\t\t\tnew SubmitDebug();\n\t\t\t\tnew GetFormErrors();\n\t\t\t\tnew ValidateRequired();\n\t\t\t\tnew SubmitError();\n\t\t\t\tnew ActionRedirect();\n\t\t\t\tnew ActionSuccess();\n\t\t\t\tnew ActionGA();\n\t\t\t\t\n\t\t\t\tnew CoreSubmitResponse();\n\t\t\t\tnew Calculations();\n\n\t\t\t\tnew DefaultFilters();\n\n\t\t\t\t/**\n\t\t\t\t * Data controllers\n\t\t\t\t */\n\t\t\t\tnew DateBackwardsCompat();\n\t\t\t\tnew FieldDate();\n\t\t\t\tnew FormData();\n\t\t\t\t\n\t\t\t}\n\t\t});\n\n\t\treturn controller;\n} );\n\n","define( 'views/beforeForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-before-form\",\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-form-error',\n\n\t\tonRender: function() {\n\t\t\t// this.$el = this.$el.children();\n\t\t\t// this.$el.unwrap();\n\t\t\t// this.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorCollection',['views/formErrorItem'], function( formErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: formErrorItem\n\t});\n\n\treturn view;\n} );\n","define( 'views/honeyPot',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-form-hp',\n\n events: {\n \t'keyup .nf-field-hp': 'maybeError',\n 'change .nf-field-hp': 'maybeError'\n },\n\n maybeError: function( e ) {\n /*\n * If we have an empty honeyPot field, remove the honeypot form error.\n * If we do not have an empty honeyPot field, add the honeypot form error.\n */\n if ( 0 == jQuery( e.target ).val().length ) {\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'remove:error', 'honeyPot' );\n } else {\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'id' ) );\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'add:error', 'honeyPot', formModel.get( 'settings' ).honeypotHoneypotError );\n }\n }\n });\n\n return view;\n} );\n","define( 'views/afterFormContent',['views/formErrorCollection', 'views/honeyPot'], function( FormErrors, HoneyPot ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-after-fields\",\n\n\t\tregions: {\n\t\t\terrors: \".nf-form-errors\",\n hp: \".nf-form-hp\"\n\t\t},\n\n onShow: function() {\n \tthis.errors.show( new FormErrors( { collection: this.model.get( 'errors' ) } ) );\n this.hp.show( new HoneyPot( { model: this.model } ) );\n }\n\n });\n\n return view;\n} );\n","define( 'views/beforeFormContent',[], function( ) {\n\n var view = Marionette.ItemView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-before-fields\",\n\n templateHelpers: function () {\n return {\n\n renderFieldsMarkedRequired: function() {\n\n var requiredFields = this.fields.filter( { required: 1 } );\n return ( requiredFields.length ) ? this.fieldsMarkedRequired : '';\n },\n };\n },\n\n });\n\n return view;\n} );\n","define( 'views/formLayout',[ 'views/afterFormContent', 'views/beforeFormContent', 'models/fieldCollection' ], function( AfterFormContent, BeforeFormContent, FieldCollection ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-form-layout\",\n\n\t\tregions: {\n\t\t\tbeforeFormContent: \".nf-before-form-content\",\n\t\t\tformContent: \".nf-form-content\",\n\t\t\tafterFormContent: \".nf-after-form-content\"\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'form-' + this.model.get( 'id' ) ).reply( 'get:el', this.getEl, this );\n\t\t\t\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\n\t\tonShow: function() {\n\t\t\tthis.beforeFormContent.show( new BeforeFormContent( { model: this.model } ) );\n\t\t\t\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.model.get( 'formContentData' );\n\t\t\t\n\t\t\t/*\n\t\t\t * Check our fieldContentViewsFilter to see if we have any defined.\n\t\t\t * If we do, overwrite our default with the view returned from the filter.\n\t\t\t */\n\t\t\tvar formContentViewFilters = nfRadio.channel( 'formContent' ).request( 'get:viewFilters' );\n\t\t\t\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentViewFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentView = callback();\n\t\t\t\n\t\t\tvar options = {\n\t\t\t\tdata: formContentData,\n\t\t\t\tformModel: this.model\n\t\t\t};\n\t\t\t\n\t\t\t/*\n\t\t\t * If we have a collection, pass the returned data as the collection.\n\t\t\t *\n\t\t\t * If we have a model, pass the returned data as the collection.\n\t\t\t */\n\t\t\tif ( false !== formContentData instanceof Backbone.Collection ) {\n\t\t\t\toptions.collection = formContentData;\n\t\t\t} else if ( false !== formContentData instanceof Backbone.Model ) {\n\t\t\t\toptions.model = formContentData;\n\t\t\t}\n\n\t\t\tthis.formContent.show( new formContentView( options ) );\n\t\t\tthis.afterFormContent.show( new AfterFormContent( { model: this.model } ) );\n\t\t},\n\n\t\tgetEl: function() {\n\t\t\treturn this.el;\n\t\t},\n\n templateHelpers: function () {\n return {\n\n renderClasses: function() {\n return '';\n }\n\n };\n },\n\n hide: function() {\n \tjQuery( this.el ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/afterForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-after-form\",\n\t\t\n\t});\n\n\treturn view;\n} );\n","define( 'views/mainLayout',['views/beforeForm', 'views/formLayout', 'views/afterForm'], function( BeforeForm, FormLayout, AfterForm ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttemplate: '#tmpl-nf-layout',\n\n\t\tregions: {\n\t\t\tresponseMsg: '.nf-response-msg',\n\t\t\tbeforeForm: '.nf-before-form',\n\t\t\tformLayout: '.nf-form-layout',\n\t\t\tafterForm: '.nf-after-form'\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis.$el = jQuery( '#nf-form-' + this.model.id + '-cont' );\n\t\t\tthis.el = '#nf-form-' + this.model.id + '-cont';\n\n\t\t\tthis.render();\n\n\t\t\tthis.beforeForm.show( new BeforeForm( { model: this.model } ) );\n\t\t\tthis.formLayout.show( new FormLayout( { model: this.model, fieldCollection: this.options.fieldCollection } ) );\n\t\t\tthis.afterForm.show( new AfterForm( { model: this.model } ) );\n\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n hide: function() {\n \tjQuery( this.el ).find( '.nf-form-title' ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","// const Intl = require('intl');\n\n// class nfLocaleConverter {\nvar nfLocaleConverter = function(newLocale, thousands_sep, decimal_sep) {\n\n // constructor(newLocale = 'en-US', thousands_sep, decimal_sep) {\n if ('undefined' !== typeof newLocale && 0 < newLocale.length) {\n this.locale = newLocale.split('_').join('-');\n } else {\n this.locale = 'en-US';\n }\n\n this.thousands_sep = thousands_sep || ',';\n this.decimal_sep = decimal_sep || '.';\n // }\n\n this.uniqueElememts = function( value, index, self ) {\n return self.indexOf(value) === index;\n }\n\n this.numberDecoder = function(num) {\n num = num.toString();\n // let thousands_sep = ',';\n var formatted = '';\n\n // Account for negative numbers.\n var negative = false;\n \n if ('-' === num.charAt(0)) {\n negative = true;\n num = num.replace( '-', '' );\n }\n \n // Account for a space as the thousands separator.\n // This pattern accounts for all whitespace characters (including thin space).\n num = num.replace( /\\s/g, '' );\n num = num.replace( / /g, '' );\n\n // Determine what our existing separators are.\n var myArr = num.split('');\n var separators = myArr.filter(function(el) {\n return !el.match(/[0-9]/);\n });\n \n var final_separators = separators.filter(this.uniqueElememts);\n \n switch( final_separators.length ) {\n case 0:\n formatted = num;\n break;\n case 1:\n var replacer = '';\n if ( 1 == separators.length ) {\n separator = separators.pop();\n var sides = num.split(separator);\n var last = sides.pop();\n if ( 3 == last.length && separator == this.thousands_sep ) {\n replacer = '';\n } else {\n replacer = '.';\n }\n } else {\n separator = final_separators.pop();\n }\n\n formatted = num.split(separator).join(replacer);\n break;\n case 2:\n var find_one = final_separators[0];\n var re_one;\n if('.' === find_one) {\n re_one = new RegExp('[.]', 'g');\n } else {\n re_one = new RegExp(find_one, 'g');\n }\n formatted = num.replace(re_one, '');\n \n var find_two = final_separators[1];\n \n var re_two;\n if('.' === find_two) {\n re_two = new RegExp('[.]', 'g');\n } else {\n re_two = new RegExp(find_two, 'g');\n }\n formatted = formatted.replace(re_two, '.' );\n break;\n default:\n return 'NaN';\n }\n\n if ( negative ) {\n formatted = '-' + formatted;\n }\n this.debug('Number Decoder ' + num + ' -> ' + formatted );\n return formatted;\n }\n\n this.numberEncoder = function(num, percision) {\n num = this.numberDecoder(num);\n\n return Intl.NumberFormat(this.locale, { minimumFractionDigits: percision, maximumFractionDigits: percision }).format(num);\n }\n\n this.debug = function(message) {\n if ( window.nfLocaleConverterDebug || false ) console.log(message);\n }\n}\n\n// module.exports = nfLocaleConverter;\ndefine(\"../nfLocaleConverter\", function(){});\n\n","//Inline data converted to globally available vars sent via wp_localize_script\nif('undefined' !== typeof(nfInlineVars.nfForms)) {\n\twindow.nfForms = nfInlineVars.nfForms;\n}\n\n/*\n * Because our backbone listens to .change() events on elements, changes made using jQuery .val() don't bubble properly.\n * This patch overwrites the default behaviour of jQuery .val() so that IF the item has an nf-element class, we fire a change event.\n */\n( function( jQuery ) {\n\t/*\n\t * Store our original .val() function.\n\t */\n var originalVal = jQuery.fn.val;\n /*\n * Create our own .val() function.\n */\n jQuery.fn.val = function(){\n var prev;\n /* \n * Store a copy of the results of the original .val() call.\n * We use this to make sure that we've actually changed something.\n */\n if( arguments.length > 0 ){\n prev = originalVal.apply( this,[] );\n }\n /*\n * Get the results of the original .val() call. \n */\n var result = originalVal.apply( this, arguments );\n\n /*\n * If we have arguments, we have actually made a change, AND this has the nf-element class, trigger .change().\n */\n if( arguments.length > 0 && prev != originalVal.apply( this, [] ) && jQuery( this ).hasClass( 'nf-element' ) ) {\n\t\t\tjQuery(this).change();\n }\n\n return result;\n };\n} ) ( jQuery );\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n\trequire( [ 'models/formCollection', 'models/formModel', 'models/fieldCollection', 'controllers/loadControllers', 'views/mainLayout', '../nfLocaleConverter'], function( formCollection, FormModel, FieldCollection, LoadControllers, mainLayout ) {\n\n\t\tif( 'undefined' == typeof nfForms ) {\n\t\t\t/*\n\t\t\t * nfForms is not defined. This means that something went wrong loading the form data.\n\t\t\t * Bail form setup and empty the form containers to remove any loading animations.\n\t\t\t */\n\t\t\tjQuery( '.nf-form-cont' ).empty();\n\t\t\treturn;\n\t\t}\n\n\t\tvar NinjaForms = Marionette.Application.extend({\n\t\t\tforms: {},\n\t\t\tinitialize: function( options ) {\n\t\t\t\tvar that = this;\n\t\t\t\tMarionette.Renderer.render = function(template, data){\n\t\t\t\t\tvar template = that.template( template );\n\t\t\t\t\treturn template( data );\n\t\t\t\t};\n\n\t\t\t\t// Underscore one-liner for getting URL Parameters\n\t\t\t\tthis.urlParameters = _.object(_.compact(_.map(location.search.slice(1).split('&'), function(item) { if (item) return item.split('='); })));\n\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ) {\n\t\t\t\t\tthis.listenTo(nfRadio.channel('form-' + this.urlParameters.nf_resume), 'loaded', this.restart);\n\t\t\t\t}\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:decodeNumber', this.decodeNumber);\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:encodeNumber',this.encodeNumber);\n\n\t\t\t\tvar loadControllers = new LoadControllers();\n\t\t\t\tnfRadio.channel( 'app' ).trigger( 'after:loadControllers' );\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'get:template', this.template );\t\t\t},\n\t\t\t\n\t\t\tonStart: function() {\n\t\t\t\tvar formCollection = nfRadio.channel( 'app' ).request( 'get:forms' );\n\t\t\t\t_.each( formCollection.models, function( form, index ) {\n\t\t\t\t\tvar layoutView = new mainLayout( { model: form, fieldCollection: form.get( 'fields' ) } );\t\t\t\n\t\t\t\t\tnfRadio.channel( 'form' ).trigger( 'render:view', layoutView );\n\t\t\t\t\tjQuery( document ).trigger( 'nfFormReady', layoutView );\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\trestart: function( formModel ) {\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ){\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t\t\t'nf_resume': this.urlParameters\n\t\t\t\t\t};\n\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'disable:submit' );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'processingLabel' );\n\n\t\t\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', function() {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Hide form fields (but not the submit button).\n\t\t\t\t\t\t */\n\t\t\t\t\t\tjQuery( '#nf-form-' + formModel.get( 'id' ) + '-cont .nf-field-container:not(.submit-container)' ).hide();\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO: Refactor Duplication\n\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: nfFrontEnd.adminAjax,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\tcache: false,\n\t\t\t\t\t\tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t \t\tvar response = data;\n\t\t\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t },\n\t\t\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t\t\t // Handle errors here\n\t\t\t\t\t console.log('ERRORS: ' + textStatus);\n\t\t\t\t\t // STOP LOADING SPINNER\n\t\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', 'error', textStatus, jqXHR, errorThrown );\n\t\t\t\t\t }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttemplate: function( template ) {\n\t\t\t\tif (!template.startsWith('script')) {\n\t\t\t\t\ttemplate = 'script'+template;\n\t\t\t\t}\n\t\t\t\treturn _.template( jQuery( template ).html(), {\n\t\t\t\t\tevaluate: /<#([\\s\\S]+?)#>/g,\n\t\t\t\t\tinterpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n\t\t\t\t\tescape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n\t\t\t\t\tvariable: 'data'\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tencodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberEncoder(num);\n\t\t\t},\n\n\t\t\tdecodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberDecoder(num);\n\t\t\t}\n\t\t});\n\t\n\t\tvar ninjaForms = new NinjaForms();\n\t\tninjaForms.start();\t\t\n\t} );\n} );\n\ndefine(\"main\", function(){});\n\n"]} -
ninja-forms/tags/3.10.4/includes/Fields/Checkbox.php
r2462448 r3323843 114 114 { 115 115 // If value is true, return checked value setting. 116 if( $ value) return $field[ 'settings' ][ 'checked_value' ];116 if( $field[ 'settings' ][ 'value' ] ) return $field[ 'settings' ][ 'checked_value' ]; 117 117 // Else return unchecked value setting. 118 return $field[ 'settings' ][ 'unchecked_value' ]; ;118 return $field[ 'settings' ][ 'unchecked_value' ]; 119 119 } 120 120 -
ninja-forms/tags/3.10.4/includes/Fields/Date.php
r2862849 r3323843 268 268 * It'll be in a format like 01/05/2021,hour,minute,ampm. 269 269 */ 270 270 271 $exploded_value = explode( ',', $value ); 271 272 … … 281 282 282 283 if ( 'time_only' == $field[ 'settings' ][ 'date_mode' ] ) { 283 return $time; 284 if($time === ':' && !strpos($value, ',')) { 285 return $value; 286 } else { 287 return $time; 288 } 284 289 } 285 290 -
ninja-forms/tags/3.10.4/ninja-forms.php
r3320170 r3323843 4 4 Plugin URI: http://ninjaforms.com/?utm_source=WordPress&utm_medium=readme 5 5 Description: Ninja Forms is a webform builder with unparalleled ease of use and features. 6 Version: 3.10. 36 Version: 3.10.4 7 7 Author: Saturday Drive 8 8 Author URI: http://ninjaforms.com/?utm_source=Ninja+Forms+Plugin&utm_medium=Plugins+WP+Dashboard … … 44 44 */ 45 45 46 const VERSION = '3.10. 3';46 const VERSION = '3.10.4'; 47 47 48 48 /** -
ninja-forms/tags/3.10.4/readme.txt
r3320170 r3323843 5 5 Requires at least: 6.5 6 6 Tested up to: 6.8 7 Stable tag: 3.10.3 8 7 Stable tag: 3.10.4 9 8 Requires PHP: 7.4 10 9 … … 312 311 313 312 == Upgrade Notice == 314 = 3.10.3 (June 30 2025) = 315 *Bug Fixes:* 316 - Fixes rounding error for number fields. 317 - Resolves a hang on save in certain circumstances. 318 - Removes an unused uinstall hook method. 319 320 *Misc:* 321 - Updates several npm dependencies. 313 = 3.10.4 (July 7 2025) = 314 *Bug Fixes:* 315 - Fixes value issue with time_only date field. 316 - Fixes issue with common value for date/time field in repeatable field sets. 317 - Fixes incorrect value for single checkbox merge tags. 322 318 323 319 == Changelog == 320 = 3.10.4 (July 7 2025) = 321 *Bug Fixes:* 322 - Fixes value issue with time_only date field. 323 - Fixes issue with common value for date/time field in repeatable field sets. 324 - Fixes incorrect value for single checkbox merge tags. 325 324 326 = 3.10.3 (June 30 2025) = 325 327 *Bug Fixes:* -
ninja-forms/tags/3.10.4/vendor/composer/installed.php
r3320170 r3323843 2 2 'root' => array( 3 3 'name' => 'saturday-drive/ninja-forms', 4 'pretty_version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',5 'version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',6 'reference' => ' dbd31c08a371ecf39a89fc4c9885f118135d754b',4 'pretty_version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 5 'version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 6 'reference' => '75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'saturday-drive/ninja-forms' => array( 14 'pretty_version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',15 'version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',16 'reference' => ' dbd31c08a371ecf39a89fc4c9885f118135d754b',14 'pretty_version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 15 'version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 16 'reference' => '75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../../', -
ninja-forms/trunk/assets/js/min/front-end.js
r3320170 r3323843 1 !function(){var e,t,i;!function(n){var r,o,a,l,s={},d={},c={},f={},u=Object.prototype.hasOwnProperty,h=[].slice,m=/\.js$/;function g(e,t){return u.call(e,t)}function p(e,t){var i,n,r,o,a,l,s,d,f,u,h,g=t&&t.split("/"),p=c.map,v=p&&p["*"]||{};if(e){for(a=(e=e.split("/")).length-1,c.nodeIdCompat&&m.test(e[a])&&(e[a]=e[a].replace(m,"")),"."===e[0].charAt(0)&&g&&(e=g.slice(0,g.length-1).concat(e)),f=0;f<e.length;f++)if("."===(h=e[f]))e.splice(f,1),f-=1;else if(".."===h){if(0===f||1===f&&".."===e[2]||".."===e[f-1])continue;f>0&&(e.splice(f-1,2),f-=2)}e=e.join("/")}if((g||v)&&p){for(f=(i=e.split("/")).length;f>0;f-=1){if(n=i.slice(0,f).join("/"),g)for(u=g.length;u>0;u-=1)if((r=p[g.slice(0,u).join("/")])&&(r=r[n])){o=r,l=f;break}if(o)break;!s&&v&&v[n]&&(s=v[n],d=f)}!o&&s&&(o=s,l=d),o&&(i.splice(0,l,o),e=i.join("/"))}return e}function v(e,t){return function(){var i=h.call(arguments,0);return"string"!=typeof i[0]&&1===i.length&&i.push(null),o.apply(n,i.concat([e,t]))}}function y(e){return function(t){s[e]=t}}function b(e){if(g(d,e)){var t=d[e];delete d[e],f[e]=!0,r.apply(n,t)}if(!g(s,e)&&!g(f,e))throw new Error("No "+e);return s[e]}function R(e){var t,i=e?e.indexOf("!"):-1;return i>-1&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function _(e){return e?R(e):[]}function w(e){return function(){return c&&c.config&&c.config[e]||{}}}a=function(e,t){var i,n,r=R(e),o=r[0],a=t[1];return e=r[1],o&&(i=b(o=p(o,a))),o?e=i&&i.normalize?i.normalize(e,(n=a,function(e){return p(e,n)})):p(e,a):(o=(r=R(e=p(e,a)))[0],e=r[1],o&&(i=b(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:i}},l={require:function(e){return v(e)},exports:function(e){var t=s[e];return void 0!==t?t:s[e]={}},module:function(e){return{id:e,uri:"",exports:s[e],config:w(e)}}},r=function(e,t,i,r){var o,c,u,h,m,p,R,w=[],F=typeof i;if(p=_(r=r||e),"undefined"===F||"function"===F){for(t=!t.length&&i.length?["require","exports","module"]:t,m=0;m<t.length;m+=1)if("require"===(c=(h=a(t[m],p)).f))w[m]=l.require(e);else if("exports"===c)w[m]=l.exports(e),R=!0;else if("module"===c)o=w[m]=l.module(e);else if(g(s,c)||g(d,c)||g(f,c))w[m]=b(c);else{if(!h.p)throw new Error(e+" missing "+c);h.p.load(h.n,v(r,!0),y(c),{}),w[m]=s[c]}u=i?i.apply(s[e],w):void 0,e&&(o&&o.exports!==n&&o.exports!==s[e]?s[e]=o.exports:u===n&&R||(s[e]=u))}else e&&(s[e]=i)},e=t=o=function(e,t,i,s,d){if("string"==typeof e)return l[e]?l[e](t):b(a(e,_(t)).f);if(!e.splice){if((c=e).deps&&o(c.deps,c.callback),!t)return;t.splice?(e=t,t=i,i=null):e=n}return t=t||function(){},"function"==typeof i&&(i=s,s=d),s?r(n,e,t,i):setTimeout(function(){r(n,e,t,i)},4),o},o.config=function(e){return o(e)},e._defined=s,(i=function(e,t,i){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(i=t,t=[]),g(s,e)||g(d,e)||(d[e]=[e,t,i])}).amd={jQuery:!0}}(),i("../../../node_modules/almond/almond",function(){}),i("models/fieldErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/fieldErrorCollection",["models/fieldErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/fieldModel",["models/fieldErrorCollection"],function(e){return Backbone.Model.extend({defaults:{placeholder:"",value:"",label_pos:"",classes:"ninja-forms-field",reRender:!1,mirror_field:!1,confirm_field:!1,clean:!0,disabled:"",visible:!0,invalid:!1},initialize:function(){var t=this.get("type");this.set("formID",this.collection.options.formModel.get("id")),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"reset",this.resetModel),this.bind("change",this.changeModel,this),this.bind("change:value",this.changeValue,this),this.set("errors",new e),"listimage"===t&&(this.get=this.listimageGet,this.set=this.listimageSet),nfRadio.channel("fields").trigger("init:model",this),nfRadio.channel(this.get("type")).trigger("init:model",this),nfRadio.channel("fields-"+this.get("type")).trigger("init:model",this),void 0!==this.get("parentType")&&nfRadio.channel(this.get("parentType")).trigger("init:model",this),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"loaded",this.formLoaded),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"before:submit",this.beforeSubmit)},listimageGet:function(e){return"options"===e&&(e="image_options"),Backbone.Model.prototype.get.call(this,e)},listimageSet:function(e,t){return"options"===e&&(e="image_options"),Backbone.Model.prototype.set.call(this,e,t)},changeModel:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:model",this),nfRadio.channel(this.get("type")).trigger("change:model",this),nfRadio.channel("fields").trigger("change:model",this)},changeValue:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:modelValue",this),nfRadio.channel(this.get("type")).trigger("change:modelValue",this),nfRadio.channel("fields").trigger("change:modelValue",this)},addWrapperClass:function(e){this.set("addWrapperClass",e)},removeWrapperClass:function(e){this.set("removeWrapperClass",e)},setInvalid:function(e){this.set("invalid",e)},formLoaded:function(){nfRadio.channel("fields").trigger("formLoaded",this),nfRadio.channel("fields-"+this.get("type")).trigger("formLoaded",this)},beforeSubmit:function(e){nfRadio.channel(this.get("type")).trigger("before:submit",this),nfRadio.channel("fields").trigger("before:submit",this)},getValue:function(){return this.get("value")}})}),i("models/fieldCollection",["models/fieldModel"],function(e){var t=Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,this.on("reset",function(e){nfRadio.channel("fields").trigger("reset:collection",e)},this),nfRadio.channel("fields").reply("get:firstFieldByOrder",this.getFirstFieldByOrder)},validateFields:function(){_.each(this.models,function(e){if("repeater"===e.get("type")){const t=nfRadio.channel("field-repeater").request("get:repeaterFieldsModelsArrayByForm",e.get("formID"));_.each(t,function(e){e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)})}else e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)},this);var e=nfRadio.channel("form-"+this.models[0].get("formID")).request("get:form");_.size(e.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(e.get("fieldErrors")))},showFields:function(){this.invoke("set",{visible:!0}),this.invoke(function(){this.trigger("change:value",this)})},hideFields:function(){this.invoke("set",{visible:!1}),this.invoke(function(){this.trigger("change:value",this)})},getFirstFieldByOrder:function(e){let t=0;return _.each(e,function(e){const i=nfRadio.channel("fields").request("get:field",e).get("order");t=0===t||i<t?e:t}),t}});return t}),i("models/formErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/formErrorCollection",["models/formErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/formModel",["models/fieldCollection","models/formErrorCollection"],function(e,t){return Backbone.Model.extend({defaults:{beforeForm:"",afterForm:"",beforeFields:"",afterFields:"",wrapper_class:"",element_class:"",hp:"",fieldErrors:{},extra:{}},initialize:function(){_.each(this.get("settings"),function(e,t){this.set(t,e)},this),this.set("loadedFields",this.get("fields")),this.set("fields",new e(this.get("fields"),{formModel:this})),this.set("errors",new t),nfRadio.channel("form").trigger("before:filterData",this);var i=this.get("formContentData");i||(i=this.get("fieldContentsData"));var n=nfRadio.channel("formContent").request("get:loadFilters"),r=_.without(n,void 0);i=_.first(r)(i,this,this),this.set("formContentData",i),nfRadio.channel("forms").trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).reply("get:fieldByKey",this.getFieldByKey,this),nfRadio.channel("form-"+this.get("id")).reply("add:error",this.addError,this),nfRadio.channel("form-"+this.get("id")).reply("remove:error",this.removeError,this),nfRadio.channel("form-"+this.get("id")).reply("get:extra",this.getExtra,this),nfRadio.channel("form-"+this.get("id")).reply("add:extra",this.addExtra,this),nfRadio.channel("form-"+this.get("id")).reply("remove:extra",this.removeExtra,this),nfRadio.channel("form-"+this.get("id")).reply("get:form",this.getForm,this),nfRadio.channel("form").trigger("loaded",this),nfRadio.channel("form").trigger("after:loaded",this),nfRadio.channel("form-"+this.get("id")).trigger("loaded",this)},getFieldByKey:function(e){return this.get("fields").findWhere({key:e})},addError:function(e,t){this.get("errors").add({id:e,msg:t}),nfRadio.channel("form-"+this.get("id")).trigger("add:error",this,e,t)},removeError:function(e){var t=this.get("errors"),i=t.get(e);t.remove(i),nfRadio.channel("form-"+this.get("id")).trigger("remove:error",this,e)},getExtra:function(e){var t=this.get("extra");return void 0===e?t:t[e]},addExtra:function(e,t){this.get("extra")[e]=t,nfRadio.channel("form-"+this.get("id")).trigger("add:extra",this,e,t)},removeExtra:function(e){delete this.get("extra")[e],nfRadio.channel("form-"+this.get("id")).trigger("remove:extra",this,e)},getForm:function(){return this}})}),i("models/formCollection",["models/formModel"],function(e){return Backbone.Collection.extend({model:e})}),i("controllers/formData",["models/formModel","models/formCollection","models/fieldCollection","models/formErrorCollection"],function(e,t,i,n){return Marionette.Object.extend({initialize:function(){this.collection=new t(nfForms),nfRadio.channel("forms").trigger("loaded",this.collection),nfRadio.channel("app").trigger("forms:loaded",this.collection),nfRadio.channel("app").reply("get:form",this.getForm,this),nfRadio.channel("app").reply("get:forms",this.getForms,this),nfRadio.channel("fields").reply("get:field",this.getField,this)},getForm:function(e){return this.collection.get(e)},getForms:function(){return this.collection},getField:function(e){var t=!1;return _.each(this.collection.models,function(i){t||(t=i.get("fields").get(e))}),void 0===t&&-1!==String(e).indexOf(".")&&(t=nfRadio.channel("field-repeater").request("get:repeaterFieldById",e)),t}})}),i("controllers/fieldError",["models/fieldErrorModel"],function(e){return Marionette.Object.extend({initialize:function(){nfRadio.channel("fields").reply("add:error",this.addError),nfRadio.channel("fields").reply("remove:error",this.removeError),nfRadio.channel("fields").reply("get:error",this.getError)},addError:function(e,t,i){var n=nfRadio.channel("fields").request("get:field",e);if(void 0!==n){var r=n.get("errors");r.add({id:t,msg:i}),n.set("errors",r),n.trigger("change:errors",n),n.set("clean",!1),nfRadio.channel("fields").trigger("add:error",n,t,i)}},removeError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e);if(void 0!==i){var n=i.get("errors"),r=n.get(t);void 0!==r&&(n.remove(r),i.set("errors",n),i.trigger("change:errors",i),nfRadio.channel("fields").trigger("remove:error",i,t))}},getError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e).get("errors").get(t);return"undefined"!=i&&i}})}),i("controllers/changeField",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("change:field",this.changeField),this.listenTo(nfRadio.channel("fields"),"blur:field",this.blurField)},changeField:function(e,t){var i=nfRadio.channel(t.get("type")).request("before:updateField",e,t);i=void 0!==(i=void 0!==i?i:nfRadio.channel(t.get("parentType")).request("before:updateField",e,t))?i:jQuery(e).val(),t.set("isUpdated",!1),t.set("clean",!1),nfRadio.channel("field-"+t.get("id")).trigger("change:field",e,t),nfRadio.channel(t.get("type")).trigger("change:field",e,t),nfRadio.channel("fields").trigger("change:field",e,t),nfRadio.channel("nfAdmin").request("update:field",t,i),t.get("repeaterField")&&nfRadio.channel("field-repeater").trigger("set:value")},blurField:function(e,t){t.set("clean",!1)}})}),i("controllers/changeEmail",[],function(){var e=nfRadio.channel("email"),t=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,i="invalid-email";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.emailKeyup),this.listenTo(e,"blur:field",this.onBlurField)},onChangeModelValue:function(e){var t=e.get("value"),i=e.get("id");this.emailChange(t,i)},onBlurField:function(e,t){var i=jQuery(e).val(),n=t.get("id");this.emailChange(i,n)},emailChange:function(e,n){if(0<e.length)if(t.test(e))nfRadio.channel("fields").request("remove:error",n,i);else{var r=nfRadio.channel("fields").request("get:field",n),o=nfRadio.channel("app").request("get:form",r.get("formID"));nfRadio.channel("fields").request("add:error",n,i,o.get("settings").changeEmailErrorMsg)}else nfRadio.channel("fields").request("remove:error",n,i)},emailKeyup:function(e,n,r){if(9==r)return!1;var o=jQuery(e).val(),a=n.get("id");if(0==o.length)nfRadio.channel("fields").request("remove:error",a,i);else if(t.test(o)||n.get("clean"))t.test(o)&&(nfRadio.channel("fields").request("remove:error",a,i),n.addWrapperClass("nf-pass"),n.set("clean",!1));else{var l=nfRadio.channel("fields").request("get:field",a),s=nfRadio.channel("app").request("get:form",l.get("formID"));nfRadio.channel("fields").request("add:error",a,i,s.get("settings").changeEmailErrorMsg),n.removeWrapperClass("nf-pass")}}})}),i("controllers/changeDate",[],function(){var e=nfRadio.channel("date"),t="invalid-date";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.dateKeyup),this.listenTo(e,"blur:field",this.onBlurField),this.listenTo(e,"change:extra",this.changeHoursMinutes,this)},onChangeModelValue:function(e){var t=moment.locale();moment.locale("ninja-forms"),this.dateChange(e),moment.locale(t)},onBlurField:function(e,t){var i=moment.locale();moment.locale("ninja-forms"),this.dateChange(t),moment.locale(i)},dateChange:function(e){var i=e.get("id"),n=e.get("value"),r=e.get("date_format");if("time_only"==e.get("date_mode"))return!1;if(0<n.length)if(this.isDateValid(n,r,i))nfRadio.channel("fields").request("remove:error",i,t);else{var o=nfRadio.channel("fields").request("get:field",i),a=nfRadio.channel("app").request("get:form",o.get("formID"));nfRadio.channel("fields").request("add:error",i,t,a.get("settings").changeDateErrorMsg)}else nfRadio.channel("fields").request("remove:error",i,t)},dateKeyup:function(e,i,n){if(9==n)return!1;var r=jQuery(e).val(),o=i.get("id"),a=i.get("date_format"),l=moment.locale();if(moment.locale("ninja-forms"),0==r.length)nfRadio.channel("fields").request("remove:error",o,t);else if(this.isDateValid(r,a,o)||i.get("clean"))this.isDateValid(r,a,o)&&(nfRadio.channel("fields").request("remove:error",o,t),i.addWrapperClass("nf-pass"),i.set("clean",!1));else{var s=nfRadio.channel("fields").request("get:field",o),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",o,t,d.get("settings").changeDateErrorMsg),i.removeWrapperClass("nf-pass")}moment.locale(l)},changeHoursMinutes:function(e,t){let i=jQuery(e.target).closest(".nf-field-element"),n=jQuery(i).find(".hour").val(),r=jQuery(i).find(".minute").val(),o=jQuery(i).find(".ampm").val(); t.set("selected_hour",n),t.set("selected_minute",r),t.set("selected_ampm",o);const a=t.get("id");if("string"==typeof a&&-1!==a.search(".")){const e=void 0!==o?n+":"+r+" "+o:n+":"+r;"time_only"===t.get("date_mode")&&t.set("value",e),nfRadio.channel("field-repeater").trigger("set:value")}},isDateValid:function(e,t,i){if(null===document.querySelector("[name='nf-field-"+i+"']"))return;const n=document.querySelector("[name='nf-field-"+i+"']")._flatpickr.parseDate(e,t);if(!n)return!1;const r=n.getTime();if(isNaN(r))return!1;const o=new Date(r);return document.querySelector("[name='nf-field-"+i+"']")._flatpickr.formatDate(o,t)===e}})}),i("controllers/fieldCheckbox",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("checkbox"),"init:model",this.registerRenderClasses),nfRadio.channel("checkbox").reply("validate:required",this.validateRequired),nfRadio.channel("checkbox").reply("validate:modelData",this.validateModelData),nfRadio.channel("checkbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("checkbox").reply("get:calcValue",this.getCalcValue,this)},beforeUpdateField:function(e,t){if(jQuery(e).prop("checked")){var i=1;jQuery(e).addClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}else{i=0;jQuery(e).removeClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label")}return i},validateRequired:function(e,t){return e[0].checked},validateModelData:function(e){return 0!=e.get("value")},getCalcValue:function(e){return 1==e.get("value")?calcValue=e.get("checked_calc_value"):calcValue=e.get("unchecked_calc_value"),calcValue},registerRenderClasses:function(e){"checked"==e.get("default_value")?e.set("value",1):e.set("value",0),e.set("customClasses",this.customClasses),e.set("customLabelClasses",this.customLabelClasses),e.set("maybeChecked",this.maybeChecked)},customClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked":e.replace("nf-checked",""),e},customLabelClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked-label":e.replace("nf-checked-label",""),e},maybeChecked:function(){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?" checked":""}})}),i("controllers/fieldCheckboxList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listcheckbox"),"init:model",this.register),this.listenTo(nfRadio.channel("terms"),"init:model",this.register),nfRadio.channel("listcheckbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("terms").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listcheckbox").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("terms").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("options").length){var t=_.filter(e.get("options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;if(_.each(this.options,function(i,n){Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],i.value)||_.indexOf(this.value,i.value))&&(t=!0),i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.fieldID=this.id,i.classes=this.classes,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label;var r=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),i.value)&&-1===_.indexOf(this.value,i.value)||(r=!0):_.isArray(this.value)||i.value!=this.value?1==i.selected&&this.clean&&void 0===this.value&&(r=!0):r=!0,i.selected=r,i.isSelected=r,i.required=this.required,i.maybeFilterHTML=this.maybeFilterHTML;var o=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-option");e+=o(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");return 0!=i.length&&_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t=Number(t)+Number(n.calc)}),t},beforeUpdateField:function(e,t){var i=t.get("value")||[];"string"==typeof i&&(i=[i]);var n=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(n),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var r=i.indexOf(n);if(-1!=r)i.splice(r,1);else if(Array.isArray(i)){var o=void 0!==i[0]?i[0].split(","):[],a=o.indexOf(n);-1!==a&&o.splice(a,1),i=o.join(",")}}return _.clone(i)}})}),i("controllers/fieldImageList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listimage"),"init:model",this.register),nfRadio.channel("listimage").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listimage").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("image_options").length){var t=_.filter(e.get("image_options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;1===this.allow_multi_select?(this.old_classname="list-checkbox",this.image_type="checkbox"):this.image_type="radio","horizontal"===this.list_orientation?this.flex_direction="row":this.flex_direction="column";var i=this,n=parseInt(this.num_columns)||1,r=1,o=1;if(_.each(this.image_options,function(a,l){this.show_option_labels?a.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(a.label):a.label:a.label="",Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],a.value)||_.indexOf(this.value,a.value))&&(t=!0),a.value==this.value&&(t=!0),void 0===a.visible&&(a.visible=!0),"horizontal"===i.list_orientation&&r<=n&&(a.styles="margin:auto;grid-column: "+r+"; grid-row = "+o,r===n?(r=1,o+=1):r+=1),a.image_type=i.image_type,a.fieldID=this.id,a.classes=this.classes,a.index=l;var s=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),a.value)&&-1===_.indexOf(this.value,a.value)||(s=!0):(_.isArray(this.value)||a.value!=this.value)&&(1!=a.selected||!this.clean||void 0!==this.value&&""!==this.value)||(s=!0),a.selected=s,a.isSelected=s,a.required=this.required,a.maybeFilterHTML=this.maybeFilterHTML;var d=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-option");e+=d(a)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var a={fieldID:this.id,classes:this.classes,value:this.value,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},l=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other");e+=l(a)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if(1==parseInt(e.get("allow_multi_select")))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0!==n&&(t=n.calc)}return t},beforeUpdateField:function(e,t){if(1!==t.get("allow_multi_select")){var i=jQuery(e).val(),n=t.get("image_options");_.each(n,function(e,t){e.value===i?(e.isSelected=!0,e.selected=!0):(e.isSelected=!1,e.selected=!1),e.isSelected?(jQuery("#nf-field-"+e.fieldID+"-"+t).addClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).addClass("nf-checked-label")):(e.selected=!1,jQuery("#nf-field-"+e.fieldID+"-"+t).removeClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).removeClass("nf-checked-label"))})}else{"string"==typeof(i=t.get("value")||[])&&(i=[i]);var r=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(r),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var o=i.indexOf(r);if(-1!=o)i.splice(o,1);else if(Array.isArray(i)){var a=i[0].split(","),l=a.indexOf(r);-1!==l&&a.splice(l,1),i=a.join(",")}}}return _.clone(i)}})}),i("controllers/fieldRadio",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listradio"),"change:modelValue",this.changeModelValue),this.listenTo(nfRadio.channel("listradio"),"init:model",this.register),nfRadio.channel("listradio").reply("get:calcValue",this.getCalcValue,this),this.listenTo(nfRadio.channel("listradio"),"change:field",this.updateCheckedClass,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),0!=e.get("options").length){var t=_.find(e.get("options"),function(e){return 1==e.selected});void 0!==t&&e.set("value",t.value)}},changeModelValue:function(e){1==e.get("show_other")&&e.trigger("reRender")},renderOptions:function(){var e="";if(""==this.value)var t=!0;else t=!1;if(_.each(this.options,function(i,n){i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.selected=!1,i.fieldID=this.id,i.classes=this.classes,i.currentValue=this.value,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label,i.required=this.required,this.clean&&1==this.selected||this.value==i.value?i.selected=!0:i.selected=!1,i.maybeFilterHTML=this.maybeFilterHTML;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-option");e+=r(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other-text")(e)}},getCalcValue:function(e){var t=0;if(0!=e.get("options").length){var i=_.find(e.get("options"),function(t){return e.get("value")==t.value});void 0!==i&&(t=i.calc)}return t},updateCheckedClass:function(e,t){jQuery('[name="'+jQuery(e).attr("name")+'"]').removeClass("nf-checked"),jQuery(e).closest("ul").find("label").removeClass("nf-checked-label"),jQuery(e).addClass("nf-checked"),jQuery(e).closest("li").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}})}),i("controllers/fieldNumber",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("number"),"init:model",this.maybeMinDefault),this.listenTo(nfRadio.channel("number"),"keyup:field",this.validateEntry)},maybeMinDefault:function(e){if(""==e.get("value")&&""==e.get("placeholder")){var t=e.get("num_min");e.set("placeholder",t)}},validateEntry:function(e,t){var i=jQuery(e),n=i.val(),r=parseFloat(n),o=i.attr("min"),a=i.attr("max"),l=i.attr("step")?i.attr("step"):"1";if(o&&r<o){var s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-min",d.get("settings").fieldNumberNumMinError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-min");if(a&&r>a){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-max",d.get("settings").fieldNumberNumMaxError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-max");let c=n.split(".");c=void 0!==c[1]?c[1].length:0;let f=l.split(".");f=void 0!==f[1]?f[1].length:0;let u=Math.pow(10,f);if(l&&n&&(c>f||0!==parseInt((u*r).toFixed())%parseInt((u*parseFloat(l)).toFixed()))){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-step",d.get("settings").fieldNumberIncrementBy+l)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-step")}})}),i("controllers/mirrorField",[],function(){var e=nfRadio.channel("fields");return Marionette.Object.extend({listeningModel:"",initialize:function(){this.listenTo(e,"init:model",this.registerMirror)},registerMirror:function(e){if(e.get("mirror_field")){this.listeningModel=e;var t=e.get("mirror_field");this.listenTo(nfRadio.channel("field-"+t),"change:modelValue",this.changeValue)}},changeValue:function(e){this.listeningModel.set("value",e.get("value")),this.listeningModel.trigger("reRender")}})}),i("controllers/confirmField",[],function(){var e=nfRadio.channel("fields"),t="confirm-mismatch";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"init:model",this.registerConfirm),this.listenTo(e,"keyup:field",this.confirmKeyup)},registerConfirm:function(e){e.get("confirm_field")&&this.listenTo(nfRadio.channel("form"),"loaded",function(t){this.registerConfirmListeners(e)})},registerConfirmListeners:function(e){var t=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",e.get("confirm_field"));void 0!==t&&(t.set("confirm_with",e.get("id")),this.listenTo(nfRadio.channel("field-"+t.get("id")),"change:modelValue",this.changeValue),this.listenTo(nfRadio.channel("field-"+e.get("id")),"change:modelValue",this.changeValue))},changeValue:function(i){if(void 0===i.get("confirm_with"))var n=i,r=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",n.get("confirm_field"));else r=i,n=e.request("get:field",r.get("confirm_with"));r.get("id");var o=n.get("id");if(""==n.get("value")||n.get("value")==r.get("value"))nfRadio.channel("fields").request("remove:error",o,t);else{var a=nfRadio.channel("fields").request("get:field",o),l=nfRadio.channel("app").request("get:form",a.get("formID"));nfRadio.channel("fields").request("add:error",o,t,l.get("settings").confirmFieldErrorMsg)}},confirmKeyup:function(e,i,n){var r=jQuery(e).val();if(i.get("confirm_field"))var o=i,a=i.get("id"),l=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",o.get("confirm_field")).get("value"),s=r;else if(i.get("confirm_with"))a=(o=nfRadio.channel("fields").request("get:field",i.get("confirm_with"))).get("id"),l=s=o.get("value");if(void 0!==o)if(""==s)nfRadio.channel("fields").request("remove:error",a,t);else if(r==l)nfRadio.channel("fields").request("remove:error",a,t);else{var d=nfRadio.channel("fields").request("get:field",a),c=nfRadio.channel("app").request("get:form",d.get("formID"));nfRadio.channel("fields").request("add:error",a,t,c.get("settings").confirmFieldErrorMsg)}}})}),i("controllers/updateFieldModel",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("update:field",this.updateField)},updateField:function(e,t){e.get("isUpdated")||(e.set("value",t),e.set("isUpdated",!0),_.isArray(t)&&e.trigger("change:value",e))}})}),i("controllers/submitButton",["controllers/submitButton"],function(e){return Marionette.Object.extend({bound:{},initialize:function(){this.listenTo(nfRadio.channel("submit"),"init:model",this.registerHandlers)},registerHandlers:function(e){if(void 0!==this.bound[e.get("id")])return!1;this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:field",this.click,this),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"before:submit",this.beforeSubmit,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:failed",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:response",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"enable:submit",this.maybeEnable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"disable:submit",this.maybeDisable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"processingLabel",this.processingLabel,e),e.listenTo(nfRadio.channel("fields"),"add:error",this.maybeDisable,e),e.listenTo(nfRadio.channel("fields"),"remove:error",this.maybeEnable,e),this.bound[e.get("id")]=!0},click:function(e,t){var i=nfRadio.channel("app").request("get:form",t.get("formID"));_.size(i.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(i.get("fieldErrors"))),nfRadio.channel("form-"+t.get("formID")).request("submit",i)},beforeSubmit:function(){this.get("disabled")||(this.set("disabled",!0),nfRadio.channel("form-"+this.get("formID")).trigger("processingLabel",this))},maybeDisable:function(e){void 0!==e&&e.get("formID")!=this.get("formID")||(this.set("disabled",!0),this.trigger("reRender"))},maybeEnable:function(e){if(void 0!==e&&e.get("formID")!=this.get("formID"))return!1;var t=nfRadio.channel("app").request("get:form",this.get("formID"));0==_.size(t.get("fieldErrors"))&&(this.set("disabled",!1),this.trigger("reRender"))},processingLabel:function(){this.set("oldLabel",this.get("label")),this.set("label",this.get("processing_label")),this.set("disabled",!0),this.trigger("reRender")},resetLabel:function(e){void 0!==e.errors&&void 0!==e.errors.nonce&&_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts||(void 0!==this.get("oldLabel")&&this.set("label",this.get("oldLabel")),this.set("disabled",!1),this.trigger("reRender"))}})}),i("controllers/submitDebug",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitDebug)},submitDebug:function(e,t,i,n){if(void 0!==e.debug){if(void 0!==e.debug.form){var r=document.createElement("span");_.each(e.debug.form,function(e,t){var i=document.createTextNode(e);r.appendChild(i),r.appendChild(document.createElement("br"))}),jQuery(".nf-debug-msg").html(r)}if(void 0!==e.debug.console){console.log("%c%s","","NINJA SUPPORT"),_.each(e.debug.console,function(e,t){console.log(e)}),console.log("%c%s","","END NINJA SUPPORT")}}}})}),i("controllers/getFormErrors",[],function(){nfRadio.channel("fields");return Marionette.Object.extend({initialize:function(e){nfRadio.channel("form").reply("get:errors",this.getFormErrors)},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&(0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),_.each(t.get("fields").models,function(e){"submit"!=e.get("type")&&e.get("errors").length>0&&((i=i||{})[e.get("id")]=e.get("errors"))})),i}})}),i("controllers/validateRequired",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"blur:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"change:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.validateKeyup),this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.validateModelData),this.listenTo(nfRadio.channel("submit"),"validate:field",this.validateModelData)},validateKeyup:function(e,t,i){if(1!=t.get("required"))return!1;t.get("clean")||this.validateRequired(e,t)},validateRequired:function(e,t){if(1!=t.get("required")||!t.get("visible"))return!1;var i=jQuery(e).val(),n=nfRadio.channel(t.get("type")).request("validate:required",e,t),r=!0,o=this.getMask(t);if(o&&i===o&&(0<t.get("errors").length||!t.get("clean"))&&(r=!1),String(i).trim()||(r=!1),void 0!==n)var a=n;else a=r;this.maybeError(a,t)},getMask:function(e){var t=e.get("mask");if(void 0!==t){switch(t){case"":break;case"currency":t=nfi18n.currencySymbol;break;case"custom":t=e.get("custom_mask");default:t=(t=(t=t.replace(/9/g,"_")).replace(/a/g,"_")).replace(/\*/g,"_")}return t}},validateModelData:function(e){if(1!=e.get("required")||!e.get("visible")||e.get("clean"))return!1;if(e.get("errors").get("required-error"))return!1;currentValue=e.get("value");var t=!0;String(currentValue).trim()||(t=!1);var i=nfRadio.channel(e.get("type")).request("validate:modelData",e);if(void 0!==i)var n=i;else n=t;this.maybeError(n,e)},maybeError:function(e,t){if(e)nfRadio.channel("fields").request("remove:error",t.get("id"),"required-error");else{var i=nfRadio.channel("form-"+t.get("formID")).request("get:form");void 0!==i&&nfRadio.channel("fields").request("add:error",t.get("id"),"required-error",i.get("settings").validateRequiredField)}}})}),i("controllers/submitError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitErrors),nfRadio.channel("submit").reply("focus:firstInvalidInput",this.focusFirstInvalidInput)},submitErrors:function(e,t,i,n){if(_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts){nfFrontEnd.ajaxNonce=e.errors.nonce.new_nonce,nfFrontEnd.nonce_ts=e.errors.nonce.nonce_ts;var r=nfRadio.channel("app").request("get:form",n);nfRadio.channel("form-"+n).request("submit",r)}if(_.size(e.errors.fields)>0&&_.each(e.errors.fields,function(e,t){"object"==typeof e?nfRadio.channel("fields").request("add:error",t,e.slug,e.message):nfRadio.channel("fields").request("add:error",t,"required-error",e)}),_.size(e.errors.form)>0&&_.each(e.errors.form,function(e,t){nfRadio.channel("form-"+n).request("remove:error",t),nfRadio.channel("form-"+n).request("add:error",t,e)}),void 0!==e.errors.last&&void 0!==e.errors.last.message){var o="background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;";console.log("%c NINJA FORMS SUPPORT: SERVER ERROR",o),console.log(e.errors.last.message),console.log("%c END SERVER ERROR MESSAGE",o)}jQuery("#nf-form-"+n+"-cont .nf-field-container").show()},focusFirstInvalidInput:function(e){const t=nfRadio.channel("fields").request("get:firstFieldByOrder",e);null!==document.getElementById("nf-field-"+t)&&document.getElementById("nf-field-"+t).focus()}})}),i("controllers/actionRedirect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionRedirect)},actionRedirect:function(e){void 0!==e.data.halt&&void 0!==e.data.halt.redirect&&""!=e.data.halt.redirect&&(window.location=e.data.halt.redirect),0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.redirect&&""!=e.data.actions.redirect&&(window.location=e.data.actions.redirect)}})}),i("controllers/actionSuccess",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){if(0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.success_message&&""!=e.data.actions.success_message){var t=e.data.form_id,i=jQuery("#nf-form-"+t+"-cont .nf-response-msg");const l=e.data.actions.success_message.replace(/(<([^>]+)>)/gi,"");i.attr("tabindex","0"),i.attr("aria-live","assertive"),i.attr("aria-label",l),i.html(e.data.actions.success_message).show(),i.focus();var n=i.offset().top,r=i.offset().top+i.outerHeight(),o=jQuery(window).scrollTop()+jQuery(window).height(),a=jQuery(window).scrollTop();o>r&&a<n||jQuery("html, body").animate({scrollTop:i.offset().top-50},300)}}})}),i("controllers/fieldSelect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"init:model",function(e){"list"==e.get("parentType")&&this.register(e)},this),nfRadio.channel("listselect").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("listmultiselect").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherAttributes",this.renderOtherAttributes),0!=e.get("options").length){var t=e.get("value");if("listmultiselect"==e.get("type"))var i=_.filter(e.get("options"),function(e){return 1==e.selected}),n=i=_.map(i,function(e){return e.value});else if("listradio"!==e.get("type")){if(void 0===(i=_.find(e.get("options"),function(e){return 1==e.selected}))&&(i=_.first(e.get("options"))),void 0!==i&&void 0!==i.value)n=i.value;else if(void 0!==i)n=i.label}void 0!==t&&""!==t&&Array.isArray(t)?e.set("value",t):void 0!==i&&e.set("value",n)}},renderOptions:function(){var e="";return _.each(this.options,function(t){if(_.isArray(this.value)){if("listmultiselect"===this.type&&0<this.value.length&&-1!=_.indexOf(this.value[0].split(","),t.value))var i=!0;else if(-1!=_.indexOf(this.value,t.value))i=!0}else if(_.isArray(this.value)||t.value!=this.value)if(1==t.selected&&this.clean&&void 0===this.value)i=!0;else i=!1;else var i=!0;void 0===t.visible&&(t.visible=!0),t.selected=i,t.fieldID=this.id,t.classes=this.classes,t.currentValue=this.value,t.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(t.label):t.label,t.maybeFilterHTML=this.maybeFilterHTML;var n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listselect-option");e+=n(t)},this),e},renderOtherAttributes:function(){var e="";"listmultiselect"==this.type&&(e=(e+=" multiple")+' size="'+(this.multi_size||5)+'"');return e},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if("listmultiselect"==e.get("type"))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0===n&&(n=e.get("options")[0]),t=n.calc}return t}})}),i("controllers/coreSubmitResponse",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){var t=nfRadio.channel("app").request("get:form",e.data.form_id);if(0!=_.size(e.errors))return!1;1==e.data.settings.clear_complete&&(t.get("fields").reset(t.get("loadedFields")),1!=e.data.settings.hide_complete&&nfRadio.channel("captcha").trigger("reset")),1==e.data.settings.hide_complete&&t.trigger("hide")}})}),i("controllers/fieldProduct",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("product"),"init:model",this.register),nfRadio.channel("product").reply("get:calcValue",this.getCalcValue,this)},register:function(e){e.set("renderProductQuantity",this.renderProductQuantity),e.set("renderProduct",this.renderProduct),e.set("renderOptions",this.renderOptions)},renderProduct:function(){switch(this.product_type){case"user":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-textbox")(this);case"hidden":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-hidden")(this);case"dropdown":return nfRadio.channel("app").request("get:template","#tmpl-nf-product-dropdown")(this);default:return nfRadio.channel("app").request("get:template","#tmpl-nf-product-single")(this)}},renderProductQuantity:function(){if(1==this.product_use_quantity)return nfRadio.channel("app").request("get:template","#tmpl-nf-product-quantity")(this)},renderOptions:function(){var e=this,t="";return _.each(this.options,function(i){if(1==i.selected)var n=!0;else n=!1;i.selected=n,i.fieldID=e.id,i.classes=e.classes,i.currentValue=e.value;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-product-"+e.product_type+"-option");t+=r(i)}),t},getCalcValue:function(e){return e.get("product_price")*e.get("value")}})}),i("controllers/fieldTotal",[],function(){return Marionette.Object.extend({totalModel:{},productTotals:{},initialize:function(){this.listenTo(nfRadio.channel("total"),"init:model",this.register),this.listenTo(nfRadio.channel("shipping"),"init:model",this.registerShipping)},register:function(e){this.totalModel=e;var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"loaded",this.onFormLoaded),this.listenTo(nfRadio.channel("product"),"change:modelValue",this.onChangeProduct),this.listenTo(nfRadio.channel("quantity"),"change:modelValue",this.onChangeQuantity)},registerShipping:function(e){this.shippingCost=e.get("shipping_cost")},onFormLoaded:function(e){var t=e.get("fields").models,i={},n={};for(var r in t){var o=t[r],a=o.get("id");if("product"==o.get("type"))i[a]=o;else if("quantity"==o.get("type")){n[l=o.get("product_assignment")]=o}}for(var l in i){var s=i[l],d=Number(s.get("product_price"));n[l]?d*=n[l].get("value"):1==s.get("product_use_quantity")&&(d*=s.get("value")),this.productTotals[l]=d}this.updateTotal()},onChangeProduct:function(e){var t=e.get("id"),i=Number(e.get("product_price")),n=Number(e.get("value"))*i;this.productTotals[t]=n,this.updateTotal()},onChangeQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t),n=Number(i.get("product_price")),r=Number(e.get("value"))*n;this.productTotals[t]=r,this.updateTotal()},updateTotal:function(){var e=0;for(var t in this.productTotals)e+=Number(this.productTotals[t]);e&&this.shippingCost&&(e+=Number(this.shippingCost)),this.totalModel.set("value",e.toFixed(2)),this.totalModel.trigger("reRender")}})}),i("controllers/fieldQuantity",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("quantity"),"init:model",this.registerQuantity)},registerQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t);i&&i.set("product_use_quantity",0)}})}),i("models/calcModel",[],function(){return Backbone.Model.extend({initialize:function(){this.set("formID",this.collection.options.formModel.get("id")),this.set("fields",{}),nfRadio.channel("calc").trigger("init:model",this),this.on("change:value",this.changeValue,this)},changeField:function(e){nfRadio.channel("calc").trigger("change:field",this,e)},changeCalc:function(e){nfRadio.channel("calc").trigger("change:calc",this,e)},changeValue:function(){nfRadio.channel("calc").trigger("change:value",this)}})}),i("models/calcCollection",["models/calcModel"],function(e){return Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,_.each(e,function(e){void 0!==e.dec&&(""===e.dec.toString().trim()&&(e.dec=2),e.dec=parseInt(e.dec))}),nfRadio.channel("form-"+t.formModel.get("id")).reply("get:calc",this.getCalc,this)},getCalc:function(e){return this.findWhere({name:e})}})}),i("controllers/calculations",["models/calcCollection"],function(e){return Marionette.Object.extend({initialize:function(){this.calcs={},this.displayFields={},this.listenTo(nfRadio.channel("form"),"loaded",this.registerCalcs),this.listenTo(nfRadio.channel("fields"),"reset:collection",this.resetCalcs),this.listenTo(nfRadio.channel("calc"),"change:field",this.changeField),this.listenTo(nfRadio.channel("calc"),"change:calc",this.changeCalc);var e=this;_.each(nfFrontEnd.use_merge_tags.calculations,function(t){e.listenTo(nfRadio.channel("fields-"+t),"init:model",e.initDisplayField)}),this.listenTo(nfRadio.channel("calc"),"change:value",this.updateDisplayFields),this.init={}},resetCalcs:function(e){void 0!==e.options.formModel&&this.registerCalcs(e.options.formModel)},registerCalcs:function(t){var i=new e(t.get("settings").calculations,{formModel:t});this.calcs[t.get("id")]=i;var n=this;_.each(i.models,function(e){n.init[e.get("name")]=!0,n.setupCalc(e)})},setupCalc:function(e){var t=this,i=e.get("eq"),n=i,r=(e.get("name"),i.match(new RegExp(/{field:(.*?)}/g)));r&&(r=r.map(function(i){var r=i.replace(":calc}","").replace("}","").replace("{field:","");if(fieldModel=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",r),"undefined"!=typeof fieldModel){fieldModel.set("clean",!1),fieldModel.on("change:value",e.changeField,e);var o=t.getCalcValue(fieldModel);t.updateCalcFields(e,r,o),n=t.replaceKey("field",r,o,n)}}));var o=i.match(new RegExp(/{calc:(.*?)}/g));o&&(o=o.map(function(i){var r=i.replace("}","").replace("{calc:",""),o=e.collection.findWhere({name:r});if(void 0!==o){o.on("change:value",e.changeCalc,e);var a=o.get("value");n=t.replaceKey("calc",r,a,n)}})),n=(n=n.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,0)).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+n+" -> "+this.localeDecodeEquation(n)+" (Setup)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(n))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},updateCalcFields:function(e,t,i){var n=e.get("fields");n[t]=i,e.set("fields",n)},getCalcValue:function(e){var t=nfRadio.channel(e.get("type")).request("get:calcValue",e),i=e.get("value");void 0!==t&&(t||0===t)&&(i=t);var n=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point),o=n.numberDecoder(i),a=n.numberEncoder(i);return t=void 0!==o&&jQuery.isNumeric(o)?a:0,e.get("visible")||(t=0),t},replaceKey:function(e,t,i,n){n=n||calcModel.get("eq"),tag="{"+e+":"+t+"}";var r=new RegExp(tag,"g");calcTag="{"+e+":"+t+":calc}";var o=new RegExp(calcTag,"g");return n=(n=n.replace(r,i)).replace(o,i)},replaceAllKeys:function(e){var t=e.get("eq"),i=this;_.each(e.get("fields"),function(e,n){t=i.replaceKey("field",n,e,t)});var n=t.match(new RegExp(/{calc:(.*?)}/g));return n&&_.each(n,function(i){var n=i.replace("}","").replace("{calc:",""),r=e.collection.findWhere({name:n});if(void 0!==r){var o=new RegExp(i,"g");t=t.replace(o,r.get("value"))}}),t},changeField:function(e,t){var i=t.get("key"),n=this.getCalcValue(t);this.updateCalcFields(e,i,n);var r=this.replaceAllKeys(e);r=(r=r.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,"0")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+r+" -> "+this.localeDecodeEquation(r)+" (Change Field)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(r))).toFixed(e.get("dec")))}catch(e){this.debug()&&console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},initDisplayField:function(e){if(e.get("default")&&"string"==typeof e.get("default")){var t=e.get("default").match(new RegExp(/{calc:(.*?)}/g));t&&_.each(t,function(t){t=t.replace("{calc:","").replace("}","").replace(":2",""),this.displayFields[t]=this.displayFields[t]||[],this.displayFields[t].push(e)},this)}},updateDisplayFields:function(e){var t=this;void 0!==this.displayFields[e.get("name")]&&_.each(this.displayFields[e.get("name")],function(i){var n="",r=(n="html"===i.get("type")?i.get("value"):i.get("default")).match(new RegExp(/<span data-key="calc:(.*?)<\/span>/g));_.each(r,function(e){var t="{"+e.replace('<span data-key="',"").replace(/">(.*?)<\/span>/,"")+"}";n=n.replace(e,t)});var o=n.match(new RegExp(/{calc:(.*?)}/g));_.each(o,function(e){var r=e.replace("}","").replace("{calc:","").replace(":2",""),o=t.calcs[i.get("formID")].findWhere({name:r}),a=new RegExp(e,"g"),l=o.get("value");void 0!==l&&(l=t.applyLocaleFormatting(l,o)),n="html"===i.get("type")?n.replace(a,'<span data-key="calc:'+r+'">'+l+"</span>"):l}),i.set("value",n),t.init[e.get("name")]||i.trigger("reRender"),t.init[e.get("name")]=!1})},getCalc:function(e,t){return this.calcs[t].findWhere({name:e})},changeCalc:function(e,t){var i=this.replaceAllKeys(e);i=(i=i.replace("[","").replace("]","")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+i+" -> "+this.localeDecodeEquation(i)+" (Change Calc)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(i))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},applyLocaleFormatting:function(e,t){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e,t.get("dec"))},localeDecodeEquation:function(e){var t="",i="",n=/[0-9.,]/,o=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point);return(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").forEach(function(e){n.test(e)?i+=e:(0<i.length&&(t+=o.numberDecoder(i),i=""),t+=e)}),0<i.length&&(t+=o.numberDecoder(i)),t},debug:function(e){window.nfCalculationsDebug&&console.log(e)}})}),i("controllers/dateBackwardsCompat",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(Backbone.Radio.channel("pikaday-bc"),"init",this.dateBackwardsCompat)},dateBackwardsCompat:function(e,t){if(e.pikaday={},e.pikaday._o={},nfRadio.channel("pikaday").trigger("init",e,t),void 0!==e.pikaday._o.disableDayFn&&e.set("disable",[e.pikaday._o.disableDayFn]),void 0!==e.pikaday._o.i18n||void 0!==e.pikaday._o.firstDay){let t=e.config.locale;void 0!==e.pikaday._o.firstDay&&(t.firstDayOfWeek=e.pikaday._o.firstDay),void 0!==e.pikaday._o.i18n&&(void 0!==e.pikaday._o.i18n.weekdays&&(t.weekdays.longhand=e.pikaday._o.i18n.weekdays),void 0!==e.pikaday._o.i18n.weekdaysShort&&(t.weekdays.shorthand=e.pikaday._o.i18n.weekdaysShort),void 0!==e.pikaday._o.i18n.months&&jQuery(".flatpickr-monthDropdown-months > option").each(function(){this.text=e.pikaday._o.i18n.months[this.value]})),e.set("locale",t)}Object.keys(e.pikaday._o).length>0&&(console.log("%cDeprecated Ninja Forms Pikaday custom code detected.","color: Red; font-size: large"),console.log("You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details."))}})}),i("controllers/fieldDate",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("date"),"init:model",this.initModel),this.listenTo(nfRadio.channel("date"),"render:view",this.initDatepicker)},initModel:function(e){this.registerFunctions(e)},registerFunctions:function(e){e.set("renderHourOptions",this.renderHourOptions),e.set("renderMinuteOptions",this.renderMinuteOptions),e.set("maybeRenderAMPM",this.maybeRenderAMPM),e.set("customClasses",this.customClasses),e.getValue=this.getValue},renderHourOptions:function(){return this.hours_options},renderMinuteOptions:function(){return this.minutes_options},maybeRenderAMPM:function(){if(void 0!==this.hours_24&&1!=this.hours_24)return`<div style="float:left;" class="time-wrap"><select id="ampm-select" class="ampm extra" aria-label="am-pm-select" ${1==this.required?'aria-required="true" required':""}><option value="am">AM</option><option value="pm">PM</option></select></div>`},initDatepicker:function(e){e.model.set("el",e.el);var t=jQuery(e.el).find(".nf-element")[0];if(e.listenTo(nfRadio.channel("form-"+e.model.get("formID")),"before:submit",this.beforeSubmit,e),void 0!==e.model.get("date_mode")&&"time_only"==e.model.get("date_mode"))return jQuery(t).hide(),!1;var i=this.convertDateFormat(e.model.get("date_format"));e.model.set("date_format",i);var n={onReady:(e,i,n)=>{n.altInput.setAttribute("aria-labelledby",jQuery(t).attr("aria-labelledby")),n.altInput.setAttribute("aria-invalid",!1)},dateFormat:i,altFormat:i,altInput:!0,ariaDateFormat:i,mode:"single",allowInput:!0,disableMobile:"true",minDate:this.getMinDate(e.model),maxDate:this.getMaxDate(e.model)};const r=this.checkCustomLocale();r&&(n.locale=r);let o=nfRadio.channel("flatpickr").request("filter:settings",n,e);void 0!==o&&(n=o);var a=flatpickr(t,n);1!=e.model.get("date_default")||e.model.get("value")||(a.defaultDate=new Date,a.setDate(a.defaultDate),e.model.set("value",a.defaultDate)),1==e.model.get("date_default")&&"string"==typeof e.model.get("id")&&e.model.get("id").includes(".")&&"object"==typeof e.model.get("value")&&this.isSameDay(e.model.get("value"),new Date)&&(a.defaultDate=new Date,a.setDate(a.defaultDate,!0),e.model.set("value",a.defaultDate)),nfRadio.channel("pikaday-bc").trigger("init",a,e.model,e),nfRadio.channel("flatpickr").trigger("init",a,e.model,e)},beforeSubmit:function(e){if(_.isObject(this.model.get("value"))){const e=this.el.querySelector("input[type='hidden']").value;this.model.set("value",e)}if(-1!==this.el.dataset.fieldId.search(".")&&(nfRadio.channel("field-repeater").trigger("set:value"),"time_only"===this.model.get("date_mode")))return;if("date_only"==this.model.get("date_mode"))return!1;let t=jQuery(this.el).find(".hour").val(),i=jQuery(this.el).find(".minute").val(),n=jQuery(this.el).find(".ampm").val(),r=this.model.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a={date:o,hour:t,minute:i,ampm:n};this.model.set("value",a)},getMinDate:function(e){let t=null;if(void 0!==e.get("year_range_start")){const i=e.get("year_range_start");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},getMaxDate:function(e){let t=null;if(void 0!==e.get("year_range_end")){const i=e.get("year_range_end");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},convertDateFormat:function(e){!e&&this.model&&(e=this.model.get("date_format")),e||(e="default");const t={"MM/DD/YYYY":"m/d/Y","MM-DD-YYYY":"m-d-Y","MM.DD.YYYY":"m.d.Y","DD/MM/YYYY":"d/m/Y","DD-MM-YYYY":"d-m-Y","DD.MM.YYYY":"d.m.Y","YYYY-MM-DD":"Y-m-d","YYYY/MM/DD":"Y/m/d","YYYY.MM.DD":"Y.m.d","dddd, MMMM D YYYY":"l, F d Y",default:nfi18n.dateFormat?nfi18n.dateFormat:"default"};return Object.keys(t).includes(e)?t[e]:e},customClasses:function(e){return"date_and_time"==this.date_mode&&(e+=" date-and-time"),e},checkCustomLocale:function(){let e={};return nfi18n&&((nfi18n.months||nfi18n.monthsShort)&&(e.months={},nfi18n.months&&(e.months.longhand=nfi18n.months),nfi18n.monthsShort&&(e.months.shorthand=nfi18n.monthsShort)),(nfi18n.weekdays||nfi18n.weekdaysShort)&&(e.weekdays={},nfi18n.weekdays&&(e.weekdays.longhand=nfi18n.weekdays),nfi18n.weekdaysShort&&(e.weekdays.shorthand=nfi18n.weekdaysShort)),nfi18n.startOfWeek&&(e.firstDayOfWeek=nfi18n.startOfWeek)),!_.isEmpty(e)&&e},getValue:function(){if("date_only"==this.get("date_mode"))return this.get("value");let e=this.get("el"),t=jQuery(e).find(".hour").val(),i=jQuery(e).find(".minute").val(),n=jQuery(e).find(".ampm").val(),r=this.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a="";return void 0!==o&&(a+=o),void 0!==t&&void 0!==i&&(a+=" "+t+":"+i),void 0!==n&&(a+=" "+n),a},isSameDay:function(e,t){const i=new Date(e),n=new Date(t);return i.setHours(0,0,0,0),n.setHours(0,0,0,0),i.getTime()===n.getTime()}})}),i("controllers/fieldRecaptcha",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha"),"init:model",this.initRecaptcha),this.listenTo(nfRadio.channel("forms"),"submit:response",this.resetRecaptcha)},initRecaptcha:function(e){nfRadio.channel("recaptcha").reply("update:response",this.updateResponse,this,e.id)},updateResponse:function(e,t){var i=nfRadio.channel("fields").request("get:field",t);i.set("value",e),nfRadio.channel("fields").request("remove:error",i.get("id"),"required-error")},resetRecaptcha:function(){var e=0;jQuery(".g-recaptcha").each(function(){try{grecaptcha.reset(e)}catch(e){console.log("Notice: Error trying to reset grecaptcha.")}e++})}})}),i("controllers/fieldRecaptchaV3",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha_v3"),"init:model",this.initRecaptcha)},initRecaptcha:function(e){const t=e.get("formID");this.processRecaptcha(t,e),setInterval(this.processRecaptcha,11e4,t,e)},processRecaptcha:function(e,t){try{nfRadio.channel("form-"+e).trigger("disable:submit",t),grecaptcha.ready(function(){grecaptcha.execute(t.get("site_key"),{action:"register"}).then(function(i){t.set("value",i),nfRadio.channel("form-"+e).trigger("enable:submit",t)})})}catch(e){jQuery(document).on("nfFormReady",e=>{let i,n=nf_check_recaptcha_consent();t.collection.models.forEach(e=>{"submit"===e.get("type")&&(i=e.get("id"))}),nfRadio.channel("fields").request("add:error",i,"recaptcha-v3-missing",t.collection.options.formModel.get("settings").recaptchaConsentMissing),this.nf_build_default_consent_action(t,n.services,i,e)})}},nf_build_default_consent_action:function(e,t,i,n){if(!(t.length<=1&&t.includes("missing_cookie")||t.length<=0)){let r=document.createElement("div");r.setAttribute("id","nf_recaptcha_consent_event"),r.innerText+=e.collection.options.formModel.get("settings").recaptchaConsentEvent;let o=new CustomEvent("nf_consent_link",{detail:{services:t,element:r,submitFieldID:i,layoutView:n}});document.dispatchEvent(o);const a=document.getElementsByClassName("nf-error-recaptcha-v3-missing");Array.prototype.slice.call(a).forEach(e=>{e.append(r)})}}})}),i("controllers/fieldHTML",[],function(){return Marionette.Object.extend({htmlFields:[],trackedMergeTags:[],initialize:function(){this.listenTo(Backbone.Radio.channel("fields-html"),"init:model",this.setupFieldMergeTagTracking)},setupFieldMergeTagTracking:function(e){this.htmlFields.push(e);var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"init:model",function(t){var i=e.get("default").match(new RegExp(/{field:(.*?)}/g));i&&(_.each(i,function(e){var i=e.replace("{field:","").replace("}",""),n=t.get("fields").findWhere({key:i});void 0!==n&&(this.trackedMergeTags.push(n),this.listenTo(nfRadio.channel("field-"+n.get("id")),"change:modelValue",this.updateFieldMergeTags))},this),this.updateFieldMergeTags())},this)},updateFieldMergeTags:function(e){_.each(this.htmlFields,function(e){var t=e.get("value");_.each(this.trackedMergeTags,function(e){var i=t.match(new RegExp(/<span data-key="field:(.*?)<\/span>/g));_.each(i,function(i){-1<i.indexOf('data-key="field:'+e.get("key"))&&(t=t.replace(i,"{field:"+e.get("key")+"}"))});var n="{field:"+e.get("key")+"}";const r="repeater"===e.get("type")?this.displayRepeaterData(e):e.getValue();t=t.replace(n,'<span data-key="field:'+e.get("key")+'">'+r+"</span>")},this),e.set("value",t),e.trigger("reRender")},this)},displayRepeaterData:function(e){const t=Object.keys(e.getValue());let i="",n=[];return _.each(t,function(e){if(-1===n.indexOf(e)){const t=nfRadio.channel("fields").request("get:field",e);if(void 0!==t){if(-1===["submit","html","hidden","password","passwordconfirm","divider","hr","note","unknown","button","confirm","creditcard","creditcardcvc","creditcardexpiration","creditcardfullname","creditcardnumber","creditcardzip","recaptcha","recaptcha_v3"].indexOf(t.get("type"))&&t.getValue().toString().length>0){const r=Number(e.split("_").pop())+1;i+="<p>"+t.get("label")+" "+r+" : "+t.getValue()+"</p>",n.push(e)}}}}),i}})}),i("controllers/helpText",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"render:view",this.initHelpText),this.listenTo(nfRadio.channel("field-repeater"),"fieldset:added",this.initHelpText),nfRadio.channel("form").reply("init:help",this.initHelpText)},initHelpText:function(e){e&&!e.el&&"function"==typeof e.get&&"repeater"===e.get("type")&&(e.el="#nf-form-"+e.get("formID")+"-cont"),jQuery(e.el).find(".nf-help").each(function(e){var t=jQuery(this).jBox("Tooltip",{theme:"TooltipBorder",content:jQuery(this).data("text"),trigger:"mouseenter focus",closeOnMouseleave:!0,closeOnClick:!0});jQuery(this).on("keydown mouseleave",function(){t.close()})})}})}),i("controllers/fieldTextbox",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("textbox").reply("get:calcValue",this.getCalcValue,this)},getCalcValue:function(e){if("currency"==e.get("mask")){var t=nfRadio.channel("app").request("get:form",e.get("formID")),i=void 0!==t?t.get("currencySymbol"):"",n=jQuery("<textarea />").html(i).text();return e.get("value").replace(n,"")}return e.get("value")}})}),i("controllers/fieldTextareaRTE",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("textarea"),"render:view",this.initTextareaRTEs),this.listenTo(nfRadio.channel("textarea"),"click:extra",this.clickExtra),this.meta_image_frame,this.currentContext={},void 0!==jQuery.summernote&&(jQuery.summernote.options.icons={align:"dashicons dashicons-editor-alignleft",alignCenter:"dashicons dashicons-editor-aligncenter",alignJustify:"dashicons dashicons-editor-justify",alignLeft:"dashicons dashicons-editor-alignleft",alignRight:"dashicons dashicons-editor-alignright",indent:"dashicons dashicons-editor-indent",outdent:"dashicons dashicons-editor-outdent",bold:"dashicons dashicons-editor-bold",caret:"dashicons dashicons-arrow-down",close:"dashicons dashicons-dismiss",code:"dashicons dashicons-editor-code",eraser:"dashicons dashicons-editor-removeformatting",italic:"dashicons dashicons-editor-italic",link:"dashicons dashicons-admin-links",unlink:"dashicons dashicons-editor-unlink",magic:"dashicons dashicons-editor-paragraph",minus:"dashicons dashicons-minus",orderedlist:"dashicons dashicons-editor-ol",redo:"dashicons dashicons-redo",square:"dashicons fa-square",table:"dashicons dashicons-editor-table",underline:"dashicons dashicons-editor-underline",undo:"dashicons dashicons-undo",unorderedlist:"dashicons dashicons-editor-ul"})},initTextareaRTEs:function(e){if(1!=e.model.get("textarea_rte"))return!1;var t=this,i=[["paragraphStyle",["style"]],["fontStyle",["bold","italic","underline","clear"]],["lists",["ul","ol"]],["paragraph",["paragraph"]],["customGroup",["linkButton","unlink"]],["table",["table"]],["actions",["undo","redo"]]];1==e.model.get("textarea_media")&&0!=userSettings.uid&&i.push(["tools",["mediaButton"]]),jQuery(e.el).find(".nf-element").summernote({toolbar:i,buttons:{linkButton:function(e){return t.linkButton(e)},mediaButton:function(e){return t.mediaButton(e)}},height:150,codemirror:{theme:"monokai",lineNumbers:!0},prettifyHtml:!0,callbacks:{onChange:function(t){e.model.set("value",jQuery(this).summernote("code"))}}});var n=jQuery(e.el).find(".link-button").next(".dropdown-menu").find("button");n.replaceWith(function(){return jQuery("<div/>",{class:jQuery(n).attr("class"),html:this.innerHTML})})},linkButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-button"),r=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-dropdown");return i.buttonGroup([i.button({className:"dropdown-toggle link-button",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertLink,click:function(i){t.clickLinkButton(i,e)},data:{toggle:"dropdown"}}),i.dropdown([i.buttonGroup({children:[i.button({contents:r({}),tooltip:""})]})])]).render()},mediaButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-media-button");return i.button({className:"dropdown-toggle",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertMedia,click:function(i){t.openMediaManager(i,e)}}).render()},openMediaManager:function(e,t){if(t.invoke("editor.saveRange"),this.meta_image_frame)this.meta_image_frame.open();else{this.meta_image_frame=wp.media.frames.meta_image_frame=wp.media({title:nfi18n.fieldTextareaRTESelectAFile,button:{text:"insert"}});var i=this;this.meta_image_frame.on("select",function(){var e=i.meta_image_frame.state().get("selection").first().toJSON();i.insertMedia(e,t)}),this.meta_image_frame.open()}},clickLinkButton:function(e,t){var i=t.invoke("editor.createRange");t.invoke("editor.saveRange");var n=i.toString();this.currentContext=t,jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("hide.bs.dropdown",function(e){return!1}),jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("shown.bs.dropdown",function(e){jQuery(e.target).parent().parent().find(".link-text").val(n),jQuery(e.target).parent().parent().find(".link-url").focus()})},clickExtra:function(e){var t=jQuery(e.target).parent().find(".link-text"),i=jQuery(e.target).parent().find(".link-url"),n=jQuery(e.target).parent().find(".link-new-window");if(this.currentContext.invoke("editor.restoreRange"),jQuery(e.target).hasClass("insert-link")){var r=t.val(),o=i.val(),a=!!n.prop("checked");0!=r.length&&0!=o.length&&this.currentContext.invoke("editor.createLink",{text:r,url:o,isNewWindow:a})}t.val(""),i.val(""),n.prop("checked",!1),jQuery(e.target).closest("div.note-btn-group.open").removeClass("open")},insertMedia:function(e,t){t.invoke("editor.restoreRange"),"image"==e.type?t.invoke("editor.insertImage",e.url):t.invoke("editor.createLink",{text:e.filename,url:e.url})}})}),i("controllers/fieldStarRating",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("starrating"),"init:model",this.register),this.listenTo(nfRadio.channel("starrating"),"render:view",this.initRating)},register:function(e){e.set("renderRatings",this.renderRatings)},initRating:function(e){jQuery(e.el).find(".starrating").rating()},renderRatings:function(){for(var e=document.createElement("span"),t=0;t<=this.number_of_stars-1;t++){var i=nfRadio.channel("app").request("get:template","#tmpl-nf-field-starrating-star"),n=t+1,r="";this.value==n&&(r="checked");var o=i({id:this.id,classes:this.classes,num:n,checked:r,required:this.required});e.appendChild(document.createRange().createContextualFragment(o))}return e.innerHTML}})}),i("controllers/fieldTerms",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("terms"),"init:model",this.register)},register:function(e){this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:extra",this.clickExtra),this.listenTo(nfRadio.channel("field-"+e.get("id")),"keyup:field",this.keyUpExtra)},clickExtra:function(e,t){var i=jQuery(e.currentTarget).parent().find(".extra-value").val();this.addOption(t,i)},keyUpExtra:function(e,t,i){13==i&&this.addOption(t,e.val())},addOption:function(e,t){if(t){var i={label:t,value:t,selected:0};e.get("options").push(i),e.get("value").push(t),e.trigger("reRender")}}})}),i("controllers/formContentFilters",[],function(){return Marionette.Object.extend({initialize:function(){this.viewFilters=[],this.loadFilters=[],nfRadio.channel("formContent").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("formContent").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("formContent").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("formContent").reply("get:loadFilters",this.getLoadFilters,this),nfRadio.channel("fieldContents").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("fieldContents").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("fieldContents").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("fieldContents").reply("get:loadFilters",this.getLoadFilters,this)},addViewFilter:function(e,t){this.viewFilters[t]=e},getViewFilters:function(){return this.viewFilters},addLoadFilter:function(e,t){this.loadFilters[t]=e},getLoadFilters:function(){return this.loadFilters}})}),i("views/fieldItem",[],function(){return Marionette.ItemView.extend({tagName:"div",initialize:function(){this.listenTo(this.model,"reRender",this.render,this),this.listenTo(this.model,"change:addWrapperClass",this.addWrapperClass,this),this.listenTo(this.model,"change:removeWrapperClass",this.removeWrapperClass,this),this.listenTo(this.model,"change:invalid",this.toggleAriaInvalid,this),this.template="#tmpl-nf-field-"+this.model.get("wrap_template")},test:function(e){console.log("firing from trigger 1")},addWrapperClass:function(){var e=this.model.get("addWrapperClass");""!=e&&(jQuery(this.el).addClass(e),this.model.set("addWrapperClass",""))},removeWrapperClass:function(){var e=this.model.get("removeWrapperClass");""!=e&&(jQuery(this.el).removeClass(e),this.model.set("removeWrapperClass",""))},toggleAriaInvalid:function(){var e=this.model.get("invalid");jQuery("[aria-invalid]",this.el).attr("aria-invalid",JSON.stringify(e))},onRender:function(){if(this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el),void 0!==this.model.get("mask")&&""!=String(this.model.get("mask")).trim()){if("custom"==this.model.get("mask"))var e=this.model.get("custom_mask");else e=this.model.get("mask");if(Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e},Number.isInteger(e)&&(e=e.toString()),"currency"==e){var t=nfRadio.channel("app").request("get:form",this.model.get("formID")),i=t.get("thousands_sep");" "!=i&&160!=i.charCodeAt(0)||(i=" ");var n=jQuery("<div/>").html(t.get("currencySymbol")).text(),r={digitGroupSeparator:i=jQuery("<div/>").html(i).text(),decimalCharacter:jQuery("<div/>").html(t.get("decimal_point")).text(),currencySymbol:n,modifyValueOnWheel:!1},o=jQuery(jQuery(this.el).find(".nf-element")[0]);new AutoNumeric(jQuery(this.el).find(".nf-element")[0],r);var a=this;o.on("change",function(e){a.model.set("value",e.target.value)})}else jQuery(this.el).find(".nf-element").mask(e)}nfRadio.channel(this.model.get("type")).trigger("render:view",this),nfRadio.channel("fields").trigger("render:view",this)},templateHelpers:function(){var e=this;return{renderElement:function(){this.clean&&!this.value&&0===this.default&&(this.value="0");var e=_.find(this.element_templates,function(e){if(0<jQuery("#tmpl-nf-field-"+e).length)return!0});return nfRadio.channel("app").request("get:template","#tmpl-nf-field-"+e)(this)},renderLabel:function(){return nfRadio.channel("app").request("get:template","#tmpl-nf-field-label")(this)},renderLabelClasses:function(){var e="";return void 0!==this.customLabelClasses&&(e=this.customLabelClasses(e)),e},renderPlaceholder:function(){var e=this.placeholder;return void 0!==this.customPlaceholder&&(e=this.customPlaceholder(e)),""!=String(e).trim()?'placeholder="'+_.escape(e)+'"':""},renderWrapClass:function(){var e="field-wrap "+this.type+"-wrap";return this.type!==this.parentType&&(e=e+" "+this.parentType+"-wrap"),void 0!==this.old_classname&&0<String(this.old_classname).trim().length&&(e+=" "+this.old_classname+"-wrap"),"undefined"!=typeof customWrapClass&&(e=customWrapClass(e)),e},renderClasses:function(){var e=this.classes;return this.error?e+=" nf-error":e=e.replace("nf-error",""),void 0!==this.element_class&&0<String(this.element_class).trim().length&&(e+=" "+this.element_class),void 0!==this.customClasses&&(e=this.customClasses(e)),e},maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},maybeDisabled:function(){return 1==this.disable_input?"disabled":""},maybeRequired:function(){return 1==this.required?'aria-required="true" required':""},maybeDisableAutocomplete:function(){if(1==this.disable_browser_autocomplete)return'autocomplete="off"';return'autocomplete="'+this.translateAutoCompletionType(this.type)+'"'},translateAutoCompletionType:function(e){switch(e){case"address":return"street-address";case"address2":return"address-line2";case"city":return"address-level2";case"email":return"email";case"firstname":return"given-name";case"lastname":return"family-name";case"zip":return"postal-code";case"phone":return"tel";default:return"on"}},maybeInputLimit:function(){return"characters"==this.input_limit_type&&""!=String(this.input_limit).trim()?'maxlength="'+this.input_limit+'"':""},getHelpText:function(){return void 0!==this.help_text?this.help_text:""},maybeRenderHelp:function(){var e=document.createElement("p");e.innerHTML=this.help_text;var t=!1;if((0!=String(jQuery(e).text()).trim().length||0<jQuery(e).find("img").length)&&(t=!0),void 0!==this.help_text&&t){var i=document.createElement("span");i.classList.add("fa","fa-info-circle","nf-help"),i.setAttribute("data-text",this.getHelpText()),i.setAttribute("tabindex","0"),i.setAttribute("aria-describedby","hidden-help-text-"+this.id);var n=document.createElement("span");return n.textContent=this.help_text.replace(/<\/?[^>]+(>|$)/g,"").trim(),n.id="hidden-help-text-"+this.id,n.classList.add("nf-sr-only"),n.setAttribute("role","tooltip"),i.appendChild(n),i.outerHTML}return""},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.setAttribute("aria-hidden","true"),n.setAttribute("id","nf-description-"+this.id),n.appendChild(i),n.outerHTML):"")},renderNumberDefault:function(){return this.clean?0===this.default||this.default?this.default:this.placeholder?"":this.value:this.value},renderCurrencyFormatting:function(t){var i=t.toString().replace(".","||").replace(/\B(?=(\d{3})+(?!\d))/g,nfi18n.thousands_sep).replace("||",nfi18n.decimal_point);return nfRadio.channel("app").request("get:form",e.model.get("formID")).get("settings").currency_symbol+i},maybeRenderTime:function(){return"time_only"==this.date_mode||"date_and_time"==this.date_mode}}},events:{"change .nf-element":"fieldChange","keyup .nf-element":"fieldKeyup","click .nf-element":"fieldClick","click .extra":"extraClick","change .extra":"extraChange","blur .nf-element":"fieldBlur"},fieldChange:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("nfAdmin").request("change:field",t,this.model)},fieldKeyup:function(e){var t=jQuery(e.currentTarget),i=e.keyCode;nfRadio.channel("field-"+this.model.get("id")).trigger("keyup:field",t,this.model,i),nfRadio.channel(this.model.get("type")).trigger("keyup:field",t,this.model,i),nfRadio.channel("fields").trigger("keyup:field",t,this.model,i)},fieldClick:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("click:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("click:field",t,this.model),nfRadio.channel("fields").trigger("click:field",t,this.model)},extraClick:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("click:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("click:extra",e,this.model),nfRadio.channel("fields").trigger("click:extra",e,this.model)},extraChange:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("change:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("change:extra",e,this.model),nfRadio.channel("fields").trigger("change:extra",e,this.model)},fieldBlur:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("blur:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("blur:field",t,this.model),nfRadio.channel("fields").trigger("blur:field",t,this.model)},onAttach:function(){nfRadio.channel(this.model.get("type")).trigger("attach:view",this)}})}),i("views/beforeField",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-before"})}),i("views/fieldErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-error",onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)}})}),i("views/fieldErrorCollection",["views/fieldErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e,initialize:function(e){this.fieldModel=e.fieldModel},onRender:function(){0==this.fieldModel.get("errors").models.length?(this.fieldModel.removeWrapperClass("nf-error"),this.fieldModel.removeWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-pass"),this.fieldModel.setInvalid(!1)):(this.fieldModel.removeWrapperClass("nf-pass"),this.fieldModel.addWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-error"),this.fieldModel.setInvalid(!0))}})}),i("views/inputLimit",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-input-limit",initialize:function(){this.listenTo(nfRadio.channel("field-"+this.model.get("id")),"keyup:field",this.updateCount),this.count=this.model.get("input_limit"),this.render()},updateCount:function(e,t){var i=jQuery(e).val(),n=String(i).trim().replace(/\s+/gi," ").split(" "),r=n.length,o=i.length;if("characters"==this.model.get("input_limit_type")||"char"==this.model.get("input_limit_type"))jQuery(e).attr("maxlength",this.model.get("input_limit")),this.count=this.model.get("input_limit")-o;else{this.count=this.model.get("input_limit")-r;var a=this.model.get("input_limit");r>a&&jQuery(e).val(n.slice(0,a).join(" "))}this.render()},templateHelpers:function(){var e=this;return{currentCount:function(){return e.count}}}})}),i("views/afterField",["views/fieldErrorCollection","views/inputLimit"],function(e,t){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-after",initialize:function(){this.model.on("change:errors",this.changeError,this)},onRender:function(){var i=jQuery(this.el).children(".nf-error-wrap");if(this.errorCollectionView=new e({el:i,collection:this.model.get("errors"),fieldModel:this.model}),0<this.model.get("errors").length&&this.errorCollectionView.render(),void 0!==this.model.get("input_limit")&&""!=String(this.model.get("input_limit")).trim()){var n=jQuery(this.el).children(".nf-input-limit");this.inputLimitView=new t({el:n,model:this.model}),n.attr("aria-live","polite"),n.attr("role","status"),n.attr("aria-relevant","additions"),n.attr("aria-atomic",!0)}},changeError:function(){this.errorCollectionView.render()}})}),i("views/fieldRepeaterFieldLayout",["views/fieldItem","views/beforeField","views/afterField"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model})))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("views/fieldRepeaterFieldCollection",["views/fieldRepeaterFieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("views/fieldRepeaterSetLayout",["views/fieldRepeaterFieldCollection"],function(e){return Marionette.LayoutView.extend({tagName:"fieldset",template:"#tmpl-nf-field-repeater-set",regions:{fields:".nf-repeater-fieldset"},onRender:function(){this.fields.show(new e({collection:this.model.get("fields")}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"}}},events:{"click .nf-remove-fieldset":"removeSet"},removeSet:function(){nfRadio.channel("field-repeater").trigger("remove:fieldset",this.model)}})}),i("views/fieldRepeaterSetCollection",["views/fieldRepeaterSetLayout"],function(e){return Marionette.CollectionView.extend({tagName:"div",childView:e})}),i("views/fieldRepeaterLayout",["views/fieldRepeaterSetCollection"],function(e){return Marionette.LayoutView.extend({tagName:"div",template:"#tmpl-nf-field-repeater",regions:{sets:".nf-repeater-fieldsets"},initialize:function(){this.collection=this.model.get("sets"),this.listenTo(nfRadio.channel("field-repeater"),"rerender:fieldsets",this.render)},onRender:function(){this.sets.show(new e({collection:this.collection}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.appendChild(i),n.outerHTML):"")}}},events:{"click .nf-add-fieldset":"addSet"},addSet:function(){nfRadio.channel("field-repeater").trigger("add:fieldset",this.model.id)},beforeSubmit:function(){this.collection.beforeSubmit(this.model.get("sets"))}})}),i("views/fieldLayout",["views/fieldItem","views/beforeField","views/afterField","views/fieldRepeaterLayout"],function(e,t,i,n){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&("repeater"==this.model.get("type")?this.field.show(new n({model:this.model})):(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model}))))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("controllers/loadViews",["views/fieldItem","views/fieldLayout"],function(e,t){return Marionette.Object.extend({initialize:function(){nfRadio.channel("views").reply("get:fieldItem",this.getFieldItem),nfRadio.channel("views").reply("get:fieldLayout",this.getFieldLayout)},getFieldItem:function(t){return e},getFieldLayout:function(){return t}})}),i("controllers/formErrors",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"add:error",this.addError),this.listenTo(nfRadio.channel("fields"),"remove:error",this.removeError),nfRadio.channel("form").reply("get:errors",this.getFormErrors)},addError:function(e,t,i){var n=nfRadio.channel("app").request("get:form",e.get("formID"));void 0===n.get("fieldErrors")[e.get("id")]&&(n.get("fieldErrors")[e.get("id")]={}),n.get("fieldErrors")[e.get("id")][t]=i,nfRadio.channel("form-"+e.get("formID")).request("add:error","field-errors",n.get("settings").formErrorsCorrectErrors)},removeError:function(e,t){var i=nfRadio.channel("app").request("get:form",e.get("formID"));i.get("fieldErrors")[e.get("id")]=_.omit(i.get("fieldErrors")[e.get("id")],t),0==_.size(i.get("fieldErrors")[e.get("id")])&&delete i.get("fieldErrors")[e.get("id")],0==_.size(i.get("fieldErrors"))&&nfRadio.channel("form-"+e.get("formID")).request("remove:error","field-errors")},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),i}})}),i("controllers/submit",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"init:model",this.registerSubmitHandler)},registerSubmitHandler:function(e){nfRadio.channel("form-"+e.get("id")).reply("submit",this.submit)},submit:function(e){nfRadio.channel("forms").trigger("before:submit",e),nfRadio.channel("form-"+e.get("id")).trigger("before:submit",e);var t=nfRadio.channel("forms").request("maybe:validate",e);if(!1!==t&&(_.each(e.get("fields").models,function(e){e.set("clean",!1)}),e.get("formContentData").validateFields()),0==nfRadio.channel("form-"+e.get("id")).request("maybe:submit",e))return nfRadio.channel("forms").trigger("submit:cancel",e),void nfRadio.channel("form-"+e.get("id")).trigger("submit:cancel",e);if(!1!==t){var i=_.filter(e.get("errors").models,function(e){return"invalid_email"!=e.get("id")&&"email_not_sent"!=e.get("id")});if(0!=_.size(i))return nfRadio.channel("forms").trigger("submit:failed",e),nfRadio.channel("form-"+e.get("id")).trigger("submit:failed",e),!1}nfRadio.channel("forms").trigger("after:submitValidation",e),nfRadio.channel("form-"+e.get("id")).trigger("after:submitValidation",e);var n=e.get("id"),r={};_.each(e.get("fields").models,function(e){var t={value:e.get("value"),id:e.get("id")};r[e.get("id")]=nfRadio.channel(e.get("type")).request("get:submitData",t,e)||t});var o=e.get("extra"),a=e.get("settings");delete a.formContentData;var l=JSON.stringify({id:n,fields:r,settings:a,extra:o}),s={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nonce_ts:nfFrontEnd.nonce_ts,formData:l};jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:s,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n),jQuery(document).trigger("nfFormSubmitResponse",{response:r,id:e.get("id")})}catch(e){console.log(e),console.log("Parse Error"),console.log(e)}},error:function(t,i,n){console.log("ERRORS: "+n),console.log(t);try{var r=jQuery.parseJSON(t.responseText);nfRadio.channel("forms").trigger("submit:response",r,i,t,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,t)}catch(i){console.log("Parse Error: "+t.responseText),nfRadio.channel("form-"+e.get("id")).request("add:error","parse-response-ERROR",n)}}})}})}),i("views/fieldCollection",["views/fieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("controllers/defaultFilters",["views/fieldCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"before:filterData",this.registerDefaultDataFilter)},registerDefaultDataFilter:function(e){nfRadio.channel("formContent").request("add:loadFilter",this.defaultFormContentLoad,10,this),nfRadio.channel("formContent").request("add:viewFilter",this.defaultFormContentView,10,this)},defaultFormContentLoad:function(e,i,n){var r=i.get("fields"),o=nfRadio.channel("formContent").request("get:loadFilters");if(1==_.without(o,void 0).length||void 0===e||!0==e instanceof Backbone.Collection)return i.get("fields");var a=_.map(e,function(e){return i.get("fields").findWhere({key:e})},this),l=new t(a);return r.on("reset",function(e){var t=[];l.each(function(i){"submit"!=i.get("type")?t.push(e.findWhere({key:i.get("key")})):t.push(i)}),l.options={formModel:i},l.reset(t)}),l},defaultFormContentView:function(){return e}})}),i("controllers/uniqueFieldError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.removeError),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.removeError),this.listenTo(nfRadio.channel("fields"),"blur:field",this.removeError)},removeError:function(e,t){t=t||e,nfRadio.channel("fields").request("remove:error",t.get("id"),"unique_field")}})});let n=[];i("models/fieldRepeaterSetModel",[],function(){return Backbone.Model.extend({initialize:function(e,t){this.repeaterFieldModel=t.repeaterFieldModel,this.set("label",this.repeaterFieldModel.get("label")),e&&t&&this.initAllRepeaterFieldsModels(e,t),nfRadio.channel("field-repeater").reply("get:repeaterFields",this.getRepeaterFields,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldById",this.getRepeaterFieldById,this),nfRadio.channel("field-repeater").reply("get:repeaterModels",this.getAllRepeaterFieldsModels,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsetsByForm",this.getAllFieldsetsByForm,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsModelsArrayByForm",this.getAllFieldsModelsArrayByForm,this),this.listenTo(nfRadio.channel("field-repeater"),"set:repeaterModels",this.setAllRepeaterFieldsModels),this.listenTo(nfRadio.channel("field-repeater"),"set:value",this.setAllRepeatersValues)},setAllRepeaterFieldsModels:function(){this.set("repeaterFieldsetsModels",n),this.allRepeatersFieldsetsModels=n},initAllRepeaterFieldsModels:function(e,t){const i=t.repeaterFieldModel.get("formID"),r=t.repeaterFieldModel.get("id"),o=e.fields.models;let a=n.find(e=>e.id===r&&e.form===i);a?a.fields=a.fields.concat(o):n.push({form:i,id:r,fields:o}),this.setAllRepeaterFieldsModels()},getAllRepeaterFieldsModels:function(){return n},getAllFieldsetsByForm:function(e){const t=this.getAllRepeaterFieldsModels().filter(t=>t.form===e);return t},getAllFieldsModelsArrayByForm:function(e){const t=this.getAllFieldsetsByForm(e);let i=[];return t.map(e=>{i=i.concat(e.fields)}),i},getRepeaterFields:function(e){const t=this.getAllRepeaterFieldsModels();let i=t.find(t=>String(t.id)===String(e));return void 0===i&&(i=this.reverseResearchFieldsetModel(e,t)),i},reverseResearchFieldsetModel:function(e,t){let i;return _.each(t,function(t){_.each(t.fields,function(n){String(n.id).startsWith(e)&&(i=t)})}),i},getRepeaterFieldById:function(e){const t=String(e).split(".")[0],i=this.getRepeaterFields(t);if(void 0===i)return;return i.fields.find(t=>t.id===e)},setAllRepeatersValues:function(){const e=this.getAllRepeaterFieldsModels();e.length>0&&_.each(e,function(e){let t=e.fields,i=nfRadio.channel("fields").request("get:field",e.id);if(t.length>0){let e={};_.each(t,function(t){let i=t.get("value"),n=t.get("id");if(n.split("_").length>2){let t=n.split("_");t[1]=t[1].split(".")[1];let i=t[0]+"."+t[1]+"_"+t[2];delete e[n],n=i}e[n]={value:i,id:n},"date"!==t.get("type")||"string"!=typeof i||"date_and_time"!==t.get("date_mode")&&"time_only"!==t.get("date_mode")||(e[n].value={date:i,hour:t.attributes.selected_hour,minute:t.attributes.selected_minute,ampm:t.attributes.selected_ampm}),"file_upload"===t.get("type")&&t.get("value")&&(e[n].files=t.attributes.files)}),i.set("isUpdated",!1),nfRadio.channel("nfAdmin").request("update:field",i,e)}})}})}),i("models/fieldRepeaterSetCollection",["models/fieldRepeaterSetModel","models/fieldCollection"],function(e,t){return Backbone.Collection.extend({model:e,initialize:function(e,t){this.options=t,this.listenTo(nfRadio.channel("field-repeater"),"sort:fieldsets",this.sortIDs),this.listenTo(nfRadio.channel("field-repeater"),"remove:fieldset",this.removeSet),this.listenTo(nfRadio.channel("field-repeater"),"add:fieldset",this.addSet),nfRadio.channel("field-repeater").reply("get:fieldsets",this.getFieldSets,this)},addSet:function(e=!1){let i;if(e){const n=this.options.repeaterFieldModel.id===e&&this.options.repeaterFieldModel;if(i=n,n){let e=new t(this.options.templateFields,{formModel:this.options.formModel,repeaterFieldModel:n});this.add({fields:e},{repeaterFieldModel:n})}}this.sortIDs(),nfRadio.channel("field-repeater").trigger("fieldset:added",i)},removeSet:function(e){this.removeRequiredFieldsErrors(e);const t=e.repeaterFieldModel.get("formID"),i=e.repeaterFieldModel.get("id"),r=n.find(e=>e.id===i&&e.form===t);if(r){let t=[];_.each(r.fields,(i,n)=>{void 0!==i&&_.each(e.get("fields").models,n=>{const r=void 0!==i.id?i.id:i.get("id");n.id===r&&(delete e.repeaterFieldModel.get("value")[n.id],t.push(r))})}),r.fields=_.reject(r.fields,e=>void 0===e||!!t.includes(e.id)),nfRadio.channel("field-repeater").trigger("set:repeaterModels")}this.remove(e),e.destroy(),this.sortIDs(),nfRadio.channel("field-repeater").trigger("set:value")},removeRequiredFieldsErrors:function(e){let t=e.get("fields");_.each(t.models,function(e){nfRadio.channel("fields").request("remove:error",e.get("id"),"required-error")})},getFieldsets:function(){return this.models},checkTimeField:function(e){const t=e.get("id"),i=document.getElementById("hour-select-"+t),n=document.getElementById("minute-select-"+t),r=0===e.attributes.hours_24?"12":"00";if(!i||!n)return;n.value=void 0!==e.attributes.selected_minute?e.attributes.selected_minute:"00",i.value=void 0!==e.attributes.selected_hour?e.attributes.selected_hour:r;const o=document.getElementById("nf-field-"+t+"-wrap").querySelector("#ampm-select");o&&(o.value=void 0!==e.attributes.selected_ampm?e.attributes.selected_ampm:"am")},sortIDs:function(){const e=this.getFieldsets(),t=[];_.each(e,function(e,i){let n=e.get("fields");e.set("index",i+1),_.each(n.models,function(e){const n=String(e.id).split("_")[0],r=String(n).split(".").length>1&&String(n).split(".").pop();if(!r)return;const o=e.collection.options.repeaterFieldModel.id+"."+r+"_"+i;e.set("id",o),"date"!==e.get("type")||"date_and_time"!==e.get("date_mode")&&"time_only"!==e.get("date_mode")||t.push(e)})}),nfRadio.channel("field-repeater").trigger("rerender:fieldsets"),t.forEach(e=>{this.checkTimeField(e)})}})}),i("controllers/fieldRepeater",["models/fieldRepeaterSetCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("repeater"),"init:model",this.initRepeater)},initRepeater:function(i){if(void 0===i.collection.options.formModel)return!1;let n=new t(i.get("fields"),{formModel:i.collection.options.formModel,repeaterFieldModel:i});i.set("sets",new e([{fields:n}],{templateFields:i.get("fields"),formModel:i.collection.options.formModel,repeaterFieldModel:i})),nfRadio.channel("field-repeater").trigger("sort:fieldsets")}})}),i("controllers/actionGA",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSendGaEvent)},actionSendGaEvent:function(e){void 0!==e.data.actions&&void 0!==e.data.actions.googleanalytics&&e.data.actions.googleanalytics.forEach(t=>{const i=t.event_name;if(void 0!==i)if(void 0!==t.method_type&&"ga4"===t.method_type)if("function"==typeof gtag){const t={event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};gtag("event",i,t)}else"object"==typeof dataLayer?console.warn("gtag isn't defined. But GTM was detected, did you mean to use GTM in the action settings?"):console.warn("gtag isn't defined. Please make sure you have GA4 installed on your site.");else if(void 0!==t.method_type&&"gtm"===t.method_type)if("object"==typeof dataLayer){const t={event:i,event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};dataLayer.push(t)}else"function"==typeof gtag?console.warn("GTM isn't defined. But GA4 was detected, did you mean to use GA4 in the action settings?"):console.warn("GTM isn't defined. Please make sure you have GTM installed on your site.");else console.warn("GTM and gtag aren't defined. Please make sure you have GTM or GA4 installed on your site.");else console.warn("No event name defined in the GA4 action settings. Please define an event name.")})}})}),i("controllers/loadControllers",["controllers/formData","controllers/fieldError","controllers/changeField","controllers/changeEmail","controllers/changeDate","controllers/fieldCheckbox","controllers/fieldCheckboxList","controllers/fieldImageList","controllers/fieldRadio","controllers/fieldNumber","controllers/mirrorField","controllers/confirmField","controllers/updateFieldModel","controllers/submitButton","controllers/submitDebug","controllers/getFormErrors","controllers/validateRequired","controllers/submitError","controllers/actionRedirect","controllers/actionSuccess","controllers/fieldSelect","controllers/coreSubmitResponse","controllers/fieldProduct","controllers/fieldTotal","controllers/fieldQuantity","controllers/calculations","controllers/dateBackwardsCompat","controllers/fieldDate","controllers/fieldRecaptcha","controllers/fieldRecaptchaV3","controllers/fieldHTML","controllers/helpText","controllers/fieldTextbox","controllers/fieldTextareaRTE","controllers/fieldStarRating","controllers/fieldTerms","controllers/formContentFilters","controllers/loadViews","controllers/formErrors","controllers/submit","controllers/defaultFilters","controllers/uniqueFieldError","controllers/fieldRepeater","controllers/actionGA"],function(e,t,i,n,r,o,a,l,s,d,c,f,u,h,m,g,p,v,y,b,R,_,w,F,x,M,C,k,T,E,j,D,q,V,I,O,Q,S,L,A,N,z,B,Y){return Marionette.Object.extend({initialize:function(){new S,new L,new A,new o,new a,new l,new s,new d,new R,new w,new F,new x,new T,new E,new j,new D,new q,new V,new I,new O,new Q,new z,new B,new t,new i,new n,new r,new c,new f,new u,new h,new m,new g,new p,new v,new y,new b,new Y,new _,new M,new N,new C,new k,new e}})}),i("views/beforeForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-form"})}),i("views/formErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-error",onRender:function(){}})}),i("views/formErrorCollection",["views/formErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e})}),i("views/honeyPot",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-hp",events:{"keyup .nf-field-hp":"maybeError","change .nf-field-hp":"maybeError"},maybeError:function(e){if(0==jQuery(e.target).val().length)nfRadio.channel("form-"+this.model.get("id")).request("remove:error","honeyPot");else{var t=nfRadio.channel("app").request("get:form",this.model.get("id"));nfRadio.channel("form-"+this.model.get("id")).request("add:error","honeyPot",t.get("settings").honeypotHoneypotError)}}})}),i("views/afterFormContent",["views/formErrorCollection","views/honeyPot"],function(e,t){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-after-fields",regions:{errors:".nf-form-errors",hp:".nf-form-hp"},onShow:function(){this.errors.show(new e({collection:this.model.get("errors")})),this.hp.show(new t({model:this.model}))}})}),i("views/beforeFormContent",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-fields",templateHelpers:function(){return{renderFieldsMarkedRequired:function(){return this.fields.filter({required:1}).length?this.fieldsMarkedRequired:""}}}})}),i("views/formLayout",["views/afterFormContent","views/beforeFormContent","models/fieldCollection"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-form-layout",regions:{beforeFormContent:".nf-before-form-content",formContent:".nf-form-content",afterFormContent:".nf-after-form-content"},initialize:function(){nfRadio.channel("form-"+this.model.get("id")).reply("get:el",this.getEl,this),this.listenTo(this.model,"hide",this.hide)},onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)},onShow:function(){this.beforeFormContent.show(new t({model:this.model}));var i=this.model.get("formContentData"),n=nfRadio.channel("formContent").request("get:viewFilters"),r=_.without(n,void 0),o=_.first(r);formContentView=o();var a={data:i,formModel:this.model};!1!=i instanceof Backbone.Collection?a.collection=i:!1!=i instanceof Backbone.Model&&(a.model=i),this.formContent.show(new formContentView(a)),this.afterFormContent.show(new e({model:this.model}))},getEl:function(){return this.el},templateHelpers:function(){return{renderClasses:function(){return""}}},hide:function(){jQuery(this.el).hide()}})}),i("views/afterForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-after-form"})}),i("views/mainLayout",["views/beforeForm","views/formLayout","views/afterForm"],function(e,t,i){return Marionette.LayoutView.extend({template:"#tmpl-nf-layout",regions:{responseMsg:".nf-response-msg",beforeForm:".nf-before-form",formLayout:".nf-form-layout",afterForm:".nf-after-form"},initialize:function(){this.$el=jQuery("#nf-form-"+this.model.id+"-cont"),this.el="#nf-form-"+this.model.id+"-cont",this.render(),this.beforeForm.show(new e({model:this.model})),this.formLayout.show(new t({model:this.model,fieldCollection:this.options.fieldCollection})),this.afterForm.show(new i({model:this.model})),this.listenTo(this.model,"hide",this.hide)},hide:function(){jQuery(this.el).find(".nf-form-title").hide()}})});var r=function(e,t,i){void 0!==e&&0<e.length?this.locale=e.split("_").join("-"):this.locale="en-US",this.thousands_sep=t||",",this.decimal_sep=i||".",this.uniqueElememts=function(e,t,i){return i.indexOf(e)===t},this.numberDecoder=function(e){var t="",i=!1;"-"===(e=e.toString()).charAt(0)&&(i=!0,e=e.replace("-",""));var n=(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").filter(function(e){return!e.match(/[0-9]/)}),r=n.filter(this.uniqueElememts);switch(r.length){case 0:t=e;break;case 1:var o="";if(1==n.length)separator=n.pop(),o=3==e.split(separator).pop().length&&separator==this.thousands_sep?"":".";else separator=r.pop();t=e.split(separator).join(o);break;case 2:var a,l=r[0];a="."===l?new RegExp("[.]","g"):new RegExp(l,"g"),t=e.replace(a,"");var s,d=r[1];s="."===d?new RegExp("[.]","g"):new RegExp(d,"g"),t=t.replace(s,".");break;default:return"NaN"}return i&&(t="-"+t),this.debug("Number Decoder "+e+" -> "+t),t},this.numberEncoder=function(e,t){return e=this.numberDecoder(e),Intl.NumberFormat(this.locale,{minimumFractionDigits:t,maximumFractionDigits:t}).format(e)},this.debug=function(e){window.nfLocaleConverterDebug&&console.log(e)}};i("../nfLocaleConverter",function(){}),void 0!==nfInlineVars.nfForms&&(window.nfForms=nfInlineVars.nfForms),function(e){var t=e.fn.val;e.fn.val=function(){var i;arguments.length>0&&(i=t.apply(this,[]));var n=t.apply(this,arguments);return arguments.length>0&&i!=t.apply(this,[])&&e(this).hasClass("nf-element")&&e(this).change(),n}}(jQuery),document.addEventListener("DOMContentLoaded",function(){t(["models/formCollection","models/formModel","models/fieldCollection","controllers/loadControllers","views/mainLayout","../nfLocaleConverter"],function(e,t,i,n,o){if("undefined"!=typeof nfForms){var a=Marionette.Application.extend({forms:{},initialize:function(e){var t=this;Marionette.Renderer.render=function(e,i){return(e=t.template(e))(i)},this.urlParameters=_.object(_.compact(_.map(location.search.slice(1).split("&"),function(e){if(e)return e.split("=")}))),void 0!==this.urlParameters.nf_resume&&this.listenTo(nfRadio.channel("form-"+this.urlParameters.nf_resume),"loaded",this.restart),nfRadio.channel("app").reply("locale:decodeNumber",this.decodeNumber),nfRadio.channel("app").reply("locale:encodeNumber",this.encodeNumber);new n;nfRadio.channel("app").trigger("after:loadControllers"),nfRadio.channel("app").reply("get:template",this.template)},onStart:function(){var e=nfRadio.channel("app").request("get:forms");_.each(e.models,function(e,t){var i=new o({model:e,fieldCollection:e.get("fields")});nfRadio.channel("form").trigger("render:view",i),jQuery(document).trigger("nfFormReady",i)})},restart:function(e){if(void 0!==this.urlParameters.nf_resume){var t={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nf_resume:this.urlParameters};nfRadio.channel("form-"+e.get("id")).trigger("disable:submit"),nfRadio.channel("form-"+e.get("id")).trigger("processingLabel"),this.listenTo(nfRadio.channel("form"),"render:view",function(){jQuery("#nf-form-"+e.get("id")+"-cont .nf-field-container:not(.submit-container)").hide()}),jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:t,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n)}catch(e){console.log("Parse Error")}},error:function(e,t,i){console.log("ERRORS: "+t),nfRadio.channel("forms").trigger("submit:response","error",t,e,i)}})}},template:function(e){return e.startsWith("script")||(e="script"+e),_.template(jQuery(e).html(),{evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"})},encodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e)},decodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberDecoder(e)}});(new a).start()}else jQuery(".nf-form-cont").empty()})}),i("main",function(){})}();1 !function(){var e,t,i;!function(n){var r,o,a,l,s={},d={},c={},f={},u=Object.prototype.hasOwnProperty,h=[].slice,m=/\.js$/;function g(e,t){return u.call(e,t)}function p(e,t){var i,n,r,o,a,l,s,d,f,u,h,g=t&&t.split("/"),p=c.map,v=p&&p["*"]||{};if(e){for(a=(e=e.split("/")).length-1,c.nodeIdCompat&&m.test(e[a])&&(e[a]=e[a].replace(m,"")),"."===e[0].charAt(0)&&g&&(e=g.slice(0,g.length-1).concat(e)),f=0;f<e.length;f++)if("."===(h=e[f]))e.splice(f,1),f-=1;else if(".."===h){if(0===f||1===f&&".."===e[2]||".."===e[f-1])continue;f>0&&(e.splice(f-1,2),f-=2)}e=e.join("/")}if((g||v)&&p){for(f=(i=e.split("/")).length;f>0;f-=1){if(n=i.slice(0,f).join("/"),g)for(u=g.length;u>0;u-=1)if((r=p[g.slice(0,u).join("/")])&&(r=r[n])){o=r,l=f;break}if(o)break;!s&&v&&v[n]&&(s=v[n],d=f)}!o&&s&&(o=s,l=d),o&&(i.splice(0,l,o),e=i.join("/"))}return e}function v(e,t){return function(){var i=h.call(arguments,0);return"string"!=typeof i[0]&&1===i.length&&i.push(null),o.apply(n,i.concat([e,t]))}}function y(e){return function(t){s[e]=t}}function b(e){if(g(d,e)){var t=d[e];delete d[e],f[e]=!0,r.apply(n,t)}if(!g(s,e)&&!g(f,e))throw new Error("No "+e);return s[e]}function R(e){var t,i=e?e.indexOf("!"):-1;return i>-1&&(t=e.substring(0,i),e=e.substring(i+1,e.length)),[t,e]}function _(e){return e?R(e):[]}function w(e){return function(){return c&&c.config&&c.config[e]||{}}}a=function(e,t){var i,n,r=R(e),o=r[0],a=t[1];return e=r[1],o&&(i=b(o=p(o,a))),o?e=i&&i.normalize?i.normalize(e,(n=a,function(e){return p(e,n)})):p(e,a):(o=(r=R(e=p(e,a)))[0],e=r[1],o&&(i=b(o))),{f:o?o+"!"+e:e,n:e,pr:o,p:i}},l={require:function(e){return v(e)},exports:function(e){var t=s[e];return void 0!==t?t:s[e]={}},module:function(e){return{id:e,uri:"",exports:s[e],config:w(e)}}},r=function(e,t,i,r){var o,c,u,h,m,p,R,w=[],F=typeof i;if(p=_(r=r||e),"undefined"===F||"function"===F){for(t=!t.length&&i.length?["require","exports","module"]:t,m=0;m<t.length;m+=1)if("require"===(c=(h=a(t[m],p)).f))w[m]=l.require(e);else if("exports"===c)w[m]=l.exports(e),R=!0;else if("module"===c)o=w[m]=l.module(e);else if(g(s,c)||g(d,c)||g(f,c))w[m]=b(c);else{if(!h.p)throw new Error(e+" missing "+c);h.p.load(h.n,v(r,!0),y(c),{}),w[m]=s[c]}u=i?i.apply(s[e],w):void 0,e&&(o&&o.exports!==n&&o.exports!==s[e]?s[e]=o.exports:u===n&&R||(s[e]=u))}else e&&(s[e]=i)},e=t=o=function(e,t,i,s,d){if("string"==typeof e)return l[e]?l[e](t):b(a(e,_(t)).f);if(!e.splice){if((c=e).deps&&o(c.deps,c.callback),!t)return;t.splice?(e=t,t=i,i=null):e=n}return t=t||function(){},"function"==typeof i&&(i=s,s=d),s?r(n,e,t,i):setTimeout(function(){r(n,e,t,i)},4),o},o.config=function(e){return o(e)},e._defined=s,(i=function(e,t,i){if("string"!=typeof e)throw new Error("See almond README: incorrect module build, no module name");t.splice||(i=t,t=[]),g(s,e)||g(d,e)||(d[e]=[e,t,i])}).amd={jQuery:!0}}(),i("../../../node_modules/almond/almond",function(){}),i("models/fieldErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/fieldErrorCollection",["models/fieldErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/fieldModel",["models/fieldErrorCollection"],function(e){return Backbone.Model.extend({defaults:{placeholder:"",value:"",label_pos:"",classes:"ninja-forms-field",reRender:!1,mirror_field:!1,confirm_field:!1,clean:!0,disabled:"",visible:!0,invalid:!1},initialize:function(){var t=this.get("type");this.set("formID",this.collection.options.formModel.get("id")),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"reset",this.resetModel),this.bind("change",this.changeModel,this),this.bind("change:value",this.changeValue,this),this.set("errors",new e),"listimage"===t&&(this.get=this.listimageGet,this.set=this.listimageSet),nfRadio.channel("fields").trigger("init:model",this),nfRadio.channel(this.get("type")).trigger("init:model",this),nfRadio.channel("fields-"+this.get("type")).trigger("init:model",this),void 0!==this.get("parentType")&&nfRadio.channel(this.get("parentType")).trigger("init:model",this),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"loaded",this.formLoaded),this.listenTo(nfRadio.channel("form-"+this.get("formID")),"before:submit",this.beforeSubmit)},listimageGet:function(e){return"options"===e&&(e="image_options"),Backbone.Model.prototype.get.call(this,e)},listimageSet:function(e,t){return"options"===e&&(e="image_options"),Backbone.Model.prototype.set.call(this,e,t)},changeModel:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:model",this),nfRadio.channel(this.get("type")).trigger("change:model",this),nfRadio.channel("fields").trigger("change:model",this)},changeValue:function(){nfRadio.channel("field-"+this.get("id")).trigger("change:modelValue",this),nfRadio.channel(this.get("type")).trigger("change:modelValue",this),nfRadio.channel("fields").trigger("change:modelValue",this)},addWrapperClass:function(e){this.set("addWrapperClass",e)},removeWrapperClass:function(e){this.set("removeWrapperClass",e)},setInvalid:function(e){this.set("invalid",e)},formLoaded:function(){nfRadio.channel("fields").trigger("formLoaded",this),nfRadio.channel("fields-"+this.get("type")).trigger("formLoaded",this)},beforeSubmit:function(e){nfRadio.channel(this.get("type")).trigger("before:submit",this),nfRadio.channel("fields").trigger("before:submit",this)},getValue:function(){return this.get("value")}})}),i("models/fieldCollection",["models/fieldModel"],function(e){var t=Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,this.on("reset",function(e){nfRadio.channel("fields").trigger("reset:collection",e)},this),nfRadio.channel("fields").reply("get:firstFieldByOrder",this.getFirstFieldByOrder)},validateFields:function(){_.each(this.models,function(e){if("repeater"===e.get("type")){const t=nfRadio.channel("field-repeater").request("get:repeaterFieldsModelsArrayByForm",e.get("formID"));_.each(t,function(e){e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)})}else e.set("clean",!1),nfRadio.channel("submit").trigger("validate:field",e)},this);var e=nfRadio.channel("form-"+this.models[0].get("formID")).request("get:form");_.size(e.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(e.get("fieldErrors")))},showFields:function(){this.invoke("set",{visible:!0}),this.invoke(function(){this.trigger("change:value",this)})},hideFields:function(){this.invoke("set",{visible:!1}),this.invoke(function(){this.trigger("change:value",this)})},getFirstFieldByOrder:function(e){let t=0;return _.each(e,function(e){const i=nfRadio.channel("fields").request("get:field",e).get("order");t=0===t||i<t?e:t}),t}});return t}),i("models/formErrorModel",[],function(){return Backbone.Model.extend({})}),i("models/formErrorCollection",["models/formErrorModel"],function(e){return Backbone.Collection.extend({model:e})}),i("models/formModel",["models/fieldCollection","models/formErrorCollection"],function(e,t){return Backbone.Model.extend({defaults:{beforeForm:"",afterForm:"",beforeFields:"",afterFields:"",wrapper_class:"",element_class:"",hp:"",fieldErrors:{},extra:{}},initialize:function(){_.each(this.get("settings"),function(e,t){this.set(t,e)},this),this.set("loadedFields",this.get("fields")),this.set("fields",new e(this.get("fields"),{formModel:this})),this.set("errors",new t),nfRadio.channel("form").trigger("before:filterData",this);var i=this.get("formContentData");i||(i=this.get("fieldContentsData"));var n=nfRadio.channel("formContent").request("get:loadFilters"),r=_.without(n,void 0);i=_.first(r)(i,this,this),this.set("formContentData",i),nfRadio.channel("forms").trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).trigger("init:model",this),nfRadio.channel("form-"+this.get("id")).reply("get:fieldByKey",this.getFieldByKey,this),nfRadio.channel("form-"+this.get("id")).reply("add:error",this.addError,this),nfRadio.channel("form-"+this.get("id")).reply("remove:error",this.removeError,this),nfRadio.channel("form-"+this.get("id")).reply("get:extra",this.getExtra,this),nfRadio.channel("form-"+this.get("id")).reply("add:extra",this.addExtra,this),nfRadio.channel("form-"+this.get("id")).reply("remove:extra",this.removeExtra,this),nfRadio.channel("form-"+this.get("id")).reply("get:form",this.getForm,this),nfRadio.channel("form").trigger("loaded",this),nfRadio.channel("form").trigger("after:loaded",this),nfRadio.channel("form-"+this.get("id")).trigger("loaded",this)},getFieldByKey:function(e){return this.get("fields").findWhere({key:e})},addError:function(e,t){this.get("errors").add({id:e,msg:t}),nfRadio.channel("form-"+this.get("id")).trigger("add:error",this,e,t)},removeError:function(e){var t=this.get("errors"),i=t.get(e);t.remove(i),nfRadio.channel("form-"+this.get("id")).trigger("remove:error",this,e)},getExtra:function(e){var t=this.get("extra");return void 0===e?t:t[e]},addExtra:function(e,t){this.get("extra")[e]=t,nfRadio.channel("form-"+this.get("id")).trigger("add:extra",this,e,t)},removeExtra:function(e){delete this.get("extra")[e],nfRadio.channel("form-"+this.get("id")).trigger("remove:extra",this,e)},getForm:function(){return this}})}),i("models/formCollection",["models/formModel"],function(e){return Backbone.Collection.extend({model:e})}),i("controllers/formData",["models/formModel","models/formCollection","models/fieldCollection","models/formErrorCollection"],function(e,t,i,n){return Marionette.Object.extend({initialize:function(){this.collection=new t(nfForms),nfRadio.channel("forms").trigger("loaded",this.collection),nfRadio.channel("app").trigger("forms:loaded",this.collection),nfRadio.channel("app").reply("get:form",this.getForm,this),nfRadio.channel("app").reply("get:forms",this.getForms,this),nfRadio.channel("fields").reply("get:field",this.getField,this)},getForm:function(e){return this.collection.get(e)},getForms:function(){return this.collection},getField:function(e){var t=!1;return _.each(this.collection.models,function(i){t||(t=i.get("fields").get(e))}),void 0===t&&-1!==String(e).indexOf(".")&&(t=nfRadio.channel("field-repeater").request("get:repeaterFieldById",e)),t}})}),i("controllers/fieldError",["models/fieldErrorModel"],function(e){return Marionette.Object.extend({initialize:function(){nfRadio.channel("fields").reply("add:error",this.addError),nfRadio.channel("fields").reply("remove:error",this.removeError),nfRadio.channel("fields").reply("get:error",this.getError)},addError:function(e,t,i){var n=nfRadio.channel("fields").request("get:field",e);if(void 0!==n){var r=n.get("errors");r.add({id:t,msg:i}),n.set("errors",r),n.trigger("change:errors",n),n.set("clean",!1),nfRadio.channel("fields").trigger("add:error",n,t,i)}},removeError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e);if(void 0!==i){var n=i.get("errors"),r=n.get(t);void 0!==r&&(n.remove(r),i.set("errors",n),i.trigger("change:errors",i),nfRadio.channel("fields").trigger("remove:error",i,t))}},getError:function(e,t){var i=nfRadio.channel("fields").request("get:field",e).get("errors").get(t);return"undefined"!=i&&i}})}),i("controllers/changeField",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("change:field",this.changeField),this.listenTo(nfRadio.channel("fields"),"blur:field",this.blurField)},changeField:function(e,t){var i=nfRadio.channel(t.get("type")).request("before:updateField",e,t);i=void 0!==(i=void 0!==i?i:nfRadio.channel(t.get("parentType")).request("before:updateField",e,t))?i:jQuery(e).val(),t.set("isUpdated",!1),t.set("clean",!1),nfRadio.channel("field-"+t.get("id")).trigger("change:field",e,t),nfRadio.channel(t.get("type")).trigger("change:field",e,t),nfRadio.channel("fields").trigger("change:field",e,t),nfRadio.channel("nfAdmin").request("update:field",t,i),t.get("repeaterField")&&nfRadio.channel("field-repeater").trigger("set:value")},blurField:function(e,t){t.set("clean",!1)}})}),i("controllers/changeEmail",[],function(){var e=nfRadio.channel("email"),t=/^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,i="invalid-email";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.emailKeyup),this.listenTo(e,"blur:field",this.onBlurField)},onChangeModelValue:function(e){var t=e.get("value"),i=e.get("id");this.emailChange(t,i)},onBlurField:function(e,t){var i=jQuery(e).val(),n=t.get("id");this.emailChange(i,n)},emailChange:function(e,n){if(0<e.length)if(t.test(e))nfRadio.channel("fields").request("remove:error",n,i);else{var r=nfRadio.channel("fields").request("get:field",n),o=nfRadio.channel("app").request("get:form",r.get("formID"));nfRadio.channel("fields").request("add:error",n,i,o.get("settings").changeEmailErrorMsg)}else nfRadio.channel("fields").request("remove:error",n,i)},emailKeyup:function(e,n,r){if(9==r)return!1;var o=jQuery(e).val(),a=n.get("id");if(0==o.length)nfRadio.channel("fields").request("remove:error",a,i);else if(t.test(o)||n.get("clean"))t.test(o)&&(nfRadio.channel("fields").request("remove:error",a,i),n.addWrapperClass("nf-pass"),n.set("clean",!1));else{var l=nfRadio.channel("fields").request("get:field",a),s=nfRadio.channel("app").request("get:form",l.get("formID"));nfRadio.channel("fields").request("add:error",a,i,s.get("settings").changeEmailErrorMsg),n.removeWrapperClass("nf-pass")}}})}),i("controllers/changeDate",[],function(){var e=nfRadio.channel("date"),t="invalid-date";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"change:modelValue",this.onChangeModelValue),this.listenTo(e,"keyup:field",this.dateKeyup),this.listenTo(e,"blur:field",this.onBlurField),this.listenTo(e,"change:extra",this.changeHoursMinutes,this)},onChangeModelValue:function(e){var t=moment.locale();moment.locale("ninja-forms"),this.dateChange(e),moment.locale(t)},onBlurField:function(e,t){var i=moment.locale();moment.locale("ninja-forms"),this.dateChange(t),moment.locale(i)},dateChange:function(e){var i=e.get("id"),n=e.get("value"),r=e.get("date_format");if("time_only"==e.get("date_mode"))return!1;if(0<n.length)if(this.isDateValid(n,r,i))nfRadio.channel("fields").request("remove:error",i,t);else{var o=nfRadio.channel("fields").request("get:field",i),a=nfRadio.channel("app").request("get:form",o.get("formID"));nfRadio.channel("fields").request("add:error",i,t,a.get("settings").changeDateErrorMsg)}else nfRadio.channel("fields").request("remove:error",i,t)},dateKeyup:function(e,i,n){if(9==n)return!1;var r=jQuery(e).val(),o=i.get("id"),a=i.get("date_format"),l=moment.locale();if(moment.locale("ninja-forms"),0==r.length)nfRadio.channel("fields").request("remove:error",o,t);else if(this.isDateValid(r,a,o)||i.get("clean"))this.isDateValid(r,a,o)&&(nfRadio.channel("fields").request("remove:error",o,t),i.addWrapperClass("nf-pass"),i.set("clean",!1));else{var s=nfRadio.channel("fields").request("get:field",o),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",o,t,d.get("settings").changeDateErrorMsg),i.removeWrapperClass("nf-pass")}moment.locale(l)},changeHoursMinutes:function(e,t){let i=jQuery(e.target).closest(".nf-field-element"),n=jQuery(i).find(".hour").val(),r=jQuery(i).find(".minute").val(),o=jQuery(i).find(".ampm").val();if(t.set("selected_hour",n),t.set("selected_minute",r),t.set("selected_ampm",o),"time_only"===t.get("date_mode")){const e=void 0!==o?n+":"+r+" "+o:n+":"+r;t.set("value",e)}const a=t.get("id");"string"==typeof a&&-1!==a.search(".")&&nfRadio.channel("field-repeater").trigger("set:value")},isDateValid:function(e,t,i){if(null===document.querySelector("[name='nf-field-"+i+"']"))return;const n=document.querySelector("[name='nf-field-"+i+"']")._flatpickr.parseDate(e,t);if(!n)return!1;const r=n.getTime();if(isNaN(r))return!1;const o=new Date(r);return document.querySelector("[name='nf-field-"+i+"']")._flatpickr.formatDate(o,t)===e}})}),i("controllers/fieldCheckbox",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("checkbox"),"init:model",this.registerRenderClasses),nfRadio.channel("checkbox").reply("validate:required",this.validateRequired),nfRadio.channel("checkbox").reply("validate:modelData",this.validateModelData),nfRadio.channel("checkbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("checkbox").reply("get:calcValue",this.getCalcValue,this)},beforeUpdateField:function(e,t){if(jQuery(e).prop("checked")){var i=1;jQuery(e).addClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}else{i=0;jQuery(e).removeClass("nf-checked"),jQuery(e).closest(".field-wrap").find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label")}return i},validateRequired:function(e,t){return e[0].checked},validateModelData:function(e){return 0!=e.get("value")},getCalcValue:function(e){return 1==e.get("value")?calcValue=e.get("checked_calc_value"):calcValue=e.get("unchecked_calc_value"),calcValue},registerRenderClasses:function(e){"checked"==e.get("default_value")?e.set("value",1):e.set("value",0),e.set("customClasses",this.customClasses),e.set("customLabelClasses",this.customLabelClasses),e.set("maybeChecked",this.maybeChecked)},customClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked":e.replace("nf-checked",""),e},customLabelClasses:function(e){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?e+=" nf-checked-label":e.replace("nf-checked-label",""),e},maybeChecked:function(){return 1==this.value||this.clean&&void 0!==this.default_value&&"checked"==this.default_value?" checked":""}})}),i("controllers/fieldCheckboxList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listcheckbox"),"init:model",this.register),this.listenTo(nfRadio.channel("terms"),"init:model",this.register),nfRadio.channel("listcheckbox").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("terms").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listcheckbox").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("terms").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("options").length){var t=_.filter(e.get("options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;if(_.each(this.options,function(i,n){Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],i.value)||_.indexOf(this.value,i.value))&&(t=!0),i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.fieldID=this.id,i.classes=this.classes,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label;var r=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),i.value)&&-1===_.indexOf(this.value,i.value)||(r=!0):_.isArray(this.value)||i.value!=this.value?1==i.selected&&this.clean&&void 0===this.value&&(r=!0):r=!0,i.selected=r,i.isSelected=r,i.required=this.required,i.maybeFilterHTML=this.maybeFilterHTML;var o=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-option");e+=o(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listcheckbox-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");return 0!=i.length&&_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t=Number(t)+Number(n.calc)}),t},beforeUpdateField:function(e,t){var i=t.get("value")||[];"string"==typeof i&&(i=[i]);var n=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(n),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var r=i.indexOf(n);if(-1!=r)i.splice(r,1);else if(Array.isArray(i)){var o=void 0!==i[0]?i[0].split(","):[],a=o.indexOf(n);-1!==a&&o.splice(a,1),i=o.join(",")}}return _.clone(i)}})}),i("controllers/fieldImageList",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listimage"),"init:model",this.register),nfRadio.channel("listimage").reply("before:updateField",this.beforeUpdateField,this),nfRadio.channel("listimage").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),e.set("selected",[]),0!=e.get("image_options").length){var t=_.filter(e.get("image_options"),function(e){return 1==e.selected});t=_.map(t,function(e){return e.value})}var i=e.get("value");void 0!==i&&Array.isArray(i)?e.set("value",i):void 0!==t&&e.set("value",t)},renderOptions:function(){var e="";if(""==this.value||Array.isArray(this.value)&&0<this.value.length||0<this.value.length)var t=!0;else t=!1;1===this.allow_multi_select?(this.old_classname="list-checkbox",this.image_type="checkbox"):this.image_type="radio","horizontal"===this.list_orientation?this.flex_direction="row":this.flex_direction="column";var i=this,n=parseInt(this.num_columns)||1,r=1,o=1;if(_.each(this.image_options,function(a,l){this.show_option_labels?a.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(a.label):a.label:a.label="",Array.isArray(this.value)&&(Array.isArray(this.value[0])&&-1!==_.indexOf(this.value[0],a.value)||_.indexOf(this.value,a.value))&&(t=!0),a.value==this.value&&(t=!0),void 0===a.visible&&(a.visible=!0),"horizontal"===i.list_orientation&&r<=n&&(a.styles="margin:auto;grid-column: "+r+"; grid-row = "+o,r===n?(r=1,o+=1):r+=1),a.image_type=i.image_type,a.fieldID=this.id,a.classes=this.classes,a.index=l;var s=!1;Array.isArray(this.value)&&0<this.value.length?-1===_.indexOf(this.value[0].split(","),a.value)&&-1===_.indexOf(this.value,a.value)||(s=!0):(_.isArray(this.value)||a.value!=this.value)&&(1!=a.selected||!this.clean||void 0!==this.value&&""!==this.value)||(s=!0),a.selected=s,a.isSelected=s,a.required=this.required,a.maybeFilterHTML=this.maybeFilterHTML;var d=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-option");e+=d(a)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var a={fieldID:this.id,classes:this.classes,value:this.value,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},l=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other");e+=l(a)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listimage-other-text")(e)}},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if(1==parseInt(e.get("allow_multi_select")))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0!==n&&(t=n.calc)}return t},beforeUpdateField:function(e,t){if(1!==t.get("allow_multi_select")){var i=jQuery(e).val(),n=t.get("image_options");_.each(n,function(e,t){e.value===i?(e.isSelected=!0,e.selected=!0):(e.isSelected=!1,e.selected=!1),e.isSelected?(jQuery("#nf-field-"+e.fieldID+"-"+t).addClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).addClass("nf-checked-label")):(e.selected=!1,jQuery("#nf-field-"+e.fieldID+"-"+t).removeClass("nf-checked"),jQuery("#nf-label-field-"+e.fieldID+"-"+t).removeClass("nf-checked-label"))})}else{"string"==typeof(i=t.get("value")||[])&&(i=[i]);var r=jQuery(e).val();if(jQuery(e).prop("checked"))i.push(r),jQuery(e).addClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label");else{jQuery(e).removeClass("nf-checked"),jQuery(e).parent().find('label[for="'+jQuery(e).prop("id")+'"]').removeClass("nf-checked-label");var o=i.indexOf(r);if(-1!=o)i.splice(o,1);else if(Array.isArray(i)){var a=i[0].split(","),l=a.indexOf(r);-1!==l&&a.splice(l,1),i=a.join(",")}}}return _.clone(i)}})}),i("controllers/fieldRadio",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("listradio"),"change:modelValue",this.changeModelValue),this.listenTo(nfRadio.channel("listradio"),"init:model",this.register),nfRadio.channel("listradio").reply("get:calcValue",this.getCalcValue,this),this.listenTo(nfRadio.channel("listradio"),"change:field",this.updateCheckedClass,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherText",this.renderOtherText),0!=e.get("options").length){var t=_.find(e.get("options"),function(e){return 1==e.selected});void 0!==t&&e.set("value",t.value)}},changeModelValue:function(e){1==e.get("show_other")&&e.trigger("reRender")},renderOptions:function(){var e="";if(""==this.value)var t=!0;else t=!1;if(_.each(this.options,function(i,n){i.value==this.value&&(t=!0),void 0===i.visible&&(i.visible=!0),i.selected=!1,i.fieldID=this.id,i.classes=this.classes,i.currentValue=this.value,i.index=n,i.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(i.label):i.label,i.required=this.required,this.clean&&1==this.selected||this.value==i.value?i.selected=!0:i.selected=!1,i.maybeFilterHTML=this.maybeFilterHTML;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-option");e+=r(i)},this),1==this.show_other){"nf-other"==this.value&&(t=!1);var i={fieldID:this.id,classes:this.classes,currentValue:this.value,renderOtherText:this.renderOtherText,valueFound:t},n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other");e+=n(i)}return e},renderOtherText:function(){if("nf-other"==this.currentValue||!this.valueFound){"nf-other"==this.currentValue&&(this.currentValue="");var e={fieldID:this.fieldID,classes:this.classes,currentValue:this.currentValue};return nfRadio.channel("app").request("get:template","#tmpl-nf-field-listradio-other-text")(e)}},getCalcValue:function(e){var t=0;if(0!=e.get("options").length){var i=_.find(e.get("options"),function(t){return e.get("value")==t.value});void 0!==i&&(t=i.calc)}return t},updateCheckedClass:function(e,t){jQuery('[name="'+jQuery(e).attr("name")+'"]').removeClass("nf-checked"),jQuery(e).closest("ul").find("label").removeClass("nf-checked-label"),jQuery(e).addClass("nf-checked"),jQuery(e).closest("li").find('label[for="'+jQuery(e).prop("id")+'"]').addClass("nf-checked-label")}})}),i("controllers/fieldNumber",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("number"),"init:model",this.maybeMinDefault),this.listenTo(nfRadio.channel("number"),"keyup:field",this.validateEntry)},maybeMinDefault:function(e){if(""==e.get("value")&&""==e.get("placeholder")){var t=e.get("num_min");e.set("placeholder",t)}},validateEntry:function(e,t){var i=jQuery(e),n=i.val(),r=parseFloat(n),o=i.attr("min"),a=i.attr("max"),l=i.attr("step")?i.attr("step"):"1";if(o&&r<o){var s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-min",d.get("settings").fieldNumberNumMinError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-min");if(a&&r>a){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-max",d.get("settings").fieldNumberNumMaxError)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-max");let c=n.split(".");c=void 0!==c[1]?c[1].length:0;let f=l.split(".");f=void 0!==f[1]?f[1].length:0;let u=Math.pow(10,f);if(l&&n&&(c>f||0!==parseInt((u*r).toFixed())%parseInt((u*parseFloat(l)).toFixed()))){s=nfRadio.channel("fields").request("get:field",t.get("id")),d=nfRadio.channel("app").request("get:form",s.get("formID"));nfRadio.channel("fields").request("add:error",t.get("id"),"number-step",d.get("settings").fieldNumberIncrementBy+l)}else nfRadio.channel("fields").request("remove:error",t.get("id"),"number-step")}})}),i("controllers/mirrorField",[],function(){var e=nfRadio.channel("fields");return Marionette.Object.extend({listeningModel:"",initialize:function(){this.listenTo(e,"init:model",this.registerMirror)},registerMirror:function(e){if(e.get("mirror_field")){this.listeningModel=e;var t=e.get("mirror_field");this.listenTo(nfRadio.channel("field-"+t),"change:modelValue",this.changeValue)}},changeValue:function(e){this.listeningModel.set("value",e.get("value")),this.listeningModel.trigger("reRender")}})}),i("controllers/confirmField",[],function(){var e=nfRadio.channel("fields"),t="confirm-mismatch";return Marionette.Object.extend({initialize:function(){this.listenTo(e,"init:model",this.registerConfirm),this.listenTo(e,"keyup:field",this.confirmKeyup)},registerConfirm:function(e){e.get("confirm_field")&&this.listenTo(nfRadio.channel("form"),"loaded",function(t){this.registerConfirmListeners(e)})},registerConfirmListeners:function(e){var t=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",e.get("confirm_field"));void 0!==t&&(t.set("confirm_with",e.get("id")),this.listenTo(nfRadio.channel("field-"+t.get("id")),"change:modelValue",this.changeValue),this.listenTo(nfRadio.channel("field-"+e.get("id")),"change:modelValue",this.changeValue))},changeValue:function(i){if(void 0===i.get("confirm_with"))var n=i,r=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",n.get("confirm_field"));else r=i,n=e.request("get:field",r.get("confirm_with"));r.get("id");var o=n.get("id");if(""==n.get("value")||n.get("value")==r.get("value"))nfRadio.channel("fields").request("remove:error",o,t);else{var a=nfRadio.channel("fields").request("get:field",o),l=nfRadio.channel("app").request("get:form",a.get("formID"));nfRadio.channel("fields").request("add:error",o,t,l.get("settings").confirmFieldErrorMsg)}},confirmKeyup:function(e,i,n){var r=jQuery(e).val();if(i.get("confirm_field"))var o=i,a=i.get("id"),l=nfRadio.channel("form-"+i.get("formID")).request("get:fieldByKey",o.get("confirm_field")).get("value"),s=r;else if(i.get("confirm_with"))a=(o=nfRadio.channel("fields").request("get:field",i.get("confirm_with"))).get("id"),l=s=o.get("value");if(void 0!==o)if(""==s)nfRadio.channel("fields").request("remove:error",a,t);else if(r==l)nfRadio.channel("fields").request("remove:error",a,t);else{var d=nfRadio.channel("fields").request("get:field",a),c=nfRadio.channel("app").request("get:form",d.get("formID"));nfRadio.channel("fields").request("add:error",a,t,c.get("settings").confirmFieldErrorMsg)}}})}),i("controllers/updateFieldModel",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("nfAdmin").reply("update:field",this.updateField)},updateField:function(e,t){e.get("isUpdated")||(e.set("value",t),e.set("isUpdated",!0),_.isArray(t)&&e.trigger("change:value",e))}})}),i("controllers/submitButton",["controllers/submitButton"],function(e){return Marionette.Object.extend({bound:{},initialize:function(){this.listenTo(nfRadio.channel("submit"),"init:model",this.registerHandlers)},registerHandlers:function(e){if(void 0!==this.bound[e.get("id")])return!1;this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:field",this.click,this),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"before:submit",this.beforeSubmit,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:failed",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"submit:response",this.resetLabel,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"enable:submit",this.maybeEnable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"disable:submit",this.maybeDisable,e),e.listenTo(nfRadio.channel("form-"+e.get("formID")),"processingLabel",this.processingLabel,e),e.listenTo(nfRadio.channel("fields"),"add:error",this.maybeDisable,e),e.listenTo(nfRadio.channel("fields"),"remove:error",this.maybeEnable,e),this.bound[e.get("id")]=!0},click:function(e,t){var i=nfRadio.channel("app").request("get:form",t.get("formID"));_.size(i.get("fieldErrors"))>0&&nfRadio.channel("submit").request("focus:firstInvalidInput",Object.keys(i.get("fieldErrors"))),nfRadio.channel("form-"+t.get("formID")).request("submit",i)},beforeSubmit:function(){this.get("disabled")||(this.set("disabled",!0),nfRadio.channel("form-"+this.get("formID")).trigger("processingLabel",this))},maybeDisable:function(e){void 0!==e&&e.get("formID")!=this.get("formID")||(this.set("disabled",!0),this.trigger("reRender"))},maybeEnable:function(e){if(void 0!==e&&e.get("formID")!=this.get("formID"))return!1;var t=nfRadio.channel("app").request("get:form",this.get("formID"));0==_.size(t.get("fieldErrors"))&&(this.set("disabled",!1),this.trigger("reRender"))},processingLabel:function(){this.set("oldLabel",this.get("label")),this.set("label",this.get("processing_label")),this.set("disabled",!0),this.trigger("reRender")},resetLabel:function(e){void 0!==e.errors&&void 0!==e.errors.nonce&&_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts||(void 0!==this.get("oldLabel")&&this.set("label",this.get("oldLabel")),this.set("disabled",!1),this.trigger("reRender"))}})}),i("controllers/submitDebug",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitDebug)},submitDebug:function(e,t,i,n){if(void 0!==e.debug){if(void 0!==e.debug.form){var r=document.createElement("span");_.each(e.debug.form,function(e,t){var i=document.createTextNode(e);r.appendChild(i),r.appendChild(document.createElement("br"))}),jQuery(".nf-debug-msg").html(r)}if(void 0!==e.debug.console){console.log("%c%s","","NINJA SUPPORT"),_.each(e.debug.console,function(e,t){console.log(e)}),console.log("%c%s","","END NINJA SUPPORT")}}}})}),i("controllers/getFormErrors",[],function(){nfRadio.channel("fields");return Marionette.Object.extend({initialize:function(e){nfRadio.channel("form").reply("get:errors",this.getFormErrors)},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&(0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),_.each(t.get("fields").models,function(e){"submit"!=e.get("type")&&e.get("errors").length>0&&((i=i||{})[e.get("id")]=e.get("errors"))})),i}})}),i("controllers/validateRequired",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"blur:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"change:field",this.validateRequired),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.validateKeyup),this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.validateModelData),this.listenTo(nfRadio.channel("submit"),"validate:field",this.validateModelData)},validateKeyup:function(e,t,i){if(1!=t.get("required"))return!1;t.get("clean")||this.validateRequired(e,t)},validateRequired:function(e,t){if(1!=t.get("required")||!t.get("visible"))return!1;var i=jQuery(e).val(),n=nfRadio.channel(t.get("type")).request("validate:required",e,t),r=!0,o=this.getMask(t);if(o&&i===o&&(0<t.get("errors").length||!t.get("clean"))&&(r=!1),String(i).trim()||(r=!1),void 0!==n)var a=n;else a=r;this.maybeError(a,t)},getMask:function(e){var t=e.get("mask");if(void 0!==t){switch(t){case"":break;case"currency":t=nfi18n.currencySymbol;break;case"custom":t=e.get("custom_mask");default:t=(t=(t=t.replace(/9/g,"_")).replace(/a/g,"_")).replace(/\*/g,"_")}return t}},validateModelData:function(e){if(1!=e.get("required")||!e.get("visible")||e.get("clean"))return!1;if(e.get("errors").get("required-error"))return!1;currentValue=e.get("value");var t=!0;String(currentValue).trim()||(t=!1);var i=nfRadio.channel(e.get("type")).request("validate:modelData",e);if(void 0!==i)var n=i;else n=t;this.maybeError(n,e)},maybeError:function(e,t){if(e)nfRadio.channel("fields").request("remove:error",t.get("id"),"required-error");else{var i=nfRadio.channel("form-"+t.get("formID")).request("get:form");void 0!==i&&nfRadio.channel("fields").request("add:error",t.get("id"),"required-error",i.get("settings").validateRequiredField)}}})}),i("controllers/submitError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.submitErrors),nfRadio.channel("submit").reply("focus:firstInvalidInput",this.focusFirstInvalidInput)},submitErrors:function(e,t,i,n){if(_.size(e.errors.nonce)>0&&void 0!==e.errors.nonce.new_nonce&&void 0!==e.errors.nonce.nonce_ts){nfFrontEnd.ajaxNonce=e.errors.nonce.new_nonce,nfFrontEnd.nonce_ts=e.errors.nonce.nonce_ts;var r=nfRadio.channel("app").request("get:form",n);nfRadio.channel("form-"+n).request("submit",r)}if(_.size(e.errors.fields)>0&&_.each(e.errors.fields,function(e,t){"object"==typeof e?nfRadio.channel("fields").request("add:error",t,e.slug,e.message):nfRadio.channel("fields").request("add:error",t,"required-error",e)}),_.size(e.errors.form)>0&&_.each(e.errors.form,function(e,t){nfRadio.channel("form-"+n).request("remove:error",t),nfRadio.channel("form-"+n).request("add:error",t,e)}),void 0!==e.errors.last&&void 0!==e.errors.last.message){var o="background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;";console.log("%c NINJA FORMS SUPPORT: SERVER ERROR",o),console.log(e.errors.last.message),console.log("%c END SERVER ERROR MESSAGE",o)}jQuery("#nf-form-"+n+"-cont .nf-field-container").show()},focusFirstInvalidInput:function(e){const t=nfRadio.channel("fields").request("get:firstFieldByOrder",e);null!==document.getElementById("nf-field-"+t)&&document.getElementById("nf-field-"+t).focus()}})}),i("controllers/actionRedirect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionRedirect)},actionRedirect:function(e){void 0!==e.data.halt&&void 0!==e.data.halt.redirect&&""!=e.data.halt.redirect&&(window.location=e.data.halt.redirect),0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.redirect&&""!=e.data.actions.redirect&&(window.location=e.data.actions.redirect)}})}),i("controllers/actionSuccess",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){if(0==_.size(e.errors)&&void 0!==e.data.actions&&void 0!==e.data.actions.success_message&&""!=e.data.actions.success_message){var t=e.data.form_id,i=jQuery("#nf-form-"+t+"-cont .nf-response-msg");const l=e.data.actions.success_message.replace(/(<([^>]+)>)/gi,"");i.attr("tabindex","0"),i.attr("aria-live","assertive"),i.attr("aria-label",l),i.html(e.data.actions.success_message).show(),i.focus();var n=i.offset().top,r=i.offset().top+i.outerHeight(),o=jQuery(window).scrollTop()+jQuery(window).height(),a=jQuery(window).scrollTop();o>r&&a<n||jQuery("html, body").animate({scrollTop:i.offset().top-50},300)}}})}),i("controllers/fieldSelect",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"init:model",function(e){"list"==e.get("parentType")&&this.register(e)},this),nfRadio.channel("listselect").reply("get:calcValue",this.getCalcValue,this),nfRadio.channel("listmultiselect").reply("get:calcValue",this.getCalcValue,this)},register:function(e){if(e.set("renderOptions",this.renderOptions),e.set("renderOtherAttributes",this.renderOtherAttributes),0!=e.get("options").length){var t=e.get("value");if("listmultiselect"==e.get("type"))var i=_.filter(e.get("options"),function(e){return 1==e.selected}),n=i=_.map(i,function(e){return e.value});else if("listradio"!==e.get("type")){if(void 0===(i=_.find(e.get("options"),function(e){return 1==e.selected}))&&(i=_.first(e.get("options"))),void 0!==i&&void 0!==i.value)n=i.value;else if(void 0!==i)n=i.label}void 0!==t&&""!==t&&Array.isArray(t)?e.set("value",t):void 0!==i&&e.set("value",n)}},renderOptions:function(){var e="";return _.each(this.options,function(t){if(_.isArray(this.value)){if("listmultiselect"===this.type&&0<this.value.length&&-1!=_.indexOf(this.value[0].split(","),t.value))var i=!0;else if(-1!=_.indexOf(this.value,t.value))i=!0}else if(_.isArray(this.value)||t.value!=this.value)if(1==t.selected&&this.clean&&void 0===this.value)i=!0;else i=!1;else var i=!0;void 0===t.visible&&(t.visible=!0),t.selected=i,t.fieldID=this.id,t.classes=this.classes,t.currentValue=this.value,t.label=void 0!==nfFrontEnd.filter_esc_status&&"true"===nfFrontEnd.filter_esc_status?_.escape(t.label):t.label,t.maybeFilterHTML=this.maybeFilterHTML;var n=nfRadio.channel("app").request("get:template","#tmpl-nf-field-listselect-option");e+=n(t)},this),e},renderOtherAttributes:function(){var e="";"listmultiselect"==this.type&&(e=(e+=" multiple")+' size="'+(this.multi_size||5)+'"');return e},getCalcValue:function(e){var t=0,i=e.get("options");if(0!=i.length)if("listmultiselect"==e.get("type"))_.each(e.get("value"),function(e){var n=_.find(i,function(t){return t.value==e});t+=Number(n.calc)});else{var n=_.find(i,function(t){return e.get("value")==t.value});void 0===n&&(n=e.get("options")[0]),t=n.calc}return t}})}),i("controllers/coreSubmitResponse",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSubmit)},actionSubmit:function(e){var t=nfRadio.channel("app").request("get:form",e.data.form_id);if(0!=_.size(e.errors))return!1;1==e.data.settings.clear_complete&&(t.get("fields").reset(t.get("loadedFields")),1!=e.data.settings.hide_complete&&nfRadio.channel("captcha").trigger("reset")),1==e.data.settings.hide_complete&&t.trigger("hide")}})}),i("controllers/fieldProduct",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("product"),"init:model",this.register),nfRadio.channel("product").reply("get:calcValue",this.getCalcValue,this)},register:function(e){e.set("renderProductQuantity",this.renderProductQuantity),e.set("renderProduct",this.renderProduct),e.set("renderOptions",this.renderOptions)},renderProduct:function(){switch(this.product_type){case"user":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-textbox")(this);case"hidden":return nfRadio.channel("app").request("get:template","#tmpl-nf-field-hidden")(this);case"dropdown":return nfRadio.channel("app").request("get:template","#tmpl-nf-product-dropdown")(this);default:return nfRadio.channel("app").request("get:template","#tmpl-nf-product-single")(this)}},renderProductQuantity:function(){if(1==this.product_use_quantity)return nfRadio.channel("app").request("get:template","#tmpl-nf-product-quantity")(this)},renderOptions:function(){var e=this,t="";return _.each(this.options,function(i){if(1==i.selected)var n=!0;else n=!1;i.selected=n,i.fieldID=e.id,i.classes=e.classes,i.currentValue=e.value;var r=nfRadio.channel("app").request("get:template","#tmpl-nf-product-"+e.product_type+"-option");t+=r(i)}),t},getCalcValue:function(e){return e.get("product_price")*e.get("value")}})}),i("controllers/fieldTotal",[],function(){return Marionette.Object.extend({totalModel:{},productTotals:{},initialize:function(){this.listenTo(nfRadio.channel("total"),"init:model",this.register),this.listenTo(nfRadio.channel("shipping"),"init:model",this.registerShipping)},register:function(e){this.totalModel=e;var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"loaded",this.onFormLoaded),this.listenTo(nfRadio.channel("product"),"change:modelValue",this.onChangeProduct),this.listenTo(nfRadio.channel("quantity"),"change:modelValue",this.onChangeQuantity)},registerShipping:function(e){this.shippingCost=e.get("shipping_cost")},onFormLoaded:function(e){var t=e.get("fields").models,i={},n={};for(var r in t){var o=t[r],a=o.get("id");if("product"==o.get("type"))i[a]=o;else if("quantity"==o.get("type")){n[l=o.get("product_assignment")]=o}}for(var l in i){var s=i[l],d=Number(s.get("product_price"));n[l]?d*=n[l].get("value"):1==s.get("product_use_quantity")&&(d*=s.get("value")),this.productTotals[l]=d}this.updateTotal()},onChangeProduct:function(e){var t=e.get("id"),i=Number(e.get("product_price")),n=Number(e.get("value"))*i;this.productTotals[t]=n,this.updateTotal()},onChangeQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t),n=Number(i.get("product_price")),r=Number(e.get("value"))*n;this.productTotals[t]=r,this.updateTotal()},updateTotal:function(){var e=0;for(var t in this.productTotals)e+=Number(this.productTotals[t]);e&&this.shippingCost&&(e+=Number(this.shippingCost)),this.totalModel.set("value",e.toFixed(2)),this.totalModel.trigger("reRender")}})}),i("controllers/fieldQuantity",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("quantity"),"init:model",this.registerQuantity)},registerQuantity:function(e){var t=e.get("product_assignment"),i=nfRadio.channel("fields").request("get:field",t);i&&i.set("product_use_quantity",0)}})}),i("models/calcModel",[],function(){return Backbone.Model.extend({initialize:function(){this.set("formID",this.collection.options.formModel.get("id")),this.set("fields",{}),nfRadio.channel("calc").trigger("init:model",this),this.on("change:value",this.changeValue,this)},changeField:function(e){nfRadio.channel("calc").trigger("change:field",this,e)},changeCalc:function(e){nfRadio.channel("calc").trigger("change:calc",this,e)},changeValue:function(){nfRadio.channel("calc").trigger("change:value",this)}})}),i("models/calcCollection",["models/calcModel"],function(e){return Backbone.Collection.extend({model:e,comparator:"order",initialize:function(e,t){this.options=t,_.each(e,function(e){void 0!==e.dec&&(""===e.dec.toString().trim()&&(e.dec=2),e.dec=parseInt(e.dec))}),nfRadio.channel("form-"+t.formModel.get("id")).reply("get:calc",this.getCalc,this)},getCalc:function(e){return this.findWhere({name:e})}})}),i("controllers/calculations",["models/calcCollection"],function(e){return Marionette.Object.extend({initialize:function(){this.calcs={},this.displayFields={},this.listenTo(nfRadio.channel("form"),"loaded",this.registerCalcs),this.listenTo(nfRadio.channel("fields"),"reset:collection",this.resetCalcs),this.listenTo(nfRadio.channel("calc"),"change:field",this.changeField),this.listenTo(nfRadio.channel("calc"),"change:calc",this.changeCalc);var e=this;_.each(nfFrontEnd.use_merge_tags.calculations,function(t){e.listenTo(nfRadio.channel("fields-"+t),"init:model",e.initDisplayField)}),this.listenTo(nfRadio.channel("calc"),"change:value",this.updateDisplayFields),this.init={}},resetCalcs:function(e){void 0!==e.options.formModel&&this.registerCalcs(e.options.formModel)},registerCalcs:function(t){var i=new e(t.get("settings").calculations,{formModel:t});this.calcs[t.get("id")]=i;var n=this;_.each(i.models,function(e){n.init[e.get("name")]=!0,n.setupCalc(e)})},setupCalc:function(e){var t=this,i=e.get("eq"),n=i,r=(e.get("name"),i.match(new RegExp(/{field:(.*?)}/g)));r&&(r=r.map(function(i){var r=i.replace(":calc}","").replace("}","").replace("{field:","");if(fieldModel=nfRadio.channel("form-"+e.get("formID")).request("get:fieldByKey",r),"undefined"!=typeof fieldModel){fieldModel.set("clean",!1),fieldModel.on("change:value",e.changeField,e);var o=t.getCalcValue(fieldModel);t.updateCalcFields(e,r,o),n=t.replaceKey("field",r,o,n)}}));var o=i.match(new RegExp(/{calc:(.*?)}/g));o&&(o=o.map(function(i){var r=i.replace("}","").replace("{calc:",""),o=e.collection.findWhere({name:r});if(void 0!==o){o.on("change:value",e.changeCalc,e);var a=o.get("value");n=t.replaceKey("calc",r,a,n)}})),n=(n=n.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,0)).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+n+" -> "+this.localeDecodeEquation(n)+" (Setup)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(n))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},updateCalcFields:function(e,t,i){var n=e.get("fields");n[t]=i,e.set("fields",n)},getCalcValue:function(e){var t=nfRadio.channel(e.get("type")).request("get:calcValue",e),i=e.get("value");void 0!==t&&(t||0===t)&&(i=t);var n=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point),o=n.numberDecoder(i),a=n.numberEncoder(i);return t=void 0!==o&&jQuery.isNumeric(o)?a:0,e.get("visible")||(t=0),t},replaceKey:function(e,t,i,n){n=n||calcModel.get("eq"),tag="{"+e+":"+t+"}";var r=new RegExp(tag,"g");calcTag="{"+e+":"+t+":calc}";var o=new RegExp(calcTag,"g");return n=(n=n.replace(r,i)).replace(o,i)},replaceAllKeys:function(e){var t=e.get("eq"),i=this;_.each(e.get("fields"),function(e,n){t=i.replaceKey("field",n,e,t)});var n=t.match(new RegExp(/{calc:(.*?)}/g));return n&&_.each(n,function(i){var n=i.replace("}","").replace("{calc:",""),r=e.collection.findWhere({name:n});if(void 0!==r){var o=new RegExp(i,"g");t=t.replace(o,r.get("value"))}}),t},changeField:function(e,t){var i=t.get("key"),n=this.getCalcValue(t);this.updateCalcFields(e,i,n);var r=this.replaceAllKeys(e);r=(r=r.replace(/{([a-zA-Z0-9]|:|_|-)*}/g,"0")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+r+" -> "+this.localeDecodeEquation(r)+" (Change Field)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(r))).toFixed(e.get("dec")))}catch(e){this.debug()&&console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},initDisplayField:function(e){if(e.get("default")&&"string"==typeof e.get("default")){var t=e.get("default").match(new RegExp(/{calc:(.*?)}/g));t&&_.each(t,function(t){t=t.replace("{calc:","").replace("}","").replace(":2",""),this.displayFields[t]=this.displayFields[t]||[],this.displayFields[t].push(e)},this)}},updateDisplayFields:function(e){var t=this;void 0!==this.displayFields[e.get("name")]&&_.each(this.displayFields[e.get("name")],function(i){var n="",r=(n="html"===i.get("type")?i.get("value"):i.get("default")).match(new RegExp(/<span data-key="calc:(.*?)<\/span>/g));_.each(r,function(e){var t="{"+e.replace('<span data-key="',"").replace(/">(.*?)<\/span>/,"")+"}";n=n.replace(e,t)});var o=n.match(new RegExp(/{calc:(.*?)}/g));_.each(o,function(e){var r=e.replace("}","").replace("{calc:","").replace(":2",""),o=t.calcs[i.get("formID")].findWhere({name:r}),a=new RegExp(e,"g"),l=o.get("value");void 0!==l&&(l=t.applyLocaleFormatting(l,o)),n="html"===i.get("type")?n.replace(a,'<span data-key="calc:'+r+'">'+l+"</span>"):l}),i.set("value",n),t.init[e.get("name")]||i.trigger("reRender"),t.init[e.get("name")]=!1})},getCalc:function(e,t){return this.calcs[t].findWhere({name:e})},changeCalc:function(e,t){var i=this.replaceAllKeys(e);i=(i=i.replace("[","").replace("]","")).replace(/\r?\n|\r/g,"");try{this.debug("Calculation Decoder "+i+" -> "+this.localeDecodeEquation(i)+" (Change Calc)");const t=new Mexp;e.set("value",Number(t.eval(this.localeDecodeEquation(i))).toFixed(e.get("dec")))}catch(e){console.log(e)}"NaN"===e.get("value")&&e.set("value","0")},applyLocaleFormatting:function(e,t){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e,t.get("dec"))},localeDecodeEquation:function(e){var t="",i="",n=/[0-9.,]/,o=new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point);return(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").forEach(function(e){n.test(e)?i+=e:(0<i.length&&(t+=o.numberDecoder(i),i=""),t+=e)}),0<i.length&&(t+=o.numberDecoder(i)),t},debug:function(e){window.nfCalculationsDebug&&console.log(e)}})}),i("controllers/dateBackwardsCompat",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(Backbone.Radio.channel("pikaday-bc"),"init",this.dateBackwardsCompat)},dateBackwardsCompat:function(e,t){if(e.pikaday={},e.pikaday._o={},nfRadio.channel("pikaday").trigger("init",e,t),void 0!==e.pikaday._o.disableDayFn&&e.set("disable",[e.pikaday._o.disableDayFn]),void 0!==e.pikaday._o.i18n||void 0!==e.pikaday._o.firstDay){let t=e.config.locale;void 0!==e.pikaday._o.firstDay&&(t.firstDayOfWeek=e.pikaday._o.firstDay),void 0!==e.pikaday._o.i18n&&(void 0!==e.pikaday._o.i18n.weekdays&&(t.weekdays.longhand=e.pikaday._o.i18n.weekdays),void 0!==e.pikaday._o.i18n.weekdaysShort&&(t.weekdays.shorthand=e.pikaday._o.i18n.weekdaysShort),void 0!==e.pikaday._o.i18n.months&&jQuery(".flatpickr-monthDropdown-months > option").each(function(){this.text=e.pikaday._o.i18n.months[this.value]})),e.set("locale",t)}Object.keys(e.pikaday._o).length>0&&(console.log("%cDeprecated Ninja Forms Pikaday custom code detected.","color: Red; font-size: large"),console.log("You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details."))}})}),i("controllers/fieldDate",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("date"),"init:model",this.initModel),this.listenTo(nfRadio.channel("date"),"render:view",this.initDatepicker)},initModel:function(e){this.registerFunctions(e)},registerFunctions:function(e){e.set("renderHourOptions",this.renderHourOptions),e.set("renderMinuteOptions",this.renderMinuteOptions),e.set("maybeRenderAMPM",this.maybeRenderAMPM),e.set("customClasses",this.customClasses),e.getValue=this.getValue},renderHourOptions:function(){return this.hours_options},renderMinuteOptions:function(){return this.minutes_options},maybeRenderAMPM:function(){if(void 0!==this.hours_24&&1!=this.hours_24)return`<div style="float:left;" class="time-wrap"><select id="ampm-select" class="ampm extra" aria-label="am-pm-select" ${1==this.required?'aria-required="true" required':""}><option value="am">AM</option><option value="pm">PM</option></select></div>`},initDatepicker:function(e){e.model.set("el",e.el);var t=jQuery(e.el).find(".nf-element")[0];if(e.listenTo(nfRadio.channel("form-"+e.model.get("formID")),"before:submit",this.beforeSubmit,e),void 0!==e.model.get("date_mode")&&"time_only"==e.model.get("date_mode"))return jQuery(t).hide(),!1;var i=this.convertDateFormat(e.model.get("date_format"));e.model.set("date_format",i);var n={onReady:(e,i,n)=>{n.altInput.setAttribute("aria-labelledby",jQuery(t).attr("aria-labelledby")),n.altInput.setAttribute("aria-invalid",!1)},dateFormat:i,altFormat:i,altInput:!0,ariaDateFormat:i,mode:"single",allowInput:!0,disableMobile:"true",minDate:this.getMinDate(e.model),maxDate:this.getMaxDate(e.model)};const r=this.checkCustomLocale();r&&(n.locale=r);let o=nfRadio.channel("flatpickr").request("filter:settings",n,e);void 0!==o&&(n=o);var a=flatpickr(t,n);1!=e.model.get("date_default")||e.model.get("value")||(a.defaultDate=new Date,a.setDate(a.defaultDate),e.model.set("value",a.defaultDate)),1==e.model.get("date_default")&&"string"==typeof e.model.get("id")&&e.model.get("id").includes(".")&&"object"==typeof e.model.get("value")&&this.isSameDay(e.model.get("value"),new Date)&&(a.defaultDate=new Date,a.setDate(a.defaultDate,!0),e.model.set("value",a.defaultDate)),nfRadio.channel("pikaday-bc").trigger("init",a,e.model,e),nfRadio.channel("flatpickr").trigger("init",a,e.model,e)},beforeSubmit:function(e){if(_.isObject(this.model.get("value"))){const e=this.el.querySelector("input[type='hidden']").value;this.model.set("value",e)}if(-1!==this.el.dataset.fieldId.search(".")&&(nfRadio.channel("field-repeater").trigger("set:value"),"time_only"===this.model.get("date_mode")))return;if("date_only"==this.model.get("date_mode"))return!1;let t=jQuery(this.el).find(".hour").val(),i=jQuery(this.el).find(".minute").val(),n=jQuery(this.el).find(".ampm").val(),r=this.model.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a={date:o,hour:t,minute:i,ampm:n};this.model.set("value",a)},getMinDate:function(e){let t=null;if(void 0!==e.get("year_range_start")){const i=e.get("year_range_start");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},getMaxDate:function(e){let t=null;if(void 0!==e.get("year_range_end")){const i=e.get("year_range_end");i&&(t=flatpickr.formatDate(new Date(String(i)),e.get("date_format")))}return t},convertDateFormat:function(e){!e&&this.model&&(e=this.model.get("date_format")),e||(e="default");const t={"MM/DD/YYYY":"m/d/Y","MM-DD-YYYY":"m-d-Y","MM.DD.YYYY":"m.d.Y","DD/MM/YYYY":"d/m/Y","DD-MM-YYYY":"d-m-Y","DD.MM.YYYY":"d.m.Y","YYYY-MM-DD":"Y-m-d","YYYY/MM/DD":"Y/m/d","YYYY.MM.DD":"Y.m.d","dddd, MMMM D YYYY":"l, F d Y",default:nfi18n.dateFormat?nfi18n.dateFormat:"default"};return Object.keys(t).includes(e)?t[e]:e},customClasses:function(e){return"date_and_time"==this.date_mode&&(e+=" date-and-time"),e},checkCustomLocale:function(){let e={};return nfi18n&&((nfi18n.months||nfi18n.monthsShort)&&(e.months={},nfi18n.months&&(e.months.longhand=nfi18n.months),nfi18n.monthsShort&&(e.months.shorthand=nfi18n.monthsShort)),(nfi18n.weekdays||nfi18n.weekdaysShort)&&(e.weekdays={},nfi18n.weekdays&&(e.weekdays.longhand=nfi18n.weekdays),nfi18n.weekdaysShort&&(e.weekdays.shorthand=nfi18n.weekdaysShort)),nfi18n.startOfWeek&&(e.firstDayOfWeek=nfi18n.startOfWeek)),!_.isEmpty(e)&&e},getValue:function(){if("date_only"==this.get("date_mode"))return this.get("value");let e=this.get("el"),t=jQuery(e).find(".hour").val(),i=jQuery(e).find(".minute").val(),n=jQuery(e).find(".ampm").val(),r=this.get("value"),o=!1;o=_.isObject(r)?r.date:r;let a="";return void 0!==o&&(a+=o),void 0!==t&&void 0!==i&&(a+=" "+t+":"+i),void 0!==n&&(a+=" "+n),a},isSameDay:function(e,t){const i=new Date(e),n=new Date(t);return i.setHours(0,0,0,0),n.setHours(0,0,0,0),i.getTime()===n.getTime()}})}),i("controllers/fieldRecaptcha",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha"),"init:model",this.initRecaptcha),this.listenTo(nfRadio.channel("forms"),"submit:response",this.resetRecaptcha)},initRecaptcha:function(e){nfRadio.channel("recaptcha").reply("update:response",this.updateResponse,this,e.id)},updateResponse:function(e,t){var i=nfRadio.channel("fields").request("get:field",t);i.set("value",e),nfRadio.channel("fields").request("remove:error",i.get("id"),"required-error")},resetRecaptcha:function(){var e=0;jQuery(".g-recaptcha").each(function(){try{grecaptcha.reset(e)}catch(e){console.log("Notice: Error trying to reset grecaptcha.")}e++})}})}),i("controllers/fieldRecaptchaV3",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("recaptcha_v3"),"init:model",this.initRecaptcha)},initRecaptcha:function(e){const t=e.get("formID");this.processRecaptcha(t,e),setInterval(this.processRecaptcha,11e4,t,e)},processRecaptcha:function(e,t){try{nfRadio.channel("form-"+e).trigger("disable:submit",t),grecaptcha.ready(function(){grecaptcha.execute(t.get("site_key"),{action:"register"}).then(function(i){t.set("value",i),nfRadio.channel("form-"+e).trigger("enable:submit",t)})})}catch(e){jQuery(document).on("nfFormReady",e=>{let i,n=nf_check_recaptcha_consent();t.collection.models.forEach(e=>{"submit"===e.get("type")&&(i=e.get("id"))}),nfRadio.channel("fields").request("add:error",i,"recaptcha-v3-missing",t.collection.options.formModel.get("settings").recaptchaConsentMissing),this.nf_build_default_consent_action(t,n.services,i,e)})}},nf_build_default_consent_action:function(e,t,i,n){if(!(t.length<=1&&t.includes("missing_cookie")||t.length<=0)){let r=document.createElement("div");r.setAttribute("id","nf_recaptcha_consent_event"),r.innerText+=e.collection.options.formModel.get("settings").recaptchaConsentEvent;let o=new CustomEvent("nf_consent_link",{detail:{services:t,element:r,submitFieldID:i,layoutView:n}});document.dispatchEvent(o);const a=document.getElementsByClassName("nf-error-recaptcha-v3-missing");Array.prototype.slice.call(a).forEach(e=>{e.append(r)})}}})}),i("controllers/fieldHTML",[],function(){return Marionette.Object.extend({htmlFields:[],trackedMergeTags:[],initialize:function(){this.listenTo(Backbone.Radio.channel("fields-html"),"init:model",this.setupFieldMergeTagTracking)},setupFieldMergeTagTracking:function(e){this.htmlFields.push(e);var t=e.get("formID");this.listenTo(nfRadio.channel("form-"+t),"init:model",function(t){var i=e.get("default").match(new RegExp(/{field:(.*?)}/g));i&&(_.each(i,function(e){var i=e.replace("{field:","").replace("}",""),n=t.get("fields").findWhere({key:i});void 0!==n&&(this.trackedMergeTags.push(n),this.listenTo(nfRadio.channel("field-"+n.get("id")),"change:modelValue",this.updateFieldMergeTags))},this),this.updateFieldMergeTags())},this)},updateFieldMergeTags:function(e){_.each(this.htmlFields,function(e){var t=e.get("value");_.each(this.trackedMergeTags,function(e){var i=t.match(new RegExp(/<span data-key="field:(.*?)<\/span>/g));_.each(i,function(i){-1<i.indexOf('data-key="field:'+e.get("key"))&&(t=t.replace(i,"{field:"+e.get("key")+"}"))});var n="{field:"+e.get("key")+"}";const r="repeater"===e.get("type")?this.displayRepeaterData(e):e.getValue();t=t.replace(n,'<span data-key="field:'+e.get("key")+'">'+r+"</span>")},this),e.set("value",t),e.trigger("reRender")},this)},displayRepeaterData:function(e){const t=Object.keys(e.getValue());let i="",n=[];return _.each(t,function(e){if(-1===n.indexOf(e)){const t=nfRadio.channel("fields").request("get:field",e);if(void 0!==t){if(-1===["submit","html","hidden","password","passwordconfirm","divider","hr","note","unknown","button","confirm","creditcard","creditcardcvc","creditcardexpiration","creditcardfullname","creditcardnumber","creditcardzip","recaptcha","recaptcha_v3"].indexOf(t.get("type"))&&t.getValue().toString().length>0){const r=Number(e.split("_").pop())+1;i+="<p>"+t.get("label")+" "+r+" : "+t.getValue()+"</p>",n.push(e)}}}}),i}})}),i("controllers/helpText",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"render:view",this.initHelpText),this.listenTo(nfRadio.channel("field-repeater"),"fieldset:added",this.initHelpText),nfRadio.channel("form").reply("init:help",this.initHelpText)},initHelpText:function(e){e&&!e.el&&"function"==typeof e.get&&"repeater"===e.get("type")&&(e.el="#nf-form-"+e.get("formID")+"-cont"),jQuery(e.el).find(".nf-help").each(function(e){var t=jQuery(this).jBox("Tooltip",{theme:"TooltipBorder",content:jQuery(this).data("text"),trigger:"mouseenter focus",closeOnMouseleave:!0,closeOnClick:!0});jQuery(this).on("keydown mouseleave",function(){t.close()})})}})}),i("controllers/fieldTextbox",[],function(){return Marionette.Object.extend({initialize:function(){nfRadio.channel("textbox").reply("get:calcValue",this.getCalcValue,this)},getCalcValue:function(e){if("currency"==e.get("mask")){var t=nfRadio.channel("app").request("get:form",e.get("formID")),i=void 0!==t?t.get("currencySymbol"):"",n=jQuery("<textarea />").html(i).text();return e.get("value").replace(n,"")}return e.get("value")}})}),i("controllers/fieldTextareaRTE",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("textarea"),"render:view",this.initTextareaRTEs),this.listenTo(nfRadio.channel("textarea"),"click:extra",this.clickExtra),this.meta_image_frame,this.currentContext={},void 0!==jQuery.summernote&&(jQuery.summernote.options.icons={align:"dashicons dashicons-editor-alignleft",alignCenter:"dashicons dashicons-editor-aligncenter",alignJustify:"dashicons dashicons-editor-justify",alignLeft:"dashicons dashicons-editor-alignleft",alignRight:"dashicons dashicons-editor-alignright",indent:"dashicons dashicons-editor-indent",outdent:"dashicons dashicons-editor-outdent",bold:"dashicons dashicons-editor-bold",caret:"dashicons dashicons-arrow-down",close:"dashicons dashicons-dismiss",code:"dashicons dashicons-editor-code",eraser:"dashicons dashicons-editor-removeformatting",italic:"dashicons dashicons-editor-italic",link:"dashicons dashicons-admin-links",unlink:"dashicons dashicons-editor-unlink",magic:"dashicons dashicons-editor-paragraph",minus:"dashicons dashicons-minus",orderedlist:"dashicons dashicons-editor-ol",redo:"dashicons dashicons-redo",square:"dashicons fa-square",table:"dashicons dashicons-editor-table",underline:"dashicons dashicons-editor-underline",undo:"dashicons dashicons-undo",unorderedlist:"dashicons dashicons-editor-ul"})},initTextareaRTEs:function(e){if(1!=e.model.get("textarea_rte"))return!1;var t=this,i=[["paragraphStyle",["style"]],["fontStyle",["bold","italic","underline","clear"]],["lists",["ul","ol"]],["paragraph",["paragraph"]],["customGroup",["linkButton","unlink"]],["table",["table"]],["actions",["undo","redo"]]];1==e.model.get("textarea_media")&&0!=userSettings.uid&&i.push(["tools",["mediaButton"]]),jQuery(e.el).find(".nf-element").summernote({toolbar:i,buttons:{linkButton:function(e){return t.linkButton(e)},mediaButton:function(e){return t.mediaButton(e)}},height:150,codemirror:{theme:"monokai",lineNumbers:!0},prettifyHtml:!0,callbacks:{onChange:function(t){e.model.set("value",jQuery(this).summernote("code"))}}});var n=jQuery(e.el).find(".link-button").next(".dropdown-menu").find("button");n.replaceWith(function(){return jQuery("<div/>",{class:jQuery(n).attr("class"),html:this.innerHTML})})},linkButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-button"),r=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-link-dropdown");return i.buttonGroup([i.button({className:"dropdown-toggle link-button",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertLink,click:function(i){t.clickLinkButton(i,e)},data:{toggle:"dropdown"}}),i.dropdown([i.buttonGroup({children:[i.button({contents:r({}),tooltip:""})]})])]).render()},mediaButton:function(e){var t=this,i=jQuery.summernote.ui,n=nfRadio.channel("app").request("get:template","#tmpl-nf-rte-media-button");return i.button({className:"dropdown-toggle",contents:n({}),tooltip:nfi18n.fieldTextareaRTEInsertMedia,click:function(i){t.openMediaManager(i,e)}}).render()},openMediaManager:function(e,t){if(t.invoke("editor.saveRange"),this.meta_image_frame)this.meta_image_frame.open();else{this.meta_image_frame=wp.media.frames.meta_image_frame=wp.media({title:nfi18n.fieldTextareaRTESelectAFile,button:{text:"insert"}});var i=this;this.meta_image_frame.on("select",function(){var e=i.meta_image_frame.state().get("selection").first().toJSON();i.insertMedia(e,t)}),this.meta_image_frame.open()}},clickLinkButton:function(e,t){var i=t.invoke("editor.createRange");t.invoke("editor.saveRange");var n=i.toString();this.currentContext=t,jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("hide.bs.dropdown",function(e){return!1}),jQuery(e.target).closest(".note-customGroup > .note-btn-group").on("shown.bs.dropdown",function(e){jQuery(e.target).parent().parent().find(".link-text").val(n),jQuery(e.target).parent().parent().find(".link-url").focus()})},clickExtra:function(e){var t=jQuery(e.target).parent().find(".link-text"),i=jQuery(e.target).parent().find(".link-url"),n=jQuery(e.target).parent().find(".link-new-window");if(this.currentContext.invoke("editor.restoreRange"),jQuery(e.target).hasClass("insert-link")){var r=t.val(),o=i.val(),a=!!n.prop("checked");0!=r.length&&0!=o.length&&this.currentContext.invoke("editor.createLink",{text:r,url:o,isNewWindow:a})}t.val(""),i.val(""),n.prop("checked",!1),jQuery(e.target).closest("div.note-btn-group.open").removeClass("open")},insertMedia:function(e,t){t.invoke("editor.restoreRange"),"image"==e.type?t.invoke("editor.insertImage",e.url):t.invoke("editor.createLink",{text:e.filename,url:e.url})}})}),i("controllers/fieldStarRating",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("starrating"),"init:model",this.register),this.listenTo(nfRadio.channel("starrating"),"render:view",this.initRating)},register:function(e){e.set("renderRatings",this.renderRatings)},initRating:function(e){jQuery(e.el).find(".starrating").rating()},renderRatings:function(){for(var e=document.createElement("span"),t=0;t<=this.number_of_stars-1;t++){var i=nfRadio.channel("app").request("get:template","#tmpl-nf-field-starrating-star"),n=t+1,r="";this.value==n&&(r="checked");var o=i({id:this.id,classes:this.classes,num:n,checked:r,required:this.required});e.appendChild(document.createRange().createContextualFragment(o))}return e.innerHTML}})}),i("controllers/fieldTerms",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("terms"),"init:model",this.register)},register:function(e){this.listenTo(nfRadio.channel("field-"+e.get("id")),"click:extra",this.clickExtra),this.listenTo(nfRadio.channel("field-"+e.get("id")),"keyup:field",this.keyUpExtra)},clickExtra:function(e,t){var i=jQuery(e.currentTarget).parent().find(".extra-value").val();this.addOption(t,i)},keyUpExtra:function(e,t,i){13==i&&this.addOption(t,e.val())},addOption:function(e,t){if(t){var i={label:t,value:t,selected:0};e.get("options").push(i),e.get("value").push(t),e.trigger("reRender")}}})}),i("controllers/formContentFilters",[],function(){return Marionette.Object.extend({initialize:function(){this.viewFilters=[],this.loadFilters=[],nfRadio.channel("formContent").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("formContent").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("formContent").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("formContent").reply("get:loadFilters",this.getLoadFilters,this),nfRadio.channel("fieldContents").reply("add:viewFilter",this.addViewFilter,this),nfRadio.channel("fieldContents").reply("add:loadFilter",this.addLoadFilter,this),nfRadio.channel("fieldContents").reply("get:viewFilters",this.getViewFilters,this),nfRadio.channel("fieldContents").reply("get:loadFilters",this.getLoadFilters,this)},addViewFilter:function(e,t){this.viewFilters[t]=e},getViewFilters:function(){return this.viewFilters},addLoadFilter:function(e,t){this.loadFilters[t]=e},getLoadFilters:function(){return this.loadFilters}})}),i("views/fieldItem",[],function(){return Marionette.ItemView.extend({tagName:"div",initialize:function(){this.listenTo(this.model,"reRender",this.render,this),this.listenTo(this.model,"change:addWrapperClass",this.addWrapperClass,this),this.listenTo(this.model,"change:removeWrapperClass",this.removeWrapperClass,this),this.listenTo(this.model,"change:invalid",this.toggleAriaInvalid,this),this.template="#tmpl-nf-field-"+this.model.get("wrap_template")},test:function(e){console.log("firing from trigger 1")},addWrapperClass:function(){var e=this.model.get("addWrapperClass");""!=e&&(jQuery(this.el).addClass(e),this.model.set("addWrapperClass",""))},removeWrapperClass:function(){var e=this.model.get("removeWrapperClass");""!=e&&(jQuery(this.el).removeClass(e),this.model.set("removeWrapperClass",""))},toggleAriaInvalid:function(){var e=this.model.get("invalid");jQuery("[aria-invalid]",this.el).attr("aria-invalid",JSON.stringify(e))},onRender:function(){if(this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el),void 0!==this.model.get("mask")&&""!=String(this.model.get("mask")).trim()){if("custom"==this.model.get("mask"))var e=this.model.get("custom_mask");else e=this.model.get("mask");if(Number.isInteger=Number.isInteger||function(e){return"number"==typeof e&&isFinite(e)&&Math.floor(e)===e},Number.isInteger(e)&&(e=e.toString()),"currency"==e){var t=nfRadio.channel("app").request("get:form",this.model.get("formID")),i=t.get("thousands_sep");" "!=i&&160!=i.charCodeAt(0)||(i=" ");var n=jQuery("<div/>").html(t.get("currencySymbol")).text(),r={digitGroupSeparator:i=jQuery("<div/>").html(i).text(),decimalCharacter:jQuery("<div/>").html(t.get("decimal_point")).text(),currencySymbol:n,modifyValueOnWheel:!1},o=jQuery(jQuery(this.el).find(".nf-element")[0]);new AutoNumeric(jQuery(this.el).find(".nf-element")[0],r);var a=this;o.on("change",function(e){a.model.set("value",e.target.value)})}else jQuery(this.el).find(".nf-element").mask(e)}nfRadio.channel(this.model.get("type")).trigger("render:view",this),nfRadio.channel("fields").trigger("render:view",this)},templateHelpers:function(){var e=this;return{renderElement:function(){this.clean&&!this.value&&0===this.default&&(this.value="0");var e=_.find(this.element_templates,function(e){if(0<jQuery("#tmpl-nf-field-"+e).length)return!0});return nfRadio.channel("app").request("get:template","#tmpl-nf-field-"+e)(this)},renderLabel:function(){return nfRadio.channel("app").request("get:template","#tmpl-nf-field-label")(this)},renderLabelClasses:function(){var e="";return void 0!==this.customLabelClasses&&(e=this.customLabelClasses(e)),e},renderPlaceholder:function(){var e=this.placeholder;return void 0!==this.customPlaceholder&&(e=this.customPlaceholder(e)),""!=String(e).trim()?'placeholder="'+_.escape(e)+'"':""},renderWrapClass:function(){var e="field-wrap "+this.type+"-wrap";return this.type!==this.parentType&&(e=e+" "+this.parentType+"-wrap"),void 0!==this.old_classname&&0<String(this.old_classname).trim().length&&(e+=" "+this.old_classname+"-wrap"),"undefined"!=typeof customWrapClass&&(e=customWrapClass(e)),e},renderClasses:function(){var e=this.classes;return this.error?e+=" nf-error":e=e.replace("nf-error",""),void 0!==this.element_class&&0<String(this.element_class).trim().length&&(e+=" "+this.element_class),void 0!==this.customClasses&&(e=this.customClasses(e)),e},maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},maybeDisabled:function(){return 1==this.disable_input?"disabled":""},maybeRequired:function(){return 1==this.required?'aria-required="true" required':""},maybeDisableAutocomplete:function(){if(1==this.disable_browser_autocomplete)return'autocomplete="off"';return'autocomplete="'+this.translateAutoCompletionType(this.type)+'"'},translateAutoCompletionType:function(e){switch(e){case"address":return"street-address";case"address2":return"address-line2";case"city":return"address-level2";case"email":return"email";case"firstname":return"given-name";case"lastname":return"family-name";case"zip":return"postal-code";case"phone":return"tel";default:return"on"}},maybeInputLimit:function(){return"characters"==this.input_limit_type&&""!=String(this.input_limit).trim()?'maxlength="'+this.input_limit+'"':""},getHelpText:function(){return void 0!==this.help_text?this.help_text:""},maybeRenderHelp:function(){var e=document.createElement("p");e.innerHTML=this.help_text;var t=!1;if((0!=String(jQuery(e).text()).trim().length||0<jQuery(e).find("img").length)&&(t=!0),void 0!==this.help_text&&t){var i=document.createElement("span");i.classList.add("fa","fa-info-circle","nf-help"),i.setAttribute("data-text",this.getHelpText()),i.setAttribute("tabindex","0"),i.setAttribute("aria-describedby","hidden-help-text-"+this.id);var n=document.createElement("span");return n.textContent=this.help_text.replace(/<\/?[^>]+(>|$)/g,"").trim(),n.id="hidden-help-text-"+this.id,n.classList.add("nf-sr-only"),n.setAttribute("role","tooltip"),i.appendChild(n),i.outerHTML}return""},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.setAttribute("aria-hidden","true"),n.setAttribute("id","nf-description-"+this.id),n.appendChild(i),n.outerHTML):"")},renderNumberDefault:function(){return this.clean?0===this.default||this.default?this.default:this.placeholder?"":this.value:this.value},renderCurrencyFormatting:function(t){var i=t.toString().replace(".","||").replace(/\B(?=(\d{3})+(?!\d))/g,nfi18n.thousands_sep).replace("||",nfi18n.decimal_point);return nfRadio.channel("app").request("get:form",e.model.get("formID")).get("settings").currency_symbol+i},maybeRenderTime:function(){return"time_only"==this.date_mode||"date_and_time"==this.date_mode}}},events:{"change .nf-element":"fieldChange","keyup .nf-element":"fieldKeyup","click .nf-element":"fieldClick","click .extra":"extraClick","change .extra":"extraChange","blur .nf-element":"fieldBlur"},fieldChange:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("nfAdmin").request("change:field",t,this.model)},fieldKeyup:function(e){var t=jQuery(e.currentTarget),i=e.keyCode;nfRadio.channel("field-"+this.model.get("id")).trigger("keyup:field",t,this.model,i),nfRadio.channel(this.model.get("type")).trigger("keyup:field",t,this.model,i),nfRadio.channel("fields").trigger("keyup:field",t,this.model,i)},fieldClick:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("click:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("click:field",t,this.model),nfRadio.channel("fields").trigger("click:field",t,this.model)},extraClick:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("click:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("click:extra",e,this.model),nfRadio.channel("fields").trigger("click:extra",e,this.model)},extraChange:function(e){nfRadio.channel("field-"+this.model.get("id")).trigger("change:extra",e,this.model),nfRadio.channel(this.model.get("type")).trigger("change:extra",e,this.model),nfRadio.channel("fields").trigger("change:extra",e,this.model)},fieldBlur:function(e){var t=jQuery(e.currentTarget);nfRadio.channel("field-"+this.model.get("id")).trigger("blur:field",t,this.model),nfRadio.channel(this.model.get("type")).trigger("blur:field",t,this.model),nfRadio.channel("fields").trigger("blur:field",t,this.model)},onAttach:function(){nfRadio.channel(this.model.get("type")).trigger("attach:view",this)}})}),i("views/beforeField",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-before"})}),i("views/fieldErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-error",onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)}})}),i("views/fieldErrorCollection",["views/fieldErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e,initialize:function(e){this.fieldModel=e.fieldModel},onRender:function(){0==this.fieldModel.get("errors").models.length?(this.fieldModel.removeWrapperClass("nf-error"),this.fieldModel.removeWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-pass"),this.fieldModel.setInvalid(!1)):(this.fieldModel.removeWrapperClass("nf-pass"),this.fieldModel.addWrapperClass("nf-fail"),this.fieldModel.addWrapperClass("nf-error"),this.fieldModel.setInvalid(!0))}})}),i("views/inputLimit",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-input-limit",initialize:function(){this.listenTo(nfRadio.channel("field-"+this.model.get("id")),"keyup:field",this.updateCount),this.count=this.model.get("input_limit"),this.render()},updateCount:function(e,t){var i=jQuery(e).val(),n=String(i).trim().replace(/\s+/gi," ").split(" "),r=n.length,o=i.length;if("characters"==this.model.get("input_limit_type")||"char"==this.model.get("input_limit_type"))jQuery(e).attr("maxlength",this.model.get("input_limit")),this.count=this.model.get("input_limit")-o;else{this.count=this.model.get("input_limit")-r;var a=this.model.get("input_limit");r>a&&jQuery(e).val(n.slice(0,a).join(" "))}this.render()},templateHelpers:function(){var e=this;return{currentCount:function(){return e.count}}}})}),i("views/afterField",["views/fieldErrorCollection","views/inputLimit"],function(e,t){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-field-after",initialize:function(){this.model.on("change:errors",this.changeError,this)},onRender:function(){var i=jQuery(this.el).children(".nf-error-wrap");if(this.errorCollectionView=new e({el:i,collection:this.model.get("errors"),fieldModel:this.model}),0<this.model.get("errors").length&&this.errorCollectionView.render(),void 0!==this.model.get("input_limit")&&""!=String(this.model.get("input_limit")).trim()){var n=jQuery(this.el).children(".nf-input-limit");this.inputLimitView=new t({el:n,model:this.model}),n.attr("aria-live","polite"),n.attr("role","status"),n.attr("aria-relevant","additions"),n.attr("aria-atomic",!0)}},changeError:function(){this.errorCollectionView.render()}})}),i("views/fieldRepeaterFieldLayout",["views/fieldItem","views/beforeField","views/afterField"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model})))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("views/fieldRepeaterFieldCollection",["views/fieldRepeaterFieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("views/fieldRepeaterSetLayout",["views/fieldRepeaterFieldCollection"],function(e){return Marionette.LayoutView.extend({tagName:"fieldset",template:"#tmpl-nf-field-repeater-set",regions:{fields:".nf-repeater-fieldset"},onRender:function(){this.fields.show(new e({collection:this.model.get("fields")}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"}}},events:{"click .nf-remove-fieldset":"removeSet"},removeSet:function(){nfRadio.channel("field-repeater").trigger("remove:fieldset",this.model)}})}),i("views/fieldRepeaterSetCollection",["views/fieldRepeaterSetLayout"],function(e){return Marionette.CollectionView.extend({tagName:"div",childView:e})}),i("views/fieldRepeaterLayout",["views/fieldRepeaterSetCollection"],function(e){return Marionette.LayoutView.extend({tagName:"div",template:"#tmpl-nf-field-repeater",regions:{sets:".nf-repeater-fieldsets"},initialize:function(){this.collection=this.model.get("sets"),this.listenTo(nfRadio.channel("field-repeater"),"rerender:fieldsets",this.render)},onRender:function(){this.sets.show(new e({collection:this.collection}))},templateHelpers:function(){return{maybeFilterHTML:function(){return void 0!==nfFrontEnd.filter_esc_status?nfFrontEnd.filter_esc_status:"false"},renderDescText:function(){if(void 0===this.desc_text)return"";var e,t,i,n,r=document.createElement("p");return r.innerHTML=this.desc_text,0==String(r.innerText).trim().length?"":(t=document.createTextNode(this.desc_text),(e=document.createElement("p")).appendChild(t),0!=String(jQuery(e).text()).trim().length?(i=document.createRange().createContextualFragment(this.desc_text),(n=document.createElement("div")).classList.add("nf-field-description"),n.appendChild(i),n.outerHTML):"")}}},events:{"click .nf-add-fieldset":"addSet"},addSet:function(){nfRadio.channel("field-repeater").trigger("add:fieldset",this.model.id)},beforeSubmit:function(){this.collection.beforeSubmit(this.model.get("sets"))}})}),i("views/fieldLayout",["views/fieldItem","views/beforeField","views/afterField","views/fieldRepeaterLayout"],function(e,t,i,n){return Marionette.LayoutView.extend({tagName:"nf-field",regions:{beforeField:".nf-before-field",field:".nf-field",afterField:".nf-after-field"},initialize:function(){this.listenTo(this.model,"change:visible",this.render,this)},getTemplate:function(){return this.model.get("visible")?"#tmpl-nf-field-layout":"#tmpl-nf-empty"},onRender:function(){this.model.get("visible")&&("repeater"==this.model.get("type")?this.field.show(new n({model:this.model})):(this.beforeField.show(new t({model:this.model})),this.field.show(new e({model:this.model})),this.afterField.show(new i({model:this.model}))))},templateHelpers:function(){return{renderContainerClass:function(){var e=" label-"+this.label_pos+" ";return void 0!==this.desc_pos&&(e+="desc-"+this.desc_pos+" "),void 0!==this.container_class&&0<String(this.container_class).trim().length&&(e+=this.container_class+" "),this.type!==this.parentType&&(e+=" "+this.parentType+"-container"),e}}}})}),i("controllers/loadViews",["views/fieldItem","views/fieldLayout"],function(e,t){return Marionette.Object.extend({initialize:function(){nfRadio.channel("views").reply("get:fieldItem",this.getFieldItem),nfRadio.channel("views").reply("get:fieldLayout",this.getFieldLayout)},getFieldItem:function(t){return e},getFieldLayout:function(){return t}})}),i("controllers/formErrors",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"add:error",this.addError),this.listenTo(nfRadio.channel("fields"),"remove:error",this.removeError),nfRadio.channel("form").reply("get:errors",this.getFormErrors)},addError:function(e,t,i){var n=nfRadio.channel("app").request("get:form",e.get("formID"));void 0===n.get("fieldErrors")[e.get("id")]&&(n.get("fieldErrors")[e.get("id")]={}),n.get("fieldErrors")[e.get("id")][t]=i,nfRadio.channel("form-"+e.get("formID")).request("add:error","field-errors",n.get("settings").formErrorsCorrectErrors)},removeError:function(e,t){var i=nfRadio.channel("app").request("get:form",e.get("formID"));i.get("fieldErrors")[e.get("id")]=_.omit(i.get("fieldErrors")[e.get("id")],t),0==_.size(i.get("fieldErrors")[e.get("id")])&&delete i.get("fieldErrors")[e.get("id")],0==_.size(i.get("fieldErrors"))&&nfRadio.channel("form-"+e.get("formID")).request("remove:error","field-errors")},getFormErrors:function(e){var t=nfRadio.channel("app").request("get:form",e),i=!1;return t&&0!==t.get("errors").length&&_.each(t.get("errors").models,function(e){(i=i||{})[e.get("id")]=e.get("msg")}),i}})}),i("controllers/submit",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"init:model",this.registerSubmitHandler)},registerSubmitHandler:function(e){nfRadio.channel("form-"+e.get("id")).reply("submit",this.submit)},submit:function(e){nfRadio.channel("forms").trigger("before:submit",e),nfRadio.channel("form-"+e.get("id")).trigger("before:submit",e);var t=nfRadio.channel("forms").request("maybe:validate",e);if(!1!==t&&(_.each(e.get("fields").models,function(e){e.set("clean",!1)}),e.get("formContentData").validateFields()),0==nfRadio.channel("form-"+e.get("id")).request("maybe:submit",e))return nfRadio.channel("forms").trigger("submit:cancel",e),void nfRadio.channel("form-"+e.get("id")).trigger("submit:cancel",e);if(!1!==t){var i=_.filter(e.get("errors").models,function(e){return"invalid_email"!=e.get("id")&&"email_not_sent"!=e.get("id")});if(0!=_.size(i))return nfRadio.channel("forms").trigger("submit:failed",e),nfRadio.channel("form-"+e.get("id")).trigger("submit:failed",e),!1}nfRadio.channel("forms").trigger("after:submitValidation",e),nfRadio.channel("form-"+e.get("id")).trigger("after:submitValidation",e);var n=e.get("id"),r={};_.each(e.get("fields").models,function(e){var t={value:e.get("value"),id:e.get("id")};r[e.get("id")]=nfRadio.channel(e.get("type")).request("get:submitData",t,e)||t});var o=e.get("extra"),a=e.get("settings");delete a.formContentData;var l=JSON.stringify({id:n,fields:r,settings:a,extra:o}),s={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nonce_ts:nfFrontEnd.nonce_ts,formData:l};jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:s,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n),jQuery(document).trigger("nfFormSubmitResponse",{response:r,id:e.get("id")})}catch(e){console.log(e),console.log("Parse Error"),console.log(e)}},error:function(t,i,n){console.log("ERRORS: "+n),console.log(t);try{var r=jQuery.parseJSON(t.responseText);nfRadio.channel("forms").trigger("submit:response",r,i,t,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,t)}catch(i){console.log("Parse Error: "+t.responseText),nfRadio.channel("form-"+e.get("id")).request("add:error","parse-response-ERROR",n)}}})}})}),i("views/fieldCollection",["views/fieldLayout"],function(e){return Marionette.CollectionView.extend({tagName:"nf-fields-wrap",childView:e})}),i("controllers/defaultFilters",["views/fieldCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("form"),"before:filterData",this.registerDefaultDataFilter)},registerDefaultDataFilter:function(e){nfRadio.channel("formContent").request("add:loadFilter",this.defaultFormContentLoad,10,this),nfRadio.channel("formContent").request("add:viewFilter",this.defaultFormContentView,10,this)},defaultFormContentLoad:function(e,i,n){var r=i.get("fields"),o=nfRadio.channel("formContent").request("get:loadFilters");if(1==_.without(o,void 0).length||void 0===e||!0==e instanceof Backbone.Collection)return i.get("fields");var a=_.map(e,function(e){return i.get("fields").findWhere({key:e})},this),l=new t(a);return r.on("reset",function(e){var t=[];l.each(function(i){"submit"!=i.get("type")?t.push(e.findWhere({key:i.get("key")})):t.push(i)}),l.options={formModel:i},l.reset(t)}),l},defaultFormContentView:function(){return e}})}),i("controllers/uniqueFieldError",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("fields"),"change:modelValue",this.removeError),this.listenTo(nfRadio.channel("fields"),"keyup:field",this.removeError),this.listenTo(nfRadio.channel("fields"),"blur:field",this.removeError)},removeError:function(e,t){t=t||e,nfRadio.channel("fields").request("remove:error",t.get("id"),"unique_field")}})});let n=[];i("models/fieldRepeaterSetModel",[],function(){return Backbone.Model.extend({initialize:function(e,t){this.repeaterFieldModel=t.repeaterFieldModel,this.set("label",this.repeaterFieldModel.get("label")),e&&t&&this.initAllRepeaterFieldsModels(e,t),nfRadio.channel("field-repeater").reply("get:repeaterFields",this.getRepeaterFields,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldById",this.getRepeaterFieldById,this),nfRadio.channel("field-repeater").reply("get:repeaterModels",this.getAllRepeaterFieldsModels,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsetsByForm",this.getAllFieldsetsByForm,this),nfRadio.channel("field-repeater").reply("get:repeaterFieldsModelsArrayByForm",this.getAllFieldsModelsArrayByForm,this),this.listenTo(nfRadio.channel("field-repeater"),"set:repeaterModels",this.setAllRepeaterFieldsModels),this.listenTo(nfRadio.channel("field-repeater"),"set:value",this.setAllRepeatersValues)},setAllRepeaterFieldsModels:function(){this.set("repeaterFieldsetsModels",n),this.allRepeatersFieldsetsModels=n},initAllRepeaterFieldsModels:function(e,t){const i=t.repeaterFieldModel.get("formID"),r=t.repeaterFieldModel.get("id"),o=e.fields.models;let a=n.find(e=>e.id===r&&e.form===i);a?a.fields=a.fields.concat(o):n.push({form:i,id:r,fields:o}),this.setAllRepeaterFieldsModels()},getAllRepeaterFieldsModels:function(){return n},getAllFieldsetsByForm:function(e){const t=this.getAllRepeaterFieldsModels().filter(t=>t.form===e);return t},getAllFieldsModelsArrayByForm:function(e){const t=this.getAllFieldsetsByForm(e);let i=[];return t.map(e=>{i=i.concat(e.fields)}),i},getRepeaterFields:function(e){const t=this.getAllRepeaterFieldsModels();let i=t.find(t=>String(t.id)===String(e));return void 0===i&&(i=this.reverseResearchFieldsetModel(e,t)),i},reverseResearchFieldsetModel:function(e,t){let i;return _.each(t,function(t){_.each(t.fields,function(n){String(n.id).startsWith(e)&&(i=t)})}),i},getRepeaterFieldById:function(e){const t=String(e).split(".")[0],i=this.getRepeaterFields(t);if(void 0===i)return;return i.fields.find(t=>t.id===e)},setAllRepeatersValues:function(){const e=this.getAllRepeaterFieldsModels();e.length>0&&_.each(e,function(e){let t=e.fields,i=nfRadio.channel("fields").request("get:field",e.id);if(t.length>0){let e={};_.each(t,function(t){let i=t.get("value"),n=t.get("id");if(n.split("_").length>2){let t=n.split("_");t[1]=t[1].split(".")[1];let i=t[0]+"."+t[1]+"_"+t[2];delete e[n],n=i}e[n]={value:i,id:n},"date"!==t.get("type")||"string"!=typeof i||"date_and_time"!==t.get("date_mode")&&"time_only"!==t.get("date_mode")||(e[n].value={date:i,hour:t.attributes.selected_hour,minute:t.attributes.selected_minute,ampm:t.attributes.selected_ampm}),"file_upload"===t.get("type")&&t.get("value")&&(e[n].files=t.attributes.files)}),i.set("isUpdated",!1),nfRadio.channel("nfAdmin").request("update:field",i,e)}})}})}),i("models/fieldRepeaterSetCollection",["models/fieldRepeaterSetModel","models/fieldCollection"],function(e,t){return Backbone.Collection.extend({model:e,initialize:function(e,t){this.options=t,this.listenTo(nfRadio.channel("field-repeater"),"sort:fieldsets",this.sortIDs),this.listenTo(nfRadio.channel("field-repeater"),"remove:fieldset",this.removeSet),this.listenTo(nfRadio.channel("field-repeater"),"add:fieldset",this.addSet),nfRadio.channel("field-repeater").reply("get:fieldsets",this.getFieldSets,this)},addSet:function(e=!1){let i;if(e){const n=this.options.repeaterFieldModel.id===e&&this.options.repeaterFieldModel;if(i=n,n){let e=new t(this.options.templateFields,{formModel:this.options.formModel,repeaterFieldModel:n});this.add({fields:e},{repeaterFieldModel:n})}}this.sortIDs(),nfRadio.channel("field-repeater").trigger("fieldset:added",i)},removeSet:function(e){this.removeRequiredFieldsErrors(e);const t=e.repeaterFieldModel.get("formID"),i=e.repeaterFieldModel.get("id"),r=n.find(e=>e.id===i&&e.form===t);if(r){let t=[];_.each(r.fields,(i,n)=>{void 0!==i&&_.each(e.get("fields").models,n=>{const r=void 0!==i.id?i.id:i.get("id");n.id===r&&(delete e.repeaterFieldModel.get("value")[n.id],t.push(r))})}),r.fields=_.reject(r.fields,e=>void 0===e||!!t.includes(e.id)),nfRadio.channel("field-repeater").trigger("set:repeaterModels")}this.remove(e),e.destroy(),this.sortIDs(),nfRadio.channel("field-repeater").trigger("set:value")},removeRequiredFieldsErrors:function(e){let t=e.get("fields");_.each(t.models,function(e){nfRadio.channel("fields").request("remove:error",e.get("id"),"required-error")})},getFieldsets:function(){return this.models},checkTimeField:function(e){const t=e.get("id"),i=document.getElementById("hour-select-"+t),n=document.getElementById("minute-select-"+t),r=0===e.attributes.hours_24?"12":"00";if(!i||!n)return;n.value=void 0!==e.attributes.selected_minute?e.attributes.selected_minute:"00",i.value=void 0!==e.attributes.selected_hour?e.attributes.selected_hour:r;const o=document.getElementById("nf-field-"+t+"-wrap").querySelector("#ampm-select");o&&(o.value=void 0!==e.attributes.selected_ampm?e.attributes.selected_ampm:"am")},sortIDs:function(){const e=this.getFieldsets(),t=[];_.each(e,function(e,i){let n=e.get("fields");e.set("index",i+1),_.each(n.models,function(e){const n=String(e.id).split("_")[0],r=String(n).split(".").length>1&&String(n).split(".").pop();if(!r)return;const o=e.collection.options.repeaterFieldModel.id+"."+r+"_"+i;e.set("id",o),"date"!==e.get("type")||"date_and_time"!==e.get("date_mode")&&"time_only"!==e.get("date_mode")||t.push(e)})}),nfRadio.channel("field-repeater").trigger("rerender:fieldsets"),t.forEach(e=>{this.checkTimeField(e)})}})}),i("controllers/fieldRepeater",["models/fieldRepeaterSetCollection","models/fieldCollection"],function(e,t){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("repeater"),"init:model",this.initRepeater)},initRepeater:function(i){if(void 0===i.collection.options.formModel)return!1;let n=new t(i.get("fields"),{formModel:i.collection.options.formModel,repeaterFieldModel:i});i.set("sets",new e([{fields:n}],{templateFields:i.get("fields"),formModel:i.collection.options.formModel,repeaterFieldModel:i})),nfRadio.channel("field-repeater").trigger("sort:fieldsets")}})}),i("controllers/actionGA",[],function(){return Marionette.Object.extend({initialize:function(){this.listenTo(nfRadio.channel("forms"),"submit:response",this.actionSendGaEvent)},actionSendGaEvent:function(e){void 0!==e.data.actions&&void 0!==e.data.actions.googleanalytics&&e.data.actions.googleanalytics.forEach(t=>{const i=t.event_name;if(void 0!==i)if(void 0!==t.method_type&&"ga4"===t.method_type)if("function"==typeof gtag){const t={event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};gtag("event",i,t)}else"object"==typeof dataLayer?console.warn("gtag isn't defined. But GTM was detected, did you mean to use GTM in the action settings?"):console.warn("gtag isn't defined. Please make sure you have GA4 installed on your site.");else if(void 0!==t.method_type&&"gtm"===t.method_type)if("object"==typeof dataLayer){const t={event:i,event_category:"form_submit",event_label:"ninja_forms_submit",form_id:e.data.form_id};dataLayer.push(t)}else"function"==typeof gtag?console.warn("GTM isn't defined. But GA4 was detected, did you mean to use GA4 in the action settings?"):console.warn("GTM isn't defined. Please make sure you have GTM installed on your site.");else console.warn("GTM and gtag aren't defined. Please make sure you have GTM or GA4 installed on your site.");else console.warn("No event name defined in the GA4 action settings. Please define an event name.")})}})}),i("controllers/loadControllers",["controllers/formData","controllers/fieldError","controllers/changeField","controllers/changeEmail","controllers/changeDate","controllers/fieldCheckbox","controllers/fieldCheckboxList","controllers/fieldImageList","controllers/fieldRadio","controllers/fieldNumber","controllers/mirrorField","controllers/confirmField","controllers/updateFieldModel","controllers/submitButton","controllers/submitDebug","controllers/getFormErrors","controllers/validateRequired","controllers/submitError","controllers/actionRedirect","controllers/actionSuccess","controllers/fieldSelect","controllers/coreSubmitResponse","controllers/fieldProduct","controllers/fieldTotal","controllers/fieldQuantity","controllers/calculations","controllers/dateBackwardsCompat","controllers/fieldDate","controllers/fieldRecaptcha","controllers/fieldRecaptchaV3","controllers/fieldHTML","controllers/helpText","controllers/fieldTextbox","controllers/fieldTextareaRTE","controllers/fieldStarRating","controllers/fieldTerms","controllers/formContentFilters","controllers/loadViews","controllers/formErrors","controllers/submit","controllers/defaultFilters","controllers/uniqueFieldError","controllers/fieldRepeater","controllers/actionGA"],function(e,t,i,n,r,o,a,l,s,d,c,f,u,h,m,g,p,v,y,b,R,_,w,F,x,M,C,k,T,E,j,D,q,V,I,O,Q,S,L,A,N,z,B,Y){return Marionette.Object.extend({initialize:function(){new S,new L,new A,new o,new a,new l,new s,new d,new R,new w,new F,new x,new T,new E,new j,new D,new q,new V,new I,new O,new Q,new z,new B,new t,new i,new n,new r,new c,new f,new u,new h,new m,new g,new p,new v,new y,new b,new Y,new _,new M,new N,new C,new k,new e}})}),i("views/beforeForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-form"})}),i("views/formErrorItem",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-error",onRender:function(){}})}),i("views/formErrorCollection",["views/formErrorItem"],function(e){return Marionette.CollectionView.extend({tagName:"nf-errors",childView:e})}),i("views/honeyPot",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-form-hp",events:{"keyup .nf-field-hp":"maybeError","change .nf-field-hp":"maybeError"},maybeError:function(e){if(0==jQuery(e.target).val().length)nfRadio.channel("form-"+this.model.get("id")).request("remove:error","honeyPot");else{var t=nfRadio.channel("app").request("get:form",this.model.get("id"));nfRadio.channel("form-"+this.model.get("id")).request("add:error","honeyPot",t.get("settings").honeypotHoneypotError)}}})}),i("views/afterFormContent",["views/formErrorCollection","views/honeyPot"],function(e,t){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-after-fields",regions:{errors:".nf-form-errors",hp:".nf-form-hp"},onShow:function(){this.errors.show(new e({collection:this.model.get("errors")})),this.hp.show(new t({model:this.model}))}})}),i("views/beforeFormContent",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-before-fields",templateHelpers:function(){return{renderFieldsMarkedRequired:function(){return this.fields.filter({required:1}).length?this.fieldsMarkedRequired:""}}}})}),i("views/formLayout",["views/afterFormContent","views/beforeFormContent","models/fieldCollection"],function(e,t,i){return Marionette.LayoutView.extend({tagName:"nf-section",template:"#tmpl-nf-form-layout",regions:{beforeFormContent:".nf-before-form-content",formContent:".nf-form-content",afterFormContent:".nf-after-form-content"},initialize:function(){nfRadio.channel("form-"+this.model.get("id")).reply("get:el",this.getEl,this),this.listenTo(this.model,"hide",this.hide)},onRender:function(){this.$el=this.$el.children(),this.$el.unwrap(),this.setElement(this.$el)},onShow:function(){this.beforeFormContent.show(new t({model:this.model}));var i=this.model.get("formContentData"),n=nfRadio.channel("formContent").request("get:viewFilters"),r=_.without(n,void 0),o=_.first(r);formContentView=o();var a={data:i,formModel:this.model};!1!=i instanceof Backbone.Collection?a.collection=i:!1!=i instanceof Backbone.Model&&(a.model=i),this.formContent.show(new formContentView(a)),this.afterFormContent.show(new e({model:this.model}))},getEl:function(){return this.el},templateHelpers:function(){return{renderClasses:function(){return""}}},hide:function(){jQuery(this.el).hide()}})}),i("views/afterForm",[],function(){return Marionette.ItemView.extend({tagName:"nf-section",template:"#tmpl-nf-after-form"})}),i("views/mainLayout",["views/beforeForm","views/formLayout","views/afterForm"],function(e,t,i){return Marionette.LayoutView.extend({template:"#tmpl-nf-layout",regions:{responseMsg:".nf-response-msg",beforeForm:".nf-before-form",formLayout:".nf-form-layout",afterForm:".nf-after-form"},initialize:function(){this.$el=jQuery("#nf-form-"+this.model.id+"-cont"),this.el="#nf-form-"+this.model.id+"-cont",this.render(),this.beforeForm.show(new e({model:this.model})),this.formLayout.show(new t({model:this.model,fieldCollection:this.options.fieldCollection})),this.afterForm.show(new i({model:this.model})),this.listenTo(this.model,"hide",this.hide)},hide:function(){jQuery(this.el).find(".nf-form-title").hide()}})});var r=function(e,t,i){void 0!==e&&0<e.length?this.locale=e.split("_").join("-"):this.locale="en-US",this.thousands_sep=t||",",this.decimal_sep=i||".",this.uniqueElememts=function(e,t,i){return i.indexOf(e)===t},this.numberDecoder=function(e){var t="",i=!1;"-"===(e=e.toString()).charAt(0)&&(i=!0,e=e.replace("-",""));var n=(e=(e=e.replace(/\s/g,"")).replace(/ /g,"")).split("").filter(function(e){return!e.match(/[0-9]/)}),r=n.filter(this.uniqueElememts);switch(r.length){case 0:t=e;break;case 1:var o="";if(1==n.length)separator=n.pop(),o=3==e.split(separator).pop().length&&separator==this.thousands_sep?"":".";else separator=r.pop();t=e.split(separator).join(o);break;case 2:var a,l=r[0];a="."===l?new RegExp("[.]","g"):new RegExp(l,"g"),t=e.replace(a,"");var s,d=r[1];s="."===d?new RegExp("[.]","g"):new RegExp(d,"g"),t=t.replace(s,".");break;default:return"NaN"}return i&&(t="-"+t),this.debug("Number Decoder "+e+" -> "+t),t},this.numberEncoder=function(e,t){return e=this.numberDecoder(e),Intl.NumberFormat(this.locale,{minimumFractionDigits:t,maximumFractionDigits:t}).format(e)},this.debug=function(e){window.nfLocaleConverterDebug&&console.log(e)}};i("../nfLocaleConverter",function(){}),void 0!==nfInlineVars.nfForms&&(window.nfForms=nfInlineVars.nfForms),function(e){var t=e.fn.val;e.fn.val=function(){var i;arguments.length>0&&(i=t.apply(this,[]));var n=t.apply(this,arguments);return arguments.length>0&&i!=t.apply(this,[])&&e(this).hasClass("nf-element")&&e(this).change(),n}}(jQuery),document.addEventListener("DOMContentLoaded",function(){t(["models/formCollection","models/formModel","models/fieldCollection","controllers/loadControllers","views/mainLayout","../nfLocaleConverter"],function(e,t,i,n,o){if("undefined"!=typeof nfForms){var a=Marionette.Application.extend({forms:{},initialize:function(e){var t=this;Marionette.Renderer.render=function(e,i){return(e=t.template(e))(i)},this.urlParameters=_.object(_.compact(_.map(location.search.slice(1).split("&"),function(e){if(e)return e.split("=")}))),void 0!==this.urlParameters.nf_resume&&this.listenTo(nfRadio.channel("form-"+this.urlParameters.nf_resume),"loaded",this.restart),nfRadio.channel("app").reply("locale:decodeNumber",this.decodeNumber),nfRadio.channel("app").reply("locale:encodeNumber",this.encodeNumber);new n;nfRadio.channel("app").trigger("after:loadControllers"),nfRadio.channel("app").reply("get:template",this.template)},onStart:function(){var e=nfRadio.channel("app").request("get:forms");_.each(e.models,function(e,t){var i=new o({model:e,fieldCollection:e.get("fields")});nfRadio.channel("form").trigger("render:view",i),jQuery(document).trigger("nfFormReady",i)})},restart:function(e){if(void 0!==this.urlParameters.nf_resume){var t={action:"nf_ajax_submit",security:nfFrontEnd.ajaxNonce,nf_resume:this.urlParameters};nfRadio.channel("form-"+e.get("id")).trigger("disable:submit"),nfRadio.channel("form-"+e.get("id")).trigger("processingLabel"),this.listenTo(nfRadio.channel("form"),"render:view",function(){jQuery("#nf-form-"+e.get("id")+"-cont .nf-field-container:not(.submit-container)").hide()}),jQuery.ajax({url:nfFrontEnd.adminAjax,type:"POST",data:t,cache:!1,success:function(t,i,n){try{var r=t;nfRadio.channel("forms").trigger("submit:response",r,i,n,e.get("id")),nfRadio.channel("form-"+e.get("id")).trigger("submit:response",r,i,n)}catch(e){console.log("Parse Error")}},error:function(e,t,i){console.log("ERRORS: "+t),nfRadio.channel("forms").trigger("submit:response","error",t,e,i)}})}},template:function(e){return e.startsWith("script")||(e="script"+e),_.template(jQuery(e).html(),{evaluate:/<#([\s\S]+?)#>/g,interpolate:/\{\{\{([\s\S]+?)\}\}\}/g,escape:/\{\{([^\}]+?)\}\}(?!\})/g,variable:"data"})},encodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberEncoder(e)},decodeNumber:function(e){return new r(nfi18n.siteLocale,nfi18n.thousands_sep,nfi18n.decimal_point).numberDecoder(e)}});(new a).start()}else jQuery(".nf-form-cont").empty()})}),i("main",function(){})}(); 2 2 //# sourceMappingURL=front-end.js.map -
ninja-forms/trunk/assets/js/min/front-end.js.map
r3320170 r3323843 1 {"version":3,"sources":["../../../config-wrap-start-default.js","../../../node_modules/almond/almond.js","models/fieldErrorModel.js","models/fieldErrorCollection.js","models/fieldModel.js","models/fieldCollection.js","models/formErrorModel.js","models/formErrorCollection.js","models/formModel.js","models/formCollection.js","controllers/formData.js","controllers/fieldError.js","controllers/changeField.js","controllers/changeEmail.js","controllers/changeDate.js","controllers/fieldCheckbox.js","controllers/fieldCheckboxList.js","controllers/fieldImageList.js","controllers/fieldRadio.js","controllers/fieldNumber.js","controllers/mirrorField.js","controllers/confirmField.js","controllers/updateFieldModel.js","controllers/submitButton.js","controllers/submitDebug.js","controllers/getFormErrors.js","controllers/validateRequired.js","controllers/submitError.js","controllers/actionRedirect.js","controllers/actionSuccess.js","controllers/fieldSelect.js","controllers/coreSubmitResponse.js","controllers/fieldProduct.js","controllers/fieldTotal.js","controllers/fieldQuantity.js","models/calcModel.js","models/calcCollection.js","controllers/calculations.js","controllers/dateBackwardsCompat.js","controllers/fieldDate.js","controllers/fieldRecaptcha.js","controllers/fieldRecaptchaV3.js","controllers/fieldHTML.js","controllers/helpText.js","controllers/fieldTextbox.js","controllers/fieldTextareaRTE.js","controllers/fieldStarRating.js","controllers/fieldTerms.js","controllers/formContentFilters.js","views/fieldItem.js","views/beforeField.js","views/fieldErrorItem.js","views/fieldErrorCollection.js","views/inputLimit.js","views/afterField.js","views/fieldRepeaterFieldLayout.js","views/fieldRepeaterFieldCollection.js","views/fieldRepeaterSetLayout.js","views/fieldRepeaterSetCollection.js","views/fieldRepeaterLayout.js","views/fieldLayout.js","controllers/loadViews.js","controllers/formErrors.js","controllers/submit.js","views/fieldCollection.js","controllers/defaultFilters.js","controllers/uniqueFieldError.js","models/fieldRepeaterSetModel.js","models/fieldRepeaterSetCollection.js","controllers/fieldRepeater.js","controllers/actionGA.js","controllers/loadControllers.js","views/beforeForm.js","views/formErrorItem.js","views/formErrorCollection.js","views/honeyPot.js","views/afterFormContent.js","views/beforeFormContent.js","views/formLayout.js","views/afterForm.js","views/mainLayout.js","../nfLocaleConverter.js","main.js"],"names":["requirejs","require","define","undef","main","req","makeMap","handlers","defined","waiting","config","defining","hasOwn","Object","prototype","hasOwnProperty","aps","slice","jsSuffixRegExp","hasProp","obj","prop","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","starMap","length","nodeIdCompat","test","replace","charAt","concat","splice","join","makeRequire","relName","forceSync","args","arguments","push","apply","makeLoad","depName","value","callDep","Error","splitPrefix","prefix","index","indexOf","substring","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","Backbone","Model","extend","errorModel","Collection","model","fieldErrorCollection","defaults","placeholder","label_pos","classes","reRender","mirror_field","confirm_field","clean","disabled","visible","invalid","initialize","type","this","get","set","collection","options","formModel","listenTo","nfRadio","channel","resetModel","bind","changeModel","changeValue","listimageGet","listimageSet","trigger","formLoaded","beforeSubmit","attr","attributes","addWrapperClass","cl","removeWrapperClass","setInvalid","getValue","fieldModel","comparator","models","on","fieldCollection","reply","getFirstFieldByOrder","validateFields","_","each","repeaterModels","request","repeaterFieldModel","size","keys","showFields","invoke","hideFields","ids_array","targetID","order","FieldCollection","ErrorCollection","beforeForm","afterForm","beforeFields","afterFields","wrapper_class","element_class","hp","fieldErrors","extra","setting","formContentData","formContentLoadFilters","sortedArray","without","first","getFieldByKey","addError","removeError","getExtra","addExtra","removeExtra","getForm","key","findWhere","msg","add","errors","remove","extraData","FormModel","FormCollection","Marionette","nfForms","getForms","getField","form","String","fieldErrorModel","getError","targetError","changeField","blurField","el","val","radioChannel","emailReg","errorID","onChangeModelValue","emailKeyup","onBlurField","fieldID","emailChange","changeEmailErrorMsg","keyCode","dateKeyup","changeHoursMinutes","original","moment","locale","dateChange","format","isDateValid","changeDateErrorMsg","container","target","closest","selected_hour","find","selected_minute","selected_ampm"," fieldId","search","setValue","document","querySelector","parseDate","_flatpickr","timestamp","getTime","isNaN","parsedDate","Date","formatDate","registerRenderClasses","validateRequired","validateModelData","beforeUpdateField","getCalcValue","addClass","removeClass","checked","calcValue","customClasses","customLabelClasses","maybeChecked","default_value","register","renderOptions","renderOtherText","selected","filter","opt","savedVal","Array","isArray","html","valueFound","option","label","nfFrontEnd","filter_esc_status","escape","isSelected","required","maybeFilterHTML","template","show_other","data","currentValue","calc_value","tmp_opt","Number","calc","parent","optionArray","valueIndex","clone","allow_multi_select","old_classname","image_type","list_orientation","flex_direction","that","num_columns","parseInt","current_column","current_row","image_options","image","show_option_labels","styles","changeModelValue","updateCheckedClass","maybeMinDefault","validateEntry","min","$el","floatVal","parseFloat","max","step","fieldNumberNumMinError","fieldNumberNumMaxError","testVal","testStep","factor","Math","pow","toFixed","fieldNumberIncrementBy","listeningModel","registerMirror","targetModel","registerConfirm","confirmKeyup","confirmModel","formModal","registerConfirmListeners","confirmID","confirmFieldErrorMsg","compareValue","confirmValue","updateField","submitButton","bound","registerHandlers","click","resetLabel","maybeEnable","maybeDisable","processingLabel","response","nonce","new_nonce","nonce_ts","submitDebug","textStatus","jqXHR","formID","debug","debugMessages","createElement","message","messageText","createTextNode","appendChild","console","log","getFormErrors","error","field","validateKeyup","customReqValidation","defaultReqValidation","maskPlaceholder","getMask","trim","valid","maybeError","mask","nfi18n","currencySymbol","validateRequiredField","submitErrors","focusFirstInvalidInput","ajaxNonce","fields","slug","last","style","show","getElementById","focus","actionRedirect","halt","redirect","window","location","actions","actionSubmit","success_message","form_id","read","top_of_success_message","offset","top","bottom_of_success_message","outerHeight","bottom_of_screen","scrollTop","height","top_of_screen","animate","renderOtherAttributes","otherAttributes","multi_size","settings","clear_complete","reset","hide_complete","renderProductQuantity","renderProduct","product_type","product_use_quantity","totalModel","productTotals","registerShipping","onFormLoaded","onChangeProduct","onChangeQuantity","shippingModel","shippingCost","fieldModels","productFields","quantityFields","productID","product","productPrice","updateTotal","newTotal","productField","registerQuantity","changeCalc","targetCalcModel","CalcModel","dec","toString","getCalc","CalcCollection","calcs","displayFields","registerCalcs","resetCalcs","use_merge_tags","calculations","fieldType","initDisplayField","updateDisplayFields","init","calcCollection","calcModel","setupCalc","eq","eqValues","match","RegExp","updateCalcFields","replaceKey","localeDecodeEquation","mexp","Mexp","eval","localeConverter","nfLocaleConverter","siteLocale","thousands_sep","decimal_point","machineNumber","numberDecoder","formattedNumber","numberEncoder","isNumeric","tag","reTag","calcTag","reCalcTag","replaceAllKeys","re","calcName","spans","spanVar","tmpCalcTag","applyLocaleFormatting","number","result","expression","pattern","forEach","character","nfCalculationsDebug","Radio","dateBackwardsCompat","dateObject","pikaday","_o","disableDayFn","i18n","firstDay","firstDayOfWeek","weekdays","longhand","weekdaysShort","shorthand","months","text","initModel","initDatepicker","registerFunctions","renderHourOptions","renderMinuteOptions","maybeRenderAMPM","hours_options","minutes_options","hours_24","view","hide","dateFormat","convertDateFormat","dateSettings","onReady","selectedDates","datestr","altInput","setAttribute","altFormat","ariaDateFormat","mode","allowInput","disableMobile","minDate","getMinDate","maxDate","getMaxDate","nfCustomLocale","checkCustomLocale","filteredDatePickerSettings","flatpickr","defaultDate","setDate","includes","isSameDay","isObject","date_value","dataset","hour","minute","ampm","current_value","date","yearRangeStart","yearRangeEnd","lookup","default","date_mode","customLocale","monthsShort","startOfWeek","isEmpty","date1","date2","d1","d2","setHours","initRecaptcha","resetRecaptcha","updateResponse","recaptchaID","grecaptcha","processRecaptcha","setInterval","ready","execute","action","then","token","layoutView","submitFieldID","consent","nf_check_recaptcha_consent","recaptchaConsentMissing","nf_build_default_consent_action","services","actionElement","innerText","recaptchaConsentEvent","nf_consent_link_event","CustomEvent","detail","element","dispatchEvent","genericErrorElements","getElementsByClassName","append","htmlFields","trackedMergeTags","setupFieldMergeTagTracking","mergeTags","mergeTag","fieldKey","updateFieldMergeTags","htmlFieldModel","fieldValue","displayRepeaterData","repeaterFieldIDs","returnHTML","passedFields","pop","initHelpText","jBox","theme","content","closeOnMouseleave","closeOnClick","close","currencySymbolDecoded","initTextareaRTEs","clickExtra","meta_image_frame","currentContext","summernote","icons","align","alignCenter","alignJustify","alignLeft","alignRight","indent","outdent","bold","caret","code","eraser","italic","link","unlink","magic","minus","orderedlist","redo","square","table","underline","undo","unorderedlist","toolbar","userSettings","uid","buttons","linkButton","context","mediaButton","codemirror","lineNumbers","prettifyHtml","callbacks","onChange","linkMenu","next","replaceWith","class","innerHTML","ui","linkDropdown","buttonGroup","button","className","contents","tooltip","fieldTextareaRTEInsertLink","clickLinkButton","toggle","dropdown","children","render","fieldTextareaRTEInsertMedia","openMediaManager","open","wp","media","frames","title","fieldTextareaRTESelectAFile","media_attachment","state","toJSON","insertMedia","range","textEl","urlEl","isNewWindowEl","hasClass","url","isNewWindow","filename","initRating","renderRatings","rating","number_of_stars","num","htmlFragment","createRange","createContextualFragment","keyUpExtra","currentTarget","addOption","new_option","viewFilters","loadFilters","addViewFilter","addLoadFilter","getViewFilters","getLoadFilters","priority","ItemView","tagName","toggleAriaInvalid","JSON","stringify","onRender","unwrap","setElement","isInteger","isFinite","floor","charCodeAt","autoNumericOptions","digitGroupSeparator","decimalCharacter","modifyValueOnWheel","autoN_el","AutoNumeric","templateHelpers","renderElement","tmpl","element_templates","renderLabel","renderLabelClasses","renderPlaceholder","customPlaceholder","renderWrapClass","wrapClass","parentType","customWrapClass","renderClasses","maybeDisabled","disable_input","maybeRequired","maybeDisableAutocomplete","disable_browser_autocomplete","translateAutoCompletionType","maybeInputLimit","input_limit_type","input_limit","getHelpText","help_text","maybeRenderHelp","check_text_par","shouldRenderHelpText","icon","classList","hiddenHelpText","textContent","outerHTML","renderDescText","desc_text","check","checkText","descriptionText","fieldDescription","renderNumberDefault","renderCurrencyFormatting","currency_symbol","maybeRenderTime","events","fieldChange","fieldKeyup","fieldClick","extraClick","extraChange","fieldBlur","onAttach","fieldErrorItem","CollectionView","childView","updateCount","count","words","wordCount","charCount","limit","currentCount","InputLimitView","changeError","errorEl","errorCollectionView","inputLimitEl","inputLimitView","fieldItem","beforeField","afterField","LayoutView","regions","getTemplate","renderContainerClass","containerClass","desc_pos","container_class","fieldLayout","removeSet","repeaterSetLayout","repeaterSetCollection","sets","addSet","repeaterFieldLayout","fieldItemView","fieldLayoutView","getFieldItem","getFieldLayout","errorMsg","formErrorsCorrectErrors","omit","registerSubmitHandler","submit","validate","blockingFormErrors","fieldDataDefaults","formData","security","ajax","adminAjax","cache","success","errorThrown","parseJSON","responseText","FieldCollectionView","registerDefaultDataFilter","defaultFormContentLoad","defaultFormContentView","currentFieldCollection","resetFields","nfAllRepeaterFieldsModels","initAllRepeaterFieldsModels","getRepeaterFields","getRepeaterFieldById","getAllRepeaterFieldsModels","getAllFieldsetsByForm","getAllFieldsModelsArrayByForm","setAllRepeaterFieldsModels","setAllRepeatersValues","allRepeatersFieldsetsModels","repeaterID","currentModels","isModelSet","thisFormModels","singleArray","allModels","reverseResearchFieldsetModel","fieldsetModel","startsWith","fieldObject","repeaters","repeater","repeaterFieldValue","idArray","newID","files","repeaterSetModel","sortIDs","getFieldSets","repeaterFieldID","templateFields","fieldset","removeRequiredFieldsErrors","isRepeaterModelSet","rep","fieldsetField","reject","destroy","getFieldsets","checkTimeField","hourEl","minEl","defaultHour","ampmEl","fieldsets","timeFields","modelIndex","cutEl","fieldIndex","initRepeater","actionSendGaEvent","googleanalytics","eventName","event_name","method_type","gtag","eventParams","event_category","event_label","dataLayer","warn","event","FormData","FieldError","ChangeField","ChangeEmail","ChangeDate","FieldCheckbox","FieldCheckboxList","FieldImageList","FieldRadio","FieldNumber","MirrorField","ConfirmField","UpdateFieldModel","SubmitButton","SubmitDebug","GetFormErrors","ValidateRequired","SubmitError","ActionRedirect","ActionSuccess","FieldSelect","CoreSubmitResponse","FieldProduct","FieldTotal","FieldQuantity","Calculations","DateBackwardsCompat","FieldDate","FieldRecaptcha","FieldRecaptchaV3","FieldHTML","HelpText","FieldTextbox","FieldTextareaRTE","FieldStarRating","FieldTerms","FormContentFilters","LoadViews","FormErrors","Submit","DefaultFilters","UniqueFieldError","FieldRepeater","ActionGA","formErrorItem","honeypotHoneypotError","HoneyPot","onShow","renderFieldsMarkedRequired","fieldsMarkedRequired","AfterFormContent","BeforeFormContent","beforeFormContent","formContent","afterFormContent","getEl","formContentViewFilters","formContentView","BeforeForm","FormLayout","AfterForm","responseMsg","formLayout","newLocale","decimal_sep","uniqueElememts","self","formatted","negative","separators","final_separators","replacer","separator","re_one","find_one","re_two","find_two","percision","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","nfLocaleConverterDebug","nfInlineVars","originalVal","fn","prev","change","addEventListener","formCollection","LoadControllers","mainLayout","NinjaForms","Application","forms","Renderer","urlParameters","object","compact","item","nf_resume","restart","decodeNumber","encodeNumber","onStart","evaluate","interpolate","variable","start","empty"],"mappings":"CAAA,WCQA,IAAAA,EAAAC,EAAAC,GACA,SAAAC,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAA,CAAA,EACAC,EAAA,CAAA,EACAC,EAAA,CAAA,EACAC,EAAA,CAAA,EACAC,EAAAC,OAAAC,UAAAC,eACAC,EAAA,GAAAC,MACAC,EAAA,QAEA,SAAAC,EAAAC,EAAAC,GACA,OAAAT,EAAAU,KAAAF,EAAAC,EACA,CAUA,SAAAE,EAAAC,EAAAC,GACA,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACAC,EAAAZ,GAAAA,EAAAa,MAAA,KACAC,EAAA7B,EAAA6B,IACAC,EAAAD,GAAAA,EAAA,MAAA,CAAA,EAGA,GAAAf,EAAA,CAwBA,IAtBAM,GADAN,EAAAA,EAAAc,MAAA,MACAG,OAAA,EAMA/B,EAAAgC,cAAAxB,EAAAyB,KAAAnB,EAAAM,MACAN,EAAAM,GAAAN,EAAAM,GAAAc,QAAA1B,EAAA,KAIA,MAAAM,EAAA,GAAAqB,OAAA,IAAAR,IAOAb,EADAa,EAAApB,MAAA,EAAAoB,EAAAI,OAAA,GACAK,OAAAtB,IAIAU,EAAA,EAAAA,EAAAV,EAAAiB,OAAAP,IAEA,GAAA,OADAE,EAAAZ,EAAAU,IAEAV,EAAAuB,OAAAb,EAAA,GACAA,GAAA,OACA,GAAA,OAAAE,EAAA,CAMA,GAAA,IAAAF,GAAA,IAAAA,GAAA,OAAAV,EAAA,IAAA,OAAAA,EAAAU,EAAA,GACA,SACAA,EAAA,IACAV,EAAAuB,OAAAb,EAAA,EAAA,GACAA,GAAA,EAEA,CAIAV,EAAAA,EAAAwB,KAAA,IACA,CAGA,IAAAX,GAAAG,IAAAD,EAAA,CAGA,IAAAL,GAFAR,EAAAF,EAAAc,MAAA,MAEAG,OAAAP,EAAA,EAAAA,GAAA,EAAA,CAGA,GAFAP,EAAAD,EAAAT,MAAA,EAAAiB,GAAAc,KAAA,KAEAX,EAGA,IAAAF,EAAAE,EAAAI,OAAAN,EAAA,EAAAA,GAAA,EAKA,IAJAP,EAAAW,EAAAF,EAAApB,MAAA,EAAAkB,GAAAa,KAAA,SAKApB,EAAAA,EAAAD,IACA,CAEAE,EAAAD,EACAG,EAAAG,EACA,KACA,CAKA,GAAAL,EACA,OAMAG,GAAAQ,GAAAA,EAAAb,KACAK,EAAAQ,EAAAb,GACAM,EAAAC,EAEA,EAEAL,GAAAG,IACAH,EAAAG,EACAD,EAAAE,GAGAJ,IACAH,EAAAqB,OAAA,EAAAhB,EAAAF,GACAL,EAAAE,EAAAsB,KAAA,KAEA,CAEA,OAAAxB,CACA,CAEA,SAAAyB,EAAAC,EAAAC,GACA,OAAA,WAIA,IAAAC,EAAApC,EAAAM,KAAA+B,UAAA,GAQA,MAHA,iBAAAD,EAAA,IAAA,IAAAA,EAAAX,QACAW,EAAAE,KAAA,MAEAjD,EAAAkD,MAAApD,EAAAiD,EAAAN,OAAA,CAAAI,EAAAC,IACA,CACA,CAQA,SAAAK,EAAAC,GACA,OAAA,SAAAC,GACAlD,EAAAiD,GAAAC,CACA,CACA,CAEA,SAAAC,EAAAnC,GACA,GAAAL,EAAAV,EAAAe,GAAA,CACA,IAAA4B,EAAA3C,EAAAe,UACAf,EAAAe,GACAb,EAAAa,IAAA,EACApB,EAAAmD,MAAApD,EAAAiD,EACA,CAEA,IAAAjC,EAAAX,EAAAgB,KAAAL,EAAAR,EAAAa,GACA,MAAA,IAAAoC,MAAA,MAAApC,GAEA,OAAAhB,EAAAgB,EACA,CAKA,SAAAqC,EAAArC,GACA,IAAAsC,EACAC,EAAAvC,EAAAA,EAAAwC,QAAA,MAAA,EAKA,OAJAD,GAAA,IACAD,EAAAtC,EAAAyC,UAAA,EAAAF,GACAvC,EAAAA,EAAAyC,UAAAF,EAAA,EAAAvC,EAAAiB,SAEA,CAAAqB,EAAAtC,EACA,CAIA,SAAA0C,EAAAhB,GACA,OAAAA,EAAAW,EAAAX,GAAA,EACA,CA8CA,SAAAiB,EAAA3C,GACA,OAAA,WACA,OAAAd,GAAAA,EAAAA,QAAAA,EAAAA,OAAAc,IAAA,CAAA,CACA,CACA,CA3CAlB,EAAA,SAAAkB,EAAA4C,GACA,IAAAC,EAnDAnB,EAoDAoB,EAAAT,EAAArC,GACAsC,EAAAQ,EAAA,GACAC,EAAAH,EAAA,GA2BA,OAzBA5C,EAAA8C,EAAA,GAEAR,IAEAO,EAAAV,EADAG,EAAAvC,EAAAuC,EAAAS,KAKAT,EAEAtC,EADA6C,GAAAA,EAAA9C,UACA8C,EAAA9C,UAAAC,GAlEA0B,EAkEAqB,EAjEA,SAAA/C,GACA,OAAAD,EAAAC,EAAA0B,EACA,IAiEA3B,EAAAC,EAAA+C,IAKAT,GADAQ,EAAAT,EADArC,EAAAD,EAAAC,EAAA+C,KAEA,GACA/C,EAAA8C,EAAA,GACAR,IACAO,EAAAV,EAAAG,KAKA,CACAU,EAAAV,EAAAA,EAAA,IAAAtC,EAAAA,EACAiD,EAAAjD,EACAkD,GAAAZ,EACAa,EAAAN,EAEA,EAQA9D,EAAA,CACAN,QAAA,SAAAuB,GACA,OAAAyB,EAAAzB,EACA,EACAoD,QAAA,SAAApD,GACA,IAAAqD,EAAArE,EAAAgB,GACA,YAAA,IAAAqD,EACAA,EAEArE,EAAAgB,GAAA,CAAA,CAEA,EACAsD,OAAA,SAAAtD,GACA,MAAA,CACAuD,GAAAvD,EACAwD,IAAA,GACAJ,QAAApE,EAAAgB,GACAd,OAAAyD,EAAA3C,GAEA,GAGApB,EAAA,SAAAoB,EAAAyD,EAAAC,EAAAhC,GACA,IAAAiC,EAAA1B,EAAA2B,EAAA7C,EAAAL,EAAAkC,EAGAiB,EAFAjC,EAAA,GACAkC,SAAAJ,EAQA,GAHAd,EAAAF,EADAhB,EAAAA,GAAA1B,GAIA,cAAA8D,GAAA,aAAAA,EAAA,CAKA,IADAL,GAAAA,EAAAxC,QAAAyC,EAAAzC,OAAA,CAAA,UAAA,UAAA,UAAAwC,EACA/C,EAAA,EAAAA,EAAA+C,EAAAxC,OAAAP,GAAA,EAKA,GAAA,aAHAuB,GADAlB,EAAAjC,EAAA2E,EAAA/C,GAAAkC,IACAI,GAIApB,EAAAlB,GAAA3B,EAAAN,QAAAuB,QACA,GAAA,YAAAiC,EAEAL,EAAAlB,GAAA3B,EAAAqE,QAAApD,GACA6D,GAAA,OACA,GAAA,WAAA5B,EAEA0B,EAAA/B,EAAAlB,GAAA3B,EAAAuE,OAAAtD,QACA,GAAAL,EAAAX,EAAAiD,IACAtC,EAAAV,EAAAgD,IACAtC,EAAAR,EAAA8C,GACAL,EAAAlB,GAAAyB,EAAAF,OACA,KAAAlB,EAAAoC,EAIA,MAAA,IAAAf,MAAApC,EAAA,YAAAiC,GAHAlB,EAAAoC,EAAAY,KAAAhD,EAAAkC,EAAAxB,EAAAC,GAAA,GAAAM,EAAAC,GAAA,CAAA,GACAL,EAAAlB,GAAA1B,EAAAiD,EAGA,CAGA2B,EAAAF,EAAAA,EAAA3B,MAAA/C,EAAAgB,GAAA4B,QAAAoC,EAEAhE,IAIA2D,GAAAA,EAAAP,UAAAzE,GACAgF,EAAAP,UAAApE,EAAAgB,GACAhB,EAAAgB,GAAA2D,EAAAP,QACAQ,IAAAjF,GAAAkF,IAEA7E,EAAAgB,GAAA4D,GAGA,MAAA5D,IAGAhB,EAAAgB,GAAA0D,EAEA,EAEAlF,EAAAC,EAAAI,EAAA,SAAA4E,EAAAC,EAAAhC,EAAAC,EAAAsC,GACA,GAAA,iBAAAR,EACA,OAAA1E,EAAA0E,GAEA1E,EAAA0E,GAAAC,GAMAvB,EAAArD,EAAA2E,EAAAf,EAAAgB,IAAAV,GACA,IAAAS,EAAAlC,OAAA,CAMA,IAJArC,EAAAuE,GACAA,MACA5E,EAAAK,EAAAuE,KAAAvE,EAAAwE,WAEAA,EACA,OAGAA,EAAAnC,QAGAkC,EAAAC,EACAA,EAAAhC,EACAA,EAAA,MAEA+B,EAAA9E,CAEA,CA2BA,OAxBA+E,EAAAA,GAAA,WAAA,EAIA,mBAAAhC,IACAA,EAAAC,EACAA,EAAAsC,GAIAtC,EACA/C,EAAAD,EAAA8E,EAAAC,EAAAhC,GAQAwC,WAAA,WACAtF,EAAAD,EAAA8E,EAAAC,EAAAhC,EACA,EAAA,GAGA7C,CACA,EAMAA,EAAAK,OAAA,SAAAiF,GACA,OAAAtF,EAAAsF,EACA,EAKA3F,EAAA4F,SAAApF,GAEAN,EAAA,SAAAsB,EAAAyD,EAAAC,GACA,GAAA,iBAAA1D,EACA,MAAA,IAAAoC,MAAA,6DAIAqB,EAAAlC,SAIAmC,EAAAD,EACAA,EAAA,IAGA9D,EAAAX,EAAAgB,IAAAL,EAAAV,EAAAe,KACAf,EAAAe,GAAA,CAAAA,EAAAyD,EAAAC,GAEA,GAEAW,IAAA,CACAC,QAAA,EAEA,CAxaA,GA0aA5F,EAAA,sCAAA,WAAA,GAEAA,EAAA,yBAAA,GAAA,WChbA,OAJA6F,SAAAC,MAAAC,OAAA,CAEA,EAGA,GACA/F,EAAA,8BAAA,CAAA,0BAAA,SAAAgG,GCHA,OAHAH,SAAAI,WAAAF,OAAA,CACAG,MAAAF,GAGA,GACAhG,EAAA,oBAAA,CAAA,+BAAA,SAAAmG,GCmHA,OAxHAN,SAAAC,MAAAC,OAAA,CACAK,SAAA,CACAC,YAAA,GACA7C,MAAA,GACA8C,UAAA,GACAC,QAAA,oBACAC,UAAA,EACAC,cAAA,EACAC,eAAA,EACAC,OAAA,EACAC,SAAA,GACAC,SAAA,EACAC,SAAA,GAGAC,WAAA,WACA,IAAAC,EAAAC,KAAAC,IAAA,QAEAD,KAAAE,IAAA,SAAAF,KAAAG,WAAAC,QAAAC,UAAAJ,IAAA,OACAD,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,QAAAD,KAAAS,YAEAT,KAAAU,KAAA,SAAAV,KAAAW,YAAAX,MACAA,KAAAU,KAAA,eAAAV,KAAAY,YAAAZ,MACAA,KAAAE,IAAA,SAAA,IAAAhB,GAEA,cAAAa,IACAC,KAAAC,IAAAD,KAAAa,aACAb,KAAAE,IAAAF,KAAAc,cAWAP,QAAAC,QAAA,UAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,MACAO,QAAAC,QAAA,UAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,WAEA,IAAAA,KAAAC,IAAA,eACAM,QAAAC,QAAAR,KAAAC,IAAA,eAAAc,QAAA,aAAAf,MAMAA,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,SAAAD,KAAAgB,YAKAhB,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAA,gBAAAD,KAAAiB,aACA,EAEAJ,aAAA,SAAAK,GAKA,MAJA,YAAAA,IACAA,EAAA,iBAGAtC,SAAAC,MAAAlF,UAAAsG,IAAA9F,KAAA6F,KAAAkB,EACA,EAEAJ,aAAA,SAAAK,EAAAf,GAIA,MAHA,YAAAe,IACAA,EAAA,iBAEAvC,SAAAC,MAAAlF,UAAAuG,IAAA/F,KAAA6F,KAAAmB,EAAAf,EACA,EAEAO,YAAA,WACAJ,QAAAC,QAAA,SAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,eAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,eAAAf,KACA,EAEAY,YAAA,WACAL,QAAAC,QAAA,SAAAR,KAAAC,IAAA,OAAAc,QAAA,oBAAAf,MACAO,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,oBAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,oBAAAf,KACA,EAEAoB,gBAAA,SAAAC,GACArB,KAAAE,IAAA,kBAAAmB,EACA,EAEAC,mBAAA,SAAAD,GACArB,KAAAE,IAAA,qBAAAmB,EACA,EAEAE,WAAA,SAAA1B,GACAG,KAAAE,IAAA,UAAAL,EACA,EAEAmB,WAAA,WACAT,QAAAC,QAAA,UAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAA,UAAAR,KAAAC,IAAA,SAAAc,QAAA,aAAAf,KACA,EAEAiB,aAAA,SAAAZ,GACAE,QAAAC,QAAAR,KAAAC,IAAA,SAAAc,QAAA,gBAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,gBAAAf,KACA,EAUAwB,SAAA,WACA,OAAAxB,KAAAC,IAAA,QACA,GAKA,GAEAlH,EAAA,yBAAA,CAAA,qBAAA,SAAA0I,GC3HA,IAAAtB,EAAAvB,SAAAI,WAAAF,OAAA,CACAG,MAAAwC,EACAC,WAAA,QAEA5B,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EACAJ,KAAA4B,GAAA,QAAA,SAAAC,GACAtB,QAAAC,QAAA,UAAAO,QAAA,mBAAAc,EACA,EAAA7B,MAEAO,QAAAC,QAAA,UAAAsB,MAAA,wBAAA9B,KAAA+B,qBACA,EAEAC,eAAA,WACAC,EAAAC,KAAAlC,KAAA2B,OAAA,SAAAF,GACA,GAAA,aAAAA,EAAAxB,IAAA,QAAA,CACA,MAAAkC,EAAA5B,QAAAC,QAAA,kBAAA4B,QAAA,sCAAAX,EAAAxB,IAAA,WACAgC,EAAAC,KAAAC,EAAA,SAAAE,GAEAA,EAAAnC,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,iBAAAsB,EACA,EACA,MAEAZ,EAAAvB,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,iBAAAU,EAEA,EAAAzB,MAEA,IAAAK,EAAAE,QAAAC,QAAA,QAAAR,KAAA2B,OAAA,GAAA1B,IAAA,WAAAmC,QAAA,YACAH,EAAAK,KAAAjC,EAAAJ,IAAA,gBAAA,GACAM,QAAAC,QAAA,UAAA4B,QAAA,0BAAA1I,OAAA6I,KAAAlC,EAAAJ,IAAA,gBAEA,EAEAuC,WAAA,WACAxC,KAAAyC,OAAA,MAAA,CAAA7C,SAAA,IACAI,KAAAyC,OAAA,WACAzC,KAAAe,QAAA,eAAAf,KACA,EACA,EAEA0C,WAAA,WACA1C,KAAAyC,OAAA,MAAA,CAAA7C,SAAA,IACAI,KAAAyC,OAAA,WACAzC,KAAAe,QAAA,eAAAf,KACA,EACA,EAEA+B,qBAAA,SAAAY,GACA,IAAAC,EAAA,EASA,OAPAX,EAAAC,KAAAS,EAAA,SAAA/E,GAEA,MAAAiF,EAAAtC,QAAAC,QAAA,UAAA4B,QAAA,YAAAxE,GAAAqC,IAAA,SAEA2C,EAAA,IAAAA,GAAAC,EAAAD,EAAAhF,EAAAgF,CACA,GAEAA,CACA,IAEA,OAAAzC,CACA,GAEApH,EAAA,wBAAA,GAAA,WC7DA,OAJA6F,SAAAC,MAAAC,OAAA,CAEA,EAGA,GACA/F,EAAA,6BAAA,CAAA,yBAAA,SAAAgG,GCHA,OAHAH,SAAAI,WAAAF,OAAA,CACAG,MAAAF,GAGA,GACAhG,EAAA,mBAAA,CCLA,yBACA,8BACA,SACA+J,EACAC,GA6IA,OA3IAnE,SAAAC,MAAAC,OAAA,CACAK,SAAA,CACA6D,WAAA,GACAC,UAAA,GACAC,aAAA,GACAC,YAAA,GACAC,cAAA,GACAC,cAAA,GACAC,GAAA,GACAC,YAAA,CAAA,EACAC,MAAA,CAAA,GAGA1D,WAAA,WAEAmC,EAAAC,KAAAlC,KAAAC,IAAA,YAAA,SAAA1D,EAAAkH,GACAzD,KAAAE,IAAAuD,EAAAlH,EACA,EAAAyD,MAEAA,KAAAE,IAAA,eAAAF,KAAAC,IAAA,WACAD,KAAAE,IAAA,SAAA,IAAA4C,EAAA9C,KAAAC,IAAA,UAAA,CAAAI,UAAAL,QACAA,KAAAE,IAAA,SAAA,IAAA6C,GAKAxC,QAAAC,QAAA,QAAAO,QAAA,oBAAAf,MAKA,IAAA0D,EAAA1D,KAAAC,IAAA,mBAQAyD,IACAA,EAAA1D,KAAAC,IAAA,sBAGA,IAAA0D,EAAApD,QAAAC,QAAA,eAAA4B,QAAA,mBAIAwB,EAAA3B,EAAA4B,QAAAF,OAAAtF,GAEAqF,EADAzB,EAAA6B,MAAAF,EACA7F,CAAA2F,EAAA1D,KAAAA,MAEAA,KAAAE,IAAA,kBAAAwD,GAEAnD,QAAAC,QAAA,SAAAO,QAAA,aAAAf,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,aAAAf,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,iBAAA9B,KAAA+D,cAAA/D,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,YAAA9B,KAAAgE,SAAAhE,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,eAAA9B,KAAAiE,YAAAjE,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,YAAA9B,KAAAkE,SAAAlE,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,YAAA9B,KAAAmE,SAAAnE,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,eAAA9B,KAAAoE,YAAApE,MAGAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAA6B,MAAA,WAAA9B,KAAAqE,QAAArE,MAEAO,QAAAC,QAAA,QAAAO,QAAA,SAAAf,MACAO,QAAAC,QAAA,QAAAO,QAAA,eAAAf,MACAO,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,SAAAf,KACA,EAQA+D,cAAA,SAAAO,GACA,OAAAtE,KAAAC,IAAA,UAAAsE,UAAA,CAAAD,IAAAA,GACA,EAQAN,SAAA,SAAApG,EAAA4G,GACAxE,KAAAC,IAAA,UACAwE,IAAA,CAAA7G,GAAAA,EAAA4G,IAAAA,IACAjE,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,YAAAf,KAAApC,EAAA4G,EACA,EAEAP,YAAA,SAAArG,GACA,IAAA8G,EAAA1E,KAAAC,IAAA,UACAlB,EAAA2F,EAAAzE,IAAArC,GACA8G,EAAAC,OAAA5F,GACAwB,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,KAAApC,EACA,EAQAsG,SAAA,SAAAI,GACA,IAAAM,EAAA5E,KAAAC,IAAA,SACA,YAAA,IAAAqE,EAAAM,EACAA,EAAAN,EACA,EAEAH,SAAA,SAAAG,EAAA/H,GACAyD,KAAAC,IAAA,SACAqE,GAAA/H,EACAgE,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,YAAAf,KAAAsE,EAAA/H,EACA,EAEA6H,YAAA,SAAAE,UACAtE,KAAAC,IAAA,SACAqE,GACA/D,QAAAC,QAAA,QAAAR,KAAAC,IAAA,OAAAc,QAAA,eAAAf,KAAAsE,EACA,EAOAD,QAAA,WACA,OAAArE,IACA,GAIA,GACAjH,EAAA,wBAAA,CAAA,oBAAA,SAAAsH,GChJA,OAHAzB,SAAAI,WAAAF,OAAA,CACAG,MAAAoB,GAGA,GCEAtH,EAAA,uBAAA,CAAA,mBAAA,wBAAA,yBAAA,8BAAA,SAAA8L,EAAAC,EAAAhC,EAAAC,GA+CA,OA9CAgC,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAUAE,KAAAG,WAAA,IAAA2E,EAAAE,SACAzE,QAAAC,QAAA,SAAAO,QAAA,SAAAf,KAAAG,YACAI,QAAAC,QAAA,OAAAO,QAAA,eAAAf,KAAAG,YAEAI,QAAAC,QAAA,OAAAsB,MAAA,WAAA9B,KAAAqE,QAAArE,MACAO,QAAAC,QAAA,OAAAsB,MAAA,YAAA9B,KAAAiF,SAAAjF,MAEAO,QAAAC,QAAA,UAAAsB,MAAA,YAAA9B,KAAAkF,SAAAlF,KACA,EAEAqE,QAAA,SAAAzG,GACA,OAAAoC,KAAAG,WAAAF,IAAArC,EACA,EAEAqH,SAAA,WACA,OAAAjF,KAAAG,UACA,EAEA+E,SAAA,SAAAtH,GACA,IAAAqB,GAAA,EAYA,OAVAgD,EAAAC,KAAAlC,KAAAG,WAAAwB,OAAA,SAAAwD,GACAlG,IACAA,EAAAkG,EAAAlF,IAAA,UAAAA,IAAArC,GAEA,QAEA,IAAAqB,IAAA,IAAAmG,OAAAxH,GAAAf,QAAA,OACAoC,EAAAsB,QAAAC,QAAA,kBAAA4B,QAAA,wBAAAxE,IAGAqB,CACA,GAIA,GAEAlG,EAAA,yBAAA,CAAA,0BAAA,SAAAsM,GCTA,OA/CAN,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,UAAAsB,MAAA,YAAA9B,KAAAgE,UACAzD,QAAAC,QAAA,UAAAsB,MAAA,eAAA9B,KAAAiE,aACA1D,QAAAC,QAAA,UAAAsB,MAAA,YAAA9B,KAAAsF,SACA,EAEAtB,SAAA,SAAApB,EAAAhF,EAAA4G,GACA,IAAAvF,EAAAsB,QAAAC,QAAA,UAAA4B,QAAA,YAAAQ,GAEA,QAAA,IAAA3D,EAAA,CAEA,IAAAyF,EAAAzF,EAAAgB,IAAA,UACAyE,EAAAD,IAAA,CAAA7G,GAAAA,EAAA4G,IAAAA,IACAvF,EAAAiB,IAAA,SAAAwE,GACAzF,EAAA8B,QAAA,gBAAA9B,GACAA,EAAAiB,IAAA,SAAA,GACAK,QAAAC,QAAA,UAAAO,QAAA,YAAA9B,EAAArB,EAAA4G,EAPA,CAQA,EAEAP,YAAA,SAAArB,EAAAhF,GACA,IAAAqB,EAAAsB,QAAAC,QAAA,UAAA4B,QAAA,YAAAQ,GAEA,QAAA,IAAA3D,EAAA,CACA,IAAAyF,EAAAzF,EAAAgB,IAAA,UACAsF,EAAAb,EAAAzE,IAAArC,QAEA,IAAA2H,IACAb,EAAAC,OAAAY,GACAtG,EAAAiB,IAAA,SAAAwE,GACAzF,EAAA8B,QAAA,gBAAA9B,GACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAA9B,EAAArB,GARA,CAUA,EAEA0H,SAAA,SAAA1C,EAAAhF,GACA,IAEA2H,EAFAhF,QAAAC,QAAA,UAAA4B,QAAA,YAAAQ,GACA3C,IAAA,UACAA,IAAArC,GACA,MAAA,aAAA2H,GACAA,CAIA,GAIA,GC1CAxM,EAAA,0BAAA,GAAA,WA+DA,OA9DAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WAIAS,QAAAC,QAAA,WAAAsB,MAAA,eAAA9B,KAAAwF,aAOAxF,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAyF,UACA,EAEAD,YAAA,SAAAE,EAAAzG,GAEA,IAAA1C,EAAAgE,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAmC,QAAA,qBAAAsD,EAAAzG,GAEA1C,OAAA,KADAA,OAAA,IAAAA,EAAAA,EAAAgE,QAAAC,QAAAvB,EAAAgB,IAAA,eAAAmC,QAAA,qBAAAsD,EAAAzG,IACA1C,EAAAoC,OAAA+G,GAAAC,MAGA1G,EAAAiB,IAAA,aAAA,GAGAjB,EAAAiB,IAAA,SAAA,GAYAK,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAAc,QAAA,eAAA2E,EAAAzG,GACAsB,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAc,QAAA,eAAA2E,EAAAzG,GACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAA2E,EAAAzG,GAMAsB,QAAAC,QAAA,WAAA4B,QAAA,eAAAnD,EAAA1C,GAKA0C,EAAAgB,IAAA,kBACAM,QAAAC,QAAA,kBAAAO,QAAA,YAEA,EAEA0E,UAAA,SAAAC,EAAAzG,GAEAA,EAAAiB,IAAA,SAAA,EACA,GAIA,GACAnH,EAAA,0BAAA,GAAA,WCvEA,IAAA6M,EAAArF,QAAAC,QAAA,SAEAqF,EAAA,yJACAC,EAAA,gBAuFA,OArFAf,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAsF,EAAA,oBAAA5F,KAAA+F,oBACA/F,KAAAM,SAAAsF,EAAA,cAAA5F,KAAAgG,YACAhG,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAiG,YACA,EAEAF,mBAAA,SAAA9G,GACA,IAAA1C,EAAA0C,EAAAgB,IAAA,SACAiG,EAAAjH,EAAAgB,IAAA,MACAD,KAAAmG,YAAA5J,EAAA2J,EACA,EAEAD,YAAA,SAAAP,EAAAzG,GACA,IAAA1C,EAAAoC,OAAA+G,GAAAC,MACAO,EAAAjH,EAAAgB,IAAA,MACAD,KAAAmG,YAAA5J,EAAA2J,EACA,EAEAC,YAAA,SAAA5J,EAAA2J,GACA,GAAA,EAAA3J,EAAAjB,OACA,GAAAuK,EAAArK,KAAAe,GACAgE,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAAmG,oBACA,MAEA7F,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,EAEA,EAYAE,WAAA,SAAAN,EAAAzG,EAAAoH,GAKA,GAAA,GAAAA,EACA,OAAA,EAKA,IAAA9J,EAAAoC,OAAA+G,GAAAC,MAKAO,EAAAjH,EAAAgB,IAAA,MAKA,GAAA,GAAA1D,EAAAjB,OACAiF,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,QACA,GAAAD,EAAArK,KAAAe,IAAA0C,EAAAgB,IAAA,SAOA4F,EAAArK,KAAAe,KACAgE,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,GAIA7G,EAAAmC,gBAAA,WACAnC,EAAAiB,IAAA,SAAA,QAbA,CAEA,IAAAuB,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAAmG,qBAEAnH,EAAAqC,mBAAA,UACA,CAQA,GAIA,GACAvI,EAAA,yBAAA,GAAA,WC5FA,IAAA6M,EAAArF,QAAAC,QAAA,QACAsF,EAAA,eAmKA,OAjKAf,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAsF,EAAA,oBAAA5F,KAAA+F,oBACA/F,KAAAM,SAAAsF,EAAA,cAAA5F,KAAAsG,WACAtG,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAiG,aAEAjG,KAAAM,SAAAsF,EAAA,eAAA5F,KAAAuG,mBAAAvG,KACA,EAEA+F,mBAAA,SAAA9G,GACA,IAAAuH,EAAAC,OAAAC,SACAD,OAAAC,OAAA,eACA1G,KAAA2G,WAAA1H,GACAwH,OAAAC,OAAAF,EACA,EAEAP,YAAA,SAAAP,EAAAzG,GACA,IAAAuH,EAAAC,OAAAC,SACAD,OAAAC,OAAA,eACA1G,KAAA2G,WAAA1H,GACAwH,OAAAC,OAAAF,EACA,EAEAG,WAAA,SAAA1H,GACA,IAAAiH,EAAAjH,EAAAgB,IAAA,MACA1D,EAAA0C,EAAAgB,IAAA,SACA2G,EAAA3H,EAAAgB,IAAA,eAGA,GAAA,aAAAhB,EAAAgB,IAAA,aACA,OAAA,EAGA,GAAA,EAAA1D,EAAAjB,OAEA,GAAA0E,KAAA6G,YAAAtK,EAAAqK,EAAAV,GACA3F,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAA6G,mBACA,MAEAvG,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,EAEA,EAaAQ,UAAA,SAAAZ,EAAAzG,EAAAoH,GAKA,GAAA,GAAAA,EACA,OAAA,EAKA,IAAA9J,EAAAoC,OAAA+G,GAAAC,MAKAO,EAAAjH,EAAAgB,IAAA,MAKA2G,EAAA3H,EAAAgB,IAAA,eAEAuG,EAAAC,OAAAC,SAMA,GALAD,OAAAC,OAAA,eAKA,GAAAnK,EAAAjB,OACAiF,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,QAGA,GAAA9F,KAAA6G,YAAAtK,EAAAqK,EAAAV,IAAAjH,EAAAgB,IAAA,SASAD,KAAA6G,YAAAtK,EAAAqK,EAAAV,KACA3F,QAAAC,QAAA,UAAA4B,QAAA,eAAA8D,EAAAJ,GAIA7G,EAAAmC,gBAAA,WACAnC,EAAAiB,IAAA,SAAA,QAfA,CAEA,IAAAuB,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA7F,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAJ,EAAAzF,EAAAJ,IAAA,YAAA6G,oBAEA7H,EAAAqC,mBAAA,UACA,CAUAmF,OAAAC,OAAAF,EACA,EAEAD,mBAAA,SAAA7I,EAAA+D,GACA,IACAsF,EAAApI,OAAAjB,EAAAsJ,QAAAC,QAAA,qBAGAC,EAAAvI,OAAAoI,GAAAI,KAAA,SAAAxB,MACAyB,EAAAzI,OAAAoI,GAAAI,KAAA,WAAAxB,MACA0B,EAAA1I,OAAAoI,GAAAI,KAAA,SAAAxB,MAEAlE,EAAAvB,IAAA,gBAAAgH,GACAzF,EAAAvB,IAAA,kBAAAkH,GACA3F,EAAAvB,IAAA,gBAAAmH,GAGA,MAAAC,EAAA7F,EAAAxB,IAAA,MACA,GAAA,iBAAAqH,IAAA,IAAAA,EAAAC,OAAA,KAAA,CACA,MAAAC,OAAA,IAAAH,EACAH,EAAA,IAAAE,EAAA,IAAAC,EACAH,EAAA,IAAAE,EAEA,cAAA3F,EAAAxB,IAAA,cACAwB,EAAAvB,IAAA,QAAAsH,GAGAjH,QAAAC,QAAA,kBAAAO,QAAA,YACA,CACA,EAEA8F,YAAA,SAAAtK,EAAAqK,EAAAV,GACA,GAAA,OAAAuB,SAAAC,cAAA,mBAAAxB,EAAA,MAAA,OAEA,MAAAyB,EAAAF,SAAAC,cAAA,mBAAAxB,EAAA,MAAA0B,WAAAD,UAAApL,EAAAqK,GAEA,IAAAe,EACA,OAAA,EAEA,MAAAE,EAAAF,EAAAG,UACA,GAAAC,MAAAF,GACA,OAAA,EAGA,MAAAG,EAAA,IAAAC,KAAAJ,GAGA,OAFAJ,SAAAC,cAAA,mBAAAxB,EAAA,MAAA0B,WAAAM,WAAAF,EAAApB,KAEArK,CACA,GAKA,GACAxD,EAAA,4BAAA,GAAA,WClFA,OApFAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAIAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAAmI,uBAEA5H,QAAAC,QAAA,YAAAsB,MAAA,oBAAA9B,KAAAoI,kBACA7H,QAAAC,QAAA,YAAAsB,MAAA,qBAAA9B,KAAAqI,mBACA9H,QAAAC,QAAA,YAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,YAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAsI,kBAAA,SAAA5C,EAAAzG,GAEA,GADAN,OAAA+G,GAAAxL,KAAA,WACA,CACA,IAAAqC,EAAA,EACAoC,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAuB,QAAA,eAAAE,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,mBACA,KAAA,CACAjM,EAAA,EACAoC,OAAA+G,GAAA+C,YAAA,cACA9J,OAAA+G,GAAAuB,QAAA,eAAAE,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAuO,YAAA,mBACA,CAEA,OAAAlM,CACA,EAEA6L,iBAAA,SAAA1C,EAAAzG,GACA,OAAAyG,EAAA,GAAAgD,OACA,EAEAL,kBAAA,SAAApJ,GACA,OAAA,GAAAA,EAAAgB,IAAA,QACA,EAEAsI,aAAA,SAAA9G,GAOA,OANA,GAAAA,EAAAxB,IAAA,SACA0I,UAAAlH,EAAAxB,IAAA,sBAEA0I,UAAAlH,EAAAxB,IAAA,wBAGA0I,SACA,EAEAR,sBAAA,SAAAlJ,GACA,WAAAA,EAAAgB,IAAA,iBACAhB,EAAAiB,IAAA,QAAA,GAEAjB,EAAAiB,IAAA,QAAA,GAEAjB,EAAAiB,IAAA,gBAAAF,KAAA4I,eACA3J,EAAAiB,IAAA,qBAAAF,KAAA6I,oBACA5J,EAAAiB,IAAA,eAAAF,KAAA8I,aACA,EAEAF,cAAA,SAAAtJ,GAMA,OALA,GAAAU,KAAAzD,OAAAyD,KAAAN,YAAA,IAAAM,KAAA+I,eAAA,WAAA/I,KAAA+I,cACAzJ,GAAA,cAEAA,EAAA7D,QAAA,aAAA,IAEA6D,CACA,EAEAuJ,mBAAA,SAAAvJ,GAMA,OALA,GAAAU,KAAAzD,OAAAyD,KAAAN,YAAA,IAAAM,KAAA+I,eAAA,WAAA/I,KAAA+I,cACAzJ,GAAA,oBAEAA,EAAA7D,QAAA,mBAAA,IAEA6D,CACA,EAEAwJ,aAAA,WACA,OAAA,GAAA9I,KAAAzD,OAAAyD,KAAAN,YAAA,IAAAM,KAAA+I,eAAA,WAAA/I,KAAA+I,cACA,WAEA,EAEA,GAIA,GACAhQ,EAAA,gCAAA,GAAA,WCsGA,OA5LAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,gBAAA,aAAAR,KAAAgJ,UACAhJ,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,gBAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,SAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,gBAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,MACAO,QAAAC,QAAA,SAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GASA,GARAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,kBAAAF,KAAAkJ,iBACAjK,EAAAiB,IAAA,WAAA,IAMA,GAAAjB,EAAAgB,IAAA,WAAA3E,OAAA,CACA,IAAA6N,EAAAlH,EAAAmH,OAAAnK,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,GACAA,EAAAlH,EAAA7G,IAAA+N,EAAA,SAAAE,GAAA,OAAAA,EAAA9M,KAAA,EACA,CAMA,IAAA+M,EAAArK,EAAAgB,IAAA,cACA,IAAAqJ,GAAAC,MAAAC,QAAAF,GACArK,EAAAiB,IAAA,QAAAoJ,QACA,IAAAH,GACAlK,EAAAiB,IAAA,QAAAiJ,EAEA,EAEAF,cAAA,WACA,IAAAQ,EAAA,GAEA,GAAA,IAAAzJ,KAAAzD,OAAAgN,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,EAAA0E,KAAAzD,MAAAjB,OACA,IAAAoO,GAAA,OAEAA,GAAA,EAgEA,GA7DAzH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,EAAA/M,GACA2M,MAAAC,QAAAxJ,KAAAzD,SACAgN,MAAAC,QAAAxJ,KAAAzD,MAAA,MAAA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAA,GAAAoN,EAAApN,QAGA0F,EAAApF,QAAAmD,KAAAzD,MAAAoN,EAAApN,UAFAmN,GAAA,GAOAC,EAAApN,OAAAyD,KAAAzD,QACAmN,GAAA,QAOA,IAAAC,EAAA/J,UACA+J,EAAA/J,SAAA,GAGA+J,EAAAzD,QAAAlG,KAAApC,GACA+L,EAAArK,QAAAU,KAAAV,QACAqK,EAAA/M,MAAAA,EACA+M,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAAJ,EAAAC,OAAAD,EAAAC,MAEA,IAAAT,GAAA,EAKAI,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,IAAA2G,EAAApF,QAAAmD,KAAAzD,MAAA,GAAApB,MAAA,KAAAwO,EAAApN,SACA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAAoN,EAAApN,SACA4M,GAAA,GAEAlH,EAAAuH,QAAAxJ,KAAAzD,QAAAoN,EAAApN,OAAAyD,KAAAzD,MAEA,GAAAoN,EAAAR,UAAAnJ,KAAAN,YAAA,IAAAM,KAAAzD,QACA4M,GAAA,GAFAA,GAAA,EAeAQ,EAAAR,SAAAA,EACAQ,EAAAK,WAAAb,EACAQ,EAAAM,SAAAjK,KAAAiK,SACAN,EAAAO,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,sCACAqH,GAAAU,EAAAR,EACA,EAAA3J,MAEA,GAAAA,KAAAoK,WAAA,CACA,YAAApK,KAAAzD,QACAmN,GAAA,GAEA,IAAAW,EAAA,CACAnE,QAAAlG,KAAApC,GACA0B,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAzD,MACA2M,gBAAAlJ,KAAAkJ,gBACAQ,WAAAA,GAGAS,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,qCACAqH,GAAAU,EAAAE,EAEA,CAEA,OAAAZ,CACA,EAEAP,gBAAA,WACA,GAAA,YAAAlJ,KAAAsK,eAAAtK,KAAA0J,WAAA,CACA,YAAA1J,KAAAsK,eACAtK,KAAAsK,aAAA,IAEA,IAAAD,EAAA,CACAnE,QAAAlG,KAAAkG,QACA5G,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAsK,cAGA,OADA/J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,yCACA+H,CAAAE,EACA,CACA,EAEA9B,aAAA,SAAA9G,GACA,IAAA8I,EAAA,EACAnK,EAAAqB,EAAAxB,IAAA,WAOA,OANA,GAAAG,EAAA9E,QACA2G,EAAAC,KAAAT,EAAAxB,IAAA,SAAA,SAAA0F,GACA,IAAA6E,EAAAvI,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAAA,EAAA9M,OAAAoJ,CAAA,GACA4E,EAAAE,OAAAF,GAAAE,OAAAD,EAAAE,KACA,GAEAH,CACA,EAEAjC,kBAAA,SAAA5C,EAAAzG,GACA,IAAAkK,EAAAlK,EAAAgB,IAAA,UAAA,GACA,iBAAAkJ,IAAAA,EAAA,CAAAA,IAEA,IAAA5M,EAAAoC,OAAA+G,GAAAC,MAEA,GADAhH,OAAA+G,GAAAxL,KAAA,WAEAiP,EAAAhN,KAAAI,GACAoC,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,wBACA,CACA7J,OAAA+G,GAAA+C,YAAA,cACA9J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAuO,YAAA,oBACA,IAAA1N,EAAAoO,EAAAtM,QAAAN,GACA,IAAA,GAAAxB,EACAoO,EAAAvN,OAAAb,EAAA,QACA,GAAAwO,MAAAC,QAAAL,GAAA,CACA,IAAAyB,OAAA,IAAAzB,EAAA,GAAAA,EAAA,GAAAhO,MAAA,KAAA,GACA0P,EAAAD,EAAA/N,QAAAN,IACA,IAAAsO,GACAD,EAAAhP,OAAAiP,EAAA,GAEA1B,EAAAyB,EAAA/O,KAAA,IACA,CACA,CAMA,OAAAoG,EAAA6I,MAAA3B,EACA,GAIA,GACApQ,EAAA,6BAAA,GAAA,WCyDA,OAvPAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,aAAAsB,MAAA,qBAAA9B,KAAAsI,kBAAAtI,MACAO,QAAAC,QAAA,aAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GASA,GARAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,kBAAAF,KAAAkJ,iBACAjK,EAAAiB,IAAA,WAAA,IAMA,GAAAjB,EAAAgB,IAAA,iBAAA3E,OAAA,CACA,IAAA6N,EAAAlH,EAAAmH,OAAAnK,EAAAgB,IAAA,iBAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,GACAA,EAAAlH,EAAA7G,IAAA+N,EAAA,SAAAE,GAAA,OAAAA,EAAA9M,KAAA,EACA,CAMA,IAAA+M,EAAArK,EAAAgB,IAAA,cACA,IAAAqJ,GAAAC,MAAAC,QAAAF,GACArK,EAAAiB,IAAA,QAAAoJ,QACA,IAAAH,GACAlK,EAAAiB,IAAA,QAAAiJ,EAEA,EAEAF,cAAA,WACA,IAAAQ,EAAA,GAEA,GAAA,IAAAzJ,KAAAzD,OAAAgN,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,EAAA0E,KAAAzD,MAAAjB,OACA,IAAAoO,GAAA,OAEAA,GAAA,EAGA,IAAA1J,KAAA+K,oBACA/K,KAAAgL,cAAA,gBACAhL,KAAAiL,WAAA,YAEAjL,KAAAiL,WAAA,QAGA,eAAAjL,KAAAkL,iBACAlL,KAAAmL,eAAA,MAEAnL,KAAAmL,eAAA,SAEA,IAAAC,EAAApL,KAEAqL,EAAAC,SAAAtL,KAAAqL,cAAA,EACAE,EAAA,EACAC,EAAA,EAqEA,GAnEAvJ,EAAAC,KAAAlC,KAAAyL,cAAA,SAAAC,EAAA9O,GACAoD,KAAA2L,mBAGAD,EAAA9B,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAA2B,EAAA9B,OAAA8B,EAAA9B,MAFA8B,EAAA9B,MAAA,GAIAL,MAAAC,QAAAxJ,KAAAzD,SACAgN,MAAAC,QAAAxJ,KAAAzD,MAAA,MAAA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAA,GAAAmP,EAAAnP,QAGA0F,EAAApF,QAAAmD,KAAAzD,MAAAmP,EAAAnP,UAFAmN,GAAA,GAOAgC,EAAAnP,OAAAyD,KAAAzD,QACAmN,GAAA,QAOA,IAAAgC,EAAA9L,UACA8L,EAAA9L,SAAA,GAGA,eAAAwL,EAAAF,kBAAAK,GAAAF,IACAK,EAAAE,OAAA,4BAAAL,EAAA,gBAAAC,EAEAD,IAAAF,GACAE,EAAA,EACAC,GAAA,GAEAD,GAAA,GAIAG,EAAAT,WAAAG,EAAAH,WACAS,EAAAxF,QAAAlG,KAAApC,GACA8N,EAAApM,QAAAU,KAAAV,QACAoM,EAAA9O,MAAAA,EAEA,IAAAuM,GAAA,EAKAI,MAAAC,QAAAxJ,KAAAzD,QAAA,EAAAyD,KAAAzD,MAAAjB,QACA,IAAA2G,EAAApF,QAAAmD,KAAAzD,MAAA,GAAApB,MAAA,KAAAuQ,EAAAnP,SACA,IAAA0F,EAAApF,QAAAmD,KAAAzD,MAAAmP,EAAAnP,SACA4M,GAAA,IAEAlH,EAAAuH,QAAAxJ,KAAAzD,QAAAmP,EAAAnP,OAAAyD,KAAAzD,SAEA,GAAAmP,EAAAvC,WAAAnJ,KAAAN,YAAA,IAAAM,KAAAzD,OAAA,KAAAyD,KAAAzD,SADA4M,GAAA,GAKAuC,EAAAvC,SAAAA,EACAuC,EAAA1B,WAAAb,EACAuC,EAAAzB,SAAAjK,KAAAiK,SACAyB,EAAAxB,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,mCACAqH,GAAAU,EAAAuB,EACA,EAAA1L,MAEA,GAAAA,KAAAoK,WAAA,CACA,YAAApK,KAAAzD,QACAmN,GAAA,GAEA,IAAAW,EAAA,CACAnE,QAAAlG,KAAApC,GACA0B,QAAAU,KAAAV,QACA/C,MAAAyD,KAAAzD,MACA+N,aAAAtK,KAAAzD,MACA2M,gBAAAlJ,KAAAkJ,gBACAQ,WAAAA,GAGAS,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kCACAqH,GAAAU,EAAAE,EAEA,CAEA,OAAAZ,CACA,EAEAP,gBAAA,WACA,GAAA,YAAAlJ,KAAAsK,eAAAtK,KAAA0J,WAAA,CACA,YAAA1J,KAAAsK,eACAtK,KAAAsK,aAAA,IAEA,IAAAD,EAAA,CACAnE,QAAAlG,KAAAkG,QACA5G,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAsK,cAGA,OADA/J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,sCACA+H,CAAAE,EACA,CACA,EAEA9B,aAAA,SAAA9G,GACA,IAAA8I,EAAA,EACAnK,EAAAqB,EAAAxB,IAAA,WACA,GAAA,GAAAG,EAAA9E,OAIA,GAAA,GAAAgQ,SAAA7J,EAAAxB,IAAA,uBAIAgC,EAAAC,KAAAT,EAAAxB,IAAA,SAAA,SAAA0F,GACA,IAAA6E,EAAAvI,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAAA,EAAA9M,OAAAoJ,CAAA,GACA4E,GAAAE,OAAAD,EAAAE,KACA,OACA,CAIA,IAAAvB,EAAAlH,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAA5H,EAAAxB,IAAA,UAAAoJ,EAAA9M,KAAA,QAIA,IAAA4M,IACAoB,EAAApB,EAAAuB,KAEA,CAEA,OAAAH,CACA,EAEAjC,kBAAA,SAAA5C,EAAAzG,GAEA,GAAA,IAAAA,EAAAgB,IAAA,sBAAA,CACA,IAAAkJ,EAAAxK,OAAA+G,GAAAC,MACAvF,EAAAnB,EAAAgB,IAAA,iBACAgC,EAAAC,KAAA9B,EAAA,SAAAuJ,EAAA/M,GACA+M,EAAApN,QAAA4M,GACAQ,EAAAK,YAAA,EACAL,EAAAR,UAAA,IAEAQ,EAAAK,YAAA,EACAL,EAAAR,UAAA,GAEAQ,EAAAK,YAKArL,OAAA,aAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA4L,SAAA,cACA7J,OAAA,mBAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA4L,SAAA,sBALAmB,EAAAR,UAAA,EACAxK,OAAA,aAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA6L,YAAA,cACA9J,OAAA,mBAAAgL,EAAAzD,QAAA,IAAAtJ,GAAA6L,YAAA,oBAKA,EACA,KAAA,CAEA,iBADAU,EAAAlK,EAAAgB,IAAA,UAAA,MACAkJ,EAAA,CAAAA,IACA,IAAA5M,EAAAoC,OAAA+G,GAAAC,MAEA,GADAhH,OAAA+G,GAAAxL,KAAA,WAEAiP,EAAAhN,KAAAI,GACAoC,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,wBACA,CACA7J,OAAA+G,GAAA+C,YAAA,cACA9J,OAAA+G,GAAAiF,SAAAxD,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAuO,YAAA,oBACA,IAAA1N,EAAAoO,EAAAtM,QAAAN,GACA,IAAA,GAAAxB,EACAoO,EAAAvN,OAAAb,EAAA,QACA,GAAAwO,MAAAC,QAAAL,GAAA,CACA,IAAAyB,EAAAzB,EAAA,GAAAhO,MAAA,KACA0P,EAAAD,EAAA/N,QAAAN,IACA,IAAAsO,GACAD,EAAAhP,OAAAiP,EAAA,GAEA1B,EAAAyB,EAAA/O,KAAA,IACA,CACA,CACA,CAEA,OAAAoG,EAAA6I,MAAA3B,EACA,GAIA,GACApQ,EAAA,yBAAA,GAAA,WCxGA,OAjJAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,oBAAAR,KAAA6L,kBACA7L,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,aAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,MAEAA,KAAAM,SAAAC,QAAAC,QAAA,aAAA,eAAAR,KAAA8L,mBAAA9L,KACA,EAEAgJ,SAAA,SAAA/J,GAOA,GANAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,kBAAAF,KAAAkJ,iBAKA,GAAAjK,EAAAgB,IAAA,WAAA3E,OAAA,CAIA,IAAA6N,EAAAlH,EAAAkF,KAAAlI,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,QAEA,IAAAA,GACAlK,EAAAiB,IAAA,QAAAiJ,EAAA5M,MAEA,CACA,EAEAsP,iBAAA,SAAA5M,GACA,GAAAA,EAAAgB,IAAA,eAEAhB,EAAA8B,QAAA,WAEA,EAEAkI,cAAA,WACA,IAAAQ,EAAA,GACA,GAAA,IAAAzJ,KAAAzD,MACA,IAAAmN,GAAA,OAEAA,GAAA,EAyCA,GAtCAzH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,EAAA/M,GACA+M,EAAApN,OAAAyD,KAAAzD,QACAmN,GAAA,QAOA,IAAAC,EAAA/J,UACA+J,EAAA/J,SAAA,GAGA+J,EAAAR,UAAA,EACAQ,EAAAzD,QAAAlG,KAAApC,GACA+L,EAAArK,QAAAU,KAAAV,QACAqK,EAAAW,aAAAtK,KAAAzD,MACAoN,EAAA/M,MAAAA,EACA+M,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAAJ,EAAAC,OAAAD,EAAAC,MACAD,EAAAM,SAAAjK,KAAAiK,SAKAjK,KAAAN,OAAA,GAAAM,KAAAmJ,UAEAnJ,KAAAzD,OAAAoN,EAAApN,MADAoN,EAAAR,UAAA,EAIAQ,EAAAR,UAAA,EAGAQ,EAAAO,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,mCAEAqH,GAAAU,EAAAR,EACA,EAAA3J,MAEA,GAAAA,KAAAoK,WAAA,CACA,YAAApK,KAAAzD,QACAmN,GAAA,GAEA,IAAAW,EAAA,CACAnE,QAAAlG,KAAApC,GACA0B,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAzD,MACA2M,gBAAAlJ,KAAAkJ,gBACAQ,WAAAA,GAEAS,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kCACAqH,GAAAU,EAAAE,EACA,CAEA,OAAAZ,CACA,EAEAP,gBAAA,WACA,GAAA,YAAAlJ,KAAAsK,eAAAtK,KAAA0J,WAAA,CACA,YAAA1J,KAAAsK,eACAtK,KAAAsK,aAAA,IAEA,IAAAD,EAAA,CACAnE,QAAAlG,KAAAkG,QACA5G,QAAAU,KAAAV,QACAgL,aAAAtK,KAAAsK,cAGA,OADA/J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,sCACA+H,CAAAE,EACA,CACA,EAEA9B,aAAA,SAAA9G,GAKA,IAAA8I,EAAA,EAEA,GAAA,GAAA9I,EAAAxB,IAAA,WAAA3E,OAAA,CAIA,IAAA6N,EAAAlH,EAAAkF,KAAA1F,EAAAxB,IAAA,WAAA,SAAAoJ,GAAA,OAAA5H,EAAAxB,IAAA,UAAAoJ,EAAA9M,KAAA,QACA,IAAA4M,IACAoB,EAAApB,EAAAuB,KAGA,CACA,OAAAH,CACA,EAEAuB,mBAAA,SAAApG,EAAAzG,GACAN,OAAA,UAAAA,OAAA+G,GAAAxE,KAAA,QAAA,MAAAuH,YAAA,cACA9J,OAAA+G,GAAAuB,QAAA,MAAAE,KAAA,SAAAsB,YAAA,oBACA9J,OAAA+G,GAAA8C,SAAA,cACA7J,OAAA+G,GAAAuB,QAAA,MAAAE,KAAA,cAAAxI,OAAA+G,GAAAxL,KAAA,MAAA,MAAAsO,SAAA,mBAGA,GAKA,GACAzP,EAAA,0BAAA,GAAA,WC3FA,OAxDAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAA+L,iBACA/L,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAgM,cACA,EAEAD,gBAAA,SAAA9M,GAEA,GAAA,IAAAA,EAAAgB,IAAA,UAAA,IAAAhB,EAAAgB,IAAA,eAAA,CACA,IAAAgM,EAAAhN,EAAAgB,IAAA,WACAhB,EAAAiB,IAAA,cAAA+L,EACA,CACA,EAEAD,cAAA,SAAAtG,EAAAzG,GACA,IAAAiN,EAAAvN,OAAA+G,GACAC,EAAAuG,EAAAvG,MACAwG,EAAAC,WAAAzG,GACAsG,EAAAC,EAAAhL,KAAA,OACAmL,EAAAH,EAAAhL,KAAA,OACAoL,EAAAJ,EAAAhL,KAAA,QAAAgL,EAAAhL,KAAA,QAAA,IAEA,GAAA+K,GAAAE,EAAAF,EAAA,CACA,IAAAxK,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,aAAAI,EAAAJ,IAAA,YAAAsM,uBACA,MACAhM,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,cAGA,GAAAoM,GAAAF,EAAAE,EAAA,CACA5K,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,aAAAI,EAAAJ,IAAA,YAAAuM,uBACA,MACAjM,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,cAGA,IAAAwM,EAAA9G,EAAAxK,MAAA,KACAsR,OAAA,IAAAA,EAAA,GAAAA,EAAA,GAAAnR,OAAA,EACA,IAAAoR,EAAAJ,EAAAnR,MAAA,KACAuR,OAAA,IAAAA,EAAA,GAAAA,EAAA,GAAApR,OAAA,EACA,IAAAqR,EAAAC,KAAAC,IAAA,GAAAH,GAEA,GAAAJ,GAAA3G,IAAA8G,EAAAC,GACA,IAAApB,UAAAqB,EAAAR,GAAAW,WAAAxB,UAAAqB,EAAAP,WAAAE,IAAAQ,YAAA,CACArL,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,OACAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,cAAAI,EAAAJ,IAAA,YAAA8M,uBAAAT,EACA,MACA/L,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,cAEA,GAKA,GACAlH,EAAA,0BAAA,GAAA,WC1DA,IAAA6M,EAAArF,QAAAC,QAAA,UAwBA,OAtBAuE,WAAArL,OAAAoF,OAAA,CACAkO,eAAA,GAEAlN,WAAA,WACAE,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAiN,eACA,EAEAA,eAAA,SAAAhO,GACA,GAAAA,EAAAgB,IAAA,gBAAA,CACAD,KAAAgN,eAAA/N,EACA,IAAA2D,EAAA3D,EAAAgB,IAAA,gBACAD,KAAAM,SAAAC,QAAAC,QAAA,SAAAoC,GAAA,oBAAA5C,KAAAY,YACA,CACA,EAEAA,YAAA,SAAAsM,GACAlN,KAAAgN,eAAA9M,IAAA,QAAAgN,EAAAjN,IAAA,UAEAD,KAAAgN,eAAAjM,QAAA,WACA,GAIA,GACAhI,EAAA,2BAAA,GAAA,WC1BA,IAAA6M,EAAArF,QAAAC,QAAA,UACAsF,EAAA,mBA+EA,OA7EAf,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAsF,EAAA,aAAA5F,KAAAmN,iBACAnN,KAAAM,SAAAsF,EAAA,cAAA5F,KAAAoN,aACA,EAEAD,gBAAA,SAAAE,GACAA,EAAApN,IAAA,kBAEAD,KAAAM,SAAAC,QAAAC,QAAA,QAAA,SAAA,SAAA8M,GACAtN,KAAAuN,yBAAAF,EACA,EACA,EAEAE,yBAAA,SAAAF,GAEA,IAAAH,EAAA3M,QAAAC,QAAA,QAAA6M,EAAApN,IAAA,WAAAmC,QAAA,iBAAAiL,EAAApN,IAAA,uBAGA,IAAAiN,IAEAA,EAAAhN,IAAA,eAAAmN,EAAApN,IAAA,OACAD,KAAAM,SAAAC,QAAAC,QAAA,SAAA0M,EAAAjN,IAAA,OAAA,oBAAAD,KAAAY,aACAZ,KAAAM,SAAAC,QAAAC,QAAA,SAAA6M,EAAApN,IAAA,OAAA,oBAAAD,KAAAY,aACA,EAEAA,YAAA,SAAA3B,GACA,QAAA,IAAAA,EAAAgB,IAAA,gBACA,IAAAoN,EAAApO,EACAiO,EAAA3M,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAmC,QAAA,iBAAAiL,EAAApN,IAAA,uBAEAiN,EAAAjO,EACAoO,EAAAzH,EAAAxD,QAAA,YAAA8K,EAAAjN,IAAA,iBAEAiN,EAAAjN,IAAA,MAAA,IACAuN,EAAAH,EAAApN,IAAA,MAEA,GAAA,IAAAoN,EAAApN,IAAA,UAAAoN,EAAApN,IAAA,UAAAiN,EAAAjN,IAAA,SACAM,QAAAC,QAAA,UAAA4B,QAAA,eAAAoL,EAAA1H,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,GACAnN,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,EAAA1H,EAAAzF,EAAAJ,IAAA,YAAAwN,qBACA,CACA,EAEAL,aAAA,SAAA1H,EAAAzG,EAAAoH,GAEA,IAAAiE,EAAA3L,OAAA+G,GAAAC,MACA,GAAA1G,EAAAgB,IAAA,iBACA,IAAAoN,EAAApO,EACAuO,EAAAvO,EAAAgB,IAAA,MAEAyN,EADAnN,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAmC,QAAA,iBAAAiL,EAAApN,IAAA,kBACAA,IAAA,SACA0N,EAAArD,OACA,GAAArL,EAAAgB,IAAA,gBAEAuN,GADAH,EAAA9M,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,kBACAA,IAAA,MAEAyN,EADAC,EAAAN,EAAApN,IAAA,SAIA,QAAA,IAAAoN,EACA,GAAA,IAAAM,EACApN,QAAAC,QAAA,UAAA4B,QAAA,eAAAoL,EAAA1H,QACA,GAAAwE,GAAAoD,EACAnN,QAAAC,QAAA,UAAA4B,QAAA,eAAAoL,EAAA1H,OACA,CACA,IAAArE,EAAAlB,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,GACAnN,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAM,QAAAC,QAAA,UAAA4B,QAAA,YAAAoL,EAAA1H,EAAAzF,EAAAJ,IAAA,YAAAwN,qBACA,CAEA,GAIA,GACA1U,EAAA,+BAAA,GAAA,WC9DA,OApBAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,WAAAsB,MAAA,eAAA9B,KAAA4N,YACA,EAEAA,YAAA,SAAA3O,EAAA1C,GACA0C,EAAAgB,IAAA,eACAhB,EAAAiB,IAAA,QAAA3D,GACA0C,EAAAiB,IAAA,aAAA,GAKA+B,EAAAuH,QAAAjN,IACA0C,EAAA8B,QAAA,eAAA9B,GAGA,GAIA,GACAlG,EAAA,2BAAA,CAAA,4BAAA,SAAA8U,GCuEA,OA7FA9I,WAAArL,OAAAoF,OAAA,CACAgP,MAAA,CAAA,EAEAhO,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAA+N,iBACA,EAEAA,iBAAA,SAAAtM,GACA,QAAA,IAAAzB,KAAA8N,MAAArM,EAAAxB,IAAA,OACA,OAAA,EAGAD,KAAAM,SAAAC,QAAAC,QAAA,SAAAiB,EAAAxB,IAAA,OAAA,cAAAD,KAAAgO,MAAAhO,MAIAyB,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAiB,aAAAQ,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAiO,WAAAxM,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,kBAAAD,KAAAiO,WAAAxM,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,gBAAAD,KAAAkO,YAAAzM,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,iBAAAD,KAAAmO,aAAA1M,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAA,kBAAAD,KAAAoO,gBAAA3M,GAEAA,EAAAnB,SAAAC,QAAAC,QAAA,UAAA,YAAAR,KAAAmO,aAAA1M,GACAA,EAAAnB,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAkO,YAAAzM,GAEAzB,KAAA8N,MAAArM,EAAAxB,IAAA,QAAA,CACA,EAEA+N,MAAA,SAAAtQ,EAAA+D,GACA,IAAApB,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAgC,EAAAK,KAAAjC,EAAAJ,IAAA,gBAAA,GACAM,QAAAC,QAAA,UAAA4B,QAAA,0BAAA1I,OAAA6I,KAAAlC,EAAAJ,IAAA,iBAEAM,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAmC,QAAA,SAAA/B,EACA,EAEAY,aAAA,WACAjB,KAAAC,IAAA,cAEAD,KAAAE,IAAA,YAAA,GACAK,QAAAC,QAAA,QAAAR,KAAAC,IAAA,WAAAc,QAAA,kBAAAf,MACA,EAEAmO,aAAA,SAAA1M,QAEA,IAAAA,GAAAA,EAAAxB,IAAA,WAAAD,KAAAC,IAAA,YAEAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,YACA,EAEAmN,YAAA,SAAAzM,GAIA,QAAA,IAAAA,GAAAA,EAAAxB,IAAA,WAAAD,KAAAC,IAAA,UACA,OAAA,EAGA,IAAAI,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAApC,KAAAC,IAAA,WACA,GAAAgC,EAAAK,KAAAjC,EAAAJ,IAAA,kBACAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,YAEA,EAEAqN,gBAAA,WAEApO,KAAAE,IAAA,WAAAF,KAAAC,IAAA,UACAD,KAAAE,IAAA,QAAAF,KAAAC,IAAA,qBACAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,WACA,EAEAkN,WAAA,SAAAI,QACA,IAAAA,EAAA3J,aACA,IAAA2J,EAAA3J,OAAA4J,OACArM,EAAAK,KAAA+L,EAAA3J,OAAA4J,OAAA,QACA,IAAAD,EAAA3J,OAAA4J,MAAAC,gBAAA,IAAAF,EAAA3J,OAAA4J,MAAAE,gBAKA,IAAAxO,KAAAC,IAAA,aACAD,KAAAE,IAAA,QAAAF,KAAAC,IAAA,aAEAD,KAAAE,IAAA,YAAA,GACAF,KAAAe,QAAA,YACA,GAKA,GACAhI,EAAA,0BAAA,GAAA,WC5DA,OAnCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAyO,YACA,EAEAA,YAAA,SAAAJ,EAAAK,EAAAC,EAAAC,GAEA,QAAA,IAAAP,EAAAQ,MAAA,CAGA,QAAA,IAAAR,EAAAQ,MAAA1J,KAAA,CACA,IAAA2J,EAAArH,SAAAsH,cAAA,QACA9M,EAAAC,KAAAmM,EAAAQ,MAAA1J,KAAA,SAAA6J,EAAApS,GACA,IAAAqS,EAAAxH,SAAAyH,eAAAF,GACAF,EAAAK,YAAAF,GACAH,EAAAK,YACA1H,SAAAsH,cAAA,MAEA,GACApQ,OAAA,iBAAA8K,KAAAqF,EACA,CAGA,QAAA,IAAAT,EAAAQ,MAAAO,QAAA,CAEAA,QAAAC,IAAA,OADA,GACA,iBACApN,EAAAC,KAAAmM,EAAAQ,MAAAO,QAAA,SAAAJ,EAAApS,GACAwS,QAAAC,IAAAL,EACA,GACAI,QAAAC,IAAA,OALA,GAKA,oBACA,CAvBA,CAwBA,GAKA,GAEAtW,EAAA,4BAAA,GAAA,WCtCAwH,QAAAC,QAAA,UAgCA,OA/BAuE,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,SAAAb,GACAsB,QAAAC,QAAA,QAAAsB,MAAA,aAAA9B,KAAAsP,cACA,EAEAA,cAAA,SAAAV,GACA,IAAAvO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAwM,GACAlK,GAAA,EAoBA,OAlBArE,IAIA,IAAAA,EAAAJ,IAAA,UAAA3E,QACA2G,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA4N,IACA7K,EAAAA,GAAA,CAAA,GACA6K,EAAAtP,IAAA,OAAAsP,EAAAtP,IAAA,MACA,GAGAgC,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA6N,GACA,UAAAA,EAAAvP,IAAA,SAAAuP,EAAAvP,IAAA,UAAA3E,OAAA,KACAoJ,EAAAA,GAAA,CAAA,GACA8K,EAAAvP,IAAA,OAAAuP,EAAAvP,IAAA,UAEA,IAEAyE,CACA,GAIA,GACA3L,EAAA,+BAAA,GAAA,WC6FA,OA/HAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAoI,kBACApI,KAAAM,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAoI,kBACApI,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAyP,eAEAzP,KAAAM,SAAAC,QAAAC,QAAA,UAAA,oBAAAR,KAAAqI,mBACArI,KAAAM,SAAAC,QAAAC,QAAA,UAAA,iBAAAR,KAAAqI,kBACA,EAEAoH,cAAA,SAAA/J,EAAAzG,EAAAoH,GACA,GAAA,GAAApH,EAAAgB,IAAA,YACA,OAAA,EAGAhB,EAAAgB,IAAA,UACAD,KAAAoI,iBAAA1C,EAAAzG,EAEA,EAEAmJ,iBAAA,SAAA1C,EAAAzG,GACA,GAAA,GAAAA,EAAAgB,IAAA,cAAAhB,EAAAgB,IAAA,WACA,OAAA,EAGA,IAAAqK,EAAA3L,OAAA+G,GAAAC,MACA+J,EAAAnP,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAmC,QAAA,oBAAAsD,EAAAzG,GACA0Q,GAAA,EAEAC,EAAA5P,KAAA6P,QAAA5Q,GAkBA,GAdA2Q,GAAAtF,IAAAsF,IAGA,EAAA3Q,EAAAgB,IAAA,UAAA3E,SAAA2D,EAAAgB,IAAA,YAEA0P,GAAA,GAIAvK,OAAAkF,GAAAwF,SAEAH,GAAA,QAGA,IAAAD,EACA,IAAAK,EAAAL,OAEAK,EAAAJ,EAGA3P,KAAAgQ,WAAAD,EAAA9Q,EACA,EAEA4Q,QAAA,SAAA5Q,GACA,IAAAgR,EAAAhR,EAAAgB,IAAA,QAEA,QAAA,IAAAgQ,EAAA,CAEA,OAAAA,GACA,IAAA,GACA,MACA,IAAA,WACAA,EAAAC,OAAAC,eACA,MACA,IAAA,SACAF,EAAAhR,EAAAgB,IAAA,eAKA,QAGAgQ,GADAA,GADAA,EAAAA,EAAAxU,QAAA,KAAA,MACAA,QAAA,KAAA,MACAA,QAAA,MAAA,KAEA,OAAAwU,CAnBA,CAoBA,EAEA5H,kBAAA,SAAApJ,GAEA,GAAA,GAAAA,EAAAgB,IAAA,cAAAhB,EAAAgB,IAAA,YAAAhB,EAAAgB,IAAA,SACA,OAAA,EAMA,GAAAhB,EAAAgB,IAAA,UAAAA,IAAA,kBACA,OAAA,EAGAqK,aAAArL,EAAAgB,IAAA,SAEA,IAAA0P,GAAA,EAEAvK,OAAAkF,cAAAwF,SACAH,GAAA,GAGA,IAAAD,EAAAnP,QAAAC,QAAAvB,EAAAgB,IAAA,SAAAmC,QAAA,qBAAAnD,GACA,QAAA,IAAAyQ,EACA,IAAAK,EAAAL,OAEAK,EAAAJ,EAGA3P,KAAAgQ,WAAAD,EAAA9Q,EAEA,EAEA+Q,WAAA,SAAAD,EAAA9Q,GACA,GAAA8Q,EAQAxP,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,sBARA,CAEA,IAAAI,EAAAE,QAAAC,QAAA,QAAAvB,EAAAgB,IAAA,WAAAmC,QAAA,iBAEA,IAAA/B,GACAE,QAAAC,QAAA,UAAA4B,QAAA,YAAAnD,EAAAgB,IAAA,MAAA,iBAAAI,EAAAJ,IAAA,YAAAmQ,sBAEA,CAGA,GAIA,GAEArX,EAAA,0BAAA,GAAA,WCjEA,OAjEAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAqQ,cAEA9P,QAAAC,QAAA,UAAAsB,MAAA,0BAAA9B,KAAAsQ,uBACA,EAEAD,aAAA,SAAAhC,EAAAK,EAAAC,EAAAC,GAGA,GAAA3M,EAAAK,KAAA+L,EAAA3J,OAAA4J,OAAA,QACA,IAAAD,EAAA3J,OAAA4J,MAAAC,gBAAA,IAAAF,EAAA3J,OAAA4J,MAAAE,SAAA,CAEA3E,WAAA0G,UAAAlC,EAAA3J,OAAA4J,MAAAC,UACA1E,WAAA2E,SAAAH,EAAA3J,OAAA4J,MAAAE,SAEA,IAAAnO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAwM,GACArO,QAAAC,QAAA,QAAAoO,GAAAxM,QAAA,SAAA/B,EACA,CAoBA,GAjBA4B,EAAAK,KAAA+L,EAAA3J,OAAA8L,QAAA,GACAvO,EAAAC,KAAAmM,EAAA3J,OAAA8L,OAAA,SAAAnG,EAAAnE,GACA,iBAAA,EACA3F,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAAmE,EAAAoG,KAAApG,EAAA2E,SAEAzO,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,EAAA,iBAAAmE,EAEA,GAGApI,EAAAK,KAAA+L,EAAA3J,OAAAS,MAAA,GACAlD,EAAAC,KAAAmM,EAAA3J,OAAAS,KAAA,SAAAX,EAAAsB,GACAvF,QAAAC,QAAA,QAAAoO,GAAAxM,QAAA,eAAA0D,GACAvF,QAAAC,QAAA,QAAAoO,GAAAxM,QAAA,YAAA0D,EAAAtB,EACA,QAGA,IAAA6J,EAAA3J,OAAAgM,WACA,IAAArC,EAAA3J,OAAAgM,KAAA1B,QAAA,CACA,IAAA2B,EAAA,yEACAvB,QAAAC,IAAA,uCAAAsB,GACAvB,QAAAC,IAAAhB,EAAA3J,OAAAgM,KAAA1B,SACAI,QAAAC,IAAA,8BAAAsB,EACA,CASAhS,OAAA,YAAAiQ,EAAA,6BAAAgC,MACA,EAEAN,uBAAA,SAAA5L,GACA,MAAA9B,EAAArC,QAAAC,QAAA,UAAA4B,QAAA,wBAAAsC,GACA,OAAA+C,SAAAoJ,eAAA,YAAAjO,IACA6E,SAAAoJ,eAAA,YAAAjO,GAAAkO,OAEA,GAKA,GAEA/X,EAAA,6BAAA,GAAA,WC/CA,OArBAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAA+Q,eACA,EAEAA,eAAA,SAAA1C,QAEA,IAAAA,EAAAhE,KAAA2G,WAAA,IAAA3C,EAAAhE,KAAA2G,KAAAC,UAAA,IAAA5C,EAAAhE,KAAA2G,KAAAC,WACAC,OAAAC,SAAA9C,EAAAhE,KAAA2G,KAAAC,UAGA,GAAAhP,EAAAK,KAAA+L,EAAA3J,cAAA,IAAA2J,EAAAhE,KAAA+G,cAEA,IAAA/C,EAAAhE,KAAA+G,QAAAH,UAAA,IAAA5C,EAAAhE,KAAA+G,QAAAH,WACAC,OAAAC,SAAA9C,EAAAhE,KAAA+G,QAAAH,SAGA,GAKA,GACAlY,EAAA,4BAAA,GAAA,WCcA,OArCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAqR,aACA,EAEAA,aAAA,SAAAhD,GACA,GAAA,GAAApM,EAAAK,KAAA+L,EAAA3J,cAAA,IAAA2J,EAAAhE,KAAA+G,cACA,IAAA/C,EAAAhE,KAAA+G,QAAAE,iBAAA,IAAAjD,EAAAhE,KAAA+G,QAAAE,gBAAA,CACA,IAAAC,EAAAlD,EAAAhE,KAAAkH,QACAD,EAAA3S,OAAA,YAAA4S,EAAA,0BACA,MAAAC,EAAAnD,EAAAhE,KAAA+G,QAAAE,gBAAA7V,QAAA,gBAAA,IACA6V,EAAApQ,KAAA,WAAA,KACAoQ,EAAApQ,KAAA,YAAA,aACAoQ,EAAApQ,KAAA,aAAAsQ,GAEAF,EAAA7H,KAAA4E,EAAAhE,KAAA+G,QAAAE,iBAAAV,OACAU,EAAAR,QAEA,IAAAW,EAAAH,EAAAI,SAAAC,IACAC,EAAAN,EAAAI,SAAAC,IAAAL,EAAAO,cACAC,EAAAnT,OAAAuS,QAAAa,YAAApT,OAAAuS,QAAAc,SACAC,EAAAtT,OAAAuS,QAAAa,YAEAD,EAAAF,GAAAK,EAAAR,GAIA9S,OAAA,cAAAuT,QAAA,CACAH,UAAAT,EAAAI,SAAAC,IAAA,IACA,IAEA,CAEA,GAKA,GAEA5Y,EAAA,0BAAA,GAAA,WCwHA,OAhKAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAEAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAA,SAAAvB,GACA,QAAAA,EAAAgB,IAAA,eAAAD,KAAAgJ,SAAA/J,EACA,EAAAe,MAEAO,QAAAC,QAAA,cAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,MACAO,QAAAC,QAAA,mBAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GAOA,GANAA,EAAAiB,IAAA,gBAAAF,KAAAiJ,eACAhK,EAAAiB,IAAA,wBAAAF,KAAAmS,uBAKA,GAAAlT,EAAAgB,IAAA,WAAA3E,OAAA,CAEA,IAAAgO,EAAArK,EAAAgB,IAAA,SAKA,GAAA,mBAAAhB,EAAAgB,IAAA,QAIA,IAAAkJ,EAAAlH,EAAAmH,OAAAnK,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,GAEA5M,EADA4M,EAAAlH,EAAA7G,IAAA+N,EAAA,SAAAE,GAAA,OAAAA,EAAA9M,KAAA,QAEA,GAAA,cAAA0C,EAAAgB,IAAA,QAAA,CAYA,QAJA,KAJAkJ,EAAAlH,EAAAkF,KAAAlI,EAAAgB,IAAA,WAAA,SAAAoJ,GAAA,OAAA,GAAAA,EAAAF,QAAA,MAKAA,EAAAlH,EAAA6B,MAAA7E,EAAAgB,IAAA,kBAGA,IAAAkJ,QACA,IAAAA,EAAA5M,MACAA,EAAA4M,EAAA5M,WACA,QAAA,IAAA4M,EACA5M,EAAA4M,EAAAS,KAEA,MAMA,IAAAN,GAAA,KAAAA,GACAC,MAAAC,QAAAF,GACArK,EAAAiB,IAAA,QAAAoJ,QACA,IAAAH,GACAlK,EAAAiB,IAAA,QAAA3D,EAEA,CACA,EAEA0M,cAAA,WACA,IAAAQ,EAAA,GA4CA,OA1CAxH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,GAKA,GAAA1H,EAAAuH,QAAAxJ,KAAAzD,QAGA,GAAA,oBAAAyD,KAAAD,MAAA,EAAAC,KAAAzD,MAAAjB,SACA,GAAA2G,EAAApF,QAAAmD,KAAAzD,MAAA,GAAApB,MAAA,KAAAwO,EAAApN,OACA,IAAA4M,GAAA,OACA,IAAA,GAAAlH,EAAApF,QAAAmD,KAAAzD,MAAAoN,EAAApN,OACA4M,GAAA,OAEA,GAAAlH,EAAAuH,QAAAxJ,KAAAzD,QAAAoN,EAAApN,OAAAyD,KAAAzD,MAEA,GAAA,GAAAoN,EAAAR,UAAAnJ,KAAAN,YACA,IAAAM,KAAAzD,MACA4M,GAAA,OAEAA,GAAA,OALA,IAAAA,GAAA,OAYA,IAAAQ,EAAA/J,UACA+J,EAAA/J,SAAA,GAGA+J,EAAAR,SAAAA,EACAQ,EAAAzD,QAAAlG,KAAApC,GACA+L,EAAArK,QAAAU,KAAAV,QACAqK,EAAAW,aAAAtK,KAAAzD,MACAoN,EAAAC,WAAA,IAAAC,WAAAC,mBAAA,SAAAD,WAAAC,kBAAA7H,EAAA8H,OAAAJ,EAAAC,OAAAD,EAAAC,MAEAD,EAAAO,gBAAAlK,KAAAkK,gBACA,IAAAC,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,oCACAqH,GAAAU,EAAAR,EACA,EAAA3J,MAEAyJ,CACA,EAEA0I,sBAAA,WACA,IAAAC,EAAA,GAEA,mBAAApS,KAAAD,OAIAqS,GAHAA,GAAA,aAGA,WADApS,KAAAqS,YAAA,GACA,KAGA,OAAAD,CACA,EAEA7J,aAAA,SAAA9G,GACA,IAAA8I,EAAA,EACAnK,EAAAqB,EAAAxB,IAAA,WACA,GAAA,GAAAG,EAAA9E,OAIA,GAAA,mBAAAmG,EAAAxB,IAAA,QAIAgC,EAAAC,KAAAT,EAAAxB,IAAA,SAAA,SAAA0F,GACA,IAAA6E,EAAAvI,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAAA,EAAA9M,OAAAoJ,CAAA,GACA4E,GAAAE,OAAAD,EAAAE,KACA,OACA,CAIA,IAAAvB,EAAAlH,EAAAkF,KAAA/G,EAAA,SAAAiJ,GAAA,OAAA5H,EAAAxB,IAAA,UAAAoJ,EAAA9M,KAAA,QAIA,IAAA4M,IACAA,EAAA1H,EAAAxB,IAAA,WAAA,IAEAsK,EAAApB,EAAAuB,IACA,CAEA,OAAAH,CACA,GAKA,GAEAxR,EAAA,iCAAA,GAAA,WCjIA,OAlCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAqR,aACA,EAEAA,aAAA,SAAAhD,GACA,IAAAhO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAiM,EAAAhE,KAAAkH,SAIA,GAAA,GAAAtP,EAAAK,KAAA+L,EAAA3J,QACA,OAAA,EAGA,GAAA2J,EAAAhE,KAAAiI,SAAAC,iBAEAlS,EAAAJ,IAAA,UAAAuS,MAAAnS,EAAAJ,IAAA,iBACA,GAAAoO,EAAAhE,KAAAiI,SAAAG,eACAlS,QAAAC,QAAA,WAAAO,QAAA,UAIA,GAAAsN,EAAAhE,KAAAiI,SAAAG,eAIApS,EAAAU,QAAA,OAIA,GAKA,GACAhI,EAAA,2BAAA,GAAA,WCmCA,OAvEAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,WAAA,aAAAR,KAAAgJ,UACAzI,QAAAC,QAAA,WAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAgJ,SAAA,SAAA/J,GACAA,EAAAiB,IAAA,wBAAAF,KAAA0S,uBACAzT,EAAAiB,IAAA,gBAAAF,KAAA2S,eACA1T,EAAAiB,IAAA,gBAAAF,KAAAiJ,cACA,EAEA0J,cAAA,WACA,OAAA3S,KAAA4S,cACA,IAAA,OAEA,OADArS,QAAAC,QAAA,OAAA4B,QAAA,eAAA,yBACA+H,CAAAnK,MAEA,IAAA,SAEA,OADAO,QAAAC,QAAA,OAAA4B,QAAA,eAAA,wBACA+H,CAAAnK,MAGA,IAAA,WAEA,OADAO,QAAAC,QAAA,OAAA4B,QAAA,eAAA,4BACA+H,CAAAnK,MAEA,QAEA,OADAO,QAAAC,QAAA,OAAA4B,QAAA,eAAA,0BACA+H,CAAAnK,MAEA,EAEA0S,sBAAA,WACA,GAAA,GAAA1S,KAAA6S,qBAEA,OADAtS,QAAAC,QAAA,OAAA4B,QAAA,eAAA,4BACA+H,CAAAnK,KAEA,EAEAiJ,cAAA,WACA,IAAAmC,EAAApL,KACAyJ,EAAA,GAiBA,OAhBAxH,EAAAC,KAAAlC,KAAAI,QAAA,SAAAuJ,GACA,GAAA,GAAAA,EAAAR,SACA,IAAAA,GAAA,OAEAA,GAAA,EAGAQ,EAAAR,SAAAA,EACAQ,EAAAzD,QAAAkF,EAAAxN,GACA+L,EAAArK,QAAA8L,EAAA9L,QACAqK,EAAAW,aAAAc,EAAA7O,MAEA,IAAA4N,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,oBAAAgJ,EAAAwH,aAAA,WACAnJ,GAAAU,EAAAR,EACA,GAEAF,CACA,EAEAlB,aAAA,SAAA9G,GAKA,OAHAA,EAAAxB,IAAA,iBACAwB,EAAAxB,IAAA,QAGA,GAIA,GAEAlH,EAAA,yBAAA,GAAA,WCoCA,OA9GAgM,WAAArL,OAAAoF,OAAA,CAEAgU,WAAA,CAAA,EAEAC,cAAA,CAAA,EAEAjT,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAgJ,UACAhJ,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAAgT,iBACA,EAEAhK,SAAA,SAAA8J,GACA9S,KAAA8S,WAAAA,EAEA,IAAAlE,EAAAkE,EAAA7S,IAAA,UACAD,KAAAM,SAAAC,QAAAC,QAAA,QAAAoO,GAAA,SAAA5O,KAAAiT,cAEAjT,KAAAM,SAAAC,QAAAC,QAAA,WAAA,oBAAAR,KAAAkT,iBACAlT,KAAAM,SAAAC,QAAAC,QAAA,YAAA,oBAAAR,KAAAmT,iBACA,EAEAH,iBAAA,SAAAI,GACApT,KAAAqT,aAAAD,EAAAnT,IAAA,gBACA,EAEAgT,aAAA,SAAA5S,GAEA,IAAAiT,EAAAjT,EAAAJ,IAAA,UAAA0B,OAEA4R,EAAA,CAAA,EACAC,EAAA,CAAA,EAEA,IAAA,IAAAvU,KAAAqU,EAAA,CAEA,IAAA9D,EAAA8D,EAAArU,GACAiH,EAAAsJ,EAAAvP,IAAA,MAGA,GAAA,WAAAuP,EAAAvP,IAAA,QACAsT,EAAArN,GAAAsJ,OACA,GAAA,YAAAA,EAAAvP,IAAA,QAAA,CAEAuT,EADAC,EAAAjE,EAAAvP,IAAA,uBACAuP,CACA,CACA,CAEA,IAAA,IAAAiE,KAAAF,EAAA,CAEA,IAAAG,EAAAH,EAAAE,GAEAE,EAAAlJ,OAAAiJ,EAAAzT,IAAA,kBAEAuT,EAAAC,GAEAE,GAAAH,EAAAC,GAAAxT,IAAA,SAEA,GAAAyT,EAAAzT,IAAA,0BAEA0T,GAAAD,EAAAzT,IAAA,UAIAD,KAAA+S,cAAAU,GAAAE,CACA,CAEA3T,KAAA4T,aACA,EAEAV,gBAAA,SAAAjU,GACA,IAAAwU,EAAAxU,EAAAgB,IAAA,MACA0T,EAAAlJ,OAAAxL,EAAAgB,IAAA,kBAEA4T,EADApJ,OAAAxL,EAAAgB,IAAA,UACA0T,EACA3T,KAAA+S,cAAAU,GAAAI,EAEA7T,KAAA4T,aACA,EAEAT,iBAAA,SAAAlU,GACA,IAAAwU,EAAAxU,EAAAgB,IAAA,sBACA6T,EAAAvT,QAAAC,QAAA,UAAA4B,QAAA,YAAAqR,GACAE,EAAAlJ,OAAAqJ,EAAA7T,IAAA,kBAIA4T,EAFApJ,OAAAxL,EAAAgB,IAAA,UAEA0T,EAEA3T,KAAA+S,cAAAU,GAAAI,EAEA7T,KAAA4T,aACA,EAEAA,YAAA,WAEA,IAAAC,EAAA,EAEA,IAAA,IAAAH,KAAA1T,KAAA+S,cACAc,GAAApJ,OAAAzK,KAAA+S,cAAAW,IAGAG,GAAA7T,KAAAqT,eAEAQ,GAAApJ,OAAAzK,KAAAqT,eAGArT,KAAA8S,WAAA5S,IAAA,QAAA2T,EAAA/G,QAAA,IACA9M,KAAA8S,WAAA/R,QAAA,WACA,GAIA,GACAhI,EAAA,4BAAA,GAAA,WC/FA,OAjBAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAA+T,iBACA,EAEAA,iBAAA,SAAA9U,GACA,IAAAwU,EAAAxU,EAAAgB,IAAA,sBACAyT,EAAAnT,QAAAC,QAAA,UAAA4B,QAAA,YAAAqR,GAEAC,GACAA,EAAAxT,IAAA,uBAAA,EAEA,GAKA,GCdAnH,EAAA,mBAAA,GAAA,WAkCA,OAjCA6F,SAAAC,MAAAC,OAAA,CACAgB,WAAA,WAEAE,KAAAE,IAAA,SAAAF,KAAAG,WAAAC,QAAAC,UAAAJ,IAAA,OAEAD,KAAAE,IAAA,SAAA,CAAA,GAEAK,QAAAC,QAAA,QAAAO,QAAA,aAAAf,MAEAA,KAAA4B,GAAA,eAAA5B,KAAAY,YAAAZ,KACA,EAUAwF,YAAA,SAAA/D,GACAlB,QAAAC,QAAA,QAAAO,QAAA,eAAAf,KAAAyB,EACA,EAEAuS,WAAA,SAAAC,GACA1T,QAAAC,QAAA,QAAAO,QAAA,cAAAf,KAAAiU,EACA,EAEArT,YAAA,WACAL,QAAAC,QAAA,QAAAO,QAAA,eAAAf,KACA,GAIA,GAEAjH,EAAA,wBAAA,CAAA,oBAAA,SAAAmb,GCpBA,OArBAtV,SAAAI,WAAAF,OAAA,CACAG,MAAAiV,EACAxS,WAAA,QAEA5B,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EACA6B,EAAAC,KAAAP,EAAA,SAAA1C,QACA,IAAAA,EAAAkV,MACA,KAAAlV,EAAAkV,IAAAC,WAAAtE,SAAA7Q,EAAAkV,IAAA,GACAlV,EAAAkV,IAAA7I,SAAArM,EAAAkV,KACA,GAIA5T,QAAAC,QAAA,QAAAJ,EAAAC,UAAAJ,IAAA,OAAA6B,MAAA,WAAA9B,KAAAqU,QAAArU,KACA,EAEAqU,QAAA,SAAA/P,GACA,OAAAtE,KAAAuE,UAAA,CAAAlK,KAAAiK,GACA,GAGA,GCpBAvL,EAAA,2BAAA,CAAA,yBAAA,SAAAub,GAigBA,OAhgBAvP,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAuU,MAAA,CAAA,EACAvU,KAAAwU,cAAA,CAAA,EAEAxU,KAAAM,SAAAC,QAAAC,QAAA,QAAA,SAAAR,KAAAyU,eAGAzU,KAAAM,SAAAC,QAAAC,QAAA,UAAA,mBAAAR,KAAA0U,YAMA1U,KAAAM,SAAAC,QAAAC,QAAA,QAAA,eAAAR,KAAAwF,aAGAxF,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAAgU,YAMA,IAAA5I,EAAApL,KACAiC,EAAAC,KAAA2H,WAAA8K,eAAAC,aAAA,SAAAC,GACAzJ,EAAA9K,SAAAC,QAAAC,QAAA,UAAAqU,GAAA,aAAAzJ,EAAA0J,iBACA,GAGA9U,KAAAM,SAAAC,QAAAC,QAAA,QAAA,eAAAR,KAAA+U,qBAGA/U,KAAAgV,KAAA,CAAA,CACA,EASAN,WAAA,SAAA7S,QACA,IAAAA,EAAAzB,QAAA,WACAJ,KAAAyU,cAAA5S,EAAAzB,QAAAC,UAEA,EASAoU,cAAA,SAAApU,GACA,IAAA4U,EAAA,IAAAX,EAAAjU,EAAAJ,IAAA,YAAA2U,aAAA,CAAAvU,UAAAA,IACAL,KAAAuU,MAAAlU,EAAAJ,IAAA,OAAAgV,EACA,IAAA7J,EAAApL,KAEAiC,EAAAC,KAAA+S,EAAAtT,OAAA,SAAAuT,GAQA9J,EAAA4J,KAAAE,EAAAjV,IAAA,UAAA,EAEAmL,EAAA+J,UAAAD,EACA,EACA,EAcAC,UAAA,SAAAD,GAEA,IAAA9J,EAAApL,KAEAoV,EAAAF,EAAAjV,IAAA,MAEAoV,EAAAD,EASA5E,GAPA0E,EAAAjV,IAAA,QAOAmV,EAAAE,MAAA,IAAAC,OAAA,oBACA/E,IAQAA,EAAAA,EAAApV,IAAA,SAAAoU,GAEA,IAAAlL,EAAAkL,EAAA/T,QAAA,SAAA,IAAAA,QAAA,IAAA,IAAAA,QAAA,UAAA,IAKA,GAFAgG,WAAAlB,QAAAC,QAAA,QAAA0U,EAAAjV,IAAA,WAAAmC,QAAA,iBAAAkC,GAEA,oBAAA7C,WAAA,CAEAA,WAAAvB,IAAA,SAAA,GAGAuB,WAAAG,GAAA,eAAAsT,EAAA1P,YAAA0P,GAEA,IAAAvM,EAAAyC,EAAA7C,aAAA9G,YAEA2J,EAAAoK,iBAAAN,EAAA5Q,EAAAqE,GAEA0M,EAAAjK,EAAAqK,WAAA,QAAAnR,EAAAqE,EAAA0M,EAXA,CAYA,IAIA,IAAAd,EAAAa,EAAAE,MAAA,IAAAC,OAAA,kBACAhB,IAQAA,EAAAA,EAAAnZ,IAAA,SAAAsP,GAEA,IAAArQ,EAAAqQ,EAAAjP,QAAA,IAAA,IAAAA,QAAA,SAAA,IAEAwY,EAAAiB,EAAA/U,WAAAoE,UAAA,CAAAlK,KAAAA,IAEA,QAAA,IAAA4Z,EAAA,CAGAA,EAAArS,GAAA,eAAAsT,EAAAlB,WAAAkB,GAEA,IAAAvM,EAAAsL,EAAAhU,IAAA,SAEAoV,EAAAjK,EAAAqK,WAAA,OAAApb,EAAAsO,EAAA0M,EAPA,CAQA,IAOAA,GAFAA,EAAAA,EAAA5Z,QAAA,0BAAA,IAEAA,QAAA,YAAA,IAEA,IACAuE,KAAA6O,MAAA,uBAAAwG,EAAA,OAAArV,KAAA0V,qBAAAL,GAAA,YACA,MAAAM,EAAA,IAAAC,KACAV,EAAAhV,IAAA,QAAAuK,OAAAkL,EAAAE,KAAA7V,KAAA0V,qBAAAL,KAAAvI,QAAAoI,EAAAjV,IAAA,QACA,CAAA,MAAAvC,GAEA0R,QAAAC,IAAA3R,EACA,CAGA,QAAAwX,EAAAjV,IAAA,UAAAiV,EAAAhV,IAAA,QAAA,IAIA,EAWAsV,iBAAA,SAAAN,EAAA5Q,EAAAqE,GACA,IAAA6H,EAAA0E,EAAAjV,IAAA,UACAuQ,EAAAlM,GAAAqE,EACAuM,EAAAhV,IAAA,SAAAsQ,EACA,EAYAjI,aAAA,SAAA9G,GAKA,IAAAlF,EAAAgE,QAAAC,QAAAiB,EAAAxB,IAAA,SAAAmC,QAAA,gBAAAX,GAGAkH,EAAAlH,EAAAxB,IAAA,cACA,IAAA1D,IACAA,GAAA,IAAAA,KAEAoM,EAAApM,GAIA,IAAAuZ,EAAA,IAAAC,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eACAC,EAAAL,EAAAM,cAAAzN,GACA0N,EAAAP,EAAAQ,cAAA3N,GAaA,OAVApM,OADA,IAAA4Z,GAAAxX,OAAA4X,UAAAJ,GACAE,EAEA,EAIA5U,EAAAxB,IAAA,aACA1D,EAAA,GAGAA,CACA,EAeAkZ,WAAA,SAAA1V,EAAAuE,EAAAqE,EAAAyM,GACAA,EAAAA,GAAAF,UAAAjV,IAAA,MAEAuW,IAAA,IAAAzW,EAAA,IAAAuE,EAAA,IACA,IAAAmS,EAAA,IAAAlB,OAAAiB,IAAA,KAEAE,QAAA,IAAA3W,EAAA,IAAAuE,EAAA,SACA,IAAAqS,EAAA,IAAApB,OAAAmB,QAAA,KAKA,OAFAtB,GADAA,EAAAA,EAAA3Z,QAAAgb,EAAA9N,IACAlN,QAAAkb,EAAAhO,EAGA,EASAiO,eAAA,SAAA1B,GACA,IAAAE,EAAAF,EAAAjV,IAAA,MACAmL,EAAApL,KACAiC,EAAAC,KAAAgT,EAAAjV,IAAA,UAAA,SAAA1D,EAAA+H,GACA8Q,EAAAhK,EAAAqK,WAAA,QAAAnR,EAAA/H,EAAA6Y,EACA,GAGA,IAAAb,EAAAa,EAAAE,MAAA,IAAAC,OAAA,kBAYA,OAXAhB,GACAtS,EAAAC,KAAAqS,EAAA,SAAA7J,GAEA,IAAArQ,EAAAqQ,EAAAjP,QAAA,IAAA,IAAAA,QAAA,SAAA,IACAwY,EAAAiB,EAAA/U,WAAAoE,UAAA,CAAAlK,KAAAA,IACA,QAAA,IAAA4Z,EAAA,CACA,IAAA4C,EAAA,IAAAtB,OAAA7K,EAAA,KACA0K,EAAAA,EAAA3Z,QAAAob,EAAA5C,EAAAhU,IAAA,SAFA,CAGA,GAGAmV,CACA,EAUA5P,YAAA,SAAA0P,EAAAzT,GAEA,IAAA6C,EAAA7C,EAAAxB,IAAA,OACA1D,EAAAyD,KAAAuI,aAAA9G,GAEAzB,KAAAwV,iBAAAN,EAAA5Q,EAAA/H,GACA,IAAA8Y,EAAArV,KAAA4W,eAAA1B,GAIAG,GADAA,EAAAA,EAAA5Z,QAAA,0BAAA,MACAA,QAAA,YAAA,IACA,IACAuE,KAAA6O,MAAA,uBAAAwG,EAAA,OAAArV,KAAA0V,qBAAAL,GAAA,mBACA,MAAAM,EAAA,IAAAC,KACAV,EAAAhV,IAAA,QAAAuK,OAAAkL,EAAAE,KAAA7V,KAAA0V,qBAAAL,KAAAvI,QAAAoI,EAAAjV,IAAA,QACA,CAAA,MAAAvC,GACAsC,KAAA6O,SAAAO,QAAAC,IAAA3R,EACA,CACA,QAAAwX,EAAAjV,IAAA,UAAAiV,EAAAhV,IAAA,QAAA,IAIA,EAEA4U,iBAAA,SAAArT,GAEA,GAAAA,EAAAxB,IAAA,YAAA,iBAAAwB,EAAAxB,IAAA,WAAA,CAEA,IAAAsU,EAAA9S,EAAAxB,IAAA,WAAAqV,MAAA,IAAAC,OAAA,kBACAhB,GACAtS,EAAAC,KAAAqS,EAAA,SAAAuC,GACAA,EAAAA,EAAArb,QAAA,SAAA,IAAAA,QAAA,IAAA,IAAAA,QAAA,KAAA,IACAuE,KAAAwU,cAAAsC,GAAA9W,KAAAwU,cAAAsC,IAAA,GACA9W,KAAAwU,cAAAsC,GAAA3a,KAAAsF,EACA,EAAAzB,KARA,CAUA,EAEA+U,oBAAA,SAAAG,GACA,IAAA9J,EAAApL,UACA,IAAAA,KAAAwU,cAAAU,EAAAjV,IAAA,UACAgC,EAAAC,KAAAlC,KAAAwU,cAAAU,EAAAjV,IAAA,SAAA,SAAAwB,GAEA,IAAAlF,EAAA,GAmBAwa,GAZAxa,EADA,SAAAkF,EAAAxB,IAAA,QACAwB,EAAAxB,IAAA,SAGAwB,EAAAxB,IAAA,YASAqV,MAAA,IAAAC,OAAA,wCACAtT,EAAAC,KAAA6U,EAAA,SAAAC,GAEA,IAAAC,EAAA,IAAAD,EAAAvb,QAAA,mBACA,IAAAA,QAAA,kBAAA,IAAA,IAEAc,EAAAA,EAAAd,QAAAub,EAAAC,EACA,GACA,IAAA1C,EAAAhY,EAAA+Y,MAAA,IAAAC,OAAA,kBACAtT,EAAAC,KAAAqS,EAAA,SAAA7J,GAGA,IAAArQ,EAAAqQ,EAAAjP,QAAA,IAAA,IAAAA,QAAA,SAAA,IAAAA,QAAA,KAAA,IAWAyZ,EAAA9J,EAAAmJ,MAAA9S,EAAAxB,IAAA,WAAAsE,UAAA,CAAAlK,KAAAA,IACAwc,EAAA,IAAAtB,OAAA7K,EAAA,KACA/B,EAAAuM,EAAAjV,IAAA,cAMA,IAAA,IACA0I,EAAAyC,EAAA8L,sBAAAvO,EAAAuM,IAWA3Y,EADA,SAAAkF,EAAAxB,IAAA,QACA1D,EAAAd,QAAAob,EAAA,wBAAAxc,EAAA,KACAsO,EAAA,WAEAA,CAEA,GAEAlH,EAAAvB,IAAA,QAAA3D,GACA6O,EAAA4J,KAAAE,EAAAjV,IAAA,UAEAwB,EAAAV,QAAA,YAEAqK,EAAA4J,KAAAE,EAAAjV,IAAA,UAAA,CACA,EAEA,EAEAoU,QAAA,SAAAha,EAAAuU,GACA,OAAA5O,KAAAuU,MAAA3F,GAAArK,UAAA,CAAAlK,KAAAA,GACA,EAEA2Z,WAAA,SAAAkB,EAAAjB,GACA,IAAAoB,EAAArV,KAAA4W,eAAA1B,GAGAG,GADAA,EAAAA,EAAA5Z,QAAA,IAAA,IAAAA,QAAA,IAAA,KACAA,QAAA,YAAA,IACA,IACAuE,KAAA6O,MAAA,uBAAAwG,EAAA,OAAArV,KAAA0V,qBAAAL,GAAA,kBACA,MAAAM,EAAA,IAAAC,KACAV,EAAAhV,IAAA,QAAAuK,OAAAkL,EAAAE,KAAA7V,KAAA0V,qBAAAL,KAAAvI,QAAAoI,EAAAjV,IAAA,QACA,CAAA,MAAAvC,GACA0R,QAAAC,IAAA3R,EACA,CACA,QAAAwX,EAAAjV,IAAA,UAAAiV,EAAAhV,IAAA,QAAA,IACA,EASAgX,sBAAA,SAAAC,EAAAjC,GAmBA,OAjBA,IAAAa,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eAEAI,cAAAa,EAAAjC,EAAAjV,IAAA,OAgBA,EAEAyV,qBAAA,SAAAN,GACA,IAAAgC,EAAA,GACAC,EAAA,GACAC,EAAA,UACAxB,EAAA,IAAAC,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eAuBA,OApBAd,GADAA,EAAAA,EAAA3Z,QAAA,MAAA,KACAA,QAAA,UAAA,KACAN,MAAA,IAEAoc,QAAA,SAAAC,GAEAF,EAAA9b,KAAAgc,GACAH,GAAAG,GAGA,EAAAH,EAAA/b,SACA8b,GAAAtB,EAAAM,cAAAiB,GACAA,EAAA,IAEAD,GAAAI,EAEA,GAEA,EAAAH,EAAA/b,SACA8b,GAAAtB,EAAAM,cAAAiB,IAEAD,CACA,EAEAvI,MAAA,SAAAG,GACAkC,OAAAuG,qBAAArI,QAAAC,IAAAL,EACA,GAKA,GAEAjW,EAAA,kCAAA,GAAA,WCzcA,OA7DAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAA1B,SAAA8Y,MAAAlX,QAAA,cAAA,OAAAR,KAAA2X,oBACA,EAEAA,oBAAA,SAAAC,EAAAnW,GAkBA,GAZAmW,EAAAC,QAAA,CAAA,EACAD,EAAAC,QAAAC,GAAA,CAAA,EAGAvX,QAAAC,QAAA,WAAAO,QAAA,OAAA6W,EAAAnW,QAGA,IAAAmW,EAAAC,QAAAC,GAAAC,cACAH,EAAA1X,IAAA,UAAA,CAAA0X,EAAAC,QAAAC,GAAAC,oBAIA,IAAAH,EAAAC,QAAAC,GAAAE,WAAA,IAAAJ,EAAAC,QAAAC,GAAAG,SAAA,CAEA,IAAAvR,EAAAkR,EAAAre,OAAAmN,YAEA,IAAAkR,EAAAC,QAAAC,GAAAG,WACAvR,EAAAwR,eAAAN,EAAAC,QAAAC,GAAAG,eAGA,IAAAL,EAAAC,QAAAC,GAAAE,YACA,IAAAJ,EAAAC,QAAAC,GAAAE,KAAAG,WACAzR,EAAAyR,SAAAC,SAAAR,EAAAC,QAAAC,GAAAE,KAAAG,eAGA,IAAAP,EAAAC,QAAAC,GAAAE,KAAAK,gBACA3R,EAAAyR,SAAAG,UAAAV,EAAAC,QAAAC,GAAAE,KAAAK,oBAGA,IAAAT,EAAAC,QAAAC,GAAAE,KAAAO,QACA5Z,OAAA,4CAAAuD,KAAA,WACAlC,KAAAwY,KAAAZ,EAAAC,QAAAC,GAAAE,KAAAO,OAAAvY,KAAAzD,MACA,IAIAqb,EAAA1X,IAAA,SAAAwG,EAEA,CAEAhN,OAAA6I,KAAAqV,EAAAC,QAAAC,IAAAxc,OAAA,IACA8T,QAAAC,IAAA,yDAAA,gCACAD,QAAAC,IAAA,mMAGA,GAKA,GACAtW,EAAA,wBAAA,GAAA,WC8NA,OA7RAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,aAAAR,KAAAyY,WACAzY,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAA0Y,eACA,EAEAD,UAAA,SAAAxZ,GACAe,KAAA2Y,kBAAA1Z,EACA,EAEA0Z,kBAAA,SAAA1Z,GACAA,EAAAiB,IAAA,oBAAAF,KAAA4Y,mBACA3Z,EAAAiB,IAAA,sBAAAF,KAAA6Y,qBACA5Z,EAAAiB,IAAA,kBAAAF,KAAA8Y,iBACA7Z,EAAAiB,IAAA,gBAAAF,KAAA4I,eAEA3J,EAAAuC,SAAAxB,KAAAwB,QACA,EAEAoX,kBAAA,WACA,OAAA5Y,KAAA+Y,aACA,EAEAF,oBAAA,WACA,OAAA7Y,KAAAgZ,eACA,EAEAF,gBAAA,WACA,QAAA,IAAA9Y,KAAAiZ,UAAA,GAAAjZ,KAAAiZ,SAIA,MAAA,oHADA,GAAAjZ,KAAAiK,SAAA,gCAAA,gFAEA,EAEAyO,eAAA,SAAAQ,GACAA,EAAAja,MAAAiB,IAAA,KAAAgZ,EAAAxT,IACA,IAAAA,EAAA/G,OAAAua,EAAAxT,IAAAyB,KAAA,eAAA,GAIA,GAHA+R,EAAA5Y,SAAAC,QAAAC,QAAA,QAAA0Y,EAAAja,MAAAgB,IAAA,WAAA,gBAAAD,KAAAiB,aAAAiY,QAGA,IAAAA,EAAAja,MAAAgB,IAAA,cAAA,aAAAiZ,EAAAja,MAAAgB,IAAA,aAEA,OADAtB,OAAA+G,GAAAyT,QACA,EAIA,IAAAC,EAAApZ,KAAAqZ,kBAAAH,EAAAja,MAAAgB,IAAA,gBAEAiZ,EAAAja,MAAAiB,IAAA,cAAAkZ,GAEA,IAAAE,EAAA,CACAC,QAAA,CAAAC,EAAAC,EAAA7B,KACAA,EAAA8B,SAAAC,aAAA,kBAAAhb,OAAA+G,GAAAxE,KAAA,oBACA0W,EAAA8B,SAAAC,aAAA,gBAAA,IAEAP,WAAAA,EACAQ,UAAAR,EACAM,UAAA,EACAG,eAAAT,EACAU,KAAA,SACAC,YAAA,EACAC,cAAA,OACAC,QAAAja,KAAAka,WAAAhB,EAAAja,OACAkb,QAAAna,KAAAoa,WAAAlB,EAAAja,QAGA,MAAAob,EAAAra,KAAAsa,oBACAD,IACAf,EAAA5S,OAAA2T,GAIA,IAAAE,EAAAha,QAAAC,QAAA,aAAA4B,QAAA,kBAAAkX,EAAAJ,QACA,IAAAqB,IACAjB,EAAAiB,GAGA,IAAA3C,EAAA4C,UAAA9U,EAAA4T,GAEA,GAAAJ,EAAAja,MAAAgB,IAAA,iBAAAiZ,EAAAja,MAAAgB,IAAA,WACA2X,EAAA6C,YAAA,IAAAxS,KACA2P,EAAA8C,QAAA9C,EAAA6C,aACAvB,EAAAja,MAAAiB,IAAA,QAAA0X,EAAA6C,cAGA,GAAAvB,EAAAja,MAAAgB,IAAA,iBACA,iBAAAiZ,EAAAja,MAAAgB,IAAA,OACAiZ,EAAAja,MAAAgB,IAAA,MAAA0a,SAAA,MACA,iBAAAzB,EAAAja,MAAAgB,IAAA,UACAD,KAAA4a,UAAA1B,EAAAja,MAAAgB,IAAA,SAAA,IAAAgI,QAEA2P,EAAA6C,YAAA,IAAAxS,KACA2P,EAAA8C,QAAA9C,EAAA6C,aAAA,GACAvB,EAAAja,MAAAiB,IAAA,QAAA0X,EAAA6C,cAIAla,QAAAC,QAAA,cAAAO,QAAA,OAAA6W,EAAAsB,EAAAja,MAAAia,GAEA3Y,QAAAC,QAAA,aAAAO,QAAA,OAAA6W,EAAAsB,EAAAja,MAAAia,EACA,EAEAjY,aAAA,SAAAZ,GAEA,GAAA4B,EAAA4Y,SAAA7a,KAAAf,MAAAgB,IAAA,UAAA,CAEA,MAAA6a,EAAA9a,KAAA0F,GAAAgC,cAAA,wBAAAnL,MACAyD,KAAAf,MAAAiB,IAAA,QAAA4a,EACA,CAGA,IAAA,IADA9a,KAAA0F,GAAAqV,QAAAzT,QACAC,OAAA,OACAhH,QAAAC,QAAA,kBAAAO,QAAA,aAEA,cAAAf,KAAAf,MAAAgB,IAAA,cACA,OAIA,GAAA,aAAAD,KAAAf,MAAAgB,IAAA,aACA,OAAA,EAEA,IAAA+a,EAAArc,OAAAqB,KAAA0F,IAAAyB,KAAA,SAAAxB,MACAsV,EAAAtc,OAAAqB,KAAA0F,IAAAyB,KAAA,WAAAxB,MACAuV,EAAAvc,OAAAqB,KAAA0F,IAAAyB,KAAA,SAAAxB,MACAwV,EAAAnb,KAAAf,MAAAgB,IAAA,SACAmb,GAAA,EAGAA,EADAnZ,EAAA4Y,SAAAM,GACAA,EAAAC,KAEAD,EAGA,IAAAL,EAAA,CACAM,KAAAA,EACAJ,KAAAA,EACAC,OAAAA,EACAC,KAAAA,GAGAlb,KAAAf,MAAAiB,IAAA,QAAA4a,EACA,EAEAZ,WAAA,SAAAzY,GACA,IAAAwY,EAAA,KACA,QAAA,IAAAxY,EAAAxB,IAAA,oBAAA,CACA,MAAAob,EAAA5Z,EAAAxB,IAAA,oBACAob,IACApB,EAAAO,UAAAtS,WAAA,IAAAD,KAAA7C,OAAAiW,IAAA5Z,EAAAxB,IAAA,gBAEA,CACA,OAAAga,CACA,EAEAG,WAAA,SAAA3Y,GACA,IAAA0Y,EAAA,KACA,QAAA,IAAA1Y,EAAAxB,IAAA,kBAAA,CACA,MAAAqb,EAAA7Z,EAAAxB,IAAA,kBACAqb,IACAnB,EAAAK,UAAAtS,WAAA,IAAAD,KAAA7C,OAAAkW,IAAA7Z,EAAAxB,IAAA,gBAEA,CACA,OAAAka,CACA,EAEAd,kBAAA,SAAAD,IAEAA,GAAApZ,KAAAf,QACAma,EAAApZ,KAAAf,MAAAgB,IAAA,gBAGAmZ,IACAA,EAAA,WAGA,MAAAmC,EAAA,CACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,aAAA,QACA,oBAAA,WACAC,QAAAtL,OAAAkJ,WAAAlJ,OAAAkJ,WAAA,WAEA,OAAA1f,OAAA6I,KAAAgZ,GAAAZ,SAAAvB,GAAAmC,EAAAnC,GAAAA,CACA,EAEAxQ,cAAA,SAAAtJ,GAIA,MAHA,iBAAAU,KAAAyb,YACAnc,GAAA,kBAEAA,CACA,EAEAgb,kBAAA,WACA,IAAAoB,EAAA,CAAA,EAwBA,OAvBAxL,UACAA,OAAAqI,QAAArI,OAAAyL,eACAD,EAAAnD,OAAA,CAAA,EACArI,OAAAqI,SACAmD,EAAAnD,OAAAH,SAAAlI,OAAAqI,QAEArI,OAAAyL,cACAD,EAAAnD,OAAAD,UAAApI,OAAAyL,eAGAzL,OAAAiI,UAAAjI,OAAAmI,iBACAqD,EAAAvD,SAAA,CAAA,EACAjI,OAAAiI,WACAuD,EAAAvD,SAAAC,SAAAlI,OAAAiI,UAEAjI,OAAAmI,gBACAqD,EAAAvD,SAAAG,UAAApI,OAAAmI,gBAGAnI,OAAA0L,cACAF,EAAAxD,eAAAhI,OAAA0L,eAGA3Z,EAAA4Z,QAAAH,IAAAA,CACA,EAIAla,SAAA,WAEA,GAAA,aAAAxB,KAAAC,IAAA,aACA,OAAAD,KAAAC,IAAA,SAEA,IAAAyF,EAAA1F,KAAAC,IAAA,MACA+a,EAAArc,OAAA+G,GAAAyB,KAAA,SAAAxB,MACAsV,EAAAtc,OAAA+G,GAAAyB,KAAA,WAAAxB,MACAuV,EAAAvc,OAAA+G,GAAAyB,KAAA,SAAAxB,MACAwV,EAAAnb,KAAAC,IAAA,SACAmb,GAAA,EAGAA,EADAnZ,EAAA4Y,SAAAM,GACAA,EAAAC,KAEAD,EAGA,IAAA5e,EAAA,GAcA,YAZA,IAAA6e,IACA7e,GAAA6e,QAGA,IAAAJ,QAAA,IAAAC,IACA1e,GAAA,IAAAye,EAAA,IAAAC,QAGA,IAAAC,IACA3e,GAAA,IAAA2e,GAGA3e,CAUA,EAEAqe,UAAA,SAAAkB,EAAAC,GACA,MAAAC,EAAA,IAAA/T,KAAA6T,GACAG,EAAA,IAAAhU,KAAA8T,GAGA,OAFAC,EAAAE,SAAA,EAAA,EAAA,EAAA,GACAD,EAAAC,SAAA,EAAA,EAAA,EAAA,GACAF,EAAAlU,YAAAmU,EAAAnU,SACA,GAKA,GAEA/O,EAAA,6BAAA,GAAA,WClQA,OA9BAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,aAAA,aAAAR,KAAAmc,eACAnc,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAAoc,eACA,EAEAD,cAAA,SAAAld,GACAsB,QAAAC,QAAA,aAAAsB,MAAA,kBAAA9B,KAAAqc,eAAArc,KAAAf,EAAArB,GACA,EAEAye,eAAA,SAAAhO,EAAAnI,GACA,IAAAjH,EAAAsB,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACAjH,EAAAiB,IAAA,QAAAmO,GACA9N,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,iBACA,EAEAmc,eAAA,WACA,IAAAE,EAAA,EACA3d,OAAA,gBAAAuD,KAAA,WACA,IACAqa,WAAA/J,MAAA8J,EACA,CAAA,MAAA5e,GACA0R,QAAAC,IAAA,4CACA,CACAiN,GACA,EACA,GAIA,GACAvjB,EAAA,+BAAA,GAAA,WC6CA,OA7EAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,gBAAA,aAAAR,KAAAmc,cACA,EAEAA,cAAA,SAAAld,GACA,MAAA2P,EAAA3P,EAAAgB,IAAA,UAEAD,KAAAwc,iBAAA5N,EAAA3P,GAEAwd,YAAAzc,KAAAwc,iBAAA,KAAA5N,EAAA3P,EACA,EAEAud,iBAAA,SAAA5N,EAAA3P,GACA,IACAsB,QAAAC,QAAA,QAAAoO,GAAA7N,QAAA,iBAAA9B,GACAsd,WAAAG,MAAA,WACAH,WAAAI,QAAA1d,EAAAgB,IAAA,YAAA,CACA2c,OAAA,aACAC,KAAA,SAAAC,GACA7d,EAAAiB,IAAA,QAAA4c,GACAvc,QAAAC,QAAA,QAAAoO,GAAA7N,QAAA,gBAAA9B,EACA,EACA,EACA,CAAA,MAAAvB,GAEAiB,OAAA8I,UAAA7F,GAAA,cAAAmb,IAEA,IAGAC,EAHAC,EAAAC,6BAIAje,EAAAkB,WAAAwB,OAAA4V,QAAA9V,IACA,WAAAA,EAAAxB,IAAA,UACA+c,EAAAvb,EAAAxB,IAAA,SAIAM,QAAAC,QAAA,UAAA4B,QAAA,YAAA4a,EAAA,uBAAA/d,EAAAkB,WAAAC,QAAAC,UAAAJ,IAAA,YAAAkd,yBAGAnd,KAAAod,gCAAAne,EAAAge,EAAAI,SAAAL,EAAAD,IAEA,CACA,EAEAK,gCAAA,SAAAne,EAAAoe,EAAAL,EAAAD,GAGA,KADAM,EAAA/hB,QAAA,GAAA+hB,EAAA1C,SAAA,mBAAA0C,EAAA/hB,QAAA,GACA,CACA,IAAAgiB,EAAA7V,SAAAsH,cAAA,OACAuO,EAAA3D,aAAA,KAAA,8BACA2D,EAAAC,WAAAte,EAAAkB,WAAAC,QAAAC,UAAAJ,IAAA,YAAAud,sBASA,IAAAC,EAAA,IAAAC,YAAA,kBAAA,CAAAC,OAPA,CACAN,SAAAA,EACAO,QAAAN,EACAN,cAAAA,EACAD,WAAAA,KAIAtV,SAAAoW,cAAAJ,GAGA,MAAAK,EAAArW,SAAAsW,uBAAA,iCACAxU,MAAA5P,UAAAG,MAAAK,KAAA2jB,GACAvG,QAAAhI,IACAA,EAAAyO,OAAAV,IAGA,CACA,GAKA,GACAvkB,EAAA,wBAAA,GAAA,WCaA,OA5FAgM,WAAArL,OAAAoF,OAAA,CAEAmf,WAAA,GACAC,iBAAA,GAEApe,WAAA,WACAE,KAAAM,SAAA1B,SAAA8Y,MAAAlX,QAAA,eAAA,aAAAR,KAAAme,2BACA,EAEAA,2BAAA,SAAA1c,GACAzB,KAAAie,WAAA9hB,KAAAsF,GAEA,IAAAmN,EAAAnN,EAAAxB,IAAA,UAEAD,KAAAM,SAAAC,QAAAC,QAAA,QAAAoO,GAAA,aAAA,SAAAvO,GAEA,IAAA+d,EAAA3c,EAAAxB,IAAA,WAAAqV,MAAA,IAAAC,OAAA,mBACA6I,IAEAnc,EAAAC,KAAAkc,EAAA,SAAAC,GACA,IAAAC,EAAAD,EAAA5iB,QAAA,UAAA,IAAAA,QAAA,IAAA,IACAgG,EAAApB,EAAAJ,IAAA,UAAAsE,UAAA,CAAAD,IAAAga,SACA,IAAA7c,IAEAzB,KAAAke,iBAAA/hB,KAAAsF,GACAzB,KAAAM,SAAAC,QAAAC,QAAA,SAAAiB,EAAAxB,IAAA,OAAA,oBAAAD,KAAAue,sBACA,EAAAve,MAGAA,KAAAue,uBACA,EAAAve,KACA,EAEAue,qBAAA,SAAA9c,GACAQ,EAAAC,KAAAlC,KAAAie,WAAA,SAAAO,GACA,IAAAjiB,EAAAiiB,EAAAve,IAAA,SACAgC,EAAAC,KAAAlC,KAAAke,iBAAA,SAAAzc,GAKA,IAAAsV,EAAAxa,EAAA+Y,MAAA,IAAAC,OAAA,yCACAtT,EAAAC,KAAA6U,EAAA,SAAAC,IAKA,EAAAA,EAAAna,QAAA,mBAAA4E,EAAAxB,IAAA,UACA1D,EAAAA,EAAAd,QAAAub,EAAA,UAAAvV,EAAAxB,IAAA,OAAA,KAEA,GAEA,IAAAoe,EAAA,UAAA5c,EAAAxB,IAAA,OAAA,IAEA,MAAAwe,EAAA,aAAAhd,EAAAxB,IAAA,QAAAD,KAAA0e,oBAAAjd,GAAAA,EAAAD,WAMAjF,EAAAA,EAAAd,QAAA4iB,EAAA,yBACA5c,EAAAxB,IAAA,OAAA,KACAwe,EAAA,UACA,EAAAze,MACAwe,EAAAte,IAAA,QAAA3D,GACAiiB,EAAAzd,QAAA,WACA,EAAAf,KACA,EAEA0e,oBAAA,SAAAjd,GACA,MAAAkd,EAAAjlB,OAAA6I,KAAAd,EAAAD,YACA,IAAAod,EAAA,GAAAC,EAAA,GAgBA,OAdA5c,EAAAC,KAAAyc,EAAA,SAAAzY,GACA,IAAA,IAAA2Y,EAAAhiB,QAAAqJ,GAAA,CACA,MAAAsJ,EAAAjP,QAAAC,QAAA,UAAA4B,QAAA,YAAA8D,GACA,QAAA,IAAAsJ,EAAA,CAEA,IAAA,IADA,CAAA,SAAA,OAAA,SAAA,WAAA,kBAAA,UAAA,KAAA,OAAA,UAAA,SAAA,UAAA,aAAA,gBAAA,uBAAA,qBAAA,mBAAA,gBAAA,YAAA,gBACA3S,QAAA2S,EAAAvP,IAAA,UAAAuP,EAAAhO,WAAA4S,WAAA9Y,OAAA,EAAA,CACA,MAAAsB,EAAA6N,OAAAvE,EAAA/K,MAAA,KAAA2jB,OAAA,EACAF,GAAA,MAAApP,EAAAvP,IAAA,SAAA,IAAArD,EAAA,MAAA4S,EAAAhO,WAAA,OACAqd,EAAA1iB,KAAA+J,EACA,CACA,CACA,CACA,GAEA0Y,CACA,GAKA,GC3FA7lB,EAAA,uBAAA,GAAA,WAkCA,OAjCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAAR,KAAA+e,cACA/e,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,iBAAAR,KAAA+e,cAEAxe,QAAAC,QAAA,QAAAsB,MAAA,YAAA9B,KAAA+e,aACA,EAEAA,aAAA,SAAA7F,GAEAA,IAAAA,EAAAxT,IAAA,mBAAAwT,EAAAjZ,KAEA,aAAAiZ,EAAAjZ,IAAA,UACAiZ,EAAAxT,GAAA,YAAAwT,EAAAjZ,IAAA,UAAA,SAIAtB,OAAAua,EAAAxT,IAAAyB,KAAA,YAAAjF,KAAA,SAAAwD,GACA,IAAAsZ,EAAArgB,OAAAqB,MAAAgf,KAAA,UAAA,CACAC,MAAA,gBACAC,QAAAvgB,OAAAqB,MAAAqK,KAAA,QACAtJ,QAAA,mBACAoe,mBAAA,EACAC,cAAA,IAGAzgB,OAAAqB,MAAA4B,GAAA,qBAAA,WACAod,EAAAK,OACA,EACA,EACA,GAIA,GAEAtmB,EAAA,2BAAA,GAAA,WCtBA,OAjBAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAS,QAAAC,QAAA,WAAAsB,MAAA,gBAAA9B,KAAAuI,aAAAvI,KACA,EAEAuI,aAAA,SAAA9G,GACA,GAAA,YAAAA,EAAAxB,IAAA,QAAA,CACA,IAAAkF,EAAA5E,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WACAkQ,OAAA,IAAAhL,EAAAA,EAAAlF,IAAA,kBAAA,GACAqf,EAAA3gB,OAAA,gBAAA8K,KAAA0G,GAAAqI,OACA,OAAA/W,EAAAxB,IAAA,SAAAxE,QAAA6jB,EAAA,GACA,CAEA,OAAA7d,EAAAxB,IAAA,QACA,GAIA,GChBAlH,EAAA,+BAAA,GAAA,WAwOA,OAvOAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,cAAAR,KAAAuf,kBACAvf,KAAAM,SAAAC,QAAAC,QAAA,YAAA,cAAAR,KAAAwf,YAGAxf,KAAAyf,iBAEAzf,KAAA0f,eAAA,CAAA,OAEA,IAAA/gB,OAAAghB,aAEAhhB,OAAAghB,WAAAvf,QAAAwf,MAAA,CACAC,MAAA,uCACAC,YAAA,yCACAC,aAAA,qCACAC,UAAA,uCACAC,WAAA,wCACAC,OAAA,oCACAC,QAAA,qCAEAC,KAAA,kCACAC,MAAA,iCAEAhB,MAAA,8BACAiB,KAAA,kCACAC,OAAA,8CAGAC,OAAA,oCACAC,KAAA,kCACAC,OAAA,oCACAC,MAAA,uCAEAC,MAAA,4BACAC,YAAA,gCAIAC,KAAA,2BACAC,OAAA,sBAIAC,MAAA,mCAGAC,UAAA,uCACAC,KAAA,2BACAC,cAAA,iCAIA,EAEA5B,iBAAA,SAAArG,GACA,GAAA,GAAAA,EAAAja,MAAAgB,IAAA,gBACA,OAAA,EAKA,IAAAmL,EAAApL,KASAohB,EAAA,CACA,CAAA,iBAAA,CAAA,UACA,CAAA,YAAA,CAAA,OAAA,SAAA,YAAA,UACA,CAAA,QAAA,CAAA,KAAA,OACA,CAAA,YAAA,CAAA,cACA,CAAA,cAAA,CAAA,aAAA,WACA,CAAA,QAAA,CAAA,UACA,CAAA,UAAA,CAAA,OAAA,UAGA,GAAAlI,EAAAja,MAAAgB,IAAA,mBAAA,GAAAohB,aAAAC,KACAF,EAAAjlB,KAAA,CAAA,QAAA,CAAA,iBAGAwC,OAAAua,EAAAxT,IAAAyB,KAAA,eAAAwY,WAAA,CACAyB,QAAAA,EACAG,QAAA,CACAC,WAxBA,SAAAC,GACA,OAAArW,EAAAoW,WAAAC,EACA,EAuBAC,YAtBA,SAAAD,GACA,OAAArW,EAAAsW,YAAAD,EACA,GAsBAzP,OAAA,IACA2P,WAAA,CACA1C,MAAA,UACA2C,aAAA,GAEAC,cAAA,EACAC,UAAA,CACAC,SAAA,SAAArkB,GACAwb,EAAAja,MAAAiB,IAAA,QAAAvB,OAAAqB,MAAA2f,WAAA,QACA,KAIA,IAAAqC,EAAArjB,OAAAua,EAAAxT,IAAAyB,KAAA,gBAAA8a,KAAA,kBAAA9a,KAAA,UACA6a,EAAAE,YAAA,WACA,OAAAvjB,OAAA,SAAA,CACAwjB,MAAAxjB,OAAAqjB,GAAA9gB,KAAA,SACAuI,KAAAzJ,KAAAoiB,WAEA,EACA,EAEAZ,WAAA,SAAAC,GACA,IAAArW,EAAApL,KACAqiB,EAAA1jB,OAAAghB,WAAA0C,GACAb,EAAAjhB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,4BACAkgB,EAAA/hB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,8BACA,OAAAigB,EAAAE,YAAA,CACAF,EAAAG,OAAA,CACAC,UAAA,8BACAC,SAAAlB,EAAA,CAAA,GACAmB,QAAAzS,OAAA0S,2BACA5U,MAAA,SAAAtQ,GACA0N,EAAAyX,gBAAAnlB,EAAA+jB,EACA,EACApX,KAAA,CACAyY,OAAA,cAGAT,EAAAU,SAAA,CACAV,EAAAE,YAAA,CACAS,SAAA,CACAX,EAAAG,OAAA,CACAE,SAAAJ,EAAA,CAAA,GACAK,QAAA,YAKAM,QACA,EAEAvB,YAAA,SAAAD,GACA,IAAArW,EAAApL,KACAqiB,EAAA1jB,OAAAghB,WAAA0C,GACAX,EAAAnhB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,6BACA,OAAAigB,EAAAG,OAAA,CACAC,UAAA,kBACAC,SAAAhB,EAAA,CAAA,GACAiB,QAAAzS,OAAAgT,4BACAlV,MAAA,SAAAtQ,GACA0N,EAAA+X,iBAAAzlB,EAAA+jB,EACA,IACAwB,QACA,EAEAE,iBAAA,SAAAzlB,EAAA+jB,GAGA,GAFAA,EAAAhf,OAAA,oBAEAzC,KAAAyf,iBACAzf,KAAAyf,iBAAA2D,WADA,CAMApjB,KAAAyf,iBAAA4D,GAAAC,MAAAC,OAAA9D,iBAAA4D,GAAAC,MAAA,CACAE,MAAAtT,OAAAuT,4BACAjB,OAAA,CAAAhK,KAAA,YAGA,IAAApN,EAAApL,KAGAA,KAAAyf,iBAAA7d,GAAA,SAAA,WAGA,IAAA8hB,EAAAtY,EAAAqU,iBAAAkE,QAAA1jB,IAAA,aAAA6D,QAAA8f,SACAxY,EAAAyY,YAAAH,EAAAjC,EACA,GAGAzhB,KAAAyf,iBAAA2D,MAnBA,CAoBA,EAEAP,gBAAA,SAAAnlB,EAAA+jB,GACA,IAAAqC,EAAArC,EAAAhf,OAAA,sBACAgf,EAAAhf,OAAA,oBACA,IAAA+V,EAAAsL,EAAA1P,WACApU,KAAA0f,eAAA+B,EAEA9iB,OAAAjB,EAAAsJ,QAAAC,QAAA,uCAAArF,GAAA,mBAAA,SAAAlE,GACA,OAAA,CACA,GAEAiB,OAAAjB,EAAAsJ,QAAAC,QAAA,uCAAArF,GAAA,oBAAA,SAAAlE,GACAiB,OAAAjB,EAAAsJ,QAAA2D,SAAAA,SAAAxD,KAAA,cAAAxB,IAAA6S,GACA7Z,OAAAjB,EAAAsJ,QAAA2D,SAAAA,SAAAxD,KAAA,aAAA2J,OACA,EACA,EAEA0O,WAAA,SAAA9hB,GACA,IAAAqmB,EAAAplB,OAAAjB,EAAAsJ,QAAA2D,SAAAxD,KAAA,cACA6c,EAAArlB,OAAAjB,EAAAsJ,QAAA2D,SAAAxD,KAAA,aACA8c,EAAAtlB,OAAAjB,EAAAsJ,QAAA2D,SAAAxD,KAAA,oBAEA,GADAnH,KAAA0f,eAAAjd,OAAA,uBACA9D,OAAAjB,EAAAsJ,QAAAkd,SAAA,eAAA,CACA,IAAA1L,EAAAuL,EAAApe,MACAwe,EAAAH,EAAAre,MACAye,IAAAH,EAAA/pB,KAAA,WACA,GAAAse,EAAAld,QAAA,GAAA6oB,EAAA7oB,QACA0E,KAAA0f,eAAAjd,OAAA,oBAAA,CAAA+V,KAAAA,EAAA2L,IAAAA,EAAAC,YAAAA,GAEA,CACAL,EAAApe,IAAA,IACAqe,EAAAre,IAAA,IACAse,EAAA/pB,KAAA,WAAA,GACAyE,OAAAjB,EAAAsJ,QAAAC,QAAA,2BAAAwB,YAAA,OACA,EAEAob,YAAA,SAAAP,EAAA7B,GACAA,EAAAhf,OAAA,uBACA,SAAA6gB,EAAAvjB,KACA0hB,EAAAhf,OAAA,qBAAA6gB,EAAAa,KAEA1C,EAAAhf,OAAA,oBAAA,CAAA+V,KAAA8K,EAAAe,SAAAF,IAAAb,EAAAa,KAGA,GAIA,GACAprB,EAAA,8BAAA,GAAA,WCtMA,OAtCAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,cAAA,aAAAR,KAAAgJ,UACAhJ,KAAAM,SAAAC,QAAAC,QAAA,cAAA,cAAAR,KAAAskB,WACA,EAEAtb,SAAA,SAAA/J,GACAA,EAAAiB,IAAA,gBAAAF,KAAAukB,cACA,EAEAD,WAAA,SAAApL,GACAva,OAAAua,EAAAxT,IAAAyB,KAAA,eAAAqd,QAEA,EAEAD,cAAA,WAGA,IAFA,IAAA9a,EAAAhC,SAAAsH,cAAA,QAEAhU,EAAA,EAAAA,GAAAiF,KAAAykB,gBAAA,EAAA1pB,IAAA,CACA,IAAAoP,EAAA5J,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kCACAsiB,EAAA3pB,EAAA,EACA2N,EAAA,GAGA1I,KAAAzD,OAAAmoB,IACAhc,EAAA,WAEA,IAAAic,EAAAxa,EAAA,CAAAvM,GAAAoC,KAAApC,GAAA0B,QAAAU,KAAAV,QAAAolB,IAAAA,EAAAhc,QAAAA,EAAAuB,SAAAjK,KAAAiK,WACAR,EAAA0F,YACA1H,SAAAmd,cAAAC,yBAAAF,GAEA,CACA,OAAAlb,EAAA2Y,SACA,GAKA,GAEArpB,EAAA,yBAAA,GAAA,WCAA,OAzCAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAgJ,SACA,EAEAA,SAAA,SAAA/J,GAEAe,KAAAM,SAAAC,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAA,cAAAD,KAAAwf,YACAxf,KAAAM,SAAAC,QAAAC,QAAA,SAAAvB,EAAAgB,IAAA,OAAA,cAAAD,KAAA8kB,WACA,EAEAtF,WAAA,SAAA9hB,EAAAuB,GACA,IACA1C,EADAoC,OAAAjB,EAAAqnB,eACApa,SAAAxD,KAAA,gBAAAxB,MACA3F,KAAAglB,UAAA/lB,EAAA1C,EACA,EAEAuoB,WAAA,SAAApf,EAAAzG,EAAAoH,GACA,IAAAA,GACArG,KAAAglB,UAAA/lB,EAAAyG,EAAAC,MACA,EAEAqf,UAAA,SAAA/lB,EAAA1C,GACA,GAAAA,EAAA,CACA,IACA0oB,EAAA,CACArb,MAAArN,EACAA,MAAAA,EACA4M,SAAA,GAJAlK,EAAAgB,IAAA,WAMA9D,KAAA8oB,GAEAhmB,EAAAgB,IAAA,SACA9D,KAAAI,GAGA0C,EAAA8B,QAAA,WAbA,CAcA,GAKA,GClCAhI,EAAA,iCAAA,GAAA,WA8DA,OA7DAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAIAE,KAAAklB,YAAA,GACAllB,KAAAmlB,YAAA,GAKA5kB,QAAAC,QAAA,eAAAsB,MAAA,iBAAA9B,KAAAolB,cAAAplB,MACAO,QAAAC,QAAA,eAAAsB,MAAA,iBAAA9B,KAAAqlB,cAAArlB,MAKAO,QAAAC,QAAA,eAAAsB,MAAA,kBAAA9B,KAAAslB,eAAAtlB,MACAO,QAAAC,QAAA,eAAAsB,MAAA,kBAAA9B,KAAAulB,eAAAvlB,MAUAO,QAAAC,QAAA,iBAAAsB,MAAA,iBAAA9B,KAAAolB,cAAAplB,MACAO,QAAAC,QAAA,iBAAAsB,MAAA,iBAAA9B,KAAAqlB,cAAArlB,MAMAO,QAAAC,QAAA,iBAAAsB,MAAA,kBAAA9B,KAAAslB,eAAAtlB,MACAO,QAAAC,QAAA,iBAAAsB,MAAA,kBAAA9B,KAAAulB,eAAAvlB,KAKA,EAEAolB,cAAA,SAAArnB,EAAAynB,GACAxlB,KAAAklB,YAAAM,GAAAznB,CACA,EAEAunB,eAAA,WACA,OAAAtlB,KAAAklB,WACA,EAEAG,cAAA,SAAAtnB,EAAAynB,GACAxlB,KAAAmlB,YAAAK,GAAAznB,CACA,EAEAwnB,eAAA,WACA,OAAAvlB,KAAAmlB,WACA,GAKA,GACApsB,EAAA,kBAAA,GAAA,WC+VA,OAvaAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,MAEA5lB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,WAAAe,KAAAijB,OAAAjjB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,yBAAAe,KAAAoB,gBAAApB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,4BAAAe,KAAAsB,mBAAAtB,MACAA,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAA2lB,kBAAA3lB,MAEAA,KAAAmK,SAAA,kBAAAnK,KAAAf,MAAAgB,IAAA,gBACA,EAEAzE,KAAA,SAAAyD,GACAmQ,QAAAC,IAAA,wBACA,EAEAjO,gBAAA,WACA,IAAAC,EAAArB,KAAAf,MAAAgB,IAAA,mBACA,IAAAoB,IACA1C,OAAAqB,KAAA0F,IAAA8C,SAAAnH,GACArB,KAAAf,MAAAiB,IAAA,kBAAA,IAEA,EAEAoB,mBAAA,WACA,IAAAD,EAAArB,KAAAf,MAAAgB,IAAA,sBACA,IAAAoB,IACA1C,OAAAqB,KAAA0F,IAAA+C,YAAApH,GACArB,KAAAf,MAAAiB,IAAA,qBAAA,IAEA,EAEAylB,kBAAA,WACA,IAAA9lB,EAAAG,KAAAf,MAAAgB,IAAA,WACAtB,OAAA,iBAAAqB,KAAA0F,IAAAxE,KAAA,eAAA0kB,KAAAC,UAAAhmB,GACA,EAEAimB,SAAA,WASA,GARA9lB,KAAAkM,IAAAlM,KAAAkM,IAAA8W,WACAhjB,KAAAkM,IAAA6Z,SACA/lB,KAAAgmB,WAAAhmB,KAAAkM,UAMA,IAAAlM,KAAAf,MAAAgB,IAAA,SAAA,IAAAmF,OAAApF,KAAAf,MAAAgB,IAAA,SAAA6P,OAAA,CACA,GAAA,UAAA9P,KAAAf,MAAAgB,IAAA,QACA,IAAAgQ,EAAAjQ,KAAAf,MAAAgB,IAAA,oBAEAgQ,EAAAjQ,KAAAf,MAAAgB,IAAA,QAQA,GALAwK,OAAAwb,UAAAxb,OAAAwb,WAAA,SAAA1pB,GAAA,MAAA,iBAAAA,GAAA2pB,SAAA3pB,IAAAqQ,KAAAuZ,MAAA5pB,KAAAA,CAAA,EACAkO,OAAAwb,UAAAhW,KACAA,EAAAA,EAAAmE,YAGA,YAAAnE,EAAA,CACA,IAAA9K,EAAA5E,QAAAC,QAAA,OAAA4B,QAAA,WAAApC,KAAAf,MAAAgB,IAAA,WAEAgW,EAAA9Q,EAAAlF,IAAA,iBAIA,UAAAgW,GAAA,KAAAA,EAAAmQ,WAAA,KACAnQ,EAAA,KAEA,IAAA9F,EAAAxR,OAAA,UAAA8K,KAAAtE,EAAAlF,IAAA,mBAAAuY,OAQA6N,EAAA,CACAC,oBARArQ,EAAAtX,OAAA,UAAA8K,KAAAwM,GAAAuC,OASA+N,iBARA5nB,OAAA,UAAA8K,KAAAtE,EAAAlF,IAAA,kBAAAuY,OASArI,eAAAA,EACAqW,oBAAA,GAIAC,EAAA9nB,OAAAA,OAAAqB,KAAA0F,IAAAyB,KAAA,eAAA,IACA,IAAAuf,YAAA/nB,OAAAqB,KAAA0F,IAAAyB,KAAA,eAAA,GAAAkf,GAGA,IAAA5E,EAAAzhB,KACAymB,EAAA7kB,GAAA,SAAA,SAAAlE,GACA+jB,EAAAxiB,MAAAiB,IAAA,QAAAxC,EAAAsJ,OAAAzK,MACA,EACA,MACAoC,OAAAqB,KAAA0F,IAAAyB,KAAA,eAAA8I,KAAAA,EAEA,CAEA1P,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAf,MACAO,QAAAC,QAAA,UAAAO,QAAA,cAAAf,KACA,EAEA2mB,gBAAA,WACA,IAAAvb,EAAApL,KACA,MAAA,CAEA4mB,cAAA,WAEA5mB,KAAAN,QAAAM,KAAAzD,OAAA,IAAAyD,KAAAwb,UAAAxb,KAAAzD,MAAA,KACA,IAAAsqB,EAAA5kB,EAAAkF,KAAAnH,KAAA8mB,kBAAA,SAAAD,GACA,GAAA,EAAAloB,OAAA,kBAAAkoB,GAAAvrB,OACA,OAAA,CAEA,GAGA,OAFAiF,QAAAC,QAAA,OAAA4B,QAAA,eAAA,kBAAAykB,EAEA1c,CAAAnK,KACA,EAEA+mB,YAAA,WAEA,OADAxmB,QAAAC,QAAA,OAAA4B,QAAA,eAAA,uBACA+H,CAAAnK,KACA,EAEAgnB,mBAAA,WACA,IAAA1nB,EAAA,GAIA,YAHA,IAAAU,KAAA6I,qBACAvJ,EAAAU,KAAA6I,mBAAAvJ,IAEAA,CACA,EAEA2nB,kBAAA,WACA,IAAA7nB,EAAAY,KAAAZ,YAMA,YAJA,IAAAY,KAAAknB,oBACA9nB,EAAAY,KAAAknB,kBAAA9nB,IAGA,IAAAgG,OAAAhG,GAAA0Q,OACA,gBAAA7N,EAAA8H,OAAA3K,GAAA,IAEA,EAEA,EAEA+nB,gBAAA,WACA,IAAAC,EAAA,cAAApnB,KAAAD,KAAA,QAgBA,OAZAC,KAAAD,OAAAC,KAAAqnB,aACAD,EAAAA,EAAA,IAAApnB,KAAAqnB,WAAA,cAGA,IAAArnB,KAAAgL,eAAA,EAAA5F,OAAApF,KAAAgL,eAAA8E,OAAAxU,SACA8rB,GAAA,IAAApnB,KAAAgL,cAAA,SAGA,oBAAAsc,kBACAF,EAAAE,gBAAAF,IAGAA,CACA,EAEAG,cAAA,WACA,IAAAjoB,EAAAU,KAAAV,QAoBA,OAlBAU,KAAAuP,MACAjQ,GAAA,YAEAA,EAAAA,EAAA7D,QAAA,WAAA,SAGA,IAAAuE,KAAAqD,eAAA,EAAA+B,OAAApF,KAAAqD,eAAAyM,OAAAxU,SACAgE,GAAA,IAAAU,KAAAqD,oBAOA,IAAArD,KAAA4I,gBACAtJ,EAAAU,KAAA4I,cAAAtJ,IAGAA,CACA,EAEA4K,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,OACA,EAEA0d,cAAA,WACA,OAAA,GAAAxnB,KAAAynB,cACA,WAEA,EAEA,EAEAC,cAAA,WACA,OAAA,GAAA1nB,KAAAiK,SACA,gCAEA,EAEA,EAEA0d,yBAAA,WACA,GAAA,GAAA3nB,KAAA4nB,6BACA,MAAA,qBAGA,MAAA,iBADA5nB,KAAA6nB,4BAAA7nB,KAAAD,MACA,GAEA,EAEA8nB,4BAAA,SAAA9nB,GAEA,OAAAA,GACA,IAAA,UACA,MAAA,iBACA,IAAA,WACA,MAAA,gBACA,IAAA,OACA,MAAA,iBACA,IAAA,QACA,MAAA,QACA,IAAA,YACA,MAAA,aACA,IAAA,WACA,MAAA,cACA,IAAA,MACA,MAAA,cACA,IAAA,QACA,MAAA,MACA,QACA,MAAA,KAEA,EAEA+nB,gBAAA,WACA,MAAA,cAAA9nB,KAAA+nB,kBAAA,IAAA3iB,OAAApF,KAAAgoB,aAAAlY,OACA,cAAA9P,KAAAgoB,YAAA,IAEA,EAEA,EAEAC,YAAA,WAGA,YAAA,IAAAjoB,KAAAkoB,UAAAloB,KAAAkoB,UAAA,EACA,EAEAC,gBAAA,WAIA,IAAAC,EAAA3gB,SAAAsH,cAAA,KACAqZ,EAAAhG,UAAApiB,KAAAkoB,UAEA,IAAAG,GAAA,EAOA,IALA,GAAAjjB,OAAAzG,OAAAypB,GAAA5P,QAAA1I,OAAAxU,QACA,EAAAqD,OAAAypB,GAAAjhB,KAAA,OAAA7L,UACA+sB,GAAA,QAGA,IAAAroB,KAAAkoB,WAAAG,EAAA,CAOA,IAAAC,EAAA7gB,SAAAsH,cAAA,QACAuZ,EAAAC,UAAA9jB,IAAA,KAAA,iBAAA,WACA6jB,EAAA3O,aAAA,YAAA3Z,KAAAioB,eACAK,EAAA3O,aAAA,WAAA,KACA2O,EAAA3O,aAAA,mBAAA,oBAAA3Z,KAAApC,IAGA,IAAA4qB,EAAA/gB,SAAAsH,cAAA,QAQA,OAPAyZ,EAAAC,YAAAzoB,KAAAkoB,UAXAzsB,QAAA,kBAAA,IAAAqU,OAYA0Y,EAAA5qB,GAAA,oBAAAoC,KAAApC,GACA4qB,EAAAD,UAAA9jB,IAAA,cACA+jB,EAAA7O,aAAA,OAAA,WAEA2O,EAAAnZ,YAAAqZ,GAEAF,EAAAI,SACA,CACA,MAAA,EAEA,EAEAC,eAAA,WACA,QAAA,IAAA3oB,KAAA4oB,UACA,MAAA,GAIA,IAIAC,EAAAC,EAKAC,EAAAC,EATAxQ,EAAA/Q,SAAAsH,cAAA,KAEA,OADAyJ,EAAA4J,UAAApiB,KAAA4oB,UACA,GAAAxjB,OAAAoT,EAAA+E,WAAAzN,OAAAxU,OAAA,IAGAwtB,EAAArhB,SAAAyH,eAAAlP,KAAA4oB,YACAC,EAAAphB,SAAAsH,cAAA,MACAI,YAAA2Z,GACA,GAAA1jB,OAAAzG,OAAAkqB,GAAArQ,QAAA1I,OAAAxU,QAEAytB,EAAAthB,SAAAmd,cAAAC,yBAAA7kB,KAAA4oB,YACAI,EAAAvhB,SAAAsH,cAAA,QACAwZ,UAAA9jB,IAAA,wBACAukB,EAAArP,aAAA,cAAA,QACAqP,EAAArP,aAAA,KAAA,kBAAA3Z,KAAApC,IACAorB,EAAA7Z,YAAA4Z,GACAC,EAAAN,WAEA,GAEA,EAEAO,oBAAA,WAEA,OAAAjpB,KAAAN,MAEA,IAAAM,KAAAwb,SAAAxb,KAAAwb,QACAxb,KAAAwb,QAEAxb,KAAAZ,YAIA,GAHAY,KAAAzD,MAOAyD,KAAAzD,KAEA,EAEA2sB,yBAAA,SAAA/R,GAIA,IAKAd,EALAc,EAAA/C,WAAA3Y,QAAA,IAAA,MAIAA,QAAA,wBAAAyU,OAAA+F,eACAxa,QAAA,KAAAyU,OAAAgG,eAIA,OAFA3V,QAAAC,QAAA,OAAA4B,QAAA,WAAAgJ,EAAAnM,MAAAgB,IAAA,WACAA,IAAA,YAAAkpB,gBACA9S,CACA,EAEA+S,gBAAA,WACA,MAAA,aAAAppB,KAAAyb,WAAA,iBAAAzb,KAAAyb,SAIA,EAEA,EAEA4N,OAAA,CACA,qBAAA,cACA,oBAAA,aACA,oBAAA,aACA,eAAA,aACA,gBAAA,cACA,mBAAA,aAGAC,YAAA,SAAA5rB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACAxkB,QAAAC,QAAA,WAAA4B,QAAA,eAAAsD,EAAA1F,KAAAf,MACA,EAEAsqB,WAAA,SAAA7rB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACA1e,EAAA3I,EAAA2I,QACA9F,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,MAAAoH,GACA9F,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,MAAAoH,GACA9F,QAAAC,QAAA,UAAAO,QAAA,cAAA2E,EAAA1F,KAAAf,MAAAoH,EACA,EAEAmjB,WAAA,SAAA9rB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACAxkB,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,cAAA2E,EAAA1F,KAAAf,MACA,EAEAwqB,WAAA,SAAA/rB,GACA6C,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,cAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,cAAArD,EAAAsC,KAAAf,MACA,EAEAyqB,YAAA,SAAAhsB,GACA6C,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,eAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,eAAArD,EAAAsC,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,eAAArD,EAAAsC,KAAAf,MACA,EAEA0qB,UAAA,SAAAjsB,GACA,IAAAgI,EAAA/G,OAAAjB,EAAAqnB,eACAxkB,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAAc,QAAA,aAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,aAAA2E,EAAA1F,KAAAf,OACAsB,QAAAC,QAAA,UAAAO,QAAA,aAAA2E,EAAA1F,KAAAf,MACA,EAEA2qB,SAAA,WACArpB,QAAAC,QAAAR,KAAAf,MAAAgB,IAAA,SAAAc,QAAA,cAAAf,KACA,GAIA,GAEAjH,EAAA,oBAAA,GAAA,WCraA,OALAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,yBAIA,GACApR,EAAA,uBAAA,GAAA,WCIA,OAXAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,uBAEA2b,SAAA,WACA9lB,KAAAkM,IAAAlM,KAAAkM,IAAA8W,WACAhjB,KAAAkM,IAAA6Z,SACA/lB,KAAAgmB,WAAAhmB,KAAAkM,IACA,GAIA,GACAnT,EAAA,6BAAA,CAAA,wBAAA,SAAA8wB,GCWA,OAxBA9kB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,YACAqE,UAAAF,EAEA/pB,WAAA,SAAAM,GACAJ,KAAAyB,WAAArB,EAAAqB,UACA,EAEAqkB,SAAA,WACA,GAAA9lB,KAAAyB,WAAAxB,IAAA,UAAA0B,OAAArG,QACA0E,KAAAyB,WAAAH,mBAAA,YACAtB,KAAAyB,WAAAH,mBAAA,WACAtB,KAAAyB,WAAAL,gBAAA,WACApB,KAAAyB,WAAAF,YAAA,KAEAvB,KAAAyB,WAAAH,mBAAA,WACAtB,KAAAyB,WAAAL,gBAAA,WACApB,KAAAyB,WAAAL,gBAAA,YACApB,KAAAyB,WAAAF,YAAA,GAGA,GAIA,GAEAxI,EAAA,mBAAA,GAAA,WCqBA,OAhDAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,6BAEArK,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAAR,KAAAf,MAAAgB,IAAA,OAAA,cAAAD,KAAAgqB,aACAhqB,KAAAiqB,MAAAjqB,KAAAf,MAAAgB,IAAA,eACAD,KAAAijB,QACA,EAEA+G,YAAA,SAAAtkB,EAAAzG,GACA,IAAA1C,EAAAoC,OAAA+G,GAAAC,MAEAukB,EAAA9kB,OAAA7I,GAAAuT,OAAArU,QADA,QACA,KAAAN,MAAA,KACAgvB,EAAAD,EAAA5uB,OACA8uB,EAAA7tB,EAAAjB,OAOA,GAAA,cAAA0E,KAAAf,MAAAgB,IAAA,qBACA,QAAAD,KAAAf,MAAAgB,IAAA,oBACAtB,OAAA+G,GAAAxE,KAAA,YAAAlB,KAAAf,MAAAgB,IAAA,gBACAD,KAAAiqB,MAAAjqB,KAAAf,MAAAgB,IAAA,eAAAmqB,MACA,CACApqB,KAAAiqB,MAAAjqB,KAAAf,MAAAgB,IAAA,eAAAkqB,EACA,IAAAE,EAAArqB,KAAAf,MAAAgB,IAAA,eACAkqB,EAAAE,GACA1rB,OAAA+G,GAAAC,IAAAukB,EAAApwB,MAAA,EAAAuwB,GAAAxuB,KAAA,KAEA,CAEAmE,KAAAijB,QACA,EAEA0D,gBAAA,WACA,IAAAvb,EAAApL,KACA,MAAA,CACAsqB,aAAA,WACA,OAAAlf,EAAA6e,KACA,EAEA,GAKA,GACAlxB,EAAA,mBAAA,CAAA,6BAAA,oBAAA,SAAAmG,EAAAqrB,GCXA,OAvCAxlB,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,uBAEArK,WAAA,WACAE,KAAAf,MAAA2C,GAAA,gBAAA5B,KAAAwqB,YAAAxqB,KACA,EAEA8lB,SAAA,WAKA,IAAA2E,EAAA9rB,OAAAqB,KAAA0F,IAAAsd,SAAA,kBAUA,GATAhjB,KAAA0qB,oBAAA,IAAAxrB,EAAA,CAAAwG,GAAA+kB,EAAAtqB,WAAAH,KAAAf,MAAAgB,IAAA,UAAAwB,WAAAzB,KAAAf,QACA,EAAAe,KAAAf,MAAAgB,IAAA,UAAA3E,QACA0E,KAAA0qB,oBAAAzH,cAOA,IAAAjjB,KAAAf,MAAAgB,IAAA,gBAAA,IAAAmF,OAAApF,KAAAf,MAAAgB,IAAA,gBAAA6P,OAAA,CACA,IAAA6a,EAAAhsB,OAAAqB,KAAA0F,IAAAsd,SAAA,mBACAhjB,KAAA4qB,eAAA,IAAAL,EAAA,CAAA7kB,GAAAilB,EAAA1rB,MAAAe,KAAAf,QACA0rB,EAAAzpB,KAAA,YAAA,UACAypB,EAAAzpB,KAAA,OAAA,UACAypB,EAAAzpB,KAAA,gBAAA,aACAypB,EAAAzpB,KAAA,eAAA,EACA,CACA,EAEAspB,YAAA,WACAxqB,KAAA0qB,oBAAAzH,QACA,GAKA,GACAlqB,EAAA,iCAAA,CAAA,kBAAA,oBAAA,oBAAA,SAAA8xB,EAAAC,EAAAC,GCcA,OAtDAhmB,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,WAEAuF,QAAA,CACAH,YAAA,mBACAtb,MAAA,YACAub,WAAA,mBAGAjrB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAAijB,OAAAjjB,KACA,EAEAkrB,YAAA,WACA,OAAAlrB,KAAAf,MAAAgB,IAAA,WACA,wBAEA,gBAEA,EAEA6lB,SAAA,WACA9lB,KAAAf,MAAAgB,IAAA,aACAD,KAAA8qB,YAAAla,KAAA,IAAAka,EAAA,CAAA7rB,MAAAe,KAAAf,SACAe,KAAAwP,MAAAoB,KAAA,IAAAia,EAAA,CAAA5rB,MAAAe,KAAAf,SACAe,KAAA+qB,WAAAna,KAAA,IAAAma,EAAA,CAAA9rB,MAAAe,KAAAf,SAEA,EAEA0nB,gBAAA,WACA,MAAA,CACAwE,qBAAA,WACA,IAAAC,EAAA,UAAAprB,KAAAX,UAAA,IAgBA,YAdA,IAAAW,KAAAqrB,WACAD,GAAA,QAAAprB,KAAAqrB,SAAA,UAGA,IAAArrB,KAAAsrB,iBAAA,EAAAlmB,OAAApF,KAAAsrB,iBAAAxb,OAAAxU,SACA8vB,GAAAprB,KAAAsrB,gBAAA,KAMAtrB,KAAAD,OAAAC,KAAAqnB,aACA+D,GAAA,IAAAprB,KAAAqnB,WAAA,cAEA+D,CACA,EAEA,GAIA,GAEAryB,EAAA,qCAAA,CAAA,kCAAA,SAAAwyB,GCrDA,OALAxmB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,iBACAqE,UAAAwB,GAIA,GACAxyB,EAAA,+BAAA,CAAA,sCAAA,SAAA8I,GCuBA,OA9BAkD,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,WACAvb,SAAA,8BAEA8gB,QAAA,CACAza,OAAA,yBAGAsV,SAAA,WACA9lB,KAAAwQ,OAAAI,KAAA,IAAA/O,EAAA,CAAA1B,WAAAH,KAAAf,MAAAgB,IAAA,YACA,EAEA0mB,gBAAA,WACA,MAAA,CACAzc,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,OACA,EAEA,EAEAuf,OAAA,CACA,4BAAA,aAGAmC,UAAA,WACAjrB,QAAAC,QAAA,kBAAAO,QAAA,kBAAAf,KAAAf,MACA,GAKA,GACAlG,EAAA,mCAAA,CAAA,gCAAA,SAAA0yB,GC3BA,OALA1mB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,MACAqE,UAAA0B,GAIA,GACA1yB,EAAA,4BAAA,CAAA,oCAAA,SAAA2yB,GC8DA,OApEA3mB,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,MACAvb,SAAA,0BAEA8gB,QAAA,CACAU,KAAA,0BAGA7rB,WAAA,WAEAE,KAAAG,WAAAH,KAAAf,MAAAgB,IAAA,QAEAD,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,qBAAAR,KAAAijB,OAEA,EAEA6C,SAAA,WACA9lB,KAAA2rB,KAAA/a,KAAA,IAAA8a,EAAA,CAAAvrB,WAAAH,KAAAG,aACA,EAEAwmB,gBAAA,WACA,MAAA,CACAzc,gBAAA,WACA,YAAA,IAAAL,WAAAC,kBAAAD,WAAAC,kBAAA,OACA,EACA6e,eAAA,WACA,QAAA,IAAA3oB,KAAA4oB,UACA,MAAA,GAIA,IAIAC,EAAAC,EAKAC,EAAAC,EATAxQ,EAAA/Q,SAAAsH,cAAA,KAEA,OADAyJ,EAAA4J,UAAApiB,KAAA4oB,UACA,GAAAxjB,OAAAoT,EAAA+E,WAAAzN,OAAAxU,OAAA,IAGAwtB,EAAArhB,SAAAyH,eAAAlP,KAAA4oB,YACAC,EAAAphB,SAAAsH,cAAA,MACAI,YAAA2Z,GACA,GAAA1jB,OAAAzG,OAAAkqB,GAAArQ,QAAA1I,OAAAxU,QAEAytB,EAAAthB,SAAAmd,cAAAC,yBAAA7kB,KAAA4oB,YACAI,EAAAvhB,SAAAsH,cAAA,QACAwZ,UAAA9jB,IAAA,wBACAukB,EAAA7Z,YAAA4Z,GACAC,EAAAN,WAEA,GAEA,EAEA,EAEAW,OAAA,CACA,yBAAA,UAGAuC,OAAA,WACArrB,QAAAC,QAAA,kBAAAO,QAAA,eAAAf,KAAAf,MAAArB,GACA,EAEAqD,aAAA,WACAjB,KAAAG,WAAAc,aAAAjB,KAAAf,MAAAgB,IAAA,QACA,GAMA,GACAlH,EAAA,oBAAA,CAAA,kBAAA,oBAAA,mBAAA,6BAAA,SAAA8xB,EAAAC,EAAAC,EAAAc,GCRA,OA9DA9mB,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,WAEAuF,QAAA,CACAH,YAAA,mBACAtb,MAAA,YACAub,WAAA,mBAGAjrB,WAAA,WACAE,KAAAM,SAAAN,KAAAf,MAAA,iBAAAe,KAAAijB,OAAAjjB,KACA,EAEAkrB,YAAA,WACA,OAAAlrB,KAAAf,MAAAgB,IAAA,WACA,wBAEA,gBAEA,EAEA6lB,SAAA,WACA9lB,KAAAf,MAAAgB,IAAA,aAEA,YAAAD,KAAAf,MAAAgB,IAAA,QACAD,KAAAwP,MAAAoB,KAAA,IAAAib,EAAA,CAAA5sB,MAAAe,KAAAf,UAEAe,KAAA8qB,YAAAla,KAAA,IAAAka,EAAA,CAAA7rB,MAAAe,KAAAf,SACAe,KAAAwP,MAAAoB,KAAA,IAAAia,EAAA,CAAA5rB,MAAAe,KAAAf,SACAe,KAAA+qB,WAAAna,KAAA,IAAAma,EAAA,CAAA9rB,MAAAe,KAAAf,UAIA,EAEA0nB,gBAAA,WACA,MAAA,CACAwE,qBAAA,WACA,IAAAC,EAAA,UAAAprB,KAAAX,UAAA,IAiBA,YAfA,IAAAW,KAAAqrB,WACAD,GAAA,QAAAprB,KAAAqrB,SAAA,UAGA,IAAArrB,KAAAsrB,iBAAA,EAAAlmB,OAAApF,KAAAsrB,iBAAAxb,OAAAxU,SACA8vB,GAAAprB,KAAAsrB,gBAAA,KAMAtrB,KAAAD,OAAAC,KAAAqnB,aACA+D,GAAA,IAAAprB,KAAAqnB,WAAA,cAGA+D,CACA,EAEA,GAKA,GCxDAryB,EAAA,wBAAA,CAAA,kBAAA,qBAAA,SAAA+yB,EAAAC,GAmBA,OAlBAhnB,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAEAS,QAAAC,QAAA,SAAAsB,MAAA,gBAAA9B,KAAAgsB,cAEAzrB,QAAAC,QAAA,SAAAsB,MAAA,kBAAA9B,KAAAisB,eACA,EAEAD,aAAA,SAAA/sB,GACA,OAAA6sB,CACA,EAEAG,eAAA,WACA,OAAAF,CACA,GAKA,GCvBAhzB,EAAA,yBAAA,GAAA,WA2EA,OA1EAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAIAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,YAAAR,KAAAgE,UACAhE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,eAAAR,KAAAiE,aAKA1D,QAAAC,QAAA,QAAAsB,MAAA,aAAA9B,KAAAsP,cACA,EAEAtL,SAAA,SAAAvC,EAAAqE,EAAAomB,GACA,IAAA7rB,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,gBAOA,IAAAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,SACAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA,CAAA,GAGAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA6F,GAAAomB,EAKA3rB,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAmC,QAAA,YAAA,eAAA/B,EAAAJ,IAAA,YAAAksB,wBACA,EAEAloB,YAAA,SAAAxC,EAAAqE,GACA,IAAAzF,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAX,EAAAxB,IAAA,WAEAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAAgC,EAAAmqB,KAAA/rB,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAAA6F,GAMA,GAAA7D,EAAAK,KAAAjC,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,gBACAI,EAAAJ,IAAA,eAAAwB,EAAAxB,IAAA,OAGA,GAAAgC,EAAAK,KAAAjC,EAAAJ,IAAA,iBAEAM,QAAAC,QAAA,QAAAiB,EAAAxB,IAAA,WAAAmC,QAAA,eAAA,eAEA,EAEAkN,cAAA,SAAAV,GACA,IAAAvO,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAAwM,GACAlK,GAAA,EAeA,OAbArE,GAIA,IAAAA,EAAAJ,IAAA,UAAA3E,QACA2G,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA4N,IACA7K,EAAAA,GAAA,CAAA,GACA6K,EAAAtP,IAAA,OAAAsP,EAAAtP,IAAA,MACA,GAKAyE,CACA,GAIA,GC/EA3L,EAAA,qBAAA,GAAA,WA6JA,OA5JAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,aAAAR,KAAAqsB,sBACA,EASAA,sBAAA,SAAAhsB,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAA6B,MAAA,SAAA9B,KAAAssB,OACA,EAeAA,OAAA,SAAAjsB,GAMAE,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,GAKA,IAAAksB,EAAAhsB,QAAAC,QAAA,SAAA4B,QAAA,iBAAA/B,GAgBA,IAfA,IAAAksB,IAGAtqB,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAAF,GACAA,EAAAvB,IAAA,SAAA,EACA,GAMAG,EAAAJ,IAAA,mBAAA+B,kBAIA,GADAzB,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAmC,QAAA,eAAA/B,GAIA,OAFAE,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,QACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,GAIA,IAAA,IAAAksB,EAAA,CAGA,IAAAC,EAAAvqB,EAAAmH,OAAA/I,EAAAJ,IAAA,UAAA0B,OAAA,SAAA4N,GAGA,MAAA,iBAAAA,EAAAtP,IAAA,OAAA,kBAAAsP,EAAAtP,IAAA,KAGA,GAMA,GAAA,GAAAgC,EAAAK,KAAAkqB,GAGA,OAFAjsB,QAAAC,QAAA,SAAAO,QAAA,gBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,gBAAAV,IACA,CAEA,CAMAE,QAAAC,QAAA,SAAAO,QAAA,yBAAAV,GACAE,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,yBAAAV,GAMA,IAAAuO,EAAAvO,EAAAJ,IAAA,MACAuQ,EAAA,CAAA,EACAvO,EAAAC,KAAA7B,EAAAJ,IAAA,UAAA0B,OAAA,SAAA6N,GACA,IAAAid,EAAA,CAAAlwB,MAAAiT,EAAAvP,IAAA,SAAArC,GAAA4R,EAAAvP,IAAA,OAGAuQ,EAAAhB,EAAAvP,IAAA,OAAAM,QAAAC,QAAAgP,EAAAvP,IAAA,SAAAmC,QAAA,iBAAAqqB,EAAAjd,IAAAid,CACA,GACA,IAAAjpB,EAAAnD,EAAAJ,IAAA,SACAqS,EAAAjS,EAAAJ,IAAA,mBACAqS,EAAA5O,gBACA,IAAAgpB,EAAA9G,KAAAC,UAAA,CAAAjoB,GAAAgR,EAAA4B,OAAAA,EAAA8B,SAAAA,EAAA9O,MAAAA,IACA6G,EAAA,CACAuS,OAAA,iBACA+P,SAAA9iB,WAAA0G,UACA/B,SAAA3E,WAAA2E,SACAke,SAAAA,GAKA/tB,OAAAiuB,KAAA,CACAzI,IAAAta,WAAAgjB,UACA9sB,KAAA,OACAsK,KAAAA,EACAyiB,OAAA,EACAC,QAAA,SAAA1iB,EAAAqE,EAAAC,GACA,IACA,IAAAN,EAAAhE,EACA9J,QAAAC,QAAA,SAAAO,QAAA,kBAAAsN,EAAAK,EAAAC,EAAAtO,EAAAJ,IAAA,OACAM,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBAAAsN,EAAAK,EAAAC,GACAhQ,OAAA8I,UAAA1G,QAAA,uBAAA,CAAAsN,SAAAA,EAAAzQ,GAAAyC,EAAAJ,IAAA,OACA,CAAA,MAAAvC,GACA0R,QAAAC,IAAA3R,GACA0R,QAAAC,IAAA,eACAD,QAAAC,IAAA3R,EACA,CAEA,EACA6R,MAAA,SAAAZ,EAAAD,EAAAse,GAEA5d,QAAAC,IAAA,WAAA2d,GACA5d,QAAAC,IAAAV,GAEA,IACA,IAAAN,EAAA1P,OAAAsuB,UAAAte,EAAAue,cACA3sB,QAAAC,QAAA,SAAAO,QAAA,kBAAAsN,EAAAK,EAAAC,EAAAtO,EAAAJ,IAAA,OACAM,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBAAAsN,EAAAK,EAAAC,EACA,CAAA,MAAAjR,GACA0R,QAAAC,IAAA,gBAAAV,EAAAue,cACA3sB,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAmC,QAAA,YAAA,uBAAA4qB,EACA,CAEA,GAGA,GAKA,GAEAj0B,EAAA,wBAAA,CAAA,qBAAA,SAAAwyB,GC5JA,OANAxmB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,iBACAqE,UAAAwB,GAKA,GCAAxyB,EAAA,6BAAA,CAAA,wBAAA,0BAAA,SAAAo0B,EAAArqB,GAuDA,OAtDAiC,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,QAAA,oBAAAR,KAAAotB,0BACA,EAEAA,0BAAA,SAAA/sB,GAIAE,QAAAC,QAAA,eAAA4B,QAAA,iBAAApC,KAAAqtB,uBAAA,GAAArtB,MAIAO,QAAAC,QAAA,eAAA4B,QAAA,iBAAApC,KAAAstB,uBAAA,GAAAttB,KACA,EAEAqtB,uBAAA,SAAA3pB,EAAArD,EAAAohB,GACA,IAAA5f,EAAAxB,EAAAJ,IAAA,UAIA0D,EAAApD,QAAAC,QAAA,eAAA4B,QAAA,mBAEA,GAAA,GADAH,EAAA4B,QAAAF,OAAAtF,GACA/C,aAAA,IAAAoI,IAAA,GAAAA,aAAA9E,SAAAI,WAAA,OAAAqB,EAAAJ,IAAA,UAEA,IAAAqT,EAAArR,EAAA7G,IAAAsI,EAAA,SAAAY,GACA,OAAAjE,EAAAJ,IAAA,UAAAsE,UAAA,CAAAD,IAAAA,GACA,EAAAtE,MAEAutB,EAAA,IAAAzqB,EAAAwQ,GAgBA,OAdAzR,EAAAD,GAAA,QAAA,SAAAzB,GACA,IAAAqtB,EAAA,GACAD,EAAArrB,KAAA,SAAAT,GACA,UAAAA,EAAAxB,IAAA,QACAutB,EAAArxB,KAAAgE,EAAAoE,UAAA,CAAAD,IAAA7C,EAAAxB,IAAA,UAEAutB,EAAArxB,KAAAsF,EAEA,GAEA8rB,EAAAntB,QAAA,CAAAC,UAAAA,GACAktB,EAAA/a,MAAAgb,EACA,GAEAD,CACA,EAEAD,uBAAA,WACA,OAAAH,CACA,GAKA,GC5DAp0B,EAAA,+BAAA,GAAA,WAyBA,OAxBAgM,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WAMAE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,oBAAAR,KAAAiE,aACAjE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,cAAAR,KAAAiE,aACAjE,KAAAM,SAAAC,QAAAC,QAAA,UAAA,aAAAR,KAAAiE,YAEA,EAEAA,YAAA,SAAAyB,EAAAzG,GACAA,EAAAA,GAAAyG,EAIAnF,QAAAC,QAAA,UAAA4B,QAAA,eAAAnD,EAAAgB,IAAA,MAAA,eACA,GAKA,GACA,IAAAwtB,EAAA,GC9BA10B,EAAA,+BAAA,GAAA,WA4JA,OA3JA6F,SAAAC,MAAAC,OAAA,CAEAgB,WAAA,SAAAK,EAAAC,GAEAJ,KAAAqC,mBAAAjC,EAAAiC,mBAEArC,KAAAE,IAAA,QAAAF,KAAAqC,mBAAApC,IAAA,UAEAE,GAAAC,GACAJ,KAAA0tB,4BAAAvtB,EAAAC,GAGAG,QAAAC,QAAA,kBAAAsB,MAAA,qBAAA9B,KAAA2tB,kBAAA3tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,wBAAA9B,KAAA4tB,qBAAA5tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,qBAAA9B,KAAA6tB,2BAAA7tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,8BAAA9B,KAAA8tB,sBAAA9tB,MACAO,QAAAC,QAAA,kBAAAsB,MAAA,sCAAA9B,KAAA+tB,8BAAA/tB,MACAA,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,qBAAAR,KAAAguB,4BACAhuB,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,YAAAR,KAAAiuB,sBACA,EAEAD,2BAAA,WACAhuB,KAAAE,IAAA,0BAAAutB,GACAztB,KAAAkuB,4BAAAT,CACA,EAEAC,4BAAA,SAAAvtB,EAAAC,GACA,MAAAwO,EAAAxO,EAAAiC,mBAAApC,IAAA,UACAkuB,EAAA/tB,EAAAiC,mBAAApC,IAAA,MACAmuB,EAAAjuB,EAAAqQ,OAAA7O,OAEA,IAAA0sB,EAAAZ,EAAAtmB,KAAAlI,GAAAA,EAAArB,KAAAuwB,GAAAlvB,EAAAkG,OAAAyJ,GAEAyf,EACAA,EAAA7d,OAAA6d,EAAA7d,OAAA7U,OAAAyyB,GAEAX,EAAAtxB,KAAA,CACAgJ,KAAAyJ,EACAhR,GAAAuwB,EACA3d,OAAA4d,IAIApuB,KAAAguB,4BACA,EAEAH,2BAAA,WACA,OAAAJ,CACA,EAEAK,sBAAA,SAAAlf,GACA,MACA0f,EADAtuB,KAAA6tB,6BACAzkB,OAAAnK,GAAAA,EAAAkG,OAAAyJ,GAEA,OAAA0f,CACA,EAEAP,8BAAA,SAAAnf,GACA,MAAA0f,EAAAtuB,KAAA8tB,sBAAAlf,GACA,IAAA2f,EAAA,GAKA,OAJAD,EAAAlzB,IAAA6D,IACAsvB,EAAAA,EAAA5yB,OAAAsD,EAAAuR,UAGA+d,CACA,EAEAZ,kBAAA,SAAAQ,GACA,MAAAK,EAAAxuB,KAAA6tB,6BACA,IAAArd,EAAAge,EAAArnB,KAAAlI,GAAAmG,OAAAnG,EAAArB,MAAAwH,OAAA+oB,IAKA,YAJA,IAAA3d,IACAA,EAAAxQ,KAAAyuB,6BAAAN,EAAAK,IAGAhe,CACA,EAEAie,6BAAA,SAAAN,EAAAK,GACA,IAAAhe,EASA,OARAvO,EAAAC,KAAAssB,EAAA,SAAAE,GACAzsB,EAAAC,KAAAwsB,EAAAle,OAAA,SAAA/O,GACA2D,OAAA3D,EAAA7D,IAAA+wB,WAAAR,KACA3d,EAAAke,EAEA,EACA,GAEAle,CACA,EAEAod,qBAAA,SAAAhwB,GACA,MAAAuwB,EAAA/oB,OAAAxH,GAAAzC,MAAA,KAAA,GACAyzB,EAAA5uB,KAAA2tB,kBAAAQ,GAEA,QAAA,IAAAS,EAAA,OAIA,OAFAA,EAAApe,OAAArJ,KAAAqI,GAAAA,EAAA5R,KAAAA,EAGA,EAEAqwB,sBAAA,WACA,MAAAY,EAAA7uB,KAAA6tB,6BACAgB,EAAAvzB,OAAA,GAEA2G,EAAAC,KAAA2sB,EAAA,SAAAC,GACA,IAAAte,EAAAse,EAAAte,OACAnO,EAAA9B,QAAAC,QAAA,UAAA4B,QAAA,YAAA0sB,EAAAlxB,IAEA,GAAA4S,EAAAlV,OAAA,EAAA,CACA,IAAAyzB,EAAA,CAAA,EAEA9sB,EAAAC,KAAAsO,EAAA,SAAAhB,GAEA,IAAAjT,EAAAiT,EAAAvP,IAAA,SACArC,EAAA4R,EAAAvP,IAAA,MAEA,GAAArC,EAAAzC,MAAA,KAAAG,OAAA,EAAA,CACA,IAAA0zB,EAAApxB,EAAAzC,MAAA,KACA6zB,EAAA,GAAAA,EAAA,GAAA7zB,MAAA,KAAA,GACA,IAAA8zB,EAAAD,EAAA,GAAA,IAAAA,EAAA,GAAA,IAAAA,EAAA,UACAD,EAAAnxB,GACAA,EAAAqxB,CACA,CAEAF,EAAAnxB,GAAA,CACArB,MAAAA,EACAqB,GAAAA,GAIA,SAAA4R,EAAAvP,IAAA,SAAA,iBAAA1D,GAAA,kBAAAiT,EAAAvP,IAAA,cAAA,cAAAuP,EAAAvP,IAAA,eACA8uB,EAAAnxB,GAAArB,MAAA,CACA6e,KAAA7e,EACAye,KAAAxL,EAAArO,WAAA+F,cACA+T,OAAAzL,EAAArO,WAAAiG,gBACA8T,KAAA1L,EAAArO,WAAAkG,gBAIA,gBAAAmI,EAAAvP,IAAA,SAAAuP,EAAAvP,IAAA,WACA8uB,EAAAnxB,GAAAsxB,MAAA1f,EAAArO,WAAA+tB,MAEA,GAEA7sB,EAAAnC,IAAA,aAAA,GAEAK,QAAAC,QAAA,WAAA4B,QAAA,eAAAC,EAAA0sB,EACA,CACA,EAEA,GAKA,GAEAh2B,EAAA,oCAAA,CAAA,+BAAA,0BAAA,SAAAo2B,EAAAttB,GCvBA,OAxIAjD,SAAAI,WAAAF,OAAA,CACAG,MAAAkwB,EAEArvB,WAAA,SAAA6B,EAAAvB,GACAJ,KAAAI,QAAAA,EAEAJ,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,iBAAAR,KAAAovB,SACApvB,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,kBAAAR,KAAAwrB,WACAxrB,KAAAM,SAAAC,QAAAC,QAAA,kBAAA,eAAAR,KAAA4rB,QACArrB,QAAAC,QAAA,kBAAAsB,MAAA,gBAAA9B,KAAAqvB,aAAArvB,KAEA,EAEA4rB,OAAA,SAAA0D,GAAA,GACA,IAAAR,EACA,GAAAQ,EAAA,CAEA,MAAAjtB,EAAArC,KAAAI,QAAAiC,mBAAAzE,KAAA0xB,GAAAtvB,KAAAI,QAAAiC,mBAEA,GADAysB,EAAAzsB,EACAA,EAAA,CAEA,IAAAmO,EAAA,IAAA3O,EAAA7B,KAAAI,QAAAmvB,eAAA,CAAAlvB,UAAAL,KAAAI,QAAAC,UAAAgC,mBAAAA,IAEArC,KAAAyE,IAAA,CAAA+L,OAAAA,GAAA,CAAAnO,mBAAAA,GACA,CACA,CAEArC,KAAAovB,UACA7uB,QAAAC,QAAA,kBAAAO,QAAA,iBAAA+tB,EACA,EAEAtD,UAAA,SAAAgE,GAEAxvB,KAAAyvB,2BAAAD,GAGA,MAAA5gB,EAAA4gB,EAAAntB,mBAAApC,IAAA,UACAkuB,EAAAqB,EAAAntB,mBAAApC,IAAA,MACAyvB,EAAAjC,EAAAtmB,KAAAwoB,GAAAA,EAAA/xB,KAAAuwB,GAAAwB,EAAAxqB,OAAAyJ,GACA,GAAA8gB,EAAA,CACA,IAAA/qB,EAAA,GACA1C,EAAAC,KAAAwtB,EAAAlf,OAAA,CAAAhB,EAAA5S,UACA,IAAA4S,GACAvN,EAAAC,KAAAstB,EAAAvvB,IAAA,UAAA0B,OAAAiuB,IACA,MAAA1pB,OAAA,IAAAsJ,EAAA5R,GAAA4R,EAAA5R,GAAA4R,EAAAvP,IAAA,MACA2vB,EAAAhyB,KAAAsI,WAEAspB,EAAAntB,mBAAApC,IAAA,SAAA2vB,EAAAhyB,IACA+G,EAAAxI,KAAA+J,QAKAwpB,EAAAlf,OAAAvO,EAAA4tB,OAAAH,EAAAlf,OAAAhB,QACA,IAAAA,KACA7K,EAAAgW,SAAAnL,EAAA5R,KAGA2C,QAAAC,QAAA,kBAAAO,QAAA,qBACA,CAGAf,KAAA2E,OAAA6qB,GACAA,EAAAM,UAGA9vB,KAAAovB,UAGA7uB,QAAAC,QAAA,kBAAAO,QAAA,YACA,EAEA0uB,2BAAA,SAAAD,GACA,IAAAhf,EAAAgf,EAAAvvB,IAAA,UACAgC,EAAAC,KAAAsO,EAAA7O,OAAA,SAAA6N,GACAjP,QAAAC,QAAA,UAAA4B,QAAA,eAAAoN,EAAAvP,IAAA,MAAA,iBACA,EACA,EAEA8vB,aAAA,WACA,OAAA/vB,KAAA2B,MACA,EAEAquB,eAAA,SAAAxgB,GACA,MAAA5R,EAAA4R,EAAAvP,IAAA,MAEAgwB,EAAAxoB,SAAAoJ,eAAA,eAAAjT,GACAsyB,EAAAzoB,SAAAoJ,eAAA,iBAAAjT,GACAuyB,EAAA,IAAA3gB,EAAArO,WAAA8X,SAAA,KAAA,KAEA,IAAAgX,IAAAC,EAAA,OACAA,EAAA3zB,WAAA,IAAAiT,EAAArO,WAAAiG,gBAAAoI,EAAArO,WAAAiG,gBAAA,KACA6oB,EAAA1zB,WAAA,IAAAiT,EAAArO,WAAA+F,cAAAsI,EAAArO,WAAA+F,cAAAipB,EAEA,MACAC,EADA3oB,SAAAoJ,eAAA,YAAAjT,EAAA,SACA8J,cAAA,gBACA0oB,IACAA,EAAA7zB,WAAA,IAAAiT,EAAArO,WAAAkG,cAAAmI,EAAArO,WAAAkG,cAAA,KACA,EAEA+nB,QAAA,WACA,MAAAiB,EAAArwB,KAAA+vB,eACAO,EAAA,GAEAruB,EAAAC,KAAAmuB,EAAA,SAAAb,EAAAe,GACA,IAAA/f,EAAAgf,EAAAvvB,IAAA,UACAuvB,EAAAtvB,IAAA,QAAAqwB,EAAA,GACAtuB,EAAAC,KAAAsO,EAAA7O,OAAA,SAAA6N,GAGA,MAAAghB,EAAAprB,OAAAoK,EAAA5R,IAAAzC,MAAA,KAAA,GAEAs1B,EAAArrB,OAAAorB,GAAAr1B,MAAA,KAAAG,OAAA,GAAA8J,OAAAorB,GAAAr1B,MAAA,KAAA2jB,MAEA,IAAA2R,EAAA,OAEA,MAAAxB,EAAAzf,EAAArP,WAAAC,QAAAiC,mBAAAzE,GAAA,IAAA6yB,EAAA,IAAAF,EACA/gB,EAAAtP,IAAA,KAAA+uB,GAGA,SAAAzf,EAAAvP,IAAA,SAAA,kBAAAuP,EAAAvP,IAAA,cAAA,cAAAuP,EAAAvP,IAAA,cACAqwB,EAAAn0B,KAAAqT,EAGA,EACA,GAEAjP,QAAAC,QAAA,kBAAAO,QAAA,sBAGAuvB,EAAA/Y,QAAA/H,IACAxP,KAAAgwB,eAAAxgB,IAEA,GAIA,GACAzW,EAAA,4BAAA,CAAA,oCAAA,0BAAA,SAAA2yB,EAAA7pB,GCvHA,OAnBAkD,WAAArL,OAAAoF,OAAA,CAEAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,YAAA,aAAAR,KAAA0wB,aACA,EAEAA,aAAA,SAAAzxB,GACA,QAAA,IAAAA,EAAAkB,WAAAC,QAAAC,UACA,OAAA,EAGA,IAAAmQ,EAAA,IAAA3O,EAAA5C,EAAAgB,IAAA,UAAA,CAAAI,UAAApB,EAAAkB,WAAAC,QAAAC,UAAAgC,mBAAApD,IACAA,EAAAiB,IAAA,OAAA,IAAAwrB,EAAA,CAAA,CAAAlb,OAAAA,IAAA,CAAA+e,eAAAtwB,EAAAgB,IAAA,UAAAI,UAAApB,EAAAkB,WAAAC,QAAAC,UAAAgC,mBAAApD,KAEAsB,QAAAC,QAAA,kBAAAO,QAAA,iBACA,GAKA,GACAhI,EAAA,uBAAA,GAAA,WCmCA,OAxDAgM,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WACAE,KAAAM,SAAAC,QAAAC,QAAA,SAAA,kBAAAR,KAAA2wB,kBACA,EAEAA,kBAAA,SAAAtiB,QACA,IAAAA,EAAAhE,KAAA+G,cAAA,IAAA/C,EAAAhE,KAAA+G,QAAAwf,iBAIAviB,EAAAhE,KAAA+G,QAAAwf,gBAAArZ,QAAAqF,IACA,MAAAiU,EAAAjU,EAAAkU,WACA,QAAA,IAAAD,EAKA,QAAA,IAAAjU,EAAAmU,aAAA,QAAAnU,EAAAmU,YACA,GAAA,mBAAAC,KAAA,CACA,MAAAC,EAAA,CACAC,eAAA,cACAC,YAAA,qBACA5f,QAAAlD,EAAAhE,KAAAkH,SAEAyf,KAAA,QAAAH,EAAAI,EACA,KAAA,iBAAAG,UACAhiB,QAAAiiB,KAAA,6FAEAjiB,QAAAiiB,KAAA,kFAEA,QAAA,IAAAzU,EAAAmU,aAAA,QAAAnU,EAAAmU,YAGA,GAAA,iBAAAK,UAAA,CAEA,MAAAH,EAAA,CACAK,MAAAT,EACAK,eAAA,cACAC,YAAA,qBACA5f,QAAAlD,EAAAhE,KAAAkH,SAEA6f,UAAAj1B,KAAA80B,EACA,KAAA,mBAAAD,KACA5hB,QAAAiiB,KAAA,4FAEAjiB,QAAAiiB,KAAA,iFAGAjiB,QAAAiiB,KAAA,kGAnCAjiB,QAAAiiB,KAAA,mFAuCA,GAKA,GAEAt4B,EC3DA,8BAAA,CACA,uBACA,yBACA,0BACA,0BACA,yBACA,4BACA,gCACA,6BACA,yBACA,0BACA,0BACA,2BACA,+BACA,2BACA,0BACA,4BACA,+BACA,0BACA,6BACA,4BACA,0BACA,iCACA,2BACA,yBACA,4BACA,2BACA,kCACA,wBACA,6BACA,+BACA,wBACA,uBACA,2BACA,+BACA,8BACA,yBACA,iCACA,wBACA,yBACA,qBACA,6BACA,+BACA,4BACA,wBAEA,SACAw4B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAuEA,OArEAnvB,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAKA,IAAA8zB,EACA,IAAAC,EACA,IAAAC,EAKA,IAAAlC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAW,EACA,IAAAE,EACA,IAAAC,EACA,IAAAC,EACA,IAAAI,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAK,EACA,IAAAC,EAKA,IAAAzC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EAEA,IAAAM,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,I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","file":"front-end.js","sourcesContent":["(function () {\n","/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\ndefine(\"../../../node_modules/almond/almond\", function(){});\n\n","define( 'models/fieldErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/fieldErrorCollection',['models/fieldErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/fieldModel',['models/fieldErrorCollection'], function( fieldErrorCollection ) {\n\tvar model = Backbone.Model.extend( {\n\t\tdefaults: {\n\t\t\tplaceholder: '',\n\t\t\tvalue: '',\n\t\t\tlabel_pos: '',\n\t\t\tclasses: 'ninja-forms-field',\n\t\t\treRender: false,\n\t\t\tmirror_field: false,\n\t\t\tconfirm_field: false,\n\t\t\tclean: true,\n\t\t\tdisabled: '',\n\t\t\tvisible: true,\n\t\t\tinvalid: false\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tvar type = this.get('type');\n\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'reset', this.resetModel );\n\n \t\tthis.bind( 'change', this.changeModel, this );\n \t\tthis.bind( 'change:value', this.changeValue, this );\n \t\tthis.set( 'errors', new fieldErrorCollection() );\n\n\t\t\tif (type === 'listimage') {\n\t\t\t\tthis.get = this.listimageGet;\n\t\t\t\tthis.set = this.listimageSet;\n\t\t\t}\n\n \t\t/*\n\t\t\t * Trigger an init event on two channels:\n\t\t\t * \n\t\t\t * fields\n\t\t\t * field-type\n\t\t\t *\n\t\t\t * This lets specific field types modify model attributes before anything uses them.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'init:model', this );\n\n\t\t\tif( 'undefined' != typeof this.get( 'parentType' ) ){\n\t\t\t\tnfRadio.channel( this.get( 'parentType' ) ).trigger( 'init:model', this );\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * When we load our form, fire another event for this field.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'loaded', this.formLoaded );\n\t\t\n\t\t\t/*\n\t\t\t * Before we submit our form, send out a message so that this field can be modified if necessary.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'before:submit', this.beforeSubmit );\n\t\t},\n\n\t\tlistimageGet: function(attr) {\n if(attr === 'options') {\n\t\t\t\t\tattr = 'image_options';\n\t\t\t}\n\n return Backbone.Model.prototype.get.call(this, attr);\n\t\t},\n\t\t\n\t\tlistimageSet: function(attributes, options) {\n\t\t\tif ('options' === attributes) {\n\t\t\t\tattributes = 'image_options';\n\t\t\t}\n\t\t\treturn Backbone.Model.prototype.set.call(this, attributes, options);\n\t\t},\n\n\t\tchangeModel: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:model', this );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:modelValue', this );\n\t\t},\n\n\t\taddWrapperClass: function( cl ) {\n\t\t\tthis.set( 'addWrapperClass', cl );\n\t\t},\n\n\t\tremoveWrapperClass: function( cl ) {\n\t\t\tthis.set( 'removeWrapperClass', cl );\n\t\t},\n\n\t\tsetInvalid: function( invalid ) {\n\t\t\tthis.set( 'invalid', invalid );\n\t\t},\n\n\t\tformLoaded: function() {\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'formLoaded', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'formLoaded', this );\n\t\t},\n\n\t\tbeforeSubmit: function( formModel ) {\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'before:submit', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'before:submit', this );\n\t\t},\n\n\t\t/**\n\t\t * Return the value of this field.\n\t\t * This method exists so that more complex fields can return more than just the field value.\n\t\t * Those advanced fields should create their own method with this name.\n\t\t * \n\t\t * @since 3.5\n\t\t * @return {string} Value of this field.\n\t\t */\n\t\tgetValue: function() {\n\t\t\treturn this.get( 'value' );\n\t\t}\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldCollection',['models/fieldModel'], function( fieldModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: fieldModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n this.on( 'reset', function( fieldCollection ){\n nfRadio.channel( 'fields' ).trigger( 'reset:collection', fieldCollection );\n }, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:firstFieldByOrder', this.getFirstFieldByOrder );\n\t\t},\n\n\t\tvalidateFields: function() {\n\t\t\t_.each( this.models, function( fieldModel ) {\n\t\t\t\tif(fieldModel.get(\"type\") === \"repeater\"){\n\t\t\t\t\tconst repeaterModels = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldsModelsArrayByForm', fieldModel.get('formID') );\n\t\t\t\t\t_.each( repeaterModels, function( repeaterFieldModel ) {\n\t\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\t\trepeaterFieldModel.set( 'clean', false );\n\t\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', repeaterFieldModel );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\tfieldModel.set( 'clean', false );\n\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', fieldModel );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t\t//Focus the first invalid input when found\n\t\t\tvar formModel = nfRadio.channel( 'form-' + this.models[0].get( 'formID' ) ).request( 'get:form' );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t},\n\n\t\tshowFields: function() {\n\t\t\tthis.invoke( 'set', { visible: true } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\thideFields: function() {\n\t\t\tthis.invoke( 'set', { visible: false } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\tgetFirstFieldByOrder: function( ids_array ) {\n\t\t\tlet targetID = 0;\n\t\t\t//Loop through an array of fieldIDs to return the one that is positioned first\n\t\t\t_.each(ids_array, function( id ) {\n\t\t\t\t//Get field order\n\t\t\t\tconst order = nfRadio.channel( 'fields' ).request( 'get:field', id ).get('order');\n\t\t\t\t//Set it as the target when the lowest order is found\n\t\t\t\ttargetID = (targetID === 0 || order < targetID) ? id : targetID;\n\t\t\t});\n\n\t\t\treturn targetID;\n\t\t}\n\t} );\n\treturn collection;\n} );\n\n","define( 'models/formErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/formErrorCollection',['models/formErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/formModel',[\n\t'models/fieldCollection',\n\t'models/formErrorCollection'\n\t], function(\n\t\tFieldCollection,\n\t\tErrorCollection\n\t) {\n\tvar model = Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tbeforeForm: '',\n\t\t\tafterForm: '',\n\t\t\tbeforeFields: '',\n\t\t\tafterFields: '',\n\t\t\twrapper_class: '',\n\t\t\telement_class: '',\n\t\t\thp: '',\n\t\t\tfieldErrors: {},\n\t\t\textra: {}\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\t// Loop over settings and map to attributes\n\t\t\t_.each( this.get( 'settings' ), function( value, setting ) {\n\t\t\t\tthis.set( setting, value );\n\t\t\t}, this );\n\n\t\t\tthis.set( 'loadedFields', this.get( 'fields' ) );\n\t\t\tthis.set( 'fields', new FieldCollection( this.get( 'fields' ), { formModel: this } ) );\n\t\t\tthis.set( 'errors', new ErrorCollection() );\n\n\t\t\t/*\n\t\t\t * Send out a radio message so that anyone who wants to filter our content data can register their filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).trigger( 'before:filterData', this );\n\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.get( 'formContentData' );\n\n\t\t\t/*\n\t\t\t * The formContentData variable used to be fieldContentsData.\n\t\t\t * If we don't have a 'formContentData' setting, check to see if we have an old 'fieldContentsData'.\n\t\t\t * \n\t\t\t * TODO: This is for backwards compatibility and should be removed eventually. \n\t\t\t */\n\t\t\tif ( ! formContentData ) {\n\t\t\t\tformContentData = this.get( 'fieldContentsData' );\n\t\t\t}\n\t\t\t\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentData = callback( formContentData, this, this );\n\t\t\t\n\t\t\tthis.set( 'formContentData', formContentData );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'init:model', this );\n\n\t\t\t// Fields\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:fieldByKey', this.getFieldByKey, this );\n\n\t\t\t// Form Errors\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:error', this.addError, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:error', this.removeError, this );\n\n\t\t\t// Extra Data\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:extra', this.getExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:extra', this.addExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:extra', this.removeExtra, this );\n\t\t\n\t\t\t// Respond to requests to get this model.\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:form', \t this.getForm, \t this );\n\n\t\t\tnfRadio.channel( 'form' ).trigger( 'loaded', this );\n\t\t\tnfRadio.channel( 'form' ).trigger( 'after:loaded', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'loaded', \t this );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Fields\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetFieldByKey: function( key ) {\n\t\t\treturn this.get( 'fields' ).findWhere( { key: key } );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Form Errors\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\taddError: function( id, msg ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\terrors.add( { id: id, msg: msg } );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:error', this, id, msg );\n\t\t},\n\n\t\tremoveError: function( id ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\tvar errorModel = errors.get( id );\n\t\t\terrors.remove( errorModel );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:error', this, id );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Extra Data\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tif( 'undefined' == typeof key ) return extraData;\n\t\t\treturn extraData[ key ];\n\t\t},\n\n\t\taddExtra: function( key, value ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\textraData[ key ] = value;\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:extra', this, key, value );\n\t\t},\n\n\t\tremoveExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tdelete extraData[ key ];\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:extra', this, key );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Get this form\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\t\tgetForm: function() {\n\t\t\treturn this;\n\t\t}\n\t} );\n\n\treturn model;\n} );\n","define( 'models/formCollection',['models/formModel'], function( formModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: formModel\n\t} );\n\treturn collection;\n} );\n","/*\n * Handles setting up our form.\n *\n * Holds a collection of our fields.\n * Replies to requests for field data.\n * Updates field models.\n */\ndefine('controllers/formData',['models/formModel', 'models/formCollection', 'models/fieldCollection', 'models/formErrorCollection'], function( FormModel, FormCollection, FieldCollection, ErrorCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\t/*\n\t\t\t * Setup our field collections.\n\t\t\t */\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Initialize our form collection (incase we have multiple forms on the page)\n\t\t\t */\n\t\t\tthis.collection = new FormCollection( nfForms );\t\t\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'loaded', this.collection );\n\t\t\tnfRadio.channel( 'app' ).trigger( 'forms:loaded', this.collection );\n\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:form', this.getForm, this );\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:forms', this.getForms, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:field', this.getField, this );\n\t\t},\n\n\t\tgetForm: function( id ) {\n\t\t\treturn this.collection.get( id );\n\t\t},\n\n\t\tgetForms: function() {\n\t\t\treturn this.collection;\n\t\t},\n\n\t\tgetField: function( id ) {\n\t\t\tvar model = false;\n\t\t\t\n\t\t\t_.each( this.collection.models, function( form ) {\n\t\t\t\tif ( ! model ) {\n\t\t\t\t\tmodel = form.get( 'fields' ).get( id );\t\n\t\t\t\t}\t\t\t\n\t\t\t} );\n\n\t\t\tif(typeof model == \"undefined\" && String(id).indexOf('.') !== -1){\n\t\t\t\tmodel = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldById', id );\n\t\t\t}\n\t\t\t\n\t\t\treturn model;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldError',['models/fieldErrorModel'], function( fieldErrorModel ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'fields' ).reply( 'add:error', this.addError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'remove:error', this.removeError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:error', this.getError );\n\t\t},\n\n\t\taddError: function( targetID, id, msg ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\terrors.add( { 'id': id, 'msg' : msg } );\n\t\t\tmodel.set( 'errors', errors );\n\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\tmodel.set( 'clean', false );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'add:error', model, id, msg );\n\t\t},\n\n\t\tremoveError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\n\t\t\tif ( 'undefined' != typeof targetError ) {\n\t\t\t\terrors.remove( targetError );\n\t\t\t\tmodel.set( 'errors', errors );\n\t\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\t\tnfRadio.channel( 'fields' ).trigger( 'remove:error', model, id );\n\t\t\t}\n\t\t},\n\n\t\tgetError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\t\t\tif ( 'undefined' != targetError ) {\n\t\t\t\treturn targetError;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for replying to a Radio request stating that a field has been changed.\n *\n * This controller sends out a message to the field-specific channel, the field type channel,\n * and the public fields channel so that the data model can be updated.\n */\n\ndefine('controllers/changeField',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Reply to our request for changing a field.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'change:field', this.changeField );\n\n\t\t\t/*\n\t\t\t * If we blur our field, set the model attribute of 'clean' to false.\n\t\t\t * 'clean' tracks whether or not the user has every interacted with this element.\n\t\t\t * Some validation, like required, uses this to decide whether or not to add an error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.blurField );\n\t\t},\n\n\t\tchangeField: function( el, model ) {\n\t\t\t// Get our current value.\n\t\t\tvar value = nfRadio.channel( model.get( 'type' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : nfRadio.channel( model.get( 'parentType' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : jQuery( el ).val();\n\n\t\t\t// Set our 'isUpdated' flag to false.\n\t\t\tmodel.set( 'isUpdated', false );\n\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\n\t\t\t/*\n\t\t\t * Send out a message saying that we've changed a field.\n\t\t\t * The first channel is field id/key specific.\n\t\t\t * The second channel is the field type, i.e. text, email, radio\n\t\t\t * The third channel is a generic 'field' channel.\n\t\t\t *\n\t\t\t * If the submitted value you wish to store in the data model isn't the same as the value received above,\n\t\t\t * you can set that model in the actions below and set the 'isUpdated' model attribute to true.\n\t\t\t * i.e. model.set( 'isUpdated', true );\n\t\t\t */\n\t\t\tnfRadio.channel( 'field-' + model.get( 'id' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( model.get( 'type' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:field', el, model );\n\n\t\t\t/*\n\t\t\t * Send a request out on our nfAdmin channel to update our field model.\n\t\t\t * If the field model has a 'isUpdated' property of false, nothing will be updated.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', model, value );\n\n\t\t\t/*\n\t\t\t * If the field is in a repeater, update the repeater Value\n\t\t\t */\n\t\t\tif(model.get(\"repeaterField\")){\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t\t}\n\t\t},\n\n\t\tblurField: function( el, model ) {\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeEmail',[], function() {\n\tvar radioChannel = nfRadio.channel( 'email' );\n\t// var emailReg = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\n\tvar emailReg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\tvar errorID = 'invalid-email';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.emailKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar value = jQuery( el ).val();\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\temailChange: function( value, fieldID ) {\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\tif( emailReg.test( value ) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an email field, track their keypresses and add the appropriate class.\n\t\t * If the value validates as an email, add a class of nf-pass\n\t\t * If the value does not validate as email, add a class of nf-fail\n\t\t * \n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\temailKeyup: function( el, model, keyCode ) {\n\t\t\t\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid email.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t} else if ( ! emailReg.test( value ) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t} else if ( emailReg.test( value ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeDate',[], function() {\n\tvar radioChannel = nfRadio.channel( 'date' );\n\tvar errorID = 'invalid-date';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.dateKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t\t\n\t\t\tthis.listenTo( radioChannel, 'change:extra', this.changeHoursMinutes, this)\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tdateChange: function( model ) {\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\t// If we are dealing with purely a time field, bail early.\n\t\t\tif ( 'time_only' == model.get( 'date_mode' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\t\tif( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an dat field, track their keypresses\n\t\t * and add the appropriate class.\n\t\t * If the value validates as an date, add a class of nf-pass\n\t\t * If the value does not validate as date, add a class of nf-fail\n\t\t *\n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\tdateKeyup: function( el, model, keyCode ) {\n\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t* Get our current date format\n\t\t\t */\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid date.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( ! this.isDateValid(value, format, fieldID) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tchangeHoursMinutes: function( e, fieldModel ) {\n\t\t\tlet type = '';\n\t\t\tlet container = jQuery( e.target ).closest( '.nf-field-element' );\n\n\t\t\t// Set our hour, minute, and ampm\n\t\t\tlet selected_hour = jQuery( container ).find( '.hour' ).val();\n\t\t\tlet selected_minute = jQuery( container ).find( '.minute' ).val();\n\t\t\tlet selected_ampm = jQuery( container ).find( '.ampm' ).val();\n\n\t\t\tfieldModel.set( 'selected_hour', selected_hour );\n\t\t\tfieldModel.set( 'selected_minute', selected_minute );\n\t\t\tfieldModel.set( 'selected_ampm', selected_ampm );\n\n\t\t\t// Detect time field inside a repeatable fieldset field to set correct value\n\t\t\tconst fieldId = fieldModel.get( 'id' );\n\t\t\tif(typeof fieldId === 'string' && fieldId.search(\".\") !== -1){\n\t\t\t\tconst setValue = typeof selected_ampm !== \"undefined\" ?\n\t\t\t\t\tselected_hour + \":\" + selected_minute + \" \" + selected_ampm :\n\t\t\t\t\tselected_hour + \":\" + selected_minute;\n\n\t\t\t\tif ( 'time_only' === fieldModel.get( 'date_mode' ) ) {\n\t\t\t\t\tfieldModel.set( 'value', setValue );\n\t\t\t\t}\n\t\t\t\t\n\t\t\t\tnfRadio.channel('field-repeater').trigger('set:value');\n\t\t\t}\n\t\t},\n\n\t\tisDateValid: function(value, format, fieldID){\n\t\t\tif(document.querySelector(\"[name='nf-field-\" + fieldID + \"']\") === null) return;\n\t\t\t//Get Date and Timestamp using the precise flatPickr instance of the field to catch the locale\n\t\t\tconst parseDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.parseDate(value, format);\n\t\t\t// If parsedDate is undefined, the date is invalid\n\t\t\tif (!parseDate) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst timestamp = parseDate.getTime();\n\t\t\tif (isNaN(timestamp)) {\n\t\t\t\treturn false; // Invalid date\n\t\t\t}\n\t\t\t//Convert timestamp back to Date object and string\n\t\t\tconst parsedDate = new Date(timestamp);\n\t\t\tconst formattedDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.formatDate(parsedDate, format);\n\t\t\t// Check vlaue and date string are deeply equals\n\t\t\treturn formattedDate === value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * When we init our checkbox model, register our renderClasses() function\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'checkbox' ), 'init:model', this.registerRenderClasses );\n\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:required', this.validateRequired );\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:modelData', this.validateModelData );\n nfRadio.channel( 'checkbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'checkbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tbeforeUpdateField: function( el, model ) {\n\t\t\tvar checked = jQuery( el ).prop( 'checked' );\n\t\t\tif ( checked ) {\n\t\t\t\tvar value = 1;\n\t\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\t\t\t} else {\n\t\t\t\tvar value = 0;\n\t\t\t\tjQuery( el ).removeClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\treturn el[0].checked;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\t\t\treturn model.get( 'value' ) != 0;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tif ( 1 == fieldModel.get( 'value' ) ) {\n\t\t\t\tcalcValue = fieldModel.get( 'checked_calc_value' );\n\t\t\t} else {\n\t\t\t\tcalcValue = fieldModel.get( 'unchecked_calc_value' );\n\t\t\t}\n\n\t\t\treturn calcValue;\n\t\t},\n\n\t\tregisterRenderClasses: function( model ) {\n\t\t\tif ( 'checked' == model.get( 'default_value' ) ) {\n\t\t\t\tmodel.set( 'value', 1 );\n\t\t\t} else {\n\t\t\t\tmodel.set( 'value', 0 );\n\t\t\t}\n\t\t\tmodel.set( 'customClasses', this.customClasses );\n\t\t\tmodel.set( 'customLabelClasses', this.customLabelClasses );\n\t\t\tmodel.set( 'maybeChecked', this.maybeChecked );\n\t\t},\n\n\t\tcustomClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tcustomLabelClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked-label';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked-label', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tmaybeChecked: function() {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\treturn ' checked';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckboxList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listcheckbox' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n nfRadio.channel( 'listcheckbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'terms' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listcheckbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n nfRadio.channel( 'terms' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'options' ).length ) {\n var selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n\n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n _.each( this.options, function( option, index ) {\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], option.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, option.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( option.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.fieldID = this.id;\n option.classes = this.classes;\n option.index = index;\n option.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n \n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), option.value )\n\t\t || -1 !== _.indexOf( this.value, option.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == option.selected && this.clean ) && 'undefined' === typeof this.value ) {\n\t\t selected = true;\n\t }\n\n\n // else if( ( option.selected && \"0\" != option.selected ) && this.clean ){\n\t // isSelected = true;\n\t // } else {\n\t // var testValues = _.map( this.value, function( value ) {\n\t // return value.toString();\n\t // } );\n\t //\n\t // option.isSelected = ( -1 != testValues.indexOf( option.value.toString() ) );\n\t // }\n\t option.selected = selected;\n\t option.isSelected = selected;\n\t option.required = this.required;\n option.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-option' );\n html += template( option );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n var calc_value = 0;\n var options = fieldModel.get( 'options' );\n if ( 0 != options.length ) {\n _.each( fieldModel.get( 'value' ), function( val ) {\n var tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n calc_value = Number( calc_value ) + Number( tmp_opt.calc );\n } );\n }\n return calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n \tvar optionArray = typeof selected[0] !== \"undefined\" ? selected[0].split( ',' ) : [];\n \tvar valueIndex = optionArray.indexOf( value );\n \tif( -1 !== valueIndex) {\n \t\toptionArray.splice( valueIndex, 1 );\n\t }\n \tselected = optionArray.join( ',' );\n }\n }\n\n // if ( 1 == model.get( 'show_other' ) ) {\n // model.set( 'reRender', true );\n // }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldImageList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listimage' ), 'init:model', this.register );\n nfRadio.channel( 'listimage' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listimage' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'image_options' ).length ) {\n var selected = _.filter( model.get( 'image_options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n \n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n if (this.allow_multi_select === 1) {\n this.old_classname = 'list-checkbox';\n this.image_type = 'checkbox';\n } else {\n this.image_type = 'radio';\n }\n\n if(this.list_orientation === 'horizontal') {\n this.flex_direction = 'row';\n } else {\n this.flex_direction = 'column';\n }\n var that = this;\n\n var num_columns = parseInt(this.num_columns) || 1;\n var current_column = 1;\n var current_row = 1;\n \n _.each( this.image_options, function( image, index ) {\n if (!this.show_option_labels) {\n image.label = '';\n } else {\n image.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(image.label) : image.label;\n }\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], image.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, image.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( image.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof image.visible ) {\n image.visible = true;\n }\n \n if(that.list_orientation === 'horizontal' && current_column <= num_columns) {\n image.styles = \"margin:auto;grid-column: \" + current_column + \"; grid-row = \" + current_row;\n\n if(current_column === num_columns) {\n current_column = 1;\n current_row += 1;\n } else {\n current_column += 1;\n }\n }\n\n image.image_type = that.image_type; \n image.fieldID = this.id;\n image.classes = this.classes;\n image.index = index;\n\n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), image.value )\n\t\t || -1 !== _.indexOf( this.value, image.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && image.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == image.selected && this.clean ) && ('undefined' === typeof this.value || '' === this.value)) {\n\t\t selected = true;\n\t }\n\n\t image.selected = selected;\n\t image.isSelected = selected;\n\t image.required = this.required;\n image.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-option' );\n html += template( image );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n value: this.value,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 1 == parseInt( fieldModel.get( 'allow_multi_select' ) ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a selcted value, use it.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n\n if(model.get('allow_multi_select') !== 1) {\n var selected = jQuery( el ).val();\n var options = model.get('image_options');\n _.each(options, function(option, index) {\n if(option.value === selected) {\n option.isSelected = true;\n option.selected = true;\n } else {\n option.isSelected = false;\n option.selected = false;\n }\n if(!option.isSelected) {\n option.selected = false;\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked-label');\n } else {\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked-label');\n }\n });\n } else {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n var optionArray = selected[0].split( ',' );\n var valueIndex = optionArray.indexOf( value );\n if( -1 !== valueIndex) {\n optionArray.splice( valueIndex, 1 );\n }\n selected = optionArray.join( ',' );\n }\n }\n }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRadio',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:modelValue', this.changeModelValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'init:model', this.register );\n\t\t\tnfRadio.channel( 'listradio' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:field', this.updateCheckedClass, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherText', this.renderOtherText );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\n\t\t\t\tif ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', selected.value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tchangeModelValue: function( model ) {\n\t\t\tif ( 1 == model.get( 'show_other' ) ) {\n\t\t\t\t// model.set( 'reRender', true );\n\t\t\t\tmodel.trigger( 'reRender');\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\t\t\tif ( '' == this.value ) {\n\t\t\t\tvar valueFound = true;\n\t\t\t} else {\n\t\t\t\tvar valueFound = false;\n\t\t\t}\n\t\t\t\n\t\t\t_.each( this.options, function( option, index ) {\n\t\t\t\tif ( option.value == this.value ) {\n\t\t\t\t\tvalueFound = true;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.selected = false;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.index = index;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\toption.required = this.required;\n\n\t\t\t\t/*\n\t\t\t\t * If we haven't edited this field yet, use the default checked\n\t\t\t\t */\n\t\t\t\tif ( this.clean && 1 == this.selected ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else if ( this.value == option.value ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-option' );\n\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\tif ( 1 == this.show_other ) {\n\t\t\t\tif ( 'nf-other' == this.value ) {\n\t\t\t\t\tvalueFound = false;\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.id,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.value,\n\t\t\t\t\trenderOtherText: this.renderOtherText,\n\t\t\t\t\tvalueFound: valueFound\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other' );\n\t\t\t\thtml += template( data );\n\t\t\t}\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherText: function() {\n\t\t\tif ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n\t\t\t\tif ( 'nf-other' == this.currentValue ) {\n\t\t\t\t\tthis.currentValue = '';\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.fieldID,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.currentValue\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other-text' );\n\t\t\t\treturn template( data );\n\t\t\t}\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t\n /*\n * Default to 0, in case we have no selection.\n */\n var calc_value = 0;\n \n\t\t\tif ( 0 != fieldModel.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( fieldModel.get( 'options' ), function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t},\n\n\t\tupdateCheckedClass: function( el, model ) {\n\t\t\tjQuery( '[name=\"' + jQuery( el ).attr( 'name' ) + '\"]' ).removeClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'ul' ).find( 'label' ).removeClass( 'nf-checked-label' );\n\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'li' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldNumber',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'number' ), 'init:model', this.maybeMinDefault );\n this.listenTo( nfRadio.channel( 'number' ), 'keyup:field', this.validateEntry );\n },\n\n maybeMinDefault: function( model ) {\n\n if( '' == model.get( 'value' ) && '' == model.get( 'placeholder' ) ){\n var min = model.get( 'num_min' );\n model.set( 'placeholder', min );\n }\n },\n\n validateEntry: function( el, model ) {\n var $el = jQuery( el );\n var val = $el.val();\n var floatVal = parseFloat( val );\n var min = $el.attr( 'min' );\n var max = $el.attr( 'max' );\n var step = $el.attr( 'step' ) ? $el.attr( 'step' ) : '1';\n\n if( min && floatVal < min ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-min', formModel.get( 'settings' ).fieldNumberNumMinError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-min' );\n }\n\n if ( max && floatVal > max ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-max', formModel.get( 'settings' ).fieldNumberNumMaxError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-max' );\n }\n\n let testVal = val.split('.');\n testVal = typeof(testVal[1]) !== 'undefined' ? testVal[1].length : 0;\n let testStep = step.split('.');\n testStep = typeof(testStep[1]) !== 'undefined' ? testStep[1].length : 0;\n let factor = Math.pow(10, testStep);\n\n if( step && val && ( testVal > testStep\n || 0 !== parseInt((factor * floatVal).toFixed()) % parseInt((factor * parseFloat(step)).toFixed()) ) ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-step', formModel.get( 'settings' ).fieldNumberIncrementBy + step );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-step' );\n }\n }\n\n });\n\n return controller;\n} );\n","define( 'controllers/mirrorField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\n\tvar controller = Marionette.Object.extend( {\n\t\tlisteningModel: '',\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerMirror );\n\t\t},\n\n\t\tregisterMirror: function( model ) {\n\t\t\tif ( model.get( 'mirror_field' ) ) {\n\t\t\t\tthis.listeningModel = model;\n\t\t\t\tvar targetID = model.get( 'mirror_field' );\n\t\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetID ), 'change:modelValue', this.changeValue );\n\t\t\t}\n\t\t},\n\n\t\tchangeValue: function( targetModel ) {\n\t\t\tthis.listeningModel.set( 'value', targetModel.get( 'value' ) );\n\t\t\t// this.listeningModel.set( 'reRender', true );\n\t\t\tthis.listeningModel.trigger( 'reRender' );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define( 'controllers/confirmField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar errorID = 'confirm-mismatch';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerConfirm );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.confirmKeyup );\n\t\t},\n\n\t\tregisterConfirm: function( confirmModel ) {\n\t\t\tif ( ! confirmModel.get( 'confirm_field' ) ) return;\n\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', function( formModal ){\n\t\t\t\tthis.registerConfirmListeners( confirmModel );\n\t\t\t});\n\t\t},\n\n\t\tregisterConfirmListeners: function( confirmModel ) {\n\t\t\t\n\t\t\tvar targetModel = nfRadio.channel( 'form-' + confirmModel.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\n\t\t\t//TODO: Add better handling for password confirm fields on the front end.\n\t\t\tif( 'undefined' == typeof targetModel ) return;\n\n\t\t\ttargetModel.set( 'confirm_with', confirmModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + confirmModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t},\n\n\t\tchangeValue: function( model ) {\n\t\t\tif ( 'undefined' == typeof model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t} else {\n\t\t\t\tvar targetModel = model;\n\t\t\t\tvar confirmModel = radioChannel.request( 'get:field', targetModel.get( 'confirm_with' ) );\n\t\t\t}\n\t\t\tvar targetID = targetModel.get( 'id' );\n\t\t\tvar confirmID = confirmModel.get( 'id' );\n\n\t\t\tif ( '' == confirmModel.get( 'value' ) || confirmModel.get( 'value' ) == targetModel.get( 'value' ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t} else {\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t}\n\t\t},\n\t\t\n\t\tconfirmKeyup: function( el, model, keyCode ) {\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tif ( model.get( 'confirm_field' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar confirmID = model.get( 'id' );\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t\tvar compareValue = targetModel.get( 'value' );\n\t\t\t\tvar confirmValue = currentValue;\n\t\t\t} else if ( model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'confirm_with' ) );\n\t\t\t\tvar confirmID = confirmModel.get( 'id' );\n\t\t\t\tvar confirmValue = confirmModel.get( 'value' );\n\t\t\t\tvar compareValue = confirmValue;\n\t\t\t}\n\n\t\t\tif ( 'undefined' !== typeof confirmModel ) {\n\t\t\t\tif ( '' == confirmValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else if ( currentValue == compareValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/updateFieldModel',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'update:field', this.updateField );\n\t\t},\n\n\t\tupdateField: function( model, value ) {\n\t\t\tif ( ! model.get( 'isUpdated' ) ) {\n\t\t\t\tmodel.set( 'value', value );\n\t\t\t\tmodel.set( 'isUpdated', true );\n\t\t\t\t/*\n\t\t\t\t * If we're working with an array, it won't trigger a change event on the value attribute.\n\t\t\t\t * Instead, we have to manually trigger a change event.\n\t\t\t\t */ \n\t\t\t\tif ( _.isArray( value ) ) {\n\t\t\t\t\tmodel.trigger( 'change:value', model );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitButton',['controllers/submitButton'], function( submitButton ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tbound: {},\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'init:model', this.registerHandlers );\n\t\t},\n\n\t\tregisterHandlers: function( fieldModel ) {\n\t\t\tif ( 'undefined' != typeof this.bound[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'click:field', this.click, this );\n\t\t\t/*\n\t\t\t * Register an interest in the 'before:submit' event of our form.\n\t\t\t */\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'before:submit', this.beforeSubmit, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:failed', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:response', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'enable:submit', this.maybeEnable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'disable:submit', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'processingLabel', this.processingLabel, fieldModel );\n\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.maybeEnable, fieldModel );\n\t\t\t\n\t\t\tthis.bound[ fieldModel.get( 'id') ] = true;\n\t\t},\n\n\t\tclick: function( e, fieldModel ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'submit', formModel );\n\t\t},\n\n\t\tbeforeSubmit: function() {\n\t\t\tif(this.get('disabled')) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'formID' ) ).trigger( 'processingLabel', this );\n\t\t},\n\n\t\tmaybeDisable: function( fieldModel ) {\n\n\t\t\tif( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tmaybeEnable: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * If the field reporting the error is not on the same form as the submit button, return false;\n\t\t\t */\n\t\t\tif ( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', this.get( 'formID' ) );\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\tthis.set( 'disabled', false );\n\t\t\t\tthis.trigger( 'reRender' );\n\t\t\t}\n\t\t},\n\n\t\tprocessingLabel: function() {\n\n\t\t\tthis.set( 'oldLabel', this.get( 'label' ) );\n\t\t\tthis.set( 'label', this.get( 'processing_label' ) );\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tresetLabel: function( response ) {\n\t\t\tif ( 'undefined' != typeof response.errors &&\n\t\t\t\t 'undefined' != typeof response.errors.nonce &&\n\t\t\t\t _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Do not reset label for nonce errors, which will re-submit the form.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n\t\t\t\tthis.set( 'label', this.get( 'oldLabel' ) );\n\t\t\t}\n\t\t\tthis.set( 'disabled', false );\n\t\t\tthis.trigger( 'reRender' );\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitDebug',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitDebug );\n },\n\n submitDebug: function( response, textStatus, jqXHR, formID ) {\n\n if( 'undefined' == typeof response.debug ) return;\n\n /* Form Debug Messages */\n if( 'undefined' != typeof response.debug.form ) {\n var debugMessages = document.createElement( 'span' );\n _.each(response.debug.form, function (message, index) {\n var messageText = document.createTextNode( message );\n debugMessages.appendChild( messageText );\n debugMessages.appendChild(\n document.createElement( 'br' )\n );\n });\n jQuery('.nf-debug-msg').html( debugMessages );\n }\n\n /* Console Debug Messages */\n if( 'undefined' != typeof response.debug.console ) {\n var style = '';\n console.log( '%c%s', style, 'NINJA SUPPORT' );\n _.each(response.debug.console, function (message, index) {\n console.log( message );\n });\n console.log( '%c%s', style, 'END NINJA SUPPORT' );\n }\n }\n\n });\n\n return controller;\n} );\n\n","define('controllers/getFormErrors',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function( model ) {\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\t\tif ( field.get( 'type' ) != 'submit' && field.get( 'errors' ).length > 0 ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ field.get( 'id' ) ] = field.get( 'errors' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn errors;\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","define('controllers/validateRequired',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.validateKeyup );\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.validateModelData );\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'validate:field', this.validateModelData );\n\t\t},\n\t\t\n\t\tvalidateKeyup: function( el, model, keyCode ) {\n\t\t\tif ( 1 != model.get( 'required' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( ! model.get( 'clean' ) ) {\n\t\t\t\tthis.validateRequired( el, model );\n\t\t\t}\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:required', el, model );\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tvar maskPlaceholder = this.getMask( model );\n\n // If the field has a mask...\n // AND that mask is equal to the current value... \n if ( maskPlaceholder && currentValue === maskPlaceholder ) {\n // If we have a pre-existing error...\n // OR if this field has been previously focused...\n if ( 0 < model.get( 'errors' ).length || ! model.get( 'clean' ) ) {\n // Persist that error.\n defaultReqValidation = false;\n }\n }\n // If our value is an empty string...\n if ( ! String(currentValue).trim() ) {\n // Throw an error.\n defaultReqValidation = false;\n }\n\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\t\t},\n\n\t\tgetMask: function( model ) {\n\t\t\tvar mask = model.get( 'mask' );\n\n\t\t\tif(\"undefined\" === typeof mask) return;\n\t\t\t\n\t\t\tswitch(mask) {\n\t\t\t\tcase '':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'currency':\n\t\t\t\t\tmask = nfi18n.currencySymbol;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\t\tmask = model.get( 'custom_mask' );\n\t\t\t\t\t/**\n\t\t\t\t\t * Break intentionally excluded so that this case\n\t\t\t\t\t * also executes the contents of default.\n\t\t\t\t\t */\n\t\t\t\tdefault:\n\t\t\t\t\tmask = mask.replace( /9/g, '_' );\n\t\t\t\t\tmask = mask.replace( /a/g, '_' );\n\t\t\t\t\tmask = mask.replace( /\\*/g, '_' );\n\t\t\t}\n\t\t\treturn mask;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) || model.get( 'clean' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * If we already have a required error on this model, return false\n\t\t\t */\n\t\t\tif ( model.get( 'errors' ).get( 'required-error' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcurrentValue = model.get( 'value' );\n\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tif ( ! String(currentValue).trim() ) {\n\t\t\t\tdefaultReqValidation = false;\n\t\t\t}\n\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:modelData', model );\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\n\t\t},\n\n\t\tmaybeError: function( valid, model ) {\n\t\t\tif ( ! valid ) {\n\n\t\t\t\tvar formModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:form' );\n\t\t\t\t\n\t\t\t\tif( 'undefined' != typeof formModel ) {\n\t\t\t\t\tnfRadio.channel('fields').request('add:error', model.get('id'), 'required-error', formModel.get('settings').validateRequiredField );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n\t\t\t}\t\t\t\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/submitError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitErrors );\n\t\t\t//Focus first invalid input after catching errors during submission\n\t\t\tnfRadio.channel( 'submit' ).reply( 'focus:firstInvalidInput', this.focusFirstInvalidInput );\n\t\t},\n\n\t\tsubmitErrors: function( response, textStatus, jqXHR, formID ) {\n\n\t\t\t// Check for nonce error.\n\t\t\tif ( _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Update nonce from response.\n\t\t\t\t\tnfFrontEnd.ajaxNonce = response.errors.nonce.new_nonce;\n\t\t\t\t\tnfFrontEnd.nonce_ts = response.errors.nonce.nonce_ts;\n\t\t\t\t\t// Re-submit form.\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'submit', formModel );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.fields ) > 0 ) {\n\t\t\t\t_.each( response.errors.fields, function( data, fieldID ) {\n if ( typeof( data ) === 'object' ) {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, data.slug, data.message );\n } else {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, 'required-error', data );\n }\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.form ) > 0 ) {\n\t\t\t\t_.each( response.errors.form, function( msg, errorID ) {\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'remove:error', errorID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'add:error', errorID, msg );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( 'undefined' != typeof response.errors.last ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.last.message ) {\n\t\t\t\t\tvar style = 'background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;';\n\t\t\t\t\tconsole.log( '%c NINJA FORMS SUPPORT: SERVER ERROR', style );\n\t\t\t\t\tconsole.log( response.errors.last.message );\n\t\t\t\t\tconsole.log( '%c END SERVER ERROR MESSAGE', style );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t */\n\t\t\t/*\n\t\t\t * Re-show any hidden fields during a form submission re-start.\n\t\t\t */\n\t\t\tjQuery( '#nf-form-' + formID + '-cont .nf-field-container' ).show();\n\t\t},\n\n\t\tfocusFirstInvalidInput: function(errors) {\n\t\t\tconst targetID = nfRadio.channel( 'fields' ).request( 'get:firstFieldByOrder', errors );\n\t\t\tif(document.getElementById(\"nf-field-\"+ targetID) !== null){\n\t\t\t\tdocument.getElementById(\"nf-field-\"+ targetID).focus();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/actionRedirect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionRedirect );\n\t\t},\n\n\t\tactionRedirect: function( response ) {\n\n\t\t\tif ( 'undefined' != typeof response.data.halt && 'undefined' != typeof response.data.halt.redirect && '' != response.data.halt.redirect ) {\n\t\t\t\twindow.location = response.data.halt.redirect;\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.redirect && '' != response.data.actions.redirect ) {\n\t\t\t\t\twindow.location = response.data.actions.redirect;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/actionSuccess',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.success_message && '' != response.data.actions.success_message ) {\n\t\t\t\t\tvar form_id = response.data.form_id;\n\t\t\t\t\tvar success_message = jQuery( '#nf-form-' + form_id + '-cont .nf-response-msg' );\n\t\t\t\t\tconst read = response.data.actions.success_message.replace( /(<([^>]+)>)/ig, '');\n\t\t\t\t\tsuccess_message.attr('tabindex', '0');\n\t\t\t\t\tsuccess_message.attr('aria-live', 'assertive');\n\t\t\t\t\tsuccess_message.attr(\"aria-label\", read);\n\t\t\t\t\t\n\t\t\t\t\tsuccess_message.html( response.data.actions.success_message ).show();\n\t\t\t\t\tsuccess_message.focus();\n\t\t\t\t\t//Let's check if the success message is already fully visible in the viewport without scrolling\n\t\t\t\t\tvar top_of_success_message = success_message.offset().top;\n\t\t\t\t\tvar bottom_of_success_message = success_message.offset().top + success_message.outerHeight();\n\t\t\t\t\tvar bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).height();\n\t\t\t\t\tvar top_of_screen = jQuery(window).scrollTop();\n\n\t\t\t\t\tvar the_element_is_visible = ((bottom_of_screen > bottom_of_success_message) && (top_of_screen < top_of_success_message));\n\n\t\t\t\t\tif(!the_element_is_visible){\n\t\t\t\t\t\t//The element isn't visible, so let's scroll to the success message as in the previous release, but with a short animation\n\t\t\t\t\t\tjQuery('html, body').animate({\n\t\t\t\t\t\t\tscrollTop: ( success_message.offset().top - 50 )\n\t\t\t\t\t\t}, 300 );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldSelect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'init:model', function( model ){\n\t\t\t\tif( 'list' == model.get( 'parentType' ) ) this.register( model );\n\t\t\t}, this );\n\n\t\t\tnfRadio.channel( 'listselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\tnfRadio.channel( 'listmultiselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherAttributes', this.renderOtherAttributes );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t//Check to see if there is a value set for the field\n\t\t\t\tvar savedVal = model.get( 'value' );\n\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\tselected = _.map( selected, function( opt ) { return opt.value } );\n\t\t\t\t\tvar value = selected;\n\t\t\t\t} else if ( 'listradio' !== model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = _.first( model.get( 'options' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof selected\n\t\t\t\t\t\t&& 'undefined' != typeof selected.value ) {\n\t\t\t\t\t\tvar value = selected.value;\n\t\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\t\tvar value = selected.label;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t/*\n\t * This part is re-worked to take into account custom user-meta\n\t * values for fields.\n\t */\n\t\t\t\tif( 'undefined' !== typeof savedVal && '' !== savedVal\n\t\t\t\t\t&& Array.isArray( savedVal ) ) {\n\t\t\t\t\tmodel.set( 'value', savedVal );\n\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\n\t\t\t_.each( this.options, function( option ) {\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t\t\t\tif ( _.isArray( this.value ) ) {\n // If we have a multiselect list...\n // AND it has selected values...\n\t\t\t\t\tif( 'listmultiselect' === this.type && 0 < this.value.length &&\n\t\t\t\t\t\t-1 != _.indexOf( this.value[ 0 ].split( ',' ), option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t} else if( -1 != _.indexOf( this.value, option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t}\n\t\t\t\t} else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else if ( ( 1 == option.selected && this.clean )\n\t\t\t\t\t&& 'undefined' === typeof this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else {\n\t\t\t\t\tvar selected = false;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n\t\t\t\toption.selected = selected;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\t\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listselect-option' );\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherAttributes: function() {\n\t\t\tvar otherAttributes = '';\n\n\t\t\tif( 'listmultiselect' == this.type ){\n\t\t\t\totherAttributes = otherAttributes + ' multiple';\n\n\t\t\t\tvar multiSize = this.multi_size || 5;\n\t\t\t\totherAttributes = otherAttributes + ' size=\"' + multiSize + '\"';\n\t\t\t}\n\n\t\t\treturn otherAttributes;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == fieldModel.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = fieldModel.get( 'options' )[0];\n\t\t\t\t\t}\t\t\n\t\t\t\t\tcalc_value = selected.calc;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/coreSubmitResponse',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', response.data.form_id );\n\t\t\t/*\n\t\t\t * If we have errors, don't hide or clear.\n\t\t\t */\n\t\t\tif ( 0 != _.size( response.errors ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.clear_complete ) {\n\t\t\t\t// nfRadio.channel( 'form-' + response.data.form_id ).trigger( 'reset' );\n\t\t\t\tformModel.get( 'fields' ).reset( formModel.get( 'loadedFields' ) );\n if ( 1 != response.data.settings.hide_complete ) {\n nfRadio.channel( 'captcha' ).trigger( 'reset' );\n }\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.hide_complete ) {\n\t\t\t\t/**\n\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t */\n\t\t\t\tformModel.trigger( 'hide' );\n\t\t\t\t// jQuery( '.nf-fields' ).hide();\n\t\t\t\t// jQuery( '.nf-form-title' ).hide();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldProduct',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'product' ), 'init:model', this.register );\n nfRadio.channel( 'product' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderProductQuantity', this.renderProductQuantity );\n model.set( 'renderProduct', this.renderProduct );\n model.set( 'renderOptions', this.renderOptions );\n },\n\n renderProduct: function(){\n switch( this.product_type ) {\n case 'user':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-textbox' );\n return template( this );\n break;\n case 'hidden':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-hidden' );\n return template( this );\n break;\n\n case 'dropdown':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-dropdown' );\n return template( this );\n break;\n default:\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-single' );\n return template( this );\n }\n },\n\n renderProductQuantity: function(){\n if ( 1 == this.product_use_quantity ) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-quantity' );\n return template( this );\n }\n },\n\n renderOptions: function() {\n var that = this;\n var html = '';\n _.each( this.options, function( option ) {\n if ( 1 == option.selected ) {\n var selected = true;\n } else {\n var selected = false;\n }\n\n option.selected = selected;\n option.fieldID = that.id;\n option.classes = that.classes;\n option.currentValue = that.value;\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-' + that.product_type + '-option' );\n html += template( option );\n } );\n\n return html;\n },\n\n getCalcValue: function( fieldModel ) {\n\n var product_price = fieldModel.get( 'product_price' );\n var product_quantity = fieldModel.get( 'value' );\n\n return product_price * product_quantity;\n }\n });\n\n return controller;\n} );\n\n","define('controllers/fieldTotal',[], function() {\n var controller = Marionette.Object.extend( {\n\n totalModel: {},\n\n productTotals: {},\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'total' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'shipping' ), 'init:model', this.registerShipping );\n },\n\n register: function( totalModel ){\n this.totalModel = totalModel;\n\n var formID = totalModel.get( 'formID' );\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'loaded', this.onFormLoaded );\n\n this.listenTo( nfRadio.channel( 'product' ), 'change:modelValue', this.onChangeProduct );\n this.listenTo( nfRadio.channel( 'quantity' ), 'change:modelValue', this.onChangeQuantity );\n },\n\n registerShipping: function( shippingModel ){\n this.shippingCost = shippingModel.get( 'shipping_cost' );\n },\n\n onFormLoaded: function( formModel ){\n\n var fieldModels = formModel.get( 'fields' ).models;\n\n var productFields = {};\n var quantityFields = {};\n\n for( var model in fieldModels ){\n\n var field = fieldModels[ model ];\n var fieldID = field.get( 'id' );\n\n // TODO: Maybe use switch\n if( 'product' == field.get( 'type' ) ){\n productFields[ fieldID ] = field;\n } else if( 'quantity' == field.get( 'type' ) ){\n var productID = field.get( 'product_assignment' );\n quantityFields[ productID ] = field;\n }\n }\n\n for( var productID in productFields ){\n\n var product = productFields[ productID ];\n\n var productPrice = Number( product.get( 'product_price' ) );\n\n if( quantityFields[ productID ] ){\n\n productPrice *= quantityFields[ productID ].get( 'value' );\n\n } else if( 1 == product.get( 'product_use_quantity' ) ){\n\n productPrice *= product.get( 'value' );\n\n }\n\n this.productTotals[ productID ] = productPrice;\n }\n\n this.updateTotal();\n },\n\n onChangeProduct: function( model ){\n var productID = model.get( 'id' );\n var productPrice = Number( model.get( 'product_price' ) );\n var productQuantity = Number( model.get( 'value' ) );\n var newTotal = productQuantity * productPrice;\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n onChangeQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var productField = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n var productPrice = Number( productField.get( 'product_price' ) );\n\n var quantity = Number( model.get( 'value' ) );\n\n var newTotal = quantity * productPrice;\n\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n updateTotal: function(){\n\n var newTotal = 0;\n\n for( var product in this.productTotals ){\n newTotal += Number( this.productTotals[ product ] );\n }\n\n if( newTotal && this.shippingCost ) {\n // Only add shipping if there is a cost.\n newTotal += Number(this.shippingCost);\n }\n\n this.totalModel.set( 'value', newTotal.toFixed( 2 ) );\n this.totalModel.trigger( 'reRender' );\n }\n });\n\n return controller;\n});\n","define('controllers/fieldQuantity',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'quantity' ), 'init:model', this.registerQuantity );\n },\n\n registerQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var product = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n\n if( product ) {\n product.set('product_use_quantity', 0);\n }\n },\n\n });\n\n return controller;\n});\n","/**\n * Model that represents a calculation.\n *\n * On init, we trigger a radio message so that controllers can do things when a calc model inits.\n */\ndefine( 'models/calcModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\t\tinitialize: function() {\n\t\t\t// Set our form id\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\t// Set our initial fields object to empty. This will hold our key/value pairs.\n\t\t\tthis.set( 'fields', {} );\n\t\t\t// Trigger a radio message to let controllers know we've inited this model.\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'init:model', this );\n\t\t\t// When we change the value of this calculation, send out a radio message\n\t\t\tthis.on( 'change:value', this.changeValue, this );\n\t\t},\n\n\t\t/**\n\t\t * Trigger a radio message when a field present in our calculation changes\n\t\t *\n\t\t * The listener that triggers/calls this function is in controllers/calculations\n\t\t * \n\t\t * @since 3.0\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( fieldModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:field', this, fieldModel );\n\t\t},\n\n\t\tchangeCalc: function( targetCalcModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:calc', this, targetCalcModel );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:value', this );\n\t\t}\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/calcCollection',['models/calcModel'], function( CalcModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: CalcModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n _.each( models, function( model ) {\n \tif( 'undefined' == typeof model.dec ) return;\n if ( '' === model.dec.toString().trim() ) model.dec = 2;\n model.dec = parseInt( model.dec );\n } );\n\t\t\t/*\n\t\t\t * Respond to requests for our calc model\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + options.formModel.get( 'id' ) ).reply( 'get:calc', this.getCalc, this );\n\t\t},\n\n\t\tgetCalc: function( key ) {\n\t\t\treturn this.findWhere( { name: key } );\n\t\t}\n\t} );\n\treturn collection;\n} );\n","/**\n * Controller responsible for keeping up with calculations.\n */\ndefine('controllers/calculations',['models/calcCollection'], function( CalcCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.calcs = {};\n\t\t\tthis.displayFields = {};\n\t\t\t// When our form initialises, check to see if there are any calculations that need to be tracked.\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', this.registerCalcs );\n \n // When our collection gets reset, reset calculation tracking as well.\n this.listenTo( nfRadio.channel( 'fields' ), 'reset:collection', this.resetCalcs );\n\n\t\t\t// When a calc model is initialised, run a setup function.\n\t\t\t// this.listenTo( nfRadio.channel( 'calc' ), 'init:model', this.setupCalc );\n\n\t\t\t// When a field referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:field', this.changeField );\n\n\t\t\t// When a calculation referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:calc', this.changeCalc );\n\n\t\t\t/*\n\t\t\t * Listen to our field model init for fields that want to display calc values.\n\t\t\t * If that field has a calc merge tag, replace it with the default calc value.\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t_.each( nfFrontEnd.use_merge_tags.calculations, function( fieldType ) {\n\t\t\t\tthat.listenTo( nfRadio.channel( 'fields-' + fieldType ), 'init:model', that.initDisplayField );\n\t\t\t} );\n\t\t\t\n\t\t\t// When we change our calc value, update any display fields.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:value', this.updateDisplayFields );\n\n\t\t\t// Set an init variable so that we only call reRender on the display field on change, not on init.\n\t\t\tthis.init = {};\n\t\t},\n \n /**\n * Passthrough function to reset tracking of calculations when the fieldCollection is reset.\n * \n * @since 3.2\n * @param backbone.collection fieldCollection\n * @return void\n */\n resetCalcs: function( fieldCollection ) {\n if( 'undefined' != typeof( fieldCollection.options.formModel ) ) {\n this.registerCalcs( fieldCollection.options.formModel ); \n }\n },\n\n\t\t/**\n\t\t * When our form loads, create a collection out of any calculations.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model formModel\n\t\t * @return void\n\t\t */\n\t\tregisterCalcs: function( formModel ) {\n\t\t\tvar calcCollection = new CalcCollection( formModel.get( 'settings' ).calculations, { formModel: formModel } );\n\t\t\tthis.calcs[ formModel.get( 'id' ) ] = calcCollection;\n\t\t\tvar that = this;\n\n\t\t\t_.each( calcCollection.models, function( calcModel ) {\n\t\t\t\t/*\n\t\t\t\t * We set a property on our init variable for the calc model we're looping over.\n\t\t\t\t * This property is set to true so that when we make changes to the calc model on the next line\n\t\t\t\t * the field view doesn't try to redraw itself.\n\t\t\t\t * If we don't do this, the 'reRender' attribute of the model will be set before the view is initialized,\n\t\t\t\t * which means that setting 'reRender' to true will never re-render the view.\n\t\t\t\t */\n\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = true;\n\t\t\t\t// Setup our calculation models with initial values and register listeners for calc-related fields.\n\t\t\t\tthat.setupCalc( calcModel );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * When a calculation model is instantiated from the registerCalcs function:\n\t\t *\n\t\t * Use a regex to get an array of the field keys\n\t\t * Setup an initial key/values array\n\t\t * Check for any references to other calculations\n\t\t * Set the initial value of our calculation\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @return void\n\t\t */\n\t\tsetupCalc: function( calcModel ) {\n\t\t\t// Setup our that var so we can access 'this' context in our loop.\n\t\t\tvar that = this;\n\t\t\t// Get our equation\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\t// We want to keep our original eq intact, so we use a different var for string replacment.\n\t\t\tvar eqValues = eq;\n // Store the name for debugging later.\n var calcName = calcModel.get( 'name' );\n\n\t\t\t/* TODO:\n\t\t\t * It might be possible to refactor these two if statements.\n\t\t\t * The difficulty is that each has a different method of retreiving the specific data model.\n\t\t\t */\n\t\t\t// Check to see if we have any field merge tags in our equation.\n\t\t\tvar fields = eq.match( new RegExp( /{field:(.*?)}/g ) );\n\t\t\tif ( fields ) {\n\t\t\t\t/*\n\t\t\t\t * fields is now an array of field keys that looks like:\n\t\t\t\t * ['{field:key'], ['{field:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our field keys to setup our field key array and hook up our field change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tfields = fields.map( function( field ) {\n\t\t\t\t\t// field will be {field:key}\n\t\t\t\t\tvar key = field.replace( ':calc}', '' ).replace( '}', '' ).replace( '{field:', '' );\n\n\t\t\t\t\t// Get our field model\n\t\t\t\t\tfieldModel = nfRadio.channel( 'form-' + calcModel.get( 'formID' ) ).request( 'get:fieldByKey', key );\n\n if( 'undefined' == typeof fieldModel ) return;\n\n fieldModel.set( 'clean', false );\n\n\t\t\t\t\t// Register a listener in our field model for value changes.\n\t\t\t\t\tfieldModel.on( 'change:value', calcModel.changeField, calcModel );\n\t\t\t\t\t// Get our calc value from our field model.\n\t\t\t\t\tvar calcValue = that.getCalcValue( fieldModel );\n\t\t\t\t\t// Add this field to our internal key/value object.\n\t\t\t\t\tthat.updateCalcFields( calcModel, key, calcValue );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'field', key, calcValue, eqValues );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check to see if we have any calc merge tags in our equation.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t/*\n\t\t\t\t * calcs is now an array of calc keys that looks like:\n\t\t\t\t * ['{calc:key'], ['{calc:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our calc keys to setup our calc key array and hook up our calc change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tcalcs = calcs.map( function( calc ) {\n\t\t\t\t\t// calc will be {calc:name}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\t// Get our calc model\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n\n\t\t\t\t\tif( 'undefined' == typeof targetCalcModel ) return;\n\n\t\t\t\t\t// Listen for changes on our calcluation, since we need to update our calc when it changes.\n\t\t\t\t\ttargetCalcModel.on( 'change:value', calcModel.changeCalc, calcModel );\n\t\t\t\t\t// // Get our calc value from our calc model.\n\t\t\t\t\tvar calcValue = targetCalcModel.get( 'value' );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'calc', name, calcValue, eqValues );\n\t\t\t\t} );\n\n\t\t\t}\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, 0 );\n // Scrub line breaks.\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n\t\t\t// Evaluate the equation and update the value of this model.\n\t\t\ttry {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Setup)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n\t\t\t} catch( e ) {\n //console.log( calcName );\n\t\t\t\tconsole.log( e );\n\t\t\t}\n \n // If for whatever reason, we got NaN, reset that to 0.\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\n\t\t},\n\n\t\t/**\n\t\t * Update an item in our key/value pair that represents our fields and calc values.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @param string \t\t\tkey\n\t\t * @param string \t\t\tcalcValue\n\t\t * @return void\n\t\t */\n\t\tupdateCalcFields: function( calcModel, key, calcValue ) {\n\t\t\tvar fields = calcModel.get( 'fields' );\n\t\t\tfields[ key ] = calcValue;\n\t\t\tcalcModel.set( 'fields', fields );\n\t\t},\n\n\t\t/**\n\t\t * Get a calc value from a field model.\n\t\t *\n\t\t * Sends a request to see if there's a special calc value\n\t\t * Uses the value of the field if there is not.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model fieldModel\n\t\t * @return value\n\t\t */\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * Send out a request on the field type and parent type channel asking if they need to modify the calc value.\n\t\t\t * This is helpful for fields like lists that can have a different calc_value than selected value.\n\t\t\t */\n\t\t\tvar value = nfRadio.channel( fieldModel.get( 'type' ) ).request( 'get:calcValue', fieldModel );\n\t\t\t\n\t\t\t// Preset with our field value.\n\t\t\tvar calcValue = fieldModel.get( 'value' );\n\t\t\tif( 'undefined' !== typeof value ) {\n\t\t\t\tif( value || 0 === value ) {\n\t\t\t\t\t// If we got a valid number, use that instead.\n\t\t\t\t\tcalcValue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\tvar machineNumber = localeConverter.numberDecoder(calcValue);\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(calcValue);\n\n\t\t\tif ( 'undefined' !== typeof machineNumber && jQuery.isNumeric( machineNumber ) ) {\n\t\t\t\tvalue = formattedNumber;\n\t\t\t} else {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\t// }\n\n\t\t\tif ( ! fieldModel.get( 'visible' ) ) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * Replace instances of key with calcValue. This is used to replace one key at a time.\n\t\t *\n\t\t * If no eq is passed, use calcModel eq.\n\t\t *\n\t\t * Returns a string with instances of key replaced with calcValue.\n\t\t * \n\t\t * @since version\n\t\t * @param string \tkey \n\t\t * @param string \tcalcValue \n\t\t * @param string \teq \n\t\t * @return string \teq \n\t\t */\n\t\treplaceKey: function( type, key, calcValue, eq ) {\n\t\t\teq = eq || calcModel.get( 'eq' );\n\n\t\t\ttag = '{' + type + ':' + key + '}';\n\t\t\tvar reTag = new RegExp( tag, 'g' );\n\n\t\t\tcalcTag = '{' + type + ':' + key + ':calc}';\n\t\t\tvar reCalcTag = new RegExp( calcTag, 'g' );\n\n\t\t\teq = eq.replace( reTag, calcValue );\n\t\t\teq = eq.replace( reCalcTag, calcValue );\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Takes a calcModel and returns a string eq with all keys replaced by their appropriate calcValues.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @return string\t\t\teq\n\t\t */\n\t\treplaceAllKeys: function( calcModel ) {\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\tvar that = this;\n\t\t\t_.each( calcModel.get( 'fields' ), function( value, key ) {\n\t\t\t\teq = that.replaceKey( 'field', key, value, eq );\n\t\t\t} );\n\n\t\t\t// If we have any calc merge tags, replace those as well.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calc ) {\n\t\t\t\t\t// calc will be {calc:key}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n if( 'undefined' == typeof targetCalcModel ) return;\n\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\teq = eq.replace( re, targetCalcModel.get( 'value' ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Function that's called when a field within the calculation changes.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @param backbone.model fieldModel\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( calcModel, fieldModel ) {\n\t\t\n\t\t\tvar key = fieldModel.get( 'key' );\n\t\t\tvar value = this.getCalcValue( fieldModel );\n\t\t\t\n\t\t\tthis.updateCalcFields( calcModel, key, value );\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, '0' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Field)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n if(this.debug())console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\t\t\n\t\t},\n\n\t\tinitDisplayField: function( fieldModel ) {\n\n\t\t\tif( ! fieldModel.get( 'default' ) || 'string' != typeof fieldModel.get( 'default' ) ) return;\n\n\t\t\tvar calcs = fieldModel.get( 'default' ).match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calcName ) {\n\t\t\t\t\tcalcName = calcName.replace( '{calc:', '' ).replace( '}', '' ).replace( ':2', '' );\n\t\t\t\t\tthis.displayFields[ calcName ] = this.displayFields[ calcName ] || [];\n\t\t\t\t\tthis.displayFields[ calcName ].push( fieldModel );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\tupdateDisplayFields: function( calcModel ) {\n\t\t\tvar that = this;\n\t\t\tif ( 'undefined' != typeof this.displayFields[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t_.each( this.displayFields[ calcModel.get( 'name' ) ], function( fieldModel ) {\n\n\t\t\t\t\tvar value = '';\n\n\t\t\t\t\t/**\n\t\t\t\t\t * if we have a html field, we want to use the actual\n\t\t\t\t\t * value and re-evaluate\n\t\t\t\t **/\n\t\t\t\t\tif( \"html\" === fieldModel.get( 'type' ) ) {\n\t\t\t\t\t\tvalue = fieldModel.get( 'value' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if not a html field, use default to re-evaluate\n\t\t\t\t\t\tvalue = fieldModel.get( 'default' );\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t This is a fix for the issue of the merge tags being\n\t\t\t\t\t display'd\n\t\t\t\t\t */\n\n\t\t\t\t\t// Find spans with calc data-key values\n\t\t\t\t\tvar spans = value.match( new RegExp( /<span data-key=\"calc:(.*?)<\\/span>/g ));\n\t\t\t\t\t_.each( spans, function( spanVar ) {\n\t\t\t\t\t\t// transform the span back into a merge tag\n\t\t\t\t\t\tvar tmpCalcTag = \"{\" + spanVar.replace(\"<span\" +\n\t\t\t\t\t\t\t\" data-key=\\\"\", \"\" ).replace( /\">(.*?)<\\/span>/, \"\" ) + \"}\";\n\n\t\t\t\t\t\tvalue = value.replace( spanVar, tmpCalcTag );\n\t\t\t\t\t} );\n\t\t\t\t\tvar calcs = value.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\t\t\t_.each( calcs, function( calc ) {\n//\t\t\t\t\t\tvar rounding = false;\n\t\t\t\t\t\t// calc will be {calc:key} or {calc:key:2}\n\t\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' ).replace( ':2', '' );\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * TODO: Bandaid for rounding calculations to two decimal places when displaying the merge tag.\n\t\t\t\t\t\t * Checks to see if we have a :2. If we do, remove it and set our rounding variable to true.\n\t\t\t\t\t\t */\n//\t\t\t\t\t\tif ( -1 != name.indexOf( ':2' ) ) {\n//\t\t\t\t\t\t\trounding = true;\n//\t\t\t\t\t\t\tname = name.replace( ':2', '' );\n//\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar calcModel = that.calcs[ fieldModel.get( 'formID' ) ].findWhere( { name: name } );\n\t\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\t\tvar calcValue = calcModel.get( 'value' ) ;\n//\t\t\t\t\t\tif ( rounding ) {\n//\t\t\t\t\t\t\tcalcValue = calcValue.toFixed( 2 );\n//\t\t\t\t\t\t\trounding = false;\n//\t\t\t\t\t\t}\n\t\t\t\t\t\t\n if( 'undefined' != typeof( calcValue ) ) {\n calcValue = that.applyLocaleFormatting( calcValue, calcModel );\n\t\t\t\t\t\t}\n /*\n * We replace the merge tag with the value\n\t\t\t\t\t\t * surrounded by a span so that we can still find it\n\t\t\t\t\t\t * and not affect itself or other field merge tags\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Unless this isn't a html field, then we just set\n\t\t\t\t\t\t * value to calcValue\n\t\t\t\t\t\t*/\n if( \"html\" === fieldModel.get( 'type' ) ) {\n\t value = value.replace(re, \"<span data-key=\\\"calc:\" + name + \"\\\">\"\n\t\t + calcValue + \"</span>\");\n } else {\n \tvalue = calcValue;\n }\n\t\t\t\t\t} );\n\t\t\t\t\t\n\t\t\t\t\tfieldModel.set( 'value', value );\n\t\t\t\t\tif ( ! that.init[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t\t\t// fieldModel.set( 'reRender', true );\n\t\t\t\t\t\tfieldModel.trigger( 'reRender' );\n\t\t\t\t\t}\n\t\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = false;\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\tgetCalc: function( name, formID ) {\n\t\t\treturn this.calcs[ formID ].findWhere( { name: name } );\n\t\t},\n\n\t\tchangeCalc: function( calcModel, targetCalcModel ) {\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\t\t\t\n\t\t\teqValues = eqValues.replace( '[', '' ).replace( ']', '' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Calc)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation( eqValues ) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\t\t},\n \n /**\n * Function to apply Locale Formatting to Calculations\n * @since Version 3.1\n * @param Str number\n * \n * @return Str\n */\n applyLocaleFormatting: function( number, calcModel ) {\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(number, calcModel.get('dec'));\n \n // // Split our string on the decimal to preserve context.\n // var splitNumber = number.split('.');\n // // If we have more than one element (if we had a decimal point)...\n // if ( splitNumber.length > 1 ) {\n // // Update the thousands and remerge the array.\n // splitNumber[ 0 ] = splitNumber[ 0 ].replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // var formattedNumber = splitNumber.join( nfi18n.decimal_point );\n // }\n // // Otherwise (we had no decimal point)...\n // else {\n // // Update the thousands.\n // var formattedNumber = number.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // }\n return formattedNumber;\n\t\t},\n\t\t\n\t\tlocaleDecodeEquation: function( eq ) {\n\t\t\tvar result = '';\n\t\t\tvar expression = '';\n\t\t\tvar pattern = /[0-9.,]/;\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\t// This pattern accounts for all whitespace characters (including thin space).\n\t\t\teq = eq.replace( /\\s/g, '' );\n\t\t\teq = eq.replace( / /g, '' );\n\t\t\tvar characters = eq.split('');\n\t\t\t// foreach ( characters as character ) {\n\t\t\tcharacters.forEach( function( character ) {\n\t\t\t\t// If the character is numeric or '.' or ','\n\t\t\t\tif (pattern.test(character)) {\n\t\t\t\t\texpression = expression + character;\n\t\t\t\t} else {\n\t\t\t\t\t// If we reach an operator char, append the expression to the result\n\t\t\t\t\tif ( 0 < expression.length ) {\n\t\t\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t\t\t\texpression = '';\n\t\t\t\t\t}\n\t\t\t\t\tresult = result + character;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// The following catches the case of the last character being a digit.\n\t\t\tif ( 0 < expression.length ) {\n\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\tdebug: function(message) {\n\t\t\tif ( window.nfCalculationsDebug || false ) console.log(message);\n\t\t}\n\t\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/dateBackwardsCompat',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'pikaday-bc' ), 'init', this.dateBackwardsCompat );\t\n },\n\n dateBackwardsCompat: function( dateObject, fieldModel ) {\n \n /**\n * Start backwards compatibility for old pikaday customisation\n */\n // Legacy properties\n dateObject.pikaday = {};\n dateObject.pikaday._o = {};\n\n //Old hook for Pikaday Custom code\n nfRadio.channel( 'pikaday' ).trigger( 'init', dateObject, fieldModel );\n\n // If we've set a disableDayFn property in custom code, hook it up to Flatpickr\n if ( typeof dateObject.pikaday._o.disableDayFn !== 'undefined') {\n dateObject.set( 'disable', [ dateObject.pikaday._o.disableDayFn ] );\n }\n\n //Compatibility for i18n pikaday function\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined' || typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n\n let locale = dateObject.config.locale;\n\n if ( typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n locale.firstDayOfWeek = dateObject.pikaday._o.firstDay;\n }\n\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined') {\n if ( typeof dateObject.pikaday._o.i18n.weekdays !== 'undefined') {\n locale.weekdays.longhand = dateObject.pikaday._o.i18n.weekdays;\n }\n\n if ( typeof dateObject.pikaday._o.i18n.weekdaysShort !== 'undefined') {\n locale.weekdays.shorthand = dateObject.pikaday._o.i18n.weekdaysShort;\n }\n \n if ( typeof dateObject.pikaday._o.i18n.months !== 'undefined') {\n jQuery( '.flatpickr-monthDropdown-months > option' ).each( function() {\n this.text = dateObject.pikaday._o.i18n.months[ this.value ];\n } );\n }\n }\n\n dateObject.set( 'locale', locale );\n \n }\n\n if ( Object.keys(dateObject.pikaday._o).length > 0 ) {\n console.log(\"%cDeprecated Ninja Forms Pikaday custom code detected.\", \"color: Red; font-size: large\");\n console.log(\"You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details.\");\n }\n\n }\n\n });\n\n return controller;\n});\n","define('controllers/fieldDate',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'date' ), 'init:model', this.initModel );\n this.listenTo( nfRadio.channel( 'date' ), 'render:view', this.initDatepicker );\n },\n\n initModel: function(model) {\n this.registerFunctions(model);\n },\n\n registerFunctions: function( model ) {\n model.set( 'renderHourOptions', this.renderHourOptions );\n model.set( 'renderMinuteOptions', this.renderMinuteOptions );\n model.set( 'maybeRenderAMPM', this.maybeRenderAMPM );\n model.set( 'customClasses', this.customClasses );\n // Overwrite the default getValue() method.\n model.getValue = this.getValue;\n },\n\n renderHourOptions: function() {\n return this.hours_options;\n },\n\n renderMinuteOptions: function() {\n return this.minutes_options;\n },\n\n maybeRenderAMPM: function() {\n if ( 'undefined' == typeof this.hours_24 || 1 == this.hours_24 ) {\n return;\n }\n var requiredAttr = (this.required == 1) ? 'aria-required=\"true\" required' : '';\n return `<div style=\"float:left;\" class=\"time-wrap\"><select id=\"ampm-select\" class=\"ampm extra\" aria-label=\"am-pm-select\" ${requiredAttr}><option value=\"am\">AM</option><option value=\"pm\">PM</option></select></div>`;\n },\n\n initDatepicker: function ( view ) {\n view.model.set( 'el', view.el );\n var el = jQuery( view.el ).find( '.nf-element' )[0];\n view.listenTo( nfRadio.channel( 'form-' + view.model.get( 'formID' ) ), 'before:submit', this.beforeSubmit, view );\n\n // If we are using a time_only date_mode, then hide the date input.\n if ( 'undefined' != typeof view.model.get( 'date_mode' ) && 'time_only' == view.model.get( 'date_mode' ) ) {\n jQuery( el ).hide();\n return false;\n }\n\n // Make sure date format is correctly converted.\n var dateFormat = this.convertDateFormat( view.model.get( 'date_format' ) );\n // Make sure this is a deep conversion of the original model.\n view.model.set('date_format', dateFormat);\n\n var dateSettings = {\n onReady: ( selectedDates, datestr, dateObject ) => {\n dateObject.altInput.setAttribute( 'aria-labelledby', jQuery( el ).attr( \"aria-labelledby\" ) );\n dateObject.altInput.setAttribute( 'aria-invalid', false );\n },\n dateFormat: dateFormat,\n altFormat: dateFormat,\n altInput: true,\n ariaDateFormat: dateFormat,\n mode: \"single\",\n allowInput: true,\n disableMobile: \"true\",\n minDate: this.getMinDate(view.model),\n maxDate: this.getMaxDate(view.model),\n };\n \n const nfCustomLocale = this.checkCustomLocale();\n if(nfCustomLocale){\n dateSettings.locale = nfCustomLocale;\n }\n\n // Filter our datepicker settings object.\n let filteredDatePickerSettings = nfRadio.channel( 'flatpickr' ).request( 'filter:settings', dateSettings, view );\n if ( 'undefined' != typeof filteredDatePickerSettings ) {\n dateSettings = filteredDatePickerSettings;\n }\n\n var dateObject = flatpickr( el, dateSettings );\n // Set default value only when value is missing\n if ( 1 == view.model.get( 'date_default' ) && ! view.model.get( 'value' ) ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate);\n view.model.set( 'value', dateObject.defaultDate );\n }\n // Set default value in RFF context, only if value equals today's date\n if( 1 == view.model.get( 'date_default' ) && \n typeof view.model.get('id') === \"string\" && \n view.model.get('id').includes('.') && \n typeof view.model.get( 'value' ) === \"object\" && \n this.isSameDay( view.model.get( 'value' ), new Date() )\n ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate, true);\n view.model.set( 'value', dateObject.defaultDate );\n }\n\n //Trigger Pikaday backwards compatibility\n nfRadio.channel( 'pikaday-bc' ).trigger( 'init', dateObject, view.model, view );\n\n nfRadio.channel( 'flatpickr' ).trigger( 'init', dateObject, view.model, view );\n },\n\n beforeSubmit: function( formModel ) { \n //Get value from input if the default date wasn't edited in the field and the value is still a global unformatted date object\n if( _.isObject( this.model.get( 'value' ) ) ){\n // We detect the flatpickr input inside the element by its type instead of ID as the dot in the repeater children ID is not compatible with query selector\n const date_value = this.el.querySelector(\"input[type='hidden']\").value;\n this.model.set( 'value', date_value );\n }\n //Detect repeater and set data at the repeater level\n const inputID = this.el.dataset.fieldId;\n if(inputID.search(\".\") !== -1){\n nfRadio.channel('field-repeater').trigger('set:value');\n // Don't convert string value into object for time_only type in repeatable fieldset field\n if(this.model.get( 'date_mode' ) === \"time_only\"){\n return;\n }\n }\n\n if ( 'date_only' == this.model.get( 'date_mode' ) ) {\n return false;\n }\n let hour = jQuery( this.el ).find( '.hour' ).val();\n let minute = jQuery( this.el ).find( '.minute' ).val();\n let ampm = jQuery( this.el ).find( '.ampm' ).val();\n let current_value = this.model.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let date_value = {\n date: date,\n hour: hour,\n minute: minute,\n ampm: ampm,\n };\n\n this.model.set( 'value', date_value );\n },\n\n getMinDate: function( fieldModel ) {\n let minDate = null;\n if(typeof fieldModel.get( 'year_range_start' ) !== \"undefined\"){\n const yearRangeStart = fieldModel.get( 'year_range_start' );\n if( yearRangeStart ) {\n minDate = flatpickr.formatDate(new Date(String( yearRangeStart )), fieldModel.get('date_format'));\n }\n } \n return minDate;\n },\n\n getMaxDate: function( fieldModel ) {\n let maxDate = null;\n if(typeof fieldModel.get( 'year_range_end' ) !== \"undefined\"){\n const yearRangeEnd = fieldModel.get( 'year_range_end' );\n if( yearRangeEnd ) {\n maxDate = flatpickr.formatDate(new Date(String( yearRangeEnd )), fieldModel.get('date_format'));\n }\n }\n return maxDate;\n },\n\n convertDateFormat: function( dateFormat ) {\n //If dateFormat is empty or null, try to get a value from the Field's model\n if(!dateFormat && this.model){\n dateFormat = this.model.get('date_format');\n } \n //If it is still empty or null set it to be \"default\"\n if (!dateFormat){\n dateFormat = \"default\";\n }\n //Convert PHP format in setting to flatPickr expected setting if needed\n const lookup = {\n 'MM/DD/YYYY': 'm/d/Y',\n 'MM-DD-YYYY': 'm-d-Y',\n 'MM.DD.YYYY': 'm.d.Y',\n 'DD/MM/YYYY': 'd/m/Y',\n 'DD-MM-YYYY': 'd-m-Y',\n 'DD.MM.YYYY': 'd.m.Y',\n 'YYYY-MM-DD': 'Y-m-d',\n 'YYYY/MM/DD': 'Y/m/d',\n 'YYYY.MM.DD': 'Y.m.d',\n 'dddd, MMMM D YYYY': 'l, F d Y',\n 'default': nfi18n.dateFormat ? nfi18n.dateFormat : 'default'\n };\n return Object.keys(lookup).includes(dateFormat) ? lookup[dateFormat] : dateFormat;\n },\n\n customClasses: function( classes ) {\n if ( 'date_and_time' == this.date_mode ) {\n classes += ' date-and-time';\n }\n return classes;\n },\n //retrieve localized values and assign them to flatpickr locale format\n checkCustomLocale: function() {\n let customLocale = {};\n if(nfi18n){\n if(nfi18n.months || nfi18n.monthsShort){\n customLocale.months = {};\n if(nfi18n.months){\n customLocale.months.longhand = nfi18n.months;\n }\n if(nfi18n.monthsShort){\n customLocale.months.shorthand = nfi18n.monthsShort;\n }\n }\n if(nfi18n.weekdays || nfi18n.weekdaysShort){\n customLocale.weekdays = {};\n if(nfi18n.weekdays){\n customLocale.weekdays.longhand = nfi18n.weekdays;\n }\n if(nfi18n.weekdaysShort){\n customLocale.weekdays.shorthand = nfi18n.weekdaysShort;\n }\n }\n if(nfi18n.startOfWeek){\n customLocale.firstDayOfWeek = nfi18n.startOfWeek;\n }\n }\n return _.isEmpty(customLocale) ? false : customLocale;\n },\n\n // This function is called whenever we want to know the value of the date field.\n // Since it could be a date/time field, we can't return just the value.\n getValue: function() {\n\n if ( 'date_only' == this.get( 'date_mode' ) ) {\n return this.get( 'value' );\n }\n let el = this.get( 'el' );\n let hour = jQuery( el ).find( '.hour' ).val();\n let minute = jQuery( el ).find( '.minute' ).val();\n let ampm = jQuery( el ).find( '.ampm' ).val();\n let current_value = this.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let value = '';\n\n if ( 'undefined' != typeof date ) {\n value += date;\n }\n\n if ( 'undefined' != typeof hour && 'undefined' != typeof minute ) {\n value += ' ' + hour + ':' + minute;\n }\n\n if ( 'undefined' != typeof ampm ) {\n value += ' ' + ampm;\n }\n\n return value;\n\n // let date_value = {\n // date: date,\n // hour: hour,\n // minute: minute,\n // ampm: ampm,\n // };\n\n // this.model.set( 'value', date_value );\n },\n\n isSameDay: function(date1, date2) {\n const d1 = new Date(date1);\n const d2 = new Date(date2);\n d1.setHours(0, 0, 0, 0);\n d2.setHours(0, 0, 0, 0);\n return d1.getTime() === d2.getTime();\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldRecaptcha',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha' ), 'init:model', this.initRecaptcha );\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.resetRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\n \t\tnfRadio.channel( 'recaptcha' ).reply( 'update:response', this.updateResponse, this, model.id );\n },\n\n updateResponse: function( response, fieldID ) {\n \tvar model = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\tmodel.set( 'value', response );\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n },\n\n resetRecaptcha: function() {\n\t\t\tvar recaptchaID = 0;\n\t\t\tjQuery( '.g-recaptcha' ).each( function() {\n\t\t\t\ttry {\n\t\t\t\t\tgrecaptcha.reset( recaptchaID );\n\t\t\t\t} catch( e ){\n\t\t\t\t\tconsole.log( 'Notice: Error trying to reset grecaptcha.' );\n\t\t\t\t}\n\t\t\t\trecaptchaID++;\n\t\t\t} );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRecaptchaV3',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha_v3' ), 'init:model', this.initRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\t\t\t\n\t const formID = model.get( 'formID' );\n\t\t\t//Run recaptcha on init to allow cookie validation process\n\t\t\tthis.processRecaptcha(formID, model);\n\t\t\t//Rerun process every 110 seconds ( prevent Google recaptcha timeout out at 12O seconds )\n\t\t\tsetInterval(this.processRecaptcha, 110000, formID, model );\n },\n\n\t\tprocessRecaptcha: function(formID, model) {\n\t\t\ttry{\n\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'disable:submit', model );\n\t\t\t\tgrecaptcha.ready( function() {\n\t\t\t\t\tgrecaptcha.execute( model.get( 'site_key' ), {\n\t\t\t\t\t\taction: 'register'\n\t\t\t\t\t} ).then( function( token ) {\n\t\t\t\t\t\tmodel.set( 'value', token );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'enable:submit', model );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t} catch (e) {\n\t\t\t\t//Wait for the form to fully load and display error\n\t\t\t\tjQuery(document).on( 'nfFormReady', (layoutView) => {\n\t\t\t\t\t//Get consent details as recaptcha failed to load\n\t\t\t\t\tlet consent = nf_check_recaptcha_consent();\n\t\t\t\t\n\t\t\t\t\t//Get submit button\n\t\t\t\t\tlet submitFieldID;\n\t\t\t\t\tmodel.collection.models.forEach( (fieldModel) => {\n\t\t\t\t\t\tif(fieldModel.get(\"type\") === \"submit\"){\n\t\t\t\t\t\t\tsubmitFieldID = fieldModel.get(\"id\");\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\t//Display generic error\n\t\t\t\t\tnfRadio.channel( 'fields' ).request(\"add:error\", submitFieldID, \"recaptcha-v3-missing\", model.collection.options.formModel.get(\"settings\").recaptchaConsentMissing );\n\t\t\t\t\t//Create error message and add possible interaction with cookie consent depending on consent result\n\t\t\t\t\t//Display filterable error to add consent\n\t\t\t\t\tthis.nf_build_default_consent_action(model, consent.services, submitFieldID, layoutView );\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tnf_build_default_consent_action: function ( model, services, submitFieldID, layoutView ) {\n\t\t\t//Return if no consent management is detected\n\t\t\tconst returnIf = services.length <= 1 && services.includes(\"missing_cookie\") || services.length <= 0;\n\t\t\tif( !returnIf ){ \n\t\t\t\tlet actionElement = document.createElement(\"div\");\n\t\t\t\tactionElement.setAttribute(\"id\", \"nf_recaptcha_consent_event\");\n\t\t\t\tactionElement.innerText += model.collection.options.formModel.get(\"settings\").recaptchaConsentEvent;\n\n\t\t\t\tconst detailData = {\n\t\t\t\t\t\"services\": services,\n\t\t\t\t\t\"element\": actionElement,\n\t\t\t\t\t\"submitFieldID\": submitFieldID, \n\t\t\t\t\t\"layoutView\": layoutView\n\t\t\t\t}\n\t\t\t\t//Allow filtering of the element before printing it\n\t\t\t\tlet nf_consent_link_event = new CustomEvent('nf_consent_link', {detail: detailData});\n\t\t\t\tdocument.dispatchEvent(nf_consent_link_event);\n\n\t\t\t\t//Append action to error element\n\t\t\t\tconst genericErrorElements = document.getElementsByClassName(\"nf-error-recaptcha-v3-missing\");\n\t\t\t\tconst genericErrorElementsList = Array.prototype.slice.call(genericErrorElements);\n\t\t\t\tgenericErrorElementsList.forEach( (error) => {\n\t\t\t\t\terror.append( actionElement );\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n });\n\n return controller;\n} );\n","define('controllers/fieldHTML',[], function() {\n var controller = Marionette.Object.extend({\n\n htmlFields: [],\n trackedMergeTags: [],\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'fields-html' ), 'init:model', this.setupFieldMergeTagTracking );\n },\n\n setupFieldMergeTagTracking: function( fieldModel ) {\n this.htmlFields.push( fieldModel );\n\n var formID = fieldModel.get( 'formID' );\n\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'init:model', function( formModel ){\n\n var mergeTags = fieldModel.get( 'default' ).match( new RegExp( /{field:(.*?)}/g ) );\n if ( ! mergeTags ) return;\n\n _.each( mergeTags, function( mergeTag ) {\n var fieldKey = mergeTag.replace( '{field:', '' ).replace( '}', '' );\n var fieldModel = formModel.get( 'fields' ).findWhere({ key: fieldKey });\n if( 'undefined' == typeof fieldModel ) return;\n\n this.trackedMergeTags.push( fieldModel );\n this.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'change:modelValue', this.updateFieldMergeTags );\n }, this );\n\n // Let's get this party started!\n this.updateFieldMergeTags();\n }, this );\n },\n\n updateFieldMergeTags: function( fieldModel ) {\n _.each( this.htmlFields, function( htmlFieldModel ){\n var value = htmlFieldModel.get( 'value' );\n _.each( this.trackedMergeTags, function( fieldModel ){\n\n /* Search the value for any spans with mergetag data-key\n * values\n */\n var spans = value.match( new RegExp( /<span data-key=\"field:(.*?)<\\/span>/g ) );\n\t _.each( spans, function( spanVar ) {\n\t /* See if the span string contains the current\n * fieldModel's key. If so replace the span with a\n * merge tag for evaluation.\n */\n if( -1 < spanVar.indexOf( \"data-key=\\\"field:\" + fieldModel.get( 'key' ) ) ) {\n\t value = value.replace( spanVar, \"{field:\" + fieldModel.get( 'key' ) + \"}\" );\n }\n\t } );\n\n var mergeTag = '{field:' + fieldModel.get( 'key' ) + '}';\n\n const fieldValue = fieldModel.get( 'type' ) === \"repeater\" ? this.displayRepeaterData(fieldModel) : fieldModel.getValue();\n\n\t /* We replace the merge tag with the value\n\t * surrounded by a span so that we can still find it\n\t * and not affect itself or other field merge tags\n\t */\n value = value.replace( mergeTag, \"<span data-key=\\\"field:\"\n + fieldModel.get( 'key' ) + \"\\\">\"\n + fieldValue + \"</span>\" );\n }, this ) ;\n htmlFieldModel.set( 'value', value );\n htmlFieldModel.trigger( 'reRender' );\n }, this );\n },\n\n displayRepeaterData: function(fieldModel) {\n const repeaterFieldIDs = Object.keys(fieldModel.getValue());\n let returnHTML = \"\", passedFields = [];\n\n _.each(repeaterFieldIDs, function(fieldID){\n if(passedFields.indexOf(fieldID) === -1) {\n const field = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n if(typeof field !== \"undefined\"){\n const excluded = ['submit', 'html', 'hidden', 'password', 'passwordconfirm', 'divider', 'hr', 'note', 'unknown', 'button', 'confirm', 'creditcard', 'creditcardcvc', 'creditcardexpiration', 'creditcardfullname', 'creditcardnumber', 'creditcardzip', 'recaptcha', 'recaptcha_v3' ];\n if(excluded.indexOf(field.get('type')) === -1 && field.getValue().toString().length > 0){\n const index = Number(fieldID.split(\"_\").pop()) + 1;\n returnHTML += \"<p>\"+ field.get(\"label\") + \" \" + index + \" : \" + field.getValue() + \"</p>\";\n passedFields.push(fieldID);\n } \n }\n }\n });\n\n return returnHTML;\n }\n\n });\n\n return controller;\n});\n\n","/**\n* When a form is loaded, enable any help text that appears on the page.\n*/\ndefine('controllers/helpText',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', this.initHelpText );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'fieldset:added', this.initHelpText );\n\n\t\t\tnfRadio.channel( 'form' ).reply( 'init:help', this.initHelpText );\n\t\t},\n\n\t\tinitHelpText: function( view ) {\n\n\t\t\tif(view && !view.el && typeof view.get === 'function'){\n\t\t\t\t//Catch repeater fieldset added event\n\t\t\t\tif(view.get(\"type\") === \"repeater\"){\n\t\t\t\t\tview.el = \"#nf-form-\" + view.get(\"formID\") + \"-cont\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-help' ).each( function(el) {\n\t\t\t\tvar jBox = jQuery( this ).jBox( 'Tooltip', {\n\t\t\t\t\ttheme: 'TooltipBorder',\n\t\t\t\t\tcontent: jQuery( this ).data( 'text' ),\n\t\t\t\t\ttrigger: 'mouseenter focus',\n\t\t\t\t\tcloseOnMouseleave: true,\n\t\t\t\t\tcloseOnClick: true\n\t\t\t\t});\n\t\t\t// Hide tooltip on keydown and mouseleave\n\t\t\tjQuery(this).on('keydown mouseleave', function() {\n\t\t\t\tjBox.close();\n\t\t\t});\n\t\t\t} );\n\t\t}\n\t});\n\n\treturn controller;\n } );\n\n","define('controllers/fieldTextbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n nfRadio.channel( 'textbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n if('currency' == fieldModel.get('mask')){\n var form = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n var currencySymbol = ('undefined' !== typeof form) ? form.get( 'currencySymbol' ) : '';\n var currencySymbolDecoded = jQuery('<textarea />').html(currencySymbol).text();\n return fieldModel.get( 'value' ).replace(currencySymbolDecoded, '');\n }\n\n\t\t\treturn fieldModel.get( 'value' );\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","/**\n * When a form is loaded, enable any rtes in textareas.\n */\ndefine('controllers/fieldTextareaRTE',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'render:view', this.initTextareaRTEs );\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'click:extra', this.clickExtra );\n\n\t\t\t// Instantiates the variable that holds the media library frame.\n\t\t\tthis.meta_image_frame;\n\n\t\t\tthis.currentContext = {};\n\n\t\t\tif( 'undefined' == typeof jQuery.summernote ) return;\n\n\t\t\tjQuery.summernote.options.icons = {\n\t\t 'align': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignCenter': 'dashicons dashicons-editor-aligncenter',\n\t\t 'alignJustify': 'dashicons dashicons-editor-justify',\n\t\t 'alignLeft': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignRight': 'dashicons dashicons-editor-alignright',\n\t\t 'indent': 'dashicons dashicons-editor-indent',\n\t\t 'outdent': 'dashicons dashicons-editor-outdent',\n\t\t // 'arrowsAlt': 'dashicons fa-arrows-alt',\n\t\t 'bold': 'dashicons dashicons-editor-bold',\n\t\t 'caret': 'dashicons dashicons-arrow-down',\n\t\t // 'circle': 'dashicons fa-circle',\n\t\t 'close': 'dashicons dashicons-dismiss',\n\t\t 'code': 'dashicons dashicons-editor-code',\n\t\t 'eraser': 'dashicons dashicons-editor-removeformatting',\n\t\t // 'font': 'dashicons fa-font',\n\t\t // 'frame': 'dashicons fa-frame',\n\t\t 'italic': 'dashicons dashicons-editor-italic',\n\t\t 'link': 'dashicons dashicons-admin-links',\n\t\t 'unlink': 'dashicons dashicons-editor-unlink',\n\t\t 'magic': 'dashicons dashicons-editor-paragraph',\n\t\t // 'menuCheck': 'dashicons fa-check',\n\t\t 'minus': 'dashicons dashicons-minus',\n\t\t 'orderedlist': 'dashicons dashicons-editor-ol',\n\t\t // 'pencil': 'dashicons fa-pencil',\n\t\t // 'picture': 'dashicons fa-picture-o',\n\t\t // 'question': 'dashicons fa-question',\n\t\t 'redo': 'dashicons dashicons-redo',\n\t\t 'square': 'dashicons fa-square',\n\t\t // 'strikethrough': 'dashicons fa-strikethrough',\n\t\t // 'subscript': 'dashicons fa-subscript',\n\t\t // 'superscript': 'dashicons fa-superscript',\n\t\t 'table': 'dashicons dashicons-editor-table',\n\t\t // 'textHeight': 'dashicons fa-text-height',\n\t\t // 'trash': 'dashicons fa-trash',\n\t\t 'underline': 'dashicons dashicons-editor-underline',\n\t\t 'undo': 'dashicons dashicons-undo',\n\t\t 'unorderedlist': 'dashicons dashicons-editor-ul',\n\t\t // 'video': 'dashicons fa-youtube-play'\n\t\t };\n\n\t\t},\n\n\t\tinitTextareaRTEs: function( view ) {\n\t\t\tif ( 1 != view.model.get( 'textarea_rte' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Custom Button for links\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t// var linkButton = this.linkButton();\n\t\t\tvar linkButton = function( context ) {\n\t\t\t\treturn that.linkButton( context );\n\t\t\t}\n\t\t\tvar mediaButton = function( context ) {\n\t\t\t\treturn that.mediaButton( context );\n\t\t\t}\n\n\t\t\tvar toolbar = [\n\t\t\t\t[ 'paragraphStyle', ['style'] ],\n\t\t\t\t[ 'fontStyle', [ 'bold', 'italic', 'underline','clear' ] ],\n\t\t\t\t[ 'lists', [ 'ul', 'ol' ] ],\n\t\t\t [ 'paragraph', [ 'paragraph' ] ],\n\t\t\t [ 'customGroup', [ 'linkButton', 'unlink' ] ],\n\t\t\t [ 'table', [ 'table' ] ],\n\t\t\t [ 'actions', [ 'undo', 'redo' ] ],\n\t\t\t];\n\n\t\t\tif ( 1 == view.model.get( 'textarea_media' ) && 0 != userSettings.uid ) {\n\t\t\t\ttoolbar.push( [ 'tools', [ 'mediaButton' ] ] );\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-element' ).summernote( {\n\t\t\t\ttoolbar: toolbar,\n\t\t\t\tbuttons: {\n\t\t\t\t\tlinkButton: linkButton,\n\t\t\t\t\tmediaButton: mediaButton\n\t\t\t\t},\n\t\t\t\theight: 150, //set editable area's height\n\t\t\t\tcodemirror: { // codemirror options\n\t\t\t\t theme: 'monokai',\n\t\t\t\t lineNumbers: true\n\t\t\t\t},\n\t\t\t\tprettifyHtml: true,\n\t\t\t\tcallbacks: {\n\t\t\t\t\tonChange: function( e ) {\n\t\t\t\t\t\tview.model.set( 'value', jQuery( this ).summernote( 'code' ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar linkMenu = jQuery( view.el ).find( '.link-button' ).next( '.dropdown-menu' ).find( 'button' );\n\t\t\tlinkMenu.replaceWith(function () {\n\t\t\t return jQuery( '<div/>', {\n\t\t\t class: jQuery( linkMenu ).attr( 'class' ),\n\t\t\t html: this.innerHTML\n\t\t\t } );\n\t\t\t} );\n\t\t},\n\n\t\tlinkButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar linkButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-button' );\n\t\t\tvar linkDropdown = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-dropdown' );\n\t\t\treturn ui.buttonGroup([\n\t\t\t\tui.button({\n\t className: 'dropdown-toggle link-button',\n\t contents: linkButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertLink,\n\t click: function( e ) {\n\t \tthat.clickLinkButton( e, context );\n\t },\n\t data: {\n\t toggle: 'dropdown'\n\t }\n\t }),\n\t\t\t\tui.dropdown([\n\t ui.buttonGroup({\n\t children: [\n\t ui.button({\n\t contents: linkDropdown({}),\n\t tooltip: ''\n\t }),\n\t ]\n\t })\n\t ])\n\t\t\t]).render();\n\t\t},\n\n\t\tmediaButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar mediaButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-media-button' );\n\t\t\treturn ui.button({\n\t className: 'dropdown-toggle',\n\t contents: mediaButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertMedia,\n\t click: function( e ) {\n\t \tthat.openMediaManager( e, context );\n\t }\n\t }).render();\n\t\t},\n\n\t\topenMediaManager: function( e, context ) {\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\t// If the frame already exists, re-open it.\n\t\t\tif ( this.meta_image_frame ) {\n\t\t\t\tthis.meta_image_frame.open();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Sets up the media library frame\n\t\t\tthis.meta_image_frame = wp.media.frames.meta_image_frame = wp.media({\n\t\t\t\ttitle: nfi18n.fieldTextareaRTESelectAFile,\n\t\t\t\tbutton: { text: 'insert' }\n\t\t\t});\n\n\t\t\tvar that = this;\n\n\t\t\t// Runs when an image is selected.\n\t\t\tthis.meta_image_frame.on('select', function(){\n\n\t\t\t\t// Grabs the attachment selection and creates a JSON representation of the model.\n\t\t\t\tvar media_attachment = that.meta_image_frame.state().get('selection').first().toJSON();\n\t\t\t\tthat.insertMedia( media_attachment, context );\n\t\t\t});\n\n\t\t\t// Opens the media library frame.\n\t\t\tthis.meta_image_frame.open();\n\t\t},\n\n\t\tclickLinkButton: function ( e, context ) {\n\t\t\tvar range = context.invoke( 'editor.createRange' );\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\tvar text = range.toString()\n\t\t\tthis.currentContext = context;\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('hide.bs.dropdown', function ( e ) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('shown.bs.dropdown', function ( e ) {\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-text' ).val( text );\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-url' ).focus();\n\t\t\t});\n\t\t},\n\n\t\tclickExtra: function( e ) {\n\t\t\tvar textEl = jQuery( e.target ).parent().find( '.link-text' );\n\t\t\tvar urlEl = jQuery( e.target ).parent().find( '.link-url' );\n\t\t\tvar isNewWindowEl = jQuery( e.target ).parent().find( '.link-new-window' );\n\t\t\tthis.currentContext.invoke( 'editor.restoreRange' );\n\t\t\tif ( jQuery( e.target ).hasClass( 'insert-link' ) ) {\n\t\t\t\tvar text = textEl.val();\n\t\t\t\tvar url = urlEl.val();\n\t\t\t\tvar isNewWindow = ( isNewWindowEl.prop( 'checked' ) ) ? true: false;\n\t\t\t\tif ( 0 != text.length && 0 != url.length ) {\n\t\t\t\t\tthis.currentContext.invoke( 'editor.createLink', { text:text, url: url, isNewWindow: isNewWindow } );\n\t\t\t\t}\n\t\t\t}\n\t\t\ttextEl.val( '' );\n\t\t\turlEl.val( '' );\n\t\t\tisNewWindowEl.prop( 'checked', false );\n\t\t\tjQuery( e.target ).closest( 'div.note-btn-group.open' ).removeClass( 'open' );\n\t\t},\n\n\t\tinsertMedia: function( media, context ) {\n\t\t\tcontext.invoke( 'editor.restoreRange' );\n\t\t\tif ( 'image' == media.type ) {\n\t\t\t\tcontext.invoke( 'editor.insertImage', media.url );\n\t\t\t} else {\n\t\t\t\tcontext.invoke( 'editor.createLink', { text: media.filename, url: media.url } );\n\t\t\t}\n\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldStarRating',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'starrating' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'starrating' ), 'render:view', this.initRating );\n },\n\n register: function( model ) {\n\t\t\tmodel.set( 'renderRatings', this.renderRatings );\n\t\t},\n\n initRating: function( view ){\n jQuery( view.el ).find( '.starrating' ).rating();\n\n },\n\n renderRatings: function() {\n \tvar html = document.createElement( 'span' );\n \t// changed from 'default' to 'number_of_stars'\n \tfor (var i = 0; i <= this.number_of_stars - 1; i++) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-starrating-star' );\n var num = i + 1;\n var checked = '';\n\n // Check to see if current 'star' matches the default value\n\t\t if ( this.value == num ) {\n\t\t \tchecked = 'checked';\n\t\t }\n var htmlFragment = template( { id: this.id, classes: this.classes, num: num, checked: checked, required: this.required } );\n html.appendChild(\n document.createRange().createContextualFragment( htmlFragment )\n );\n \t}\n \treturn html.innerHTML;\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldTerms',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n },\n\n register: function( model ) {\n // nfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'click:extra', this.clickExtra );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'keyup:field', this.keyUpExtra );\n },\n \n clickExtra: function( e, model ) {\n var el = jQuery( e.currentTarget );\n var value = el.parent().find( '.extra-value' ).val();\n this.addOption( model, value );\n },\n\n keyUpExtra: function( el, model, keyCode ) {\n if( 13 != keyCode ) return;\n this.addOption( model, el.val() );\n },\n\n addOption: function( model, value ) {\n if( ! value ) return;\n var options = model.get( 'options' );\n var new_option = {\n label: value,\n value: value,\n selected: 0,\n };\n options.push( new_option );\n\n var selected = model.get( 'value' );\n selected.push( value );\n\n // model.set( 'reRender', true );\n model.trigger( 'reRender' );\n }\n \n });\n\n return controller;\n} );\n","/**\n * Before we display our form content, ask if anyone wants to give us a different view.\n * Before we do anything with the data, pass it through any loading filters.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2016 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/formContentFilters',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Init our fieldContent view and load filter arrays.\n\t\t\t */\n\t\t\tthis.viewFilters = [];\n\t\t\tthis.loadFilters = [];\n\n\t\t\t/*\n\t\t\t * Listen for requests to add new formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\n\t\t\t/*\n\t\t\t * -- DEPRECATED RADIO REPLIES --\n\t\t\t * \n\t\t\t * The 'fieldContents' channel has been deprecated as of 3.0 (it was present in the RC) in favour of 'formContent'.\n\t\t\t * Listen for requests to add new fieldContent filters.\n\t\t\t * \n\t\t\t * TODO: These radio listeners on the 'fieldContents' channels are here for backwards compatibility and should be removed eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our fieldContent filters.\n\t\t\t * TODO: Remove eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\t\t\n\t\t\t/*\n\t\t\t * -- END DEPRECATED --\n\t\t\t */\n\t\t},\n\n\t\taddViewFilter: function( callback, priority ) {\n\t\t\tthis.viewFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetViewFilters: function() {\n\t\t\treturn this.viewFilters;\n\t\t},\n\n\t\taddLoadFilter: function( callback, priority ) {\n\t\t\tthis.loadFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetLoadFilters: function() {\n\t\t\treturn this.loadFilters;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define( 'views/fieldItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'div',\n\n\t\tinitialize: function() {\n \t\tthis.listenTo( this.model, 'reRender', this.render, this );\n \t\tthis.listenTo( this.model, 'change:addWrapperClass', this.addWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:removeWrapperClass', this.removeWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:invalid', this.toggleAriaInvalid, this );\n\n \t\tthis.template = '#tmpl-nf-field-' + this.model.get( 'wrap_template' );\n\t\t},\n\n\t\ttest: function( model ) {\n\t\t\tconsole.log( 'firing from trigger 1' );\n\t\t},\n\n\t\taddWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'addWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).addClass( cl );\n\t\t\t\tthis.model.set( 'addWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\tremoveWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'removeWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).removeClass( cl );\n\t\t\t\tthis.model.set( 'removeWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\ttoggleAriaInvalid: function() {\n\t\t\tvar invalid = this.model.get( 'invalid' );\n\t\t\tjQuery( '[aria-invalid]', this.el ).attr( 'aria-invalid', JSON.stringify( invalid ) );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\n\t \t\t/*\n \t\t * If we have an input mask, init that mask.\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'mask' ) && '' != String(this.model.get( 'mask' )).trim() ) {\n \t\t\tif ( 'custom' == this.model.get( 'mask') ) {\n \t\t\t\tvar mask = this.model.get( 'custom_mask' );\n \t\t\t} else {\n \t\t\t\tvar mask = this.model.get( 'mask' );\n \t\t\t}\n\n\t\t\t\t/* POLYFILL */ Number.isInteger = Number.isInteger || function(value) { return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value; };\n \t\t\tif ( Number.isInteger( mask ) ) {\n \t\t\t\tmask = mask.toString();\n \t\t\t}\n\n\t\t\t\tif ( 'currency' == mask ) {\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'formID' ) );\n\n\t\t\t\t\tvar thousands_sep = form.get( 'thousands_sep' );\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: if we have a , replace it with a string with a space\n\t\t\t\t\t */\n\t\t\t\t\tif ( ' ' == thousands_sep || 160==thousands_sep.charCodeAt(0) ) {\n\t\t\t\t\t\tthousands_sep = ' ';\n\t\t\t\t\t}\n\t\t\t\t\tvar currencySymbol = jQuery( '<div/>' ).html( form.get( 'currencySymbol' ) ).text();\n\t\t\t\t\tthousands_sep = jQuery( '<div/>' ).html( thousands_sep ).text();\n\t\t\t\t\tvar decimal_point = jQuery( '<div/>' ).html( form.get( 'decimal_point' ) ).text();\n\t\t\t\t\t\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: Currently, these options use the plugin-wide defaults for locale.\n\t\t\t\t\t * When per-form locales are implemented, these will need to be revisited.\n\t\t\t\t\t */\n\t\t\t\t\tvar autoNumericOptions = {\n\t\t\t\t\t digitGroupSeparator : thousands_sep,\n\t\t\t\t\t decimalCharacter : decimal_point,\n\t\t\t\t\t currencySymbol : currencySymbol,\n\t\t\t\t\t\tmodifyValueOnWheel : false\n\t\t\t\t\t};\n\n\t\t\t\t\t// Initialization\n\t\t\t\t\tvar autoN_el = jQuery(jQuery( this.el ).find( '.nf-element' )[ 0 ]);\n\t\t\t\t\tnew AutoNumeric( jQuery( this.el ).find( '.nf-element' )[ 0 ], autoNumericOptions );\n\t\t\t\t\t// update the value for the model so it gets saved to\n\t\t\t\t\t// the database properly\n\t\t\t\t\tvar context = this;\n\t\t\t\t\tautoN_el.on( 'change', function( e ) {\n\t\t\t\t\t\tcontext.model.set( 'value', e.target.value );\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tjQuery( this.el ).find( '.nf-element' ).mask( mask );\n\t\t\t\t} \t\t\t\n\t \t\t}\n\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'render:view', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'render:view', this );\n\t\t},\n\n\t\ttemplateHelpers: function () {\n\t\t\tvar that = this;\n\t \treturn {\n\n\t\t\t\trenderElement: function(){\n\t\t\t\t\t// Account for falsey default value of 0.\n\t\t\t\t\tif( this.clean && ! this.value && 0 === this.default ) this.value = '0';\n\t\t\t\t\tvar tmpl = _.find( this.element_templates, function( tmpl ) {\n\t\t\t\t\t\tif ( 0 < jQuery( '#tmpl-nf-field-' + tmpl ).length ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-' + tmpl );\n\t\t\t\t\t\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabel: function() {\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-label' );\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabelClasses: function () {\n\t\t\t\t\tvar classes = '';\n\t\t\t\t\tif ( 'undefined' != typeof this.customLabelClasses ) {\n\t\t\t\t\t\tclasses = this.customLabelClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\trenderPlaceholder: function() {\n\t\t\t\t\tvar placeholder = this.placeholder;\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customPlaceholder ) {\n\t\t\t\t\t\tplaceholder = this.customPlaceholder( placeholder );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( '' != String(placeholder).trim() ) {\n\t\t\t\t\t\treturn 'placeholder=\"' + _.escape( placeholder ) + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderWrapClass: function() {\n\t\t\t\t\tvar wrapClass = 'field-wrap ' + this.type + '-wrap';\n\n\t\t\t\t\t// Check if type and parentType are different. If, so\n\t\t\t\t\t// then add appropriate parentType wrap class\n\t\t\t\t\tif ( this.type !== this.parentType ) {\n\t\t\t\t\t\twrapClass = wrapClass + ' ' + this.parentType + '-wrap';\n\t\t\t\t\t}\n\t\t\t\t\t// If we have an old_classname defined, output wrap class for backward compatibility\n\t\t\t\t\tif ( 'undefined' != typeof this.old_classname && 0 < String(this.old_classname).trim().length ) {\n\t\t\t\t\t\twrapClass += ' ' + this.old_classname + '-wrap';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof customWrapClass ) {\n\t\t\t\t\t\twrapClass = customWrapClass( wrapClass );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn wrapClass;\n\t\t\t\t},\n\n\t\t\t\trenderClasses: function() {\n\t\t\t\t\tvar classes = this.classes;\n\n\t\t\t\t\tif ( this.error ) {\n\t\t\t\t\t\tclasses += ' nf-error';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclasses = classes.replace( 'nf-error', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof this.element_class && 0 < String(this.element_class).trim().length ) {\n\t\t\t\t\t\tclasses += ' ' + this.element_class;\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a function for adding extra classes, add those.\n\t\t\t\t\t */\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customClasses ) {\n\t\t\t\t\t\tclasses = this.customClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n\n\t\t\t\tmaybeDisabled: function() {\n\t\t\t\t\tif ( 1 == this.disable_input ) {\n\t\t\t\t\t\treturn 'disabled';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n maybeRequired: function() {\n if ( 1 == this.required ) {\n return 'aria-required=\"true\" required';\n } else {\n return '';\n }\n },\n\n\t\t\t\tmaybeDisableAutocomplete: function() {\n\t\t\t\t\tif ( 1 == this.disable_browser_autocomplete ) {\n\t\t\t\t\t\treturn 'autocomplete=\"off\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst autoType = this.translateAutoCompletionType( this.type );\n\t\t\t\t\t\treturn 'autocomplete=\"' + autoType + '\"';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\ttranslateAutoCompletionType: function( type ){\n\t\t\t\t\t//https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n\t\t\t\t\tswitch( type ){\n\t\t\t\t\t\tcase 'address':\n\t\t\t\t\t\t\treturn 'street-address';\n\t\t\t\t\t\tcase 'address2':\n\t\t\t\t\t\t\treturn 'address-line2';\n\t\t\t\t\t\tcase 'city':\n\t\t\t\t\t\t\treturn 'address-level2';\n\t\t\t\t\t\tcase 'email':\n\t\t\t\t\t\t\treturn 'email';\n\t\t\t\t\t\tcase 'firstname':\n\t\t\t\t\t\t\treturn 'given-name';\n\t\t\t\t\t\tcase 'lastname':\n\t\t\t\t\t\t\treturn 'family-name';\n\t\t\t\t\t\tcase 'zip':\n\t\t\t\t\t\t\treturn 'postal-code';\n\t\t\t\t\t\tcase 'phone':\n\t\t\t\t\t\t\treturn 'tel';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn 'on';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tmaybeInputLimit: function() {\n\t\t\t\t\tif ( 'characters' == this.input_limit_type && '' != String(this.input_limit).trim() ) {\n\t\t\t\t\t\treturn 'maxlength=\"' + this.input_limit + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tgetHelpText: function() {\n\t\t\t\t\t// this.help_text = jQuery( this.help_text ).html();\n\t\t\t\t\t// return ( 'undefined' != typeof this.help_text ) ? this.help_text.replace(/\"/g, \""\") : '';\n\t\t\t\t\treturn ( 'undefined' != typeof this.help_text ) ? this.help_text : '';\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderHelp: function() {\n\n\t\t\t\t\t// use jQuery().text() to make sure help_text has actual\n\t\t\t\t\t// text and not just HTML tags.\n\t\t\t\t\tvar check_text_par = document.createElement( 'p' );\n check_text_par.innerHTML = this.help_text;\n\n var shouldRenderHelpText = false;\n // Check for text or image tags\n\t\t\t\t\tif ( 0 != String(jQuery( check_text_par ).text()).trim().length\n\t\t\t\t\t\t|| 0 < jQuery( check_text_par ).find('img').length ) {\n \tshouldRenderHelpText = true;\n }\n\n\t\t\t\t\tif ( 'undefined' != typeof this.help_text && shouldRenderHelpText ) {\n\n\t\t\t\t\t\t// Strip HTML tags for accessibility\n\t\t\t\t\t\tfunction stripTags( input ) {\n\t\t\t\t\t\t\treturn input.replace(/<\\/?[^>]+(>|$)/g, \"\").trim();\n\t\t\t\t\t\t}\n \n\t\t\t\t\t\tvar icon = document.createElement( 'span' );\n\t\t\t\t\t\ticon.classList.add( 'fa', 'fa-info-circle', 'nf-help' );\n\t\t\t\t\t\ticon.setAttribute( 'data-text', this.getHelpText() );\n\t\t\t\t\t\ticon.setAttribute( 'tabindex', '0' ); // Make it focusable\n\t\t\t\t\t\ticon.setAttribute( 'aria-describedby', 'hidden-help-text-' + this.id ); // Link to the hidden description\n\t\t\t\t\t \n\t\t\t\t\t\t// Create a hidden element for screen readers\n\t\t\t\t\t\tvar hiddenHelpText = document.createElement( 'span' );\n\t\t\t\t\t\thiddenHelpText.textContent = stripTags( this.help_text ); // Output the help text without tags\n\t\t\t\t\t\thiddenHelpText.id = 'hidden-help-text-' + this.id;\n\t\t\t\t\t\thiddenHelpText.classList.add( 'nf-sr-only' ); // Visually hidden but available for screen readers\n\t\t\t\t\t\thiddenHelpText.setAttribute( 'role', 'tooltip' );\n\t\t\t\t\t \n\t\t\t\t\t\ticon.appendChild( hiddenHelpText ); // Append the hidden help text\n \n\t\t\t\t\t\treturn icon.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tfieldDescription.setAttribute('id', 'nf-description-' + this.id);\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n renderNumberDefault: function() {\n // If the field is clean...\n if ( this.clean ) {\n // If we have a default...\n if ( 0 === this.default || this.default ) {\n return this.default;\n } // If we do not have a placeholder...\n else if ( ! this.placeholder ) {\n return this.value;\n } // Otherwise...\n else {\n return '';\n }\n } // Otherwise... (The field is not clean.)\n else {\n return this.value;\n }\n },\n\n\t\t\t\trenderCurrencyFormatting: function( number ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Our number will have a . as a decimal point. We want to replace that with our locale decimal, nfi18n.decimal_point.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedDecimal = number.toString().replace( '.', '||' );\n\t\t\t\t\t/*\n\t\t\t\t\t * Add thousands separator. Our original number var won't have thousands separators.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedThousands = replacedDecimal.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n\t\t\t\t\tvar formattedNumber = replacedThousands.replace( '||', nfi18n.decimal_point );\n\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', that.model.get( 'formID' ) );\n\t\t\t\t\tvar currency_symbol = form.get( 'settings' ).currency_symbol;\n\t\t\t\t\treturn currency_symbol + formattedNumber;\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderTime: function() {\n\t\t\t\t\tif ( 'time_only' == this.date_mode || 'date_and_time' == this.date_mode ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\n\t\tevents: {\n\t\t\t'change .nf-element': 'fieldChange',\n\t\t\t'keyup .nf-element': 'fieldKeyup',\n\t\t\t'click .nf-element': 'fieldClick',\n\t\t\t'click .extra': 'extraClick',\n\t\t\t'change .extra': 'extraChange',\n\t\t\t'blur .nf-element': 'fieldBlur'\n\t\t},\n\n\t\tfieldChange: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar response = nfRadio.channel( 'nfAdmin' ).request( 'change:field', el, this.model );\n\t\t},\n\n\t\tfieldKeyup: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar keyCode = e.keyCode;\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t},\n\n\t\tfieldClick: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:field', el, this.model );\n\t\t},\n\n\t\textraClick: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:extra', e, this.model );\n\t\t},\n\n\t\textraChange: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:extra', e, this.model );\n\t\t},\n\n\t\tfieldBlur: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'blur:field', el, this.model );\n\t\t},\n\n\t\tonAttach: function() {\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'attach:view', this );\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/beforeField',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-before'\n });\n\n return view;\n} );\n","define( 'views/fieldErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-field-error',\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldErrorCollection',['views/fieldErrorItem'], function( fieldErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: fieldErrorItem,\n\n\t\tinitialize: function( options ) {\n\t\t\tthis.fieldModel = options.fieldModel;\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tif ( 0 == this.fieldModel.get( 'errors' ).models.length ) {\n this.fieldModel.removeWrapperClass( 'nf-error' );\n this.fieldModel.removeWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-pass' );\n this.fieldModel.setInvalid( false );\n } else {\n this.fieldModel.removeWrapperClass( 'nf-pass' );\n this.fieldModel.addWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-error' );\n this.fieldModel.setInvalid( true );\n }\n\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/inputLimit',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-input-limit',\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'field-' + this.model.get( 'id' ) ), 'keyup:field', this.updateCount );\n \tthis.count = this.model.get( 'input_limit' );\n \tthis.render();\n },\n\n updateCount: function( el, model ) {\n var value = jQuery( el ).val();\n var regex = /\\s+/gi;\n var words = String(value).trim().replace(regex, ' ').split(' ');\n var wordCount = words.length;\n var charCount = value.length;\n \n /**\n * PHP Config has 'char' instead of 'characters', so I changed it to\n * 'characters', but added 'char' here so existing form fields will\n * act correctly\n **/\n if ( 'characters' == this.model.get( 'input_limit_type' )\n || 'char' == this.model.get( 'input_limit_type' ) ) {\n jQuery( el ).attr( 'maxlength', this.model.get( 'input_limit' ) );\n this.count = this.model.get( 'input_limit' ) - charCount;\n } else {\n this.count = this.model.get( 'input_limit' ) - wordCount;\n var limit = this.model.get( 'input_limit' );\n if( wordCount > limit ){\n jQuery( el ).val( words.slice( 0, limit).join( ' ' ) );\n }\n }\n\n \tthis.render();\n },\n\n templateHelpers: function() {\n \tvar that = this;\n \treturn {\n \t\tcurrentCount: function() {\n \t\t\treturn that.count;\n \t\t}\n \t}\n }\n\n });\n\n return view;\n} );\n","define( 'views/afterField',['views/fieldErrorCollection', 'views/inputLimit'], function( fieldErrorCollection, InputLimitView ) {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-after',\n\n initialize: function() {\n \t\tthis.model.on( 'change:errors', this.changeError, this );\n },\n\n onRender: function() {\n \t/*\n \t * If we have an error, render our error view.\n \t * TODO: Perhaps move to a controller?\n \t */\n \tvar errorEl = jQuery( this.el ).children( '.nf-error-wrap' );\n \t\tthis.errorCollectionView = new fieldErrorCollection( { el: errorEl, collection: this.model.get( 'errors' ), fieldModel: this.model } );\n if ( 0 < this.model.get( 'errors' ).length ) {\n this.errorCollectionView.render(); \n }\n \n \t\t/*\n \t\t * If we have an input limit set, render the view that contains our counter\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'input_limit' ) && '' != String(this.model.get( 'input_limit' )).trim() ){\n \t\t\tvar inputLimitEl = jQuery( this.el ).children( '.nf-input-limit');\n \t\t\tthis.inputLimitView = new InputLimitView( { el: inputLimitEl, model: this.model } );\n\t\t\t\tinputLimitEl.attr('aria-live', 'polite');\n\t\t\t\tinputLimitEl.attr('role', 'status');\n\t\t\t\tinputLimitEl.attr('aria-relevant', 'additions');\n\t\t\t\tinputLimitEl.attr( 'aria-atomic', true );\n \t\t}\n },\n\n changeError: function() {\n\t\t\tthis.errorCollectionView.render();\n\t\t},\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterFieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField'], function( fieldItem, beforeField, afterField ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n return containerClass;\n }\n }\n }\n });\n\n return view;\n} );\n\n","define( 'views/fieldRepeaterFieldCollection',['views/fieldRepeaterFieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterSetLayout',[ 'views/fieldRepeaterFieldCollection' ], function( fieldCollection ) {\n var view = Marionette.LayoutView.extend({\n tagName: 'fieldset',\n template: '#tmpl-nf-field-repeater-set',\n\n regions: {\n fields: '.nf-repeater-fieldset',\n },\n\n onRender: function() {\n this.fields.show( new fieldCollection( { collection: this.model.get( 'fields' ) } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-remove-fieldset': 'removeSet',\n },\n\n removeSet: function() {\n nfRadio.channel( \"field-repeater\" ).trigger( 'remove:fieldset', this.model )\n }\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterSetCollection',['views/fieldRepeaterSetLayout'], function( repeaterSetLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'div',\n\t\tchildView: repeaterSetLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterLayout',[ 'views/fieldRepeaterSetCollection' ], function( repeaterSetCollection ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'div',\n template: '#tmpl-nf-field-repeater',\n\n regions: {\n sets: '.nf-repeater-fieldsets',\n },\n\n initialize: function() {\n\n this.collection = this.model.get( 'sets' );\n\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'rerender:fieldsets', this.render );\n\n },\n\n onRender: function() { \n this.sets.show( new repeaterSetCollection( { collection: this.collection } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n renderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-add-fieldset': 'addSet'\n },\n\n addSet: function() {\n nfRadio.channel( 'field-repeater' ).trigger( 'add:fieldset', this.model.id ); \n },\n\n beforeSubmit: function() {\n\t\t\tthis.collection.beforeSubmit( this.model.get( 'sets' ) );\n\t\t}\n \n\n });\n\n return view;\n} );\n","define( 'views/fieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField', 'views/fieldRepeaterLayout'], function( fieldItem, beforeField, afterField, repeaterFieldLayout ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n \n if ( 'repeater' == this.model.get( 'type' ) ) {\n this.field.show( new repeaterFieldLayout( { model: this.model } ) );\n } else {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n \n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n\n return containerClass;\n }\n }\n }\n\n });\n\n return view;\n} );\n\n","/**\n * Return views that might be used in extensions.\n * These are un-instantiated views.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/loadViews',['views/fieldItem', 'views/fieldLayout'], function( fieldItemView, fieldLayoutView ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t// Reply to requests for our field item view.\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldItem', this.getFieldItem );\n\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldLayout', this.getFieldLayout );\n\t\t},\n\n\t\tgetFieldItem: function( model ) {\n\t\t\treturn fieldItemView;\n\t\t},\n\n\t\tgetFieldLayout: function() {\n\t\t\treturn fieldLayoutView;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * If a form has at least one field error, we should disable the submit button and add a form error.\n * If a form had errors, but all the field errors have been removed, we should remove the form error.\n *\n * @since 3.0\n */\ndefine('controllers/formErrors',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen for error messages being added to and removed from fields.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.addError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.removeError );\n\n\t\t\t/*\n\t\t\t * Respond to requests to get form errors\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\taddError: function( fieldModel, errorID, errorMsg ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t/*\n\t\t\t * We store our errors in this object by field ID so that we don't have to loop over all our fields when we're testing for errors.\n\t\t\t * They are stored as an object within an array, using the field ID as the key.\n\t\t\t *\n\t\t\t * If we haven't setup an array item for this field, set it as an object.\n\t\t\t */\n\t\t\tif ( 'undefined' == typeof formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = {};\n\t\t\t}\n\t\t\t// Add an error to our tracking array\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ][ errorID ] = errorMsg;\n\t\t\t/*\n\t\t\t * We have at least one field error, so submmission should be prevented.\n\t\t\t * Add a form error.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'add:error', 'field-errors', formModel.get( 'settings' ).formErrorsCorrectErrors );\n\t\t},\n\n\t\tremoveError: function( fieldModel, errorID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t// Remove this error ID from our tracking array.\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = _.omit( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ], errorID );\n\t\t\t/*\n\t\t\t * If we don't have any more error IDs on this field, then we need to remove this field from the array.\n\t\t\t *\n\t\t\t * Then, if the fieldErrors tracking array has a length of 0, we remove our form error, because all field errors have been dealt with.\n\t\t\t */\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) ) {\n\t\t\t\tdelete formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ];\n\t\t\t}\n\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\t// Remove our form error.\n\t\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'remove:error', 'field-errors' );\n\t\t\t}\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n\t\t\treturn errors;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Handles submission of our form.\n */\ndefine('controllers/submit',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'init:model', this.registerSubmitHandler );\n\t\t},\n\n\t\t/**\n\t\t * Register the submission handler function.\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tregisterSubmitHandler: function( formModel ) {\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).reply( 'submit', this.submit );\n\t\t},\n\n\t\t/**\n\t\t * Handles the actual submission of our form.\n\t\t * When we submit:\n\t\t *\n\t\t * 1) Send out a message saying that we're about to begin form submission.\n\t\t * 2) Check the form for errors\n\t\t * 3) Submit the data\n\t\t * 4) Send out a message with our response\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tsubmit: function( formModel ) {\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'before:submit', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'before:submit', formModel );\n\n\t\t\t/*\n\t\t\t * Validate our field models.\n\t\t\t */\n\t\t\tvar validate = nfRadio.channel( 'forms' ).request( 'maybe:validate', formModel );\n\t\t \tif( false !== validate ){\n\n // When validating all fields, set clean to false to force validation.\n _.each( formModel.get( 'fields' ).models, function( fieldModel ) {\n fieldModel.set( 'clean', false );\n } );\n\n\t\t\t\t/*\n\t\t\t\t * This method is defined in our models/fieldCollection.js file,\n\t\t\t\t * except where overridden by an add-on (ie Layout & Styles).\n\t\t\t\t */\n\t\t\t\tformModel.get( 'formContentData' ).validateFields();\n\t\t\t}\n\n\t\t\tvar submit = nfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'maybe:submit', formModel );\n\t\t\tif ( false == submit ) {\n\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:cancel', formModel );\n\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:cancel', formModel );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif( false !== validate ){\n\n\t\t\t\t// Ignore non-blocking errors.\n\t\t\t\tvar blockingFormErrors = _.filter( formModel.get( 'errors' ).models, function( error ){\n\n\t\t\t\t\t// Ignore email action related errors.\n\t\t\t\t\tif( 'invalid_email' == error.get( 'id' ) || 'email_not_sent' == error.get( 'id' ) ) return false;\n\n\t\t\t\t\treturn true; // Error is blocking.\n\t\t\t\t});\n\n\t\t\t\t/*\n\t\t\t\t * Make sure we don't have any form errors before we submit.\n\t\t\t\t * Return false if we do.\n\t\t\t\t */\n\t\t\t\tif ( 0 != _.size( blockingFormErrors ) ) {\n\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:failed', formModel );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:failed', formModel );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'after:submitValidation', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'after:submitValidation', formModel );\n\n\t\t\t/*\n\t\t\t * Actually submit our form, and send out a message with our response.\n\t\t\t */\n\n \t\t\tvar formID = formModel.get( 'id' );\n\t\t\tvar fields = {};\n\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\tvar fieldDataDefaults = { value:field.get( 'value' ), id:field.get( 'id' ) };\n\n\t\t\t\t// Add field data at the field ID for efficient access.\n\t\t\t\tfields[ field.get( 'id' ) ] = nfRadio.channel( field.get( 'type' ) ).request( 'get:submitData', fieldDataDefaults, field ) || fieldDataDefaults;;\n\t\t\t} );\n\t\t\tvar extra = formModel.get( 'extra' );\n\t\t\tvar settings = formModel.get( 'settings' );\n\t\t\tdelete settings.formContentData;\n\t\t\tvar formData = JSON.stringify( { id: formID, fields: fields, settings: settings, extra: extra } );\n\t\t\tvar data = {\n\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t'nonce_ts': nfFrontEnd.nonce_ts,\n\t\t\t\t'formData': formData\n\t\t\t}\n\n\t\t\tvar that = this;\n\n\t\t\tjQuery.ajax({\n\t\t\t url: nfFrontEnd.adminAjax,\n\t\t\t type: 'POST',\n\t\t\t data: data,\n\t\t\t cache: false,\n\t\t\t \tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t \t\ttry {\n\t\t\t\t \t\tvar response = data;\n\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t \tjQuery( document ).trigger( 'nfFormSubmitResponse', { response: response, id: formModel.get( 'id' ) } );\n\t\t\t \t\t} catch( e ) {\n\t\t\t \t\t\tconsole.log( e );\n\t\t\t \t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\tconsole.log( e );\n\t\t\t \t\t}\n\n\t\t\t },\n\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t // Handle errors here\n\t\t\t console.log('ERRORS: ' + errorThrown);\n\t\t\t\t\tconsole.log( jqXHR );\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar response = jQuery.parseJSON( jqXHR.responseText );\n\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\tconsole.log( 'Parse Error: ' + jqXHR.responseText);\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'add:error', 'parse-response-ERROR', errorThrown );\n\t\t\t\t\t}\n\n\t\t\t }\n\t\t\t});\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define( 'views/fieldCollection',['views/fieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout\n\n\t});\n\n\treturn view;\n} );\n","/**\n * Default filters\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/defaultFilters',[ 'views/fieldCollection', 'models/fieldCollection' ], function( FieldCollectionView, FieldCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'before:filterData', this.registerDefaultDataFilter );\n\t\t},\n\n\t\tregisterDefaultDataFilter: function( formModel ) {\n\t\t\t/*\n\t\t\t * Set our default formContent load filter\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:loadFilter', this.defaultFormContentLoad, 10, this );\n\t\t\t/*\n\t\t\t * Set our default formContentView.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:viewFilter', this.defaultFormContentView, 10, this );\n\t\t},\n\n\t\tdefaultFormContentLoad: function( formContentData, formModel, context ) {\n\t\t\tvar fieldCollection = formModel.get( 'fields' );\n\t\t\t/*\n\t\t\t * If we only have one load filter, we can just return the field collection.\n\t\t\t */\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tif ( 1 == sortedArray.length || 'undefined' == typeof formContentData || true === formContentData instanceof Backbone.Collection ) return formModel.get( 'fields' );\n\n \tvar fieldModels = _.map( formContentData, function( key ) {\n \t\treturn formModel.get( 'fields' ).findWhere( { key: key } );\n \t}, this );\n\n \tvar currentFieldCollection = new FieldCollection( fieldModels );\n\n \tfieldCollection.on( 'reset', function( collection ) {\n \t\tvar resetFields = [];\n \t\tcurrentFieldCollection.each( function( fieldModel ) {\n \t\t\tif ( 'submit' != fieldModel.get( 'type' ) ) {\n \t\t\t\tresetFields.push( collection.findWhere( { key: fieldModel.get( 'key' ) } ) );\n \t\t\t} else {\n \t\t\t\tresetFields.push( fieldModel );\n \t\t\t}\n \t\t} );\n\n currentFieldCollection.options = { formModel: formModel };\n \t\tcurrentFieldCollection.reset( resetFields );\n \t} );\n\n \treturn currentFieldCollection;\n },\n\n defaultFormContentView: function() {\n \treturn FieldCollectionView;\n }\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for removing unique field errors.\n */\n\ndefine('controllers/uniqueFieldError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen to keyup and field changes.\n\t\t\t *\n\t\t\t * If those fields have a unique field error, remove that error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.removeError );\n\n\t\t},\n\n\t\tremoveError: function( el, model ) {\n\t\t\tmodel = model || el;\n\t\t\t/*\n\t\t\t * Remove any unique field errors.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'unique_field' );\n\t\t},\n\n\t});\n\n\treturn controller;\n} );\n","let nfAllRepeaterFieldsModels = [];\ndefine( 'models/fieldRepeaterSetModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t\tinitialize: function(collection, options) {\n\n\t\t\tthis.repeaterFieldModel = options.repeaterFieldModel;\n\n\t\t\tthis.set( 'label', this.repeaterFieldModel.get('label') );\n\n\t\t\tif(collection && options){\n\t\t\t\tthis.initAllRepeaterFieldsModels(collection, options);\n\t\t\t}\n\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFields', this.getRepeaterFields, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldById', this.getRepeaterFieldById, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterModels', this.getAllRepeaterFieldsModels, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsetsByForm', this.getAllFieldsetsByForm, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsModelsArrayByForm', this.getAllFieldsModelsArrayByForm, this );\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:repeaterModels', this.setAllRepeaterFieldsModels);\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:value', this.setAllRepeatersValues );\n\t\t},\n\n\t\tsetAllRepeaterFieldsModels: function() {\n\t\t\tthis.set( 'repeaterFieldsetsModels', nfAllRepeaterFieldsModels );\n\t\t\tthis.allRepeatersFieldsetsModels = nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tinitAllRepeaterFieldsModels: function(collection, options) {\t\n\t\t\tconst formID = options.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = options.repeaterFieldModel.get('id');\n\t\t\tconst currentModels = collection.fields.models;\n\t\t\t\n\t\t\tlet isModelSet = nfAllRepeaterFieldsModels.find(model => model.id === repeaterID && model.form === formID);\n\n\t\t\tif ( isModelSet ){\n\t\t\t\tisModelSet.fields = isModelSet.fields.concat(currentModels);\n\t\t\t} else {\n\t\t\t\tnfAllRepeaterFieldsModels.push( {\n\t\t\t\t\tform: formID,\n\t\t\t\t\tid: repeaterID,\n\t\t\t\t\tfields: currentModels\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.setAllRepeaterFieldsModels();\n\t\t},\n\n\t\tgetAllRepeaterFieldsModels: function() {\n\t\t\treturn nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tgetAllFieldsetsByForm: function(formID) {\n\t\t\tconst allFormsModels = this.getAllRepeaterFieldsModels();\n\t\t\tconst thisFormModels = allFormsModels.filter( model => model.form === formID );\n\n\t\t\treturn thisFormModels;\n\t\t},\n\n\t\tgetAllFieldsModelsArrayByForm: function(formID) {\n\t\t\tconst thisFormModels = this.getAllFieldsetsByForm(formID);\n\t\t\tlet singleArray = [];\n\t\t\tthisFormModels.map( model => {\n\t\t\t\tsingleArray = singleArray.concat(model.fields);\n\t\t\t});\n\n\t\t\treturn singleArray;\n\t\t},\n\n\t\tgetRepeaterFields: function(repeaterID) {\n\t\t\tconst allModels = this.getAllRepeaterFieldsModels();\n\t\t\tlet fields = allModels.find(model => String(model.id) === String(repeaterID));\n\t\t\tif(typeof fields === \"undefined\"){\n\t\t\t\tfields = this.reverseResearchFieldsetModel(repeaterID, allModels);\n\t\t\t}\n\n\t\t\treturn fields;\n\t\t},\n\n\t\treverseResearchFieldsetModel: function(repeaterID, allModels) {\n\t\t\tlet fields;\n\t\t\t_.each(allModels, function(fieldsetModel) {\n\t\t\t\t_.each(fieldsetModel.fields, function(fieldModel){\n\t\t\t\t\tif(String(fieldModel.id).startsWith(repeaterID)){\n\t\t\t\t\t\tfields = fieldsetModel;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn fields;\n\t\t},\n\n\t\tgetRepeaterFieldById: function( id ){\n\t\t\tconst repeaterID = String(id).split('.')[0];\n\t\t\tconst fieldObject = this.getRepeaterFields(repeaterID);\n\t\t\t//return early if no match found by ID\n\t\t\tif(typeof fieldObject === 'undefined') return;\n\n\t\t\tconst model = fieldObject.fields.find(field => field.id === id);\n\n\t\t\treturn model;\n\t\t},\n\n\t\tsetAllRepeatersValues: function() {\n\t\t\tconst repeaters = this.getAllRepeaterFieldsModels();\n\t\t\tif(repeaters.length > 0) {\n\t\t\t\t\n\t\t\t\t_.each(repeaters, function(repeater){\n\t\t\t\t\tlet fields = repeater.fields;\n\t\t\t\t\tlet repeaterFieldModel = nfRadio.channel( 'fields' ).request( 'get:field', repeater.id );\n\n\t\t\t\t\tif(fields.length > 0){\n\t\t\t\t\t\tlet repeaterFieldValue = {};\n\t\t\t\t\t\t//Loop through fields\n\t\t\t\t\t\t_.each( fields, function( field ){\n\t\t\t\t\t\t\t//Get ID and Value to format and store them in the repeaterFieldValue object\n\t\t\t\t\t\t\tlet value = field.get('value');\n\t\t\t\t\t\t\tlet id = field.get('id');\n\t\t\t\t\t\t\t//Refactor ID used in case we have multiple same form on the DOM and using a changed ID for main repeater field.\n\t\t\t\t\t\t\tif(id.split(\"_\").length > 2){\n\t\t\t\t\t\t\t\tlet idArray = id.split(\"_\");\n\t\t\t\t\t\t\t\tidArray[1] = idArray[1].split(\".\")[1];\n\t\t\t\t\t\t\t\tlet newID = idArray[0] + \".\" + idArray[1] + \"_\" + idArray[2];\n\t\t\t\t\t\t\t\tdelete repeaterFieldValue[id];\n\t\t\t\t\t\t\t\tid = newID;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trepeaterFieldValue[id] = {\n\t\t\t\t\t\t\t\t\"value\": value,\n\t\t\t\t\t\t\t\t\"id\": id\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//Check if time is correctly added on Date/time fields\n\t\t\t\t\t\t\tif(field.get('type') === \"date\" && typeof value === \"string\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" )){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].value = {\n\t\t\t\t\t\t\t\t\t\"date\": value,\n\t\t\t\t\t\t\t\t\t\"hour\": field.attributes.selected_hour,\n\t\t\t\t\t\t\t\t\t\"minute\": field.attributes.selected_minute,\n\t\t\t\t\t\t\t\t\t\"ampm\": field.attributes.selected_ampm\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(field.get('type') === \"file_upload\" && field.get('value')){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].files = field.attributes.files;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\trepeaterFieldModel.set( 'isUpdated', false);\n\t\t\t\t\t\t//Update repeater field value with repeaterFieldValue \n\t\t\t\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', repeaterFieldModel, repeaterFieldValue);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldRepeaterSetCollection',['models/fieldRepeaterSetModel', 'models/fieldCollection' ], function( repeaterSetModel, fieldCollection ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: repeaterSetModel,\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'sort:fieldsets', this.sortIDs );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'remove:fieldset', this.removeSet );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'add:fieldset', this.addSet );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:fieldsets', this.getFieldSets, this );\n\n\t\t},\n\n\t\taddSet: function(repeaterFieldID = false) {\n\t\t\tlet repeater;\n\t\t\tif(repeaterFieldID){\n\t\t\t\t//Get correct Field Model in case of multiple Repeater fields use\n\t\t\t\tconst repeaterFieldModel = this.options.repeaterFieldModel.id === repeaterFieldID ? this.options.repeaterFieldModel : false;\n\t\t\t\trepeater = repeaterFieldModel;\n\t\t\t\tif(repeaterFieldModel){\n\t\t\t\t\t//Create a new collection\n\t\t\t\t\tlet fields = new fieldCollection( this.options.templateFields, { formModel: this.options.formModel, repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t\t//Add it th sets of collection\n\t\t\t\t\tthis.add( { fields: fields }, {repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t}\n\t\t\t}\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger('fieldset:added', repeater);\n\t\t},\n\n\t\tremoveSet: function( fieldset ) {\n\t\t\t// Remove possible form errors related to required fields\n\t\t\tthis.removeRequiredFieldsErrors(fieldset);\n\n\t\t\t//Remove field models saved globally\n\t\t\tconst formID = fieldset.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = fieldset.repeaterFieldModel.get('id');\n\t\t\tconst isRepeaterModelSet = nfAllRepeaterFieldsModels.find(rep => rep.id === repeaterID && rep.form === formID );\n\t\t\tif ( isRepeaterModelSet ){\n\t\t\t\tlet remove = [];\n\t\t\t\t_.each(isRepeaterModelSet.fields, (field, index) => {\n\t\t\t\t\tif(typeof field !== \"undefined\"){\n\t\t\t\t\t\t_.each(fieldset.get('fields').models, (fieldsetField) => {\n\t\t\t\t\t\t\tconst fieldID = typeof field.id !== \"undefined\" ? field.id : field.get('id');\n\t\t\t\t\t\t\tif(fieldsetField.id === fieldID){\n\t\t\t\t\t\t\t\t// Delete any input values.\n\t\t\t\t\t\t\t\tdelete fieldset.repeaterFieldModel.get('value')[fieldsetField.id];\n\t\t\t\t\t\t\t\tremove.push(fieldID);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tisRepeaterModelSet.fields = _.reject(isRepeaterModelSet.fields, (field) =>{\n\t\t\t\t\tif(typeof field === \"undefined\") return true;\n\t\t\t\t\tif(remove.includes(field.id)) return true;\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:repeaterModels' );\n\t\t\t}\n\n\t\t\t//Remove the fieldset\n\t\t\tthis.remove( fieldset );\n\t\t\tfieldset.destroy();\n\t\t\t\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\n\t\t\t//Reset values\n\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t},\n\n\t\tremoveRequiredFieldsErrors: function( fieldset ) {\n\t\t\tlet fields = fieldset.get('fields');\n\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', field.get(\"id\"), \"required-error\" );\n\t\t\t});\n\t\t},\n\n\t\tgetFieldsets: function() {\n\t\t\treturn this.models;\n\t\t},\n\n\t\tcheckTimeField: function(field){\n\t\t\tconst id = field.get('id');\n\t\t\t//Get elements\n\t\t\tconst hourEl = document.getElementById(\"hour-select-\" + id),\n\t\t\tminEl = document.getElementById(\"minute-select-\" + id),\n\t\t\tdefaultHour = field.attributes.hours_24 === 0 ? \"12\" : \"00\";\n\t\t\t// set field values to element\n\t\t\tif(!hourEl || !minEl) return;\n\t\t\tminEl.value = typeof field.attributes.selected_minute !== \"undefined\" ? field.attributes.selected_minute : \"00\";\n\t\t\thourEl.value = typeof field.attributes.selected_hour !== \"undefined\" ? field.attributes.selected_hour : defaultHour;\n\n\t\t\tconst wrapper = document.getElementById(\"nf-field-\" + id + \"-wrap\");\n\t\t\tconst ampmEl = wrapper.querySelector('#ampm-select');\n\t\t\tif( ! ampmEl ) return;\n\t\t\tampmEl.value = typeof field.attributes.selected_ampm !== \"undefined\" ? field.attributes.selected_ampm : \"am\";\n\t\t},\n\n\t\tsortIDs: function(){\n\t\t\tconst fieldsets = this.getFieldsets();\n\t\t\tconst timeFields = [];\n\t\t\t//Reset repeater fields IDs when adding / removing a field\n\t\t\t_.each(fieldsets, function(fieldset, modelIndex){\n\t\t\t\tlet fields = fieldset.get('fields');\n\t\t\t\tfieldset.set( 'index', modelIndex + 1 );\n\t\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\t\t//Always rebuild ID to allow same form multiple times on DOM\n\t\t\t\t\t//Remove suffix if it has one\n\t\t\t\t\tconst cutEl = String(field.id).split('_')[0];\n\t\t\t\t\t//Extract Field index of ID\n\t\t\t\t\tconst fieldIndex = String( cutEl ).split(\".\").length > 1 ? String( cutEl ).split(\".\").pop() : false;\n\t\t\t\t\t//The loop makes first fieldset of second same form to miss correct index here, next iteration will get that correct index\n\t\t\t\t\tif(!fieldIndex) return;\n\t\t\t\t\t//Update FieldID using ( REPEATER FIELD id . field index in the repeater field _ fieldset index in the repeater field ) format\n\t\t\t\t\tconst newID = field.collection.options.repeaterFieldModel.id + \".\" + fieldIndex + \"_\" + modelIndex;\n\t\t\t\t\tfield.set(\"id\", newID);\n\n\t\t\t\t\t// Detect time fields, fix inconsistency of date field when associated with time, as we don't use flatPickr display for time\n\t\t\t\t\tif(field.get('type') === \"date\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" ) ){\n\t\t\t\t\t\ttimeFields.push(field);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\t\t\t//Reload repeater field view ( collection of fieldsets updated )\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger( 'rerender:fieldsets' );\n\t\t\t\n\t\t\t//Process time fields values\n\t\t\ttimeFields.forEach( (field) => {\n\t\t\t\tthis.checkTimeField(field);\n\t\t\t});\n\t\t}\n\n\t} );\n\treturn collection;\n} );\n","define('controllers/fieldRepeater',[ 'models/fieldRepeaterSetCollection', 'models/fieldCollection' ], function( repeaterSetCollection, fieldCollection ) {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'repeater' ), 'init:model', this.initRepeater );\n },\n\n initRepeater: function ( model ) {\n \tif ( 'undefined' == typeof model.collection.options.formModel ) {\n \t\treturn false;\n \t}\n\n \tlet fields = new fieldCollection( model.get( 'fields' ), { formModel: model.collection.options.formModel, repeaterFieldModel: model } );\n model.set( 'sets', new repeaterSetCollection( [ { fields: fields } ], { templateFields: model.get( 'fields' ), formModel: model.collection.options.formModel, repeaterFieldModel: model } ) );\n //Trigger Fields IDs sorting in case of same form being printed multiple times on DOM\n nfRadio.channel( \"field-repeater\" ).trigger( 'sort:fieldsets' );\n },\n\n });\n\n return controller;\n});\n","define('controllers/actionGA',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSendGaEvent );\n\t\t},\n\n\t\tactionSendGaEvent: function( response ) {\n if (typeof response.data.actions === 'undefined' || typeof response.data.actions.googleanalytics === 'undefined') {\n return;\n }\n \n response.data.actions.googleanalytics.forEach( (action) => {\n const eventName = action.event_name;\n if(typeof eventName === 'undefined') {\n console.warn('No event name defined in the GA4 action settings. Please define an event name.');\n return;\n }\n\n if(typeof action.method_type !== 'undefined' && action.method_type === 'ga4'){\n if(typeof gtag === 'function') {\n const eventParams = {\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n gtag('event', eventName, eventParams);\n } else if (typeof dataLayer === 'object'){\n console.warn('gtag isn\\'t defined. But GTM was detected, did you mean to use GTM in the action settings?');\n } else {\n console.warn('gtag isn\\'t defined. Please make sure you have GA4 installed on your site.');\n }\n } else if( typeof action.method_type !== 'undefined' && action.method_type === 'gtm'){\n \n \n if (typeof dataLayer === 'object') {\n //Process with GTM dataLayer\n const eventParams = {\n 'event': eventName,\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n dataLayer.push(eventParams);\n } else if (typeof gtag === 'function') {\n console.warn('GTM isn\\'t defined. But GA4 was detected, did you mean to use GA4 in the action settings?');\n } else {\n console.warn('GTM isn\\'t defined. Please make sure you have GTM installed on your site.');\n }\n } else {\n console.warn('GTM and gtag aren\\'t defined. Please make sure you have GTM or GA4 installed on your site.');\n }\n });\n \n\t\t}\n\n\t});\n\n\treturn controller;\n});\n\n","define(\n\t'controllers/loadControllers',[\n\t\t'controllers/formData',\n\t\t'controllers/fieldError',\n\t\t'controllers/changeField',\n\t\t'controllers/changeEmail',\n\t\t'controllers/changeDate',\n\t\t'controllers/fieldCheckbox',\n\t\t'controllers/fieldCheckboxList',\n\t\t'controllers/fieldImageList',\n\t\t'controllers/fieldRadio',\n\t\t'controllers/fieldNumber',\n\t\t'controllers/mirrorField',\n\t\t'controllers/confirmField',\n\t\t'controllers/updateFieldModel',\n\t\t'controllers/submitButton',\n\t\t'controllers/submitDebug',\n\t\t'controllers/getFormErrors',\n\t\t'controllers/validateRequired',\n\t\t'controllers/submitError',\n\t\t'controllers/actionRedirect',\n\t\t'controllers/actionSuccess',\n\t\t'controllers/fieldSelect',\n\t\t'controllers/coreSubmitResponse',\n\t\t'controllers/fieldProduct',\n\t\t'controllers/fieldTotal',\n\t\t'controllers/fieldQuantity',\n\t\t'controllers/calculations',\n\t\t'controllers/dateBackwardsCompat',\n\t\t'controllers/fieldDate',\n\t\t'controllers/fieldRecaptcha',\n\t\t'controllers/fieldRecaptchaV3',\n\t\t'controllers/fieldHTML',\n\t\t'controllers/helpText',\n\t\t'controllers/fieldTextbox',\n\t\t'controllers/fieldTextareaRTE',\n\t\t'controllers/fieldStarRating',\n\t\t'controllers/fieldTerms',\n\t\t'controllers/formContentFilters',\n\t\t'controllers/loadViews',\n\t\t'controllers/formErrors',\n\t\t'controllers/submit',\n\t\t'controllers/defaultFilters',\n\t\t'controllers/uniqueFieldError',\n\t\t'controllers/fieldRepeater',\n\t\t'controllers/actionGA',\n\t],\n\tfunction(\n\t\tFormData,\n\t\tFieldError,\n\t\tChangeField,\n\t\tChangeEmail,\n\t\tChangeDate,\n\t\tFieldCheckbox,\n\t\tFieldCheckboxList,\n\t\tFieldImageList,\n\t\tFieldRadio,\n\t\tFieldNumber,\n\t\tMirrorField,\n\t\tConfirmField,\n\t\tUpdateFieldModel,\n\t\tSubmitButton,\n\t\tSubmitDebug,\n\t\tGetFormErrors,\n\t\tValidateRequired,\n\t\tSubmitError,\n\t\tActionRedirect,\n\t\tActionSuccess,\n\t\tFieldSelect,\n\t\tCoreSubmitResponse,\n\t\tFieldProduct,\n\t\tFieldTotal,\n\t\tFieldQuantity,\n\t\tCalculations,\n\t\tDateBackwardsCompat,\n\t\tFieldDate,\n\t\tFieldRecaptcha,\n\t\tFieldRecaptchaV3,\n\t\tFieldHTML,\n\t\tHelpText,\n\t\tFieldTextbox,\n\t\tFieldTextareaRTE,\n\t\tFieldStarRating,\n\t\tFieldTerms,\n\t\tFormContentFilters,\n\t\tLoadViews,\n\t\tFormErrors,\n\t\tSubmit,\n\t\tDefaultFilters,\n\t\tUniqueFieldError,\n\t\tFieldRepeater,\n\t\tActionGA\n\t) {\n\t\tvar controller = Marionette.Object.extend( {\n\t\t\tinitialize: function() {\n\n\t\t\t\t/**\n\t\t\t\t * App Controllers\n\t\t\t\t */\n\t\t\t\tnew LoadViews();\n\t\t\t\tnew FormErrors();\n\t\t\t\tnew Submit();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Field type controllers\n\t\t\t\t */\n\t\t\t\tnew FieldCheckbox();\n\t\t\t\tnew FieldCheckboxList();\n\t\t\t\tnew FieldImageList();\n\t\t\t\tnew FieldRadio();\n\t\t\t\tnew FieldNumber();\n\t\t\t\tnew FieldSelect();\n\t\t\t\tnew FieldProduct();\n\t\t\t\tnew FieldTotal();\n\t\t\t\tnew FieldQuantity();\n\t\t\t\tnew FieldRecaptcha();\n\t\t\t\tnew FieldRecaptchaV3();\n\t\t\t\tnew FieldHTML();\n\t\t\t\tnew HelpText();\n\t\t\t\tnew FieldTextbox();\n\t\t\t\tnew FieldTextareaRTE();\n\t\t\t\tnew FieldStarRating();\n\t\t\t\tnew FieldTerms();\n\t\t\t\tnew FormContentFilters();\n\t\t\t\tnew UniqueFieldError();\n\t\t\t\tnew FieldRepeater();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Misc controllers\n\t\t\t\t */\n\t\t\t\tnew FieldError();\n\t\t\t\tnew ChangeField();\n\t\t\t\tnew ChangeEmail();\n\t\t\t\tnew ChangeDate();\n\t\t\t\t\n\t\t\t\tnew MirrorField();\n\t\t\t\tnew ConfirmField();\n\t\t\t\tnew UpdateFieldModel();\n\t\t\t\tnew SubmitButton();\n\t\t\t\tnew SubmitDebug();\n\t\t\t\tnew GetFormErrors();\n\t\t\t\tnew ValidateRequired();\n\t\t\t\tnew SubmitError();\n\t\t\t\tnew ActionRedirect();\n\t\t\t\tnew ActionSuccess();\n\t\t\t\tnew ActionGA();\n\t\t\t\t\n\t\t\t\tnew CoreSubmitResponse();\n\t\t\t\tnew Calculations();\n\n\t\t\t\tnew DefaultFilters();\n\n\t\t\t\t/**\n\t\t\t\t * Data controllers\n\t\t\t\t */\n\t\t\t\tnew DateBackwardsCompat();\n\t\t\t\tnew FieldDate();\n\t\t\t\tnew FormData();\n\t\t\t\t\n\t\t\t}\n\t\t});\n\n\t\treturn controller;\n} );\n\n","define( 'views/beforeForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-before-form\",\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-form-error',\n\n\t\tonRender: function() {\n\t\t\t// this.$el = this.$el.children();\n\t\t\t// this.$el.unwrap();\n\t\t\t// this.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorCollection',['views/formErrorItem'], function( formErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: formErrorItem\n\t});\n\n\treturn view;\n} );\n","define( 'views/honeyPot',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-form-hp',\n\n events: {\n \t'keyup .nf-field-hp': 'maybeError',\n 'change .nf-field-hp': 'maybeError'\n },\n\n maybeError: function( e ) {\n /*\n * If we have an empty honeyPot field, remove the honeypot form error.\n * If we do not have an empty honeyPot field, add the honeypot form error.\n */\n if ( 0 == jQuery( e.target ).val().length ) {\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'remove:error', 'honeyPot' );\n } else {\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'id' ) );\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'add:error', 'honeyPot', formModel.get( 'settings' ).honeypotHoneypotError );\n }\n }\n });\n\n return view;\n} );\n","define( 'views/afterFormContent',['views/formErrorCollection', 'views/honeyPot'], function( FormErrors, HoneyPot ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-after-fields\",\n\n\t\tregions: {\n\t\t\terrors: \".nf-form-errors\",\n hp: \".nf-form-hp\"\n\t\t},\n\n onShow: function() {\n \tthis.errors.show( new FormErrors( { collection: this.model.get( 'errors' ) } ) );\n this.hp.show( new HoneyPot( { model: this.model } ) );\n }\n\n });\n\n return view;\n} );\n","define( 'views/beforeFormContent',[], function( ) {\n\n var view = Marionette.ItemView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-before-fields\",\n\n templateHelpers: function () {\n return {\n\n renderFieldsMarkedRequired: function() {\n\n var requiredFields = this.fields.filter( { required: 1 } );\n return ( requiredFields.length ) ? this.fieldsMarkedRequired : '';\n },\n };\n },\n\n });\n\n return view;\n} );\n","define( 'views/formLayout',[ 'views/afterFormContent', 'views/beforeFormContent', 'models/fieldCollection' ], function( AfterFormContent, BeforeFormContent, FieldCollection ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-form-layout\",\n\n\t\tregions: {\n\t\t\tbeforeFormContent: \".nf-before-form-content\",\n\t\t\tformContent: \".nf-form-content\",\n\t\t\tafterFormContent: \".nf-after-form-content\"\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'form-' + this.model.get( 'id' ) ).reply( 'get:el', this.getEl, this );\n\t\t\t\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\n\t\tonShow: function() {\n\t\t\tthis.beforeFormContent.show( new BeforeFormContent( { model: this.model } ) );\n\t\t\t\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.model.get( 'formContentData' );\n\t\t\t\n\t\t\t/*\n\t\t\t * Check our fieldContentViewsFilter to see if we have any defined.\n\t\t\t * If we do, overwrite our default with the view returned from the filter.\n\t\t\t */\n\t\t\tvar formContentViewFilters = nfRadio.channel( 'formContent' ).request( 'get:viewFilters' );\n\t\t\t\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentViewFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentView = callback();\n\t\t\t\n\t\t\tvar options = {\n\t\t\t\tdata: formContentData,\n\t\t\t\tformModel: this.model\n\t\t\t};\n\t\t\t\n\t\t\t/*\n\t\t\t * If we have a collection, pass the returned data as the collection.\n\t\t\t *\n\t\t\t * If we have a model, pass the returned data as the collection.\n\t\t\t */\n\t\t\tif ( false !== formContentData instanceof Backbone.Collection ) {\n\t\t\t\toptions.collection = formContentData;\n\t\t\t} else if ( false !== formContentData instanceof Backbone.Model ) {\n\t\t\t\toptions.model = formContentData;\n\t\t\t}\n\n\t\t\tthis.formContent.show( new formContentView( options ) );\n\t\t\tthis.afterFormContent.show( new AfterFormContent( { model: this.model } ) );\n\t\t},\n\n\t\tgetEl: function() {\n\t\t\treturn this.el;\n\t\t},\n\n templateHelpers: function () {\n return {\n\n renderClasses: function() {\n return '';\n }\n\n };\n },\n\n hide: function() {\n \tjQuery( this.el ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/afterForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-after-form\",\n\t\t\n\t});\n\n\treturn view;\n} );\n","define( 'views/mainLayout',['views/beforeForm', 'views/formLayout', 'views/afterForm'], function( BeforeForm, FormLayout, AfterForm ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttemplate: '#tmpl-nf-layout',\n\n\t\tregions: {\n\t\t\tresponseMsg: '.nf-response-msg',\n\t\t\tbeforeForm: '.nf-before-form',\n\t\t\tformLayout: '.nf-form-layout',\n\t\t\tafterForm: '.nf-after-form'\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis.$el = jQuery( '#nf-form-' + this.model.id + '-cont' );\n\t\t\tthis.el = '#nf-form-' + this.model.id + '-cont';\n\n\t\t\tthis.render();\n\n\t\t\tthis.beforeForm.show( new BeforeForm( { model: this.model } ) );\n\t\t\tthis.formLayout.show( new FormLayout( { model: this.model, fieldCollection: this.options.fieldCollection } ) );\n\t\t\tthis.afterForm.show( new AfterForm( { model: this.model } ) );\n\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n hide: function() {\n \tjQuery( this.el ).find( '.nf-form-title' ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","// const Intl = require('intl');\n\n// class nfLocaleConverter {\nvar nfLocaleConverter = function(newLocale, thousands_sep, decimal_sep) {\n\n // constructor(newLocale = 'en-US', thousands_sep, decimal_sep) {\n if ('undefined' !== typeof newLocale && 0 < newLocale.length) {\n this.locale = newLocale.split('_').join('-');\n } else {\n this.locale = 'en-US';\n }\n\n this.thousands_sep = thousands_sep || ',';\n this.decimal_sep = decimal_sep || '.';\n // }\n\n this.uniqueElememts = function( value, index, self ) {\n return self.indexOf(value) === index;\n }\n\n this.numberDecoder = function(num) {\n num = num.toString();\n // let thousands_sep = ',';\n var formatted = '';\n\n // Account for negative numbers.\n var negative = false;\n \n if ('-' === num.charAt(0)) {\n negative = true;\n num = num.replace( '-', '' );\n }\n \n // Account for a space as the thousands separator.\n // This pattern accounts for all whitespace characters (including thin space).\n num = num.replace( /\\s/g, '' );\n num = num.replace( / /g, '' );\n\n // Determine what our existing separators are.\n var myArr = num.split('');\n var separators = myArr.filter(function(el) {\n return !el.match(/[0-9]/);\n });\n \n var final_separators = separators.filter(this.uniqueElememts);\n \n switch( final_separators.length ) {\n case 0:\n formatted = num;\n break;\n case 1:\n var replacer = '';\n if ( 1 == separators.length ) {\n separator = separators.pop();\n var sides = num.split(separator);\n var last = sides.pop();\n if ( 3 == last.length && separator == this.thousands_sep ) {\n replacer = '';\n } else {\n replacer = '.';\n }\n } else {\n separator = final_separators.pop();\n }\n\n formatted = num.split(separator).join(replacer);\n break;\n case 2:\n var find_one = final_separators[0];\n var re_one;\n if('.' === find_one) {\n re_one = new RegExp('[.]', 'g');\n } else {\n re_one = new RegExp(find_one, 'g');\n }\n formatted = num.replace(re_one, '');\n \n var find_two = final_separators[1];\n \n var re_two;\n if('.' === find_two) {\n re_two = new RegExp('[.]', 'g');\n } else {\n re_two = new RegExp(find_two, 'g');\n }\n formatted = formatted.replace(re_two, '.' );\n break;\n default:\n return 'NaN';\n }\n\n if ( negative ) {\n formatted = '-' + formatted;\n }\n this.debug('Number Decoder ' + num + ' -> ' + formatted );\n return formatted;\n }\n\n this.numberEncoder = function(num, percision) {\n num = this.numberDecoder(num);\n\n return Intl.NumberFormat(this.locale, { minimumFractionDigits: percision, maximumFractionDigits: percision }).format(num);\n }\n\n this.debug = function(message) {\n if ( window.nfLocaleConverterDebug || false ) console.log(message);\n }\n}\n\n// module.exports = nfLocaleConverter;\ndefine(\"../nfLocaleConverter\", function(){});\n\n","//Inline data converted to globally available vars sent via wp_localize_script\nif('undefined' !== typeof(nfInlineVars.nfForms)) {\n\twindow.nfForms = nfInlineVars.nfForms;\n}\n\n/*\n * Because our backbone listens to .change() events on elements, changes made using jQuery .val() don't bubble properly.\n * This patch overwrites the default behaviour of jQuery .val() so that IF the item has an nf-element class, we fire a change event.\n */\n( function( jQuery ) {\n\t/*\n\t * Store our original .val() function.\n\t */\n var originalVal = jQuery.fn.val;\n /*\n * Create our own .val() function.\n */\n jQuery.fn.val = function(){\n var prev;\n /* \n * Store a copy of the results of the original .val() call.\n * We use this to make sure that we've actually changed something.\n */\n if( arguments.length > 0 ){\n prev = originalVal.apply( this,[] );\n }\n /*\n * Get the results of the original .val() call. \n */\n var result = originalVal.apply( this, arguments );\n\n /*\n * If we have arguments, we have actually made a change, AND this has the nf-element class, trigger .change().\n */\n if( arguments.length > 0 && prev != originalVal.apply( this, [] ) && jQuery( this ).hasClass( 'nf-element' ) ) {\n\t\t\tjQuery(this).change();\n }\n\n return result;\n };\n} ) ( jQuery );\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n\trequire( [ 'models/formCollection', 'models/formModel', 'models/fieldCollection', 'controllers/loadControllers', 'views/mainLayout', '../nfLocaleConverter'], function( formCollection, FormModel, FieldCollection, LoadControllers, mainLayout ) {\n\n\t\tif( 'undefined' == typeof nfForms ) {\n\t\t\t/*\n\t\t\t * nfForms is not defined. This means that something went wrong loading the form data.\n\t\t\t * Bail form setup and empty the form containers to remove any loading animations.\n\t\t\t */\n\t\t\tjQuery( '.nf-form-cont' ).empty();\n\t\t\treturn;\n\t\t}\n\n\t\tvar NinjaForms = Marionette.Application.extend({\n\t\t\tforms: {},\n\t\t\tinitialize: function( options ) {\n\t\t\t\tvar that = this;\n\t\t\t\tMarionette.Renderer.render = function(template, data){\n\t\t\t\t\tvar template = that.template( template );\n\t\t\t\t\treturn template( data );\n\t\t\t\t};\n\n\t\t\t\t// Underscore one-liner for getting URL Parameters\n\t\t\t\tthis.urlParameters = _.object(_.compact(_.map(location.search.slice(1).split('&'), function(item) { if (item) return item.split('='); })));\n\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ) {\n\t\t\t\t\tthis.listenTo(nfRadio.channel('form-' + this.urlParameters.nf_resume), 'loaded', this.restart);\n\t\t\t\t}\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:decodeNumber', this.decodeNumber);\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:encodeNumber',this.encodeNumber);\n\n\t\t\t\tvar loadControllers = new LoadControllers();\n\t\t\t\tnfRadio.channel( 'app' ).trigger( 'after:loadControllers' );\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'get:template', this.template );\t\t\t},\n\t\t\t\n\t\t\tonStart: function() {\n\t\t\t\tvar formCollection = nfRadio.channel( 'app' ).request( 'get:forms' );\n\t\t\t\t_.each( formCollection.models, function( form, index ) {\n\t\t\t\t\tvar layoutView = new mainLayout( { model: form, fieldCollection: form.get( 'fields' ) } );\t\t\t\n\t\t\t\t\tnfRadio.channel( 'form' ).trigger( 'render:view', layoutView );\n\t\t\t\t\tjQuery( document ).trigger( 'nfFormReady', layoutView );\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\trestart: function( formModel ) {\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ){\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t\t\t'nf_resume': this.urlParameters\n\t\t\t\t\t};\n\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'disable:submit' );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'processingLabel' );\n\n\t\t\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', function() {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Hide form fields (but not the submit button).\n\t\t\t\t\t\t */\n\t\t\t\t\t\tjQuery( '#nf-form-' + formModel.get( 'id' ) + '-cont .nf-field-container:not(.submit-container)' ).hide();\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO: Refactor Duplication\n\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: nfFrontEnd.adminAjax,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\tcache: false,\n\t\t\t\t\t\tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t \t\tvar response = data;\n\t\t\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t },\n\t\t\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t\t\t // Handle errors here\n\t\t\t\t\t console.log('ERRORS: ' + textStatus);\n\t\t\t\t\t // STOP LOADING SPINNER\n\t\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', 'error', textStatus, jqXHR, errorThrown );\n\t\t\t\t\t }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttemplate: function( template ) {\n\t\t\t\tif (!template.startsWith('script')) {\n\t\t\t\t\ttemplate = 'script'+template;\n\t\t\t\t}\n\t\t\t\treturn _.template( jQuery( template ).html(), {\n\t\t\t\t\tevaluate: /<#([\\s\\S]+?)#>/g,\n\t\t\t\t\tinterpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n\t\t\t\t\tescape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n\t\t\t\t\tvariable: 'data'\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tencodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberEncoder(num);\n\t\t\t},\n\n\t\t\tdecodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberDecoder(num);\n\t\t\t}\n\t\t});\n\t\n\t\tvar ninjaForms = new NinjaForms();\n\t\tninjaForms.start();\t\t\n\t} );\n} );\n\ndefine(\"main\", function(){});\n\n"]}1 {"version":3,"sources":["../../../config-wrap-start-default.js","../../../node_modules/almond/almond.js","models/fieldErrorModel.js","models/fieldErrorCollection.js","models/fieldModel.js","models/fieldCollection.js","models/formErrorModel.js","models/formErrorCollection.js","models/formModel.js","models/formCollection.js","controllers/formData.js","controllers/fieldError.js","controllers/changeField.js","controllers/changeEmail.js","controllers/changeDate.js","controllers/fieldCheckbox.js","controllers/fieldCheckboxList.js","controllers/fieldImageList.js","controllers/fieldRadio.js","controllers/fieldNumber.js","controllers/mirrorField.js","controllers/confirmField.js","controllers/updateFieldModel.js","controllers/submitButton.js","controllers/submitDebug.js","controllers/getFormErrors.js","controllers/validateRequired.js","controllers/submitError.js","controllers/actionRedirect.js","controllers/actionSuccess.js","controllers/fieldSelect.js","controllers/coreSubmitResponse.js","controllers/fieldProduct.js","controllers/fieldTotal.js","controllers/fieldQuantity.js","models/calcModel.js","models/calcCollection.js","controllers/calculations.js","controllers/dateBackwardsCompat.js","controllers/fieldDate.js","controllers/fieldRecaptcha.js","controllers/fieldRecaptchaV3.js","controllers/fieldHTML.js","controllers/helpText.js","controllers/fieldTextbox.js","controllers/fieldTextareaRTE.js","controllers/fieldStarRating.js","controllers/fieldTerms.js","controllers/formContentFilters.js","views/fieldItem.js","views/beforeField.js","views/fieldErrorItem.js","views/fieldErrorCollection.js","views/inputLimit.js","views/afterField.js","views/fieldRepeaterFieldLayout.js","views/fieldRepeaterFieldCollection.js","views/fieldRepeaterSetLayout.js","views/fieldRepeaterSetCollection.js","views/fieldRepeaterLayout.js","views/fieldLayout.js","controllers/loadViews.js","controllers/formErrors.js","controllers/submit.js","views/fieldCollection.js","controllers/defaultFilters.js","controllers/uniqueFieldError.js","models/fieldRepeaterSetModel.js","models/fieldRepeaterSetCollection.js","controllers/fieldRepeater.js","controllers/actionGA.js","controllers/loadControllers.js","views/beforeForm.js","views/formErrorItem.js","views/formErrorCollection.js","views/honeyPot.js","views/afterFormContent.js","views/beforeFormContent.js","views/formLayout.js","views/afterForm.js","views/mainLayout.js","../nfLocaleConverter.js","main.js"],"names":["requirejs","require","define","undef","main","req","makeMap","handlers","defined","waiting","config","defining","hasOwn","Object","prototype","hasOwnProperty","aps","slice","jsSuffixRegExp","hasProp","obj","prop","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","starMap","length","nodeIdCompat","test","replace","charAt","concat","splice","join","makeRequire","relName","forceSync","args","arguments","push","apply","makeLoad","depName","value","callDep","Error","splitPrefix","prefix","index","indexOf","substring","makeRelParts","makeConfig","relParts","plugin","parts","relResourceName","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","Backbone","Model","extend","errorModel","Collection","model","fieldErrorCollection","defaults","placeholder","label_pos","classes","reRender","mirror_field","confirm_field","clean","disabled","visible","invalid","initialize","type","this","get","set","collection","options","formModel","listenTo","nfRadio","channel","resetModel","bind","changeModel","changeValue","listimageGet","listimageSet","trigger","formLoaded","beforeSubmit","attr","attributes","addWrapperClass","cl","removeWrapperClass","setInvalid","getValue","fieldModel","comparator","models","on","fieldCollection","reply","getFirstFieldByOrder","validateFields","_","each","repeaterModels","request","repeaterFieldModel","size","keys","showFields","invoke","hideFields","ids_array","targetID","order","FieldCollection","ErrorCollection","beforeForm","afterForm","beforeFields","afterFields","wrapper_class","element_class","hp","fieldErrors","extra","setting","formContentData","formContentLoadFilters","sortedArray","without","first","getFieldByKey","addError","removeError","getExtra","addExtra","removeExtra","getForm","key","findWhere","msg","add","errors","remove","extraData","FormModel","FormCollection","Marionette","nfForms","getForms","getField","form","String","fieldErrorModel","getError","targetError","changeField","blurField","el","val","radioChannel","emailReg","errorID","onChangeModelValue","emailKeyup","onBlurField","fieldID","emailChange","changeEmailErrorMsg","keyCode","dateKeyup","changeHoursMinutes","original","moment","locale","dateChange","format","isDateValid","changeDateErrorMsg","container","target","closest","selected_hour","find","selected_minute","selected_ampm","setValue","fieldId","search","document","querySelector","parseDate","_flatpickr","timestamp","getTime","isNaN","parsedDate","Date","formatDate","registerRenderClasses","validateRequired","validateModelData","beforeUpdateField","getCalcValue","addClass","removeClass","checked","calcValue","customClasses","customLabelClasses","maybeChecked","default_value","register","renderOptions","renderOtherText","selected","filter","opt","savedVal","Array","isArray","html","valueFound","option","label","nfFrontEnd","filter_esc_status","escape","isSelected","required","maybeFilterHTML","template","show_other","data","currentValue","calc_value","tmp_opt","Number","calc","parent","optionArray","valueIndex","clone","allow_multi_select","old_classname","image_type","list_orientation","flex_direction","that","num_columns","parseInt","current_column","current_row","image_options","image","show_option_labels","styles","changeModelValue","updateCheckedClass","maybeMinDefault","validateEntry","min","$el","floatVal","parseFloat","max","step","fieldNumberNumMinError","fieldNumberNumMaxError","testVal","testStep","factor","Math","pow","toFixed","fieldNumberIncrementBy","listeningModel","registerMirror","targetModel","registerConfirm","confirmKeyup","confirmModel","formModal","registerConfirmListeners","confirmID","confirmFieldErrorMsg","compareValue","confirmValue","updateField","submitButton","bound","registerHandlers","click","resetLabel","maybeEnable","maybeDisable","processingLabel","response","nonce","new_nonce","nonce_ts","submitDebug","textStatus","jqXHR","formID","debug","debugMessages","createElement","message","messageText","createTextNode","appendChild","console","log","getFormErrors","error","field","validateKeyup","customReqValidation","defaultReqValidation","maskPlaceholder","getMask","trim","valid","maybeError","mask","nfi18n","currencySymbol","validateRequiredField","submitErrors","focusFirstInvalidInput","ajaxNonce","fields","slug","last","style","show","getElementById","focus","actionRedirect","halt","redirect","window","location","actions","actionSubmit","success_message","form_id","read","top_of_success_message","offset","top","bottom_of_success_message","outerHeight","bottom_of_screen","scrollTop","height","top_of_screen","animate","renderOtherAttributes","otherAttributes","multi_size","settings","clear_complete","reset","hide_complete","renderProductQuantity","renderProduct","product_type","product_use_quantity","totalModel","productTotals","registerShipping","onFormLoaded","onChangeProduct","onChangeQuantity","shippingModel","shippingCost","fieldModels","productFields","quantityFields","productID","product","productPrice","updateTotal","newTotal","productField","registerQuantity","changeCalc","targetCalcModel","CalcModel","dec","toString","getCalc","CalcCollection","calcs","displayFields","registerCalcs","resetCalcs","use_merge_tags","calculations","fieldType","initDisplayField","updateDisplayFields","init","calcCollection","calcModel","setupCalc","eq","eqValues","match","RegExp","updateCalcFields","replaceKey","localeDecodeEquation","mexp","Mexp","eval","localeConverter","nfLocaleConverter","siteLocale","thousands_sep","decimal_point","machineNumber","numberDecoder","formattedNumber","numberEncoder","isNumeric","tag","reTag","calcTag","reCalcTag","replaceAllKeys","re","calcName","spans","spanVar","tmpCalcTag","applyLocaleFormatting","number","result","expression","pattern","forEach","character","nfCalculationsDebug","Radio","dateBackwardsCompat","dateObject","pikaday","_o","disableDayFn","i18n","firstDay","firstDayOfWeek","weekdays","longhand","weekdaysShort","shorthand","months","text","initModel","initDatepicker","registerFunctions","renderHourOptions","renderMinuteOptions","maybeRenderAMPM","hours_options","minutes_options","hours_24","view","hide","dateFormat","convertDateFormat","dateSettings","onReady","selectedDates","datestr","altInput","setAttribute","altFormat","ariaDateFormat","mode","allowInput","disableMobile","minDate","getMinDate","maxDate","getMaxDate","nfCustomLocale","checkCustomLocale","filteredDatePickerSettings","flatpickr","defaultDate","setDate","includes","isSameDay","isObject","date_value","dataset","hour","minute","ampm","current_value","date","yearRangeStart","yearRangeEnd","lookup","default","date_mode","customLocale","monthsShort","startOfWeek","isEmpty","date1","date2","d1","d2","setHours","initRecaptcha","resetRecaptcha","updateResponse","recaptchaID","grecaptcha","processRecaptcha","setInterval","ready","execute","action","then","token","layoutView","submitFieldID","consent","nf_check_recaptcha_consent","recaptchaConsentMissing","nf_build_default_consent_action","services","actionElement","innerText","recaptchaConsentEvent","nf_consent_link_event","CustomEvent","detail","element","dispatchEvent","genericErrorElements","getElementsByClassName","append","htmlFields","trackedMergeTags","setupFieldMergeTagTracking","mergeTags","mergeTag","fieldKey","updateFieldMergeTags","htmlFieldModel","fieldValue","displayRepeaterData","repeaterFieldIDs","returnHTML","passedFields","pop","initHelpText","jBox","theme","content","closeOnMouseleave","closeOnClick","close","currencySymbolDecoded","initTextareaRTEs","clickExtra","meta_image_frame","currentContext","summernote","icons","align","alignCenter","alignJustify","alignLeft","alignRight","indent","outdent","bold","caret","code","eraser","italic","link","unlink","magic","minus","orderedlist","redo","square","table","underline","undo","unorderedlist","toolbar","userSettings","uid","buttons","linkButton","context","mediaButton","codemirror","lineNumbers","prettifyHtml","callbacks","onChange","linkMenu","next","replaceWith","class","innerHTML","ui","linkDropdown","buttonGroup","button","className","contents","tooltip","fieldTextareaRTEInsertLink","clickLinkButton","toggle","dropdown","children","render","fieldTextareaRTEInsertMedia","openMediaManager","open","wp","media","frames","title","fieldTextareaRTESelectAFile","media_attachment","state","toJSON","insertMedia","range","textEl","urlEl","isNewWindowEl","hasClass","url","isNewWindow","filename","initRating","renderRatings","rating","number_of_stars","num","htmlFragment","createRange","createContextualFragment","keyUpExtra","currentTarget","addOption","new_option","viewFilters","loadFilters","addViewFilter","addLoadFilter","getViewFilters","getLoadFilters","priority","ItemView","tagName","toggleAriaInvalid","JSON","stringify","onRender","unwrap","setElement","isInteger","isFinite","floor","charCodeAt","autoNumericOptions","digitGroupSeparator","decimalCharacter","modifyValueOnWheel","autoN_el","AutoNumeric","templateHelpers","renderElement","tmpl","element_templates","renderLabel","renderLabelClasses","renderPlaceholder","customPlaceholder","renderWrapClass","wrapClass","parentType","customWrapClass","renderClasses","maybeDisabled","disable_input","maybeRequired","maybeDisableAutocomplete","disable_browser_autocomplete","translateAutoCompletionType","maybeInputLimit","input_limit_type","input_limit","getHelpText","help_text","maybeRenderHelp","check_text_par","shouldRenderHelpText","icon","classList","hiddenHelpText","textContent","outerHTML","renderDescText","desc_text","check","checkText","descriptionText","fieldDescription","renderNumberDefault","renderCurrencyFormatting","currency_symbol","maybeRenderTime","events","fieldChange","fieldKeyup","fieldClick","extraClick","extraChange","fieldBlur","onAttach","fieldErrorItem","CollectionView","childView","updateCount","count","words","wordCount","charCount","limit","currentCount","InputLimitView","changeError","errorEl","errorCollectionView","inputLimitEl","inputLimitView","fieldItem","beforeField","afterField","LayoutView","regions","getTemplate","renderContainerClass","containerClass","desc_pos","container_class","fieldLayout","removeSet","repeaterSetLayout","repeaterSetCollection","sets","addSet","repeaterFieldLayout","fieldItemView","fieldLayoutView","getFieldItem","getFieldLayout","errorMsg","formErrorsCorrectErrors","omit","registerSubmitHandler","submit","validate","blockingFormErrors","fieldDataDefaults","formData","security","ajax","adminAjax","cache","success","errorThrown","parseJSON","responseText","FieldCollectionView","registerDefaultDataFilter","defaultFormContentLoad","defaultFormContentView","currentFieldCollection","resetFields","nfAllRepeaterFieldsModels","initAllRepeaterFieldsModels","getRepeaterFields","getRepeaterFieldById","getAllRepeaterFieldsModels","getAllFieldsetsByForm","getAllFieldsModelsArrayByForm","setAllRepeaterFieldsModels","setAllRepeatersValues","allRepeatersFieldsetsModels","repeaterID","currentModels","isModelSet","thisFormModels","singleArray","allModels","reverseResearchFieldsetModel","fieldsetModel","startsWith","fieldObject","repeaters","repeater","repeaterFieldValue","idArray","newID","files","repeaterSetModel","sortIDs","getFieldSets","repeaterFieldID","templateFields","fieldset","removeRequiredFieldsErrors","isRepeaterModelSet","rep","fieldsetField","reject","destroy","getFieldsets","checkTimeField","hourEl","minEl","defaultHour","ampmEl","fieldsets","timeFields","modelIndex","cutEl","fieldIndex","initRepeater","actionSendGaEvent","googleanalytics","eventName","event_name","method_type","gtag","eventParams","event_category","event_label","dataLayer","warn","event","FormData","FieldError","ChangeField","ChangeEmail","ChangeDate","FieldCheckbox","FieldCheckboxList","FieldImageList","FieldRadio","FieldNumber","MirrorField","ConfirmField","UpdateFieldModel","SubmitButton","SubmitDebug","GetFormErrors","ValidateRequired","SubmitError","ActionRedirect","ActionSuccess","FieldSelect","CoreSubmitResponse","FieldProduct","FieldTotal","FieldQuantity","Calculations","DateBackwardsCompat","FieldDate","FieldRecaptcha","FieldRecaptchaV3","FieldHTML","HelpText","FieldTextbox","FieldTextareaRTE","FieldStarRating","FieldTerms","FormContentFilters","LoadViews","FormErrors","Submit","DefaultFilters","UniqueFieldError","FieldRepeater","ActionGA","formErrorItem","honeypotHoneypotError","HoneyPot","onShow","renderFieldsMarkedRequired","fieldsMarkedRequired","AfterFormContent","BeforeFormContent","beforeFormContent","formContent","afterFormContent","getEl","formContentViewFilters","formContentView","BeforeForm","FormLayout","AfterForm","responseMsg","formLayout","newLocale","decimal_sep","uniqueElememts","self","formatted","negative","separators","final_separators","replacer","separator","re_one","find_one","re_two","find_two","percision","Intl","NumberFormat","minimumFractionDigits","maximumFractionDigits","nfLocaleConverterDebug","nfInlineVars","originalVal","fn","prev","change","addEventListener","formCollection","LoadControllers","mainLayout","NinjaForms","Application","forms","Renderer","urlParameters","object","compact","item","nf_resume","restart","decodeNumber","encodeNumber","onStart","evaluate","interpolate","variable","start","empty"],"mappings":"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AK,UAAA,CAEA,MAAAH,EAAA,CACAK,MAAAT,EACAK,eAAA,cACAC,YAAA,qBACA5f,QAAAlD,EAAAhE,KAAAkH,SAEA6f,UAAAj1B,KAAA80B,EACA,KAAA,mBAAAD,KACA5hB,QAAAiiB,KAAA,4FAEAjiB,QAAAiiB,KAAA,iFAGAjiB,QAAAiiB,KAAA,kGAnCAjiB,QAAAiiB,KAAA,mFAuCA,GAKA,GAEAt4B,EC3DA,8BAAA,CACA,uBACA,yBACA,0BACA,0BACA,yBACA,4BACA,gCACA,6BACA,yBACA,0BACA,0BACA,2BACA,+BACA,2BACA,0BACA,4BACA,+BACA,0BACA,6BACA,4BACA,0BACA,iCACA,2BACA,yBACA,4BACA,2BACA,kCACA,wBACA,6BACA,+BACA,wBACA,uBACA,2BACA,+BACA,8BACA,yBACA,iCACA,wBACA,yBACA,qBACA,6BACA,+BACA,4BACA,wBAEA,SACAw4B,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAuEA,OArEAnvB,WAAArL,OAAAoF,OAAA,CACAgB,WAAA,WAKA,IAAA8zB,EACA,IAAAC,EACA,IAAAC,EAKA,IAAAlC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAW,EACA,IAAAE,EACA,IAAAC,EACA,IAAAC,EACA,IAAAI,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAK,EACA,IAAAC,EAKA,IAAAzC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EAEA,IAAAM,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAC,EACA,IAAAwB,EAEA,IAAAtB,EACA,IAAAI,EAEA,IAAAe,EAKA,IAAAd,EACA,IAAAC,EACA,IAAA3B,CAEA,GAIA,GAEAx4B,EAAA,mBAAA,GAAA,WC7JA,OANAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,wBAKA,GACApR,EAAA,sBAAA,GAAA,WCEA,OAXAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,sBAEA2b,SAAA,WAIA,GAIA,GACA/sB,EAAA,4BAAA,CAAA,uBAAA,SAAAo7B,GCRA,OALApvB,WAAA+kB,eAAAhrB,OAAA,CACA4mB,QAAA,YACAqE,UAAAoK,GAIA,GACAp7B,EAAA,iBAAA,GAAA,WCgBA,OAvBAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,mBAEAkf,OAAA,CACA,qBAAA,aACA,sBAAA,cAGArZ,WAAA,SAAAtS,GAKA,GAAA,GAAAiB,OAAAjB,EAAAsJ,QAAArB,MAAArK,OACAiF,QAAAC,QAAA,QAAAR,KAAAf,MAAAgB,IAAA,OAAAmC,QAAA,eAAA,gBACA,CACA,IAAA/B,EAAAE,QAAAC,QAAA,OAAA4B,QAAA,WAAApC,KAAAf,MAAAgB,IAAA,OACAM,QAAAC,QAAA,QAAAR,KAAAf,MAAAgB,IAAA,OAAAmC,QAAA,YAAA,WAAA/B,EAAAJ,IAAA,YAAAm0B,sBACA,CACA,GAIA,GACAr7B,EAAA,yBAAA,CAAA,4BAAA,kBAAA,SAAA86B,EAAAQ,GCRA,OAhBAtvB,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,wBAEA8gB,QAAA,CACAvmB,OAAA,kBACApB,GAAA,eAGAgxB,OAAA,WACAt0B,KAAA0E,OAAAkM,KAAA,IAAAijB,EAAA,CAAA1zB,WAAAH,KAAAf,MAAAgB,IAAA,aACAD,KAAAsD,GAAAsN,KAAA,IAAAyjB,EAAA,CAAAp1B,MAAAe,KAAAf,QACA,GAKA,GACAlG,EAAA,0BAAA,GAAA,WCDA,OAjBAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,yBAEAwc,gBAAA,WACA,MAAA,CAEA4N,2BAAA,WAGA,OADAv0B,KAAAwQ,OAAApH,OAAA,CAAAa,SAAA,IACA,OAAAjK,KAAAw0B,qBAAA,EACA,EAEA,GAKA,GACAz7B,EAAA,mBAAA,CAAA,yBAAA,0BAAA,0BAAA,SAAA07B,EAAAC,EAAA5xB,GCmEA,OAtFAiC,WAAAimB,WAAAlsB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,uBAEA8gB,QAAA,CACA0J,kBAAA,0BACAC,YAAA,mBACAC,iBAAA,0BAGA/0B,WAAA,WACAS,QAAAC,QAAA,QAAAR,KAAAf,MAAAgB,IAAA,OAAA6B,MAAA,SAAA9B,KAAA80B,MAAA90B,MAKAA,KAAAM,SAAAN,KAAAf,MAAA,OAAAe,KAAAmZ,KACA,EAEA2M,SAAA,WACA9lB,KAAAkM,IAAAlM,KAAAkM,IAAA8W,WACAhjB,KAAAkM,IAAA6Z,SACA/lB,KAAAgmB,WAAAhmB,KAAAkM,IACA,EAEAooB,OAAA,WACAt0B,KAAA20B,kBAAA/jB,KAAA,IAAA8jB,EAAA,CAAAz1B,MAAAe,KAAAf,SAKA,IAAAyE,EAAA1D,KAAAf,MAAAgB,IAAA,mBAMA80B,EAAAx0B,QAAAC,QAAA,eAAA4B,QAAA,mBAKAwB,EAAA3B,EAAA4B,QAAAkxB,OAAA12B,GACAN,EAAAkE,EAAA6B,MAAAF,GACAoxB,gBAAAj3B,IAEA,IAAAqC,EAAA,CACAiK,KAAA3G,EACArD,UAAAL,KAAAf,QAQA,GAAAyE,aAAA9E,SAAAI,WACAoB,EAAAD,WAAAuD,GACA,GAAAA,aAAA9E,SAAAC,QACAuB,EAAAnB,MAAAyE,GAGA1D,KAAA40B,YAAAhkB,KAAA,IAAAokB,gBAAA50B,IACAJ,KAAA60B,iBAAAjkB,KAAA,IAAA6jB,EAAA,CAAAx1B,MAAAe,KAAAf,QACA,EAEA61B,MAAA,WACA,OAAA90B,KAAA0F,EACA,EAEAihB,gBAAA,WACA,MAAA,CAEAY,cAAA,WACA,MAAA,EACA,EAGA,EAEApO,KAAA,WACAxa,OAAAqB,KAAA0F,IAAAyT,MACA,GAKA,GACApgB,EAAA,kBAAA,GAAA,WClFA,OANAgM,WAAA0gB,SAAA3mB,OAAA,CACA4mB,QAAA,aACAvb,SAAA,uBAKA,GACApR,EAAA,mBAAA,CAAA,mBAAA,mBAAA,mBAAA,SAAAk8B,EAAAC,EAAAC,GCwBA,OAhCApwB,WAAAimB,WAAAlsB,OAAA,CACAqL,SAAA,kBAEA8gB,QAAA,CACAmK,YAAA,mBACApyB,WAAA,kBACAqyB,WAAA,kBACApyB,UAAA,kBAGAnD,WAAA,WACAE,KAAAkM,IAAAvN,OAAA,YAAAqB,KAAAf,MAAArB,GAAA,SACAoC,KAAA0F,GAAA,YAAA1F,KAAAf,MAAArB,GAAA,QAEAoC,KAAAijB,SAEAjjB,KAAAgD,WAAA4N,KAAA,IAAAqkB,EAAA,CAAAh2B,MAAAe,KAAAf,SACAe,KAAAq1B,WAAAzkB,KAAA,IAAAskB,EAAA,CAAAj2B,MAAAe,KAAAf,MAAA4C,gBAAA7B,KAAAI,QAAAyB,mBACA7B,KAAAiD,UAAA2N,KAAA,IAAAukB,EAAA,CAAAl2B,MAAAe,KAAAf,SAKAe,KAAAM,SAAAN,KAAAf,MAAA,OAAAe,KAAAmZ,KACA,EAEAA,KAAA,WACAxa,OAAAqB,KAAA0F,IAAAyB,KAAA,kBAAAgS,MACA,GAKA,GChCA,IAAApD,EAAA,SAAAuf,EAAArf,EAAAsf,QAGA,IAAAD,GAAA,EAAAA,EAAAh6B,OACA0E,KAAA0G,OAAA4uB,EAAAn6B,MAAA,KAAAU,KAAA,KAEAmE,KAAA0G,OAAA,QAGA1G,KAAAiW,cAAAA,GAAA,IACAjW,KAAAu1B,YAAAA,GAAA,IAGAv1B,KAAAw1B,eAAA,SAAAj5B,EAAAK,EAAA64B,GACA,OAAAA,EAAA54B,QAAAN,KAAAK,CACA,EAEAoD,KAAAoW,cAAA,SAAAsO,GAGA,IAAAgR,EAAA,GAGAC,GAAA,EAEA,OAPAjR,EAAAA,EAAAtQ,YAOA1Y,OAAA,KACAi6B,GAAA,EACAjR,EAAAA,EAAAjpB,QAAA,IAAA,KASA,IACAm6B,GAJAlR,GADAA,EAAAA,EAAAjpB,QAAA,MAAA,KACAA,QAAA,UAAA,KAGAN,MAAA,IACAiO,OAAA,SAAA1D,GACA,OAAAA,EAAA4P,MAAA,QACA,GAEAugB,EAAAD,EAAAxsB,OAAApJ,KAAAw1B,gBAEA,OAAAK,EAAAv6B,QACA,KAAA,EACAo6B,EAAAhR,EACA,MACA,KAAA,EACA,IAAAoR,EAAA,GACA,GAAA,GAAAF,EAAAt6B,OACAy6B,UAAAH,EAAA9W,MAIAgX,EADA,GAFApR,EAAAvpB,MAAA46B,WACAjX,MACAxjB,QAAAy6B,WAAA/1B,KAAAiW,cACA,GAEA,SAGA8f,UAAAF,EAAA/W,MAGA4W,EAAAhR,EAAAvpB,MAAA46B,WAAAl6B,KAAAi6B,GACA,MACA,KAAA,EACA,IACAE,EADAC,EAAAJ,EAAA,GAGAG,EADA,MAAAC,EACA,IAAA1gB,OAAA,MAAA,KAEA,IAAAA,OAAA0gB,EAAA,KAEAP,EAAAhR,EAAAjpB,QAAAu6B,EAAA,IAEA,IAEAE,EAFAC,EAAAN,EAAA,GAIAK,EADA,MAAAC,EACA,IAAA5gB,OAAA,MAAA,KAEA,IAAAA,OAAA4gB,EAAA,KAEAT,EAAAA,EAAAj6B,QAAAy6B,EAAA,KACA,MACA,QACA,MAAA,MAOA,OAJAP,IACAD,EAAA,IAAAA,GAEA11B,KAAA6O,MAAA,kBAAA6V,EAAA,OAAAgR,GACAA,CACA,EAEA11B,KAAAsW,cAAA,SAAAoO,EAAA0R,GAGA,OAFA1R,EAAA1kB,KAAAoW,cAAAsO,GAEA2R,KAAAC,aAAAt2B,KAAA0G,OAAA,CAAA6vB,sBAAAH,EAAAI,sBAAAJ,IAAAxvB,OAAA8d,EACA,EAEA1kB,KAAA6O,MAAA,SAAAG,GACAkC,OAAAulB,wBAAArnB,QAAAC,IAAAL,EACA,CACA,EAGAjW,EAAA,uBAAA,WAAA,QC7GA,IAAA29B,aAAA,UACAxlB,OAAAlM,QAAA0xB,aAAA1xB,SAOA,SAAArG,GAIA,IAAAg4B,EAAAh4B,EAAAi4B,GAAAjxB,IAIAhH,EAAAi4B,GAAAjxB,IAAA,WACA,IAAAkxB,EAKA36B,UAAAZ,OAAA,IACAu7B,EAAAF,EAAAv6B,MAAA4D,KAAA,KAKA,IAAAoX,EAAAuf,EAAAv6B,MAAA4D,KAAA9D,WASA,OAJAA,UAAAZ,OAAA,GAAAu7B,GAAAF,EAAAv6B,MAAA4D,KAAA,KAAArB,EAAAqB,MAAAkkB,SAAA,eACAvlB,EAAAqB,MAAA82B,SAGA1f,CACA,CACA,CA/BA,CA+BAzY,QAEA8I,SAAAsvB,iBAAA,mBAAA,WACAj+B,EAAA,CAAA,wBAAA,mBAAA,yBAAA,8BAAA,mBAAA,wBAAA,SAAAk+B,EAAAnyB,EAAA/B,EAAAm0B,EAAAC,GAEA,GAAA,oBAAAlyB,QAAA,CASA,IAAAmyB,EAAApyB,WAAAqyB,YAAAt4B,OAAA,CACAu4B,MAAA,CAAA,EACAv3B,WAAA,SAAAM,GACA,IAAAgL,EAAApL,KACA+E,WAAAuyB,SAAArU,OAAA,SAAA9Y,EAAAE,GAEA,OADAF,EAAAiB,EAAAjB,SAAAA,IACAE,EACA,EAGArK,KAAAu3B,cAAAt1B,EAAAu1B,OAAAv1B,EAAAw1B,QAAAx1B,EAAA7G,IAAA+V,SAAA3J,OAAA1N,MAAA,GAAAqB,MAAA,KAAA,SAAAu8B,GAAA,GAAAA,EAAA,OAAAA,EAAAv8B,MAAA,IAAA,UAEA,IAAA6E,KAAAu3B,cAAAI,WACA33B,KAAAM,SAAAC,QAAAC,QAAA,QAAAR,KAAAu3B,cAAAI,WAAA,SAAA33B,KAAA43B,SAGAr3B,QAAAC,QAAA,OAAAsB,MAAA,sBAAA9B,KAAA63B,cAEAt3B,QAAAC,QAAA,OAAAsB,MAAA,sBAAA9B,KAAA83B,cAEA,IAAAb,EACA12B,QAAAC,QAAA,OAAAO,QAAA,yBAEAR,QAAAC,QAAA,OAAAsB,MAAA,eAAA9B,KAAAmK,SAAA,EAEA4tB,QAAA,WACA,IAAAf,EAAAz2B,QAAAC,QAAA,OAAA4B,QAAA,aACAH,EAAAC,KAAA80B,EAAAr1B,OAAA,SAAAwD,EAAAvI,GACA,IAAAmgB,EAAA,IAAAma,EAAA,CAAAj4B,MAAAkG,EAAAtD,gBAAAsD,EAAAlF,IAAA,YACAM,QAAAC,QAAA,QAAAO,QAAA,cAAAgc,GACApe,OAAA8I,UAAA1G,QAAA,cAAAgc,EACA,EACA,EAEA6a,QAAA,SAAAv3B,GACA,QAAA,IAAAL,KAAAu3B,cAAAI,UAAA,CACA,IAAAttB,EAAA,CACAuS,OAAA,iBACA+P,SAAA9iB,WAAA0G,UACAonB,UAAA33B,KAAAu3B,eAGAh3B,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBACAR,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,mBAEAf,KAAAM,SAAAC,QAAAC,QAAA,QAAA,cAAA,WAOA7B,OAAA,YAAA0B,EAAAJ,IAAA,MAAA,oDAAAkZ,MACA,GAGAxa,OAAAiuB,KAAA,CACAzI,IAAAta,WAAAgjB,UACA9sB,KAAA,OACAsK,KAAAA,EACAyiB,OAAA,EACAC,QAAA,SAAA1iB,EAAAqE,EAAAC,GACA,IACA,IAAAN,EAAAhE,EACA9J,QAAAC,QAAA,SAAAO,QAAA,kBAAAsN,EAAAK,EAAAC,EAAAtO,EAAAJ,IAAA,OACAM,QAAAC,QAAA,QAAAH,EAAAJ,IAAA,OAAAc,QAAA,kBAAAsN,EAAAK,EAAAC,EACA,CAAA,MAAAjR,GACA0R,QAAAC,IAAA,cACA,CAEA,EACAE,MAAA,SAAAZ,EAAAD,EAAAse,GAEA5d,QAAAC,IAAA,WAAAX,GAEAnO,QAAAC,QAAA,SAAAO,QAAA,kBAAA,QAAA2N,EAAAC,EAAAqe,EACA,GAEA,CACA,EAEA7iB,SAAA,SAAAA,GAIA,OAHAA,EAAAwkB,WAAA,YACAxkB,EAAA,SAAAA,GAEAlI,EAAAkI,SAAAxL,OAAAwL,GAAAV,OAAA,CACAuuB,SAAA,kBACAC,YAAA,0BACAluB,OAAA,2BACAmuB,SAAA,QAEA,EAEAJ,aAAA,SAAApT,GAGA,OAFA,IAAA3O,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eAEAI,cAAAoO,EACA,EAEAmT,aAAA,SAAAnT,GAGA,OAFA,IAAA3O,EAAA7F,OAAA8F,WAAA9F,OAAA+F,cAAA/F,OAAAgG,eAEAE,cAAAsO,EACA,KAGA,IAAAyS,GACAgB,OA7GA,MAFAx5B,OAAA,iBAAAy5B,OAgHA,EACA,GAEAr/B,EAAA,OAAA,WAAA,EAEA,ClFvKA","file":"front-end.js","sourcesContent":["(function () {\n","/**\n * @license almond 0.3.3 Copyright jQuery Foundation and other contributors.\n * Released under MIT license, http://github.com/requirejs/almond/LICENSE\n */\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\n//be followed.\n/*global setTimeout: false */\n\nvar requirejs, require, define;\n(function (undef) {\n var main, req, makeMap, handlers,\n defined = {},\n waiting = {},\n config = {},\n defining = {},\n hasOwn = Object.prototype.hasOwnProperty,\n aps = [].slice,\n jsSuffixRegExp = /\\.js$/;\n\n function hasProp(obj, prop) {\n return hasOwn.call(obj, prop);\n }\n\n /**\n * Given a relative module name, like ./something, normalize it to\n * a real name that can be mapped to a path.\n * @param {String} name the relative name\n * @param {String} baseName a real name that the name arg is relative\n * to.\n * @returns {String} normalized name\n */\n function normalize(name, baseName) {\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\n foundI, foundStarMap, starI, i, j, part, normalizedBaseParts,\n baseParts = baseName && baseName.split(\"/\"),\n map = config.map,\n starMap = (map && map['*']) || {};\n\n //Adjust any relative paths.\n if (name) {\n name = name.split('/');\n lastIndex = name.length - 1;\n\n // If wanting node ID compatibility, strip .js from end\n // of IDs. Have to do this here, and not in nameToUrl\n // because node allows either .js or non .js to map\n // to same file.\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\n }\n\n // Starts with a '.' so need the baseName\n if (name[0].charAt(0) === '.' && baseParts) {\n //Convert baseName to array, and lop off the last part,\n //so that . matches that 'directory' and not name of the baseName's\n //module. For instance, baseName of 'one/two/three', maps to\n //'one/two/three.js', but we want the directory, 'one/two' for\n //this normalization.\n normalizedBaseParts = baseParts.slice(0, baseParts.length - 1);\n name = normalizedBaseParts.concat(name);\n }\n\n //start trimDots\n for (i = 0; i < name.length; i++) {\n part = name[i];\n if (part === '.') {\n name.splice(i, 1);\n i -= 1;\n } else if (part === '..') {\n // If at the start, or previous value is still ..,\n // keep them so that when converted to a path it may\n // still work when converted to a path, even though\n // as an ID it is less than ideal. In larger point\n // releases, may be better to just kick out an error.\n if (i === 0 || (i === 1 && name[2] === '..') || name[i - 1] === '..') {\n continue;\n } else if (i > 0) {\n name.splice(i - 1, 2);\n i -= 2;\n }\n }\n }\n //end trimDots\n\n name = name.join('/');\n }\n\n //Apply map config if available.\n if ((baseParts || starMap) && map) {\n nameParts = name.split('/');\n\n for (i = nameParts.length; i > 0; i -= 1) {\n nameSegment = nameParts.slice(0, i).join(\"/\");\n\n if (baseParts) {\n //Find the longest baseName segment match in the config.\n //So, do joins on the biggest to smallest lengths of baseParts.\n for (j = baseParts.length; j > 0; j -= 1) {\n mapValue = map[baseParts.slice(0, j).join('/')];\n\n //baseName segment has config, find if it has one for\n //this name.\n if (mapValue) {\n mapValue = mapValue[nameSegment];\n if (mapValue) {\n //Match, update name to the new value.\n foundMap = mapValue;\n foundI = i;\n break;\n }\n }\n }\n }\n\n if (foundMap) {\n break;\n }\n\n //Check for a star map match, but just hold on to it,\n //if there is a shorter segment match later in a matching\n //config, then favor over this star map.\n if (!foundStarMap && starMap && starMap[nameSegment]) {\n foundStarMap = starMap[nameSegment];\n starI = i;\n }\n }\n\n if (!foundMap && foundStarMap) {\n foundMap = foundStarMap;\n foundI = starI;\n }\n\n if (foundMap) {\n nameParts.splice(0, foundI, foundMap);\n name = nameParts.join('/');\n }\n }\n\n return name;\n }\n\n function makeRequire(relName, forceSync) {\n return function () {\n //A version of a require function that passes a moduleName\n //value for items that may need to\n //look up paths relative to the moduleName\n var args = aps.call(arguments, 0);\n\n //If first arg is not require('string'), and there is only\n //one arg, it is the array form without a callback. Insert\n //a null so that the following concat is correct.\n if (typeof args[0] !== 'string' && args.length === 1) {\n args.push(null);\n }\n return req.apply(undef, args.concat([relName, forceSync]));\n };\n }\n\n function makeNormalize(relName) {\n return function (name) {\n return normalize(name, relName);\n };\n }\n\n function makeLoad(depName) {\n return function (value) {\n defined[depName] = value;\n };\n }\n\n function callDep(name) {\n if (hasProp(waiting, name)) {\n var args = waiting[name];\n delete waiting[name];\n defining[name] = true;\n main.apply(undef, args);\n }\n\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\n throw new Error('No ' + name);\n }\n return defined[name];\n }\n\n //Turns a plugin!resource to [plugin, resource]\n //with the plugin being undefined if the name\n //did not have a plugin prefix.\n function splitPrefix(name) {\n var prefix,\n index = name ? name.indexOf('!') : -1;\n if (index > -1) {\n prefix = name.substring(0, index);\n name = name.substring(index + 1, name.length);\n }\n return [prefix, name];\n }\n\n //Creates a parts array for a relName where first part is plugin ID,\n //second part is resource ID. Assumes relName has already been normalized.\n function makeRelParts(relName) {\n return relName ? splitPrefix(relName) : [];\n }\n\n /**\n * Makes a name map, normalizing the name, and using a plugin\n * for normalization if necessary. Grabs a ref to plugin\n * too, as an optimization.\n */\n makeMap = function (name, relParts) {\n var plugin,\n parts = splitPrefix(name),\n prefix = parts[0],\n relResourceName = relParts[1];\n\n name = parts[1];\n\n if (prefix) {\n prefix = normalize(prefix, relResourceName);\n plugin = callDep(prefix);\n }\n\n //Normalize according\n if (prefix) {\n if (plugin && plugin.normalize) {\n name = plugin.normalize(name, makeNormalize(relResourceName));\n } else {\n name = normalize(name, relResourceName);\n }\n } else {\n name = normalize(name, relResourceName);\n parts = splitPrefix(name);\n prefix = parts[0];\n name = parts[1];\n if (prefix) {\n plugin = callDep(prefix);\n }\n }\n\n //Using ridiculous property names for space reasons\n return {\n f: prefix ? prefix + '!' + name : name, //fullName\n n: name,\n pr: prefix,\n p: plugin\n };\n };\n\n function makeConfig(name) {\n return function () {\n return (config && config.config && config.config[name]) || {};\n };\n }\n\n handlers = {\n require: function (name) {\n return makeRequire(name);\n },\n exports: function (name) {\n var e = defined[name];\n if (typeof e !== 'undefined') {\n return e;\n } else {\n return (defined[name] = {});\n }\n },\n module: function (name) {\n return {\n id: name,\n uri: '',\n exports: defined[name],\n config: makeConfig(name)\n };\n }\n };\n\n main = function (name, deps, callback, relName) {\n var cjsModule, depName, ret, map, i, relParts,\n args = [],\n callbackType = typeof callback,\n usingExports;\n\n //Use name if no relName\n relName = relName || name;\n relParts = makeRelParts(relName);\n\n //Call the callback to define the module, if necessary.\n if (callbackType === 'undefined' || callbackType === 'function') {\n //Pull out the defined dependencies and pass the ordered\n //values to the callback.\n //Default to [require, exports, module] if no deps\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\n for (i = 0; i < deps.length; i += 1) {\n map = makeMap(deps[i], relParts);\n depName = map.f;\n\n //Fast path CommonJS standard dependencies.\n if (depName === \"require\") {\n args[i] = handlers.require(name);\n } else if (depName === \"exports\") {\n //CommonJS module spec 1.1\n args[i] = handlers.exports(name);\n usingExports = true;\n } else if (depName === \"module\") {\n //CommonJS module spec 1.1\n cjsModule = args[i] = handlers.module(name);\n } else if (hasProp(defined, depName) ||\n hasProp(waiting, depName) ||\n hasProp(defining, depName)) {\n args[i] = callDep(depName);\n } else if (map.p) {\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\n args[i] = defined[depName];\n } else {\n throw new Error(name + ' missing ' + depName);\n }\n }\n\n ret = callback ? callback.apply(defined[name], args) : undefined;\n\n if (name) {\n //If setting exports via \"module\" is in play,\n //favor that over return value and exports. After that,\n //favor a non-undefined return value over exports use.\n if (cjsModule && cjsModule.exports !== undef &&\n cjsModule.exports !== defined[name]) {\n defined[name] = cjsModule.exports;\n } else if (ret !== undef || !usingExports) {\n //Use the return value from the function.\n defined[name] = ret;\n }\n }\n } else if (name) {\n //May just be an object definition for the module. Only\n //worry about defining if have a module name.\n defined[name] = callback;\n }\n };\n\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\n if (typeof deps === \"string\") {\n if (handlers[deps]) {\n //callback in this case is really relName\n return handlers[deps](callback);\n }\n //Just return the module wanted. In this scenario, the\n //deps arg is the module name, and second arg (if passed)\n //is just the relName.\n //Normalize module name, if it contains . or ..\n return callDep(makeMap(deps, makeRelParts(callback)).f);\n } else if (!deps.splice) {\n //deps is a config object, not an array.\n config = deps;\n if (config.deps) {\n req(config.deps, config.callback);\n }\n if (!callback) {\n return;\n }\n\n if (callback.splice) {\n //callback is an array, which means it is a dependency list.\n //Adjust args if there are dependencies\n deps = callback;\n callback = relName;\n relName = null;\n } else {\n deps = undef;\n }\n }\n\n //Support require(['a'])\n callback = callback || function () {};\n\n //If relName is a function, it is an errback handler,\n //so remove it.\n if (typeof relName === 'function') {\n relName = forceSync;\n forceSync = alt;\n }\n\n //Simulate async callback;\n if (forceSync) {\n main(undef, deps, callback, relName);\n } else {\n //Using a non-zero value because of concern for what old browsers\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\n //If want a value immediately, use require('id') instead -- something\n //that works in almond on the global level, but not guaranteed and\n //unlikely to work in other AMD implementations.\n setTimeout(function () {\n main(undef, deps, callback, relName);\n }, 4);\n }\n\n return req;\n };\n\n /**\n * Just drops the config on the floor, but returns req in case\n * the config return value is used.\n */\n req.config = function (cfg) {\n return req(cfg);\n };\n\n /**\n * Expose module registry for debugging and tooling\n */\n requirejs._defined = defined;\n\n define = function (name, deps, callback) {\n if (typeof name !== 'string') {\n throw new Error('See almond README: incorrect module build, no module name');\n }\n\n //This module may not have dependencies\n if (!deps.splice) {\n //deps is not an array, so probably means\n //an object literal or factory function for\n //the value. Adjust args.\n callback = deps;\n deps = [];\n }\n\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\n waiting[name] = [name, deps, callback];\n }\n };\n\n define.amd = {\n jQuery: true\n };\n}());\n\ndefine(\"../../../node_modules/almond/almond\", function(){});\n\n","define( 'models/fieldErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/fieldErrorCollection',['models/fieldErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/fieldModel',['models/fieldErrorCollection'], function( fieldErrorCollection ) {\n\tvar model = Backbone.Model.extend( {\n\t\tdefaults: {\n\t\t\tplaceholder: '',\n\t\t\tvalue: '',\n\t\t\tlabel_pos: '',\n\t\t\tclasses: 'ninja-forms-field',\n\t\t\treRender: false,\n\t\t\tmirror_field: false,\n\t\t\tconfirm_field: false,\n\t\t\tclean: true,\n\t\t\tdisabled: '',\n\t\t\tvisible: true,\n\t\t\tinvalid: false\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tvar type = this.get('type');\n\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'reset', this.resetModel );\n\n \t\tthis.bind( 'change', this.changeModel, this );\n \t\tthis.bind( 'change:value', this.changeValue, this );\n \t\tthis.set( 'errors', new fieldErrorCollection() );\n\n\t\t\tif (type === 'listimage') {\n\t\t\t\tthis.get = this.listimageGet;\n\t\t\t\tthis.set = this.listimageSet;\n\t\t\t}\n\n \t\t/*\n\t\t\t * Trigger an init event on two channels:\n\t\t\t * \n\t\t\t * fields\n\t\t\t * field-type\n\t\t\t *\n\t\t\t * This lets specific field types modify model attributes before anything uses them.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'init:model', this );\n\n\t\t\tif( 'undefined' != typeof this.get( 'parentType' ) ){\n\t\t\t\tnfRadio.channel( this.get( 'parentType' ) ).trigger( 'init:model', this );\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * When we load our form, fire another event for this field.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'loaded', this.formLoaded );\n\t\t\n\t\t\t/*\n\t\t\t * Before we submit our form, send out a message so that this field can be modified if necessary.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'form-' + this.get( 'formID' ) ), 'before:submit', this.beforeSubmit );\n\t\t},\n\n\t\tlistimageGet: function(attr) {\n if(attr === 'options') {\n\t\t\t\t\tattr = 'image_options';\n\t\t\t}\n\n return Backbone.Model.prototype.get.call(this, attr);\n\t\t},\n\t\t\n\t\tlistimageSet: function(attributes, options) {\n\t\t\tif ('options' === attributes) {\n\t\t\t\tattributes = 'image_options';\n\t\t\t}\n\t\t\treturn Backbone.Model.prototype.set.call(this, attributes, options);\n\t\t},\n\n\t\tchangeModel: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:model', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:model', this );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'field-' + this.get( 'id' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'change:modelValue', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:modelValue', this );\n\t\t},\n\n\t\taddWrapperClass: function( cl ) {\n\t\t\tthis.set( 'addWrapperClass', cl );\n\t\t},\n\n\t\tremoveWrapperClass: function( cl ) {\n\t\t\tthis.set( 'removeWrapperClass', cl );\n\t\t},\n\n\t\tsetInvalid: function( invalid ) {\n\t\t\tthis.set( 'invalid', invalid );\n\t\t},\n\n\t\tformLoaded: function() {\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'formLoaded', this );\n\t\t\tnfRadio.channel( 'fields-' + this.get( 'type' ) ).trigger( 'formLoaded', this );\n\t\t},\n\n\t\tbeforeSubmit: function( formModel ) {\n\t\t\tnfRadio.channel( this.get( 'type' ) ).trigger( 'before:submit', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'before:submit', this );\n\t\t},\n\n\t\t/**\n\t\t * Return the value of this field.\n\t\t * This method exists so that more complex fields can return more than just the field value.\n\t\t * Those advanced fields should create their own method with this name.\n\t\t * \n\t\t * @since 3.5\n\t\t * @return {string} Value of this field.\n\t\t */\n\t\tgetValue: function() {\n\t\t\treturn this.get( 'value' );\n\t\t}\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldCollection',['models/fieldModel'], function( fieldModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: fieldModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n this.on( 'reset', function( fieldCollection ){\n nfRadio.channel( 'fields' ).trigger( 'reset:collection', fieldCollection );\n }, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:firstFieldByOrder', this.getFirstFieldByOrder );\n\t\t},\n\n\t\tvalidateFields: function() {\n\t\t\t_.each( this.models, function( fieldModel ) {\n\t\t\t\tif(fieldModel.get(\"type\") === \"repeater\"){\n\t\t\t\t\tconst repeaterModels = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldsModelsArrayByForm', fieldModel.get('formID') );\n\t\t\t\t\t_.each( repeaterModels, function( repeaterFieldModel ) {\n\t\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\t\trepeaterFieldModel.set( 'clean', false );\n\t\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', repeaterFieldModel );\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\t// added here for help with multi-part part validation\n\t\t\t\t\tfieldModel.set( 'clean', false );\n\t\t\t\t\tnfRadio.channel( 'submit' ).trigger( 'validate:field', fieldModel );\n\t\t\t\t}\n\t\t\t}, this );\n\t\t\t//Focus the first invalid input when found\n\t\t\tvar formModel = nfRadio.channel( 'form-' + this.models[0].get( 'formID' ) ).request( 'get:form' );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t},\n\n\t\tshowFields: function() {\n\t\t\tthis.invoke( 'set', { visible: true } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\thideFields: function() {\n\t\t\tthis.invoke( 'set', { visible: false } );\n this.invoke( function() {\n this.trigger( 'change:value', this );\n });\n\t\t},\n\n\t\tgetFirstFieldByOrder: function( ids_array ) {\n\t\t\tlet targetID = 0;\n\t\t\t//Loop through an array of fieldIDs to return the one that is positioned first\n\t\t\t_.each(ids_array, function( id ) {\n\t\t\t\t//Get field order\n\t\t\t\tconst order = nfRadio.channel( 'fields' ).request( 'get:field', id ).get('order');\n\t\t\t\t//Set it as the target when the lowest order is found\n\t\t\t\ttargetID = (targetID === 0 || order < targetID) ? id : targetID;\n\t\t\t});\n\n\t\t\treturn targetID;\n\t\t}\n\t} );\n\treturn collection;\n} );\n\n","define( 'models/formErrorModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t} );\n\t\n\treturn model;\n} );\n","define( 'models/formErrorCollection',['models/formErrorModel'], function( errorModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: errorModel\n\t} );\n\treturn collection;\n} );\n","define( 'models/formModel',[\n\t'models/fieldCollection',\n\t'models/formErrorCollection'\n\t], function(\n\t\tFieldCollection,\n\t\tErrorCollection\n\t) {\n\tvar model = Backbone.Model.extend({\n\t\tdefaults: {\n\t\t\tbeforeForm: '',\n\t\t\tafterForm: '',\n\t\t\tbeforeFields: '',\n\t\t\tafterFields: '',\n\t\t\twrapper_class: '',\n\t\t\telement_class: '',\n\t\t\thp: '',\n\t\t\tfieldErrors: {},\n\t\t\textra: {}\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\t// Loop over settings and map to attributes\n\t\t\t_.each( this.get( 'settings' ), function( value, setting ) {\n\t\t\t\tthis.set( setting, value );\n\t\t\t}, this );\n\n\t\t\tthis.set( 'loadedFields', this.get( 'fields' ) );\n\t\t\tthis.set( 'fields', new FieldCollection( this.get( 'fields' ), { formModel: this } ) );\n\t\t\tthis.set( 'errors', new ErrorCollection() );\n\n\t\t\t/*\n\t\t\t * Send out a radio message so that anyone who wants to filter our content data can register their filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).trigger( 'before:filterData', this );\n\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.get( 'formContentData' );\n\n\t\t\t/*\n\t\t\t * The formContentData variable used to be fieldContentsData.\n\t\t\t * If we don't have a 'formContentData' setting, check to see if we have an old 'fieldContentsData'.\n\t\t\t * \n\t\t\t * TODO: This is for backwards compatibility and should be removed eventually. \n\t\t\t */\n\t\t\tif ( ! formContentData ) {\n\t\t\t\tformContentData = this.get( 'fieldContentsData' );\n\t\t\t}\n\t\t\t\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentData = callback( formContentData, this, this );\n\t\t\t\n\t\t\tthis.set( 'formContentData', formContentData );\n\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'init:model', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'init:model', this );\n\n\t\t\t// Fields\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:fieldByKey', this.getFieldByKey, this );\n\n\t\t\t// Form Errors\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:error', this.addError, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:error', this.removeError, this );\n\n\t\t\t// Extra Data\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:extra', this.getExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'add:extra', this.addExtra, this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'remove:extra', this.removeExtra, this );\n\t\t\n\t\t\t// Respond to requests to get this model.\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).reply( 'get:form', \t this.getForm, \t this );\n\n\t\t\tnfRadio.channel( 'form' ).trigger( 'loaded', this );\n\t\t\tnfRadio.channel( 'form' ).trigger( 'after:loaded', this );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'loaded', \t this );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Fields\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetFieldByKey: function( key ) {\n\t\t\treturn this.get( 'fields' ).findWhere( { key: key } );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Form Errors\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\taddError: function( id, msg ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\terrors.add( { id: id, msg: msg } );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:error', this, id, msg );\n\t\t},\n\n\t\tremoveError: function( id ) {\n\t\t\tvar errors = this.get( 'errors' );\n\t\t\tvar errorModel = errors.get( id );\n\t\t\terrors.remove( errorModel );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:error', this, id );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Extra Data\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\n\t\tgetExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tif( 'undefined' == typeof key ) return extraData;\n\t\t\treturn extraData[ key ];\n\t\t},\n\n\t\taddExtra: function( key, value ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\textraData[ key ] = value;\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'add:extra', this, key, value );\n\t\t},\n\n\t\tremoveExtra: function( key ) {\n\t\t\tvar extraData = this.get( 'extra' );\n\t\t\tdelete extraData[ key ];\n\t\t\tnfRadio.channel( 'form-' + this.get( 'id' ) ).trigger( 'remove:extra', this, key );\n\t\t},\n\n\t\t/*\n\t\t |--------------------------------------------------------------------------\n\t\t | Get this form\n\t\t |--------------------------------------------------------------------------\n\t\t */\n\t\tgetForm: function() {\n\t\t\treturn this;\n\t\t}\n\t} );\n\n\treturn model;\n} );\n","define( 'models/formCollection',['models/formModel'], function( formModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: formModel\n\t} );\n\treturn collection;\n} );\n","/*\n * Handles setting up our form.\n *\n * Holds a collection of our fields.\n * Replies to requests for field data.\n * Updates field models.\n */\ndefine('controllers/formData',['models/formModel', 'models/formCollection', 'models/fieldCollection', 'models/formErrorCollection'], function( FormModel, FormCollection, FieldCollection, ErrorCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\t/*\n\t\t\t * Setup our field collections.\n\t\t\t */\n\t\t\tvar that = this;\n\n\t\t\t/*\n\t\t\t * Initialize our form collection (incase we have multiple forms on the page)\n\t\t\t */\n\t\t\tthis.collection = new FormCollection( nfForms );\t\t\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'loaded', this.collection );\n\t\t\tnfRadio.channel( 'app' ).trigger( 'forms:loaded', this.collection );\n\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:form', this.getForm, this );\n\t\t\tnfRadio.channel( 'app' ).reply( 'get:forms', this.getForms, this );\n\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:field', this.getField, this );\n\t\t},\n\n\t\tgetForm: function( id ) {\n\t\t\treturn this.collection.get( id );\n\t\t},\n\n\t\tgetForms: function() {\n\t\t\treturn this.collection;\n\t\t},\n\n\t\tgetField: function( id ) {\n\t\t\tvar model = false;\n\t\t\t\n\t\t\t_.each( this.collection.models, function( form ) {\n\t\t\t\tif ( ! model ) {\n\t\t\t\t\tmodel = form.get( 'fields' ).get( id );\t\n\t\t\t\t}\t\t\t\n\t\t\t} );\n\n\t\t\tif(typeof model == \"undefined\" && String(id).indexOf('.') !== -1){\n\t\t\t\tmodel = nfRadio.channel( \"field-repeater\" ).request( 'get:repeaterFieldById', id );\n\t\t\t}\n\t\t\t\n\t\t\treturn model;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldError',['models/fieldErrorModel'], function( fieldErrorModel ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'fields' ).reply( 'add:error', this.addError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'remove:error', this.removeError );\n\t\t\tnfRadio.channel( 'fields' ).reply( 'get:error', this.getError );\n\t\t},\n\n\t\taddError: function( targetID, id, msg ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\terrors.add( { 'id': id, 'msg' : msg } );\n\t\t\tmodel.set( 'errors', errors );\n\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\tmodel.set( 'clean', false );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'add:error', model, id, msg );\n\t\t},\n\n\t\tremoveError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\n\t\t\tif( 'undefined' == typeof model ) return;\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\n\t\t\tif ( 'undefined' != typeof targetError ) {\n\t\t\t\terrors.remove( targetError );\n\t\t\t\tmodel.set( 'errors', errors );\n\t\t\t\tmodel.trigger( 'change:errors', model );\n\t\t\t\tnfRadio.channel( 'fields' ).trigger( 'remove:error', model, id );\n\t\t\t}\n\t\t},\n\n\t\tgetError: function( targetID, id ) {\n\t\t\tvar model = nfRadio.channel( 'fields' ).request( 'get:field', targetID );\n\t\t\tvar errors = model.get( 'errors' );\n\t\t\tvar targetError = errors.get( id );\n\t\t\tif ( 'undefined' != targetError ) {\n\t\t\t\treturn targetError;\n\t\t\t} else {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for replying to a Radio request stating that a field has been changed.\n *\n * This controller sends out a message to the field-specific channel, the field type channel,\n * and the public fields channel so that the data model can be updated.\n */\n\ndefine('controllers/changeField',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Reply to our request for changing a field.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'change:field', this.changeField );\n\n\t\t\t/*\n\t\t\t * If we blur our field, set the model attribute of 'clean' to false.\n\t\t\t * 'clean' tracks whether or not the user has every interacted with this element.\n\t\t\t * Some validation, like required, uses this to decide whether or not to add an error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.blurField );\n\t\t},\n\n\t\tchangeField: function( el, model ) {\n\t\t\t// Get our current value.\n\t\t\tvar value = nfRadio.channel( model.get( 'type' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : nfRadio.channel( model.get( 'parentType' ) ).request( 'before:updateField', el, model );\n\t\t\tvalue = ( 'undefined' != typeof value ) ? value : jQuery( el ).val();\n\n\t\t\t// Set our 'isUpdated' flag to false.\n\t\t\tmodel.set( 'isUpdated', false );\n\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\n\t\t\t/*\n\t\t\t * Send out a message saying that we've changed a field.\n\t\t\t * The first channel is field id/key specific.\n\t\t\t * The second channel is the field type, i.e. text, email, radio\n\t\t\t * The third channel is a generic 'field' channel.\n\t\t\t *\n\t\t\t * If the submitted value you wish to store in the data model isn't the same as the value received above,\n\t\t\t * you can set that model in the actions below and set the 'isUpdated' model attribute to true.\n\t\t\t * i.e. model.set( 'isUpdated', true );\n\t\t\t */\n\t\t\tnfRadio.channel( 'field-' + model.get( 'id' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( model.get( 'type' ) ).trigger( 'change:field', el, model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:field', el, model );\n\n\t\t\t/*\n\t\t\t * Send a request out on our nfAdmin channel to update our field model.\n\t\t\t * If the field model has a 'isUpdated' property of false, nothing will be updated.\n\t\t\t */\n\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', model, value );\n\n\t\t\t/*\n\t\t\t * If the field is in a repeater, update the repeater Value\n\t\t\t */\n\t\t\tif(model.get(\"repeaterField\")){\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t\t}\n\t\t},\n\n\t\tblurField: function( el, model ) {\n\t\t\t// Set our 'clean' flag to false.\n\t\t\tmodel.set( 'clean', false );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeEmail',[], function() {\n\tvar radioChannel = nfRadio.channel( 'email' );\n\t// var emailReg = /^([\\w-]+(?:\\.[\\w-]+)*)@((?:[\\w-]+\\.)*\\w[\\w-]{0,66})\\.([a-z]{2,6}(?:\\.[a-z]{2})?)$/i;\n\tvar emailReg = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\n\tvar errorID = 'invalid-email';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.emailKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar value = jQuery( el ).val();\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tthis.emailChange( value, fieldID );\n\t\t},\n\n\t\temailChange: function( value, fieldID ) {\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\tif( emailReg.test( value ) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\t\t\t\t}\t\t\t\t\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an email field, track their keypresses and add the appropriate class.\n\t\t * If the value validates as an email, add a class of nf-pass\n\t\t * If the value does not validate as email, add a class of nf-fail\n\t\t * \n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\temailKeyup: function( el, model, keyCode ) {\n\t\t\t\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid email.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t} else if ( ! emailReg.test( value ) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeEmailErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t} else if ( emailReg.test( value ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/changeDate',[], function() {\n\tvar radioChannel = nfRadio.channel( 'date' );\n\tvar errorID = 'invalid-date';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'change:modelValue', this.onChangeModelValue );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.dateKeyup );\n\t\t\tthis.listenTo( radioChannel, 'blur:field', this.onBlurField );\n\t\t\t\n\t\t\tthis.listenTo( radioChannel, 'change:extra', this.changeHoursMinutes, this)\n\t\t},\n\n\t\tonChangeModelValue: function( model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tonBlurField: function( el, model ) {\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\t\t\tthis.dateChange( model );\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tdateChange: function( model ) {\n\t\t\tvar fieldID = model.get( 'id' );\n\t\t\tvar value = model.get( 'value' );\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\t// If we are dealing with purely a time field, bail early.\n\t\t\tif ( 'time_only' == model.get( 'date_mode' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 0 < value.length ) {\n\t\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\t\tif( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * When a user types inside of an dat field, track their keypresses\n\t\t * and add the appropriate class.\n\t\t * If the value validates as an date, add a class of nf-pass\n\t\t * If the value does not validate as date, add a class of nf-fail\n\t\t *\n\t\t * @since 3.0\n\t\t * @param {object} el Element that triggered the keyup event.\n\t\t * @param {object} model Model connected to the element that triggered the event\n\t\t * @return {void}\n\t\t */\n\t\tdateKeyup: function( el, model, keyCode ) {\n\n\t\t\t/*\n\t\t\t * If we pressed the 'tab' key to get to this field, return false.\n\t\t\t */\n\t\t\tif ( 9 == keyCode ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Get the current value from our element.\n\t\t\t */\n\t\t\tvar value = jQuery( el ).val();\n\n\t\t\t/*\n\t\t\t * Get our current ID\n\t\t\t */\n\t\t\tvar fieldID = model.get( 'id' );\n\n\t\t\t/*\n\t\t\t* Get our current date format\n\t\t\t */\n\t\t\tvar format = model.get( 'date_format' );\n\n\t\t\tvar original = moment.locale();\n\t\t\tmoment.locale('ninja-forms');\n\n\t\t\t/*\n\t\t\t * Check our value to see if it is a valid date.\n\t\t\t */\n\t\t\tif ( 0 == value.length ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( ! this.isDateValid(value, format, fieldID) && ! model.get( 'clean' ) ) {\n\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', fieldID, errorID, formModel.get( 'settings' ).changeDateErrorMsg );\n\n\t\t\t\tmodel.removeWrapperClass( 'nf-pass' );\n\t\t\t}\n\t\t\t// use moment's isValid to check against the fields format setting\n\t\t\telse if ( this.isDateValid(value, format, fieldID) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', fieldID, errorID );\n\t\t\t\t/*\n\t\t\t\t * Add nf-pass class to the wrapper.\n\t\t\t\t */\n\t\t\t\tmodel.addWrapperClass( 'nf-pass' );\n\t\t\t\tmodel.set( 'clean', false );\n\t\t\t}\n\t\t\tmoment.locale(original);\n\t\t},\n\n\t\tchangeHoursMinutes: function( e, fieldModel ) {\n\t\t\tlet type = '';\n\t\t\tlet container = jQuery( e.target ).closest( '.nf-field-element' );\n\n\t\t\t// Set our hour, minute, and ampm\n\t\t\tlet selected_hour = jQuery( container ).find( '.hour' ).val();\n\t\t\tlet selected_minute = jQuery( container ).find( '.minute' ).val();\n\t\t\tlet selected_ampm = jQuery( container ).find( '.ampm' ).val();\n\n\t\t\tfieldModel.set( 'selected_hour', selected_hour );\n\t\t\tfieldModel.set( 'selected_minute', selected_minute );\n\t\t\tfieldModel.set( 'selected_ampm', selected_ampm );\n\n\t\t\tif ( 'time_only' === fieldModel.get( 'date_mode' ) ) {\n\t\t\t\tconst setValue = typeof selected_ampm !== \"undefined\" ?\n\t\t\t\t\tselected_hour + \":\" + selected_minute + \" \" + selected_ampm :\n\t\t\t\t\tselected_hour + \":\" + selected_minute;\n\n\t\t\t\tfieldModel.set( 'value', setValue );\n\t\t\t}\n\n\t\t\t// Detect time field inside a repeatable fieldset field to set correct value\n\t\t\tconst fieldId = fieldModel.get( 'id' );\n\t\t\tif(typeof fieldId === 'string' && fieldId.search(\".\") !== -1){\n\t\t\t\tnfRadio.channel('field-repeater').trigger('set:value');\n\t\t\t}\n\t\t},\n\n\t\tisDateValid: function(value, format, fieldID){\n\t\t\tif(document.querySelector(\"[name='nf-field-\" + fieldID + \"']\") === null) return;\n\t\t\t//Get Date and Timestamp using the precise flatPickr instance of the field to catch the locale\n\t\t\tconst parseDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.parseDate(value, format);\n\t\t\t// If parsedDate is undefined, the date is invalid\n\t\t\tif (!parseDate) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconst timestamp = parseDate.getTime();\n\t\t\tif (isNaN(timestamp)) {\n\t\t\t\treturn false; // Invalid date\n\t\t\t}\n\t\t\t//Convert timestamp back to Date object and string\n\t\t\tconst parsedDate = new Date(timestamp);\n\t\t\tconst formattedDate = document.querySelector(\"[name='nf-field-\" + fieldID + \"']\")._flatpickr.formatDate(parsedDate, format);\n\t\t\t// Check vlaue and date string are deeply equals\n\t\t\treturn formattedDate === value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * When we init our checkbox model, register our renderClasses() function\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'checkbox' ), 'init:model', this.registerRenderClasses );\n\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:required', this.validateRequired );\n\t\t\tnfRadio.channel( 'checkbox' ).reply( 'validate:modelData', this.validateModelData );\n nfRadio.channel( 'checkbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'checkbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tbeforeUpdateField: function( el, model ) {\n\t\t\tvar checked = jQuery( el ).prop( 'checked' );\n\t\t\tif ( checked ) {\n\t\t\t\tvar value = 1;\n\t\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\t\t\t} else {\n\t\t\t\tvar value = 0;\n\t\t\t\tjQuery( el ).removeClass( 'nf-checked' );\n\t\t\t\tjQuery( el ).closest( '.field-wrap' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\treturn el[0].checked;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\t\t\treturn model.get( 'value' ) != 0;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tif ( 1 == fieldModel.get( 'value' ) ) {\n\t\t\t\tcalcValue = fieldModel.get( 'checked_calc_value' );\n\t\t\t} else {\n\t\t\t\tcalcValue = fieldModel.get( 'unchecked_calc_value' );\n\t\t\t}\n\n\t\t\treturn calcValue;\n\t\t},\n\n\t\tregisterRenderClasses: function( model ) {\n\t\t\tif ( 'checked' == model.get( 'default_value' ) ) {\n\t\t\t\tmodel.set( 'value', 1 );\n\t\t\t} else {\n\t\t\t\tmodel.set( 'value', 0 );\n\t\t\t}\n\t\t\tmodel.set( 'customClasses', this.customClasses );\n\t\t\tmodel.set( 'customLabelClasses', this.customLabelClasses );\n\t\t\tmodel.set( 'maybeChecked', this.maybeChecked );\n\t\t},\n\n\t\tcustomClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tcustomLabelClasses: function( classes ) {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\tclasses += ' nf-checked-label';\n\t\t\t} else {\n\t\t\t\tclasses.replace( 'nf-checked-label', '' );\n\t\t\t}\n\t\t\treturn classes;\n\t\t},\n\n\t\tmaybeChecked: function() {\n\t\t\tif ( 1 == this.value || ( this.clean && 'undefined' != typeof this.default_value && 'checked' == this.default_value ) ) {\n\t\t\t\treturn ' checked';\n\t\t\t} else {\n\t\t\t\treturn '';\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldCheckboxList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listcheckbox' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n nfRadio.channel( 'listcheckbox' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'terms' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listcheckbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n nfRadio.channel( 'terms' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'options' ).length ) {\n var selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n\n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n _.each( this.options, function( option, index ) {\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], option.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, option.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( option.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.fieldID = this.id;\n option.classes = this.classes;\n option.index = index;\n option.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n \n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), option.value )\n\t\t || -1 !== _.indexOf( this.value, option.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == option.selected && this.clean ) && 'undefined' === typeof this.value ) {\n\t\t selected = true;\n\t }\n\n\n // else if( ( option.selected && \"0\" != option.selected ) && this.clean ){\n\t // isSelected = true;\n\t // } else {\n\t // var testValues = _.map( this.value, function( value ) {\n\t // return value.toString();\n\t // } );\n\t //\n\t // option.isSelected = ( -1 != testValues.indexOf( option.value.toString() ) );\n\t // }\n\t option.selected = selected;\n\t option.isSelected = selected;\n\t option.required = this.required;\n option.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-option' );\n html += template( option );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listcheckbox-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n var calc_value = 0;\n var options = fieldModel.get( 'options' );\n if ( 0 != options.length ) {\n _.each( fieldModel.get( 'value' ), function( val ) {\n var tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n calc_value = Number( calc_value ) + Number( tmp_opt.calc );\n } );\n }\n return calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n \tvar optionArray = typeof selected[0] !== \"undefined\" ? selected[0].split( ',' ) : [];\n \tvar valueIndex = optionArray.indexOf( value );\n \tif( -1 !== valueIndex) {\n \t\toptionArray.splice( valueIndex, 1 );\n\t }\n \tselected = optionArray.join( ',' );\n }\n }\n\n // if ( 1 == model.get( 'show_other' ) ) {\n // model.set( 'reRender', true );\n // }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldImageList',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'listimage' ), 'init:model', this.register );\n nfRadio.channel( 'listimage' ).reply( 'before:updateField', this.beforeUpdateField, this );\n nfRadio.channel( 'listimage' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderOptions', this.renderOptions );\n model.set( 'renderOtherText', this.renderOtherText );\n model.set( 'selected', [] );\n\n /*\n * When we init a model, we need to set our 'value' to the selected option's value.\n * This is the list equivalent of a 'default value'.\n */ \n if ( 0 != model.get( 'image_options' ).length ) {\n var selected = _.filter( model.get( 'image_options' ), function( opt ) { return 1 == opt.selected } );\n selected = _.map( selected, function( opt ) { return opt.value } );\n }\n\n /*\n * This part is re-worked to take into account custom user-meta\n * values for fields.\n */\n\t var savedVal = model.get( 'value' );\n\t if( 'undefined' !== typeof savedVal && Array.isArray( savedVal ) ) {\n\t\t model.set( 'value', savedVal );\n\t } else if ( 'undefined' != typeof selected ) {\n\t\t model.set( 'value', selected );\n\t }\n },\n\n renderOptions: function() {\n var html = '';\n \n if ( '' == this.value || ( Array.isArray( this.value ) && 0 < this.value.length )\n || 0 < this.value.length ) {\n var valueFound = true;\n } else {\n var valueFound = false;\n }\n\n if (this.allow_multi_select === 1) {\n this.old_classname = 'list-checkbox';\n this.image_type = 'checkbox';\n } else {\n this.image_type = 'radio';\n }\n\n if(this.list_orientation === 'horizontal') {\n this.flex_direction = 'row';\n } else {\n this.flex_direction = 'column';\n }\n var that = this;\n\n var num_columns = parseInt(this.num_columns) || 1;\n var current_column = 1;\n var current_row = 1;\n \n _.each( this.image_options, function( image, index ) {\n if (!this.show_option_labels) {\n image.label = '';\n } else {\n image.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(image.label) : image.label;\n }\n if( Array.isArray( this.value ) ) {\n \tif( Array.isArray( this.value[ 0 ] ) && -1 !== _.indexOf( this.value[ 0 ], image.value ) ) {\n \t\tvalueFound = true;\n\t }\n else if( _.indexOf( this.value, image.value ) ) {\n valueFound = true;\n\t }\n }\n\n if ( image.value == this.value ) {\n valueFound = true;\n }\n\n /*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof image.visible ) {\n image.visible = true;\n }\n \n if(that.list_orientation === 'horizontal' && current_column <= num_columns) {\n image.styles = \"margin:auto;grid-column: \" + current_column + \"; grid-row = \" + current_row;\n\n if(current_column === num_columns) {\n current_column = 1;\n current_row += 1;\n } else {\n current_column += 1;\n }\n }\n\n image.image_type = that.image_type; \n image.fieldID = this.id;\n image.classes = this.classes;\n image.index = index;\n\n var selected = false;\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t if( Array.isArray( this.value ) && 0 < this.value.length ) {\n\t \tif ( -1 !== _.indexOf( this.value[ 0 ].split( ',' ), image.value )\n\t\t || -1 !== _.indexOf( this.value, image.value ) ) {\n\t\t\t selected = true;\n\t \t}\n\t } else if ( ! _.isArray( this.value ) && image.value == this.value ) {\n\t\t selected = true;\n\t } else if ( ( 1 == image.selected && this.clean ) && ('undefined' === typeof this.value || '' === this.value)) {\n\t\t selected = true;\n\t }\n\n\t image.selected = selected;\n\t image.isSelected = selected;\n\t image.required = this.required;\n image.maybeFilterHTML = this.maybeFilterHTML;\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-option' );\n html += template( image );\n }, this );\n\n if ( 1 == this.show_other ) {\n if ( 'nf-other' == this.value ) {\n valueFound = false;\n }\n var data = {\n fieldID: this.id,\n classes: this.classes,\n value: this.value,\n currentValue: this.value,\n renderOtherText: this.renderOtherText,\n valueFound: valueFound\n };\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other' );\n html += template( data );\n\n }\n\n return html;\n },\n\n renderOtherText: function() {\n if ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n if ( 'nf-other' == this.currentValue ) {\n this.currentValue = '';\n }\n var data = {\n fieldID: this.fieldID,\n classes: this.classes,\n currentValue: this.currentValue\n };\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listimage-other-text' );\n return template( data );\n }\n },\n\n getCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 1 == parseInt( fieldModel.get( 'allow_multi_select' ) ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a selcted value, use it.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n },\n\n beforeUpdateField: function( el, model ) {\n\n if(model.get('allow_multi_select') !== 1) {\n var selected = jQuery( el ).val();\n var options = model.get('image_options');\n _.each(options, function(option, index) {\n if(option.value === selected) {\n option.isSelected = true;\n option.selected = true;\n } else {\n option.isSelected = false;\n option.selected = false;\n }\n if(!option.isSelected) {\n option.selected = false;\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).removeClass('nf-checked-label');\n } else {\n jQuery(\"#nf-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked');\n jQuery(\"#nf-label-field-\" + option.fieldID + \"-\" + index).addClass('nf-checked-label');\n }\n });\n } else {\n var selected = model.get( 'value' ) || [];\n if ( typeof selected == 'string' ) selected = [ selected ];\n var value = jQuery( el ).val();\n var checked = jQuery( el ).prop( 'checked' );\n if ( checked ) {\n selected.push( value );\n jQuery( el ).addClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n } else {\n jQuery( el ).removeClass( 'nf-checked' );\n jQuery( el ).parent().find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).removeClass( 'nf-checked-label' );\n var i = selected.indexOf( value );\n if( -1 != i ){\n selected.splice( i, 1 );\n } else if ( Array.isArray( selected ) ) {\n var optionArray = selected[0].split( ',' );\n var valueIndex = optionArray.indexOf( value );\n if( -1 !== valueIndex) {\n optionArray.splice( valueIndex, 1 );\n }\n selected = optionArray.join( ',' );\n }\n }\n }\n\n return _.clone( selected );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRadio',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:modelValue', this.changeModelValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'init:model', this.register );\n\t\t\tnfRadio.channel( 'listradio' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'listradio' ), 'change:field', this.updateCheckedClass, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherText', this.renderOtherText );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\n\t\t\t\tif ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', selected.value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tchangeModelValue: function( model ) {\n\t\t\tif ( 1 == model.get( 'show_other' ) ) {\n\t\t\t\t// model.set( 'reRender', true );\n\t\t\t\tmodel.trigger( 'reRender');\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\t\t\tif ( '' == this.value ) {\n\t\t\t\tvar valueFound = true;\n\t\t\t} else {\n\t\t\t\tvar valueFound = false;\n\t\t\t}\n\t\t\t\n\t\t\t_.each( this.options, function( option, index ) {\n\t\t\t\tif ( option.value == this.value ) {\n\t\t\t\t\tvalueFound = true;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n option.selected = false;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.index = index;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\toption.required = this.required;\n\n\t\t\t\t/*\n\t\t\t\t * If we haven't edited this field yet, use the default checked\n\t\t\t\t */\n\t\t\t\tif ( this.clean && 1 == this.selected ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else if ( this.value == option.value ) {\n\t\t\t\t\toption.selected = true;\n\t\t\t\t} else {\n\t\t\t\t\toption.selected = false;\n\t\t\t\t}\n\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-option' );\n\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\tif ( 1 == this.show_other ) {\n\t\t\t\tif ( 'nf-other' == this.value ) {\n\t\t\t\t\tvalueFound = false;\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.id,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.value,\n\t\t\t\t\trenderOtherText: this.renderOtherText,\n\t\t\t\t\tvalueFound: valueFound\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other' );\n\t\t\t\thtml += template( data );\n\t\t\t}\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherText: function() {\n\t\t\tif ( 'nf-other' == this.currentValue || ! this.valueFound ) {\n\t\t\t\tif ( 'nf-other' == this.currentValue ) {\n\t\t\t\t\tthis.currentValue = '';\n\t\t\t\t}\n\t\t\t\tvar data = {\n\t\t\t\t\tfieldID: this.fieldID,\n\t\t\t\t\tclasses: this.classes,\n\t\t\t\t\tcurrentValue: this.currentValue\n\t\t\t\t};\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listradio-other-text' );\n\t\t\t\treturn template( data );\n\t\t\t}\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t\n /*\n * Default to 0, in case we have no selection.\n */\n var calc_value = 0;\n \n\t\t\tif ( 0 != fieldModel.get( 'options' ).length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t */\n\t\t\t\tvar selected = _.find( fieldModel.get( 'options' ), function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\tif ( 'undefined' !== typeof selected ) {\n calc_value = selected.calc;\n\t\t\t\t}\n\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t},\n\n\t\tupdateCheckedClass: function( el, model ) {\n\t\t\tjQuery( '[name=\"' + jQuery( el ).attr( 'name' ) + '\"]' ).removeClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'ul' ).find( 'label' ).removeClass( 'nf-checked-label' );\n\t\t\tjQuery( el ).addClass( 'nf-checked' );\n\t\t\tjQuery( el ).closest( 'li' ).find( 'label[for=\"' + jQuery( el ).prop( 'id' ) + '\"]' ).addClass( 'nf-checked-label' );\n\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldNumber',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'number' ), 'init:model', this.maybeMinDefault );\n this.listenTo( nfRadio.channel( 'number' ), 'keyup:field', this.validateEntry );\n },\n\n maybeMinDefault: function( model ) {\n\n if( '' == model.get( 'value' ) && '' == model.get( 'placeholder' ) ){\n var min = model.get( 'num_min' );\n model.set( 'placeholder', min );\n }\n },\n\n validateEntry: function( el, model ) {\n var $el = jQuery( el );\n var val = $el.val();\n var floatVal = parseFloat( val );\n var min = $el.attr( 'min' );\n var max = $el.attr( 'max' );\n var step = $el.attr( 'step' ) ? $el.attr( 'step' ) : '1';\n\n if( min && floatVal < min ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-min', formModel.get( 'settings' ).fieldNumberNumMinError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-min' );\n }\n\n if ( max && floatVal > max ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-max', formModel.get( 'settings' ).fieldNumberNumMaxError );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-max' );\n }\n\n let testVal = val.split('.');\n testVal = typeof(testVal[1]) !== 'undefined' ? testVal[1].length : 0;\n let testStep = step.split('.');\n testStep = typeof(testStep[1]) !== 'undefined' ? testStep[1].length : 0;\n let factor = Math.pow(10, testStep);\n\n if( step && val && ( testVal > testStep\n || 0 !== parseInt((factor * floatVal).toFixed()) % parseInt((factor * parseFloat(step)).toFixed()) ) ){\n var fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'id' ) );\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n nfRadio.channel( 'fields' ).request( 'add:error', model.get( 'id' ), 'number-step', formModel.get( 'settings' ).fieldNumberIncrementBy + step );\n } else {\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'number-step' );\n }\n }\n\n });\n\n return controller;\n} );\n","define( 'controllers/mirrorField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\n\tvar controller = Marionette.Object.extend( {\n\t\tlisteningModel: '',\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerMirror );\n\t\t},\n\n\t\tregisterMirror: function( model ) {\n\t\t\tif ( model.get( 'mirror_field' ) ) {\n\t\t\t\tthis.listeningModel = model;\n\t\t\t\tvar targetID = model.get( 'mirror_field' );\n\t\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetID ), 'change:modelValue', this.changeValue );\n\t\t\t}\n\t\t},\n\n\t\tchangeValue: function( targetModel ) {\n\t\t\tthis.listeningModel.set( 'value', targetModel.get( 'value' ) );\n\t\t\t// this.listeningModel.set( 'reRender', true );\n\t\t\tthis.listeningModel.trigger( 'reRender' );\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define( 'controllers/confirmField',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar errorID = 'confirm-mismatch';\n\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( radioChannel, 'init:model', this.registerConfirm );\n\t\t\tthis.listenTo( radioChannel, 'keyup:field', this.confirmKeyup );\n\t\t},\n\n\t\tregisterConfirm: function( confirmModel ) {\n\t\t\tif ( ! confirmModel.get( 'confirm_field' ) ) return;\n\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', function( formModal ){\n\t\t\t\tthis.registerConfirmListeners( confirmModel );\n\t\t\t});\n\t\t},\n\n\t\tregisterConfirmListeners: function( confirmModel ) {\n\t\t\t\n\t\t\tvar targetModel = nfRadio.channel( 'form-' + confirmModel.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\n\t\t\t//TODO: Add better handling for password confirm fields on the front end.\n\t\t\tif( 'undefined' == typeof targetModel ) return;\n\n\t\t\ttargetModel.set( 'confirm_with', confirmModel.get( 'id' ) );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + targetModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + confirmModel.get( 'id' ) ), 'change:modelValue', this.changeValue );\n\t\t},\n\n\t\tchangeValue: function( model ) {\n\t\t\tif ( 'undefined' == typeof model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t} else {\n\t\t\t\tvar targetModel = model;\n\t\t\t\tvar confirmModel = radioChannel.request( 'get:field', targetModel.get( 'confirm_with' ) );\n\t\t\t}\n\t\t\tvar targetID = targetModel.get( 'id' );\n\t\t\tvar confirmID = confirmModel.get( 'id' );\n\n\t\t\tif ( '' == confirmModel.get( 'value' ) || confirmModel.get( 'value' ) == targetModel.get( 'value' ) ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t} else {\n\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t}\n\t\t},\n\t\t\n\t\tconfirmKeyup: function( el, model, keyCode ) {\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tif ( model.get( 'confirm_field' ) ) {\n\t\t\t\tvar confirmModel = model;\n\t\t\t\tvar confirmID = model.get( 'id' );\n\t\t\t\tvar targetModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:fieldByKey', confirmModel.get( 'confirm_field' ) );\n\t\t\t\tvar compareValue = targetModel.get( 'value' );\n\t\t\t\tvar confirmValue = currentValue;\n\t\t\t} else if ( model.get( 'confirm_with' ) ) {\n\t\t\t\tvar confirmModel = nfRadio.channel( 'fields' ).request( 'get:field', model.get( 'confirm_with' ) );\n\t\t\t\tvar confirmID = confirmModel.get( 'id' );\n\t\t\t\tvar confirmValue = confirmModel.get( 'value' );\n\t\t\t\tvar compareValue = confirmValue;\n\t\t\t}\n\n\t\t\tif ( 'undefined' !== typeof confirmModel ) {\n\t\t\t\tif ( '' == confirmValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else if ( currentValue == compareValue ) {\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', confirmID, errorID );\n\t\t\t\t} else {\n\t\t\t\t\tvar fieldModel = nfRadio.channel( 'fields' ).request( 'get:field', confirmID );\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t\t\tnfRadio.channel( 'fields' ).request( 'add:error', confirmID, errorID, formModel.get( 'settings' ).confirmFieldErrorMsg );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/updateFieldModel',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'nfAdmin' ).reply( 'update:field', this.updateField );\n\t\t},\n\n\t\tupdateField: function( model, value ) {\n\t\t\tif ( ! model.get( 'isUpdated' ) ) {\n\t\t\t\tmodel.set( 'value', value );\n\t\t\t\tmodel.set( 'isUpdated', true );\n\t\t\t\t/*\n\t\t\t\t * If we're working with an array, it won't trigger a change event on the value attribute.\n\t\t\t\t * Instead, we have to manually trigger a change event.\n\t\t\t\t */ \n\t\t\t\tif ( _.isArray( value ) ) {\n\t\t\t\t\tmodel.trigger( 'change:value', model );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitButton',['controllers/submitButton'], function( submitButton ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tbound: {},\n\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'init:model', this.registerHandlers );\n\t\t},\n\n\t\tregisterHandlers: function( fieldModel ) {\n\t\t\tif ( 'undefined' != typeof this.bound[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tthis.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'click:field', this.click, this );\n\t\t\t/*\n\t\t\t * Register an interest in the 'before:submit' event of our form.\n\t\t\t */\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'before:submit', this.beforeSubmit, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:failed', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'submit:response', this.resetLabel, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'enable:submit', this.maybeEnable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'disable:submit', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ), 'processingLabel', this.processingLabel, fieldModel );\n\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.maybeDisable, fieldModel );\n\t\t\tfieldModel.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.maybeEnable, fieldModel );\n\t\t\t\n\t\t\tthis.bound[ fieldModel.get( 'id') ] = true;\n\t\t},\n\n\t\tclick: function( e, fieldModel ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\tif(_.size(formModel.get('fieldErrors')) > 0){\n\t\t\t\tnfRadio.channel( 'submit' ).request( 'focus:firstInvalidInput', Object.keys(formModel.get('fieldErrors')) );\n\t\t\t}\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'submit', formModel );\n\t\t},\n\n\t\tbeforeSubmit: function() {\n\t\t\tif(this.get('disabled')) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tnfRadio.channel( 'form-' + this.get( 'formID' ) ).trigger( 'processingLabel', this );\n\t\t},\n\n\t\tmaybeDisable: function( fieldModel ) {\n\n\t\t\tif( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) return;\n\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tmaybeEnable: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * If the field reporting the error is not on the same form as the submit button, return false;\n\t\t\t */\n\t\t\tif ( 'undefined' != typeof fieldModel && fieldModel.get( 'formID' ) != this.get( 'formID' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', this.get( 'formID' ) );\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\tthis.set( 'disabled', false );\n\t\t\t\tthis.trigger( 'reRender' );\n\t\t\t}\n\t\t},\n\n\t\tprocessingLabel: function() {\n\n\t\t\tthis.set( 'oldLabel', this.get( 'label' ) );\n\t\t\tthis.set( 'label', this.get( 'processing_label' ) );\n\t\t\tthis.set( 'disabled', true );\n\t\t\tthis.trigger( 'reRender' );\n\t\t},\n\n\t\tresetLabel: function( response ) {\n\t\t\tif ( 'undefined' != typeof response.errors &&\n\t\t\t\t 'undefined' != typeof response.errors.nonce &&\n\t\t\t\t _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Do not reset label for nonce errors, which will re-submit the form.\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( 'undefined' != typeof this.get( 'oldLabel' ) ) {\n\t\t\t\tthis.set( 'label', this.get( 'oldLabel' ) );\n\t\t\t}\n\t\t\tthis.set( 'disabled', false );\n\t\t\tthis.trigger( 'reRender' );\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/submitDebug',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitDebug );\n },\n\n submitDebug: function( response, textStatus, jqXHR, formID ) {\n\n if( 'undefined' == typeof response.debug ) return;\n\n /* Form Debug Messages */\n if( 'undefined' != typeof response.debug.form ) {\n var debugMessages = document.createElement( 'span' );\n _.each(response.debug.form, function (message, index) {\n var messageText = document.createTextNode( message );\n debugMessages.appendChild( messageText );\n debugMessages.appendChild(\n document.createElement( 'br' )\n );\n });\n jQuery('.nf-debug-msg').html( debugMessages );\n }\n\n /* Console Debug Messages */\n if( 'undefined' != typeof response.debug.console ) {\n var style = '';\n console.log( '%c%s', style, 'NINJA SUPPORT' );\n _.each(response.debug.console, function (message, index) {\n console.log( message );\n });\n console.log( '%c%s', style, 'END NINJA SUPPORT' );\n }\n }\n\n });\n\n return controller;\n} );\n\n","define('controllers/getFormErrors',[], function() {\n\tvar radioChannel = nfRadio.channel( 'fields' );\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function( model ) {\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\t\tif ( field.get( 'type' ) != 'submit' && field.get( 'errors' ).length > 0 ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ field.get( 'id' ) ] = field.get( 'errors' );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t\treturn errors;\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","define('controllers/validateRequired',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:field', this.validateRequired );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.validateKeyup );\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.validateModelData );\n\t\t\tthis.listenTo( nfRadio.channel( 'submit' ), 'validate:field', this.validateModelData );\n\t\t},\n\t\t\n\t\tvalidateKeyup: function( el, model, keyCode ) {\n\t\t\tif ( 1 != model.get( 'required' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( ! model.get( 'clean' ) ) {\n\t\t\t\tthis.validateRequired( el, model );\n\t\t\t}\n\t\t},\n\n\t\tvalidateRequired: function( el, model ) {\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tvar currentValue = jQuery( el ).val();\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:required', el, model );\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tvar maskPlaceholder = this.getMask( model );\n\n // If the field has a mask...\n // AND that mask is equal to the current value... \n if ( maskPlaceholder && currentValue === maskPlaceholder ) {\n // If we have a pre-existing error...\n // OR if this field has been previously focused...\n if ( 0 < model.get( 'errors' ).length || ! model.get( 'clean' ) ) {\n // Persist that error.\n defaultReqValidation = false;\n }\n }\n // If our value is an empty string...\n if ( ! String(currentValue).trim() ) {\n // Throw an error.\n defaultReqValidation = false;\n }\n\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\t\t},\n\n\t\tgetMask: function( model ) {\n\t\t\tvar mask = model.get( 'mask' );\n\n\t\t\tif(\"undefined\" === typeof mask) return;\n\t\t\t\n\t\t\tswitch(mask) {\n\t\t\t\tcase '':\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'currency':\n\t\t\t\t\tmask = nfi18n.currencySymbol;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'custom':\n\t\t\t\t\tmask = model.get( 'custom_mask' );\n\t\t\t\t\t/**\n\t\t\t\t\t * Break intentionally excluded so that this case\n\t\t\t\t\t * also executes the contents of default.\n\t\t\t\t\t */\n\t\t\t\tdefault:\n\t\t\t\t\tmask = mask.replace( /9/g, '_' );\n\t\t\t\t\tmask = mask.replace( /a/g, '_' );\n\t\t\t\t\tmask = mask.replace( /\\*/g, '_' );\n\t\t\t}\n\t\t\treturn mask;\n\t\t},\n\n\t\tvalidateModelData: function( model ) {\n\n\t\t\tif ( 1 != model.get( 'required' ) || ! model.get( 'visible' ) || model.get( 'clean' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * If we already have a required error on this model, return false\n\t\t\t */\n\t\t\tif ( model.get( 'errors' ).get( 'required-error' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcurrentValue = model.get( 'value' );\n\n\t\t\tvar defaultReqValidation = true;\n\n\t\t\tif ( ! String(currentValue).trim() ) {\n\t\t\t\tdefaultReqValidation = false;\n\t\t\t}\n\n\t\t\tvar customReqValidation = nfRadio.channel( model.get( 'type' ) ).request( 'validate:modelData', model );\n\t\t\tif ( 'undefined' !== typeof customReqValidation ) {\n\t\t\t\tvar valid = customReqValidation;\n\t\t\t} else {\n\t\t\t\tvar valid = defaultReqValidation;\n\t\t\t}\n\n\t\t\tthis.maybeError( valid, model );\n\n\t\t},\n\n\t\tmaybeError: function( valid, model ) {\n\t\t\tif ( ! valid ) {\n\n\t\t\t\tvar formModel = nfRadio.channel( 'form-' + model.get( 'formID' ) ).request( 'get:form' );\n\t\t\t\t\n\t\t\t\tif( 'undefined' != typeof formModel ) {\n\t\t\t\t\tnfRadio.channel('fields').request('add:error', model.get('id'), 'required-error', formModel.get('settings').validateRequiredField );\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n\t\t\t}\t\t\t\n\t\t}\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/submitError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.submitErrors );\n\t\t\t//Focus first invalid input after catching errors during submission\n\t\t\tnfRadio.channel( 'submit' ).reply( 'focus:firstInvalidInput', this.focusFirstInvalidInput );\n\t\t},\n\n\t\tsubmitErrors: function( response, textStatus, jqXHR, formID ) {\n\n\t\t\t// Check for nonce error.\n\t\t\tif ( _.size( response.errors.nonce ) > 0 ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.nonce.new_nonce && 'undefined' != typeof response.errors.nonce.nonce_ts ) {\n\t\t\t\t\t// Update nonce from response.\n\t\t\t\t\tnfFrontEnd.ajaxNonce = response.errors.nonce.new_nonce;\n\t\t\t\t\tnfFrontEnd.nonce_ts = response.errors.nonce.nonce_ts;\n\t\t\t\t\t// Re-submit form.\n\t\t\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'submit', formModel );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.fields ) > 0 ) {\n\t\t\t\t_.each( response.errors.fields, function( data, fieldID ) {\n if ( typeof( data ) === 'object' ) {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, data.slug, data.message );\n } else {\n nfRadio.channel( 'fields' ).request( 'add:error', fieldID, 'required-error', data );\n }\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors.form ) > 0 ) {\n\t\t\t\t_.each( response.errors.form, function( msg, errorID ) {\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'remove:error', errorID );\n\t\t\t\t\tnfRadio.channel( 'form-' + formID ).request( 'add:error', errorID, msg );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( 'undefined' != typeof response.errors.last ) {\n\t\t\t\tif( 'undefined' != typeof response.errors.last.message ) {\n\t\t\t\t\tvar style = 'background: rgba( 255, 207, 115, .5 ); color: #FFA700; display: block;';\n\t\t\t\t\tconsole.log( '%c NINJA FORMS SUPPORT: SERVER ERROR', style );\n\t\t\t\t\tconsole.log( response.errors.last.message );\n\t\t\t\t\tconsole.log( '%c END SERVER ERROR MESSAGE', style );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/**\n\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t */\n\t\t\t/*\n\t\t\t * Re-show any hidden fields during a form submission re-start.\n\t\t\t */\n\t\t\tjQuery( '#nf-form-' + formID + '-cont .nf-field-container' ).show();\n\t\t},\n\n\t\tfocusFirstInvalidInput: function(errors) {\n\t\t\tconst targetID = nfRadio.channel( 'fields' ).request( 'get:firstFieldByOrder', errors );\n\t\t\tif(document.getElementById(\"nf-field-\"+ targetID) !== null){\n\t\t\t\tdocument.getElementById(\"nf-field-\"+ targetID).focus();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/actionRedirect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionRedirect );\n\t\t},\n\n\t\tactionRedirect: function( response ) {\n\n\t\t\tif ( 'undefined' != typeof response.data.halt && 'undefined' != typeof response.data.halt.redirect && '' != response.data.halt.redirect ) {\n\t\t\t\twindow.location = response.data.halt.redirect;\n\t\t\t}\n\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.redirect && '' != response.data.actions.redirect ) {\n\t\t\t\t\twindow.location = response.data.actions.redirect;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/actionSuccess',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tif ( _.size( response.errors ) == 0 && 'undefined' != typeof response.data.actions ) {\n\t\t\t\tif ( 'undefined' != typeof response.data.actions.success_message && '' != response.data.actions.success_message ) {\n\t\t\t\t\tvar form_id = response.data.form_id;\n\t\t\t\t\tvar success_message = jQuery( '#nf-form-' + form_id + '-cont .nf-response-msg' );\n\t\t\t\t\tconst read = response.data.actions.success_message.replace( /(<([^>]+)>)/ig, '');\n\t\t\t\t\tsuccess_message.attr('tabindex', '0');\n\t\t\t\t\tsuccess_message.attr('aria-live', 'assertive');\n\t\t\t\t\tsuccess_message.attr(\"aria-label\", read);\n\t\t\t\t\t\n\t\t\t\t\tsuccess_message.html( response.data.actions.success_message ).show();\n\t\t\t\t\tsuccess_message.focus();\n\t\t\t\t\t//Let's check if the success message is already fully visible in the viewport without scrolling\n\t\t\t\t\tvar top_of_success_message = success_message.offset().top;\n\t\t\t\t\tvar bottom_of_success_message = success_message.offset().top + success_message.outerHeight();\n\t\t\t\t\tvar bottom_of_screen = jQuery(window).scrollTop() + jQuery(window).height();\n\t\t\t\t\tvar top_of_screen = jQuery(window).scrollTop();\n\n\t\t\t\t\tvar the_element_is_visible = ((bottom_of_screen > bottom_of_success_message) && (top_of_screen < top_of_success_message));\n\n\t\t\t\t\tif(!the_element_is_visible){\n\t\t\t\t\t\t//The element isn't visible, so let's scroll to the success message as in the previous release, but with a short animation\n\t\t\t\t\t\tjQuery('html, body').animate({\n\t\t\t\t\t\t\tscrollTop: ( success_message.offset().top - 50 )\n\t\t\t\t\t\t}, 300 );\n\t\t\t\t\t}\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/fieldSelect',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'init:model', function( model ){\n\t\t\t\tif( 'list' == model.get( 'parentType' ) ) this.register( model );\n\t\t\t}, this );\n\n\t\t\tnfRadio.channel( 'listselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t\tnfRadio.channel( 'listmultiselect' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tregister: function( model ) {\n\t\t\tmodel.set( 'renderOptions', this.renderOptions );\n\t\t\tmodel.set( 'renderOtherAttributes', this.renderOtherAttributes );\n\t\t\t/*\n\t\t\t * When we init a model, we need to set our 'value' to the selected option's value.\n\t\t\t * This is the list equivalent of a 'default value'.\n\t\t\t */ \n\t\t\tif ( 0 != model.get( 'options' ).length ) {\n\t\t\t\t//Check to see if there is a value set for the field\n\t\t\t\tvar savedVal = model.get( 'value' );\n\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.filter( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\tselected = _.map( selected, function( opt ) { return opt.value } );\n\t\t\t\t\tvar value = selected;\n\t\t\t\t} else if ( 'listradio' !== model.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Check to see if we have a selected value.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( model.get( 'options' ), function( opt ) { return 1 == opt.selected } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = _.first( model.get( 'options' ) );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof selected\n\t\t\t\t\t\t&& 'undefined' != typeof selected.value ) {\n\t\t\t\t\t\tvar value = selected.value;\n\t\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\t\tvar value = selected.label;\n\t\t\t\t\t}\t\n\t\t\t\t}\n\n\t\t\t\t/*\n\t * This part is re-worked to take into account custom user-meta\n\t * values for fields.\n\t */\n\t\t\t\tif( 'undefined' !== typeof savedVal && '' !== savedVal\n\t\t\t\t\t&& Array.isArray( savedVal ) ) {\n\t\t\t\t\tmodel.set( 'value', savedVal );\n\t\t\t\t} else if ( 'undefined' != typeof selected ) {\n\t\t\t\t\tmodel.set( 'value', value );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\trenderOptions: function() {\n\t\t\tvar html = '';\n\n\t\t\t_.each( this.options, function( option ) {\n\t\t\t\t/*\n\t\t\t\t* This part has been re-worked to account for values passed in\n\t\t\t\t* via custom user-meta ( a la User Mgmt add-on)\n\t\t\t\t */\n\t\t\t\tif ( _.isArray( this.value ) ) {\n // If we have a multiselect list...\n // AND it has selected values...\n\t\t\t\t\tif( 'listmultiselect' === this.type && 0 < this.value.length &&\n\t\t\t\t\t\t-1 != _.indexOf( this.value[ 0 ].split( ',' ), option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t} else if( -1 != _.indexOf( this.value, option.value ) ) {\n\t\t\t\t\t\tvar selected = true;\n\t\t\t\t\t}\n\t\t\t\t} else if ( ! _.isArray( this.value ) && option.value == this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else if ( ( 1 == option.selected && this.clean )\n\t\t\t\t\t&& 'undefined' === typeof this.value ) {\n\t\t\t\t\tvar selected = true;\n\t\t\t\t} else {\n\t\t\t\t\tvar selected = false;\n\t\t\t\t}\n\n\t\t\t\t/*\n * TODO: This is a bandaid fix for making sure that each option has a \"visible\" property.\n * This should be moved to creation so that when an option is added, it has a visible property by default.\n */\n if ( 'undefined' == typeof option.visible ) {\n option.visible = true;\n }\n\n\t\t\t\toption.selected = selected;\n\t\t\t\toption.fieldID = this.id;\n\t\t\t\toption.classes = this.classes;\n\t\t\t\toption.currentValue = this.value;\n\t\t\t\toption.label = (typeof nfFrontEnd.filter_esc_status !== \"undefined\" && nfFrontEnd.filter_esc_status === \"true\") ? _.escape(option.label) : option.label;\n\t\t\t\t\n option.maybeFilterHTML = this.maybeFilterHTML;\n\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-listselect-option' );\n\t\t\t\thtml += template( option );\n\t\t\t}, this );\n\n\t\t\treturn html;\n\t\t},\n\n\t\trenderOtherAttributes: function() {\n\t\t\tvar otherAttributes = '';\n\n\t\t\tif( 'listmultiselect' == this.type ){\n\t\t\t\totherAttributes = otherAttributes + ' multiple';\n\n\t\t\t\tvar multiSize = this.multi_size || 5;\n\t\t\t\totherAttributes = otherAttributes + ' size=\"' + multiSize + '\"';\n\t\t\t}\n\n\t\t\treturn otherAttributes;\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\tvar calc_value = 0;\n\t\t\tvar options = fieldModel.get( 'options' );\n\t\t\tif ( 0 != options.length ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if this is a multi-select list.\n\t\t\t\t */\n\t\t\t\tif ( 'listmultiselect' == fieldModel.get( 'type' ) ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * We're using a multi-select, so we need to check out any selected options and add them together.\n\t\t\t\t\t */\n\t\t\t\t\t_.each( fieldModel.get( 'value' ), function( val ) {\n\t\t\t\t\t\tvar tmp_opt = _.find( options, function( opt ) { return opt.value == val } );\n\t\t\t\t\t\tcalc_value += Number( tmp_opt.calc );\n\t\t\t\t\t} );\n\t\t\t\t} else {\n\t\t\t\t\t/*\n\t\t\t\t\t * We are using a single select, so our selected option is in the 'value' attribute.\n\t\t\t\t\t */\n\t\t\t\t\tvar selected = _.find( options, function( opt ) { return fieldModel.get( 'value' ) == opt.value } );\n\t\t\t\t\t/*\n\t\t\t\t\t * We don't have a selected value, so use our first option.\n\t\t\t\t\t */\n\t\t\t\t\tif ( 'undefined' == typeof selected ) {\n\t\t\t\t\t\tselected = fieldModel.get( 'options' )[0];\n\t\t\t\t\t}\t\t\n\t\t\t\t\tcalc_value = selected.calc;\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn calc_value;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/coreSubmitResponse',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSubmit );\n\t\t},\n\n\t\tactionSubmit: function( response ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', response.data.form_id );\n\t\t\t/*\n\t\t\t * If we have errors, don't hide or clear.\n\t\t\t */\n\t\t\tif ( 0 != _.size( response.errors ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.clear_complete ) {\n\t\t\t\t// nfRadio.channel( 'form-' + response.data.form_id ).trigger( 'reset' );\n\t\t\t\tformModel.get( 'fields' ).reset( formModel.get( 'loadedFields' ) );\n if ( 1 != response.data.settings.hide_complete ) {\n nfRadio.channel( 'captcha' ).trigger( 'reset' );\n }\n\t\t\t}\n\n\t\t\tif ( 1 == response.data.settings.hide_complete ) {\n\t\t\t\t/**\n\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t */\n\t\t\t\tformModel.trigger( 'hide' );\n\t\t\t\t// jQuery( '.nf-fields' ).hide();\n\t\t\t\t// jQuery( '.nf-form-title' ).hide();\n\t\t\t}\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldProduct',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'product' ), 'init:model', this.register );\n nfRadio.channel( 'product' ).reply( 'get:calcValue', this.getCalcValue, this );\n },\n\n register: function( model ) {\n model.set( 'renderProductQuantity', this.renderProductQuantity );\n model.set( 'renderProduct', this.renderProduct );\n model.set( 'renderOptions', this.renderOptions );\n },\n\n renderProduct: function(){\n switch( this.product_type ) {\n case 'user':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-textbox' );\n return template( this );\n break;\n case 'hidden':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-hidden' );\n return template( this );\n break;\n\n case 'dropdown':\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-dropdown' );\n return template( this );\n break;\n default:\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-single' );\n return template( this );\n }\n },\n\n renderProductQuantity: function(){\n if ( 1 == this.product_use_quantity ) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-quantity' );\n return template( this );\n }\n },\n\n renderOptions: function() {\n var that = this;\n var html = '';\n _.each( this.options, function( option ) {\n if ( 1 == option.selected ) {\n var selected = true;\n } else {\n var selected = false;\n }\n\n option.selected = selected;\n option.fieldID = that.id;\n option.classes = that.classes;\n option.currentValue = that.value;\n\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-product-' + that.product_type + '-option' );\n html += template( option );\n } );\n\n return html;\n },\n\n getCalcValue: function( fieldModel ) {\n\n var product_price = fieldModel.get( 'product_price' );\n var product_quantity = fieldModel.get( 'value' );\n\n return product_price * product_quantity;\n }\n });\n\n return controller;\n} );\n\n","define('controllers/fieldTotal',[], function() {\n var controller = Marionette.Object.extend( {\n\n totalModel: {},\n\n productTotals: {},\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'total' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'shipping' ), 'init:model', this.registerShipping );\n },\n\n register: function( totalModel ){\n this.totalModel = totalModel;\n\n var formID = totalModel.get( 'formID' );\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'loaded', this.onFormLoaded );\n\n this.listenTo( nfRadio.channel( 'product' ), 'change:modelValue', this.onChangeProduct );\n this.listenTo( nfRadio.channel( 'quantity' ), 'change:modelValue', this.onChangeQuantity );\n },\n\n registerShipping: function( shippingModel ){\n this.shippingCost = shippingModel.get( 'shipping_cost' );\n },\n\n onFormLoaded: function( formModel ){\n\n var fieldModels = formModel.get( 'fields' ).models;\n\n var productFields = {};\n var quantityFields = {};\n\n for( var model in fieldModels ){\n\n var field = fieldModels[ model ];\n var fieldID = field.get( 'id' );\n\n // TODO: Maybe use switch\n if( 'product' == field.get( 'type' ) ){\n productFields[ fieldID ] = field;\n } else if( 'quantity' == field.get( 'type' ) ){\n var productID = field.get( 'product_assignment' );\n quantityFields[ productID ] = field;\n }\n }\n\n for( var productID in productFields ){\n\n var product = productFields[ productID ];\n\n var productPrice = Number( product.get( 'product_price' ) );\n\n if( quantityFields[ productID ] ){\n\n productPrice *= quantityFields[ productID ].get( 'value' );\n\n } else if( 1 == product.get( 'product_use_quantity' ) ){\n\n productPrice *= product.get( 'value' );\n\n }\n\n this.productTotals[ productID ] = productPrice;\n }\n\n this.updateTotal();\n },\n\n onChangeProduct: function( model ){\n var productID = model.get( 'id' );\n var productPrice = Number( model.get( 'product_price' ) );\n var productQuantity = Number( model.get( 'value' ) );\n var newTotal = productQuantity * productPrice;\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n onChangeQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var productField = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n var productPrice = Number( productField.get( 'product_price' ) );\n\n var quantity = Number( model.get( 'value' ) );\n\n var newTotal = quantity * productPrice;\n\n this.productTotals[ productID ] = newTotal;\n\n this.updateTotal();\n },\n\n updateTotal: function(){\n\n var newTotal = 0;\n\n for( var product in this.productTotals ){\n newTotal += Number( this.productTotals[ product ] );\n }\n\n if( newTotal && this.shippingCost ) {\n // Only add shipping if there is a cost.\n newTotal += Number(this.shippingCost);\n }\n\n this.totalModel.set( 'value', newTotal.toFixed( 2 ) );\n this.totalModel.trigger( 'reRender' );\n }\n });\n\n return controller;\n});\n","define('controllers/fieldQuantity',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n this.listenTo( nfRadio.channel( 'quantity' ), 'init:model', this.registerQuantity );\n },\n\n registerQuantity: function( model ){\n var productID = model.get( 'product_assignment' );\n var product = nfRadio.channel( 'fields' ).request( 'get:field', productID );\n\n if( product ) {\n product.set('product_use_quantity', 0);\n }\n },\n\n });\n\n return controller;\n});\n","/**\n * Model that represents a calculation.\n *\n * On init, we trigger a radio message so that controllers can do things when a calc model inits.\n */\ndefine( 'models/calcModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\t\tinitialize: function() {\n\t\t\t// Set our form id\n\t\t\tthis.set( 'formID', this.collection.options.formModel.get( 'id' ) );\n\t\t\t// Set our initial fields object to empty. This will hold our key/value pairs.\n\t\t\tthis.set( 'fields', {} );\n\t\t\t// Trigger a radio message to let controllers know we've inited this model.\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'init:model', this );\n\t\t\t// When we change the value of this calculation, send out a radio message\n\t\t\tthis.on( 'change:value', this.changeValue, this );\n\t\t},\n\n\t\t/**\n\t\t * Trigger a radio message when a field present in our calculation changes\n\t\t *\n\t\t * The listener that triggers/calls this function is in controllers/calculations\n\t\t * \n\t\t * @since 3.0\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( fieldModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:field', this, fieldModel );\n\t\t},\n\n\t\tchangeCalc: function( targetCalcModel ) {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:calc', this, targetCalcModel );\n\t\t},\n\n\t\tchangeValue: function() {\n\t\t\tnfRadio.channel( 'calc' ).trigger( 'change:value', this );\n\t\t}\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/calcCollection',['models/calcModel'], function( CalcModel ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: CalcModel,\n\t\tcomparator: 'order',\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n _.each( models, function( model ) {\n \tif( 'undefined' == typeof model.dec ) return;\n if ( '' === model.dec.toString().trim() ) model.dec = 2;\n model.dec = parseInt( model.dec );\n } );\n\t\t\t/*\n\t\t\t * Respond to requests for our calc model\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + options.formModel.get( 'id' ) ).reply( 'get:calc', this.getCalc, this );\n\t\t},\n\n\t\tgetCalc: function( key ) {\n\t\t\treturn this.findWhere( { name: key } );\n\t\t}\n\t} );\n\treturn collection;\n} );\n","/**\n * Controller responsible for keeping up with calculations.\n */\ndefine('controllers/calculations',['models/calcCollection'], function( CalcCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.calcs = {};\n\t\t\tthis.displayFields = {};\n\t\t\t// When our form initialises, check to see if there are any calculations that need to be tracked.\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'loaded', this.registerCalcs );\n \n // When our collection gets reset, reset calculation tracking as well.\n this.listenTo( nfRadio.channel( 'fields' ), 'reset:collection', this.resetCalcs );\n\n\t\t\t// When a calc model is initialised, run a setup function.\n\t\t\t// this.listenTo( nfRadio.channel( 'calc' ), 'init:model', this.setupCalc );\n\n\t\t\t// When a field referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:field', this.changeField );\n\n\t\t\t// When a calculation referenced by a calc model changes, update our calc.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:calc', this.changeCalc );\n\n\t\t\t/*\n\t\t\t * Listen to our field model init for fields that want to display calc values.\n\t\t\t * If that field has a calc merge tag, replace it with the default calc value.\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t_.each( nfFrontEnd.use_merge_tags.calculations, function( fieldType ) {\n\t\t\t\tthat.listenTo( nfRadio.channel( 'fields-' + fieldType ), 'init:model', that.initDisplayField );\n\t\t\t} );\n\t\t\t\n\t\t\t// When we change our calc value, update any display fields.\n\t\t\tthis.listenTo( nfRadio.channel( 'calc' ), 'change:value', this.updateDisplayFields );\n\n\t\t\t// Set an init variable so that we only call reRender on the display field on change, not on init.\n\t\t\tthis.init = {};\n\t\t},\n \n /**\n * Passthrough function to reset tracking of calculations when the fieldCollection is reset.\n * \n * @since 3.2\n * @param backbone.collection fieldCollection\n * @return void\n */\n resetCalcs: function( fieldCollection ) {\n if( 'undefined' != typeof( fieldCollection.options.formModel ) ) {\n this.registerCalcs( fieldCollection.options.formModel ); \n }\n },\n\n\t\t/**\n\t\t * When our form loads, create a collection out of any calculations.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model formModel\n\t\t * @return void\n\t\t */\n\t\tregisterCalcs: function( formModel ) {\n\t\t\tvar calcCollection = new CalcCollection( formModel.get( 'settings' ).calculations, { formModel: formModel } );\n\t\t\tthis.calcs[ formModel.get( 'id' ) ] = calcCollection;\n\t\t\tvar that = this;\n\n\t\t\t_.each( calcCollection.models, function( calcModel ) {\n\t\t\t\t/*\n\t\t\t\t * We set a property on our init variable for the calc model we're looping over.\n\t\t\t\t * This property is set to true so that when we make changes to the calc model on the next line\n\t\t\t\t * the field view doesn't try to redraw itself.\n\t\t\t\t * If we don't do this, the 'reRender' attribute of the model will be set before the view is initialized,\n\t\t\t\t * which means that setting 'reRender' to true will never re-render the view.\n\t\t\t\t */\n\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = true;\n\t\t\t\t// Setup our calculation models with initial values and register listeners for calc-related fields.\n\t\t\t\tthat.setupCalc( calcModel );\n\t\t\t} );\n\t\t},\n\n\t\t/**\n\t\t * When a calculation model is instantiated from the registerCalcs function:\n\t\t *\n\t\t * Use a regex to get an array of the field keys\n\t\t * Setup an initial key/values array\n\t\t * Check for any references to other calculations\n\t\t * Set the initial value of our calculation\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @return void\n\t\t */\n\t\tsetupCalc: function( calcModel ) {\n\t\t\t// Setup our that var so we can access 'this' context in our loop.\n\t\t\tvar that = this;\n\t\t\t// Get our equation\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\t// We want to keep our original eq intact, so we use a different var for string replacment.\n\t\t\tvar eqValues = eq;\n // Store the name for debugging later.\n var calcName = calcModel.get( 'name' );\n\n\t\t\t/* TODO:\n\t\t\t * It might be possible to refactor these two if statements.\n\t\t\t * The difficulty is that each has a different method of retreiving the specific data model.\n\t\t\t */\n\t\t\t// Check to see if we have any field merge tags in our equation.\n\t\t\tvar fields = eq.match( new RegExp( /{field:(.*?)}/g ) );\n\t\t\tif ( fields ) {\n\t\t\t\t/*\n\t\t\t\t * fields is now an array of field keys that looks like:\n\t\t\t\t * ['{field:key'], ['{field:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our field keys to setup our field key array and hook up our field change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tfields = fields.map( function( field ) {\n\t\t\t\t\t// field will be {field:key}\n\t\t\t\t\tvar key = field.replace( ':calc}', '' ).replace( '}', '' ).replace( '{field:', '' );\n\n\t\t\t\t\t// Get our field model\n\t\t\t\t\tfieldModel = nfRadio.channel( 'form-' + calcModel.get( 'formID' ) ).request( 'get:fieldByKey', key );\n\n if( 'undefined' == typeof fieldModel ) return;\n\n fieldModel.set( 'clean', false );\n\n\t\t\t\t\t// Register a listener in our field model for value changes.\n\t\t\t\t\tfieldModel.on( 'change:value', calcModel.changeField, calcModel );\n\t\t\t\t\t// Get our calc value from our field model.\n\t\t\t\t\tvar calcValue = that.getCalcValue( fieldModel );\n\t\t\t\t\t// Add this field to our internal key/value object.\n\t\t\t\t\tthat.updateCalcFields( calcModel, key, calcValue );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'field', key, calcValue, eqValues );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t// Check to see if we have any calc merge tags in our equation.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t/*\n\t\t\t\t * calcs is now an array of calc keys that looks like:\n\t\t\t\t * ['{calc:key'], ['{calc:key'], etc.\n\t\t\t\t *\n\t\t\t\t * We need to run a function with each of our calc keys to setup our calc key array and hook up our calc change listner.\n\t\t\t\t */\n\t\t\t\t\n\t\t\t\tcalcs = calcs.map( function( calc ) {\n\t\t\t\t\t// calc will be {calc:name}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\t// Get our calc model\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n\n\t\t\t\t\tif( 'undefined' == typeof targetCalcModel ) return;\n\n\t\t\t\t\t// Listen for changes on our calcluation, since we need to update our calc when it changes.\n\t\t\t\t\ttargetCalcModel.on( 'change:value', calcModel.changeCalc, calcModel );\n\t\t\t\t\t// // Get our calc value from our calc model.\n\t\t\t\t\tvar calcValue = targetCalcModel.get( 'value' );\n\t\t\t\t\t// Update the string tracking our merged eq with the calc value.\n\t\t\t\t\teqValues = that.replaceKey( 'calc', name, calcValue, eqValues );\n\t\t\t\t} );\n\n\t\t\t}\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, 0 );\n // Scrub line breaks.\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n\t\t\t// Evaluate the equation and update the value of this model.\n\t\t\ttry {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Setup)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n\t\t\t} catch( e ) {\n //console.log( calcName );\n\t\t\t\tconsole.log( e );\n\t\t\t}\n \n // If for whatever reason, we got NaN, reset that to 0.\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\n\t\t},\n\n\t\t/**\n\t\t * Update an item in our key/value pair that represents our fields and calc values.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @param string \t\t\tkey\n\t\t * @param string \t\t\tcalcValue\n\t\t * @return void\n\t\t */\n\t\tupdateCalcFields: function( calcModel, key, calcValue ) {\n\t\t\tvar fields = calcModel.get( 'fields' );\n\t\t\tfields[ key ] = calcValue;\n\t\t\tcalcModel.set( 'fields', fields );\n\t\t},\n\n\t\t/**\n\t\t * Get a calc value from a field model.\n\t\t *\n\t\t * Sends a request to see if there's a special calc value\n\t\t * Uses the value of the field if there is not.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model fieldModel\n\t\t * @return value\n\t\t */\n\t\tgetCalcValue: function( fieldModel ) {\n\t\t\t/*\n\t\t\t * Send out a request on the field type and parent type channel asking if they need to modify the calc value.\n\t\t\t * This is helpful for fields like lists that can have a different calc_value than selected value.\n\t\t\t */\n\t\t\tvar value = nfRadio.channel( fieldModel.get( 'type' ) ).request( 'get:calcValue', fieldModel );\n\t\t\t\n\t\t\t// Preset with our field value.\n\t\t\tvar calcValue = fieldModel.get( 'value' );\n\t\t\tif( 'undefined' !== typeof value ) {\n\t\t\t\tif( value || 0 === value ) {\n\t\t\t\t\t// If we got a valid number, use that instead.\n\t\t\t\t\tcalcValue = value;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\tvar machineNumber = localeConverter.numberDecoder(calcValue);\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(calcValue);\n\n\t\t\tif ( 'undefined' !== typeof machineNumber && jQuery.isNumeric( machineNumber ) ) {\n\t\t\t\tvalue = formattedNumber;\n\t\t\t} else {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\t// }\n\n\t\t\tif ( ! fieldModel.get( 'visible' ) ) {\n\t\t\t\tvalue = 0;\n\t\t\t}\n\t\t\n\t\t\treturn value;\n\t\t},\n\n\t\t/**\n\t\t * Replace instances of key with calcValue. This is used to replace one key at a time.\n\t\t *\n\t\t * If no eq is passed, use calcModel eq.\n\t\t *\n\t\t * Returns a string with instances of key replaced with calcValue.\n\t\t * \n\t\t * @since version\n\t\t * @param string \tkey \n\t\t * @param string \tcalcValue \n\t\t * @param string \teq \n\t\t * @return string \teq \n\t\t */\n\t\treplaceKey: function( type, key, calcValue, eq ) {\n\t\t\teq = eq || calcModel.get( 'eq' );\n\n\t\t\ttag = '{' + type + ':' + key + '}';\n\t\t\tvar reTag = new RegExp( tag, 'g' );\n\n\t\t\tcalcTag = '{' + type + ':' + key + ':calc}';\n\t\t\tvar reCalcTag = new RegExp( calcTag, 'g' );\n\n\t\t\teq = eq.replace( reTag, calcValue );\n\t\t\teq = eq.replace( reCalcTag, calcValue );\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Takes a calcModel and returns a string eq with all keys replaced by their appropriate calcValues.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model \tcalcModel\n\t\t * @return string\t\t\teq\n\t\t */\n\t\treplaceAllKeys: function( calcModel ) {\n\t\t\tvar eq = calcModel.get( 'eq' );\n\t\t\tvar that = this;\n\t\t\t_.each( calcModel.get( 'fields' ), function( value, key ) {\n\t\t\t\teq = that.replaceKey( 'field', key, value, eq );\n\t\t\t} );\n\n\t\t\t// If we have any calc merge tags, replace those as well.\n\t\t\tvar calcs = eq.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calc ) {\n\t\t\t\t\t// calc will be {calc:key}\n\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' );\n\t\t\t\t\tvar targetCalcModel = calcModel.collection.findWhere( { name: name } );\n if( 'undefined' == typeof targetCalcModel ) return;\n\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\teq = eq.replace( re, targetCalcModel.get( 'value' ) );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\treturn eq;\n\t\t},\n\n\t\t/**\n\t\t * Function that's called when a field within the calculation changes.\n\t\t * \n\t\t * @since 3.0\n\t\t * @param backbone.model calcModel\n\t\t * @param backbone.model fieldModel\n\t\t * @return void\n\t\t */\n\t\tchangeField: function( calcModel, fieldModel ) {\n\t\t\n\t\t\tvar key = fieldModel.get( 'key' );\n\t\t\tvar value = this.getCalcValue( fieldModel );\n\t\t\t\n\t\t\tthis.updateCalcFields( calcModel, key, value );\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\n // Scrub unmerged tags (ie deleted/nox-existent fields/calcs, etc).\n eqValues = eqValues.replace( /{([a-zA-Z0-9]|:|_|-)*}/g, '0' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Field)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation(eqValues) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n if(this.debug())console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\n\t\t\t// Debugging console statement.\n\t\t\t// console.log( eqValues + ' = ' + calcModel.get( 'value' ) );\t\t\n\t\t},\n\n\t\tinitDisplayField: function( fieldModel ) {\n\n\t\t\tif( ! fieldModel.get( 'default' ) || 'string' != typeof fieldModel.get( 'default' ) ) return;\n\n\t\t\tvar calcs = fieldModel.get( 'default' ).match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\tif ( calcs ) {\n\t\t\t\t_.each( calcs, function( calcName ) {\n\t\t\t\t\tcalcName = calcName.replace( '{calc:', '' ).replace( '}', '' ).replace( ':2', '' );\n\t\t\t\t\tthis.displayFields[ calcName ] = this.displayFields[ calcName ] || [];\n\t\t\t\t\tthis.displayFields[ calcName ].push( fieldModel );\n\t\t\t\t}, this );\n\t\t\t}\n\t\t},\n\n\t\tupdateDisplayFields: function( calcModel ) {\n\t\t\tvar that = this;\n\t\t\tif ( 'undefined' != typeof this.displayFields[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t_.each( this.displayFields[ calcModel.get( 'name' ) ], function( fieldModel ) {\n\n\t\t\t\t\tvar value = '';\n\n\t\t\t\t\t/**\n\t\t\t\t\t * if we have a html field, we want to use the actual\n\t\t\t\t\t * value and re-evaluate\n\t\t\t\t **/\n\t\t\t\t\tif( \"html\" === fieldModel.get( 'type' ) ) {\n\t\t\t\t\t\tvalue = fieldModel.get( 'value' );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// if not a html field, use default to re-evaluate\n\t\t\t\t\t\tvalue = fieldModel.get( 'default' );\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t This is a fix for the issue of the merge tags being\n\t\t\t\t\t display'd\n\t\t\t\t\t */\n\n\t\t\t\t\t// Find spans with calc data-key values\n\t\t\t\t\tvar spans = value.match( new RegExp( /<span data-key=\"calc:(.*?)<\\/span>/g ));\n\t\t\t\t\t_.each( spans, function( spanVar ) {\n\t\t\t\t\t\t// transform the span back into a merge tag\n\t\t\t\t\t\tvar tmpCalcTag = \"{\" + spanVar.replace(\"<span\" +\n\t\t\t\t\t\t\t\" data-key=\\\"\", \"\" ).replace( /\">(.*?)<\\/span>/, \"\" ) + \"}\";\n\n\t\t\t\t\t\tvalue = value.replace( spanVar, tmpCalcTag );\n\t\t\t\t\t} );\n\t\t\t\t\tvar calcs = value.match( new RegExp( /{calc:(.*?)}/g ) );\n\t\t\t\t\t_.each( calcs, function( calc ) {\n//\t\t\t\t\t\tvar rounding = false;\n\t\t\t\t\t\t// calc will be {calc:key} or {calc:key:2}\n\t\t\t\t\t\tvar name = calc.replace( '}', '' ).replace( '{calc:', '' ).replace( ':2', '' );\n\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * TODO: Bandaid for rounding calculations to two decimal places when displaying the merge tag.\n\t\t\t\t\t\t * Checks to see if we have a :2. If we do, remove it and set our rounding variable to true.\n\t\t\t\t\t\t */\n//\t\t\t\t\t\tif ( -1 != name.indexOf( ':2' ) ) {\n//\t\t\t\t\t\t\trounding = true;\n//\t\t\t\t\t\t\tname = name.replace( ':2', '' );\n//\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar calcModel = that.calcs[ fieldModel.get( 'formID' ) ].findWhere( { name: name } );\n\t\t\t\t\t\tvar re = new RegExp( calc, 'g' );\n\t\t\t\t\t\tvar calcValue = calcModel.get( 'value' ) ;\n//\t\t\t\t\t\tif ( rounding ) {\n//\t\t\t\t\t\t\tcalcValue = calcValue.toFixed( 2 );\n//\t\t\t\t\t\t\trounding = false;\n//\t\t\t\t\t\t}\n\t\t\t\t\t\t\n if( 'undefined' != typeof( calcValue ) ) {\n calcValue = that.applyLocaleFormatting( calcValue, calcModel );\n\t\t\t\t\t\t}\n /*\n * We replace the merge tag with the value\n\t\t\t\t\t\t * surrounded by a span so that we can still find it\n\t\t\t\t\t\t * and not affect itself or other field merge tags\n\t\t\t\t\t\t *\n\t\t\t\t\t\t * Unless this isn't a html field, then we just set\n\t\t\t\t\t\t * value to calcValue\n\t\t\t\t\t\t*/\n if( \"html\" === fieldModel.get( 'type' ) ) {\n\t value = value.replace(re, \"<span data-key=\\\"calc:\" + name + \"\\\">\"\n\t\t + calcValue + \"</span>\");\n } else {\n \tvalue = calcValue;\n }\n\t\t\t\t\t} );\n\t\t\t\t\t\n\t\t\t\t\tfieldModel.set( 'value', value );\n\t\t\t\t\tif ( ! that.init[ calcModel.get( 'name' ) ] ) {\n\t\t\t\t\t\t// fieldModel.set( 'reRender', true );\n\t\t\t\t\t\tfieldModel.trigger( 'reRender' );\n\t\t\t\t\t}\n\t\t\t\t\tthat.init[ calcModel.get( 'name' ) ] = false;\n\t\t\t\t} );\n\t\t\t}\n\t\t},\n\n\t\tgetCalc: function( name, formID ) {\n\t\t\treturn this.calcs[ formID ].findWhere( { name: name } );\n\t\t},\n\n\t\tchangeCalc: function( calcModel, targetCalcModel ) {\n\t\t\tvar eqValues = this.replaceAllKeys( calcModel );\n\t\t\t\n\t\t\teqValues = eqValues.replace( '[', '' ).replace( ']', '' );\n eqValues = eqValues.replace( /\\r?\\n|\\r/g, '' );\n try {\n\t\t\t\tthis.debug('Calculation Decoder ' + eqValues + ' -> ' + this.localeDecodeEquation(eqValues) + ' (Change Calc)');\n\t\t\t\tconst mexp = new Mexp;\n\t\t\t\tcalcModel.set( 'value', Number( mexp.eval( this.localeDecodeEquation( eqValues ) ) ).toFixed( calcModel.get( 'dec' ) ) );\n } catch( e ) {\n console.log( e );\n }\n if( calcModel.get( 'value' ) === 'NaN' ) calcModel.set( 'value', '0' );\n\t\t},\n \n /**\n * Function to apply Locale Formatting to Calculations\n * @since Version 3.1\n * @param Str number\n * \n * @return Str\n */\n applyLocaleFormatting: function( number, calcModel ) {\n\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\tvar formattedNumber = localeConverter.numberEncoder(number, calcModel.get('dec'));\n \n // // Split our string on the decimal to preserve context.\n // var splitNumber = number.split('.');\n // // If we have more than one element (if we had a decimal point)...\n // if ( splitNumber.length > 1 ) {\n // // Update the thousands and remerge the array.\n // splitNumber[ 0 ] = splitNumber[ 0 ].replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // var formattedNumber = splitNumber.join( nfi18n.decimal_point );\n // }\n // // Otherwise (we had no decimal point)...\n // else {\n // // Update the thousands.\n // var formattedNumber = number.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n // }\n return formattedNumber;\n\t\t},\n\t\t\n\t\tlocaleDecodeEquation: function( eq ) {\n\t\t\tvar result = '';\n\t\t\tvar expression = '';\n\t\t\tvar pattern = /[0-9.,]/;\n\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\t\t\t// This pattern accounts for all whitespace characters (including thin space).\n\t\t\teq = eq.replace( /\\s/g, '' );\n\t\t\teq = eq.replace( / /g, '' );\n\t\t\tvar characters = eq.split('');\n\t\t\t// foreach ( characters as character ) {\n\t\t\tcharacters.forEach( function( character ) {\n\t\t\t\t// If the character is numeric or '.' or ','\n\t\t\t\tif (pattern.test(character)) {\n\t\t\t\t\texpression = expression + character;\n\t\t\t\t} else {\n\t\t\t\t\t// If we reach an operator char, append the expression to the result\n\t\t\t\t\tif ( 0 < expression.length ) {\n\t\t\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t\t\t\texpression = '';\n\t\t\t\t\t}\n\t\t\t\t\tresult = result + character;\n\t\t\t\t}\n\t\t\t});\n\t\t\t// The following catches the case of the last character being a digit.\n\t\t\tif ( 0 < expression.length ) {\n\t\t\t\tresult = result + localeConverter.numberDecoder( expression );\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\n\t\tdebug: function(message) {\n\t\t\tif ( window.nfCalculationsDebug || false ) console.log(message);\n\t\t}\n\t\n\t});\n\n\treturn controller;\n} );\n\n","define('controllers/dateBackwardsCompat',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'pikaday-bc' ), 'init', this.dateBackwardsCompat );\t\n },\n\n dateBackwardsCompat: function( dateObject, fieldModel ) {\n \n /**\n * Start backwards compatibility for old pikaday customisation\n */\n // Legacy properties\n dateObject.pikaday = {};\n dateObject.pikaday._o = {};\n\n //Old hook for Pikaday Custom code\n nfRadio.channel( 'pikaday' ).trigger( 'init', dateObject, fieldModel );\n\n // If we've set a disableDayFn property in custom code, hook it up to Flatpickr\n if ( typeof dateObject.pikaday._o.disableDayFn !== 'undefined') {\n dateObject.set( 'disable', [ dateObject.pikaday._o.disableDayFn ] );\n }\n\n //Compatibility for i18n pikaday function\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined' || typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n\n let locale = dateObject.config.locale;\n\n if ( typeof dateObject.pikaday._o.firstDay !== 'undefined') {\n locale.firstDayOfWeek = dateObject.pikaday._o.firstDay;\n }\n\n if ( typeof dateObject.pikaday._o.i18n !== 'undefined') {\n if ( typeof dateObject.pikaday._o.i18n.weekdays !== 'undefined') {\n locale.weekdays.longhand = dateObject.pikaday._o.i18n.weekdays;\n }\n\n if ( typeof dateObject.pikaday._o.i18n.weekdaysShort !== 'undefined') {\n locale.weekdays.shorthand = dateObject.pikaday._o.i18n.weekdaysShort;\n }\n \n if ( typeof dateObject.pikaday._o.i18n.months !== 'undefined') {\n jQuery( '.flatpickr-monthDropdown-months > option' ).each( function() {\n this.text = dateObject.pikaday._o.i18n.months[ this.value ];\n } );\n }\n }\n\n dateObject.set( 'locale', locale );\n \n }\n\n if ( Object.keys(dateObject.pikaday._o).length > 0 ) {\n console.log(\"%cDeprecated Ninja Forms Pikaday custom code detected.\", \"color: Red; font-size: large\");\n console.log(\"You are using deprecated Ninja Forms Pikaday custom code. Support for this custom code will be removed in a future version of Ninja Forms. Please contact Ninja Forms support for more details.\");\n }\n\n }\n\n });\n\n return controller;\n});\n","define('controllers/fieldDate',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'date' ), 'init:model', this.initModel );\n this.listenTo( nfRadio.channel( 'date' ), 'render:view', this.initDatepicker );\n },\n\n initModel: function(model) {\n this.registerFunctions(model);\n },\n\n registerFunctions: function( model ) {\n model.set( 'renderHourOptions', this.renderHourOptions );\n model.set( 'renderMinuteOptions', this.renderMinuteOptions );\n model.set( 'maybeRenderAMPM', this.maybeRenderAMPM );\n model.set( 'customClasses', this.customClasses );\n // Overwrite the default getValue() method.\n model.getValue = this.getValue;\n },\n\n renderHourOptions: function() {\n return this.hours_options;\n },\n\n renderMinuteOptions: function() {\n return this.minutes_options;\n },\n\n maybeRenderAMPM: function() {\n if ( 'undefined' == typeof this.hours_24 || 1 == this.hours_24 ) {\n return;\n }\n var requiredAttr = (this.required == 1) ? 'aria-required=\"true\" required' : '';\n return `<div style=\"float:left;\" class=\"time-wrap\"><select id=\"ampm-select\" class=\"ampm extra\" aria-label=\"am-pm-select\" ${requiredAttr}><option value=\"am\">AM</option><option value=\"pm\">PM</option></select></div>`;\n },\n\n initDatepicker: function ( view ) {\n view.model.set( 'el', view.el );\n var el = jQuery( view.el ).find( '.nf-element' )[0];\n view.listenTo( nfRadio.channel( 'form-' + view.model.get( 'formID' ) ), 'before:submit', this.beforeSubmit, view );\n\n // If we are using a time_only date_mode, then hide the date input.\n if ( 'undefined' != typeof view.model.get( 'date_mode' ) && 'time_only' == view.model.get( 'date_mode' ) ) {\n jQuery( el ).hide();\n return false;\n }\n\n // Make sure date format is correctly converted.\n var dateFormat = this.convertDateFormat( view.model.get( 'date_format' ) );\n // Make sure this is a deep conversion of the original model.\n view.model.set('date_format', dateFormat);\n\n var dateSettings = {\n onReady: ( selectedDates, datestr, dateObject ) => {\n dateObject.altInput.setAttribute( 'aria-labelledby', jQuery( el ).attr( \"aria-labelledby\" ) );\n dateObject.altInput.setAttribute( 'aria-invalid', false );\n },\n dateFormat: dateFormat,\n altFormat: dateFormat,\n altInput: true,\n ariaDateFormat: dateFormat,\n mode: \"single\",\n allowInput: true,\n disableMobile: \"true\",\n minDate: this.getMinDate(view.model),\n maxDate: this.getMaxDate(view.model),\n };\n \n const nfCustomLocale = this.checkCustomLocale();\n if(nfCustomLocale){\n dateSettings.locale = nfCustomLocale;\n }\n\n // Filter our datepicker settings object.\n let filteredDatePickerSettings = nfRadio.channel( 'flatpickr' ).request( 'filter:settings', dateSettings, view );\n if ( 'undefined' != typeof filteredDatePickerSettings ) {\n dateSettings = filteredDatePickerSettings;\n }\n\n var dateObject = flatpickr( el, dateSettings );\n // Set default value only when value is missing\n if ( 1 == view.model.get( 'date_default' ) && ! view.model.get( 'value' ) ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate);\n view.model.set( 'value', dateObject.defaultDate );\n }\n // Set default value in RFF context, only if value equals today's date\n if( 1 == view.model.get( 'date_default' ) && \n typeof view.model.get('id') === \"string\" && \n view.model.get('id').includes('.') && \n typeof view.model.get( 'value' ) === \"object\" && \n this.isSameDay( view.model.get( 'value' ), new Date() )\n ) {\n dateObject.defaultDate = new Date();\n dateObject.setDate(dateObject.defaultDate, true);\n view.model.set( 'value', dateObject.defaultDate );\n }\n\n //Trigger Pikaday backwards compatibility\n nfRadio.channel( 'pikaday-bc' ).trigger( 'init', dateObject, view.model, view );\n\n nfRadio.channel( 'flatpickr' ).trigger( 'init', dateObject, view.model, view );\n },\n\n beforeSubmit: function( formModel ) { \n //Get value from input if the default date wasn't edited in the field and the value is still a global unformatted date object\n if( _.isObject( this.model.get( 'value' ) ) ){\n // We detect the flatpickr input inside the element by its type instead of ID as the dot in the repeater children ID is not compatible with query selector\n const date_value = this.el.querySelector(\"input[type='hidden']\").value;\n this.model.set( 'value', date_value );\n }\n //Detect repeater and set data at the repeater level\n const inputID = this.el.dataset.fieldId;\n if(inputID.search(\".\") !== -1){\n nfRadio.channel('field-repeater').trigger('set:value');\n // Don't convert string value into object for time_only type in repeatable fieldset field\n if(this.model.get( 'date_mode' ) === \"time_only\"){\n return;\n }\n }\n\n if ( 'date_only' == this.model.get( 'date_mode' ) ) {\n return false;\n }\n let hour = jQuery( this.el ).find( '.hour' ).val();\n let minute = jQuery( this.el ).find( '.minute' ).val();\n let ampm = jQuery( this.el ).find( '.ampm' ).val();\n let current_value = this.model.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let date_value = {\n date: date,\n hour: hour,\n minute: minute,\n ampm: ampm,\n };\n\n this.model.set( 'value', date_value );\n },\n\n getMinDate: function( fieldModel ) {\n let minDate = null;\n if(typeof fieldModel.get( 'year_range_start' ) !== \"undefined\"){\n const yearRangeStart = fieldModel.get( 'year_range_start' );\n if( yearRangeStart ) {\n minDate = flatpickr.formatDate(new Date(String( yearRangeStart )), fieldModel.get('date_format'));\n }\n } \n return minDate;\n },\n\n getMaxDate: function( fieldModel ) {\n let maxDate = null;\n if(typeof fieldModel.get( 'year_range_end' ) !== \"undefined\"){\n const yearRangeEnd = fieldModel.get( 'year_range_end' );\n if( yearRangeEnd ) {\n maxDate = flatpickr.formatDate(new Date(String( yearRangeEnd )), fieldModel.get('date_format'));\n }\n }\n return maxDate;\n },\n\n convertDateFormat: function( dateFormat ) {\n //If dateFormat is empty or null, try to get a value from the Field's model\n if(!dateFormat && this.model){\n dateFormat = this.model.get('date_format');\n } \n //If it is still empty or null set it to be \"default\"\n if (!dateFormat){\n dateFormat = \"default\";\n }\n //Convert PHP format in setting to flatPickr expected setting if needed\n const lookup = {\n 'MM/DD/YYYY': 'm/d/Y',\n 'MM-DD-YYYY': 'm-d-Y',\n 'MM.DD.YYYY': 'm.d.Y',\n 'DD/MM/YYYY': 'd/m/Y',\n 'DD-MM-YYYY': 'd-m-Y',\n 'DD.MM.YYYY': 'd.m.Y',\n 'YYYY-MM-DD': 'Y-m-d',\n 'YYYY/MM/DD': 'Y/m/d',\n 'YYYY.MM.DD': 'Y.m.d',\n 'dddd, MMMM D YYYY': 'l, F d Y',\n 'default': nfi18n.dateFormat ? nfi18n.dateFormat : 'default'\n };\n return Object.keys(lookup).includes(dateFormat) ? lookup[dateFormat] : dateFormat;\n },\n\n customClasses: function( classes ) {\n if ( 'date_and_time' == this.date_mode ) {\n classes += ' date-and-time';\n }\n return classes;\n },\n //retrieve localized values and assign them to flatpickr locale format\n checkCustomLocale: function() {\n let customLocale = {};\n if(nfi18n){\n if(nfi18n.months || nfi18n.monthsShort){\n customLocale.months = {};\n if(nfi18n.months){\n customLocale.months.longhand = nfi18n.months;\n }\n if(nfi18n.monthsShort){\n customLocale.months.shorthand = nfi18n.monthsShort;\n }\n }\n if(nfi18n.weekdays || nfi18n.weekdaysShort){\n customLocale.weekdays = {};\n if(nfi18n.weekdays){\n customLocale.weekdays.longhand = nfi18n.weekdays;\n }\n if(nfi18n.weekdaysShort){\n customLocale.weekdays.shorthand = nfi18n.weekdaysShort;\n }\n }\n if(nfi18n.startOfWeek){\n customLocale.firstDayOfWeek = nfi18n.startOfWeek;\n }\n }\n return _.isEmpty(customLocale) ? false : customLocale;\n },\n\n // This function is called whenever we want to know the value of the date field.\n // Since it could be a date/time field, we can't return just the value.\n getValue: function() {\n\n if ( 'date_only' == this.get( 'date_mode' ) ) {\n return this.get( 'value' );\n }\n let el = this.get( 'el' );\n let hour = jQuery( el ).find( '.hour' ).val();\n let minute = jQuery( el ).find( '.minute' ).val();\n let ampm = jQuery( el ).find( '.ampm' ).val();\n let current_value = this.get( 'value' );\n let date = false;\n\n if ( _.isObject( current_value ) ) {\n date = current_value.date;\n } else {\n date = current_value;\n }\n\n let value = '';\n\n if ( 'undefined' != typeof date ) {\n value += date;\n }\n\n if ( 'undefined' != typeof hour && 'undefined' != typeof minute ) {\n value += ' ' + hour + ':' + minute;\n }\n\n if ( 'undefined' != typeof ampm ) {\n value += ' ' + ampm;\n }\n\n return value;\n\n // let date_value = {\n // date: date,\n // hour: hour,\n // minute: minute,\n // ampm: ampm,\n // };\n\n // this.model.set( 'value', date_value );\n },\n\n isSameDay: function(date1, date2) {\n const d1 = new Date(date1);\n const d2 = new Date(date2);\n d1.setHours(0, 0, 0, 0);\n d2.setHours(0, 0, 0, 0);\n return d1.getTime() === d2.getTime();\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldRecaptcha',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha' ), 'init:model', this.initRecaptcha );\n this.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.resetRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\n \t\tnfRadio.channel( 'recaptcha' ).reply( 'update:response', this.updateResponse, this, model.id );\n },\n\n updateResponse: function( response, fieldID ) {\n \tvar model = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n\t\t\tmodel.set( 'value', response );\n nfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'required-error' );\n },\n\n resetRecaptcha: function() {\n\t\t\tvar recaptchaID = 0;\n\t\t\tjQuery( '.g-recaptcha' ).each( function() {\n\t\t\t\ttry {\n\t\t\t\t\tgrecaptcha.reset( recaptchaID );\n\t\t\t\t} catch( e ){\n\t\t\t\t\tconsole.log( 'Notice: Error trying to reset grecaptcha.' );\n\t\t\t\t}\n\t\t\t\trecaptchaID++;\n\t\t\t} );\n }\n });\n\n return controller;\n} );\n","define('controllers/fieldRecaptchaV3',[], function() {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'recaptcha_v3' ), 'init:model', this.initRecaptcha );\n },\n\n \tinitRecaptcha: function ( model ) {\t\t\t\n\t const formID = model.get( 'formID' );\n\t\t\t//Run recaptcha on init to allow cookie validation process\n\t\t\tthis.processRecaptcha(formID, model);\n\t\t\t//Rerun process every 110 seconds ( prevent Google recaptcha timeout out at 12O seconds )\n\t\t\tsetInterval(this.processRecaptcha, 110000, formID, model );\n },\n\n\t\tprocessRecaptcha: function(formID, model) {\n\t\t\ttry{\n\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'disable:submit', model );\n\t\t\t\tgrecaptcha.ready( function() {\n\t\t\t\t\tgrecaptcha.execute( model.get( 'site_key' ), {\n\t\t\t\t\t\taction: 'register'\n\t\t\t\t\t} ).then( function( token ) {\n\t\t\t\t\t\tmodel.set( 'value', token );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formID ).trigger( 'enable:submit', model );\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t\t} catch (e) {\n\t\t\t\t//Wait for the form to fully load and display error\n\t\t\t\tjQuery(document).on( 'nfFormReady', (layoutView) => {\n\t\t\t\t\t//Get consent details as recaptcha failed to load\n\t\t\t\t\tlet consent = nf_check_recaptcha_consent();\n\t\t\t\t\n\t\t\t\t\t//Get submit button\n\t\t\t\t\tlet submitFieldID;\n\t\t\t\t\tmodel.collection.models.forEach( (fieldModel) => {\n\t\t\t\t\t\tif(fieldModel.get(\"type\") === \"submit\"){\n\t\t\t\t\t\t\tsubmitFieldID = fieldModel.get(\"id\");\n\t\t\t\t\t\t};\n\t\t\t\t\t});\n\t\t\t\t\t//Display generic error\n\t\t\t\t\tnfRadio.channel( 'fields' ).request(\"add:error\", submitFieldID, \"recaptcha-v3-missing\", model.collection.options.formModel.get(\"settings\").recaptchaConsentMissing );\n\t\t\t\t\t//Create error message and add possible interaction with cookie consent depending on consent result\n\t\t\t\t\t//Display filterable error to add consent\n\t\t\t\t\tthis.nf_build_default_consent_action(model, consent.services, submitFieldID, layoutView );\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tnf_build_default_consent_action: function ( model, services, submitFieldID, layoutView ) {\n\t\t\t//Return if no consent management is detected\n\t\t\tconst returnIf = services.length <= 1 && services.includes(\"missing_cookie\") || services.length <= 0;\n\t\t\tif( !returnIf ){ \n\t\t\t\tlet actionElement = document.createElement(\"div\");\n\t\t\t\tactionElement.setAttribute(\"id\", \"nf_recaptcha_consent_event\");\n\t\t\t\tactionElement.innerText += model.collection.options.formModel.get(\"settings\").recaptchaConsentEvent;\n\n\t\t\t\tconst detailData = {\n\t\t\t\t\t\"services\": services,\n\t\t\t\t\t\"element\": actionElement,\n\t\t\t\t\t\"submitFieldID\": submitFieldID, \n\t\t\t\t\t\"layoutView\": layoutView\n\t\t\t\t}\n\t\t\t\t//Allow filtering of the element before printing it\n\t\t\t\tlet nf_consent_link_event = new CustomEvent('nf_consent_link', {detail: detailData});\n\t\t\t\tdocument.dispatchEvent(nf_consent_link_event);\n\n\t\t\t\t//Append action to error element\n\t\t\t\tconst genericErrorElements = document.getElementsByClassName(\"nf-error-recaptcha-v3-missing\");\n\t\t\t\tconst genericErrorElementsList = Array.prototype.slice.call(genericErrorElements);\n\t\t\t\tgenericErrorElementsList.forEach( (error) => {\n\t\t\t\t\terror.append( actionElement );\n\t\t\t\t});\n\t\t\t\t\n\t\t\t}\n\t\t}\n\t\t\n });\n\n return controller;\n} );\n","define('controllers/fieldHTML',[], function() {\n var controller = Marionette.Object.extend({\n\n htmlFields: [],\n trackedMergeTags: [],\n\n initialize: function () {\n this.listenTo( Backbone.Radio.channel( 'fields-html' ), 'init:model', this.setupFieldMergeTagTracking );\n },\n\n setupFieldMergeTagTracking: function( fieldModel ) {\n this.htmlFields.push( fieldModel );\n\n var formID = fieldModel.get( 'formID' );\n\n this.listenTo( nfRadio.channel( 'form-' + formID ), 'init:model', function( formModel ){\n\n var mergeTags = fieldModel.get( 'default' ).match( new RegExp( /{field:(.*?)}/g ) );\n if ( ! mergeTags ) return;\n\n _.each( mergeTags, function( mergeTag ) {\n var fieldKey = mergeTag.replace( '{field:', '' ).replace( '}', '' );\n var fieldModel = formModel.get( 'fields' ).findWhere({ key: fieldKey });\n if( 'undefined' == typeof fieldModel ) return;\n\n this.trackedMergeTags.push( fieldModel );\n this.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'change:modelValue', this.updateFieldMergeTags );\n }, this );\n\n // Let's get this party started!\n this.updateFieldMergeTags();\n }, this );\n },\n\n updateFieldMergeTags: function( fieldModel ) {\n _.each( this.htmlFields, function( htmlFieldModel ){\n var value = htmlFieldModel.get( 'value' );\n _.each( this.trackedMergeTags, function( fieldModel ){\n\n /* Search the value for any spans with mergetag data-key\n * values\n */\n var spans = value.match( new RegExp( /<span data-key=\"field:(.*?)<\\/span>/g ) );\n\t _.each( spans, function( spanVar ) {\n\t /* See if the span string contains the current\n * fieldModel's key. If so replace the span with a\n * merge tag for evaluation.\n */\n if( -1 < spanVar.indexOf( \"data-key=\\\"field:\" + fieldModel.get( 'key' ) ) ) {\n\t value = value.replace( spanVar, \"{field:\" + fieldModel.get( 'key' ) + \"}\" );\n }\n\t } );\n\n var mergeTag = '{field:' + fieldModel.get( 'key' ) + '}';\n\n const fieldValue = fieldModel.get( 'type' ) === \"repeater\" ? this.displayRepeaterData(fieldModel) : fieldModel.getValue();\n\n\t /* We replace the merge tag with the value\n\t * surrounded by a span so that we can still find it\n\t * and not affect itself or other field merge tags\n\t */\n value = value.replace( mergeTag, \"<span data-key=\\\"field:\"\n + fieldModel.get( 'key' ) + \"\\\">\"\n + fieldValue + \"</span>\" );\n }, this ) ;\n htmlFieldModel.set( 'value', value );\n htmlFieldModel.trigger( 'reRender' );\n }, this );\n },\n\n displayRepeaterData: function(fieldModel) {\n const repeaterFieldIDs = Object.keys(fieldModel.getValue());\n let returnHTML = \"\", passedFields = [];\n\n _.each(repeaterFieldIDs, function(fieldID){\n if(passedFields.indexOf(fieldID) === -1) {\n const field = nfRadio.channel( 'fields' ).request( 'get:field', fieldID );\n if(typeof field !== \"undefined\"){\n const excluded = ['submit', 'html', 'hidden', 'password', 'passwordconfirm', 'divider', 'hr', 'note', 'unknown', 'button', 'confirm', 'creditcard', 'creditcardcvc', 'creditcardexpiration', 'creditcardfullname', 'creditcardnumber', 'creditcardzip', 'recaptcha', 'recaptcha_v3' ];\n if(excluded.indexOf(field.get('type')) === -1 && field.getValue().toString().length > 0){\n const index = Number(fieldID.split(\"_\").pop()) + 1;\n returnHTML += \"<p>\"+ field.get(\"label\") + \" \" + index + \" : \" + field.getValue() + \"</p>\";\n passedFields.push(fieldID);\n } \n }\n }\n });\n\n return returnHTML;\n }\n\n });\n\n return controller;\n});\n\n","/**\n* When a form is loaded, enable any help text that appears on the page.\n*/\ndefine('controllers/helpText',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', this.initHelpText );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'fieldset:added', this.initHelpText );\n\n\t\t\tnfRadio.channel( 'form' ).reply( 'init:help', this.initHelpText );\n\t\t},\n\n\t\tinitHelpText: function( view ) {\n\n\t\t\tif(view && !view.el && typeof view.get === 'function'){\n\t\t\t\t//Catch repeater fieldset added event\n\t\t\t\tif(view.get(\"type\") === \"repeater\"){\n\t\t\t\t\tview.el = \"#nf-form-\" + view.get(\"formID\") + \"-cont\";\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-help' ).each( function(el) {\n\t\t\t\tvar jBox = jQuery( this ).jBox( 'Tooltip', {\n\t\t\t\t\ttheme: 'TooltipBorder',\n\t\t\t\t\tcontent: jQuery( this ).data( 'text' ),\n\t\t\t\t\ttrigger: 'mouseenter focus',\n\t\t\t\t\tcloseOnMouseleave: true,\n\t\t\t\t\tcloseOnClick: true\n\t\t\t\t});\n\t\t\t// Hide tooltip on keydown and mouseleave\n\t\t\tjQuery(this).on('keydown mouseleave', function() {\n\t\t\t\tjBox.close();\n\t\t\t});\n\t\t\t} );\n\t\t}\n\t});\n\n\treturn controller;\n } );\n\n","define('controllers/fieldTextbox',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n nfRadio.channel( 'textbox' ).reply( 'get:calcValue', this.getCalcValue, this );\n\t\t},\n\n\t\tgetCalcValue: function( fieldModel ) {\n if('currency' == fieldModel.get('mask')){\n var form = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n var currencySymbol = ('undefined' !== typeof form) ? form.get( 'currencySymbol' ) : '';\n var currencySymbolDecoded = jQuery('<textarea />').html(currencySymbol).text();\n return fieldModel.get( 'value' ).replace(currencySymbolDecoded, '');\n }\n\n\t\t\treturn fieldModel.get( 'value' );\n\t\t},\n\t});\n\n\treturn controller;\n} );\n","/**\n * When a form is loaded, enable any rtes in textareas.\n */\ndefine('controllers/fieldTextareaRTE',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'render:view', this.initTextareaRTEs );\n\t\t\tthis.listenTo( nfRadio.channel( 'textarea' ), 'click:extra', this.clickExtra );\n\n\t\t\t// Instantiates the variable that holds the media library frame.\n\t\t\tthis.meta_image_frame;\n\n\t\t\tthis.currentContext = {};\n\n\t\t\tif( 'undefined' == typeof jQuery.summernote ) return;\n\n\t\t\tjQuery.summernote.options.icons = {\n\t\t 'align': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignCenter': 'dashicons dashicons-editor-aligncenter',\n\t\t 'alignJustify': 'dashicons dashicons-editor-justify',\n\t\t 'alignLeft': 'dashicons dashicons-editor-alignleft',\n\t\t 'alignRight': 'dashicons dashicons-editor-alignright',\n\t\t 'indent': 'dashicons dashicons-editor-indent',\n\t\t 'outdent': 'dashicons dashicons-editor-outdent',\n\t\t // 'arrowsAlt': 'dashicons fa-arrows-alt',\n\t\t 'bold': 'dashicons dashicons-editor-bold',\n\t\t 'caret': 'dashicons dashicons-arrow-down',\n\t\t // 'circle': 'dashicons fa-circle',\n\t\t 'close': 'dashicons dashicons-dismiss',\n\t\t 'code': 'dashicons dashicons-editor-code',\n\t\t 'eraser': 'dashicons dashicons-editor-removeformatting',\n\t\t // 'font': 'dashicons fa-font',\n\t\t // 'frame': 'dashicons fa-frame',\n\t\t 'italic': 'dashicons dashicons-editor-italic',\n\t\t 'link': 'dashicons dashicons-admin-links',\n\t\t 'unlink': 'dashicons dashicons-editor-unlink',\n\t\t 'magic': 'dashicons dashicons-editor-paragraph',\n\t\t // 'menuCheck': 'dashicons fa-check',\n\t\t 'minus': 'dashicons dashicons-minus',\n\t\t 'orderedlist': 'dashicons dashicons-editor-ol',\n\t\t // 'pencil': 'dashicons fa-pencil',\n\t\t // 'picture': 'dashicons fa-picture-o',\n\t\t // 'question': 'dashicons fa-question',\n\t\t 'redo': 'dashicons dashicons-redo',\n\t\t 'square': 'dashicons fa-square',\n\t\t // 'strikethrough': 'dashicons fa-strikethrough',\n\t\t // 'subscript': 'dashicons fa-subscript',\n\t\t // 'superscript': 'dashicons fa-superscript',\n\t\t 'table': 'dashicons dashicons-editor-table',\n\t\t // 'textHeight': 'dashicons fa-text-height',\n\t\t // 'trash': 'dashicons fa-trash',\n\t\t 'underline': 'dashicons dashicons-editor-underline',\n\t\t 'undo': 'dashicons dashicons-undo',\n\t\t 'unorderedlist': 'dashicons dashicons-editor-ul',\n\t\t // 'video': 'dashicons fa-youtube-play'\n\t\t };\n\n\t\t},\n\n\t\tinitTextareaRTEs: function( view ) {\n\t\t\tif ( 1 != view.model.get( 'textarea_rte' ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t/*\n\t\t\t * Custom Button for links\n\t\t\t */\n\t\t\tvar that = this;\n\t\t\t// var linkButton = this.linkButton();\n\t\t\tvar linkButton = function( context ) {\n\t\t\t\treturn that.linkButton( context );\n\t\t\t}\n\t\t\tvar mediaButton = function( context ) {\n\t\t\t\treturn that.mediaButton( context );\n\t\t\t}\n\n\t\t\tvar toolbar = [\n\t\t\t\t[ 'paragraphStyle', ['style'] ],\n\t\t\t\t[ 'fontStyle', [ 'bold', 'italic', 'underline','clear' ] ],\n\t\t\t\t[ 'lists', [ 'ul', 'ol' ] ],\n\t\t\t [ 'paragraph', [ 'paragraph' ] ],\n\t\t\t [ 'customGroup', [ 'linkButton', 'unlink' ] ],\n\t\t\t [ 'table', [ 'table' ] ],\n\t\t\t [ 'actions', [ 'undo', 'redo' ] ],\n\t\t\t];\n\n\t\t\tif ( 1 == view.model.get( 'textarea_media' ) && 0 != userSettings.uid ) {\n\t\t\t\ttoolbar.push( [ 'tools', [ 'mediaButton' ] ] );\n\t\t\t}\n\n\t\t\tjQuery( view.el ).find( '.nf-element' ).summernote( {\n\t\t\t\ttoolbar: toolbar,\n\t\t\t\tbuttons: {\n\t\t\t\t\tlinkButton: linkButton,\n\t\t\t\t\tmediaButton: mediaButton\n\t\t\t\t},\n\t\t\t\theight: 150, //set editable area's height\n\t\t\t\tcodemirror: { // codemirror options\n\t\t\t\t theme: 'monokai',\n\t\t\t\t lineNumbers: true\n\t\t\t\t},\n\t\t\t\tprettifyHtml: true,\n\t\t\t\tcallbacks: {\n\t\t\t\t\tonChange: function( e ) {\n\t\t\t\t\t\tview.model.set( 'value', jQuery( this ).summernote( 'code' ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar linkMenu = jQuery( view.el ).find( '.link-button' ).next( '.dropdown-menu' ).find( 'button' );\n\t\t\tlinkMenu.replaceWith(function () {\n\t\t\t return jQuery( '<div/>', {\n\t\t\t class: jQuery( linkMenu ).attr( 'class' ),\n\t\t\t html: this.innerHTML\n\t\t\t } );\n\t\t\t} );\n\t\t},\n\n\t\tlinkButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar linkButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-button' );\n\t\t\tvar linkDropdown = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-link-dropdown' );\n\t\t\treturn ui.buttonGroup([\n\t\t\t\tui.button({\n\t className: 'dropdown-toggle link-button',\n\t contents: linkButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertLink,\n\t click: function( e ) {\n\t \tthat.clickLinkButton( e, context );\n\t },\n\t data: {\n\t toggle: 'dropdown'\n\t }\n\t }),\n\t\t\t\tui.dropdown([\n\t ui.buttonGroup({\n\t children: [\n\t ui.button({\n\t contents: linkDropdown({}),\n\t tooltip: ''\n\t }),\n\t ]\n\t })\n\t ])\n\t\t\t]).render();\n\t\t},\n\n\t\tmediaButton: function( context ) {\n\t\t\tvar that = this;\n\t\t\tvar ui = jQuery.summernote.ui;\n\t\t\tvar mediaButton = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-rte-media-button' );\n\t\t\treturn ui.button({\n\t className: 'dropdown-toggle',\n\t contents: mediaButton({}),\n\t tooltip: nfi18n.fieldTextareaRTEInsertMedia,\n\t click: function( e ) {\n\t \tthat.openMediaManager( e, context );\n\t }\n\t }).render();\n\t\t},\n\n\t\topenMediaManager: function( e, context ) {\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\t// If the frame already exists, re-open it.\n\t\t\tif ( this.meta_image_frame ) {\n\t\t\t\tthis.meta_image_frame.open();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Sets up the media library frame\n\t\t\tthis.meta_image_frame = wp.media.frames.meta_image_frame = wp.media({\n\t\t\t\ttitle: nfi18n.fieldTextareaRTESelectAFile,\n\t\t\t\tbutton: { text: 'insert' }\n\t\t\t});\n\n\t\t\tvar that = this;\n\n\t\t\t// Runs when an image is selected.\n\t\t\tthis.meta_image_frame.on('select', function(){\n\n\t\t\t\t// Grabs the attachment selection and creates a JSON representation of the model.\n\t\t\t\tvar media_attachment = that.meta_image_frame.state().get('selection').first().toJSON();\n\t\t\t\tthat.insertMedia( media_attachment, context );\n\t\t\t});\n\n\t\t\t// Opens the media library frame.\n\t\t\tthis.meta_image_frame.open();\n\t\t},\n\n\t\tclickLinkButton: function ( e, context ) {\n\t\t\tvar range = context.invoke( 'editor.createRange' );\n\t\t\tcontext.invoke( 'editor.saveRange' );\n\t\t\tvar text = range.toString()\n\t\t\tthis.currentContext = context;\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('hide.bs.dropdown', function ( e ) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\tjQuery( e.target ).closest( '.note-customGroup > .note-btn-group' ).on ('shown.bs.dropdown', function ( e ) {\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-text' ).val( text );\n\t\t\t\tjQuery( e.target ).parent().parent().find( '.link-url' ).focus();\n\t\t\t});\n\t\t},\n\n\t\tclickExtra: function( e ) {\n\t\t\tvar textEl = jQuery( e.target ).parent().find( '.link-text' );\n\t\t\tvar urlEl = jQuery( e.target ).parent().find( '.link-url' );\n\t\t\tvar isNewWindowEl = jQuery( e.target ).parent().find( '.link-new-window' );\n\t\t\tthis.currentContext.invoke( 'editor.restoreRange' );\n\t\t\tif ( jQuery( e.target ).hasClass( 'insert-link' ) ) {\n\t\t\t\tvar text = textEl.val();\n\t\t\t\tvar url = urlEl.val();\n\t\t\t\tvar isNewWindow = ( isNewWindowEl.prop( 'checked' ) ) ? true: false;\n\t\t\t\tif ( 0 != text.length && 0 != url.length ) {\n\t\t\t\t\tthis.currentContext.invoke( 'editor.createLink', { text:text, url: url, isNewWindow: isNewWindow } );\n\t\t\t\t}\n\t\t\t}\n\t\t\ttextEl.val( '' );\n\t\t\turlEl.val( '' );\n\t\t\tisNewWindowEl.prop( 'checked', false );\n\t\t\tjQuery( e.target ).closest( 'div.note-btn-group.open' ).removeClass( 'open' );\n\t\t},\n\n\t\tinsertMedia: function( media, context ) {\n\t\t\tcontext.invoke( 'editor.restoreRange' );\n\t\t\tif ( 'image' == media.type ) {\n\t\t\t\tcontext.invoke( 'editor.insertImage', media.url );\n\t\t\t} else {\n\t\t\t\tcontext.invoke( 'editor.createLink', { text: media.filename, url: media.url } );\n\t\t\t}\n\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","define('controllers/fieldStarRating',[], function() {\n var controller = Marionette.Object.extend( {\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'starrating' ), 'init:model', this.register );\n this.listenTo( nfRadio.channel( 'starrating' ), 'render:view', this.initRating );\n },\n\n register: function( model ) {\n\t\t\tmodel.set( 'renderRatings', this.renderRatings );\n\t\t},\n\n initRating: function( view ){\n jQuery( view.el ).find( '.starrating' ).rating();\n\n },\n\n renderRatings: function() {\n \tvar html = document.createElement( 'span' );\n \t// changed from 'default' to 'number_of_stars'\n \tfor (var i = 0; i <= this.number_of_stars - 1; i++) {\n var template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-starrating-star' );\n var num = i + 1;\n var checked = '';\n\n // Check to see if current 'star' matches the default value\n\t\t if ( this.value == num ) {\n\t\t \tchecked = 'checked';\n\t\t }\n var htmlFragment = template( { id: this.id, classes: this.classes, num: num, checked: checked, required: this.required } );\n html.appendChild(\n document.createRange().createContextualFragment( htmlFragment )\n );\n \t}\n \treturn html.innerHTML;\n }\n\n });\n\n return controller;\n});\n\n","define('controllers/fieldTerms',[], function() {\n var controller = Marionette.Object.extend( {\n initialize: function() {\n this.listenTo( nfRadio.channel( 'terms' ), 'init:model', this.register );\n },\n\n register: function( model ) {\n // nfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'click:extra', this.clickExtra );\n this.listenTo( nfRadio.channel( 'field-' + model.get( 'id' ) ), 'keyup:field', this.keyUpExtra );\n },\n \n clickExtra: function( e, model ) {\n var el = jQuery( e.currentTarget );\n var value = el.parent().find( '.extra-value' ).val();\n this.addOption( model, value );\n },\n\n keyUpExtra: function( el, model, keyCode ) {\n if( 13 != keyCode ) return;\n this.addOption( model, el.val() );\n },\n\n addOption: function( model, value ) {\n if( ! value ) return;\n var options = model.get( 'options' );\n var new_option = {\n label: value,\n value: value,\n selected: 0,\n };\n options.push( new_option );\n\n var selected = model.get( 'value' );\n selected.push( value );\n\n // model.set( 'reRender', true );\n model.trigger( 'reRender' );\n }\n \n });\n\n return controller;\n} );\n","/**\n * Before we display our form content, ask if anyone wants to give us a different view.\n * Before we do anything with the data, pass it through any loading filters.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2016 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/formContentFilters',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Init our fieldContent view and load filter arrays.\n\t\t\t */\n\t\t\tthis.viewFilters = [];\n\t\t\tthis.loadFilters = [];\n\n\t\t\t/*\n\t\t\t * Listen for requests to add new formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our formContent filters.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'formContent' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\n\t\t\t/*\n\t\t\t * -- DEPRECATED RADIO REPLIES --\n\t\t\t * \n\t\t\t * The 'fieldContents' channel has been deprecated as of 3.0 (it was present in the RC) in favour of 'formContent'.\n\t\t\t * Listen for requests to add new fieldContent filters.\n\t\t\t * \n\t\t\t * TODO: These radio listeners on the 'fieldContents' channels are here for backwards compatibility and should be removed eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:viewFilter', this.addViewFilter, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'add:loadFilter', this.addLoadFilter, this );\n\n\t\t\t/*\n\t\t\t * Listen for requests to get our fieldContent filters.\n\t\t\t * TODO: Remove eventually.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:viewFilters', this.getViewFilters, this );\n\t\t\tnfRadio.channel( 'fieldContents' ).reply( 'get:loadFilters', this.getLoadFilters, this );\n\t\t\n\t\t\t/*\n\t\t\t * -- END DEPRECATED --\n\t\t\t */\n\t\t},\n\n\t\taddViewFilter: function( callback, priority ) {\n\t\t\tthis.viewFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetViewFilters: function() {\n\t\t\treturn this.viewFilters;\n\t\t},\n\n\t\taddLoadFilter: function( callback, priority ) {\n\t\t\tthis.loadFilters[ priority ] = callback;\n\t\t},\n\n\t\tgetLoadFilters: function() {\n\t\t\treturn this.loadFilters;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","define( 'views/fieldItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'div',\n\n\t\tinitialize: function() {\n \t\tthis.listenTo( this.model, 'reRender', this.render, this );\n \t\tthis.listenTo( this.model, 'change:addWrapperClass', this.addWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:removeWrapperClass', this.removeWrapperClass, this );\n \t\tthis.listenTo( this.model, 'change:invalid', this.toggleAriaInvalid, this );\n\n \t\tthis.template = '#tmpl-nf-field-' + this.model.get( 'wrap_template' );\n\t\t},\n\n\t\ttest: function( model ) {\n\t\t\tconsole.log( 'firing from trigger 1' );\n\t\t},\n\n\t\taddWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'addWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).addClass( cl );\n\t\t\t\tthis.model.set( 'addWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\tremoveWrapperClass: function() {\n\t\t\tvar cl = this.model.get( 'removeWrapperClass' );\n\t\t\tif ( '' != cl ) {\n\t\t\t\tjQuery( this.el ).removeClass( cl );\n\t\t\t\tthis.model.set( 'removeWrapperClass', '' );\n\t\t\t}\n\t\t},\n\n\t\ttoggleAriaInvalid: function() {\n\t\t\tvar invalid = this.model.get( 'invalid' );\n\t\t\tjQuery( '[aria-invalid]', this.el ).attr( 'aria-invalid', JSON.stringify( invalid ) );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\n\t \t\t/*\n \t\t * If we have an input mask, init that mask.\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'mask' ) && '' != String(this.model.get( 'mask' )).trim() ) {\n \t\t\tif ( 'custom' == this.model.get( 'mask') ) {\n \t\t\t\tvar mask = this.model.get( 'custom_mask' );\n \t\t\t} else {\n \t\t\t\tvar mask = this.model.get( 'mask' );\n \t\t\t}\n\n\t\t\t\t/* POLYFILL */ Number.isInteger = Number.isInteger || function(value) { return typeof value === \"number\" && isFinite(value) && Math.floor(value) === value; };\n \t\t\tif ( Number.isInteger( mask ) ) {\n \t\t\t\tmask = mask.toString();\n \t\t\t}\n\n\t\t\t\tif ( 'currency' == mask ) {\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'formID' ) );\n\n\t\t\t\t\tvar thousands_sep = form.get( 'thousands_sep' );\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: if we have a , replace it with a string with a space\n\t\t\t\t\t */\n\t\t\t\t\tif ( ' ' == thousands_sep || 160==thousands_sep.charCodeAt(0) ) {\n\t\t\t\t\t\tthousands_sep = ' ';\n\t\t\t\t\t}\n\t\t\t\t\tvar currencySymbol = jQuery( '<div/>' ).html( form.get( 'currencySymbol' ) ).text();\n\t\t\t\t\tthousands_sep = jQuery( '<div/>' ).html( thousands_sep ).text();\n\t\t\t\t\tvar decimal_point = jQuery( '<div/>' ).html( form.get( 'decimal_point' ) ).text();\n\t\t\t\t\t\n\t\t\t\t\t/*\n\t\t\t\t\t * TODO: Currently, these options use the plugin-wide defaults for locale.\n\t\t\t\t\t * When per-form locales are implemented, these will need to be revisited.\n\t\t\t\t\t */\n\t\t\t\t\tvar autoNumericOptions = {\n\t\t\t\t\t digitGroupSeparator : thousands_sep,\n\t\t\t\t\t decimalCharacter : decimal_point,\n\t\t\t\t\t currencySymbol : currencySymbol,\n\t\t\t\t\t\tmodifyValueOnWheel : false\n\t\t\t\t\t};\n\n\t\t\t\t\t// Initialization\n\t\t\t\t\tvar autoN_el = jQuery(jQuery( this.el ).find( '.nf-element' )[ 0 ]);\n\t\t\t\t\tnew AutoNumeric( jQuery( this.el ).find( '.nf-element' )[ 0 ], autoNumericOptions );\n\t\t\t\t\t// update the value for the model so it gets saved to\n\t\t\t\t\t// the database properly\n\t\t\t\t\tvar context = this;\n\t\t\t\t\tautoN_el.on( 'change', function( e ) {\n\t\t\t\t\t\tcontext.model.set( 'value', e.target.value );\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tjQuery( this.el ).find( '.nf-element' ).mask( mask );\n\t\t\t\t} \t\t\t\n\t \t\t}\n\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'render:view', this );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'render:view', this );\n\t\t},\n\n\t\ttemplateHelpers: function () {\n\t\t\tvar that = this;\n\t \treturn {\n\n\t\t\t\trenderElement: function(){\n\t\t\t\t\t// Account for falsey default value of 0.\n\t\t\t\t\tif( this.clean && ! this.value && 0 === this.default ) this.value = '0';\n\t\t\t\t\tvar tmpl = _.find( this.element_templates, function( tmpl ) {\n\t\t\t\t\t\tif ( 0 < jQuery( '#tmpl-nf-field-' + tmpl ).length ) {\n\t\t\t\t\t\t\treturn true;\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-' + tmpl );\n\t\t\t\t\t\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabel: function() {\n\t\t\t\t\tvar template = nfRadio.channel( 'app' ).request( 'get:template', '#tmpl-nf-field-label' );\n\t\t\t\t\treturn template( this );\n\t\t\t\t},\n\n\t\t\t\trenderLabelClasses: function () {\n\t\t\t\t\tvar classes = '';\n\t\t\t\t\tif ( 'undefined' != typeof this.customLabelClasses ) {\n\t\t\t\t\t\tclasses = this.customLabelClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\trenderPlaceholder: function() {\n\t\t\t\t\tvar placeholder = this.placeholder;\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customPlaceholder ) {\n\t\t\t\t\t\tplaceholder = this.customPlaceholder( placeholder );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\tif( '' != String(placeholder).trim() ) {\n\t\t\t\t\t\treturn 'placeholder=\"' + _.escape( placeholder ) + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderWrapClass: function() {\n\t\t\t\t\tvar wrapClass = 'field-wrap ' + this.type + '-wrap';\n\n\t\t\t\t\t// Check if type and parentType are different. If, so\n\t\t\t\t\t// then add appropriate parentType wrap class\n\t\t\t\t\tif ( this.type !== this.parentType ) {\n\t\t\t\t\t\twrapClass = wrapClass + ' ' + this.parentType + '-wrap';\n\t\t\t\t\t}\n\t\t\t\t\t// If we have an old_classname defined, output wrap class for backward compatibility\n\t\t\t\t\tif ( 'undefined' != typeof this.old_classname && 0 < String(this.old_classname).trim().length ) {\n\t\t\t\t\t\twrapClass += ' ' + this.old_classname + '-wrap';\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof customWrapClass ) {\n\t\t\t\t\t\twrapClass = customWrapClass( wrapClass );\n\t\t\t\t\t}\n\n\t\t\t\t\treturn wrapClass;\n\t\t\t\t},\n\n\t\t\t\trenderClasses: function() {\n\t\t\t\t\tvar classes = this.classes;\n\n\t\t\t\t\tif ( this.error ) {\n\t\t\t\t\t\tclasses += ' nf-error';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tclasses = classes.replace( 'nf-error', '' );\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( 'undefined' != typeof this.element_class && 0 < String(this.element_class).trim().length ) {\n\t\t\t\t\t\tclasses += ' ' + this.element_class;\n\t\t\t\t\t}\n\n\t\t\t\t\t/*\n\t\t\t\t\t * If we have a function for adding extra classes, add those.\n\t\t\t\t\t */\n\n\t\t\t\t\tif ( 'undefined' != typeof this.customClasses ) {\n\t\t\t\t\t\tclasses = this.customClasses( classes );\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t\treturn classes;\n\t\t\t\t},\n\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n\n\t\t\t\tmaybeDisabled: function() {\n\t\t\t\t\tif ( 1 == this.disable_input ) {\n\t\t\t\t\t\treturn 'disabled';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n maybeRequired: function() {\n if ( 1 == this.required ) {\n return 'aria-required=\"true\" required';\n } else {\n return '';\n }\n },\n\n\t\t\t\tmaybeDisableAutocomplete: function() {\n\t\t\t\t\tif ( 1 == this.disable_browser_autocomplete ) {\n\t\t\t\t\t\treturn 'autocomplete=\"off\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst autoType = this.translateAutoCompletionType( this.type );\n\t\t\t\t\t\treturn 'autocomplete=\"' + autoType + '\"';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\ttranslateAutoCompletionType: function( type ){\n\t\t\t\t\t//https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes/autocomplete\n\t\t\t\t\tswitch( type ){\n\t\t\t\t\t\tcase 'address':\n\t\t\t\t\t\t\treturn 'street-address';\n\t\t\t\t\t\tcase 'address2':\n\t\t\t\t\t\t\treturn 'address-line2';\n\t\t\t\t\t\tcase 'city':\n\t\t\t\t\t\t\treturn 'address-level2';\n\t\t\t\t\t\tcase 'email':\n\t\t\t\t\t\t\treturn 'email';\n\t\t\t\t\t\tcase 'firstname':\n\t\t\t\t\t\t\treturn 'given-name';\n\t\t\t\t\t\tcase 'lastname':\n\t\t\t\t\t\t\treturn 'family-name';\n\t\t\t\t\t\tcase 'zip':\n\t\t\t\t\t\t\treturn 'postal-code';\n\t\t\t\t\t\tcase 'phone':\n\t\t\t\t\t\t\treturn 'tel';\n\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\treturn 'on';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tmaybeInputLimit: function() {\n\t\t\t\t\tif ( 'characters' == this.input_limit_type && '' != String(this.input_limit).trim() ) {\n\t\t\t\t\t\treturn 'maxlength=\"' + this.input_limit + '\"';\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tgetHelpText: function() {\n\t\t\t\t\t// this.help_text = jQuery( this.help_text ).html();\n\t\t\t\t\t// return ( 'undefined' != typeof this.help_text ) ? this.help_text.replace(/\"/g, \""\") : '';\n\t\t\t\t\treturn ( 'undefined' != typeof this.help_text ) ? this.help_text : '';\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderHelp: function() {\n\n\t\t\t\t\t// use jQuery().text() to make sure help_text has actual\n\t\t\t\t\t// text and not just HTML tags.\n\t\t\t\t\tvar check_text_par = document.createElement( 'p' );\n check_text_par.innerHTML = this.help_text;\n\n var shouldRenderHelpText = false;\n // Check for text or image tags\n\t\t\t\t\tif ( 0 != String(jQuery( check_text_par ).text()).trim().length\n\t\t\t\t\t\t|| 0 < jQuery( check_text_par ).find('img').length ) {\n \tshouldRenderHelpText = true;\n }\n\n\t\t\t\t\tif ( 'undefined' != typeof this.help_text && shouldRenderHelpText ) {\n\n\t\t\t\t\t\t// Strip HTML tags for accessibility\n\t\t\t\t\t\tfunction stripTags( input ) {\n\t\t\t\t\t\t\treturn input.replace(/<\\/?[^>]+(>|$)/g, \"\").trim();\n\t\t\t\t\t\t}\n \n\t\t\t\t\t\tvar icon = document.createElement( 'span' );\n\t\t\t\t\t\ticon.classList.add( 'fa', 'fa-info-circle', 'nf-help' );\n\t\t\t\t\t\ticon.setAttribute( 'data-text', this.getHelpText() );\n\t\t\t\t\t\ticon.setAttribute( 'tabindex', '0' ); // Make it focusable\n\t\t\t\t\t\ticon.setAttribute( 'aria-describedby', 'hidden-help-text-' + this.id ); // Link to the hidden description\n\t\t\t\t\t \n\t\t\t\t\t\t// Create a hidden element for screen readers\n\t\t\t\t\t\tvar hiddenHelpText = document.createElement( 'span' );\n\t\t\t\t\t\thiddenHelpText.textContent = stripTags( this.help_text ); // Output the help text without tags\n\t\t\t\t\t\thiddenHelpText.id = 'hidden-help-text-' + this.id;\n\t\t\t\t\t\thiddenHelpText.classList.add( 'nf-sr-only' ); // Visually hidden but available for screen readers\n\t\t\t\t\t\thiddenHelpText.setAttribute( 'role', 'tooltip' );\n\t\t\t\t\t \n\t\t\t\t\t\ticon.appendChild( hiddenHelpText ); // Append the hidden help text\n \n\t\t\t\t\t\treturn icon.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\trenderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.setAttribute('aria-hidden', 'true');\n\t\t\t\t\t\tfieldDescription.setAttribute('id', 'nf-description-' + this.id);\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n \n renderNumberDefault: function() {\n // If the field is clean...\n if ( this.clean ) {\n // If we have a default...\n if ( 0 === this.default || this.default ) {\n return this.default;\n } // If we do not have a placeholder...\n else if ( ! this.placeholder ) {\n return this.value;\n } // Otherwise...\n else {\n return '';\n }\n } // Otherwise... (The field is not clean.)\n else {\n return this.value;\n }\n },\n\n\t\t\t\trenderCurrencyFormatting: function( number ) {\n\t\t\t\t\t/*\n\t\t\t\t\t * Our number will have a . as a decimal point. We want to replace that with our locale decimal, nfi18n.decimal_point.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedDecimal = number.toString().replace( '.', '||' );\n\t\t\t\t\t/*\n\t\t\t\t\t * Add thousands separator. Our original number var won't have thousands separators.\n\t\t\t\t\t */\n\t\t\t\t\tvar replacedThousands = replacedDecimal.replace( /\\B(?=(\\d{3})+(?!\\d))/g, nfi18n.thousands_sep );\n\t\t\t\t\tvar formattedNumber = replacedThousands.replace( '||', nfi18n.decimal_point );\n\n\t\t\t\t\tvar form = nfRadio.channel( 'app' ).request( 'get:form', that.model.get( 'formID' ) );\n\t\t\t\t\tvar currency_symbol = form.get( 'settings' ).currency_symbol;\n\t\t\t\t\treturn currency_symbol + formattedNumber;\n\t\t\t\t},\n\n\t\t\t\tmaybeRenderTime: function() {\n\t\t\t\t\tif ( 'time_only' == this.date_mode || 'date_and_time' == this.date_mode ) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\treturn false;\n\t\t\t\t},\n\t\t\t};\n\t\t},\n\n\t\tevents: {\n\t\t\t'change .nf-element': 'fieldChange',\n\t\t\t'keyup .nf-element': 'fieldKeyup',\n\t\t\t'click .nf-element': 'fieldClick',\n\t\t\t'click .extra': 'extraClick',\n\t\t\t'change .extra': 'extraChange',\n\t\t\t'blur .nf-element': 'fieldBlur'\n\t\t},\n\n\t\tfieldChange: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar response = nfRadio.channel( 'nfAdmin' ).request( 'change:field', el, this.model );\n\t\t},\n\n\t\tfieldKeyup: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tvar keyCode = e.keyCode;\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'keyup:field', el, this.model, keyCode );\n\t\t},\n\n\t\tfieldClick: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:field', el, this.model );\n\t\t},\n\n\t\textraClick: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'click:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'click:extra', e, this.model );\n\t\t},\n\n\t\textraChange: function( e ) {\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'change:extra', e, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'change:extra', e, this.model );\n\t\t},\n\n\t\tfieldBlur: function( e ) {\n\t\t\tvar el = jQuery( e.currentTarget );\n\t\t\tnfRadio.channel( 'field-' + this.model.get( 'id' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'blur:field', el, this.model );\n\t\t\tnfRadio.channel( 'fields' ).trigger( 'blur:field', el, this.model );\n\t\t},\n\n\t\tonAttach: function() {\n\t\t\tnfRadio.channel( this.model.get( 'type' ) ).trigger( 'attach:view', this );\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/beforeField',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-before'\n });\n\n return view;\n} );\n","define( 'views/fieldErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-field-error',\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldErrorCollection',['views/fieldErrorItem'], function( fieldErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: fieldErrorItem,\n\n\t\tinitialize: function( options ) {\n\t\t\tthis.fieldModel = options.fieldModel;\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tif ( 0 == this.fieldModel.get( 'errors' ).models.length ) {\n this.fieldModel.removeWrapperClass( 'nf-error' );\n this.fieldModel.removeWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-pass' );\n this.fieldModel.setInvalid( false );\n } else {\n this.fieldModel.removeWrapperClass( 'nf-pass' );\n this.fieldModel.addWrapperClass( 'nf-fail' );\n this.fieldModel.addWrapperClass( 'nf-error' );\n this.fieldModel.setInvalid( true );\n }\n\n\t\t}\n\t});\n\n\treturn view;\n} );\n\n","define( 'views/inputLimit',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-input-limit',\n\n initialize: function() {\n \tthis.listenTo( nfRadio.channel( 'field-' + this.model.get( 'id' ) ), 'keyup:field', this.updateCount );\n \tthis.count = this.model.get( 'input_limit' );\n \tthis.render();\n },\n\n updateCount: function( el, model ) {\n var value = jQuery( el ).val();\n var regex = /\\s+/gi;\n var words = String(value).trim().replace(regex, ' ').split(' ');\n var wordCount = words.length;\n var charCount = value.length;\n \n /**\n * PHP Config has 'char' instead of 'characters', so I changed it to\n * 'characters', but added 'char' here so existing form fields will\n * act correctly\n **/\n if ( 'characters' == this.model.get( 'input_limit_type' )\n || 'char' == this.model.get( 'input_limit_type' ) ) {\n jQuery( el ).attr( 'maxlength', this.model.get( 'input_limit' ) );\n this.count = this.model.get( 'input_limit' ) - charCount;\n } else {\n this.count = this.model.get( 'input_limit' ) - wordCount;\n var limit = this.model.get( 'input_limit' );\n if( wordCount > limit ){\n jQuery( el ).val( words.slice( 0, limit).join( ' ' ) );\n }\n }\n\n \tthis.render();\n },\n\n templateHelpers: function() {\n \tvar that = this;\n \treturn {\n \t\tcurrentCount: function() {\n \t\t\treturn that.count;\n \t\t}\n \t}\n }\n\n });\n\n return view;\n} );\n","define( 'views/afterField',['views/fieldErrorCollection', 'views/inputLimit'], function( fieldErrorCollection, InputLimitView ) {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-field-after',\n\n initialize: function() {\n \t\tthis.model.on( 'change:errors', this.changeError, this );\n },\n\n onRender: function() {\n \t/*\n \t * If we have an error, render our error view.\n \t * TODO: Perhaps move to a controller?\n \t */\n \tvar errorEl = jQuery( this.el ).children( '.nf-error-wrap' );\n \t\tthis.errorCollectionView = new fieldErrorCollection( { el: errorEl, collection: this.model.get( 'errors' ), fieldModel: this.model } );\n if ( 0 < this.model.get( 'errors' ).length ) {\n this.errorCollectionView.render(); \n }\n \n \t\t/*\n \t\t * If we have an input limit set, render the view that contains our counter\n \t\t * TODO: Move this to a controller so that the logic isn't in the view.\n \t\t */\n \t\tif ( 'undefined' != typeof this.model.get( 'input_limit' ) && '' != String(this.model.get( 'input_limit' )).trim() ){\n \t\t\tvar inputLimitEl = jQuery( this.el ).children( '.nf-input-limit');\n \t\t\tthis.inputLimitView = new InputLimitView( { el: inputLimitEl, model: this.model } );\n\t\t\t\tinputLimitEl.attr('aria-live', 'polite');\n\t\t\t\tinputLimitEl.attr('role', 'status');\n\t\t\t\tinputLimitEl.attr('aria-relevant', 'additions');\n\t\t\t\tinputLimitEl.attr( 'aria-atomic', true );\n \t\t}\n },\n\n changeError: function() {\n\t\t\tthis.errorCollectionView.render();\n\t\t},\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterFieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField'], function( fieldItem, beforeField, afterField ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n return containerClass;\n }\n }\n }\n });\n\n return view;\n} );\n\n","define( 'views/fieldRepeaterFieldCollection',['views/fieldRepeaterFieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterSetLayout',[ 'views/fieldRepeaterFieldCollection' ], function( fieldCollection ) {\n var view = Marionette.LayoutView.extend({\n tagName: 'fieldset',\n template: '#tmpl-nf-field-repeater-set',\n\n regions: {\n fields: '.nf-repeater-fieldset',\n },\n\n onRender: function() {\n this.fields.show( new fieldCollection( { collection: this.model.get( 'fields' ) } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-remove-fieldset': 'removeSet',\n },\n\n removeSet: function() {\n nfRadio.channel( \"field-repeater\" ).trigger( 'remove:fieldset', this.model )\n }\n\n });\n\n return view;\n} );\n","define( 'views/fieldRepeaterSetCollection',['views/fieldRepeaterSetLayout'], function( repeaterSetLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'div',\n\t\tchildView: repeaterSetLayout,\n\t});\n\n\treturn view;\n} );\n","define( 'views/fieldRepeaterLayout',[ 'views/fieldRepeaterSetCollection' ], function( repeaterSetCollection ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'div',\n template: '#tmpl-nf-field-repeater',\n\n regions: {\n sets: '.nf-repeater-fieldsets',\n },\n\n initialize: function() {\n\n this.collection = this.model.get( 'sets' );\n\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'rerender:fieldsets', this.render );\n\n },\n\n onRender: function() { \n this.sets.show( new repeaterSetCollection( { collection: this.collection } ) );\n },\n\n\t\ttemplateHelpers: function() {\n\t\t\treturn {\n\t\t\t\tmaybeFilterHTML: function() {\n\t\t\t\t\treturn typeof nfFrontEnd.filter_esc_status !== \"undefined\" ? nfFrontEnd.filter_esc_status : \"false\";\n\t\t\t\t},\n renderDescText: function() {\n\t\t\t\t\tif ( 'undefined' == typeof this.desc_text ) {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// Creates an element so we can check to see if the text is empty.\n\t\t\t\t\tvar text = document.createElement( 'p' );\n\t\t\t\t\ttext.innerHTML = this.desc_text;\n\t\t\t\t\tif( 0 == String(text.innerText).trim().length ) return '';\n\n var check, checkText;\n\t\t\t\t\tcheckText = document.createTextNode( this.desc_text );\n\t\t\t\t\tcheck = document.createElement( 'p' );\n\t\t\t\t\tcheck.appendChild( checkText );\n\t\t\t\t\tif ( 0 != String(jQuery( check ).text()).trim().length ) {\n\t\t\t\t\t\tvar descriptionText, fieldDescription;\n descriptionText = document.createRange().createContextualFragment( this.desc_text );\n fieldDescription = document.createElement( 'div' );\n\t\t\t\t\t\tfieldDescription.classList.add( 'nf-field-description' );\n\t\t\t\t\t\tfieldDescription.appendChild( descriptionText );\n\t\t\t\t\t\treturn fieldDescription.outerHTML;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn '';\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t}\n\t\t},\n\n events: {\n 'click .nf-add-fieldset': 'addSet'\n },\n\n addSet: function() {\n nfRadio.channel( 'field-repeater' ).trigger( 'add:fieldset', this.model.id ); \n },\n\n beforeSubmit: function() {\n\t\t\tthis.collection.beforeSubmit( this.model.get( 'sets' ) );\n\t\t}\n \n\n });\n\n return view;\n} );\n","define( 'views/fieldLayout',['views/fieldItem', 'views/beforeField', 'views/afterField', 'views/fieldRepeaterLayout'], function( fieldItem, beforeField, afterField, repeaterFieldLayout ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: 'nf-field',\n\n regions: {\n beforeField: '.nf-before-field',\n field: '.nf-field',\n afterField: '.nf-after-field',\n },\n\n initialize: function() {\n this.listenTo( this.model, 'change:visible', this.render, this );\n },\n\n getTemplate: function() {\n if ( this.model.get( 'visible' ) ) {\n return '#tmpl-nf-field-layout';\n } else {\n return '#tmpl-nf-empty';\n }\n },\n\n onRender: function() {\n if ( this.model.get( 'visible' ) ) {\n \n if ( 'repeater' == this.model.get( 'type' ) ) {\n this.field.show( new repeaterFieldLayout( { model: this.model } ) );\n } else {\n this.beforeField.show( new beforeField( { model: this.model } ) );\n this.field.show( new fieldItem( { model: this.model } ) ); \n this.afterField.show( new afterField( { model: this.model } ) );\n }\n \n }\n },\n\n templateHelpers: function() {\n return {\n renderContainerClass: function() {\n var containerClass = ' label-' + this.label_pos + ' ';\n // If we have a description position, add that to our container.\n if ( 'undefined' != typeof this.desc_pos ) {\n containerClass += 'desc-' + this.desc_pos + ' ';\n }\n // if we have a container_class field setting, add that to our container.\n if ( 'undefined' != typeof this.container_class && 0 < String(this.container_class).trim().length ) {\n containerClass += this.container_class + ' ';\n }\n\n //check if the parent type and type are different. If\n // so, add parent type container styling\n \n if( this.type !== this.parentType ) {\n containerClass += ' ' + this.parentType + '-container';\n }\n\n return containerClass;\n }\n }\n }\n\n });\n\n return view;\n} );\n\n","/**\n * Return views that might be used in extensions.\n * These are un-instantiated views.\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/loadViews',['views/fieldItem', 'views/fieldLayout'], function( fieldItemView, fieldLayoutView ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t// Reply to requests for our field item view.\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldItem', this.getFieldItem );\n\n\t\t\tnfRadio.channel( 'views' ).reply( 'get:fieldLayout', this.getFieldLayout );\n\t\t},\n\n\t\tgetFieldItem: function( model ) {\n\t\t\treturn fieldItemView;\n\t\t},\n\n\t\tgetFieldLayout: function() {\n\t\t\treturn fieldLayoutView;\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * If a form has at least one field error, we should disable the submit button and add a form error.\n * If a form had errors, but all the field errors have been removed, we should remove the form error.\n *\n * @since 3.0\n */\ndefine('controllers/formErrors',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen for error messages being added to and removed from fields.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'add:error', this.addError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'remove:error', this.removeError );\n\n\t\t\t/*\n\t\t\t * Respond to requests to get form errors\n\t\t\t */\n\t\t\tnfRadio.channel( 'form' ).reply( 'get:errors', this.getFormErrors );\n\t\t},\n\n\t\taddError: function( fieldModel, errorID, errorMsg ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t/*\n\t\t\t * We store our errors in this object by field ID so that we don't have to loop over all our fields when we're testing for errors.\n\t\t\t * They are stored as an object within an array, using the field ID as the key.\n\t\t\t *\n\t\t\t * If we haven't setup an array item for this field, set it as an object.\n\t\t\t */\n\t\t\tif ( 'undefined' == typeof formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) {\n\t\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = {};\n\t\t\t}\n\t\t\t// Add an error to our tracking array\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ][ errorID ] = errorMsg;\n\t\t\t/*\n\t\t\t * We have at least one field error, so submmission should be prevented.\n\t\t\t * Add a form error.\n\t\t\t */\n\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'add:error', 'field-errors', formModel.get( 'settings' ).formErrorsCorrectErrors );\n\t\t},\n\n\t\tremoveError: function( fieldModel, errorID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', fieldModel.get( 'formID' ) );\n\t\t\t// Remove this error ID from our tracking array.\n\t\t\tformModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] = _.omit( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ], errorID );\n\t\t\t/*\n\t\t\t * If we don't have any more error IDs on this field, then we need to remove this field from the array.\n\t\t\t *\n\t\t\t * Then, if the fieldErrors tracking array has a length of 0, we remove our form error, because all field errors have been dealt with.\n\t\t\t */\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ] ) ) {\n\t\t\t\tdelete formModel.get( 'fieldErrors' )[ fieldModel.get( 'id' ) ];\n\t\t\t}\n\n\t\t\tif ( 0 == _.size( formModel.get( 'fieldErrors' ) ) ) {\n\t\t\t\t// Remove our form error.\n\t\t\t\tnfRadio.channel( 'form-' + fieldModel.get( 'formID' ) ).request( 'remove:error', 'field-errors' );\n\t\t\t}\n\t\t},\n\n\t\tgetFormErrors: function( formID ) {\n\t\t\tvar formModel = nfRadio.channel( 'app' ).request( 'get:form', formID );\n\t\t\tvar errors = false;\n\t\t\t\n\t\t\tif ( formModel ) {\n\t\t\t\t/*\n\t\t\t\t * Check to see if we have any errors on our form model.\n\t\t\t\t */\n\t\t\t\tif ( 0 !== formModel.get( 'errors' ).length ) {\n\t\t\t\t\t_.each( formModel.get( 'errors' ).models, function( error ) {\n\t\t\t\t\t\terrors = errors || {};\n\t\t\t\t\t\terrors[ error.get( 'id' ) ] = error.get( 'msg' );\n\t\t\t\t\t} );\t\t\t\t\t\t\n\t\t\t\t}\n\n\t\t\t\t\n\t\t\t}\n\t\t\treturn errors;\n\t\t}\n\t});\n\n\treturn controller;\n} );\n","/**\n * Handles submission of our form.\n */\ndefine('controllers/submit',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'init:model', this.registerSubmitHandler );\n\t\t},\n\n\t\t/**\n\t\t * Register the submission handler function.\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tregisterSubmitHandler: function( formModel ) {\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).reply( 'submit', this.submit );\n\t\t},\n\n\t\t/**\n\t\t * Handles the actual submission of our form.\n\t\t * When we submit:\n\t\t *\n\t\t * 1) Send out a message saying that we're about to begin form submission.\n\t\t * 2) Check the form for errors\n\t\t * 3) Submit the data\n\t\t * 4) Send out a message with our response\n\t\t *\n\t\t * @since 3.0\n\t\t * @param Backbone.model \tformModel\n\t\t * @return void\n\t\t */\n\t\tsubmit: function( formModel ) {\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'before:submit', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'before:submit', formModel );\n\n\t\t\t/*\n\t\t\t * Validate our field models.\n\t\t\t */\n\t\t\tvar validate = nfRadio.channel( 'forms' ).request( 'maybe:validate', formModel );\n\t\t \tif( false !== validate ){\n\n // When validating all fields, set clean to false to force validation.\n _.each( formModel.get( 'fields' ).models, function( fieldModel ) {\n fieldModel.set( 'clean', false );\n } );\n\n\t\t\t\t/*\n\t\t\t\t * This method is defined in our models/fieldCollection.js file,\n\t\t\t\t * except where overridden by an add-on (ie Layout & Styles).\n\t\t\t\t */\n\t\t\t\tformModel.get( 'formContentData' ).validateFields();\n\t\t\t}\n\n\t\t\tvar submit = nfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'maybe:submit', formModel );\n\t\t\tif ( false == submit ) {\n\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:cancel', formModel );\n\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:cancel', formModel );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif( false !== validate ){\n\n\t\t\t\t// Ignore non-blocking errors.\n\t\t\t\tvar blockingFormErrors = _.filter( formModel.get( 'errors' ).models, function( error ){\n\n\t\t\t\t\t// Ignore email action related errors.\n\t\t\t\t\tif( 'invalid_email' == error.get( 'id' ) || 'email_not_sent' == error.get( 'id' ) ) return false;\n\n\t\t\t\t\treturn true; // Error is blocking.\n\t\t\t\t});\n\n\t\t\t\t/*\n\t\t\t\t * Make sure we don't have any form errors before we submit.\n\t\t\t\t * Return false if we do.\n\t\t\t\t */\n\t\t\t\tif ( 0 != _.size( blockingFormErrors ) ) {\n\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:failed', formModel );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:failed', formModel );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Send out a radio message saying that we're about to begin submitting.\n\t\t\t * First we send on the generic forms channel, and then on the form-specific channel.\n\t\t\t */\n\t\t\tnfRadio.channel( 'forms' ).trigger( 'after:submitValidation', formModel );\n\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'after:submitValidation', formModel );\n\n\t\t\t/*\n\t\t\t * Actually submit our form, and send out a message with our response.\n\t\t\t */\n\n \t\t\tvar formID = formModel.get( 'id' );\n\t\t\tvar fields = {};\n\t\t\t_.each( formModel.get( 'fields' ).models, function( field ) {\n\t\t\t\tvar fieldDataDefaults = { value:field.get( 'value' ), id:field.get( 'id' ) };\n\n\t\t\t\t// Add field data at the field ID for efficient access.\n\t\t\t\tfields[ field.get( 'id' ) ] = nfRadio.channel( field.get( 'type' ) ).request( 'get:submitData', fieldDataDefaults, field ) || fieldDataDefaults;;\n\t\t\t} );\n\t\t\tvar extra = formModel.get( 'extra' );\n\t\t\tvar settings = formModel.get( 'settings' );\n\t\t\tdelete settings.formContentData;\n\t\t\tvar formData = JSON.stringify( { id: formID, fields: fields, settings: settings, extra: extra } );\n\t\t\tvar data = {\n\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t'nonce_ts': nfFrontEnd.nonce_ts,\n\t\t\t\t'formData': formData\n\t\t\t}\n\n\t\t\tvar that = this;\n\n\t\t\tjQuery.ajax({\n\t\t\t url: nfFrontEnd.adminAjax,\n\t\t\t type: 'POST',\n\t\t\t data: data,\n\t\t\t cache: false,\n\t\t\t \tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t \t\ttry {\n\t\t\t\t \t\tvar response = data;\n\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t \tjQuery( document ).trigger( 'nfFormSubmitResponse', { response: response, id: formModel.get( 'id' ) } );\n\t\t\t \t\t} catch( e ) {\n\t\t\t \t\t\tconsole.log( e );\n\t\t\t \t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\tconsole.log( e );\n\t\t\t \t\t}\n\n\t\t\t },\n\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t // Handle errors here\n\t\t\t console.log('ERRORS: ' + errorThrown);\n\t\t\t\t\tconsole.log( jqXHR );\n\n\t\t\t\t\ttry {\n\t\t\t\t\t\tvar response = jQuery.parseJSON( jqXHR.responseText );\n\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\tconsole.log( 'Parse Error: ' + jqXHR.responseText);\n\t\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).request( 'add:error', 'parse-response-ERROR', errorThrown );\n\t\t\t\t\t}\n\n\t\t\t }\n\t\t\t});\n\n\t\t}\n\n\t});\n\n\treturn controller;\n} );\n\n","define( 'views/fieldCollection',['views/fieldLayout'], function( fieldLayout ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: 'nf-fields-wrap',\n\t\tchildView: fieldLayout\n\n\t});\n\n\treturn view;\n} );\n","/**\n * Default filters\n * \n * @package Ninja Forms builder\n * @subpackage Main App\n * @copyright (c) 2015 WP Ninjas\n * @since 3.0\n */\ndefine( 'controllers/defaultFilters',[ 'views/fieldCollection', 'models/fieldCollection' ], function( FieldCollectionView, FieldCollection ) {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'before:filterData', this.registerDefaultDataFilter );\n\t\t},\n\n\t\tregisterDefaultDataFilter: function( formModel ) {\n\t\t\t/*\n\t\t\t * Set our default formContent load filter\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:loadFilter', this.defaultFormContentLoad, 10, this );\n\t\t\t/*\n\t\t\t * Set our default formContentView.\n\t\t\t */\n\t\t\tnfRadio.channel( 'formContent' ).request( 'add:viewFilter', this.defaultFormContentView, 10, this );\n\t\t},\n\n\t\tdefaultFormContentLoad: function( formContentData, formModel, context ) {\n\t\t\tvar fieldCollection = formModel.get( 'fields' );\n\t\t\t/*\n\t\t\t * If we only have one load filter, we can just return the field collection.\n\t\t\t */\n\t\t\tvar formContentLoadFilters = nfRadio.channel( 'formContent' ).request( 'get:loadFilters' );\n\t\t\tvar sortedArray = _.without( formContentLoadFilters, undefined );\n\t\t\tif ( 1 == sortedArray.length || 'undefined' == typeof formContentData || true === formContentData instanceof Backbone.Collection ) return formModel.get( 'fields' );\n\n \tvar fieldModels = _.map( formContentData, function( key ) {\n \t\treturn formModel.get( 'fields' ).findWhere( { key: key } );\n \t}, this );\n\n \tvar currentFieldCollection = new FieldCollection( fieldModels );\n\n \tfieldCollection.on( 'reset', function( collection ) {\n \t\tvar resetFields = [];\n \t\tcurrentFieldCollection.each( function( fieldModel ) {\n \t\t\tif ( 'submit' != fieldModel.get( 'type' ) ) {\n \t\t\t\tresetFields.push( collection.findWhere( { key: fieldModel.get( 'key' ) } ) );\n \t\t\t} else {\n \t\t\t\tresetFields.push( fieldModel );\n \t\t\t}\n \t\t} );\n\n currentFieldCollection.options = { formModel: formModel };\n \t\tcurrentFieldCollection.reset( resetFields );\n \t} );\n\n \treturn currentFieldCollection;\n },\n\n defaultFormContentView: function() {\n \treturn FieldCollectionView;\n }\n\n\t});\n\n\treturn controller;\n} );\n","/**\n * Controller responsible for removing unique field errors.\n */\n\ndefine('controllers/uniqueFieldError',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\n\t\tinitialize: function() {\n\t\t\t/*\n\t\t\t * Listen to keyup and field changes.\n\t\t\t *\n\t\t\t * If those fields have a unique field error, remove that error.\n\t\t\t */\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'change:modelValue', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'keyup:field', this.removeError );\n\t\t\tthis.listenTo( nfRadio.channel( 'fields' ), 'blur:field', this.removeError );\n\n\t\t},\n\n\t\tremoveError: function( el, model ) {\n\t\t\tmodel = model || el;\n\t\t\t/*\n\t\t\t * Remove any unique field errors.\n\t\t\t */\n\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', model.get( 'id' ), 'unique_field' );\n\t\t},\n\n\t});\n\n\treturn controller;\n} );\n","let nfAllRepeaterFieldsModels = [];\ndefine( 'models/fieldRepeaterSetModel',[], function() {\n\tvar model = Backbone.Model.extend( {\n\n\t\tinitialize: function(collection, options) {\n\n\t\t\tthis.repeaterFieldModel = options.repeaterFieldModel;\n\n\t\t\tthis.set( 'label', this.repeaterFieldModel.get('label') );\n\n\t\t\tif(collection && options){\n\t\t\t\tthis.initAllRepeaterFieldsModels(collection, options);\n\t\t\t}\n\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFields', this.getRepeaterFields, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldById', this.getRepeaterFieldById, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterModels', this.getAllRepeaterFieldsModels, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsetsByForm', this.getAllFieldsetsByForm, this );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:repeaterFieldsModelsArrayByForm', this.getAllFieldsModelsArrayByForm, this );\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:repeaterModels', this.setAllRepeaterFieldsModels);\n\t\t\tthis.listenTo( nfRadio.channel('field-repeater'), 'set:value', this.setAllRepeatersValues );\n\t\t},\n\n\t\tsetAllRepeaterFieldsModels: function() {\n\t\t\tthis.set( 'repeaterFieldsetsModels', nfAllRepeaterFieldsModels );\n\t\t\tthis.allRepeatersFieldsetsModels = nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tinitAllRepeaterFieldsModels: function(collection, options) {\t\n\t\t\tconst formID = options.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = options.repeaterFieldModel.get('id');\n\t\t\tconst currentModels = collection.fields.models;\n\t\t\t\n\t\t\tlet isModelSet = nfAllRepeaterFieldsModels.find(model => model.id === repeaterID && model.form === formID);\n\n\t\t\tif ( isModelSet ){\n\t\t\t\tisModelSet.fields = isModelSet.fields.concat(currentModels);\n\t\t\t} else {\n\t\t\t\tnfAllRepeaterFieldsModels.push( {\n\t\t\t\t\tform: formID,\n\t\t\t\t\tid: repeaterID,\n\t\t\t\t\tfields: currentModels\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.setAllRepeaterFieldsModels();\n\t\t},\n\n\t\tgetAllRepeaterFieldsModels: function() {\n\t\t\treturn nfAllRepeaterFieldsModels;\n\t\t},\n\n\t\tgetAllFieldsetsByForm: function(formID) {\n\t\t\tconst allFormsModels = this.getAllRepeaterFieldsModels();\n\t\t\tconst thisFormModels = allFormsModels.filter( model => model.form === formID );\n\n\t\t\treturn thisFormModels;\n\t\t},\n\n\t\tgetAllFieldsModelsArrayByForm: function(formID) {\n\t\t\tconst thisFormModels = this.getAllFieldsetsByForm(formID);\n\t\t\tlet singleArray = [];\n\t\t\tthisFormModels.map( model => {\n\t\t\t\tsingleArray = singleArray.concat(model.fields);\n\t\t\t});\n\n\t\t\treturn singleArray;\n\t\t},\n\n\t\tgetRepeaterFields: function(repeaterID) {\n\t\t\tconst allModels = this.getAllRepeaterFieldsModels();\n\t\t\tlet fields = allModels.find(model => String(model.id) === String(repeaterID));\n\t\t\tif(typeof fields === \"undefined\"){\n\t\t\t\tfields = this.reverseResearchFieldsetModel(repeaterID, allModels);\n\t\t\t}\n\n\t\t\treturn fields;\n\t\t},\n\n\t\treverseResearchFieldsetModel: function(repeaterID, allModels) {\n\t\t\tlet fields;\n\t\t\t_.each(allModels, function(fieldsetModel) {\n\t\t\t\t_.each(fieldsetModel.fields, function(fieldModel){\n\t\t\t\t\tif(String(fieldModel.id).startsWith(repeaterID)){\n\t\t\t\t\t\tfields = fieldsetModel;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t});\n\n\t\t\treturn fields;\n\t\t},\n\n\t\tgetRepeaterFieldById: function( id ){\n\t\t\tconst repeaterID = String(id).split('.')[0];\n\t\t\tconst fieldObject = this.getRepeaterFields(repeaterID);\n\t\t\t//return early if no match found by ID\n\t\t\tif(typeof fieldObject === 'undefined') return;\n\n\t\t\tconst model = fieldObject.fields.find(field => field.id === id);\n\n\t\t\treturn model;\n\t\t},\n\n\t\tsetAllRepeatersValues: function() {\n\t\t\tconst repeaters = this.getAllRepeaterFieldsModels();\n\t\t\tif(repeaters.length > 0) {\n\t\t\t\t\n\t\t\t\t_.each(repeaters, function(repeater){\n\t\t\t\t\tlet fields = repeater.fields;\n\t\t\t\t\tlet repeaterFieldModel = nfRadio.channel( 'fields' ).request( 'get:field', repeater.id );\n\n\t\t\t\t\tif(fields.length > 0){\n\t\t\t\t\t\tlet repeaterFieldValue = {};\n\t\t\t\t\t\t//Loop through fields\n\t\t\t\t\t\t_.each( fields, function( field ){\n\t\t\t\t\t\t\t//Get ID and Value to format and store them in the repeaterFieldValue object\n\t\t\t\t\t\t\tlet value = field.get('value');\n\t\t\t\t\t\t\tlet id = field.get('id');\n\t\t\t\t\t\t\t//Refactor ID used in case we have multiple same form on the DOM and using a changed ID for main repeater field.\n\t\t\t\t\t\t\tif(id.split(\"_\").length > 2){\n\t\t\t\t\t\t\t\tlet idArray = id.split(\"_\");\n\t\t\t\t\t\t\t\tidArray[1] = idArray[1].split(\".\")[1];\n\t\t\t\t\t\t\t\tlet newID = idArray[0] + \".\" + idArray[1] + \"_\" + idArray[2];\n\t\t\t\t\t\t\t\tdelete repeaterFieldValue[id];\n\t\t\t\t\t\t\t\tid = newID;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\trepeaterFieldValue[id] = {\n\t\t\t\t\t\t\t\t\"value\": value,\n\t\t\t\t\t\t\t\t\"id\": id\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t//Check if time is correctly added on Date/time fields\n\t\t\t\t\t\t\tif(field.get('type') === \"date\" && typeof value === \"string\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" )){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].value = {\n\t\t\t\t\t\t\t\t\t\"date\": value,\n\t\t\t\t\t\t\t\t\t\"hour\": field.attributes.selected_hour,\n\t\t\t\t\t\t\t\t\t\"minute\": field.attributes.selected_minute,\n\t\t\t\t\t\t\t\t\t\"ampm\": field.attributes.selected_ampm\n\t\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif(field.get('type') === \"file_upload\" && field.get('value')){\n\t\t\t\t\t\t\t\trepeaterFieldValue[id].files = field.attributes.files;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t\t\n\t\t\t\t\t\trepeaterFieldModel.set( 'isUpdated', false);\n\t\t\t\t\t\t//Update repeater field value with repeaterFieldValue \n\t\t\t\t\t\tnfRadio.channel( 'nfAdmin' ).request( 'update:field', repeaterFieldModel, repeaterFieldValue);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t} );\n\n\treturn model;\n} );\n\n","define( 'models/fieldRepeaterSetCollection',['models/fieldRepeaterSetModel', 'models/fieldCollection' ], function( repeaterSetModel, fieldCollection ) {\n\tvar collection = Backbone.Collection.extend( {\n\t\tmodel: repeaterSetModel,\n\n\t\tinitialize: function( models, options ) {\n\t\t\tthis.options = options;\n\t\t\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'sort:fieldsets', this.sortIDs );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'remove:fieldset', this.removeSet );\n\t\t\tthis.listenTo( nfRadio.channel( 'field-repeater' ), 'add:fieldset', this.addSet );\n\t\t\tnfRadio.channel( \"field-repeater\" ).reply( 'get:fieldsets', this.getFieldSets, this );\n\n\t\t},\n\n\t\taddSet: function(repeaterFieldID = false) {\n\t\t\tlet repeater;\n\t\t\tif(repeaterFieldID){\n\t\t\t\t//Get correct Field Model in case of multiple Repeater fields use\n\t\t\t\tconst repeaterFieldModel = this.options.repeaterFieldModel.id === repeaterFieldID ? this.options.repeaterFieldModel : false;\n\t\t\t\trepeater = repeaterFieldModel;\n\t\t\t\tif(repeaterFieldModel){\n\t\t\t\t\t//Create a new collection\n\t\t\t\t\tlet fields = new fieldCollection( this.options.templateFields, { formModel: this.options.formModel, repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t\t//Add it th sets of collection\n\t\t\t\t\tthis.add( { fields: fields }, {repeaterFieldModel: repeaterFieldModel } );\n\t\t\t\t}\n\t\t\t}\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger('fieldset:added', repeater);\n\t\t},\n\n\t\tremoveSet: function( fieldset ) {\n\t\t\t// Remove possible form errors related to required fields\n\t\t\tthis.removeRequiredFieldsErrors(fieldset);\n\n\t\t\t//Remove field models saved globally\n\t\t\tconst formID = fieldset.repeaterFieldModel.get('formID');\n\t\t\tconst repeaterID = fieldset.repeaterFieldModel.get('id');\n\t\t\tconst isRepeaterModelSet = nfAllRepeaterFieldsModels.find(rep => rep.id === repeaterID && rep.form === formID );\n\t\t\tif ( isRepeaterModelSet ){\n\t\t\t\tlet remove = [];\n\t\t\t\t_.each(isRepeaterModelSet.fields, (field, index) => {\n\t\t\t\t\tif(typeof field !== \"undefined\"){\n\t\t\t\t\t\t_.each(fieldset.get('fields').models, (fieldsetField) => {\n\t\t\t\t\t\t\tconst fieldID = typeof field.id !== \"undefined\" ? field.id : field.get('id');\n\t\t\t\t\t\t\tif(fieldsetField.id === fieldID){\n\t\t\t\t\t\t\t\t// Delete any input values.\n\t\t\t\t\t\t\t\tdelete fieldset.repeaterFieldModel.get('value')[fieldsetField.id];\n\t\t\t\t\t\t\t\tremove.push(fieldID);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t});\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t\tisRepeaterModelSet.fields = _.reject(isRepeaterModelSet.fields, (field) =>{\n\t\t\t\t\tif(typeof field === \"undefined\") return true;\n\t\t\t\t\tif(remove.includes(field.id)) return true;\n\t\t\t\t\treturn false;\n\t\t\t\t});\n\t\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:repeaterModels' );\n\t\t\t}\n\n\t\t\t//Remove the fieldset\n\t\t\tthis.remove( fieldset );\n\t\t\tfieldset.destroy();\n\t\t\t\n\t\t\t//reset all fields IDs\n\t\t\tthis.sortIDs();\n\n\t\t\t//Reset values\n\t\t\tnfRadio.channel( \"field-repeater\" ).trigger( 'set:value' );\n\t\t},\n\n\t\tremoveRequiredFieldsErrors: function( fieldset ) {\n\t\t\tlet fields = fieldset.get('fields');\n\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', field.get(\"id\"), \"required-error\" );\n\t\t\t});\n\t\t},\n\n\t\tgetFieldsets: function() {\n\t\t\treturn this.models;\n\t\t},\n\n\t\tcheckTimeField: function(field){\n\t\t\tconst id = field.get('id');\n\t\t\t//Get elements\n\t\t\tconst hourEl = document.getElementById(\"hour-select-\" + id),\n\t\t\tminEl = document.getElementById(\"minute-select-\" + id),\n\t\t\tdefaultHour = field.attributes.hours_24 === 0 ? \"12\" : \"00\";\n\t\t\t// set field values to element\n\t\t\tif(!hourEl || !minEl) return;\n\t\t\tminEl.value = typeof field.attributes.selected_minute !== \"undefined\" ? field.attributes.selected_minute : \"00\";\n\t\t\thourEl.value = typeof field.attributes.selected_hour !== \"undefined\" ? field.attributes.selected_hour : defaultHour;\n\n\t\t\tconst wrapper = document.getElementById(\"nf-field-\" + id + \"-wrap\");\n\t\t\tconst ampmEl = wrapper.querySelector('#ampm-select');\n\t\t\tif( ! ampmEl ) return;\n\t\t\tampmEl.value = typeof field.attributes.selected_ampm !== \"undefined\" ? field.attributes.selected_ampm : \"am\";\n\t\t},\n\n\t\tsortIDs: function(){\n\t\t\tconst fieldsets = this.getFieldsets();\n\t\t\tconst timeFields = [];\n\t\t\t//Reset repeater fields IDs when adding / removing a field\n\t\t\t_.each(fieldsets, function(fieldset, modelIndex){\n\t\t\t\tlet fields = fieldset.get('fields');\n\t\t\t\tfieldset.set( 'index', modelIndex + 1 );\n\t\t\t\t_.each( fields.models, function( field ) {\n\t\t\t\t\t//Always rebuild ID to allow same form multiple times on DOM\n\t\t\t\t\t//Remove suffix if it has one\n\t\t\t\t\tconst cutEl = String(field.id).split('_')[0];\n\t\t\t\t\t//Extract Field index of ID\n\t\t\t\t\tconst fieldIndex = String( cutEl ).split(\".\").length > 1 ? String( cutEl ).split(\".\").pop() : false;\n\t\t\t\t\t//The loop makes first fieldset of second same form to miss correct index here, next iteration will get that correct index\n\t\t\t\t\tif(!fieldIndex) return;\n\t\t\t\t\t//Update FieldID using ( REPEATER FIELD id . field index in the repeater field _ fieldset index in the repeater field ) format\n\t\t\t\t\tconst newID = field.collection.options.repeaterFieldModel.id + \".\" + fieldIndex + \"_\" + modelIndex;\n\t\t\t\t\tfield.set(\"id\", newID);\n\n\t\t\t\t\t// Detect time fields, fix inconsistency of date field when associated with time, as we don't use flatPickr display for time\n\t\t\t\t\tif(field.get('type') === \"date\" && ( field.get('date_mode') === \"date_and_time\" || field.get('date_mode') === \"time_only\" ) ){\n\t\t\t\t\t\ttimeFields.push(field);\n\t\t\t\t\t}\n\n\t\t\t\t});\n\t\t\t});\n\t\t\t//Reload repeater field view ( collection of fieldsets updated )\n\t\t\tnfRadio.channel( 'field-repeater' ).trigger( 'rerender:fieldsets' );\n\t\t\t\n\t\t\t//Process time fields values\n\t\t\ttimeFields.forEach( (field) => {\n\t\t\t\tthis.checkTimeField(field);\n\t\t\t});\n\t\t}\n\n\t} );\n\treturn collection;\n} );\n","define('controllers/fieldRepeater',[ 'models/fieldRepeaterSetCollection', 'models/fieldCollection' ], function( repeaterSetCollection, fieldCollection ) {\n var controller = Marionette.Object.extend({\n\n initialize: function () {\n this.listenTo( nfRadio.channel( 'repeater' ), 'init:model', this.initRepeater );\n },\n\n initRepeater: function ( model ) {\n \tif ( 'undefined' == typeof model.collection.options.formModel ) {\n \t\treturn false;\n \t}\n\n \tlet fields = new fieldCollection( model.get( 'fields' ), { formModel: model.collection.options.formModel, repeaterFieldModel: model } );\n model.set( 'sets', new repeaterSetCollection( [ { fields: fields } ], { templateFields: model.get( 'fields' ), formModel: model.collection.options.formModel, repeaterFieldModel: model } ) );\n //Trigger Fields IDs sorting in case of same form being printed multiple times on DOM\n nfRadio.channel( \"field-repeater\" ).trigger( 'sort:fieldsets' );\n },\n\n });\n\n return controller;\n});\n","define('controllers/actionGA',[], function() {\n\tvar controller = Marionette.Object.extend( {\n\t\tinitialize: function() {\n\t\t\tthis.listenTo( nfRadio.channel( 'forms' ), 'submit:response', this.actionSendGaEvent );\n\t\t},\n\n\t\tactionSendGaEvent: function( response ) {\n if (typeof response.data.actions === 'undefined' || typeof response.data.actions.googleanalytics === 'undefined') {\n return;\n }\n \n response.data.actions.googleanalytics.forEach( (action) => {\n const eventName = action.event_name;\n if(typeof eventName === 'undefined') {\n console.warn('No event name defined in the GA4 action settings. Please define an event name.');\n return;\n }\n\n if(typeof action.method_type !== 'undefined' && action.method_type === 'ga4'){\n if(typeof gtag === 'function') {\n const eventParams = {\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n gtag('event', eventName, eventParams);\n } else if (typeof dataLayer === 'object'){\n console.warn('gtag isn\\'t defined. But GTM was detected, did you mean to use GTM in the action settings?');\n } else {\n console.warn('gtag isn\\'t defined. Please make sure you have GA4 installed on your site.');\n }\n } else if( typeof action.method_type !== 'undefined' && action.method_type === 'gtm'){\n \n \n if (typeof dataLayer === 'object') {\n //Process with GTM dataLayer\n const eventParams = {\n 'event': eventName,\n 'event_category': 'form_submit',\n 'event_label': 'ninja_forms_submit',\n 'form_id': response.data.form_id\n };\n dataLayer.push(eventParams);\n } else if (typeof gtag === 'function') {\n console.warn('GTM isn\\'t defined. But GA4 was detected, did you mean to use GA4 in the action settings?');\n } else {\n console.warn('GTM isn\\'t defined. Please make sure you have GTM installed on your site.');\n }\n } else {\n console.warn('GTM and gtag aren\\'t defined. Please make sure you have GTM or GA4 installed on your site.');\n }\n });\n \n\t\t}\n\n\t});\n\n\treturn controller;\n});\n\n","define(\n\t'controllers/loadControllers',[\n\t\t'controllers/formData',\n\t\t'controllers/fieldError',\n\t\t'controllers/changeField',\n\t\t'controllers/changeEmail',\n\t\t'controllers/changeDate',\n\t\t'controllers/fieldCheckbox',\n\t\t'controllers/fieldCheckboxList',\n\t\t'controllers/fieldImageList',\n\t\t'controllers/fieldRadio',\n\t\t'controllers/fieldNumber',\n\t\t'controllers/mirrorField',\n\t\t'controllers/confirmField',\n\t\t'controllers/updateFieldModel',\n\t\t'controllers/submitButton',\n\t\t'controllers/submitDebug',\n\t\t'controllers/getFormErrors',\n\t\t'controllers/validateRequired',\n\t\t'controllers/submitError',\n\t\t'controllers/actionRedirect',\n\t\t'controllers/actionSuccess',\n\t\t'controllers/fieldSelect',\n\t\t'controllers/coreSubmitResponse',\n\t\t'controllers/fieldProduct',\n\t\t'controllers/fieldTotal',\n\t\t'controllers/fieldQuantity',\n\t\t'controllers/calculations',\n\t\t'controllers/dateBackwardsCompat',\n\t\t'controllers/fieldDate',\n\t\t'controllers/fieldRecaptcha',\n\t\t'controllers/fieldRecaptchaV3',\n\t\t'controllers/fieldHTML',\n\t\t'controllers/helpText',\n\t\t'controllers/fieldTextbox',\n\t\t'controllers/fieldTextareaRTE',\n\t\t'controllers/fieldStarRating',\n\t\t'controllers/fieldTerms',\n\t\t'controllers/formContentFilters',\n\t\t'controllers/loadViews',\n\t\t'controllers/formErrors',\n\t\t'controllers/submit',\n\t\t'controllers/defaultFilters',\n\t\t'controllers/uniqueFieldError',\n\t\t'controllers/fieldRepeater',\n\t\t'controllers/actionGA',\n\t],\n\tfunction(\n\t\tFormData,\n\t\tFieldError,\n\t\tChangeField,\n\t\tChangeEmail,\n\t\tChangeDate,\n\t\tFieldCheckbox,\n\t\tFieldCheckboxList,\n\t\tFieldImageList,\n\t\tFieldRadio,\n\t\tFieldNumber,\n\t\tMirrorField,\n\t\tConfirmField,\n\t\tUpdateFieldModel,\n\t\tSubmitButton,\n\t\tSubmitDebug,\n\t\tGetFormErrors,\n\t\tValidateRequired,\n\t\tSubmitError,\n\t\tActionRedirect,\n\t\tActionSuccess,\n\t\tFieldSelect,\n\t\tCoreSubmitResponse,\n\t\tFieldProduct,\n\t\tFieldTotal,\n\t\tFieldQuantity,\n\t\tCalculations,\n\t\tDateBackwardsCompat,\n\t\tFieldDate,\n\t\tFieldRecaptcha,\n\t\tFieldRecaptchaV3,\n\t\tFieldHTML,\n\t\tHelpText,\n\t\tFieldTextbox,\n\t\tFieldTextareaRTE,\n\t\tFieldStarRating,\n\t\tFieldTerms,\n\t\tFormContentFilters,\n\t\tLoadViews,\n\t\tFormErrors,\n\t\tSubmit,\n\t\tDefaultFilters,\n\t\tUniqueFieldError,\n\t\tFieldRepeater,\n\t\tActionGA\n\t) {\n\t\tvar controller = Marionette.Object.extend( {\n\t\t\tinitialize: function() {\n\n\t\t\t\t/**\n\t\t\t\t * App Controllers\n\t\t\t\t */\n\t\t\t\tnew LoadViews();\n\t\t\t\tnew FormErrors();\n\t\t\t\tnew Submit();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Field type controllers\n\t\t\t\t */\n\t\t\t\tnew FieldCheckbox();\n\t\t\t\tnew FieldCheckboxList();\n\t\t\t\tnew FieldImageList();\n\t\t\t\tnew FieldRadio();\n\t\t\t\tnew FieldNumber();\n\t\t\t\tnew FieldSelect();\n\t\t\t\tnew FieldProduct();\n\t\t\t\tnew FieldTotal();\n\t\t\t\tnew FieldQuantity();\n\t\t\t\tnew FieldRecaptcha();\n\t\t\t\tnew FieldRecaptchaV3();\n\t\t\t\tnew FieldHTML();\n\t\t\t\tnew HelpText();\n\t\t\t\tnew FieldTextbox();\n\t\t\t\tnew FieldTextareaRTE();\n\t\t\t\tnew FieldStarRating();\n\t\t\t\tnew FieldTerms();\n\t\t\t\tnew FormContentFilters();\n\t\t\t\tnew UniqueFieldError();\n\t\t\t\tnew FieldRepeater();\n\t\t\t\t\n\t\t\t\t/**\n\t\t\t\t * Misc controllers\n\t\t\t\t */\n\t\t\t\tnew FieldError();\n\t\t\t\tnew ChangeField();\n\t\t\t\tnew ChangeEmail();\n\t\t\t\tnew ChangeDate();\n\t\t\t\t\n\t\t\t\tnew MirrorField();\n\t\t\t\tnew ConfirmField();\n\t\t\t\tnew UpdateFieldModel();\n\t\t\t\tnew SubmitButton();\n\t\t\t\tnew SubmitDebug();\n\t\t\t\tnew GetFormErrors();\n\t\t\t\tnew ValidateRequired();\n\t\t\t\tnew SubmitError();\n\t\t\t\tnew ActionRedirect();\n\t\t\t\tnew ActionSuccess();\n\t\t\t\tnew ActionGA();\n\t\t\t\t\n\t\t\t\tnew CoreSubmitResponse();\n\t\t\t\tnew Calculations();\n\n\t\t\t\tnew DefaultFilters();\n\n\t\t\t\t/**\n\t\t\t\t * Data controllers\n\t\t\t\t */\n\t\t\t\tnew DateBackwardsCompat();\n\t\t\t\tnew FieldDate();\n\t\t\t\tnew FormData();\n\t\t\t\t\n\t\t\t}\n\t\t});\n\n\t\treturn controller;\n} );\n\n","define( 'views/beforeForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-before-form\",\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorItem',[], function() {\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: 'nf-section',\n\t\ttemplate: '#tmpl-nf-form-error',\n\n\t\tonRender: function() {\n\t\t\t// this.$el = this.$el.children();\n\t\t\t// this.$el.unwrap();\n\t\t\t// this.setElement( this.$el );\n\t\t},\n\t});\n\n\treturn view;\n} );\n","define( 'views/formErrorCollection',['views/formErrorItem'], function( formErrorItem ) {\n\tvar view = Marionette.CollectionView.extend({\n\t\ttagName: \"nf-errors\",\n\t\tchildView: formErrorItem\n\t});\n\n\treturn view;\n} );\n","define( 'views/honeyPot',[], function() {\n var view = Marionette.ItemView.extend({\n tagName: 'nf-section',\n template: '#tmpl-nf-form-hp',\n\n events: {\n \t'keyup .nf-field-hp': 'maybeError',\n 'change .nf-field-hp': 'maybeError'\n },\n\n maybeError: function( e ) {\n /*\n * If we have an empty honeyPot field, remove the honeypot form error.\n * If we do not have an empty honeyPot field, add the honeypot form error.\n */\n if ( 0 == jQuery( e.target ).val().length ) {\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'remove:error', 'honeyPot' );\n } else {\n var formModel = nfRadio.channel( 'app' ).request( 'get:form', this.model.get( 'id' ) );\n nfRadio.channel( 'form-' + this.model.get( 'id' ) ).request( 'add:error', 'honeyPot', formModel.get( 'settings' ).honeypotHoneypotError );\n }\n }\n });\n\n return view;\n} );\n","define( 'views/afterFormContent',['views/formErrorCollection', 'views/honeyPot'], function( FormErrors, HoneyPot ) {\n\n var view = Marionette.LayoutView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-after-fields\",\n\n\t\tregions: {\n\t\t\terrors: \".nf-form-errors\",\n hp: \".nf-form-hp\"\n\t\t},\n\n onShow: function() {\n \tthis.errors.show( new FormErrors( { collection: this.model.get( 'errors' ) } ) );\n this.hp.show( new HoneyPot( { model: this.model } ) );\n }\n\n });\n\n return view;\n} );\n","define( 'views/beforeFormContent',[], function( ) {\n\n var view = Marionette.ItemView.extend({\n tagName: \"nf-section\",\n template: \"#tmpl-nf-before-fields\",\n\n templateHelpers: function () {\n return {\n\n renderFieldsMarkedRequired: function() {\n\n var requiredFields = this.fields.filter( { required: 1 } );\n return ( requiredFields.length ) ? this.fieldsMarkedRequired : '';\n },\n };\n },\n\n });\n\n return view;\n} );\n","define( 'views/formLayout',[ 'views/afterFormContent', 'views/beforeFormContent', 'models/fieldCollection' ], function( AfterFormContent, BeforeFormContent, FieldCollection ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-form-layout\",\n\n\t\tregions: {\n\t\t\tbeforeFormContent: \".nf-before-form-content\",\n\t\t\tformContent: \".nf-form-content\",\n\t\t\tafterFormContent: \".nf-after-form-content\"\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tnfRadio.channel( 'form-' + this.model.get( 'id' ) ).reply( 'get:el', this.getEl, this );\n\t\t\t\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n\t\tonRender: function() {\n\t\t\tthis.$el = this.$el.children();\n\t\t\tthis.$el.unwrap();\n\t\t\tthis.setElement( this.$el );\n\t\t},\n\n\t\tonShow: function() {\n\t\t\tthis.beforeFormContent.show( new BeforeFormContent( { model: this.model } ) );\n\t\t\t\n\t\t\t/*\n\t\t\t * Set our formContentData to our form setting 'formContentData'\n\t\t\t */\n\t\t\tvar formContentData = this.model.get( 'formContentData' );\n\t\t\t\n\t\t\t/*\n\t\t\t * Check our fieldContentViewsFilter to see if we have any defined.\n\t\t\t * If we do, overwrite our default with the view returned from the filter.\n\t\t\t */\n\t\t\tvar formContentViewFilters = nfRadio.channel( 'formContent' ).request( 'get:viewFilters' );\n\t\t\t\n\t\t\t/* \n\t\t\t* Get our first filter, this will be the one with the highest priority.\n\t\t\t*/\n\t\t\tvar sortedArray = _.without( formContentViewFilters, undefined );\n\t\t\tvar callback = _.first( sortedArray );\n\t\t\tformContentView = callback();\n\t\t\t\n\t\t\tvar options = {\n\t\t\t\tdata: formContentData,\n\t\t\t\tformModel: this.model\n\t\t\t};\n\t\t\t\n\t\t\t/*\n\t\t\t * If we have a collection, pass the returned data as the collection.\n\t\t\t *\n\t\t\t * If we have a model, pass the returned data as the collection.\n\t\t\t */\n\t\t\tif ( false !== formContentData instanceof Backbone.Collection ) {\n\t\t\t\toptions.collection = formContentData;\n\t\t\t} else if ( false !== formContentData instanceof Backbone.Model ) {\n\t\t\t\toptions.model = formContentData;\n\t\t\t}\n\n\t\t\tthis.formContent.show( new formContentView( options ) );\n\t\t\tthis.afterFormContent.show( new AfterFormContent( { model: this.model } ) );\n\t\t},\n\n\t\tgetEl: function() {\n\t\t\treturn this.el;\n\t\t},\n\n templateHelpers: function () {\n return {\n\n renderClasses: function() {\n return '';\n }\n\n };\n },\n\n hide: function() {\n \tjQuery( this.el ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","define( 'views/afterForm',[], function( ) {\n\n\tvar view = Marionette.ItemView.extend({\n\t\ttagName: \"nf-section\",\n\t\ttemplate: \"#tmpl-nf-after-form\",\n\t\t\n\t});\n\n\treturn view;\n} );\n","define( 'views/mainLayout',['views/beforeForm', 'views/formLayout', 'views/afterForm'], function( BeforeForm, FormLayout, AfterForm ) {\n\n\tvar view = Marionette.LayoutView.extend({\n\t\ttemplate: '#tmpl-nf-layout',\n\n\t\tregions: {\n\t\t\tresponseMsg: '.nf-response-msg',\n\t\t\tbeforeForm: '.nf-before-form',\n\t\t\tformLayout: '.nf-form-layout',\n\t\t\tafterForm: '.nf-after-form'\n\t\t},\n\n\t\tinitialize: function() {\n\t\t\tthis.$el = jQuery( '#nf-form-' + this.model.id + '-cont' );\n\t\t\tthis.el = '#nf-form-' + this.model.id + '-cont';\n\n\t\t\tthis.render();\n\n\t\t\tthis.beforeForm.show( new BeforeForm( { model: this.model } ) );\n\t\t\tthis.formLayout.show( new FormLayout( { model: this.model, fieldCollection: this.options.fieldCollection } ) );\n\t\t\tthis.afterForm.show( new AfterForm( { model: this.model } ) );\n\n\t\t\t/*\n\t\t\t * If we need to hide a form, set the visibility of this form to hidden.\n\t\t\t */\n\t\t\t this.listenTo( this.model, 'hide', this.hide );\n\t\t},\n\n hide: function() {\n \tjQuery( this.el ).find( '.nf-form-title' ).hide();\n }\n\n\t});\n\n\treturn view;\n} );\n","// const Intl = require('intl');\n\n// class nfLocaleConverter {\nvar nfLocaleConverter = function(newLocale, thousands_sep, decimal_sep) {\n\n // constructor(newLocale = 'en-US', thousands_sep, decimal_sep) {\n if ('undefined' !== typeof newLocale && 0 < newLocale.length) {\n this.locale = newLocale.split('_').join('-');\n } else {\n this.locale = 'en-US';\n }\n\n this.thousands_sep = thousands_sep || ',';\n this.decimal_sep = decimal_sep || '.';\n // }\n\n this.uniqueElememts = function( value, index, self ) {\n return self.indexOf(value) === index;\n }\n\n this.numberDecoder = function(num) {\n num = num.toString();\n // let thousands_sep = ',';\n var formatted = '';\n\n // Account for negative numbers.\n var negative = false;\n \n if ('-' === num.charAt(0)) {\n negative = true;\n num = num.replace( '-', '' );\n }\n \n // Account for a space as the thousands separator.\n // This pattern accounts for all whitespace characters (including thin space).\n num = num.replace( /\\s/g, '' );\n num = num.replace( / /g, '' );\n\n // Determine what our existing separators are.\n var myArr = num.split('');\n var separators = myArr.filter(function(el) {\n return !el.match(/[0-9]/);\n });\n \n var final_separators = separators.filter(this.uniqueElememts);\n \n switch( final_separators.length ) {\n case 0:\n formatted = num;\n break;\n case 1:\n var replacer = '';\n if ( 1 == separators.length ) {\n separator = separators.pop();\n var sides = num.split(separator);\n var last = sides.pop();\n if ( 3 == last.length && separator == this.thousands_sep ) {\n replacer = '';\n } else {\n replacer = '.';\n }\n } else {\n separator = final_separators.pop();\n }\n\n formatted = num.split(separator).join(replacer);\n break;\n case 2:\n var find_one = final_separators[0];\n var re_one;\n if('.' === find_one) {\n re_one = new RegExp('[.]', 'g');\n } else {\n re_one = new RegExp(find_one, 'g');\n }\n formatted = num.replace(re_one, '');\n \n var find_two = final_separators[1];\n \n var re_two;\n if('.' === find_two) {\n re_two = new RegExp('[.]', 'g');\n } else {\n re_two = new RegExp(find_two, 'g');\n }\n formatted = formatted.replace(re_two, '.' );\n break;\n default:\n return 'NaN';\n }\n\n if ( negative ) {\n formatted = '-' + formatted;\n }\n this.debug('Number Decoder ' + num + ' -> ' + formatted );\n return formatted;\n }\n\n this.numberEncoder = function(num, percision) {\n num = this.numberDecoder(num);\n\n return Intl.NumberFormat(this.locale, { minimumFractionDigits: percision, maximumFractionDigits: percision }).format(num);\n }\n\n this.debug = function(message) {\n if ( window.nfLocaleConverterDebug || false ) console.log(message);\n }\n}\n\n// module.exports = nfLocaleConverter;\ndefine(\"../nfLocaleConverter\", function(){});\n\n","//Inline data converted to globally available vars sent via wp_localize_script\nif('undefined' !== typeof(nfInlineVars.nfForms)) {\n\twindow.nfForms = nfInlineVars.nfForms;\n}\n\n/*\n * Because our backbone listens to .change() events on elements, changes made using jQuery .val() don't bubble properly.\n * This patch overwrites the default behaviour of jQuery .val() so that IF the item has an nf-element class, we fire a change event.\n */\n( function( jQuery ) {\n\t/*\n\t * Store our original .val() function.\n\t */\n var originalVal = jQuery.fn.val;\n /*\n * Create our own .val() function.\n */\n jQuery.fn.val = function(){\n var prev;\n /* \n * Store a copy of the results of the original .val() call.\n * We use this to make sure that we've actually changed something.\n */\n if( arguments.length > 0 ){\n prev = originalVal.apply( this,[] );\n }\n /*\n * Get the results of the original .val() call. \n */\n var result = originalVal.apply( this, arguments );\n\n /*\n * If we have arguments, we have actually made a change, AND this has the nf-element class, trigger .change().\n */\n if( arguments.length > 0 && prev != originalVal.apply( this, [] ) && jQuery( this ).hasClass( 'nf-element' ) ) {\n\t\t\tjQuery(this).change();\n }\n\n return result;\n };\n} ) ( jQuery );\n\ndocument.addEventListener(\"DOMContentLoaded\", function() {\n\trequire( [ 'models/formCollection', 'models/formModel', 'models/fieldCollection', 'controllers/loadControllers', 'views/mainLayout', '../nfLocaleConverter'], function( formCollection, FormModel, FieldCollection, LoadControllers, mainLayout ) {\n\n\t\tif( 'undefined' == typeof nfForms ) {\n\t\t\t/*\n\t\t\t * nfForms is not defined. This means that something went wrong loading the form data.\n\t\t\t * Bail form setup and empty the form containers to remove any loading animations.\n\t\t\t */\n\t\t\tjQuery( '.nf-form-cont' ).empty();\n\t\t\treturn;\n\t\t}\n\n\t\tvar NinjaForms = Marionette.Application.extend({\n\t\t\tforms: {},\n\t\t\tinitialize: function( options ) {\n\t\t\t\tvar that = this;\n\t\t\t\tMarionette.Renderer.render = function(template, data){\n\t\t\t\t\tvar template = that.template( template );\n\t\t\t\t\treturn template( data );\n\t\t\t\t};\n\n\t\t\t\t// Underscore one-liner for getting URL Parameters\n\t\t\t\tthis.urlParameters = _.object(_.compact(_.map(location.search.slice(1).split('&'), function(item) { if (item) return item.split('='); })));\n\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ) {\n\t\t\t\t\tthis.listenTo(nfRadio.channel('form-' + this.urlParameters.nf_resume), 'loaded', this.restart);\n\t\t\t\t}\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:decodeNumber', this.decodeNumber);\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'locale:encodeNumber',this.encodeNumber);\n\n\t\t\t\tvar loadControllers = new LoadControllers();\n\t\t\t\tnfRadio.channel( 'app' ).trigger( 'after:loadControllers' );\n\n\t\t\t\tnfRadio.channel( 'app' ).reply( 'get:template', this.template );\t\t\t},\n\t\t\t\n\t\t\tonStart: function() {\n\t\t\t\tvar formCollection = nfRadio.channel( 'app' ).request( 'get:forms' );\n\t\t\t\t_.each( formCollection.models, function( form, index ) {\n\t\t\t\t\tvar layoutView = new mainLayout( { model: form, fieldCollection: form.get( 'fields' ) } );\t\t\t\n\t\t\t\t\tnfRadio.channel( 'form' ).trigger( 'render:view', layoutView );\n\t\t\t\t\tjQuery( document ).trigger( 'nfFormReady', layoutView );\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\trestart: function( formModel ) {\n\t\t\t\tif( 'undefined' != typeof this.urlParameters.nf_resume ){\n\t\t\t\t\tvar data = {\n\t\t\t\t\t\t'action': 'nf_ajax_submit',\n\t\t\t\t\t\t'security': nfFrontEnd.ajaxNonce,\n\t\t\t\t\t\t'nf_resume': this.urlParameters\n\t\t\t\t\t};\n\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'disable:submit' );\n\t\t\t\t\tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'processingLabel' );\n\n\t\t\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'render:view', function() {\n\t\t\t\t\t\t/**\n\t\t\t\t\t\t * TODO: This needs to be re-worked for backbone. It's not dynamic enough.\n\t\t\t\t\t\t */\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t * Hide form fields (but not the submit button).\n\t\t\t\t\t\t */\n\t\t\t\t\t\tjQuery( '#nf-form-' + formModel.get( 'id' ) + '-cont .nf-field-container:not(.submit-container)' ).hide();\n\t\t\t\t\t});\n\n\t\t\t\t\t// TODO: Refactor Duplication\n\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\turl: nfFrontEnd.adminAjax,\n\t\t\t\t\t\ttype: 'POST',\n\t\t\t\t\t\tdata: data,\n\t\t\t\t\t\tcache: false,\n\t\t\t\t\t\tsuccess: function( data, textStatus, jqXHR ) {\n\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t \t\tvar response = data;\n\t\t\t\t\t\t nfRadio.channel( 'forms' ).trigger( 'submit:response', response, textStatus, jqXHR, formModel.get( 'id' ) );\n\t\t\t\t\t\t \tnfRadio.channel( 'form-' + formModel.get( 'id' ) ).trigger( 'submit:response', response, textStatus, jqXHR );\n\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\tconsole.log( 'Parse Error' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t },\n\t\t\t\t\t error: function( jqXHR, textStatus, errorThrown ) {\n\t\t\t\t\t // Handle errors here\n\t\t\t\t\t console.log('ERRORS: ' + textStatus);\n\t\t\t\t\t // STOP LOADING SPINNER\n\t\t\t\t\t\t\tnfRadio.channel( 'forms' ).trigger( 'submit:response', 'error', textStatus, jqXHR, errorThrown );\n\t\t\t\t\t }\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t},\n\n\t\t\ttemplate: function( template ) {\n\t\t\t\tif (!template.startsWith('script')) {\n\t\t\t\t\ttemplate = 'script'+template;\n\t\t\t\t}\n\t\t\t\treturn _.template( jQuery( template ).html(), {\n\t\t\t\t\tevaluate: /<#([\\s\\S]+?)#>/g,\n\t\t\t\t\tinterpolate: /\\{\\{\\{([\\s\\S]+?)\\}\\}\\}/g,\n\t\t\t\t\tescape: /\\{\\{([^\\}]+?)\\}\\}(?!\\})/g,\n\t\t\t\t\tvariable: 'data'\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tencodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberEncoder(num);\n\t\t\t},\n\n\t\t\tdecodeNumber: function(num) {\n\t\t\t\tvar localeConverter = new nfLocaleConverter(nfi18n.siteLocale, nfi18n.thousands_sep, nfi18n.decimal_point);\n\n\t\t\t\treturn localeConverter.numberDecoder(num);\n\t\t\t}\n\t\t});\n\t\n\t\tvar ninjaForms = new NinjaForms();\n\t\tninjaForms.start();\t\t\n\t} );\n} );\n\ndefine(\"main\", function(){});\n\n"]} -
ninja-forms/trunk/includes/Fields/Checkbox.php
r2462448 r3323843 114 114 { 115 115 // If value is true, return checked value setting. 116 if( $ value) return $field[ 'settings' ][ 'checked_value' ];116 if( $field[ 'settings' ][ 'value' ] ) return $field[ 'settings' ][ 'checked_value' ]; 117 117 // Else return unchecked value setting. 118 return $field[ 'settings' ][ 'unchecked_value' ]; ;118 return $field[ 'settings' ][ 'unchecked_value' ]; 119 119 } 120 120 -
ninja-forms/trunk/includes/Fields/Date.php
r2862849 r3323843 268 268 * It'll be in a format like 01/05/2021,hour,minute,ampm. 269 269 */ 270 270 271 $exploded_value = explode( ',', $value ); 271 272 … … 281 282 282 283 if ( 'time_only' == $field[ 'settings' ][ 'date_mode' ] ) { 283 return $time; 284 if($time === ':' && !strpos($value, ',')) { 285 return $value; 286 } else { 287 return $time; 288 } 284 289 } 285 290 -
ninja-forms/trunk/ninja-forms.php
r3320170 r3323843 4 4 Plugin URI: http://ninjaforms.com/?utm_source=WordPress&utm_medium=readme 5 5 Description: Ninja Forms is a webform builder with unparalleled ease of use and features. 6 Version: 3.10. 36 Version: 3.10.4 7 7 Author: Saturday Drive 8 8 Author URI: http://ninjaforms.com/?utm_source=Ninja+Forms+Plugin&utm_medium=Plugins+WP+Dashboard … … 44 44 */ 45 45 46 const VERSION = '3.10. 3';46 const VERSION = '3.10.4'; 47 47 48 48 /** -
ninja-forms/trunk/readme.txt
r3320170 r3323843 5 5 Requires at least: 6.5 6 6 Tested up to: 6.8 7 Stable tag: 3.10.3 8 7 Stable tag: 3.10.4 9 8 Requires PHP: 7.4 10 9 … … 312 311 313 312 == Upgrade Notice == 314 = 3.10.3 (June 30 2025) = 315 *Bug Fixes:* 316 - Fixes rounding error for number fields. 317 - Resolves a hang on save in certain circumstances. 318 - Removes an unused uinstall hook method. 319 320 *Misc:* 321 - Updates several npm dependencies. 313 = 3.10.4 (July 7 2025) = 314 *Bug Fixes:* 315 - Fixes value issue with time_only date field. 316 - Fixes issue with common value for date/time field in repeatable field sets. 317 - Fixes incorrect value for single checkbox merge tags. 322 318 323 319 == Changelog == 320 = 3.10.4 (July 7 2025) = 321 *Bug Fixes:* 322 - Fixes value issue with time_only date field. 323 - Fixes issue with common value for date/time field in repeatable field sets. 324 - Fixes incorrect value for single checkbox merge tags. 325 324 326 = 3.10.3 (June 30 2025) = 325 327 *Bug Fixes:* -
ninja-forms/trunk/vendor/composer/installed.php
r3320170 r3323843 2 2 'root' => array( 3 3 'name' => 'saturday-drive/ninja-forms', 4 'pretty_version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',5 'version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',6 'reference' => ' dbd31c08a371ecf39a89fc4c9885f118135d754b',4 'pretty_version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 5 'version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 6 'reference' => '75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 7 7 'type' => 'library', 8 8 'install_path' => __DIR__ . '/../../', … … 12 12 'versions' => array( 13 13 'saturday-drive/ninja-forms' => array( 14 'pretty_version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',15 'version' => 'dev- dbd31c08a371ecf39a89fc4c9885f118135d754b',16 'reference' => ' dbd31c08a371ecf39a89fc4c9885f118135d754b',14 'pretty_version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 15 'version' => 'dev-75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 16 'reference' => '75e44baebba4533a9d2695eaf4e1566f42b2b4a6', 17 17 'type' => 'library', 18 18 'install_path' => __DIR__ . '/../../',
Note: See TracChangeset
for help on using the changeset viewer.