UNPKG

flocking

Version:

Creative audio synthesis for the Web

780 lines 566 kB
/*! Flocking 3.0.1, Copyright 2022 Colin Clark | flockingjs.org */ !function(n, r) { "object" == typeof exports ? (n.flock = exports, r(0, require("jquery"))) : "function" == typeof define && define.amd ? define([ "exports", "jquery" ], function(e, t) { return n.flock = e, n.flock, r(0, t); }) : (n.flock = {}, r(n.flock, jQuery)); }(this, function(e, t) { window.jQuery = t; { function n(e) { if ("number" != typeof (e = void 0 === e ? new Date().getTime() : e) || Math.ceil(e) != Math.floor(e)) throw new TypeError("seed value must be an integer"); this.N = 624, this.M = 397, this.MATRIX_A = 2567483615, this.UPPER_MASK = 2147483648, this.LOWER_MASK = 2147483647, this.mt = new Array(this.N), this.mti = this.N + 1, this.init_by_array([ e ], 1); } { var Ht, r, a = {}, p = p || a, p = (!function(h, v) { "use strict"; v.version = "Infusion 3.0.0", v.Error = Error, v.environment = { fluid: v }, v.global = v.global || "undefined" != typeof window ? window : "undefined" != typeof self ? self : {}, v.invokeLater = function(e) { return setTimeout(e, 1); }, v.defeatLogging = !0, v.activityTracing = !1, v.activityTrace = []; var u = /(%\w+)/g; function o(e, t, n, r) { for (var a = e[n], o = 0; o < r.length; ++o) a = r[o](a, n); t[n] = a; } v.renderOneActivity = function(e, t) { for (var n = !0 === t ? [] : [ " while " ], r = e.message, a = u.lastIndex = 0; ;) { var o = u.exec(r); if (!o) break; var i = o[1].substring(1); n.push(r.substring(a, o.index)), n.push(e.args[i]), a = u.lastIndex; } return a < r.length && n.push(r.substring(a)), n; }, v.renderActivity = function(e, t) { return t = t || v.renderOneActivity, v.transform(e, t); }, v.singleThreadLocal = function(e) { var t = e(); return function(e) { return void 0 === e ? t : t = e; }; }, v.threadLocal = v.singleThreadLocal, v.globalThreadLocal = v.threadLocal(function() { return {}; }), v.getActivityStack = function() { var e = v.globalThreadLocal(); return e.activityStack || (e.activityStack = []), e.activityStack; }, v.describeActivity = v.getActivityStack, v.logActivity = function(e) { e = e || v.describeActivity(); e = v.renderActivity(e).reverse(); 0 < e.length && (v.log("Current activity: "), v.each(e, function(e) { v.log.apply(null, e); })); }, v.pushActivity = function(e, t, n) { e = { type: e, message: t, args: n, time: new Date().getTime() }; v.activityTracing && v.activityTrace.push(e), v.passLogLevel(v.logLevel.TRACE) && v.log.apply(null, v.renderOneActivity(e, !0)), v.getActivityStack().push(e); }, v.popActivity = function(e) { e = e || 1, v.activityTracing && v.activityTrace.push({ pop: e }); var t = v.getActivityStack(), e = t.length - e; t.length = e < 0 ? 0 : e; }, v.FluidError = function() { var e = Error.apply(this, arguments); this.message = e.message; try { throw e; } catch (e) { this.stack = e.stack; } return this; }, v.FluidError.prototype = Object.create(Error.prototype), v.logFailure = function(e, t) { v.log.apply(null, [ v.logLevel.FAIL, "ASSERTION FAILED: " ].concat(e)), v.logActivity(t); }, v.renderLoggingArg = function(e) { return void 0 === e ? "undefined" : v.isPrimitive(e) || !v.isPlainObject(e) ? e : JSON.stringify(e); }, v.builtinFail = function(e) { e = v.transform(e, v.renderLoggingArg).join(""); throw new v.FluidError("Assertion failure - check console for more details: " + e); }, v.fail = function(...e) { var t = v.makeArray(v.describeActivity()); v.popActivity(t.length), v.failureEvent ? v.failureEvent.fire(e, t) : (v.logFailure(e, t), v.builtinFail(e, t)); }, v.expect = function(t, n, e) { v.transform(v.makeArray(e), function(e) { void 0 === n[e] && v.fail(t + " missing required parameter " + e); }); }, v.isLogging = function() { return n[0].priority > v.logLevel.IMPORTANT.priority; }, v.isLogLevel = function(e) { return v.isMarker(e) && void 0 !== e.priority; }, v.passLogLevel = function(e) { return e.priority <= n[0].priority; }, v.setLogging = function(e) { var t; "boolean" == typeof e ? t = v.logLevel[e ? "INFO" : "IMPORTANT"] : v.isLogLevel(e) ? t = e : v.fail("Unrecognised fluid logging level ", e), n.unshift(t), v.defeatLogging = !v.isLogging(); }, v.setLogLevel = v.setLogging, v.popLogging = function() { var e = 1 === n.length ? n[0] : n.shift(); return v.defeatLogging = !v.isLogging(), e; }, v.doBrowserLog = function(e) { "undefined" != typeof console && (console.debug ? console.debug.apply(console, e) : "function" == typeof console.log && console.log.apply(console, e)); }, v.log = function() { var e = v.makeArray(arguments), t = v.logLevel.INFO; v.isLogLevel(e[0]) && (t = e.shift()), v.passLogLevel(t) && v.loggingEvent.fire(e); }, v.isValue = function(e) { return null != e; }, v.isPrimitive = function(e) { var t = typeof e; return !e || "string" == t || "boolean" == t || "number" == t || "function" == t; }, v.isJQuery = function(e) { return Boolean(e && e.jquery && e.constructor && e.constructor.prototype && e.constructor.prototype.jquery); }, v.isArrayable = function(e) { return Boolean(e) && ("[object Array]" === Object.prototype.toString.call(e) || v.isJQuery(e)); }, v.isPlainObject = function(e, t) { var n = Object.prototype.toString.call(e); return "[object Array]" === n ? !t : "[object Object]" === n && (!e.constructor || !e.constructor.prototype || Object.prototype.hasOwnProperty.call(e.constructor.prototype, "isPrototypeOf")); }, v.typeCode = function(e) { return v.isPrimitive(e) || !v.isPlainObject(e) ? "primitive" : v.isArrayable(e) ? "array" : "object"; }, v.isIoCReference = function(e) { return "string" == typeof e && "{" === e.charAt(0); }, v.isReferenceOrExpander = function(e) { return e && (v.isIoCReference(e) || e.expander); }, v.isDOMNode = function(e) { return e && "number" == typeof e.nodeType; }, v.isComponent = function(e) { return e && e.constructor === v.componentConstructor; }, v.isUncopyable = function(e) { return v.isPrimitive(e) || !v.isPlainObject(e); }, v.isApplicable = function(e) { return e.apply && "function" == typeof e.apply; }, v.identity = function(e) { return e; }, v.notImplemented = function() { v.fail("This operation is not implemented"); }, v.firstDefined = function(e, t) { return void 0 === e ? t : e; }, v.freshContainer = function(e) { return v.isArrayable(e) ? [] : {}; }, v.testStrategyRecursion = function(e, t) { t.length > v.strategyRecursionBailout && v.fail("Runaway recursion encountered in " + e + " - reached path depth of " + v.strategyRecursionBailout + " via path of " + t.join(".") + "this object is probably circularly connected. Either adjust your object structure to remove the circularity or increase fluid.strategyRecursionBailout"); }, v.copyRecurse = function(e, n) { return v.testStrategyRecursion("fluid.copy", n), v.isUncopyable(e) ? e : v.transform(e, function(e, t) { n.push(t); t = v.copyRecurse(e, n); return n.pop(), t; }); }, v.copy = function(e) { return v.copyRecurse(e, []); }, v.extend = h.extend, v.makeArray = function(e) { var t = []; if (null != e) if (v.isPrimitive(e) || v.isPlainObject(e, !0) || "number" != typeof e.length) t.push(e); else for (var n = 0; n < e.length; ++n) t[n] = e[n]; return t; }, v.pushArray = function(e, t, n) { e = e[t] || (e[t] = []); v.isArrayable(n) ? e.push.apply(e, n) : e.push(n); }, v.transform = function(e, ...t) { if (v.isPrimitive(e)) return e; var n = v.freshContainer(e); if (v.isArrayable(e)) for (var r = 0; r < e.length; ++r) o(e, n, r, t); else for (var a in e) o(e, n, a, t); return n; }, v.each = function(e, t) { if (v.isArrayable(e)) for (var n = 0; n < e.length; ++n) t(e[n], n); else for (var r in e) t(e[r], r); }, v.make_find = function(i) { var u = !i && void 0; return function(e, t, n) { var r; if (v.isArrayable(e)) { for (var a = 0; a < e.length; ++a) if ((r = t(e[a], a)) !== u) return i ? e[a] : r; } else for (var o in e) if ((r = t(e[o], o)) !== u) return i ? e[o] : r; return n; }; }, v.find = v.make_find(!1), v.find_if = v.make_find(!0), v.accumulate = function(e, t, n) { for (var r = 0; r < e.length; ++r) n = t(e[r], n, r); return n; }, v.add = function(e, t) { return e + t; }, v.remove_if = function(e, t, n) { if (v.isArrayable(e)) for (var r = e.length - 1; 0 <= r; --r) t(e[r], r) && (n && n.unshift(e[r]), e.splice(r, 1)); else for (var a in e) t(e[a], a) && (n && (n[a] = e[a]), delete e[a]); return n || e; }, v.generate = function(e, t, n) { for (var r = [], a = 0; a < e; ++a) r[a] = n ? t(a) : t; return r; }, v.iota = function(e, t) { t = t || 0; for (var n = [], r = 0; r < e; ++r) n[n.length] = t++; return n; }, v.getMembers = function(e, t) { return v.transform(e, function(e) { return v.get(e, t); }); }, v.filterKeys = function(e, n, r) { return v.remove_if(h.extend({}, e), function(e, t) { return r ^ -1 === n.indexOf(t); }); }, v.censorKeys = function(e, t) { return v.filterKeys(e, t, !0); }, v.keys = function(e) { var t, n = []; for (t in e) n.push(t); return n; }, v.values = function(e) { var t, n = []; for (t in e) n.push(e[t]); return n; }, v.contains = function(e, t) { return e ? v.isArrayable(e) ? -1 !== e.indexOf(t) : v.find(e, function(e) { if (t === e) return !0; }) : void 0; }, v.keyForValue = function(e, n) { return v.find(e, function(e, t) { if (n === e) return t; }); }, v.arrayToHash = function(e) { var t = {}; return v.each(e, function(e) { t[e] = !0; }), t; }, v.stableSort = function(e, t) { for (var n = 0; n < e.length; n++) { for (var r = e[n], a = n; 0 < a && t(r, e[a - 1]) < 0; a--) e[a] = e[a - 1]; e[a] = r; } }, v.hashToArray = function(e, r, a) { var o = []; return v.each(e, function(e, t) { var n = {}; n[r] = t, a ? n = a(n, e, t) || n : h.extend(!0, n, e), o.push(n); }), o; }, v.flatten = function(e) { var t = []; return v.each(e, function(e) { v.isArrayable(e) ? t = t.concat(e) : t.push(e); }), t; }, v.clear = function(e) { if (v.isArrayable(e)) e.length = 0; else for (var t in e) delete e[t]; }, v.compareStringLength = function(e) { return e ? function(e, t) { return e.length - t.length; } : function(e, t) { return t.length - e.length; }; }, v.parseInteger = function(e) { return isFinite(e) && e % 1 == 0 ? Number(e) : NaN; }, v.roundToDecimal = function(e, t, n) { return t = t && 0 <= t ? Math.round(t) : 0, "ceil" === n || "floor" === n ? Number(Math[n](e + "e" + t) + "e-" + t) : Number((0 <= e ? 1 : -1) * (Math.round(Math.abs(e) + "e" + t) + "e-" + t)); }, v.debounce = function(r, a, o) { var i, u; return function() { var e = this, t = arguments, n = o && !i; return clearTimeout(i), i = setTimeout(function() { i = null, o || (u = r.apply(e, t)); }, a), u = n ? r.apply(e, t) : u; }; }, v.freezeRecursive = function(e, n) { return n = n || [], v.testStrategyRecursion("fluid.freezeRecursive", n), v.isPlainObject(e) ? (v.each(e, function(e, t) { n.push(t), v.freezeRecursive(e, n), n.pop(); }), Object.freeze(e)) : e; }, v.marker = function() {}, v.makeMarker = function(e, t) { var n = Object.create(v.marker.prototype); return n.value = e, h.extend(n, t), Object.freeze(n); }, v.VALUE = v.makeMarker("VALUE"), v.NO_VALUE = v.makeMarker("NO_VALUE"), v.EXPAND = v.makeMarker("EXPAND"), v.isMarker = function(e, t) { return e instanceof v.marker && (!t || e.value === t.value); }, v.logLevelsSpec = { FATAL: 0, FAIL: 5, WARN: 10, IMPORTANT: 12, INFO: 15, TRACE: 20 }, v.logLevel = v.transform(v.logLevelsSpec, function(e, t) { return v.makeMarker(t, { priority: e }); }); var n = [ v.logLevel.IMPORTANT ], e = (v.model = {}, v.model.copyModel = function(e, t) { v.clear(e), h.extend(!0, e, t); }, v.model.parseEL = function(e) { return "" === e ? [] : String(e).split("."); }, v.model.composePath = function(e, t) { return "" === e ? t : "" === t ? e : e + "." + t; }, v.model.composeSegments = function() { return v.makeArray(arguments).join("."); }, v.lastDotIndex = function(e) { return e.lastIndexOf("."); }, v.model.getToTailPath = function(e) { var t = v.lastDotIndex(e); return -1 === t ? "" : e.substring(0, t); }, v.model.getTailPath = function(e) { var t = v.lastDotIndex(e); return e.substring(t + 1); }, v.path = v.model.composeSegments, v.composePath = v.model.composePath, v.requireDataBinding = function() { v.fail("Please include DataBinding.js in order to operate complex model accessor configuration"); }, v.model.setWithStrategy = v.model.getWithStrategy = v.requireDataBinding, v.model.resolvePathSegment = function(e, t, n, r) { if (!r && e.resolvePathSegment) { r = e.resolvePathSegment(t); if (void 0 !== r) return r; } return n && void 0 === e[t] ? e[t] = {} : e[t]; }, v.model.parseToSegments = function(e, t, n) { return "number" == typeof e || "string" == typeof e ? t(e) : n ? v.makeArray(e) : e; }, v.model.pathToSegments = function(e, t) { t = t && t.parser ? t.parser.parse : v.model.parseEL; return v.model.parseToSegments(e, t); }, v.model.accessImpl = function(e, t, n, r, a, o, i) { var t = v.model.pathToSegments(t, r), u = 0, a = (a && (u = a.length, t = a.concat(t)), n === v.NO_VALUE ? 0 : 1); if (e = i(e, t, u, r, a), n === v.NO_VALUE || n === v.VALUE) return o ? { root: e, segs: t } : e; e[t[t.length - 1]] = n; }, v.model.accessSimple = function(e, t, n, r, a, o) { return v.model.accessImpl(e, t, n, r, a, o, v.model.traverseSimple); }, v.model.traverseSimple = function(e, t, n, r, a) { for (var o = r, i = t.length - a, u = 0; u < i; ++u) { if (!e) return; var s = t[u]; e = r && r[s] ? r[s] : v.model.resolvePathSegment(e, s, 1 === a, o), r = null; } return e; }, v.model.setSimple = function(e, t, n, r, a) { v.model.accessSimple(e, t, n, r, a, !1); }, v.model.getSimple = function(e, t, n, r) { return null == t || 0 === t.length ? e : v.model.accessSimple(e, t, v.NO_VALUE, n, r, !1); }, v.getImmediate = function(e, t, n) { for (var r = void 0 === n ? t.length : n + 1, a = 0; a < r; ++a) e = e ? e[t[a]] : void 0; return e; }, v.decodeAccessorArg = function(e) { return e && e !== v.model.defaultGetConfig && e !== v.model.defaultSetConfig ? "environment" === e.type ? e.value : void 0 : null; }, v.set = function(e, t, n, r, a) { var o = v.decodeAccessorArg(r); void 0 === o ? v.model.setWithStrategy(e, t, n, r, a) : v.model.setSimple(e, t, n, o, a); }, v.get = function(e, t, n, r) { var a = v.decodeAccessorArg(n); return void 0 === a ? v.model.getWithStrategy(e, t, n, r) : v.model.accessImpl(e, t, v.NO_VALUE, a, null, !1, v.model.traverseSimple); }, v.getGlobalValue = function(e, t) { if (e) return t = t || v.environment, v.get(v.global, e, { type: "environment", value: t }); }, v.bind = function(e, t, n) { return e[t].apply(e, v.makeArray(n)); }, v.invokeGlobalFunction = function(e, t, n) { n = v.getGlobalValue(e, n); if (n) return n.apply(null, v.isArrayable(t) ? t : v.makeArray(t)); v.fail("Error invoking global function: " + e + " could not be located"); }, v.registerGlobalFunction = function(e, t, n) { n = n || v.environment, v.set(v.global, e, t, { type: "environment", value: n }); }, v.setGlobalValue = v.registerGlobalFunction, v.registerNamespace = function(e, t) { t = t || v.environment; var n = v.getGlobalValue(e, t); return n || v.setGlobalValue(e, n = {}, t), n; }, v.dumpEl = v.identity, v.renderTimestamp = v.identity, v.generateUniquePrefix = function() { return Math.floor(1e12 * Math.random()).toString(36) + "-"; }, v.generateUniquePrefix()), t = (v.fluidInstance = e, 1), l = (v.allocateGuid = function() { return e + t++; }, v.registerNamespace("fluid.event"), v.extremePriority = 4e9, v.priorityTypes = { first: -1, last: 1, before: 0, after: 0 }, v.extremalPriorities = { none: 0, testing: 10, authoring: 20 }, v.parsePriorityConstraint = function(e, t, n) { var r = e.split(":"), a = r[0], a = v.priorityTypes[a]; return void 0 === a && v.fail("Invalid constraint type in priority field " + e + ": the only supported values are " + v.keys(v.priorityTypes).join(", ") + " or numeric"), t && 0 === a && v.fail("Constraint type in priority field " + e + " is not supported in a " + n + " record - you must use either a numeric value or first, last"), { type: r[0], target: r[1] }; }, v.parsePriority = function(e, t, n, r) { t = { count: t || 0, fixed: null, constraint: null, site: r }, "number" == typeof (e = e || 0) ? t.fixed = -e : t.constraint = v.parsePriorityConstraint(e, n, r), e = t.constraint ? v.priorityTypes[t.constraint.type] : 0; return 0 !== e && (n = t.constraint.target || "none", void 0 === (r = v.extremalPriorities[n]) && v.fail("Unrecognised extremal priority target " + n + ": the currently supported values are " + v.keys(v.extremalPriorities).join(", ") + ": register your value in fluid.extremalPriorities"), t.fixed = e * (v.extremePriority + r)), null !== t.fixed && (t.fixed += t.count / 1024), t; }, v.renderPriority = function(e) { return e.constraint ? e.constraint.target ? e.constraint.type + ":" + e.constraint.target : e.constraint.type : Math.floor(e.fixed); }, v.compareByPriority = function(e, t) { return null !== e.priority.fixed && null !== t.priority.fixed ? e.priority.fixed - t.priority.fixed : (null === e.priority.fixed) - (null === t.priority.fixed); }, v.honourConstraint = function(e, t, n) { var r = e[n].priority.constraint, a = v.find(e, function(e, t) { return e.namespace === r.target ? t : void 0; }, -1); if (-1 === a) return !0; if (t <= a) return !1; for (var o = a + ("after" === r.type ? 1 : 0), t = e[n], i = n; o <= i; --i) e[i] = e[i - 1]; return e[o] = t, !0; }, v.sortByPriority = function(e) { v.stableSort(e, v.compareByPriority); for (var t = v.find(e, function(e, t) { return e.priority.constraint && 0 === v.priorityTypes[e.priority.constraint.type] ? t : void 0; }, e.length); ;) { if (t === e.length) return e; for (var n = t, r = t; r < e.length; ++r) v.honourConstraint(e, t, r) && ++t; t === n && (n = e.slice(t), v.fail("Could not find targets for any constraints in " + n[0].priority.site + " ", n, ": none of the targets (" + v.getMembers(n, "priority.constraint.target").join(", ") + ") matched any namespaces of the elements in (", e.slice(0, t), ") - this is caused by either an invalid or circular reference")); } }, v.parsePriorityRecords = function(e, n) { e = v.hashToArray(e, "namespace", function(e, t) { h.extend(e, t), e.priority = v.parsePriority(t.priority, 0, !1, n); }); return v.sortByPriority(e), e; }, v.event.identifyListener = function(e, t) { return "string" == typeof e || e.$$fluid_guid || t || (e.$$fluid_guid = v.allocateGuid()), e.$$fluid_guid; }, v.event.impersonateListener = function(e, t) { v.event.identifyListener(e), t.$$fluid_guid = e.$$fluid_guid; }, v.event.sortListeners = function(e) { var a = []; return v.each(e, function(e) { for (var t, n = 0; n < e.length; ++n) { var r = e[n]; r.softNamespace || t || (t = r); } t ? a.push(t) : a = a.concat(e); }), v.sortByPriority(a); }, v.event.resolveListener = function(e) { var t, n = e.globalName || ("string" == typeof e ? e : null); return n && ((t = v.getGlobalValue(n)) ? e = t : v.fail("Unable to look up name " + n + " as a global function")), e; }, v.nameComponent = function(e) { return e ? "component with typename " + e.typeName + " and id " + e.id : "[unknown component]"; }, v.event.nameEvent = function(e, t) { return t + " of " + v.nameComponent(e); }, v.makeEventFirer = function(a) { var e = (a = a || {}).name || "<anonymous>", u = { eventId: v.allocateGuid(), name: e, ownerId: a.ownerId, typeName: "fluid.event.firer", destroy: function() { u.destroyed = !0; }, addListener: function() { !function() { u.listeners = {}, u.byId = {}, u.sortedListeners = [], u.addListener = function(e, t, n, r, a) { var o, i; u.destroyed && v.fail("Cannot add listener to destroyed event firer " + u.name), e && (v.isPlainObject(e, !0) && !v.isApplicable(e) && (e = (i = e).listener, t = i.namespace, n = i.priority, r = i.softNamespace, a = i.listenerId), "string" == typeof e && (e = { globalName: e }), o = a || v.event.identifyListener(e), i = h.extend(i || {}, { namespace: t = t || o, listener: e, softNamespace: r, listenerId: a, priority: v.parsePriority(n, u.sortedListeners.length, !1, "listeners") }), u.byId[o] = i, (u.listeners[t] = v.makeArray(u.listeners[t]))[r ? "push" : "unshift"](i), u.sortedListeners = v.event.sortListeners(u.listeners)); }, u.addListener.apply(null, arguments); }.apply(null, arguments); }, removeListener: function(e) { var t, n, r, a; u.listeners && ("string" == typeof e ? (n = u.listeners[a = e]) || (t = a, a = null) : "function" != typeof e || (t = v.event.identifyListener(e, !0)) || v.fail("Cannot remove unregistered listener function ", e, " from event " + u.name), r = (e = u.byId[t]) && e.softNamespace, a = a || e && e.namespace || t, delete u.byId[t], (n = u.listeners[a]) && (r ? v.remove_if(n, function(e) { return e.listener.$$fluid_guid === t || e.listenerId === t; }) : n.shift(), 0 === n.length && delete u.listeners[a]), u.sortedListeners = v.event.sortListeners(u.listeners)); }, fire: function() { var e = u.sortedListeners; if (e && !u.destroyed) for (var t = 0; t < e.length; ++t) { var n = e[t]; "function" != typeof n.listener && (n.listener = v.event.resolveListener(n.listener)); var r, n = n.listener.apply(null, arguments); if (void 0 !== (r = a.preventable && !1 === n || u.destroyed ? !1 : r)) return r; } } }; return u; }, v.fireEvent = function(e, t, n) { e = e.events[t]; e && e.fire.apply(null, v.makeArray(n)); }, v.event.addListenerToFirer = function(e, t, n, r) { if (r = r || v.identity, v.isArrayable(t)) for (var a = 0; a < t.length; ++a) v.event.addListenerToFirer(e, t[a], n, r); else "function" == typeof t || "string" == typeof t ? r(e).addListener(t, n) : t && "object" == typeof t && r(e).addListener(t.listener, n || t.namespace, t.priority, t.softNamespace, t.listenerId); }, v.event.resolveListenerRecord = function(e) { return { records: e }; }, v.expandImmediate = function(e) { v.fail("fluid.expandImmediate could not be loaded - please include FluidIoC.js in order to operate IoC-driven event with descriptor " + e); }, v.mergeListeners = function(o, i, e) { v.each(e, function(e, t) { v.isIoCReference(t) ? (n = v.expandImmediate(t, o)) || v.fail("Error in listener record: key " + t + ' could not be looked up to an event firer - did you miss out "events." when referring to an event firer?') : (-1 !== (a = t.indexOf(".")) && (r = t.substring(a + 1), t = t.substring(0, a)), i[t] || v.fail("Listener registered for event " + t + " which is not defined for this component"), n = i[t]); var n, r, a = v.event.resolveListenerRecord(e, o, t, r, !0); v.event.addListenerToFirer(n, a.records, r, a.adderWrapper); }); }, v.eventFromRecord = function(e, t, n) { var r; return e && ("string" != typeof e || v.isIoCReference(e)) ? v.event.resolveEvent ? r = v.event.resolveEvent(n, t, e) : v.fail("fluid.event.resolveEvent could not be loaded - please include FluidIoC.js in order to operate IoC-driven event with descriptor ", e) : r = v.makeEventFirer({ name: v.event.nameEvent(n, t), preventable: "preventable" === e, ownerId: n.id }), r; }, v.instantiateFirers = function(n, e) { v.each(e.events, function(e, t) { n.events[t] = v.eventFromRecord(e, t, n); }); }, v.mergeListenerPolicy = function(e, t, n) { return "string" != typeof n && v.fail("Error in listeners declaration - the keys in this structure must resolve to event names - got " + n + " from ", t), !v.isIoCReference(n) && -1 !== n.indexOf(".") ? t || e : v.arrayConcatPolicy(e, t); }, v.makeMergeListenersPolicy = function(r, t) { return function(n, e) { return n = n || {}, t && (v.isArrayable(e) || "string" == typeof e.target) ? n[""] = r(n[""], e, "") : v.each(e, function(e, t) { n[t] = r(n[t], e, t); }), n; }; }, v.validateListenersImplemented = function(n) { var r = []; return v.each(n.events, function(e, t) { v.each(e.sortedListeners, function(e) { e.listener !== v.notImplemented && "fluid.notImplemented" !== e.listener.globalName || r.push({ name: t, namespace: e.namespace, componentSource: v.model.getSimple(n.options.listeners, [ t + "." + e.namespace, 0, "componentSource" ]) }); }); }), r; }, v.unique = function(n) { return v.remove_if(n, function(e, t) { return !e || 0 < t && e === n[t - 1]; }); }, v.arrayConcatPolicy = function(e, t) { return v.makeArray(e).concat(v.makeArray(t)); }, v.loggingEvent = v.makeEventFirer({ name: "logging event" }), v.addTimestampArg = function(e) { var t = v.renderTimestamp(new Date()) + ": "; e.unshift(t); }, v.loggingEvent.addListener(v.doBrowserLog, "log"), v.loggingEvent.addListener(v.identity, "filterArgs", "before:log"), v.loggingEvent.addListener(v.addTimestampArg, "addTimestampArg", "after:filterArgs"), v.failureEvent = v.makeEventFirer({ name: "failure event" }), v.failureEvent.addListener(v.builtinFail, "fail"), v.failureEvent.addListener(v.logFailure, "log", "before:fail"), v.pushSoftFailure = function(e) { "function" == typeof e ? v.failureEvent.addListener(e, "fail") : -1 === e ? v.failureEvent.removeListener("fail") : "boolean" == typeof e && v.fail("pushSoftFailure with boolean value is no longer supported"); }, v.componentConstructor = function() {}, Object.defineProperty(v.componentConstructor, "name", { value: "fluid.componentConstructor" }), v.typeTag = function(e) { var t = Object.create(v.componentConstructor.prototype); return t.typeName = e, t.id = v.allocateGuid(), t; }, 1), c = {}; function y(e, t, n, r) { for (var a = 0; a < n; ++a) e = r(e, t[a], a, v.makeArray(t)); return e; } v.defaultsStore = {}, v.flattenGradeName = function(e) { return "string" == typeof e ? e : JSON.stringify(e); }, v.resolveGradesImpl = function(e, t) { for (var n = (t = v.makeArray(t)).length - 1; 0 <= n; --n) { var r = t[n], a = v.flattenGradeName(r); if (r && !e.gradeHash[a]) for (var o = (v.isReferenceOrExpander(r) ? null : v.rawDefaults(r)) || {}, i = c[r] || l - 1, u = (e.lastTick = Math.max(e.lastTick, i), e.gradeHash[a] = !0, e.gradeChain.push(r), v.makeArray(o.gradeNames)), s = u.length - 1; 0 <= s; --s) v.resolveGradesImpl(e, u[s]); } return e; }, v.resolveGradeStructure = function(e, t) { var n = { lastTick: 0, gradeChain: [], gradeHash: {} }; return v.resolveGradesImpl(n, [ e ].concat(v.makeArray(t))), n.gradeChain.reverse(), n; }, v.hasGrade = function(e, t) { return !(!e || !e.gradeNames) && v.contains(e.gradeNames, t); }, v.resolveGrade = function(e, t, n) { for (var t = v.resolveGradeStructure(t, n), r = v.transform(t.gradeChain, v.rawDefaults, v.copy), a = (v.remove_if(r, function(e) { return !e; }), {}), o = 0; o < r.length; ++o) r[o] && r[o].mergePolicy && (a = h.extend(!0, a, r[o].mergePolicy)); r = [ a, {} ].concat(r), n = v.merge.apply(null, r); return n.gradeNames = t.gradeChain, v.freezeRecursive(n), { defaults: n, lastTick: t.lastTick }; }, v.mergedDefaultsCache = {}, v.gradeNamesToKey = function(e, t) { return e + "|" + t.join("|"); }, v.getMergedDefaults = function(e, t) { t = v.makeArray(t); var n = v.gradeNamesToKey(e, t), r = v.mergedDefaultsCache[n]; if (r) { for (var a = 0, o = r.defaults.gradeNames || [], i = 0; i < o.length; ++i) a = Math.max(a, c[o[i]] || 0); a > r.lastTick && (v.passLogLevel(v.logLevel.TRACE) && v.log(v.logLevel.TRACE, "Clearing cache for component " + e + " with gradeNames ", o), r = null); } if (!r) { var u = v.rawDefaults(e); if (!u) return u; r = v.mergedDefaultsCache[n] = v.resolveGrade(u, e, t); } return r.defaults; }, v.upgradePrimitiveFunc = function(e, t) { var n; return e && v.isPrimitive(e) ? ((n = {})[t || ("string" == typeof e && "{" !== e.charAt(0) ? "funcName" : "func")] = e, n.args = v.NO_VALUE, n) : e; }, v.annotateListeners = function(t, e) { e.listeners = v.transform(e.listeners, function(e) { e = v.makeArray(e); return v.transform(e, function(e) { return (e = v.upgradePrimitiveFunc(e, "listener")).componentSource = t, e; }); }), e.invokers = v.transform(e.invokers, function(e) { return (e = v.upgradePrimitiveFunc(e)) && (e.componentSource = t), e; }); }, v.rawDefaults = function(e) { e = v.defaultsStore[e]; return e && e.options; }, v.registerRawDefaults = function(e, t) { v.pushActivity("registerRawDefaults", "registering defaults for grade %componentName with options %options", { componentName: e, options: t }); var t = v.expandCompact ? v.expandCompact(t) : v.copy(t), n = (v.annotateListeners(e, t), v.getCallerInfo && v.getCallerInfo(6)); v.defaultsStore[e] = { options: t, callerInfo: n }, c[e] = l++, v.popActivity(); }, v.doIndexDefaults = function(e, t, n, r) { for (var a = v.makeArray(r.gradeNames), o = 0; o < a.length; ++o) if (!v.hasGrade(t, a[o])) return; for (var i = ("function" == typeof r.indexFunc ? r.indexFunc : v.getGlobalValue(r.indexFunc))(t) || [], u = 0; u < i.length; ++u) v.pushArray(n, i[u], e); }, v.indexDefaults = function(e, t) { var n, r = {}; for (n in v.defaultsStore) { var a = v.getMergedDefaults(n); v.doIndexDefaults(n, a, r, t); } return r; }, v.defaults = function(e, t) { if (void 0 === t) return v.getMergedDefaults(e); t && t.options && v.fail("Probable error in options structure for " + e + ' with option named "options" - perhaps you meant to write these options at top level in fluid.defaults? - ', t), v.registerRawDefaults(e, t); t = v.getMergedDefaults(e); v.hasGrade(t, "fluid.function") || v.makeComponentCreator(e); }, v.makeComponentCreator = function(a) { function e() { var e = v.getMergedDefaults(a); if (e.gradeNames && 0 !== e.gradeNames.length) { if (e.initFunction) return v.initComponent(a, arguments); for (var t = [], n = 0; n < e.gradeNames.length; ++n) { var r = e.gradeNames[n]; v.rawDefaults(r) || t.push(r); } 0 === t.length ? v.fail("Cannot make component creator for type " + a + " which does not have an initFunction defined") : v.fail("The grade hierarchy of component with type " + a + " is incomplete - it inherits from the following grade(s): " + t.join(", ") + " for which the grade definitions are corrupt or missing. Please check the files which might include these grades and ensure they are readable and have been loaded by this instance of Infusion"); } else v.fail("Cannot make component creator for type " + a + " which does not have any gradeNames defined"); } var t = v.getGlobalValue(a); t && h.extend(e, t), v.setGlobalValue(a, e); }, v.emptyPolicy = v.freezeRecursive({}), v.derefMergePolicy = function(e) { return (e ? e["*"] : v.emptyPolicy) || v.emptyPolicy; }, v.compileMergePolicy = function(e) { var i = {}, u = {}, s = { builtins: i, defaultValues: u }; return e && v.each(e, function(e, t) { var n = {}, r = !0; if ("function" == typeof e) n.func = e; else if ("object" == typeof e) n = e; else if (v.isDefaultValueMergePolicy(e)) v.set(u, t, "{that}.options." + e), r = !(s.hasDefaults = !0); else for (var a = e.split(/\s*,\s*/), o = 0; o < a.length; ++o) n[a[o]] = !0; r && v.set(i, v.composePath(t, "*"), n); }), s; }, v.isDefaultValueMergePolicy = function(e) { return "string" == typeof e && -1 === e.indexOf(",") && !/replace|nomerge|noexpand/.test(e); }, v.mergeOneImpl = function(e, t, n, r, a, o, i) { var u = e, s = v.isPrimitive(e); return void 0 !== t && (a.func || null === t || !v.isPlainObject(t) || a.nomerge ? (r[n] = void 0, u = a.func ? a.func.call(null, e, t, i[o - 1], i, o) : t) : s && (u = e = v.freshContainer(t))), u; }, v.fetchMergeChildren = function(r, a, o, i, u, s) { for (var e = v.derefMergePolicy(u), t = i.length - 1; 0 <= t; --t) { var n = i[t]; if (void 0 !== n && (v.each(n, function(e, t) { var n = v.concreteTrundler(u, t); t in r && (!s.evaluateFully || void 0 !== n || v.isPrimitive(r[t])) || (o[a] = t, s.strategy(r, t, a + 1, o, i, u)); }), e.replace)) break; } return r; }, v.inEvaluationMarker = Object.freeze({ __CURRENTLY_IN_EVALUATION__: !0 }), v.strategyRecursionBailout = 50, v.makeMergeStrategy = function(h) { function e(e, t, n, r, a, o) { if (n > v.strategyRecursionBailout && v.fail("Overflow/circularity in options merging, current path is ", r, " at depth ", n, ' - please protect components from merging using the "nomerge" merge policy'), !v.isPrimitive(e)) { var i; if (v.isTracing && v.tracing.pathCount.push(v.path(r.slice(0, n))), t in e) { if (i = e[t], !h.evaluateFully) return i; } else e !== v.inEvaluationMarker && (e[t] = v.inEvaluationMarker); void 0 === a && (r = v.makeArray(r), a = function(e, t, n, r) { for (var a = [], o = 0; o < e.length; ++o) { var i = y(e[o], t, n, r[o]); void 0 !== i && a.push(i); } return a; }(h.sources, r, n - 1, h.sourceStrategies), o = y(h.mergePolicy, r, n - 1, v.concreteTrundler)); for (var u, s, l, o = v.concreteTrundler(o, t), c = v.derefMergePolicy(o), d = c.replace ? (u = 1 - a.length, s = 0, -1) : (u = 0, s = a.length - 1, 1), f = [], p = u; p <= s; ++p) { var m = d * p, g = h.sourceStrategies[m](a[m], t, n, r); if (void 0 !== g && (v.isPrimitive(g) || (f[m] = g), void 0 === i)) { if (-1 === d) { l = e[t] = g; break; } l = v.mergeOneImpl(l, g, p, f, c, n, r, h), e !== v.inEvaluationMarker && (e[t] = l); } } return void 0 !== i && (l = i), 0 < f.length && v.isPlainObject(l) && v.fetchMergeChildren(l, n, r, f, o, h), void 0 === i && 0 === f.length && delete e[t], l; } } return h.strategy = e; }, v.driveStrategy = function(e, t, n) { t = v.makeArray(t); for (var r = 0; r < t.length; ++r) { if (!e) return; e = n(e, t[r], r + 1, t); } return e; }, v.concreteTrundler = function(e, t) { return e ? e[t] : void 0; }, v.merge = function(e, ...t) { e = v.compileMergePolicy(e).builtins, e = v.makeMergeOptions(e, t, {}); return e.initter(), e.target; }, v.simpleGingerBlock = function(e, t) { return { target: e, simple: !0, strategy: v.concreteTrundler, initter: v.identity, recordType: t, priority: v.mergeRecordTypes[t] }; }, v.makeMergeOptions = function(e, t, n) { var r = { mergePolicy: e, sources: t }; return (r = h.extend(r, n)).target = r.target || v.freshContainer(r.sources[0]), r.sourceStrategies = r.sourceStrategies || v.generate(r.sources.length, v.concreteTrundler), r.initter = function() { r.evaluateFully = !0, v.fetchMergeChildren(r.