flocking
Version:
Creative audio synthesis for the Web
947 lines • 211 kB
JavaScript
/*! Flocking 3.0.1, Copyright 2022 Colin Clark | flockingjs.org */
var fluid_3_0_0 = fluid_3_0_0 || {}, fluid = fluid || fluid_3_0_0, fluid_3_0_0 = (!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 s = /(%\w+)/g;
function a(e, t, n, r) {
for (var o = e[n], a = 0; a < r.length; ++a) o = r[a](o, n);
t[n] = o;
}
v.renderOneActivity = function(e, t) {
for (var n = !0 === t ? [] : [ " while " ], r = e.message, o = s.lastIndex = 0; ;) {
var a = s.exec(r);
if (!a) break;
var i = a[1].substring(1);
n.push(r.substring(o, a.index)), n.push(e.args[i]), o = s.lastIndex;
}
return o < r.length && n.push(r.substring(o)), 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) a(e, n, r, t); else for (var o in e) a(e, n, o, 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 s = !i && void 0;
return function(e, t, n) {
var r;
if (v.isArrayable(e)) {
for (var o = 0; o < e.length; ++o) if ((r = t(e[o], o)) !== s) return i ? e[o] : r;
} else for (var a in e) if ((r = t(e[a], a)) !== s) return i ? e[a] : 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 o in e) t(e[o], o) && (n && (n[o] = e[o]),
delete e[o]);
return n || e;
}, v.generate = function(e, t, n) {
for (var r = [], o = 0; o < e; ++o) r[o] = n ? t(o) : 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], o = n; 0 < o && t(r, e[o - 1]) < 0; o--) e[o] = e[o - 1];
e[o] = r;
}
}, v.hashToArray = function(e, r, o) {
var a = [];
return v.each(e, function(e, t) {
var n = {};
n[r] = t, o ? n = o(n, e, t) || n : h.extend(!0, n, e), a.push(n);
}), a;
}, 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, o, a) {
var i, s;
return function() {
var e = this, t = arguments, n = a && !i;
return clearTimeout(i), i = setTimeout(function() {
i = null, a || (s = r.apply(e, t));
}, o), s = n ? r.apply(e, t) : s;
};
}, 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, o, a, i) {
var t = v.model.pathToSegments(t, r), s = 0, o = (o && (s = o.length, t = o.concat(t)),
n === v.NO_VALUE ? 0 : 1);
if (e = i(e, t, s, r, o), n === v.NO_VALUE || n === v.VALUE) return a ? {
root: e,
segs: t
} : e;
e[t[t.length - 1]] = n;
}, v.model.accessSimple = function(e, t, n, r, o, a) {
return v.model.accessImpl(e, t, n, r, o, a, v.model.traverseSimple);
}, v.model.traverseSimple = function(e, t, n, r, o) {
for (var a = r, i = t.length - o, s = 0; s < i; ++s) {
if (!e) return;
var l = t[s];
e = r && r[l] ? r[l] : v.model.resolvePathSegment(e, l, 1 === o, a),
r = null;
}
return e;
}, v.model.setSimple = function(e, t, n, r, o) {
v.model.accessSimple(e, t, n, r, o, !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, o = 0; o < r; ++o) e = e ? e[t[o]] : 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, o) {
var a = v.decodeAccessorArg(r);
void 0 === a ? v.model.setWithStrategy(e, t, n, r, o) : v.model.setSimple(e, t, n, a, o);
}, v.get = function(e, t, n, r) {
var o = v.decodeAccessorArg(n);
return void 0 === o ? v.model.getWithStrategy(e, t, n, r) : v.model.accessImpl(e, t, v.NO_VALUE, o, 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), u = (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(":"), o = r[0], o = v.priorityTypes[o];
return void 0 === o && v.fail("Invalid constraint type in priority field " + e + ": the only supported values are " + v.keys(v.priorityTypes).join(", ") + " or numeric"),
t && 0 === o && 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, o = v.find(e, function(e, t) {
return e.namespace === r.target ? t : void 0;
}, -1);
if (-1 === o) return !0;
if (t <= o) return !1;
for (var a = o + ("after" === r.type ? 1 : 0), t = e[n], i = n; a <= i; --i) e[i] = e[i - 1];
return e[a] = 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 o = [];
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 ? o.push(t) : o = o.concat(e);
}), v.sortByPriority(o);
}, 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(o) {
var e = (o = o || {}).name || "<anonymous>", s = {
eventId: v.allocateGuid(),
name: e,
ownerId: o.ownerId,
typeName: "fluid.event.firer",
destroy: function() {
s.destroyed = !0;
},
addListener: function() {
!function() {
s.listeners = {}, s.byId = {}, s.sortedListeners = [], s.addListener = function(e, t, n, r, o) {
var a, i;
s.destroyed && v.fail("Cannot add listener to destroyed event firer " + s.name),
e && (v.isPlainObject(e, !0) && !v.isApplicable(e) && (e = (i = e).listener,
t = i.namespace, n = i.priority, r = i.softNamespace, o = i.listenerId),
"string" == typeof e && (e = {
globalName: e
}), a = o || v.event.identifyListener(e), i = h.extend(i || {}, {
namespace: t = t || a,
listener: e,
softNamespace: r,
listenerId: o,
priority: v.parsePriority(n, s.sortedListeners.length, !1, "listeners")
}), s.byId[a] = i, (s.listeners[t] = v.makeArray(s.listeners[t]))[r ? "push" : "unshift"](i),
s.sortedListeners = v.event.sortListeners(s.listeners));
}, s.addListener.apply(null, arguments);
}.apply(null, arguments);
},
removeListener: function(e) {
var t, n, r, o;
s.listeners && ("string" == typeof e ? (n = s.listeners[o = e]) || (t = o,
o = null) : "function" != typeof e || (t = v.event.identifyListener(e, !0)) || v.fail("Cannot remove unregistered listener function ", e, " from event " + s.name),
r = (e = s.byId[t]) && e.softNamespace, o = o || e && e.namespace || t,
delete s.byId[t], (n = s.listeners[o]) && (r ? v.remove_if(n, function(e) {
return e.listener.$$fluid_guid === t || e.listenerId === t;
}) : n.shift(), 0 === n.length && delete s.listeners[o]), s.sortedListeners = v.event.sortListeners(s.listeners));
},
fire: function() {
var e = s.sortedListeners;
if (e && !s.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 = o.preventable && !1 === n || s.destroyed ? !1 : r)) return r;
}
}
};
return s;
}, 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 o = 0; o < t.length; ++o) v.event.addListenerToFirer(e, t[o], 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(a, i, e) {
v.each(e, function(e, t) {
v.isIoCReference(t) ? (n = v.expandImmediate(t, a)) || 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 !== (o = t.indexOf(".")) && (r = t.substring(o + 1),
t = t.substring(0, o)), i[t] || v.fail("Listener registered for event " + t + " which is not defined for this component"),
n = i[t]);
var n, r, o = v.event.resolveListenerRecord(e, a, t, r, !0);
v.event.addListenerToFirer(n, o.records, r, o.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 o = 0; o < n; ++o) e = r(e, t[o], o, 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], o = v.flattenGradeName(r);
if (r && !e.gradeHash[o]) for (var a = (v.isReferenceOrExpander(r) ? null : v.rawDefaults(r)) || {}, i = c[r] || u - 1, s = (e.lastTick = Math.max(e.lastTick, i),
e.gradeHash[o] = !0, e.gradeChain.push(r), v.makeArray(a.gradeNames)), l = s.length - 1; 0 <= l; --l) v.resolveGradesImpl(e, s[l]);
}
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), o = (v.remove_if(r, function(e) {
return !e;
}), {}), a = 0; a < r.length; ++a) r[a] && r[a].mergePolicy && (o = h.extend(!0, o, r[a].mergePolicy));
r = [ o, {} ].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 o = 0, a = r.defaults.gradeNames || [], i = 0; i < a.length; ++i) o = Math.max(o, c[a[i]] || 0);
o > r.lastTick && (v.passLogLevel(v.logLevel.TRACE) && v.log(v.logLevel.TRACE, "Clearing cache for component " + e + " with gradeNames ", a),
r = null);
}
if (!r) {
var s = v.rawDefaults(e);
if (!s) return s;
r = v.mergedDefaultsCache[n] = v.resolveGrade(s, 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] = u++, v.popActivity();
}, v.doIndexDefaults = function(e, t, n, r) {
for (var o = v.makeArray(r.gradeNames), a = 0; a < o.length; ++a) if (!v.hasGrade(t, o[a])) return;
for (var i = ("function" == typeof r.indexFunc ? r.indexFunc : v.getGlobalValue(r.indexFunc))(t) || [], s = 0; s < i.length; ++s) v.pushArray(n, i[s], e);
}, v.indexDefaults = function(e, t) {
var n, r = {};
for (n in v.defaultsStore) {
var o = v.getMergedDefaults(n);
v.doIndexDefaults(n, o, 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(o) {
function e() {
var e = v.getMergedDefaults(o);
if (e.gradeNames && 0 !== e.gradeNames.length) {
if (e.initFunction) return v.initComponent(o, 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 " + o + " which does not have an initFunction defined") : v.fail("The grade hierarchy of component with type " + o + " 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 " + o + " which does not have any gradeNames defined");
}
var t = v.getGlobalValue(o);
t && h.extend(e, t), v.setGlobalValue(o, e);
}, v.emptyPolicy = v.freezeRecursive({}), v.derefMergePolicy = function(e) {
return (e ? e["*"] : v.emptyPolicy) || v.emptyPolicy;
}, v.compileMergePolicy = function(e) {
var i = {}, s = {}, l = {
builtins: i,
defaultValues: s
};
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(s, t, "{that}.options." + e),
r = !(l.hasDefaults = !0); else for (var o = e.split(/\s*,\s*/), a = 0; a < o.length; ++a) n[o[a]] = !0;
r && v.set(i, v.composePath(t, "*"), n);
}), l;
}, v.isDefaultValueMergePolicy = function(e) {
return "string" == typeof e && -1 === e.indexOf(",") && !/replace|nomerge|noexpand/.test(e);
}, v.mergeOneImpl = function(e, t, n, r, o, a, i) {
var s = e, l = v.isPrimitive(e);
return void 0 !== t && (o.func || null === t || !v.isPlainObject(t) || o.nomerge ? (r[n] = void 0,
s = o.func ? o.func.call(null, e, t, i[a - 1], i, a) : t) : l && (s = e = v.freshContainer(t))),
s;
}, v.fetchMergeChildren = function(r, o, a, i, s, l) {
for (var e = v.derefMergePolicy(s), 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(s, t);
t in r && (!l.evaluateFully || void 0 !== n || v.isPrimitive(r[t])) || (a[o] = t,
l.strategy(r, t, o + 1, a, i, s));
}), 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, o, a) {
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 === o && (r = v.makeArray(r), o = function(e, t, n, r) {
for (var o = [], a = 0; a < e.length; ++a) {
var i = y(e[a], t, n, r[a]);
void 0 !== i && o.push(i);
}
return o;
}(h.sources, r, n - 1, h.sourceStrategies), a = y(h.mergePolicy, r, n - 1, v.concreteTrundler));
for (var s, l, u, a = v.concreteTrundler(a, t), c = v.derefMergePolicy(a), d = c.replace ? (s = 1 - o.length,
l = 0, -1) : (s = 0, l = o.length - 1, 1), f = [], p = s; p <= l; ++p) {
var m = d * p, g = h.sourceStrategies[m](o[m], t, n, r);
if (void 0 !== g && (v.isPrimitive(g) || (f[m] = g), void 0 === i)) {
if (-1 === d) {
u = e[t] = g;
break;
}
u = v.mergeOneImpl(u, g, p, f, c, n, r, h), e !== v.inEvaluationMarker && (e[t] = u);
}
}
return void 0 !== i && (u = i), 0 < f.length && v.isPlainObject(u) && v.fetchMergeChildren(u, n, r, f, a, h),
void 0 === i && 0 === f.length && delete e[t], u;
}
}
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.target, 0, [], r.sources, r.mergePolicy, r);
}, v.makeMergeStrategy(r), r;
}, v.transformOptions = function(e, t) {
return v.expect("Options transformation record", t, [ "transformer", "config" ]),
v.getGlobalValue(t.transformer).call(null, e, t.config);
}, v.findMergeBlocks = function(e, t) {
return v.remove_if(v.makeArray(e), function(e) {
return e.recordType !== t;
});
}, v.transformOptionsBlocks = function(t, n, e) {
v.each(e, function(e) {
e = v.findMergeBlocks(t, e);
v.each(e, function(e) {
var t = e.source ? "source" : "target";
e[e.simple || "target" == t ? "target" : "source"] = v.transformOptions(e[t], n);
});
});
}, v.dedupeDistributionNamespaces = function(e) {
var n = {};
v.remove_if(e, function(e) {
var t = e.namespace;
if (t) {
if (n[t] && n[t] !== e.contextThat.id) return !0;
n[t] = e.contextThat.id;
}
});
}, v.deliverOptionsStrategy = v.identity, v.computeComponentAccessor = v.identity,
v.computeDynamicComponents = v.identity, v.mergeRecordTypes = {
defaults: 1e3,
defaultValueMerge: 900,
subcomponentRecord: 800,
user: 700,
distribution: 100
}, v.model.applyChangeRequest = function(e, t) {
var n = t.segs;
if (0 === n.length) "ADD" === t.type ? h.extend(!0, e, t.value) : v.clear(e); else if ("ADD" === t.type) v.model.setSimple(e, t.segs, t.value); else {
for (var r = 0; r < n.length - 1; ++r) if (!(e = e[n[r]])) return;
delete e[n[n.length - 1]];
}
}, v.destroyValue = function(e, t) {
e && v.model.applyChangeRequest(e, {
type: "DELETE",
segs: t
});
}, v.mergeComponentOptions = function(e, t, n, r) {
function o() {
v.each(u, function(e) {
v.isPrimitive(e.priority) && (e.priority = v.parsePriority(e.priority, 0, !1, "options distribution"));
}), v.sortByPriority(u), v.dedupeDistributionNamespaces(u), d.length = 0,
f.length = 0, v.each(u, function(e) {
d.push(e.strategy), f.push(e.target);
});
}
var a, i, s = v.rawDefaults(t), t = v.getMergedDefaults(t, s && s.gradeNames ? null : r.gradeNames), l = {}, u = [], u = v.expandComponentOptions ? u.concat(v.expandComponentOptions(l, t, n, e)) : u.concat([ v.simpleGingerBlock(t, "defaults"), v.simpleGingerBlock(n, "user") ]), c = {}, d = [], f = [], p = {
target: c,
sourceStrategies: d
}, m = (o(), v.makeMergeOptions(l, f, p));
function g() {
i = v.driveStrategy(c, "mergePolicy", m.strategy), i = h.extend({}, v.rootMergePolicy, i),
a = v.compileMergePolicy(i), h.extend(!0, l, a.builtins);
}
m.mergeBlocks = u, m.updateBlocks = o, m.destroyValue = function(e) {
for (var t = 0; t < u.length; ++t) u[t].immutableTarget || v.destroyValue(u[t].target, e);
v.destroyValue(p.target, e);
}, g(), m.computeMergePolicy = g, a.hasDefaults && (v.generateExpandBlock ? (u.push(v.generateExpandBlock({
options: a.defaultValues,
recordType: "defaultValueMerge",
priority: v.mergeRecordTypes.defaultValueMerge
}, e, {})), o()) : v.fail("Cannot operate mergePolicy ", i, " for component ", e, " without including FluidIoC.js")),
e.options = c, v.driveStrategy(c, "gradeNames", m.strategy), v.deliverOptionsStrategy(e, c, m),
v.computeComponentAccessor(e, n && n.localRecord);
s = v.driveStrategy(c, "transformOptions", m.strategy);
return s && (v.transformOptionsBlocks(u, s, [ "user", "subcomponentRecord" ]),
o()), p.target.mergePolicy || g(), m;
}, v.defaults("fluid.function", {}), v.invokeGradedFunction = function(e, n) {
var t = v.defaults(e), r = (t && t.argumentMap && v.hasGrade(t, "fluid.function") || v.fail("Cannot look up name " + e + " to a function with registered argumentMap - got defaults ", t),
[]);
return v.each(t.argumentMap, function(e, t) {
r[e] = n[t];
}), v.invokeGlobalFunction(e, r);
}, v.noNamespaceDistributionPrefix = "no-namespace-distribution-", v.mergeOneDistribution = function(e, t, n) {
n = t.namespace || n || v.noNamespaceDistributionPrefix + v.allocateGuid();
e[t.namespace = n] = h.extend(!0, {}, e[n], t);
}, v.distributeOptionsPolicy = function(n, e) {
if (n = n || {}, v.isArrayable(e)) for (var t = 0; t < e.length; ++t) v.mergeOneDistribution(n, e[t]); else "string" == typeof e.target ? v.mergeOneDistribution(n, e) : v.each(e, function(e, t) {
v.mergeOneDistribution(n, e, t);
});
return n;
}, v.mergingArray = function() {}, v.mergingArray.prototype = [], v.membersMergePolicy = function(n, e) {
return n = n || {}, v.each(e, function(e, t) {
n[t] || (n[t] = new v.mergingArray()), e instanceof v.mergingArray ? n[t].push.apply(n[t], e) : void 0 !== e && n[t].push(e);
}), n;
}, v.invokerStrategies = v.arrayToHash([ "func", "funcName", "listener", "this", "method", "changePath", "value" ]),
v.invokersMergePolicy = function(a, e) {
return a = a || {}, v.each(e, function(e, t) {
if (e) {
e = v.upgradePrimitiveFunc(e);
var n, r = (r = a[t]) || (a[t] = {});
for (n in v.invokerStrategies) if (n in e) for (var o in v.invokerStrategies) r[o] = void 0;
h.extend(r, e);
} else a[t] = e;
}), a;
}, v.rootMergePolicy = {
gradeNames: v.arrayConcatPolicy,
distributeOptions: v.distributeOptionsPolicy,
members: {
noexpand: !0,
func: v.membersMergePolicy
},
invokers: {
noexpand: !0,
func: v.invokersMergePolicy
},
transformOptions: "replace",
listeners: v.makeMergeListenersPolicy(v.mergeListenerPolicy)
}, v.defaults("fluid.component", {
initFunction: "fluid.initLittleComponent",
mergePolicy: v.rootMergePolicy,
argumentMap: {
options: 0
},
events: {
onCreate: null,
onDestroy: null,
afterDestroy: null
}
}), v.defaults("fluid.emptySubcomponent", {
gradeNames: [ "fluid.component" ]
}), v.computeNickName = function(e) {
e = v.model.parseEL(e);
return e[e.length - 1];
}, v.defaults("fluid.typeFount", {
gradeNames: [ "fluid.component" ]
}), v.initLittleComponent = function(e, t, n, r) {
var o = v.typeTag(e), a = (o.lifecycleStatus = "constructing", n = n || {
gradeNames: "fluid.component"
}, o.destroy = v.makeRootDestroy(o), v.mergeComponentOptions(o, e, t, n)), e = (a.exceptions = {
members: {
model: !0,
modelRelay: !0
}
}, o.options);
o.events = {}, (r || v.identity)(o, e, a.strategy), v.computeDynamicComponents(o, a);
for (var i = 0; i < a.mergeBlocks.length; ++i) a.mergeBlocks[i].initter();
return a.initter(), delete e.mergePolicy, v.instantiateFirers(o, e), v.mergeListeners(o, o.events, e.listeners),
o;
}, v.diagnoseFailedView = v.identity, v.makeRootDestroy = function(e) {
return function() {
v.doDestroy(e), v.fireEvent(e, "afterDestroy", [ e, "", null ]);
};
}, v.isDestroyed = function(e) {
return "destroyed" === e.lifecycleStatus;
}, v.doDestroy = function(e, t, n) {
for (var r in v.fireEvent(e, "onDestroy", [ e, t || "", n ]), e.lifecycleStatus = "destroyed",
e.events) "afterDestroy" !== r && "function" == typeof e.events[r].destroy && e.events[r].destroy();
e.applier && e.applier.destroy();
}, v.initComponent = function(e, t) {
var n, r = v.defaults(e), o = (r.gradeNames || v.fail("Cannot initialise component " + e + " which has no gradeName registered"),
[ e ].concat(v.makeArray(t))), t = (v.pushActivity("initComponent", "constructing component of type %componentName with arguments %initArgs", {
componentName: e,
initArgs: t
}), n = v.invokeGlobalFunction(r.initFunction, o), v.diagnoseFailedView(e, n, r, o),
v.initDependents && v.initDependents(n), v.validateListenersImplemented(n));
return 0 < t.length && v.fail(v.transform(t, function(e) {
return [ "Error constructing component ", n, " - the listener for event " + e.name + " with namespace " + e.namespace + (e.componentSource ? " which was defined in grade " + e.componentSource : "") + " needs to be overridden with a concrete implementation" ];
})).join("\n"), "constructing" === n.lifecycleStatus && (n.lifecycleStatus = "constructed"),
n.events.onCreate.fire(n), v.popActivity(), n;
}, v.initSubcomponentImpl = function(e, t, n) {
var r;
return "function" != typeof t ? "fluid.emptySubcomponent" === (r = "string" == typeof t ? t : t.type) ? null : v.invokeGlobalFunction(r, n) : t.apply(null, n);
};
var r = "(?:[\\w\\u00c0-\\uFFFF*_-", f = (v.simpleCSSMatcher = {
regexp: new RegExp("([#.]?)(" + r + "]|\\\\.)+)", "g"),
charToTag: {
"": "tag",
"#": "id",
".": "clazz"
}
}, v.IoCSSMatcher = {
regexp: new RegExp("([&#]?)(" + r + "]|\\.|\\/)+)", "g"),
charToTag: {
"": "context",
"&": "context",
"#": "id"
}
}, new RegExp("\\s*(>)?\\s*", "g"));
v.parseSelector = function(e, t) {
for (var n = [], r = (e = e.trim(), t.regexp), o = r.lastIndex = 0; ;) {
for (var a = [], i = !0; ;) {
var s = r.exec(e