{"version":3,"sources":["../../../config-wrap-start-default.js","../lib/almond.js","models/whenModel.js","models/whenCollection.js","models/conditionModel.js","models/conditionCollection.js","controllers/initCollection.js","controllers/showHide.js","controllers/showHideOption.js","controllers/changeValue.js","controllers/selectDeselect.js","controllers/actions.js","main.js"],"names":["requirejs","require","define","undef","hasProp","obj","prop","hasOwn","call","normalize","name","baseName","nameParts","nameSegment","mapValue","foundMap","lastIndex","foundI","foundStarMap","starI","i","j","part","baseParts","split","map","config","starMap","charAt","length","nodeIdCompat","jsSuffixRegExp","test","replace","slice","concat","splice","join","indexOf","substring","makeRequire","relName","forceSync","args","aps","arguments","push","req","apply","makeNormalize","makeLoad","depName","value","defined","callDep","waiting","defining","main","Error","splitPrefix","prefix","index","makeConfig","makeMap","handlers","Object","prototype","hasOwnProperty","plugin","parts","f","n","pr","p","exports","e","module","id","uri","deps","callback","cjsModule","ret","usingExports","callbackType","load","undefined","alt","setTimeout","cfg","_defined","amd","jQuery","model","Backbone","Model","extend","initialize","models","options","this","get","calcModel","nfRadio","channel","collection","condition","formModel","request","listenTo","updateCalcCompare","fieldModel","on","updateFieldCompare","maybeupdateFieldCompare","updateCompare","el","keyCode","fieldValue","attr","val","status","compareValues","set","_","isEmpty","equal","a","b","notequal","contains","isArray","RegExp","toLowerCase","notcontains","greater","isNumeric","parseFloat","less","greaterequal","lessequal","WhenModel","Collection","WhenCollection","checkWhen","statusResults","pluck","connectors","allAND","every","values","v","some","each","then","trigger","elseData","ConditionModel","ConditionCollection","controller","Marionette","resetCollection","fieldsCollection","reply","hideField","showField","conditionModel","targetFieldModel","key","viewEl","showOption","hideOption","option","getOption","visible","updateFieldModel","getFieldModel","find","changeValue","selectOption","deselectOption","selected","currentValue","without","actions","activateAction","deactivateAction","getStatus","thenObject","console","log","$id","Radio","InitCollection","ShowHide","ShowHideOption","ChangeValue","SelectDeselect","Actions","NFConditionalLogic","Application","loadControllers","onStart","nfConditionalLogic","start"],"mappings":"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","file":"front-end.js","sourcesContent":["(function () {\n","/**\r\n * @license almond 0.3.1 Copyright (c) 2011-2014, The Dojo Foundation All Rights Reserved.\r\n * Available via the MIT or new BSD license.\r\n * see: http://github.com/jrburke/almond for details\r\n */\r\n//Going sloppy to avoid 'use strict' string cost, but strict practices should\r\n//be followed.\r\n/*jslint sloppy: true */\r\n/*global setTimeout: false */\r\n\r\nvar requirejs, require, define;\r\n(function (undef) {\r\n var main, req, makeMap, handlers,\r\n defined = {},\r\n waiting = {},\r\n config = {},\r\n defining = {},\r\n hasOwn = Object.prototype.hasOwnProperty,\r\n aps = [].slice,\r\n jsSuffixRegExp = /\\.js$/;\r\n\r\n function hasProp(obj, prop) {\r\n return hasOwn.call(obj, prop);\r\n }\r\n\r\n /**\r\n * Given a relative module name, like ./something, normalize it to\r\n * a real name that can be mapped to a path.\r\n * @param {String} name the relative name\r\n * @param {String} baseName a real name that the name arg is relative\r\n * to.\r\n * @returns {String} normalized name\r\n */\r\n function normalize(name, baseName) {\r\n var nameParts, nameSegment, mapValue, foundMap, lastIndex,\r\n foundI, foundStarMap, starI, i, j, part,\r\n baseParts = baseName && baseName.split(\"/\"),\r\n map = config.map,\r\n starMap = (map && map['*']) || {};\r\n\r\n //Adjust any relative paths.\r\n if (name && name.charAt(0) === \".\") {\r\n //If have a base name, try to normalize against it,\r\n //otherwise, assume it is a top-level require that will\r\n //be relative to baseUrl in the end.\r\n if (baseName) {\r\n name = name.split('/');\r\n lastIndex = name.length - 1;\r\n\r\n // Node .js allowance:\r\n if (config.nodeIdCompat && jsSuffixRegExp.test(name[lastIndex])) {\r\n name[lastIndex] = name[lastIndex].replace(jsSuffixRegExp, '');\r\n }\r\n\r\n //Lop off the last part of baseParts, so that . matches the\r\n //\"directory\" and not name of the baseName's module. For instance,\r\n //baseName of \"one/two/three\", maps to \"one/two/three.js\", but we\r\n //want the directory, \"one/two\" for this normalization.\r\n name = baseParts.slice(0, baseParts.length - 1).concat(name);\r\n\r\n //start trimDots\r\n for (i = 0; i < name.length; i += 1) {\r\n part = name[i];\r\n if (part === \".\") {\r\n name.splice(i, 1);\r\n i -= 1;\r\n } else if (part === \"..\") {\r\n if (i === 1 && (name[2] === '..' || name[0] === '..')) {\r\n //End of the line. Keep at least one non-dot\r\n //path segment at the front so it can be mapped\r\n //correctly to disk. Otherwise, there is likely\r\n //no path mapping for a path starting with '..'.\r\n //This can still fail, but catches the most reasonable\r\n //uses of ..\r\n break;\r\n } else if (i > 0) {\r\n name.splice(i - 1, 2);\r\n i -= 2;\r\n }\r\n }\r\n }\r\n //end trimDots\r\n\r\n name = name.join(\"/\");\r\n } else if (name.indexOf('./') === 0) {\r\n // No baseName, so this is ID is resolved relative\r\n // to baseUrl, pull off the leading dot.\r\n name = name.substring(2);\r\n }\r\n }\r\n\r\n //Apply map config if available.\r\n if ((baseParts || starMap) && map) {\r\n nameParts = name.split('/');\r\n\r\n for (i = nameParts.length; i > 0; i -= 1) {\r\n nameSegment = nameParts.slice(0, i).join(\"/\");\r\n\r\n if (baseParts) {\r\n //Find the longest baseName segment match in the config.\r\n //So, do joins on the biggest to smallest lengths of baseParts.\r\n for (j = baseParts.length; j > 0; j -= 1) {\r\n mapValue = map[baseParts.slice(0, j).join('/')];\r\n\r\n //baseName segment has config, find if it has one for\r\n //this name.\r\n if (mapValue) {\r\n mapValue = mapValue[nameSegment];\r\n if (mapValue) {\r\n //Match, update name to the new value.\r\n foundMap = mapValue;\r\n foundI = i;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n if (foundMap) {\r\n break;\r\n }\r\n\r\n //Check for a star map match, but just hold on to it,\r\n //if there is a shorter segment match later in a matching\r\n //config, then favor over this star map.\r\n if (!foundStarMap && starMap && starMap[nameSegment]) {\r\n foundStarMap = starMap[nameSegment];\r\n starI = i;\r\n }\r\n }\r\n\r\n if (!foundMap && foundStarMap) {\r\n foundMap = foundStarMap;\r\n foundI = starI;\r\n }\r\n\r\n if (foundMap) {\r\n nameParts.splice(0, foundI, foundMap);\r\n name = nameParts.join('/');\r\n }\r\n }\r\n\r\n return name;\r\n }\r\n\r\n function makeRequire(relName, forceSync) {\r\n return function () {\r\n //A version of a require function that passes a moduleName\r\n //value for items that may need to\r\n //look up paths relative to the moduleName\r\n var args = aps.call(arguments, 0);\r\n\r\n //If first arg is not require('string'), and there is only\r\n //one arg, it is the array form without a callback. Insert\r\n //a null so that the following concat is correct.\r\n if (typeof args[0] !== 'string' && args.length === 1) {\r\n args.push(null);\r\n }\r\n return req.apply(undef, args.concat([relName, forceSync]));\r\n };\r\n }\r\n\r\n function makeNormalize(relName) {\r\n return function (name) {\r\n return normalize(name, relName);\r\n };\r\n }\r\n\r\n function makeLoad(depName) {\r\n return function (value) {\r\n defined[depName] = value;\r\n };\r\n }\r\n\r\n function callDep(name) {\r\n if (hasProp(waiting, name)) {\r\n var args = waiting[name];\r\n delete waiting[name];\r\n defining[name] = true;\r\n main.apply(undef, args);\r\n }\r\n\r\n if (!hasProp(defined, name) && !hasProp(defining, name)) {\r\n throw new Error('No ' + name);\r\n }\r\n return defined[name];\r\n }\r\n\r\n //Turns a plugin!resource to [plugin, resource]\r\n //with the plugin being undefined if the name\r\n //did not have a plugin prefix.\r\n function splitPrefix(name) {\r\n var prefix,\r\n index = name ? name.indexOf('!') : -1;\r\n if (index > -1) {\r\n prefix = name.substring(0, index);\r\n name = name.substring(index + 1, name.length);\r\n }\r\n return [prefix, name];\r\n }\r\n\r\n /**\r\n * Makes a name map, normalizing the name, and using a plugin\r\n * for normalization if necessary. Grabs a ref to plugin\r\n * too, as an optimization.\r\n */\r\n makeMap = function (name, relName) {\r\n var plugin,\r\n parts = splitPrefix(name),\r\n prefix = parts[0];\r\n\r\n name = parts[1];\r\n\r\n if (prefix) {\r\n prefix = normalize(prefix, relName);\r\n plugin = callDep(prefix);\r\n }\r\n\r\n //Normalize according\r\n if (prefix) {\r\n if (plugin && plugin.normalize) {\r\n name = plugin.normalize(name, makeNormalize(relName));\r\n } else {\r\n name = normalize(name, relName);\r\n }\r\n } else {\r\n name = normalize(name, relName);\r\n parts = splitPrefix(name);\r\n prefix = parts[0];\r\n name = parts[1];\r\n if (prefix) {\r\n plugin = callDep(prefix);\r\n }\r\n }\r\n\r\n //Using ridiculous property names for space reasons\r\n return {\r\n f: prefix ? prefix + '!' + name : name, //fullName\r\n n: name,\r\n pr: prefix,\r\n p: plugin\r\n };\r\n };\r\n\r\n function makeConfig(name) {\r\n return function () {\r\n return (config && config.config && config.config[name]) || {};\r\n };\r\n }\r\n\r\n handlers = {\r\n require: function (name) {\r\n return makeRequire(name);\r\n },\r\n exports: function (name) {\r\n var e = defined[name];\r\n if (typeof e !== 'undefined') {\r\n return e;\r\n } else {\r\n return (defined[name] = {});\r\n }\r\n },\r\n module: function (name) {\r\n return {\r\n id: name,\r\n uri: '',\r\n exports: defined[name],\r\n config: makeConfig(name)\r\n };\r\n }\r\n };\r\n\r\n main = function (name, deps, callback, relName) {\r\n var cjsModule, depName, ret, map, i,\r\n args = [],\r\n callbackType = typeof callback,\r\n usingExports;\r\n\r\n //Use name if no relName\r\n relName = relName || name;\r\n\r\n //Call the callback to define the module, if necessary.\r\n if (callbackType === 'undefined' || callbackType === 'function') {\r\n //Pull out the defined dependencies and pass the ordered\r\n //values to the callback.\r\n //Default to [require, exports, module] if no deps\r\n deps = !deps.length && callback.length ? ['require', 'exports', 'module'] : deps;\r\n for (i = 0; i < deps.length; i += 1) {\r\n map = makeMap(deps[i], relName);\r\n depName = map.f;\r\n\r\n //Fast path CommonJS standard dependencies.\r\n if (depName === \"require\") {\r\n args[i] = handlers.require(name);\r\n } else if (depName === \"exports\") {\r\n //CommonJS module spec 1.1\r\n args[i] = handlers.exports(name);\r\n usingExports = true;\r\n } else if (depName === \"module\") {\r\n //CommonJS module spec 1.1\r\n cjsModule = args[i] = handlers.module(name);\r\n } else if (hasProp(defined, depName) ||\r\n hasProp(waiting, depName) ||\r\n hasProp(defining, depName)) {\r\n args[i] = callDep(depName);\r\n } else if (map.p) {\r\n map.p.load(map.n, makeRequire(relName, true), makeLoad(depName), {});\r\n args[i] = defined[depName];\r\n } else {\r\n throw new Error(name + ' missing ' + depName);\r\n }\r\n }\r\n\r\n ret = callback ? callback.apply(defined[name], args) : undefined;\r\n\r\n if (name) {\r\n //If setting exports via \"module\" is in play,\r\n //favor that over return value and exports. After that,\r\n //favor a non-undefined return value over exports use.\r\n if (cjsModule && cjsModule.exports !== undef &&\r\n cjsModule.exports !== defined[name]) {\r\n defined[name] = cjsModule.exports;\r\n } else if (ret !== undef || !usingExports) {\r\n //Use the return value from the function.\r\n defined[name] = ret;\r\n }\r\n }\r\n } else if (name) {\r\n //May just be an object definition for the module. Only\r\n //worry about defining if have a module name.\r\n defined[name] = callback;\r\n }\r\n };\r\n\r\n requirejs = require = req = function (deps, callback, relName, forceSync, alt) {\r\n if (typeof deps === \"string\") {\r\n if (handlers[deps]) {\r\n //callback in this case is really relName\r\n return handlers[deps](callback);\r\n }\r\n //Just return the module wanted. In this scenario, the\r\n //deps arg is the module name, and second arg (if passed)\r\n //is just the relName.\r\n //Normalize module name, if it contains . or ..\r\n return callDep(makeMap(deps, callback).f);\r\n } else if (!deps.splice) {\r\n //deps is a config object, not an array.\r\n config = deps;\r\n if (config.deps) {\r\n req(config.deps, config.callback);\r\n }\r\n if (!callback) {\r\n return;\r\n }\r\n\r\n if (callback.splice) {\r\n //callback is an array, which means it is a dependency list.\r\n //Adjust args if there are dependencies\r\n deps = callback;\r\n callback = relName;\r\n relName = null;\r\n } else {\r\n deps = undef;\r\n }\r\n }\r\n\r\n //Support require(['a'])\r\n callback = callback || function () {};\r\n\r\n //If relName is a function, it is an errback handler,\r\n //so remove it.\r\n if (typeof relName === 'function') {\r\n relName = forceSync;\r\n forceSync = alt;\r\n }\r\n\r\n //Simulate async callback;\r\n if (forceSync) {\r\n main(undef, deps, callback, relName);\r\n } else {\r\n //Using a non-zero value because of concern for what old browsers\r\n //do, and latest browsers \"upgrade\" to 4 if lower value is used:\r\n //http://www.whatwg.org/specs/web-apps/current-work/multipage/timers.html#dom-windowtimers-settimeout:\r\n //If want a value immediately, use require('id') instead -- something\r\n //that works in almond on the global level, but not guaranteed and\r\n //unlikely to work in other AMD implementations.\r\n setTimeout(function () {\r\n main(undef, deps, callback, relName);\r\n }, 4);\r\n }\r\n\r\n return req;\r\n };\r\n\r\n /**\r\n * Just drops the config on the floor, but returns req in case\r\n * the config return value is used.\r\n */\r\n req.config = function (cfg) {\r\n return req(cfg);\r\n };\r\n\r\n /**\r\n * Expose module registry for debugging and tooling\r\n */\r\n requirejs._defined = defined;\r\n\r\n define = function (name, deps, callback) {\r\n if (typeof name !== 'string') {\r\n throw new Error('See almond README: incorrect module build, no module name');\r\n }\r\n\r\n //This module may not have dependencies\r\n if (!deps.splice) {\r\n //deps is not an array, so probably means\r\n //an object literal or factory function for\r\n //the value. Adjust args.\r\n callback = deps;\r\n deps = [];\r\n }\r\n\r\n if (!hasProp(defined, name) && !hasProp(waiting, name)) {\r\n waiting[name] = [name, deps, callback];\r\n }\r\n };\r\n\r\n define.amd = {\r\n jQuery: true\r\n };\r\n}());\r\n\ndefine(\"../lib/almond\", function(){});\n\n","define( 'models/whenModel',[], function() {\r\n\tvar model = Backbone.Model.extend( {\r\n\t\tinitialize: function( models, options ) {\r\n\t\t\t/*\r\n\t\t\t * If our key or comparator is empty, don't do anything else.\r\n\t\t\t */\r\n\t\t\tif ( ! this.get( 'key' ) || ! this.get( 'comparator' ) ) return;\r\n\r\n\t\t\t/*\r\n\t\t\t * Our key could be a field or a calc.\r\n\t\t\t * We need to setup a listener on either the field or calc model for changes.\r\n\t\t\t */\r\n\r\n\t\t\tif ( 'calc' == this.get( 'type' ) ) { // We have a calculation key\r\n\t\t\t\t/*\r\n\t\t\t\t * Get our calc model\r\n\t\t\t\t */\r\n\t\t\t\tvar calcModel = nfRadio.channel( 'form-' + this.collection.options.condition.collection.formModel.get( 'id' ) ).request( 'get:calc', this.get( 'key' ) );\r\n\t\t\t\t/*\r\n\t\t\t\t * When we update our calculation, update our compare\r\n\t\t\t\t */\r\n\t\t\t\tthis.listenTo( calcModel, 'change:value', this.updateCalcCompare );\r\n\t\t\t} else { // We have a field key\r\n\t\t\t\t// Get our field model\r\n\t\t\t\tvar fieldModel = nfRadio.channel( 'form-' + options.condition.collection.formModel.get( 'id' ) ).request( 'get:fieldByKey', this.get( 'key' ) );\r\n\r\n\t\t\t\tif( 'undefined' == typeof fieldModel ) return;\r\n\r\n\t\t\t\t// When we change the value of our field, update our compare status.\r\n\t\t\t\tfieldModel.on( 'change:value', this.updateFieldCompare, this );\r\n\t\t\t\t// When we keyup in our field, maybe update our compare status.\r\n\t\t\t\tthis.listenTo( nfRadio.channel( 'field-' + fieldModel.get( 'id' ) ), 'keyup:field', this.maybeupdateFieldCompare );\r\n\t\t\t\t// Update our compare status.\r\n\t\t\t\tthis.updateFieldCompare( fieldModel );\r\n\r\n\t\t\t\t/*\r\n\t\t\t\t * TODO: This should be moved to the show_field/hide_field file because it is specific to showing and hiding.\r\n\t\t\t\t * Create a radio message here so that the specific JS file can hook into whenModel init.\r\n\t\t\t\t */\r\n\t\t\t\tfieldModel.on( 'change:visible', this.updateFieldCompare, this );\r\n\t\t\t}\r\n\t\t},\r\n\r\n\t\tupdateCalcCompare: function( calcModel ) {\r\n\t\t\tthis.updateCompare( calcModel.get( 'value' ) );\r\n\t\t},\r\n\r\n\t\tmaybeupdateFieldCompare: function( el, fieldModel, keyCode ) {\r\n\r\n\t\t\tif( 'checkbox' == fieldModel.get( 'type' ) ){\r\n\t\t\t\tvar fieldValue = ( 'checked' == jQuery( el ).attr( 'checked' ) ) ? 1 : 0;\r\n\t\t\t} else if( 'listcheckbox' == fieldModel.get( 'type' ) ) {\r\n\t\t\t\t// This field isn't a single element, so we need to reference the fieldModel, instead of the DOM.\r\n var fieldValue = fieldModel.get( 'value' ).join();\r\n } else {\r\n\t\t\t\tvar fieldValue = jQuery( el ).val();\r\n\t\t\t}\r\n\r\n\t\t\tthis.updateFieldCompare( fieldModel, null, fieldValue );\r\n\t\t},\r\n\r\n\t\tupdateCompare: function( value ) {\r\n\r\n\t\t\t// Check to see if the value of the field model value COMPARATOR the value of our when condition is true.\r\n\t\t\tvar status = this.compareValues[ this.get( 'comparator' ) ]( value, this.get( 'value' ) );\r\n\t\t\tthis.set( 'status', status );\r\n\t\t},\r\n\r\n\t\tupdateFieldCompare: function( fieldModel, val, fieldValue ) {\r\n\r\n\t\t\tif ( _.isEmpty( fieldValue ) ) {\r\n\t\t\t\tfieldValue = fieldModel.get( 'value' );\r\n\t\t\t}\r\n\r\n\t\t\tthis.updateCompare( fieldValue );\r\n\t\t\t\r\n\t\t\t/*\r\n\t\t\t * TODO: This should be moved to the show_field/hide_field file because it is specific to showing and hiding.\r\n\t\t\t */\r\n\t\t\tif ( ! fieldModel.get( 'visible' ) ) {\r\n\t\t\t\tthis.set( 'status', false );\r\n\t\t\t}\t\t\t\r\n\t\t},\r\n\r\n\t\tcompareValues: {\r\n\t\t\t'equal': function( a, b ) {\r\n\t\t\t\treturn a == b;\r\n\t\t\t},\r\n\t\t\t'notequal': function( a, b ) {\r\n\t\t\t\treturn a != b;\r\n\t\t\t},\r\n\t\t\t'contains': function( a, b ) {\r\n\t\t\t\tif ( jQuery.isArray( a ) ) {\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t * If a is an array, then we're searching for an index.\r\n\t\t\t\t\t */\r\n\t\t\t\t\treturn a.indexOf( b ) >= 0;\r\n\t\t\t\t} else {\r\n\t\t\t\t\t/*\r\n\t\t\t\t\t * If a is a string, then we're searching for a string position.\r\n\t\t\t\t\t *\r\n\t\t\t\t\t * If our b value has quotes in it, we want to find that exact word or phrase.\r\n\t\t\t\t\t */\r\n\t\t\t\t\tif ( b.indexOf( '\"' ) >= 0 ) {\r\n\t\t\t\t\t\tb = b.replace( /['\"]+/g, '' );\r\n\t\t\t\t\t\treturn new RegExp(\"\\\\b\" + b + \"\\\\b\").test( a );\r\n\t\t\t\t\t}\r\n\t\t\t\t\treturn a.toLowerCase().indexOf( b.toLowerCase() ) >= 0; \t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\t'notcontains': function( a, b ) {\r\n\t\t\t\treturn ! this.contains( a, b );\r\n\t\t\t},\r\n\t\t\t'greater': function( a, b ) {\r\n\t\t\t\t/*\r\n\t\t\t\t * In 2.9.x, you could use the greater and less like string count.\r\n\t\t\t\t * i.e. if textbox > (empty string) do something.\r\n\t\t\t\t * This recreates that ability.\r\n\t\t\t\t */\r\n\t\t\t\tif ( jQuery.isNumeric( b ) ) {\r\n\t\t\t\t\treturn parseFloat( a ) > parseFloat( b );\r\n\t\t\t\t} else if ( 'string' == typeof a ) {\r\n\t\t\t\t\treturn 0 < a.length;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t},\r\n\t\t\t'less': function( a, b ) {\r\n\t\t\t\t/*\r\n\t\t\t\t * In 2.9.x, you could use the greater and less like string count.\r\n\t\t\t\t * i.e. if textbox > (empty string) do something.\r\n\t\t\t\t * This recreates that ability.\r\n\t\t\t\t */\r\n\t\t\t\tif ( jQuery.isNumeric( b ) ) {\r\n\t\t\t\t\treturn parseFloat( a ) < parseFloat( b );\r\n\t\t\t\t} else if ( 'string' == typeof a ) {\r\n\t\t\t\t\treturn 0 >= a.length;\r\n\t\t\t\t}\r\n\t\t\r\n\t\t\t},\r\n\t\t\t'greaterequal': function( a, b ) {\r\n\t\t\t\treturn parseFloat( a ) > parseFloat( b ) || parseFloat( a ) == parseFloat( b );\r\n\t\t\t},\r\n\t\t\t'lessequal': function( a, b ) {\r\n\t\t\t\treturn parseFloat( a ) < parseFloat( b ) || parseFloat( a ) == parseFloat( b );\r\n\t\t\t}\r\n\t\t} \r\n\t} );\r\n\t\r\n\treturn model;\r\n} );\n","define( 'models/whenCollection',['models/whenModel'], function( WhenModel ) {\r\n\tvar collection = Backbone.Collection.extend( {\r\n\t\tmodel: WhenModel,\r\n\r\n\t\tinitialize: function( models, options ) {\r\n\t\t\tthis.options = options;\r\n\t\t}\r\n\t} );\r\n\treturn collection;\r\n} );\n","define( 'models/conditionModel',[ 'models/whenCollection' ], function( WhenCollection ) {\r\n\tvar model = Backbone.Model.extend( {\r\n\t\tinitialize: function( options ) {\r\n\t\t\t/*\r\n\t\t\t * Our \"when\" statement will be like:\r\n\t\t\t * When field1 == value\r\n\t\t\t * AND field2 == value\r\n\t\t\t *\r\n\t\t\t * We need to create a collection out of this when statement, with each row as a model.\r\n\t\t\t */\r\n\t\t\tthis.set( 'when', new WhenCollection( this.get( 'when' ), { condition: this } ) );\r\n\t\t\t/*\r\n\t\t\t * When we update any of our \"when\" models' status, check to see if we should send a message.\r\n\t\t\t */\r\n\t\t\tthis.get( 'when' ).on( 'change:status', this.checkWhen, this );\r\n\t\t\t/*\r\n\t\t\t * Check our initial status;\r\n\t\t\t */\r\n\t\t\tthis.checkWhen();\r\n\t\t},\r\n\r\n\t\tcheckWhen: function() {\r\n\t\t\t/*\r\n\t\t\t * If we have any OR connectors, then any status being true should trigger pass.\r\n\t\t\t * Otherwise, we need every status to be true.\r\n\t\t\t */\r\n\t\t\tvar statusResults = this.get( 'when' ).pluck( 'status' );\r\n\r\n\t\t\tvar connectors = this.get( 'when' ).pluck( 'connector' );\r\n\t\t\tvar allAND = _.every( _.values( connectors ), function( v ) { return v == 'AND' }, this );\r\n\t\t\tif ( allAND ) {\r\n\t\t\t\tvar status = _.every( _.values( statusResults ), function(v) { return v; }, this );\r\n\t\t\t} else {\r\n\t\t\t\tvar status = _.some( _.values( statusResults ), function(v) { return v; }, this );\r\n\t\t\t}\r\n\r\n\t\t\tif ( status ) {\r\n\t\t\t \t/*\r\n\t\t\t \t * Send out a request for each of our \"then\" statements.\r\n\t\t\t \t */\r\n\t\t\t\t_.each( this.get( 'then' ), function( then, index ) {\r\n\t\t\t\t\tnfRadio.channel( 'condition:trigger' ).request( then.trigger, this, then );\r\n\t\t\t\t}, this );\t\t\t \r\n\t\t\t} else {\r\n\t\t\t\t/*\r\n\t\t\t\t * Send out a request for each of our \"else\" statements.\r\n\t\t\t\t */\r\n\t\t\t\t_.each( this.get( 'else' ), function( elseData, index ) {\r\n\t\t\t\t\tnfRadio.channel( 'condition:trigger' ).request( elseData.trigger, this, elseData );\r\n\t\t\t\t}, this );\r\n\t\t\t}\r\n\t\t}\r\n\t} );\r\n\t\r\n\treturn model;\r\n} );\n","define( 'models/conditionCollection',['models/conditionModel'], function( ConditionModel ) {\r\n\tvar collection = Backbone.Collection.extend( {\r\n\t\tmodel: ConditionModel,\r\n\r\n\t\tinitialize: function( models, options ) {\r\n\t\t\tthis.formModel = options.formModel;\r\n\t\t}\r\n\t} );\r\n\treturn collection;\r\n} );\n","/**\r\n * Initialise condition collection\r\n * \r\n * @package Ninja Forms Conditional Logic\r\n * @copyright (c) 2016 WP Ninjas\r\n * @since 3.0\r\n */\r\ndefine( 'controllers/initCollection',[ 'models/conditionCollection' ], function( ConditionCollection ) {\r\n\tvar controller = Marionette.Object.extend( {\r\n\t\tinitialize: function( formModel ) {\r\n\t\t\tthis.collection = new ConditionCollection( formModel.get( 'conditions' ), { formModel: formModel } );\r\n this.listenTo(nfRadio.channel('fields'), 'reset:collection', this.resetCollection);\r\n\t\t},\r\n resetCollection: function( fieldsCollection ) {\r\n var formModel = fieldsCollection.options.formModel;\r\n this.collection = new ConditionCollection( formModel.get( 'conditions' ), { formModel: formModel } );\r\n }\r\n\t});\r\n\r\n\treturn controller;\r\n} );\n","/**\r\n * Handle showing/hiding fields\r\n * \r\n * @package Ninja Forms Conditional Logic\r\n * @copyright (c) 2016 WP Ninjas\r\n * @since 3.0\r\n */\r\ndefine( 'controllers/showHide',[], function() {\r\n\tvar controller = Marionette.Object.extend( {\r\n\t\tinitialize: function() {\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'hide_field', this.hideField, this );\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'show_field', this.showField, this );\r\n\t\t},\r\n\r\n\t\thideField: function( conditionModel, then ) {\r\n\t\t\tvar targetFieldModel = nfRadio.channel( 'form-' + conditionModel.collection.formModel.get( 'id' ) ).request( 'get:fieldByKey', then.key );\r\n\r\n\t\t\tif( 'undefined' == typeof targetFieldModel ) return;\r\n\r\n\t\t\ttargetFieldModel.set( 'visible', false );\r\n\t\t\tif ( ! targetFieldModel.get( 'clean' ) ) {\r\n\t\t\t\ttargetFieldModel.trigger( 'change:value', targetFieldModel );\r\n\t\t\t}\r\n\t\t\t\r\n\t\t\tnfRadio.channel( 'fields' ).request( 'remove:error', targetFieldModel.get( 'id' ), 'required-error' );\r\n\t\t},\r\n\r\n\t\tshowField: function( conditionModel, then ) {\r\n\t\t\tvar targetFieldModel = nfRadio.channel( 'form-' + conditionModel.collection.formModel.get( 'id' ) ).request( 'get:fieldByKey', then.key );\r\n\r\n\t\t\t//TODO: Add an error to let the user know the show/hide field is empty.\r\n\t\t\tif( 'undefined' == typeof targetFieldModel ) return;\r\n\t\t\ttargetFieldModel.set( 'visible', true );\r\n\t\t\tif ( ! targetFieldModel.get( 'clean' ) ) {\r\n\t\t\t\ttargetFieldModel.trigger( 'change:value', targetFieldModel );\r\n\t\t\t}\r\n\t\t\tvar viewEl = { el: nfRadio.channel( 'form-' + conditionModel.collection.formModel.get( 'id' ) ).request( 'get:el' ) };\r\n\t\t\tnfRadio.channel( 'form' ).request( 'init:help', viewEl );\r\n\t\t}\r\n\t});\r\n\r\n\treturn controller;\r\n} );\n","/**\r\n * Handle adding or removing an option from our list\r\n * \r\n * @package Ninja Forms Conditional Logic\r\n * @copyright (c) 2016 WP Ninjas\r\n * @since 3.0\r\n */\r\ndefine( 'controllers/showHideOption',[], function() {\r\n\tvar controller = Marionette.Object.extend( {\r\n\t\tinitialize: function() {\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'show_option', this.showOption, this );\r\n\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'hide_option', this.hideOption, this );\r\n\t\t},\r\n\r\n\t\tshowOption: function( conditionModel, then ) {\r\n\t\t\tvar option = this.getOption( conditionModel, then );\r\n\t\t\toption.visible = true;\r\n\t\t\tthis.updateFieldModel( conditionModel, then );\r\n\t\t},\r\n\r\n\t\thideOption: function( conditionModel, then ) {\r\n\t\t\tvar option = this.getOption( conditionModel, then );\r\n\t\t\toption.visible = false;\r\n\t\t\tthis.updateFieldModel( conditionModel, then );\r\n\t\t},\r\n\r\n\t\tgetFieldModel: function( conditionModel, then ) {\r\n\t\t\treturn nfRadio.channel( 'form-' + conditionModel.collection.formModel.get( 'id' ) ).request( 'get:fieldByKey', then.key );\r\n\t\t},\r\n\r\n\t\tgetOption: function( conditionModel, then ) {\r\n\t\t\tvar targetFieldModel = this.getFieldModel( conditionModel, then );\r\n\t\t\tvar options = targetFieldModel.get( 'options' );\r\n\t\t\treturn _.find( options, function( option ) { return option.value == then.value } );\r\n\t\t},\r\n\r\n\t\tupdateFieldModel: function( conditionModel, then ) {\r\n\t\t\tvar targetFieldModel = this.getFieldModel( conditionModel, then );\r\n\t\t\tvar options = targetFieldModel.get( 'options' );\r\n\t\t\ttargetFieldModel.set( 'options', options );\r\n\t\t\ttargetFieldModel.trigger( 'reRender' );\r\n\t\t}\r\n\t});\r\n\r\n\treturn controller;\r\n} );\n","/**\r\n * Handle changing a field's value\r\n * \r\n * @package Ninja Forms Conditional Logic\r\n * @copyright (c) 2016 WP Ninjas\r\n * @since 3.0\r\n */\r\ndefine( 'controllers/changeValue',[], function() {\r\n\tvar controller = Marionette.Object.extend( {\r\n\t\tinitialize: function() {\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'change_value', this.changeValue, this );\r\n\t\t},\r\n\r\n\t\tchangeValue: function( conditionModel, then ) {\r\n\t\t\tvar targetFieldModel = nfRadio.channel( 'form-' + conditionModel.collection.formModel.get( 'id' ) ).request( 'get:fieldByKey', then.key );\r\n\t\t\t/*\r\n\t\t\t * Change the value of our field model, and then trigger a re-render of its view.\r\n\t\t\t */\r\n\t\t\ttargetFieldModel.set( 'value', then.value );\r\n\t\t\ttargetFieldModel.trigger( 'reRender', targetFieldModel );\r\n\t\t},\r\n\r\n\t});\r\n\r\n\treturn controller;\r\n} );\n","/**\r\n * Handle selecting/deselecting list options\r\n * \r\n * @package Ninja Forms Conditional Logic\r\n * @copyright (c) 2016 WP Ninjas\r\n * @since 3.0\r\n */\r\ndefine( 'controllers/selectDeselect',[], function() {\r\n\tvar controller = Marionette.Object.extend( {\r\n\t\tinitialize: function() {\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'select_option', this.selectOption, this );\r\n\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'deselect_option', this.deselectOption, this );\r\n\t\t},\r\n\r\n\t\tselectOption: function( conditionModel, then ) {\r\n\t\t\t/*\r\n\t\t\t * Get our field model and set this option's \"selected\" property to 1\r\n\t\t\t */\r\n\t\t\tvar targetFieldModel = nfRadio.channel( 'form-' + conditionModel.collection.formModel.get( 'id' ) ).request( 'get:fieldByKey', then.key );\r\n\r\n\r\n\t\t\tif( _.contains( [ 'listselect', 'listcountry', 'liststate' ], targetFieldModel.get( 'type' ) ) ) { // TODO: Make this more dynamic.\r\n\t\t\t\ttargetFieldModel.set('clean', false); // Allows for changes to default values.\r\n\t\t\t}\r\n\r\n\t\t\tvar options = targetFieldModel.get( 'options' );\r\n\r\n\t\t\tvar option = _.find( options, { value: then.value } );\r\n\t\t\toption.selected = 1;\r\n\r\n\t\t\ttargetFieldModel.set( 'options', options );\r\n\r\n\t\t\tif( _.contains( [ 'listselect', 'listcountry', 'liststate' ], targetFieldModel.get( 'type' ) ) ) { // TODO: Make this more dynamic.\r\n\t\t\t\ttargetFieldModel.set( 'value', option.value ); // Propagate the selected option to the model's value.\r\n\t\t\t} else {\r\n\t\t\t\tvar value = targetFieldModel.get( 'value' );\r\n\t\t\t\tif ( _.isArray( value ) ) {\r\n if ( 0 > value.indexOf( option.value ) ) {\r\n value.push( option.value );\r\n // Set the value to nothing so it knows that something has changed.\r\n targetFieldModel.set( 'value', '' );\r\n }\r\n\t\t\t\t} else {\r\n\t\t\t\t\tvalue = option.value;\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\ttargetFieldModel.set( 'value', value ); // Propagate the selected option to the model's value.\r\n\t\t\t}\r\n\r\n\t\t\t/*\r\n\t\t\t * Re render our field\r\n\t\t\t */\r\n\t\t\ttargetFieldModel.trigger( 'reRender', targetFieldModel );\r\n\t\t},\r\n\r\n\t\tdeselectOption: function( conditionModel, then ) {\r\n\t\t\t/*\r\n\t\t\t * When we are trying to deselect our option, we need to change it's \"selected\" property to 0 AND change its value.\r\n\t\t\t */\r\n\t\t\tvar targetFieldModel = nfRadio.channel( 'form-' + conditionModel.collection.formModel.get( 'id' ) ).request( 'get:fieldByKey', then.key );\r\n\r\n\t\t\t/*\r\n\t\t\t * Set \"selected\" to 0.\r\n\t\t\t */\r\n\t\t\tvar options = targetFieldModel.get( 'options' );\r\n\t\t\tvar option = _.find( options, { value: then.value } );\r\n\t\t\toption.selected = 0;\r\n\t\t\ttargetFieldModel.set( 'options', options );\r\n\r\n\t\t\t/*\r\n\t\t\t * Update our value\r\n\t\t\t */\r\n\t\t\tvar currentValue = targetFieldModel.get( 'value' );\r\n\t\t\tif ( _.isArray( currentValue ) ) {\r\n\t\t\t\tcurrentValue = _.without( currentValue, then.value );\r\n\t\t\t} else {\r\n\t\t\t\tcurrentValue = '';\r\n\t\t\t}\r\n\t\t\ttargetFieldModel.set( 'value', currentValue );\r\n\r\n\t\t\t/*\r\n\t\t\t * Re render our field\r\n\t\t\t */\r\n\t\t\ttargetFieldModel.trigger( 'reRender', targetFieldModel );\r\n\t\t},\r\n\r\n\t});\r\n\r\n\treturn controller;\r\n} );\n","/**\r\n * Keep an internal record for which actions are active and deactive.\r\n * \r\n * @package Ninja Forms Conditional Logic\r\n * @copyright (c) 2016 WP Ninjas\r\n * @since 3.0\r\n */\r\ndefine( 'controllers/actions',[], function() {\r\n\tvar controller = Marionette.Object.extend( {\r\n\t\tactions: {},\r\n\t\t\r\n\t\tinitialize: function() {\r\n\t\t\t/*\r\n\t\t\t * Listen for activate/deactivate action messages.\r\n\t\t\t */\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'activate_action', this.activateAction, this );\r\n\t\t\tnfRadio.channel( 'condition:trigger' ).reply( 'deactivate_action', this.deactivateAction, this );\r\n\t\t\r\n\t\t\t/*\r\n\t\t\t * Reply to requests for action status.\r\n\t\t\t */\r\n\t\t\tnfRadio.channel( 'actions' ).reply( 'get:status', this.getStatus, this );\r\n\t\t},\r\n\r\n\t\tactivateAction: function( conditionModel, thenObject ) {\r\n\t\t\tthis.actions[ thenObject.key ] = true;\r\n\t\t\tconsole.log( 'activate action' );\r\n\t\t},\r\n\r\n\t\tdeactivateAction: function( conditionModel, thenObject ) {\r\n\t\t\tconsole.log( 'deactivate action' );\r\n\t\t\tthis.actions[ thenObject.key ] = false;\r\n\t\t},\r\n\r\n\t\tgetStatus: function( $id ) {\r\n\t\t\treturn this.actions[ $id ];\r\n\t\t}\r\n\t});\r\n\r\n\treturn controller;\r\n} );\n","var nfRadio = Backbone.Radio;\r\n\r\nrequire( [ 'controllers/initCollection', 'controllers/showHide', 'controllers/showHideOption', 'controllers/changeValue', 'controllers/selectDeselect', 'controllers/actions' ], function( InitCollection, ShowHide, ShowHideOption, ChangeValue, SelectDeselect, Actions ) {\r\n\r\n\tvar NFConditionalLogic = Marionette.Application.extend( {\r\n\r\n\t\tinitialize: function( options ) {\r\n\t\t\tthis.listenTo( nfRadio.channel( 'form' ), 'after:loaded', this.loadControllers );\r\n\t\t},\r\n\r\n\t\tloadControllers: function( formModel ) {\r\n\t\t\tnew ShowHide();\r\n\t\t\tnew ShowHideOption();\r\n\t\t\tnew ChangeValue();\r\n\t\t\tnew SelectDeselect();\r\n\t\t\tnew Actions();\r\n\t\t\tnew InitCollection( formModel );\r\n\t\t},\r\n\r\n\t\tonStart: function() {\r\n\t\t\t\r\n\t\t}\r\n\t} );\r\n\r\n\tvar nfConditionalLogic = new NFConditionalLogic();\r\n\tnfConditionalLogic.start();\r\n} );\ndefine(\"main\", function(){});\n\n"]}