Skip to content

Instantly share code, notes, and snippets.

@JeroenVinke
Created August 9, 2017 20:05
Show Gist options
  • Select an option

  • Save JeroenVinke/23efc0a64a88e5f0b69212bd4c835f37 to your computer and use it in GitHub Desktop.

Select an option

Save JeroenVinke/23efc0a64a88e5f0b69212bd4c835f37 to your computer and use it in GitHub Desktop.
define('app-bundle', ['exports'], function (exports) { 'use strict';
var environment = {
debug: true,
testing: true
};
var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
function createCommonjsModule(fn, module) {
return module = { exports: {} }, fn(module, module.exports), module.exports;
}
var aureliaPal = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.AggregateError = AggregateError;
exports.initializePAL = initializePAL;
exports.reset = reset;
function AggregateError(message, innerError, skipIfAlreadyAggregate) {
if (innerError) {
if (innerError.innerError && skipIfAlreadyAggregate) {
return innerError;
}
var separator = '\n------------------------------------------------\n';
message += separator + 'Inner Error:\n';
if (typeof innerError === 'string') {
message += 'Message: ' + innerError;
} else {
if (innerError.message) {
message += 'Message: ' + innerError.message;
} else {
message += 'Unknown Inner Error Type. Displaying Inner Error as JSON:\n ' + JSON.stringify(innerError, null, ' ');
}
if (innerError.stack) {
message += '\nInner Error Stack:\n' + innerError.stack;
message += '\nEnd Inner Error Stack';
}
}
message += separator;
}
var e = new Error(message);
if (innerError) {
e.innerError = innerError;
}
return e;
}
var FEATURE = exports.FEATURE = {};
var PLATFORM = exports.PLATFORM = {
noop: function noop() {},
eachModule: function eachModule() {},
moduleName: function (_moduleName) {
function moduleName(_x) {
return _moduleName.apply(this, arguments);
}
moduleName.toString = function () {
return _moduleName.toString();
};
return moduleName;
}(function (moduleName) {
return moduleName;
})
};
PLATFORM.global = function () {
if (typeof self !== 'undefined') {
return self;
}
if (typeof commonjsGlobal !== 'undefined') {
return commonjsGlobal;
}
return new Function('return this')();
}();
var DOM = exports.DOM = {};
var isInitialized = exports.isInitialized = false;
function initializePAL(callback) {
if (isInitialized) {
return;
}
exports.isInitialized = isInitialized = true;
if (typeof Object.getPropertyDescriptor !== 'function') {
Object.getPropertyDescriptor = function (subject, name) {
var pd = Object.getOwnPropertyDescriptor(subject, name);
var proto = Object.getPrototypeOf(subject);
while (typeof pd === 'undefined' && proto !== null) {
pd = Object.getOwnPropertyDescriptor(proto, name);
proto = Object.getPrototypeOf(proto);
}
return pd;
};
}
callback(PLATFORM, FEATURE, DOM);
}
function reset() {
exports.isInitialized = isInitialized = false;
}
});
var aureliaPal_5 = aureliaPal.PLATFORM;
var _typeof$1 = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) {
return typeof obj;
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TemplatingEngine = exports.ElementConfigResource = exports.CompositionEngine = exports.SwapStrategies = exports.HtmlBehaviorResource = exports.BindableProperty = exports.BehaviorPropertyObserver = exports.Controller = exports.ViewEngine = exports.ModuleAnalyzer = exports.ResourceDescription = exports.ResourceModule = exports.ViewCompiler = exports.ViewFactory = exports.BoundViewFactory = exports.ViewSlot = exports.View = exports.ViewResources = exports.ShadowDOM = exports.ShadowSlot = exports.PassThroughSlot = exports.SlotCustomAttribute = exports.BindingLanguage = exports.ViewLocator = exports.InlineViewStrategy = exports.TemplateRegistryViewStrategy = exports.NoViewStrategy = exports.ConventionalViewStrategy = exports.RelativeViewStrategy = exports.viewStrategy = exports.TargetInstruction = exports.BehaviorInstruction = exports.ViewCompileInstruction = exports.ResourceLoadContext = exports.ElementEvents = exports.ViewEngineHooksResource = exports.CompositionTransaction = exports.CompositionTransactionOwnershipToken = exports.CompositionTransactionNotifier = exports.Animator = exports.animationEvent = undefined;
var _createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
}
}return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
};
}();
var _class;
var _temp;
var _dec;
var _class2;
var _dec2;
var _class3;
var _dec3;
var _class4;
var _dec4;
var _class5;
var _dec5;
var _class6;
var _class7;
var _temp2;
var _dec6;
var _class8;
var _class9;
var _temp3;
var _class11;
var _dec7;
var _class13;
var _dec8;
var _class14;
var _class15;
var _temp4;
var _dec9;
var _class16;
var _dec10;
var _class17;
var _dec11;
var _class18;
var _typeof = typeof Symbol === "function" && _typeof$1(Symbol.iterator) === "symbol" ? function (obj) {
return typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
};
exports._hyphenate = _hyphenate;
exports._isAllWhitespace = _isAllWhitespace;
exports.viewEngineHooks = viewEngineHooks;
exports.children = children;
exports.child = child;
exports.resource = resource;
exports.behavior = behavior;
exports.customElement = customElement;
exports.customAttribute = customAttribute;
exports.templateController = templateController;
exports.bindable = bindable;
exports.dynamicOptions = dynamicOptions;
exports.useShadowDOM = useShadowDOM;
exports.processAttributes = processAttributes;
exports.processContent = processContent;
exports.containerless = containerless;
exports.useViewStrategy = useViewStrategy;
exports.useView = useView;
exports.inlineView = inlineView;
exports.noView = noView;
exports.elementConfig = elementConfig;
exports.viewResources = viewResources;
var _aureliaLogging = require('aurelia-logging');
var LogManager = _interopRequireWildcard(_aureliaLogging);
var _aureliaMetadata = require('aurelia-metadata');
var _aureliaPal = require('aurelia-pal');
var _aureliaPath = require('aurelia-path');
var _aureliaLoader = require('aurelia-loader');
var _aureliaDependencyInjection = require('aurelia-dependency-injection');
var _aureliaBinding = require('aurelia-binding');
var _aureliaTaskQueue = require('aurelia-task-queue');
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
}
}newObj.default = obj;return newObj;
}
}
var animationEvent = exports.animationEvent = {
enterBegin: 'animation:enter:begin',
enterActive: 'animation:enter:active',
enterDone: 'animation:enter:done',
enterTimeout: 'animation:enter:timeout',
leaveBegin: 'animation:leave:begin',
leaveActive: 'animation:leave:active',
leaveDone: 'animation:leave:done',
leaveTimeout: 'animation:leave:timeout',
staggerNext: 'animation:stagger:next',
removeClassBegin: 'animation:remove-class:begin',
removeClassActive: 'animation:remove-class:active',
removeClassDone: 'animation:remove-class:done',
removeClassTimeout: 'animation:remove-class:timeout',
addClassBegin: 'animation:add-class:begin',
addClassActive: 'animation:add-class:active',
addClassDone: 'animation:add-class:done',
addClassTimeout: 'animation:add-class:timeout',
animateBegin: 'animation:animate:begin',
animateActive: 'animation:animate:active',
animateDone: 'animation:animate:done',
animateTimeout: 'animation:animate:timeout',
sequenceBegin: 'animation:sequence:begin',
sequenceDone: 'animation:sequence:done'
};
var Animator = exports.Animator = function () {
function Animator() {}
Animator.prototype.enter = function enter(element) {
return Promise.resolve(false);
};
Animator.prototype.leave = function leave(element) {
return Promise.resolve(false);
};
Animator.prototype.removeClass = function removeClass(element, className) {
element.classList.remove(className);
return Promise.resolve(false);
};
Animator.prototype.addClass = function addClass(element, className) {
element.classList.add(className);
return Promise.resolve(false);
};
Animator.prototype.animate = function animate(element, className) {
return Promise.resolve(false);
};
Animator.prototype.runSequence = function runSequence(animations) {};
Animator.prototype.registerEffect = function registerEffect(effectName, properties) {};
Animator.prototype.unregisterEffect = function unregisterEffect(effectName) {};
return Animator;
}();
var CompositionTransactionNotifier = exports.CompositionTransactionNotifier = function () {
function CompositionTransactionNotifier(owner) {
this.owner = owner;
this.owner._compositionCount++;
}
CompositionTransactionNotifier.prototype.done = function done() {
this.owner._compositionCount--;
this.owner._tryCompleteTransaction();
};
return CompositionTransactionNotifier;
}();
var CompositionTransactionOwnershipToken = exports.CompositionTransactionOwnershipToken = function () {
function CompositionTransactionOwnershipToken(owner) {
this.owner = owner;
this.owner._ownershipToken = this;
this.thenable = this._createThenable();
}
CompositionTransactionOwnershipToken.prototype.waitForCompositionComplete = function waitForCompositionComplete() {
this.owner._tryCompleteTransaction();
return this.thenable;
};
CompositionTransactionOwnershipToken.prototype.resolve = function resolve() {
this._resolveCallback();
};
CompositionTransactionOwnershipToken.prototype._createThenable = function _createThenable() {
var _this = this;
return new Promise(function (resolve, reject) {
_this._resolveCallback = resolve;
});
};
return CompositionTransactionOwnershipToken;
}();
var CompositionTransaction = exports.CompositionTransaction = function () {
function CompositionTransaction() {
this._ownershipToken = null;
this._compositionCount = 0;
}
CompositionTransaction.prototype.tryCapture = function tryCapture() {
return this._ownershipToken === null ? new CompositionTransactionOwnershipToken(this) : null;
};
CompositionTransaction.prototype.enlist = function enlist() {
return new CompositionTransactionNotifier(this);
};
CompositionTransaction.prototype._tryCompleteTransaction = function _tryCompleteTransaction() {
if (this._compositionCount <= 0) {
this._compositionCount = 0;
if (this._ownershipToken !== null) {
var token = this._ownershipToken;
this._ownershipToken = null;
token.resolve();
}
}
};
return CompositionTransaction;
}();
var capitalMatcher = /([A-Z])/g;
function addHyphenAndLower(char) {
return '-' + char.toLowerCase();
}
function _hyphenate(name) {
return (name.charAt(0).toLowerCase() + name.slice(1)).replace(capitalMatcher, addHyphenAndLower);
}
function _isAllWhitespace(node) {
return !(node.auInterpolationTarget || /[^\t\n\r ]/.test(node.textContent));
}
var ViewEngineHooksResource = exports.ViewEngineHooksResource = function () {
function ViewEngineHooksResource() {}
ViewEngineHooksResource.prototype.initialize = function initialize(container, target) {
this.instance = container.get(target);
};
ViewEngineHooksResource.prototype.register = function register(registry, name) {
registry.registerViewEngineHooks(this.instance);
};
ViewEngineHooksResource.prototype.load = function load(container, target) {};
ViewEngineHooksResource.convention = function convention(name) {
if (name.endsWith('ViewEngineHooks')) {
return new ViewEngineHooksResource();
}
};
return ViewEngineHooksResource;
}();
function viewEngineHooks(target) {
var deco = function deco(t) {
_aureliaMetadata.metadata.define(_aureliaMetadata.metadata.resource, new ViewEngineHooksResource(), t);
};
return target ? deco(target) : deco;
}
var ElementEvents = exports.ElementEvents = function () {
function ElementEvents(element) {
this.element = element;
this.subscriptions = {};
}
ElementEvents.prototype._enqueueHandler = function _enqueueHandler(handler) {
this.subscriptions[handler.eventName] = this.subscriptions[handler.eventName] || [];
this.subscriptions[handler.eventName].push(handler);
};
ElementEvents.prototype._dequeueHandler = function _dequeueHandler(handler) {
var index = void 0;
var subscriptions = this.subscriptions[handler.eventName];
if (subscriptions) {
index = subscriptions.indexOf(handler);
if (index > -1) {
subscriptions.splice(index, 1);
}
}
return handler;
};
ElementEvents.prototype.publish = function publish(eventName) {
var detail = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
var cancelable = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : true;
var event = _aureliaPal.DOM.createCustomEvent(eventName, { cancelable: cancelable, bubbles: bubbles, detail: detail });
this.element.dispatchEvent(event);
};
ElementEvents.prototype.subscribe = function subscribe(eventName, handler) {
var _this2 = this;
var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
if (handler && typeof handler === 'function') {
handler.eventName = eventName;
handler.handler = handler;
handler.bubbles = bubbles;
handler.dispose = function () {
_this2.element.removeEventListener(eventName, handler, bubbles);
_this2._dequeueHandler(handler);
};
this.element.addEventListener(eventName, handler, bubbles);
this._enqueueHandler(handler);
return handler;
}
return undefined;
};
ElementEvents.prototype.subscribeOnce = function subscribeOnce(eventName, handler) {
var _this3 = this;
var bubbles = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
if (handler && typeof handler === 'function') {
var _ret = function () {
var _handler = function _handler(event) {
handler(event);
_handler.dispose();
};
return {
v: _this3.subscribe(eventName, _handler, bubbles)
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof(_ret)) === "object") return _ret.v;
}
return undefined;
};
ElementEvents.prototype.dispose = function dispose(eventName) {
if (eventName && typeof eventName === 'string') {
var subscriptions = this.subscriptions[eventName];
if (subscriptions) {
while (subscriptions.length) {
var subscription = subscriptions.pop();
if (subscription) {
subscription.dispose();
}
}
}
} else {
this.disposeAll();
}
};
ElementEvents.prototype.disposeAll = function disposeAll() {
for (var key in this.subscriptions) {
this.dispose(key);
}
};
return ElementEvents;
}();
var ResourceLoadContext = exports.ResourceLoadContext = function () {
function ResourceLoadContext() {
this.dependencies = {};
}
ResourceLoadContext.prototype.addDependency = function addDependency(url) {
this.dependencies[url] = true;
};
ResourceLoadContext.prototype.hasDependency = function hasDependency(url) {
return url in this.dependencies;
};
return ResourceLoadContext;
}();
var ViewCompileInstruction = exports.ViewCompileInstruction = function ViewCompileInstruction() {
var targetShadowDOM = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false;
var compileSurrogate = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false;
this.targetShadowDOM = targetShadowDOM;
this.compileSurrogate = compileSurrogate;
this.associatedModuleId = null;
};
ViewCompileInstruction.normal = new ViewCompileInstruction();
var BehaviorInstruction = exports.BehaviorInstruction = function () {
BehaviorInstruction.enhance = function enhance() {
var instruction = new BehaviorInstruction();
instruction.enhance = true;
return instruction;
};
BehaviorInstruction.unitTest = function unitTest(type, attributes) {
var instruction = new BehaviorInstruction();
instruction.type = type;
instruction.attributes = attributes || {};
return instruction;
};
BehaviorInstruction.element = function element(node, type) {
var instruction = new BehaviorInstruction();
instruction.type = type;
instruction.attributes = {};
instruction.anchorIsContainer = !(node.hasAttribute('containerless') || type.containerless);
instruction.initiatedByBehavior = true;
return instruction;
};
BehaviorInstruction.attribute = function attribute(attrName, type) {
var instruction = new BehaviorInstruction();
instruction.attrName = attrName;
instruction.type = type || null;
instruction.attributes = {};
return instruction;
};
BehaviorInstruction.dynamic = function dynamic(host, viewModel, viewFactory) {
var instruction = new BehaviorInstruction();
instruction.host = host;
instruction.viewModel = viewModel;
instruction.viewFactory = viewFactory;
instruction.inheritBindingContext = true;
return instruction;
};
function BehaviorInstruction() {
this.initiatedByBehavior = false;
this.enhance = false;
this.partReplacements = null;
this.viewFactory = null;
this.originalAttrName = null;
this.skipContentProcessing = false;
this.contentFactory = null;
this.viewModel = null;
this.anchorIsContainer = false;
this.host = null;
this.attributes = null;
this.type = null;
this.attrName = null;
this.inheritBindingContext = false;
}
return BehaviorInstruction;
}();
BehaviorInstruction.normal = new BehaviorInstruction();
var TargetInstruction = exports.TargetInstruction = (_temp = _class = function () {
TargetInstruction.shadowSlot = function shadowSlot(parentInjectorId) {
var instruction = new TargetInstruction();
instruction.parentInjectorId = parentInjectorId;
instruction.shadowSlot = true;
return instruction;
};
TargetInstruction.contentExpression = function contentExpression(expression) {
var instruction = new TargetInstruction();
instruction.contentExpression = expression;
return instruction;
};
TargetInstruction.lifting = function lifting(parentInjectorId, liftingInstruction) {
var instruction = new TargetInstruction();
instruction.parentInjectorId = parentInjectorId;
instruction.expressions = TargetInstruction.noExpressions;
instruction.behaviorInstructions = [liftingInstruction];
instruction.viewFactory = liftingInstruction.viewFactory;
instruction.providers = [liftingInstruction.type.target];
instruction.lifting = true;
return instruction;
};
TargetInstruction.normal = function normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction) {
var instruction = new TargetInstruction();
instruction.injectorId = injectorId;
instruction.parentInjectorId = parentInjectorId;
instruction.providers = providers;
instruction.behaviorInstructions = behaviorInstructions;
instruction.expressions = expressions;
instruction.anchorIsContainer = elementInstruction ? elementInstruction.anchorIsContainer : true;
instruction.elementInstruction = elementInstruction;
return instruction;
};
TargetInstruction.surrogate = function surrogate(providers, behaviorInstructions, expressions, values) {
var instruction = new TargetInstruction();
instruction.expressions = expressions;
instruction.behaviorInstructions = behaviorInstructions;
instruction.providers = providers;
instruction.values = values;
return instruction;
};
function TargetInstruction() {
this.injectorId = null;
this.parentInjectorId = null;
this.shadowSlot = false;
this.slotName = null;
this.slotFallbackFactory = null;
this.contentExpression = null;
this.expressions = null;
this.behaviorInstructions = null;
this.providers = null;
this.viewFactory = null;
this.anchorIsContainer = false;
this.elementInstruction = null;
this.lifting = false;
this.values = null;
}
return TargetInstruction;
}(), _class.noExpressions = Object.freeze([]), _temp);
var viewStrategy = exports.viewStrategy = _aureliaMetadata.protocol.create('aurelia:view-strategy', {
validate: function validate(target) {
if (!(typeof target.loadViewFactory === 'function')) {
return 'View strategies must implement: loadViewFactory(viewEngine: ViewEngine, compileInstruction: ViewCompileInstruction, loadContext?: ResourceLoadContext): Promise<ViewFactory>';
}
return true;
},
compose: function compose(target) {
if (!(typeof target.makeRelativeTo === 'function')) {
target.makeRelativeTo = _aureliaPal.PLATFORM.noop;
}
}
});
var RelativeViewStrategy = exports.RelativeViewStrategy = (_dec = viewStrategy(), _dec(_class2 = function () {
function RelativeViewStrategy(path) {
this.path = path;
this.absolutePath = null;
}
RelativeViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {
if (this.absolutePath === null && this.moduleId) {
this.absolutePath = (0, _aureliaPath.relativeToFile)(this.path, this.moduleId);
}
compileInstruction.associatedModuleId = this.moduleId;
return viewEngine.loadViewFactory(this.absolutePath || this.path, compileInstruction, loadContext, target);
};
RelativeViewStrategy.prototype.makeRelativeTo = function makeRelativeTo(file) {
if (this.absolutePath === null) {
this.absolutePath = (0, _aureliaPath.relativeToFile)(this.path, file);
}
};
return RelativeViewStrategy;
}()) || _class2);
var ConventionalViewStrategy = exports.ConventionalViewStrategy = (_dec2 = viewStrategy(), _dec2(_class3 = function () {
function ConventionalViewStrategy(viewLocator, origin) {
this.moduleId = origin.moduleId;
this.viewUrl = viewLocator.convertOriginToViewUrl(origin);
}
ConventionalViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {
compileInstruction.associatedModuleId = this.moduleId;
return viewEngine.loadViewFactory(this.viewUrl, compileInstruction, loadContext, target);
};
return ConventionalViewStrategy;
}()) || _class3);
var NoViewStrategy = exports.NoViewStrategy = (_dec3 = viewStrategy(), _dec3(_class4 = function () {
function NoViewStrategy(dependencies, dependencyBaseUrl) {
this.dependencies = dependencies || null;
this.dependencyBaseUrl = dependencyBaseUrl || '';
}
NoViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {
var entry = this.entry;
var dependencies = this.dependencies;
if (entry && entry.factoryIsReady) {
return Promise.resolve(null);
}
this.entry = entry = new _aureliaLoader.TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);
entry.dependencies = [];
entry.templateIsLoaded = true;
if (dependencies !== null) {
for (var i = 0, ii = dependencies.length; i < ii; ++i) {
var current = dependencies[i];
if (typeof current === 'string' || typeof current === 'function') {
entry.addDependency(current);
} else {
entry.addDependency(current.from, current.as);
}
}
}
compileInstruction.associatedModuleId = this.moduleId;
return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);
};
return NoViewStrategy;
}()) || _class4);
var TemplateRegistryViewStrategy = exports.TemplateRegistryViewStrategy = (_dec4 = viewStrategy(), _dec4(_class5 = function () {
function TemplateRegistryViewStrategy(moduleId, entry) {
this.moduleId = moduleId;
this.entry = entry;
}
TemplateRegistryViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {
var entry = this.entry;
if (entry.factoryIsReady) {
return Promise.resolve(entry.factory);
}
compileInstruction.associatedModuleId = this.moduleId;
return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);
};
return TemplateRegistryViewStrategy;
}()) || _class5);
var InlineViewStrategy = exports.InlineViewStrategy = (_dec5 = viewStrategy(), _dec5(_class6 = function () {
function InlineViewStrategy(markup, dependencies, dependencyBaseUrl) {
this.markup = markup;
this.dependencies = dependencies || null;
this.dependencyBaseUrl = dependencyBaseUrl || '';
}
InlineViewStrategy.prototype.loadViewFactory = function loadViewFactory(viewEngine, compileInstruction, loadContext, target) {
var entry = this.entry;
var dependencies = this.dependencies;
if (entry && entry.factoryIsReady) {
return Promise.resolve(entry.factory);
}
this.entry = entry = new _aureliaLoader.TemplateRegistryEntry(this.moduleId || this.dependencyBaseUrl);
entry.template = _aureliaPal.DOM.createTemplateFromMarkup(this.markup);
if (dependencies !== null) {
for (var i = 0, ii = dependencies.length; i < ii; ++i) {
var current = dependencies[i];
if (typeof current === 'string' || typeof current === 'function') {
entry.addDependency(current);
} else {
entry.addDependency(current.from, current.as);
}
}
}
compileInstruction.associatedModuleId = this.moduleId;
return viewEngine.loadViewFactory(entry, compileInstruction, loadContext, target);
};
return InlineViewStrategy;
}()) || _class6);
var ViewLocator = exports.ViewLocator = (_temp2 = _class7 = function () {
function ViewLocator() {}
ViewLocator.prototype.getViewStrategy = function getViewStrategy(value) {
if (!value) {
return null;
}
if ((typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object' && 'getViewStrategy' in value) {
var _origin = _aureliaMetadata.Origin.get(value.constructor);
value = value.getViewStrategy();
if (typeof value === 'string') {
value = new RelativeViewStrategy(value);
}
viewStrategy.assert(value);
if (_origin.moduleId) {
value.makeRelativeTo(_origin.moduleId);
}
return value;
}
if (typeof value === 'string') {
value = new RelativeViewStrategy(value);
}
if (viewStrategy.validate(value)) {
return value;
}
if (typeof value !== 'function') {
value = value.constructor;
}
var origin = _aureliaMetadata.Origin.get(value);
var strategy = _aureliaMetadata.metadata.get(ViewLocator.viewStrategyMetadataKey, value);
if (!strategy) {
if (!origin.moduleId) {
throw new Error('Cannot determine default view strategy for object.', value);
}
strategy = this.createFallbackViewStrategy(origin);
} else if (origin.moduleId) {
strategy.moduleId = origin.moduleId;
}
return strategy;
};
ViewLocator.prototype.createFallbackViewStrategy = function createFallbackViewStrategy(origin) {
return new ConventionalViewStrategy(this, origin);
};
ViewLocator.prototype.convertOriginToViewUrl = function convertOriginToViewUrl(origin) {
var moduleId = origin.moduleId;
var id = moduleId.endsWith('.js') || moduleId.endsWith('.ts') ? moduleId.substring(0, moduleId.length - 3) : moduleId;
return id + '.html';
};
return ViewLocator;
}(), _class7.viewStrategyMetadataKey = 'aurelia:view-strategy', _temp2);
function mi(name) {
throw new Error('BindingLanguage must implement ' + name + '().');
}
var BindingLanguage = exports.BindingLanguage = function () {
function BindingLanguage() {}
BindingLanguage.prototype.inspectAttribute = function inspectAttribute(resources, elementName, attrName, attrValue) {
mi('inspectAttribute');
};
BindingLanguage.prototype.createAttributeInstruction = function createAttributeInstruction(resources, element, info, existingInstruction) {
mi('createAttributeInstruction');
};
BindingLanguage.prototype.inspectTextContent = function inspectTextContent(resources, value) {
mi('inspectTextContent');
};
return BindingLanguage;
}();
var noNodes = Object.freeze([]);
var SlotCustomAttribute = exports.SlotCustomAttribute = (_dec6 = (0, _aureliaDependencyInjection.inject)(_aureliaPal.DOM.Element), _dec6(_class8 = function () {
function SlotCustomAttribute(element) {
this.element = element;
this.element.auSlotAttribute = this;
}
SlotCustomAttribute.prototype.valueChanged = function valueChanged(newValue, oldValue) {};
return SlotCustomAttribute;
}()) || _class8);
var PassThroughSlot = exports.PassThroughSlot = function () {
function PassThroughSlot(anchor, name, destinationName, fallbackFactory) {
this.anchor = anchor;
this.anchor.viewSlot = this;
this.name = name;
this.destinationName = destinationName;
this.fallbackFactory = fallbackFactory;
this.destinationSlot = null;
this.projections = 0;
this.contentView = null;
var attr = new SlotCustomAttribute(this.anchor);
attr.value = this.destinationName;
}
PassThroughSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {
if (this.contentView === null) {
this.contentView = this.fallbackFactory.create(this.ownerView.container);
this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);
var slots = Object.create(null);
slots[this.destinationSlot.name] = this.destinationSlot;
ShadowDOM.distributeView(this.contentView, slots, projectionSource, index, this.destinationSlot.name);
}
};
PassThroughSlot.prototype.passThroughTo = function passThroughTo(destinationSlot) {
this.destinationSlot = destinationSlot;
};
PassThroughSlot.prototype.addNode = function addNode(view, node, projectionSource, index) {
if (this.contentView !== null) {
this.contentView.removeNodes();
this.contentView.detached();
this.contentView.unbind();
this.contentView = null;
}
if (node.viewSlot instanceof PassThroughSlot) {
node.viewSlot.passThroughTo(this);
return;
}
this.projections++;
this.destinationSlot.addNode(view, node, projectionSource, index);
};
PassThroughSlot.prototype.removeView = function removeView(view, projectionSource) {
this.projections--;
this.destinationSlot.removeView(view, projectionSource);
if (this.needsFallbackRendering) {
this.renderFallbackContent(null, noNodes, projectionSource);
}
};
PassThroughSlot.prototype.removeAll = function removeAll(projectionSource) {
this.projections = 0;
this.destinationSlot.removeAll(projectionSource);
if (this.needsFallbackRendering) {
this.renderFallbackContent(null, noNodes, projectionSource);
}
};
PassThroughSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {
this.destinationSlot.projectFrom(view, projectionSource);
};
PassThroughSlot.prototype.created = function created(ownerView) {
this.ownerView = ownerView;
};
PassThroughSlot.prototype.bind = function bind(view) {
if (this.contentView) {
this.contentView.bind(view.bindingContext, view.overrideContext);
}
};
PassThroughSlot.prototype.attached = function attached() {
if (this.contentView) {
this.contentView.attached();
}
};
PassThroughSlot.prototype.detached = function detached() {
if (this.contentView) {
this.contentView.detached();
}
};
PassThroughSlot.prototype.unbind = function unbind() {
if (this.contentView) {
this.contentView.unbind();
}
};
_createClass(PassThroughSlot, [{
key: 'needsFallbackRendering',
get: function get$$1() {
return this.fallbackFactory && this.projections === 0;
}
}]);
return PassThroughSlot;
}();
var ShadowSlot = exports.ShadowSlot = function () {
function ShadowSlot(anchor, name, fallbackFactory) {
this.anchor = anchor;
this.anchor.isContentProjectionSource = true;
this.anchor.viewSlot = this;
this.name = name;
this.fallbackFactory = fallbackFactory;
this.contentView = null;
this.projections = 0;
this.children = [];
this.projectFromAnchors = null;
this.destinationSlots = null;
}
ShadowSlot.prototype.addNode = function addNode(view, node, projectionSource, index, destination) {
if (this.contentView !== null) {
this.contentView.removeNodes();
this.contentView.detached();
this.contentView.unbind();
this.contentView = null;
}
if (node.viewSlot instanceof PassThroughSlot) {
node.viewSlot.passThroughTo(this);
return;
}
if (this.destinationSlots !== null) {
ShadowDOM.distributeNodes(view, [node], this.destinationSlots, this, index);
} else {
node.auOwnerView = view;
node.auProjectionSource = projectionSource;
node.auAssignedSlot = this;
var anchor = this._findAnchor(view, node, projectionSource, index);
var parent = anchor.parentNode;
parent.insertBefore(node, anchor);
this.children.push(node);
this.projections++;
}
};
ShadowSlot.prototype.removeView = function removeView(view, projectionSource) {
if (this.destinationSlots !== null) {
ShadowDOM.undistributeView(view, this.destinationSlots, this);
} else if (this.contentView && this.contentView.hasSlots) {
ShadowDOM.undistributeView(view, this.contentView.slots, projectionSource);
} else {
var found = this.children.find(function (x) {
return x.auSlotProjectFrom === projectionSource;
});
if (found) {
var _children = found.auProjectionChildren;
for (var i = 0, ii = _children.length; i < ii; ++i) {
var _child = _children[i];
if (_child.auOwnerView === view) {
_children.splice(i, 1);
view.fragment.appendChild(_child);
i--;ii--;
this.projections--;
}
}
if (this.needsFallbackRendering) {
this.renderFallbackContent(view, noNodes, projectionSource);
}
}
}
};
ShadowSlot.prototype.removeAll = function removeAll(projectionSource) {
if (this.destinationSlots !== null) {
ShadowDOM.undistributeAll(this.destinationSlots, this);
} else if (this.contentView && this.contentView.hasSlots) {
ShadowDOM.undistributeAll(this.contentView.slots, projectionSource);
} else {
var found = this.children.find(function (x) {
return x.auSlotProjectFrom === projectionSource;
});
if (found) {
var _children2 = found.auProjectionChildren;
for (var i = 0, ii = _children2.length; i < ii; ++i) {
var _child2 = _children2[i];
_child2.auOwnerView.fragment.appendChild(_child2);
this.projections--;
}
found.auProjectionChildren = [];
if (this.needsFallbackRendering) {
this.renderFallbackContent(null, noNodes, projectionSource);
}
}
}
};
ShadowSlot.prototype._findAnchor = function _findAnchor(view, node, projectionSource, index) {
if (projectionSource) {
var found = this.children.find(function (x) {
return x.auSlotProjectFrom === projectionSource;
});
if (found) {
if (index !== undefined) {
var _children3 = found.auProjectionChildren;
var viewIndex = -1;
var lastView = void 0;
for (var i = 0, ii = _children3.length; i < ii; ++i) {
var current = _children3[i];
if (current.auOwnerView !== lastView) {
viewIndex++;
lastView = current.auOwnerView;
if (viewIndex >= index && lastView !== view) {
_children3.splice(i, 0, node);
return current;
}
}
}
}
found.auProjectionChildren.push(node);
return found;
}
}
return this.anchor;
};
ShadowSlot.prototype.projectTo = function projectTo(slots) {
this.destinationSlots = slots;
};
ShadowSlot.prototype.projectFrom = function projectFrom(view, projectionSource) {
var anchor = _aureliaPal.DOM.createComment('anchor');
var parent = this.anchor.parentNode;
anchor.auSlotProjectFrom = projectionSource;
anchor.auOwnerView = view;
anchor.auProjectionChildren = [];
parent.insertBefore(anchor, this.anchor);
this.children.push(anchor);
if (this.projectFromAnchors === null) {
this.projectFromAnchors = [];
}
this.projectFromAnchors.push(anchor);
};
ShadowSlot.prototype.renderFallbackContent = function renderFallbackContent(view, nodes, projectionSource, index) {
if (this.contentView === null) {
this.contentView = this.fallbackFactory.create(this.ownerView.container);
this.contentView.bind(this.ownerView.bindingContext, this.ownerView.overrideContext);
this.contentView.insertNodesBefore(this.anchor);
}
if (this.contentView.hasSlots) {
var slots = this.contentView.slots;
var projectFromAnchors = this.projectFromAnchors;
if (projectFromAnchors !== null) {
for (var slotName in slots) {
var slot = slots[slotName];
for (var i = 0, ii = projectFromAnchors.length; i < ii; ++i) {
var anchor = projectFromAnchors[i];
slot.projectFrom(anchor.auOwnerView, anchor.auSlotProjectFrom);
}
}
}
this.fallbackSlots = slots;
ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index);
}
};
ShadowSlot.prototype.created = function created(ownerView) {
this.ownerView = ownerView;
};
ShadowSlot.prototype.bind = function bind(view) {
if (this.contentView) {
this.contentView.bind(view.bindingContext, view.overrideContext);
}
};
ShadowSlot.prototype.attached = function attached() {
if (this.contentView) {
this.contentView.attached();
}
};
ShadowSlot.prototype.detached = function detached() {
if (this.contentView) {
this.contentView.detached();
}
};
ShadowSlot.prototype.unbind = function unbind() {
if (this.contentView) {
this.contentView.unbind();
}
};
_createClass(ShadowSlot, [{
key: 'needsFallbackRendering',
get: function get$$1() {
return this.fallbackFactory && this.projections === 0;
}
}]);
return ShadowSlot;
}();
var ShadowDOM = exports.ShadowDOM = (_temp3 = _class9 = function () {
function ShadowDOM() {}
ShadowDOM.getSlotName = function getSlotName(node) {
if (node.auSlotAttribute === undefined) {
return ShadowDOM.defaultSlotKey;
}
return node.auSlotAttribute.value;
};
ShadowDOM.distributeView = function distributeView(view, slots, projectionSource, index, destinationOverride) {
var nodes = void 0;
if (view === null) {
nodes = noNodes;
} else {
var childNodes = view.fragment.childNodes;
var ii = childNodes.length;
nodes = new Array(ii);
for (var i = 0; i < ii; ++i) {
nodes[i] = childNodes[i];
}
}
ShadowDOM.distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride);
};
ShadowDOM.undistributeView = function undistributeView(view, slots, projectionSource) {
for (var slotName in slots) {
slots[slotName].removeView(view, projectionSource);
}
};
ShadowDOM.undistributeAll = function undistributeAll(slots, projectionSource) {
for (var slotName in slots) {
slots[slotName].removeAll(projectionSource);
}
};
ShadowDOM.distributeNodes = function distributeNodes(view, nodes, slots, projectionSource, index, destinationOverride) {
for (var i = 0, ii = nodes.length; i < ii; ++i) {
var currentNode = nodes[i];
var nodeType = currentNode.nodeType;
if (currentNode.isContentProjectionSource) {
currentNode.viewSlot.projectTo(slots);
for (var slotName in slots) {
slots[slotName].projectFrom(view, currentNode.viewSlot);
}
nodes.splice(i, 1);
ii--;i--;
} else if (nodeType === 1 || nodeType === 3 || currentNode.viewSlot instanceof PassThroughSlot) {
if (nodeType === 3 && _isAllWhitespace(currentNode)) {
nodes.splice(i, 1);
ii--;i--;
} else {
var found = slots[destinationOverride || ShadowDOM.getSlotName(currentNode)];
if (found) {
found.addNode(view, currentNode, projectionSource, index);
nodes.splice(i, 1);
ii--;i--;
}
}
} else {
nodes.splice(i, 1);
ii--;i--;
}
}
for (var _slotName in slots) {
var slot = slots[_slotName];
if (slot.needsFallbackRendering) {
slot.renderFallbackContent(view, nodes, projectionSource, index);
}
}
};
return ShadowDOM;
}(), _class9.defaultSlotKey = '__au-default-slot-key__', _temp3);
function register(lookup, name, resource, type) {
if (!name) {
return;
}
var existing = lookup[name];
if (existing) {
if (existing !== resource) {
throw new Error('Attempted to register ' + type + ' when one with the same name already exists. Name: ' + name + '.');
}
return;
}
lookup[name] = resource;
}
var ViewResources = exports.ViewResources = function () {
function ViewResources(parent, viewUrl) {
this.bindingLanguage = null;
this.parent = parent || null;
this.hasParent = this.parent !== null;
this.viewUrl = viewUrl || '';
this.lookupFunctions = {
valueConverters: this.getValueConverter.bind(this),
bindingBehaviors: this.getBindingBehavior.bind(this)
};
this.attributes = Object.create(null);
this.elements = Object.create(null);
this.valueConverters = Object.create(null);
this.bindingBehaviors = Object.create(null);
this.attributeMap = Object.create(null);
this.values = Object.create(null);
this.beforeCompile = this.afterCompile = this.beforeCreate = this.afterCreate = this.beforeBind = this.beforeUnbind = false;
}
ViewResources.prototype._tryAddHook = function _tryAddHook(obj, name) {
if (typeof obj[name] === 'function') {
var func = obj[name].bind(obj);
var counter = 1;
var callbackName = void 0;
while (this[callbackName = name + counter.toString()] !== undefined) {
counter++;
}
this[name] = true;
this[callbackName] = func;
}
};
ViewResources.prototype._invokeHook = function _invokeHook(name, one, two, three, four) {
if (this.hasParent) {
this.parent._invokeHook(name, one, two, three, four);
}
if (this[name]) {
this[name + '1'](one, two, three, four);
var callbackName = name + '2';
if (this[callbackName]) {
this[callbackName](one, two, three, four);
callbackName = name + '3';
if (this[callbackName]) {
this[callbackName](one, two, three, four);
var counter = 4;
while (this[callbackName = name + counter.toString()] !== undefined) {
this[callbackName](one, two, three, four);
counter++;
}
}
}
}
};
ViewResources.prototype.registerViewEngineHooks = function registerViewEngineHooks(hooks) {
this._tryAddHook(hooks, 'beforeCompile');
this._tryAddHook(hooks, 'afterCompile');
this._tryAddHook(hooks, 'beforeCreate');
this._tryAddHook(hooks, 'afterCreate');
this._tryAddHook(hooks, 'beforeBind');
this._tryAddHook(hooks, 'beforeUnbind');
};
ViewResources.prototype.getBindingLanguage = function getBindingLanguage(bindingLanguageFallback) {
return this.bindingLanguage || (this.bindingLanguage = bindingLanguageFallback);
};
ViewResources.prototype.patchInParent = function patchInParent(newParent) {
var originalParent = this.parent;
this.parent = newParent || null;
this.hasParent = this.parent !== null;
if (newParent.parent === null) {
newParent.parent = originalParent;
newParent.hasParent = originalParent !== null;
}
};
ViewResources.prototype.relativeToView = function relativeToView(path) {
return (0, _aureliaPath.relativeToFile)(path, this.viewUrl);
};
ViewResources.prototype.registerElement = function registerElement(tagName, behavior) {
register(this.elements, tagName, behavior, 'an Element');
};
ViewResources.prototype.getElement = function getElement(tagName) {
return this.elements[tagName] || (this.hasParent ? this.parent.getElement(tagName) : null);
};
ViewResources.prototype.mapAttribute = function mapAttribute(attribute) {
return this.attributeMap[attribute] || (this.hasParent ? this.parent.mapAttribute(attribute) : null);
};
ViewResources.prototype.registerAttribute = function registerAttribute(attribute, behavior, knownAttribute) {
this.attributeMap[attribute] = knownAttribute;
register(this.attributes, attribute, behavior, 'an Attribute');
};
ViewResources.prototype.getAttribute = function getAttribute(attribute) {
return this.attributes[attribute] || (this.hasParent ? this.parent.getAttribute(attribute) : null);
};
ViewResources.prototype.registerValueConverter = function registerValueConverter(name, valueConverter) {
register(this.valueConverters, name, valueConverter, 'a ValueConverter');
};
ViewResources.prototype.getValueConverter = function getValueConverter(name) {
return this.valueConverters[name] || (this.hasParent ? this.parent.getValueConverter(name) : null);
};
ViewResources.prototype.registerBindingBehavior = function registerBindingBehavior(name, bindingBehavior) {
register(this.bindingBehaviors, name, bindingBehavior, 'a BindingBehavior');
};
ViewResources.prototype.getBindingBehavior = function getBindingBehavior(name) {
return this.bindingBehaviors[name] || (this.hasParent ? this.parent.getBindingBehavior(name) : null);
};
ViewResources.prototype.registerValue = function registerValue(name, value) {
register(this.values, name, value, 'a value');
};
ViewResources.prototype.getValue = function getValue(name) {
return this.values[name] || (this.hasParent ? this.parent.getValue(name) : null);
};
return ViewResources;
}();
var View = exports.View = function () {
function View(container, viewFactory, fragment, controllers, bindings, children, slots) {
this.container = container;
this.viewFactory = viewFactory;
this.resources = viewFactory.resources;
this.fragment = fragment;
this.firstChild = fragment.firstChild;
this.lastChild = fragment.lastChild;
this.controllers = controllers;
this.bindings = bindings;
this.children = children;
this.slots = slots;
this.hasSlots = false;
this.fromCache = false;
this.isBound = false;
this.isAttached = false;
this.bindingContext = null;
this.overrideContext = null;
this.controller = null;
this.viewModelScope = null;
this.animatableElement = undefined;
this._isUserControlled = false;
this.contentView = null;
for (var key in slots) {
this.hasSlots = true;
break;
}
}
View.prototype.returnToCache = function returnToCache() {
this.viewFactory.returnViewToCache(this);
};
View.prototype.created = function created() {
var i = void 0;
var ii = void 0;
var controllers = this.controllers;
for (i = 0, ii = controllers.length; i < ii; ++i) {
controllers[i].created(this);
}
};
View.prototype.bind = function bind(bindingContext, overrideContext, _systemUpdate) {
var controllers = void 0;
var bindings = void 0;
var children = void 0;
var i = void 0;
var ii = void 0;
if (_systemUpdate && this._isUserControlled) {
return;
}
if (this.isBound) {
if (this.bindingContext === bindingContext) {
return;
}
this.unbind();
}
this.isBound = true;
this.bindingContext = bindingContext;
this.overrideContext = overrideContext || (0, _aureliaBinding.createOverrideContext)(bindingContext);
this.resources._invokeHook('beforeBind', this);
bindings = this.bindings;
for (i = 0, ii = bindings.length; i < ii; ++i) {
bindings[i].bind(this);
}
if (this.viewModelScope !== null) {
bindingContext.bind(this.viewModelScope.bindingContext, this.viewModelScope.overrideContext);
this.viewModelScope = null;
}
controllers = this.controllers;
for (i = 0, ii = controllers.length; i < ii; ++i) {
controllers[i].bind(this);
}
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].bind(bindingContext, overrideContext, true);
}
if (this.hasSlots) {
ShadowDOM.distributeView(this.contentView, this.slots);
}
};
View.prototype.addBinding = function addBinding(binding) {
this.bindings.push(binding);
if (this.isBound) {
binding.bind(this);
}
};
View.prototype.unbind = function unbind() {
var controllers = void 0;
var bindings = void 0;
var children = void 0;
var i = void 0;
var ii = void 0;
if (this.isBound) {
this.isBound = false;
this.resources._invokeHook('beforeUnbind', this);
if (this.controller !== null) {
this.controller.unbind();
}
bindings = this.bindings;
for (i = 0, ii = bindings.length; i < ii; ++i) {
bindings[i].unbind();
}
controllers = this.controllers;
for (i = 0, ii = controllers.length; i < ii; ++i) {
controllers[i].unbind();
}
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].unbind();
}
this.bindingContext = null;
this.overrideContext = null;
}
};
View.prototype.insertNodesBefore = function insertNodesBefore(refNode) {
refNode.parentNode.insertBefore(this.fragment, refNode);
};
View.prototype.appendNodesTo = function appendNodesTo(parent) {
parent.appendChild(this.fragment);
};
View.prototype.removeNodes = function removeNodes() {
var fragment = this.fragment;
var current = this.firstChild;
var end = this.lastChild;
var next = void 0;
while (current) {
next = current.nextSibling;
fragment.appendChild(current);
if (current === end) {
break;
}
current = next;
}
};
View.prototype.attached = function attached() {
var controllers = void 0;
var children = void 0;
var i = void 0;
var ii = void 0;
if (this.isAttached) {
return;
}
this.isAttached = true;
if (this.controller !== null) {
this.controller.attached();
}
controllers = this.controllers;
for (i = 0, ii = controllers.length; i < ii; ++i) {
controllers[i].attached();
}
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].attached();
}
};
View.prototype.detached = function detached() {
var controllers = void 0;
var children = void 0;
var i = void 0;
var ii = void 0;
if (this.isAttached) {
this.isAttached = false;
if (this.controller !== null) {
this.controller.detached();
}
controllers = this.controllers;
for (i = 0, ii = controllers.length; i < ii; ++i) {
controllers[i].detached();
}
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].detached();
}
}
};
return View;
}();
function getAnimatableElement(view) {
if (view.animatableElement !== undefined) {
return view.animatableElement;
}
var current = view.firstChild;
while (current && current.nodeType !== 1) {
current = current.nextSibling;
}
if (current && current.nodeType === 1) {
return view.animatableElement = current.classList.contains('au-animate') ? current : null;
}
return view.animatableElement = null;
}
var ViewSlot = exports.ViewSlot = function () {
function ViewSlot(anchor, anchorIsContainer) {
var animator = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Animator.instance;
this.anchor = anchor;
this.anchorIsContainer = anchorIsContainer;
this.bindingContext = null;
this.overrideContext = null;
this.animator = animator;
this.children = [];
this.isBound = false;
this.isAttached = false;
this.contentSelectors = null;
anchor.viewSlot = this;
anchor.isContentProjectionSource = false;
}
ViewSlot.prototype.animateView = function animateView(view) {
var direction = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'enter';
var animatableElement = getAnimatableElement(view);
if (animatableElement !== null) {
switch (direction) {
case 'enter':
return this.animator.enter(animatableElement);
case 'leave':
return this.animator.leave(animatableElement);
default:
throw new Error('Invalid animation direction: ' + direction);
}
}
};
ViewSlot.prototype.transformChildNodesIntoView = function transformChildNodesIntoView() {
var parent = this.anchor;
this.children.push({
fragment: parent,
firstChild: parent.firstChild,
lastChild: parent.lastChild,
returnToCache: function returnToCache() {},
removeNodes: function removeNodes() {
var last = void 0;
while (last = parent.lastChild) {
parent.removeChild(last);
}
},
created: function created() {},
bind: function bind() {},
unbind: function unbind() {},
attached: function attached() {},
detached: function detached() {}
});
};
ViewSlot.prototype.bind = function bind(bindingContext, overrideContext) {
var i = void 0;
var ii = void 0;
var children = void 0;
if (this.isBound) {
if (this.bindingContext === bindingContext) {
return;
}
this.unbind();
}
this.isBound = true;
this.bindingContext = bindingContext = bindingContext || this.bindingContext;
this.overrideContext = overrideContext = overrideContext || this.overrideContext;
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].bind(bindingContext, overrideContext, true);
}
};
ViewSlot.prototype.unbind = function unbind() {
if (this.isBound) {
var i = void 0;
var ii = void 0;
var _children4 = this.children;
this.isBound = false;
this.bindingContext = null;
this.overrideContext = null;
for (i = 0, ii = _children4.length; i < ii; ++i) {
_children4[i].unbind();
}
}
};
ViewSlot.prototype.add = function add(view) {
if (this.anchorIsContainer) {
view.appendNodesTo(this.anchor);
} else {
view.insertNodesBefore(this.anchor);
}
this.children.push(view);
if (this.isAttached) {
view.attached();
return this.animateView(view, 'enter');
}
};
ViewSlot.prototype.insert = function insert(index, view) {
var children = this.children;
var length = children.length;
if (index === 0 && length === 0 || index >= length) {
return this.add(view);
}
view.insertNodesBefore(children[index].firstChild);
children.splice(index, 0, view);
if (this.isAttached) {
view.attached();
return this.animateView(view, 'enter');
}
};
ViewSlot.prototype.move = function move(sourceIndex, targetIndex) {
if (sourceIndex === targetIndex) {
return;
}
var children = this.children;
var view = children[sourceIndex];
view.removeNodes();
view.insertNodesBefore(children[targetIndex].firstChild);
children.splice(sourceIndex, 1);
children.splice(targetIndex, 0, view);
};
ViewSlot.prototype.remove = function remove(view, returnToCache, skipAnimation) {
return this.removeAt(this.children.indexOf(view), returnToCache, skipAnimation);
};
ViewSlot.prototype.removeMany = function removeMany(viewsToRemove, returnToCache, skipAnimation) {
var _this4 = this;
var children = this.children;
var ii = viewsToRemove.length;
var i = void 0;
var rmPromises = [];
viewsToRemove.forEach(function (child) {
if (skipAnimation) {
child.removeNodes();
return;
}
var animation = _this4.animateView(child, 'leave');
if (animation) {
rmPromises.push(animation.then(function () {
return child.removeNodes();
}));
} else {
child.removeNodes();
}
});
var removeAction = function removeAction() {
if (_this4.isAttached) {
for (i = 0; i < ii; ++i) {
viewsToRemove[i].detached();
}
}
if (returnToCache) {
for (i = 0; i < ii; ++i) {
viewsToRemove[i].returnToCache();
}
}
for (i = 0; i < ii; ++i) {
var index = children.indexOf(viewsToRemove[i]);
if (index >= 0) {
children.splice(index, 1);
}
}
};
if (rmPromises.length > 0) {
return Promise.all(rmPromises).then(function () {
return removeAction();
});
}
return removeAction();
};
ViewSlot.prototype.removeAt = function removeAt(index, returnToCache, skipAnimation) {
var _this5 = this;
var view = this.children[index];
var removeAction = function removeAction() {
index = _this5.children.indexOf(view);
view.removeNodes();
_this5.children.splice(index, 1);
if (_this5.isAttached) {
view.detached();
}
if (returnToCache) {
view.returnToCache();
}
return view;
};
if (!skipAnimation) {
var animation = this.animateView(view, 'leave');
if (animation) {
return animation.then(function () {
return removeAction();
});
}
}
return removeAction();
};
ViewSlot.prototype.removeAll = function removeAll(returnToCache, skipAnimation) {
var _this6 = this;
var children = this.children;
var ii = children.length;
var i = void 0;
var rmPromises = [];
children.forEach(function (child) {
if (skipAnimation) {
child.removeNodes();
return;
}
var animation = _this6.animateView(child, 'leave');
if (animation) {
rmPromises.push(animation.then(function () {
return child.removeNodes();
}));
} else {
child.removeNodes();
}
});
var removeAction = function removeAction() {
if (_this6.isAttached) {
for (i = 0; i < ii; ++i) {
children[i].detached();
}
}
if (returnToCache) {
for (i = 0; i < ii; ++i) {
var _child3 = children[i];
if (_child3) {
_child3.returnToCache();
}
}
}
_this6.children = [];
};
if (rmPromises.length > 0) {
return Promise.all(rmPromises).then(function () {
return removeAction();
});
}
return removeAction();
};
ViewSlot.prototype.attached = function attached() {
var i = void 0;
var ii = void 0;
var children = void 0;
var child = void 0;
if (this.isAttached) {
return;
}
this.isAttached = true;
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
child = children[i];
child.attached();
this.animateView(child, 'enter');
}
};
ViewSlot.prototype.detached = function detached() {
var i = void 0;
var ii = void 0;
var children = void 0;
if (this.isAttached) {
this.isAttached = false;
children = this.children;
for (i = 0, ii = children.length; i < ii; ++i) {
children[i].detached();
}
}
};
ViewSlot.prototype.projectTo = function projectTo(slots) {
var _this7 = this;
this.projectToSlots = slots;
this.add = this._projectionAdd;
this.insert = this._projectionInsert;
this.move = this._projectionMove;
this.remove = this._projectionRemove;
this.removeAt = this._projectionRemoveAt;
this.removeMany = this._projectionRemoveMany;
this.removeAll = this._projectionRemoveAll;
this.children.forEach(function (view) {
return ShadowDOM.distributeView(view, slots, _this7);
});
};
ViewSlot.prototype._projectionAdd = function _projectionAdd(view) {
ShadowDOM.distributeView(view, this.projectToSlots, this);
this.children.push(view);
if (this.isAttached) {
view.attached();
}
};
ViewSlot.prototype._projectionInsert = function _projectionInsert(index, view) {
if (index === 0 && !this.children.length || index >= this.children.length) {
this.add(view);
} else {
ShadowDOM.distributeView(view, this.projectToSlots, this, index);
this.children.splice(index, 0, view);
if (this.isAttached) {
view.attached();
}
}
};
ViewSlot.prototype._projectionMove = function _projectionMove(sourceIndex, targetIndex) {
if (sourceIndex === targetIndex) {
return;
}
var children = this.children;
var view = children[sourceIndex];
ShadowDOM.undistributeView(view, this.projectToSlots, this);
ShadowDOM.distributeView(view, this.projectToSlots, this, targetIndex);
children.splice(sourceIndex, 1);
children.splice(targetIndex, 0, view);
};
ViewSlot.prototype._projectionRemove = function _projectionRemove(view, returnToCache) {
ShadowDOM.undistributeView(view, this.projectToSlots, this);
this.children.splice(this.children.indexOf(view), 1);
if (this.isAttached) {
view.detached();
}
};
ViewSlot.prototype._projectionRemoveAt = function _projectionRemoveAt(index, returnToCache) {
var view = this.children[index];
ShadowDOM.undistributeView(view, this.projectToSlots, this);
this.children.splice(index, 1);
if (this.isAttached) {
view.detached();
}
};
ViewSlot.prototype._projectionRemoveMany = function _projectionRemoveMany(viewsToRemove, returnToCache) {
var _this8 = this;
viewsToRemove.forEach(function (view) {
return _this8.remove(view, returnToCache);
});
};
ViewSlot.prototype._projectionRemoveAll = function _projectionRemoveAll(returnToCache) {
ShadowDOM.undistributeAll(this.projectToSlots, this);
var children = this.children;
if (this.isAttached) {
for (var i = 0, ii = children.length; i < ii; ++i) {
children[i].detached();
}
}
this.children = [];
};
return ViewSlot;
}();
var ProviderResolver = (0, _aureliaDependencyInjection.resolver)(_class11 = function () {
function ProviderResolver() {}
ProviderResolver.prototype.get = function get$$1(container, key) {
var id = key.__providerId__;
return id in container ? container[id] : container[id] = container.invoke(key);
};
return ProviderResolver;
}()) || _class11;
var providerResolverInstance = new ProviderResolver();
function elementContainerGet(key) {
if (key === _aureliaPal.DOM.Element) {
return this.element;
}
if (key === BoundViewFactory) {
if (this.boundViewFactory) {
return this.boundViewFactory;
}
var factory = this.instruction.viewFactory;
var _partReplacements = this.partReplacements;
if (_partReplacements) {
factory = _partReplacements[factory.part] || factory;
}
this.boundViewFactory = new BoundViewFactory(this, factory, _partReplacements);
return this.boundViewFactory;
}
if (key === ViewSlot) {
if (this.viewSlot === undefined) {
this.viewSlot = new ViewSlot(this.element, this.instruction.anchorIsContainer);
this.element.isContentProjectionSource = this.instruction.lifting;
this.children.push(this.viewSlot);
}
return this.viewSlot;
}
if (key === ElementEvents) {
return this.elementEvents || (this.elementEvents = new ElementEvents(this.element));
}
if (key === CompositionTransaction) {
return this.compositionTransaction || (this.compositionTransaction = this.parent.get(key));
}
if (key === ViewResources) {
return this.viewResources;
}
if (key === TargetInstruction) {
return this.instruction;
}
return this.superGet(key);
}
function createElementContainer(parent, element, instruction, children, partReplacements, resources) {
var container = parent.createChild();
var providers = void 0;
var i = void 0;
container.element = element;
container.instruction = instruction;
container.children = children;
container.viewResources = resources;
container.partReplacements = partReplacements;
providers = instruction.providers;
i = providers.length;
while (i--) {
container._resolvers.set(providers[i], providerResolverInstance);
}
container.superGet = container.get;
container.get = elementContainerGet;
return container;
}
function hasAttribute(name) {
return this._element.hasAttribute(name);
}
function getAttribute(name) {
return this._element.getAttribute(name);
}
function setAttribute(name, value) {
this._element.setAttribute(name, value);
}
function makeElementIntoAnchor(element, elementInstruction) {
var anchor = _aureliaPal.DOM.createComment('anchor');
if (elementInstruction) {
var firstChild = element.firstChild;
if (firstChild && firstChild.tagName === 'AU-CONTENT') {
anchor.contentElement = firstChild;
}
anchor._element = element;
anchor.hasAttribute = hasAttribute;
anchor.getAttribute = getAttribute;
anchor.setAttribute = setAttribute;
}
_aureliaPal.DOM.replaceNode(anchor, element);
return anchor;
}
function applyInstructions(containers, element, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources) {
var behaviorInstructions = instruction.behaviorInstructions;
var expressions = instruction.expressions;
var elementContainer = void 0;
var i = void 0;
var ii = void 0;
var current = void 0;
var instance = void 0;
if (instruction.contentExpression) {
bindings.push(instruction.contentExpression.createBinding(element.nextSibling));
element.nextSibling.auInterpolationTarget = true;
element.parentNode.removeChild(element);
return;
}
if (instruction.shadowSlot) {
var commentAnchor = _aureliaPal.DOM.createComment('slot');
var slot = void 0;
if (instruction.slotDestination) {
slot = new PassThroughSlot(commentAnchor, instruction.slotName, instruction.slotDestination, instruction.slotFallbackFactory);
} else {
slot = new ShadowSlot(commentAnchor, instruction.slotName, instruction.slotFallbackFactory);
}
_aureliaPal.DOM.replaceNode(commentAnchor, element);
shadowSlots[instruction.slotName] = slot;
controllers.push(slot);
return;
}
if (behaviorInstructions.length) {
if (!instruction.anchorIsContainer) {
element = makeElementIntoAnchor(element, instruction.elementInstruction);
}
containers[instruction.injectorId] = elementContainer = createElementContainer(containers[instruction.parentInjectorId], element, instruction, children, partReplacements, resources);
for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {
current = behaviorInstructions[i];
instance = current.type.create(elementContainer, current, element, bindings);
controllers.push(instance);
}
}
for (i = 0, ii = expressions.length; i < ii; ++i) {
bindings.push(expressions[i].createBinding(element));
}
}
function styleStringToObject(style, target) {
var attributes = style.split(';');
var firstIndexOfColon = void 0;
var i = void 0;
var current = void 0;
var key = void 0;
var value = void 0;
target = target || {};
for (i = 0; i < attributes.length; i++) {
current = attributes[i];
firstIndexOfColon = current.indexOf(':');
key = current.substring(0, firstIndexOfColon).trim();
value = current.substring(firstIndexOfColon + 1).trim();
target[key] = value;
}
return target;
}
function styleObjectToString(obj) {
var result = '';
for (var key in obj) {
result += key + ':' + obj[key] + ';';
}
return result;
}
function applySurrogateInstruction(container, element, instruction, controllers, bindings, children) {
var behaviorInstructions = instruction.behaviorInstructions;
var expressions = instruction.expressions;
var providers = instruction.providers;
var values = instruction.values;
var i = void 0;
var ii = void 0;
var current = void 0;
var instance = void 0;
var currentAttributeValue = void 0;
i = providers.length;
while (i--) {
container._resolvers.set(providers[i], providerResolverInstance);
}
for (var key in values) {
currentAttributeValue = element.getAttribute(key);
if (currentAttributeValue) {
if (key === 'class') {
element.setAttribute('class', currentAttributeValue + ' ' + values[key]);
} else if (key === 'style') {
var styleObject = styleStringToObject(values[key]);
styleStringToObject(currentAttributeValue, styleObject);
element.setAttribute('style', styleObjectToString(styleObject));
}
} else {
element.setAttribute(key, values[key]);
}
}
if (behaviorInstructions.length) {
for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {
current = behaviorInstructions[i];
instance = current.type.create(container, current, element, bindings);
if (instance.contentView) {
children.push(instance.contentView);
}
controllers.push(instance);
}
}
for (i = 0, ii = expressions.length; i < ii; ++i) {
bindings.push(expressions[i].createBinding(element));
}
}
var BoundViewFactory = exports.BoundViewFactory = function () {
function BoundViewFactory(parentContainer, viewFactory, partReplacements) {
this.parentContainer = parentContainer;
this.viewFactory = viewFactory;
this.factoryCreateInstruction = { partReplacements: partReplacements };
}
BoundViewFactory.prototype.create = function create() {
var view = this.viewFactory.create(this.parentContainer.createChild(), this.factoryCreateInstruction);
view._isUserControlled = true;
return view;
};
BoundViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {
this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);
};
BoundViewFactory.prototype.getCachedView = function getCachedView() {
return this.viewFactory.getCachedView();
};
BoundViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {
this.viewFactory.returnViewToCache(view);
};
_createClass(BoundViewFactory, [{
key: 'isCaching',
get: function get$$1() {
return this.viewFactory.isCaching;
}
}]);
return BoundViewFactory;
}();
var ViewFactory = exports.ViewFactory = function () {
function ViewFactory(template, instructions, resources) {
this.isCaching = false;
this.template = template;
this.instructions = instructions;
this.resources = resources;
this.cacheSize = -1;
this.cache = null;
}
ViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {
if (size) {
if (size === '*') {
size = Number.MAX_VALUE;
} else if (typeof size === 'string') {
size = parseInt(size, 10);
}
}
if (this.cacheSize === -1 || !doNotOverrideIfAlreadySet) {
this.cacheSize = size;
}
if (this.cacheSize > 0) {
this.cache = [];
} else {
this.cache = null;
}
this.isCaching = this.cacheSize > 0;
};
ViewFactory.prototype.getCachedView = function getCachedView() {
return this.cache !== null ? this.cache.pop() || null : null;
};
ViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {
if (view.isAttached) {
view.detached();
}
if (view.isBound) {
view.unbind();
}
if (this.cache !== null && this.cache.length < this.cacheSize) {
view.fromCache = true;
this.cache.push(view);
}
};
ViewFactory.prototype.create = function create(container, createInstruction, element) {
createInstruction = createInstruction || BehaviorInstruction.normal;
var cachedView = this.getCachedView();
if (cachedView !== null) {
return cachedView;
}
var fragment = createInstruction.enhance ? this.template : this.template.cloneNode(true);
var instructables = fragment.querySelectorAll('.au-target');
var instructions = this.instructions;
var resources = this.resources;
var controllers = [];
var bindings = [];
var children = [];
var shadowSlots = Object.create(null);
var containers = { root: container };
var partReplacements = createInstruction.partReplacements;
var i = void 0;
var ii = void 0;
var view = void 0;
var instructable = void 0;
var instruction = void 0;
this.resources._invokeHook('beforeCreate', this, container, fragment, createInstruction);
if (element && this.surrogateInstruction !== null) {
applySurrogateInstruction(container, element, this.surrogateInstruction, controllers, bindings, children);
}
if (createInstruction.enhance && fragment.hasAttribute('au-target-id')) {
instructable = fragment;
instruction = instructions[instructable.getAttribute('au-target-id')];
applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);
}
for (i = 0, ii = instructables.length; i < ii; ++i) {
instructable = instructables[i];
instruction = instructions[instructable.getAttribute('au-target-id')];
applyInstructions(containers, instructable, instruction, controllers, bindings, children, shadowSlots, partReplacements, resources);
}
view = new View(container, this, fragment, controllers, bindings, children, shadowSlots);
if (!createInstruction.initiatedByBehavior) {
view.created();
}
this.resources._invokeHook('afterCreate', view);
return view;
};
return ViewFactory;
}();
var nextInjectorId = 0;
function getNextInjectorId() {
return ++nextInjectorId;
}
var lastAUTargetID = 0;
function getNextAUTargetID() {
return (++lastAUTargetID).toString();
}
function makeIntoInstructionTarget(element) {
var value = element.getAttribute('class');
var auTargetID = getNextAUTargetID();
element.setAttribute('class', value ? value + ' au-target' : 'au-target');
element.setAttribute('au-target-id', auTargetID);
return auTargetID;
}
function makeShadowSlot(compiler, resources, node, instructions, parentInjectorId) {
var auShadowSlot = _aureliaPal.DOM.createElement('au-shadow-slot');
_aureliaPal.DOM.replaceNode(auShadowSlot, node);
var auTargetID = makeIntoInstructionTarget(auShadowSlot);
var instruction = TargetInstruction.shadowSlot(parentInjectorId);
instruction.slotName = node.getAttribute('name') || ShadowDOM.defaultSlotKey;
instruction.slotDestination = node.getAttribute('slot');
if (node.innerHTML.trim()) {
var fragment = _aureliaPal.DOM.createDocumentFragment();
var _child4 = void 0;
while (_child4 = node.firstChild) {
fragment.appendChild(_child4);
}
instruction.slotFallbackFactory = compiler.compile(fragment, resources);
}
instructions[auTargetID] = instruction;
return auShadowSlot;
}
var ViewCompiler = exports.ViewCompiler = (_dec7 = (0, _aureliaDependencyInjection.inject)(BindingLanguage, ViewResources), _dec7(_class13 = function () {
function ViewCompiler(bindingLanguage, resources) {
this.bindingLanguage = bindingLanguage;
this.resources = resources;
}
ViewCompiler.prototype.compile = function compile(source, resources, compileInstruction) {
resources = resources || this.resources;
compileInstruction = compileInstruction || ViewCompileInstruction.normal;
source = typeof source === 'string' ? _aureliaPal.DOM.createTemplateFromMarkup(source) : source;
var content = void 0;
var part = void 0;
var cacheSize = void 0;
if (source.content) {
part = source.getAttribute('part');
cacheSize = source.getAttribute('view-cache');
content = _aureliaPal.DOM.adoptNode(source.content);
} else {
content = source;
}
compileInstruction.targetShadowDOM = compileInstruction.targetShadowDOM && _aureliaPal.FEATURE.shadowDOM;
resources._invokeHook('beforeCompile', content, resources, compileInstruction);
var instructions = {};
this._compileNode(content, resources, instructions, source, 'root', !compileInstruction.targetShadowDOM);
var firstChild = content.firstChild;
if (firstChild && firstChild.nodeType === 1) {
var targetId = firstChild.getAttribute('au-target-id');
if (targetId) {
var ins = instructions[targetId];
if (ins.shadowSlot || ins.lifting || ins.elementInstruction && !ins.elementInstruction.anchorIsContainer) {
content.insertBefore(_aureliaPal.DOM.createComment('view'), firstChild);
}
}
}
var factory = new ViewFactory(content, instructions, resources);
factory.surrogateInstruction = compileInstruction.compileSurrogate ? this._compileSurrogate(source, resources) : null;
factory.part = part;
if (cacheSize) {
factory.setCacheSize(cacheSize);
}
resources._invokeHook('afterCompile', factory);
return factory;
};
ViewCompiler.prototype._compileNode = function _compileNode(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {
switch (node.nodeType) {
case 1:
return this._compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM);
case 3:
var expression = resources.getBindingLanguage(this.bindingLanguage).inspectTextContent(resources, node.wholeText);
if (expression) {
var marker = _aureliaPal.DOM.createElement('au-marker');
var auTargetID = makeIntoInstructionTarget(marker);
(node.parentNode || parentNode).insertBefore(marker, node);
node.textContent = ' ';
instructions[auTargetID] = TargetInstruction.contentExpression(expression);
while (node.nextSibling && node.nextSibling.nodeType === 3) {
(node.parentNode || parentNode).removeChild(node.nextSibling);
}
} else {
while (node.nextSibling && node.nextSibling.nodeType === 3) {
node = node.nextSibling;
}
}
return node.nextSibling;
case 11:
var currentChild = node.firstChild;
while (currentChild) {
currentChild = this._compileNode(currentChild, resources, instructions, node, parentInjectorId, targetLightDOM);
}
break;
default:
break;
}
return node.nextSibling;
};
ViewCompiler.prototype._compileSurrogate = function _compileSurrogate(node, resources) {
var tagName = node.tagName.toLowerCase();
var attributes = node.attributes;
var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);
var knownAttribute = void 0;
var property = void 0;
var instruction = void 0;
var i = void 0;
var ii = void 0;
var attr = void 0;
var attrName = void 0;
var attrValue = void 0;
var info = void 0;
var type = void 0;
var expressions = [];
var expression = void 0;
var behaviorInstructions = [];
var values = {};
var hasValues = false;
var providers = [];
for (i = 0, ii = attributes.length; i < ii; ++i) {
attr = attributes[i];
attrName = attr.name;
attrValue = attr.value;
info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);
type = resources.getAttribute(info.attrName);
if (type) {
knownAttribute = resources.mapAttribute(info.attrName);
if (knownAttribute) {
property = type.attributes[knownAttribute];
if (property) {
info.defaultBindingMode = property.defaultBindingMode;
if (!info.command && !info.expression) {
info.command = property.hasOptions ? 'options' : null;
}
if (info.command && info.command !== 'options' && type.primaryProperty) {
var primaryProperty = type.primaryProperty;
attrName = info.attrName = primaryProperty.name;
info.defaultBindingMode = primaryProperty.defaultBindingMode;
}
}
}
}
instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);
if (instruction) {
if (instruction.alteredAttr) {
type = resources.getAttribute(instruction.attrName);
}
if (instruction.discrete) {
expressions.push(instruction);
} else {
if (type) {
instruction.type = type;
this._configureProperties(instruction, resources);
if (type.liftsContent) {
throw new Error('You cannot place a template controller on a surrogate element.');
} else {
behaviorInstructions.push(instruction);
}
} else {
expressions.push(instruction.attributes[instruction.attrName]);
}
}
} else {
if (type) {
instruction = BehaviorInstruction.attribute(attrName, type);
instruction.attributes[resources.mapAttribute(attrName)] = attrValue;
if (type.liftsContent) {
throw new Error('You cannot place a template controller on a surrogate element.');
} else {
behaviorInstructions.push(instruction);
}
} else if (attrName !== 'id' && attrName !== 'part' && attrName !== 'replace-part') {
hasValues = true;
values[attrName] = attrValue;
}
}
}
if (expressions.length || behaviorInstructions.length || hasValues) {
for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {
instruction = behaviorInstructions[i];
instruction.type.compile(this, resources, node, instruction);
providers.push(instruction.type.target);
}
for (i = 0, ii = expressions.length; i < ii; ++i) {
expression = expressions[i];
if (expression.attrToRemove !== undefined) {
node.removeAttribute(expression.attrToRemove);
}
}
return TargetInstruction.surrogate(providers, behaviorInstructions, expressions, values);
}
return null;
};
ViewCompiler.prototype._compileElement = function _compileElement(node, resources, instructions, parentNode, parentInjectorId, targetLightDOM) {
var tagName = node.tagName.toLowerCase();
var attributes = node.attributes;
var expressions = [];
var expression = void 0;
var behaviorInstructions = [];
var providers = [];
var bindingLanguage = resources.getBindingLanguage(this.bindingLanguage);
var liftingInstruction = void 0;
var viewFactory = void 0;
var type = void 0;
var elementInstruction = void 0;
var elementProperty = void 0;
var i = void 0;
var ii = void 0;
var attr = void 0;
var attrName = void 0;
var attrValue = void 0;
var instruction = void 0;
var info = void 0;
var property = void 0;
var knownAttribute = void 0;
var auTargetID = void 0;
var injectorId = void 0;
if (tagName === 'slot') {
if (targetLightDOM) {
node = makeShadowSlot(this, resources, node, instructions, parentInjectorId);
}
return node.nextSibling;
} else if (tagName === 'template') {
viewFactory = this.compile(node, resources);
viewFactory.part = node.getAttribute('part');
} else {
type = resources.getElement(node.getAttribute('as-element') || tagName);
if (type) {
elementInstruction = BehaviorInstruction.element(node, type);
type.processAttributes(this, resources, node, attributes, elementInstruction);
behaviorInstructions.push(elementInstruction);
}
}
for (i = 0, ii = attributes.length; i < ii; ++i) {
attr = attributes[i];
attrName = attr.name;
attrValue = attr.value;
info = bindingLanguage.inspectAttribute(resources, tagName, attrName, attrValue);
if (targetLightDOM && info.attrName === 'slot') {
info.attrName = attrName = 'au-slot';
}
type = resources.getAttribute(info.attrName);
elementProperty = null;
if (type) {
knownAttribute = resources.mapAttribute(info.attrName);
if (knownAttribute) {
property = type.attributes[knownAttribute];
if (property) {
info.defaultBindingMode = property.defaultBindingMode;
if (!info.command && !info.expression) {
info.command = property.hasOptions ? 'options' : null;
}
if (info.command && info.command !== 'options' && type.primaryProperty) {
var primaryProperty = type.primaryProperty;
attrName = info.attrName = primaryProperty.name;
info.defaultBindingMode = primaryProperty.defaultBindingMode;
}
}
}
} else if (elementInstruction) {
elementProperty = elementInstruction.type.attributes[info.attrName];
if (elementProperty) {
info.defaultBindingMode = elementProperty.defaultBindingMode;
}
}
if (elementProperty) {
instruction = bindingLanguage.createAttributeInstruction(resources, node, info, elementInstruction);
} else {
instruction = bindingLanguage.createAttributeInstruction(resources, node, info, undefined, type);
}
if (instruction) {
if (instruction.alteredAttr) {
type = resources.getAttribute(instruction.attrName);
}
if (instruction.discrete) {
expressions.push(instruction);
} else {
if (type) {
instruction.type = type;
this._configureProperties(instruction, resources);
if (type.liftsContent) {
instruction.originalAttrName = attrName;
liftingInstruction = instruction;
break;
} else {
behaviorInstructions.push(instruction);
}
} else if (elementProperty) {
elementInstruction.attributes[info.attrName].targetProperty = elementProperty.name;
} else {
expressions.push(instruction.attributes[instruction.attrName]);
}
}
} else {
if (type) {
instruction = BehaviorInstruction.attribute(attrName, type);
instruction.attributes[resources.mapAttribute(attrName)] = attrValue;
if (type.liftsContent) {
instruction.originalAttrName = attrName;
liftingInstruction = instruction;
break;
} else {
behaviorInstructions.push(instruction);
}
} else if (elementProperty) {
elementInstruction.attributes[attrName] = attrValue;
}
}
}
if (liftingInstruction) {
liftingInstruction.viewFactory = viewFactory;
node = liftingInstruction.type.compile(this, resources, node, liftingInstruction, parentNode);
auTargetID = makeIntoInstructionTarget(node);
instructions[auTargetID] = TargetInstruction.lifting(parentInjectorId, liftingInstruction);
} else {
if (expressions.length || behaviorInstructions.length) {
injectorId = behaviorInstructions.length ? getNextInjectorId() : false;
for (i = 0, ii = behaviorInstructions.length; i < ii; ++i) {
instruction = behaviorInstructions[i];
instruction.type.compile(this, resources, node, instruction, parentNode);
providers.push(instruction.type.target);
}
for (i = 0, ii = expressions.length; i < ii; ++i) {
expression = expressions[i];
if (expression.attrToRemove !== undefined) {
node.removeAttribute(expression.attrToRemove);
}
}
auTargetID = makeIntoInstructionTarget(node);
instructions[auTargetID] = TargetInstruction.normal(injectorId, parentInjectorId, providers, behaviorInstructions, expressions, elementInstruction);
}
if (elementInstruction && elementInstruction.skipContentProcessing) {
return node.nextSibling;
}
var currentChild = node.firstChild;
while (currentChild) {
currentChild = this._compileNode(currentChild, resources, instructions, node, injectorId || parentInjectorId, targetLightDOM);
}
}
return node.nextSibling;
};
ViewCompiler.prototype._configureProperties = function _configureProperties(instruction, resources) {
var type = instruction.type;
var attrName = instruction.attrName;
var attributes = instruction.attributes;
var property = void 0;
var key = void 0;
var value = void 0;
var knownAttribute = resources.mapAttribute(attrName);
if (knownAttribute && attrName in attributes && knownAttribute !== attrName) {
attributes[knownAttribute] = attributes[attrName];
delete attributes[attrName];
}
for (key in attributes) {
value = attributes[key];
if (value !== null && (typeof value === 'undefined' ? 'undefined' : _typeof(value)) === 'object') {
property = type.attributes[key];
if (property !== undefined) {
value.targetProperty = property.name;
} else {
value.targetProperty = key;
}
}
}
};
return ViewCompiler;
}()) || _class13);
var ResourceModule = exports.ResourceModule = function () {
function ResourceModule(moduleId) {
this.id = moduleId;
this.moduleInstance = null;
this.mainResource = null;
this.resources = null;
this.viewStrategy = null;
this.isInitialized = false;
this.onLoaded = null;
this.loadContext = null;
}
ResourceModule.prototype.initialize = function initialize(container) {
var current = this.mainResource;
var resources = this.resources;
var vs = this.viewStrategy;
if (this.isInitialized) {
return;
}
this.isInitialized = true;
if (current !== undefined) {
current.metadata.viewStrategy = vs;
current.initialize(container);
}
for (var i = 0, ii = resources.length; i < ii; ++i) {
current = resources[i];
current.metadata.viewStrategy = vs;
current.initialize(container);
}
};
ResourceModule.prototype.register = function register(registry, name) {
var main = this.mainResource;
var resources = this.resources;
if (main !== undefined) {
main.register(registry, name);
name = null;
}
for (var i = 0, ii = resources.length; i < ii; ++i) {
resources[i].register(registry, name);
name = null;
}
};
ResourceModule.prototype.load = function load(container, loadContext) {
if (this.onLoaded !== null) {
return this.loadContext === loadContext ? Promise.resolve() : this.onLoaded;
}
var main = this.mainResource;
var resources = this.resources;
var loads = void 0;
if (main !== undefined) {
loads = new Array(resources.length + 1);
loads[0] = main.load(container, loadContext);
for (var i = 0, ii = resources.length; i < ii; ++i) {
loads[i + 1] = resources[i].load(container, loadContext);
}
} else {
loads = new Array(resources.length);
for (var _i = 0, _ii = resources.length; _i < _ii; ++_i) {
loads[_i] = resources[_i].load(container, loadContext);
}
}
this.loadContext = loadContext;
this.onLoaded = Promise.all(loads);
return this.onLoaded;
};
return ResourceModule;
}();
var ResourceDescription = exports.ResourceDescription = function () {
function ResourceDescription(key, exportedValue, resourceTypeMeta) {
if (!resourceTypeMeta) {
resourceTypeMeta = _aureliaMetadata.metadata.get(_aureliaMetadata.metadata.resource, exportedValue);
if (!resourceTypeMeta) {
resourceTypeMeta = new HtmlBehaviorResource();
resourceTypeMeta.elementName = _hyphenate(key);
_aureliaMetadata.metadata.define(_aureliaMetadata.metadata.resource, resourceTypeMeta, exportedValue);
}
}
if (resourceTypeMeta instanceof HtmlBehaviorResource) {
if (resourceTypeMeta.elementName === undefined) {
resourceTypeMeta.elementName = _hyphenate(key);
} else if (resourceTypeMeta.attributeName === undefined) {
resourceTypeMeta.attributeName = _hyphenate(key);
} else if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {
HtmlBehaviorResource.convention(key, resourceTypeMeta);
}
} else if (!resourceTypeMeta.name) {
resourceTypeMeta.name = _hyphenate(key);
}
this.metadata = resourceTypeMeta;
this.value = exportedValue;
}
ResourceDescription.prototype.initialize = function initialize(container) {
this.metadata.initialize(container, this.value);
};
ResourceDescription.prototype.register = function register(registry, name) {
this.metadata.register(registry, name);
};
ResourceDescription.prototype.load = function load(container, loadContext) {
return this.metadata.load(container, this.value, loadContext);
};
return ResourceDescription;
}();
var ModuleAnalyzer = exports.ModuleAnalyzer = function () {
function ModuleAnalyzer() {
this.cache = Object.create(null);
}
ModuleAnalyzer.prototype.getAnalysis = function getAnalysis(moduleId) {
return this.cache[moduleId];
};
ModuleAnalyzer.prototype.analyze = function analyze(moduleId, moduleInstance, mainResourceKey) {
var mainResource = void 0;
var fallbackValue = void 0;
var fallbackKey = void 0;
var resourceTypeMeta = void 0;
var key = void 0;
var exportedValue = void 0;
var resources = [];
var conventional = void 0;
var vs = void 0;
var resourceModule = void 0;
resourceModule = this.cache[moduleId];
if (resourceModule) {
return resourceModule;
}
resourceModule = new ResourceModule(moduleId);
this.cache[moduleId] = resourceModule;
if (typeof moduleInstance === 'function') {
moduleInstance = { 'default': moduleInstance };
}
if (mainResourceKey) {
mainResource = new ResourceDescription(mainResourceKey, moduleInstance[mainResourceKey]);
}
for (key in moduleInstance) {
exportedValue = moduleInstance[key];
if (key === mainResourceKey || typeof exportedValue !== 'function') {
continue;
}
resourceTypeMeta = _aureliaMetadata.metadata.get(_aureliaMetadata.metadata.resource, exportedValue);
if (resourceTypeMeta) {
if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {
HtmlBehaviorResource.convention(key, resourceTypeMeta);
}
if (resourceTypeMeta.attributeName === null && resourceTypeMeta.elementName === null) {
resourceTypeMeta.elementName = _hyphenate(key);
}
if (!mainResource && resourceTypeMeta instanceof HtmlBehaviorResource && resourceTypeMeta.elementName !== null) {
mainResource = new ResourceDescription(key, exportedValue, resourceTypeMeta);
} else {
resources.push(new ResourceDescription(key, exportedValue, resourceTypeMeta));
}
} else if (viewStrategy.decorates(exportedValue)) {
vs = exportedValue;
} else if (exportedValue instanceof _aureliaLoader.TemplateRegistryEntry) {
vs = new TemplateRegistryViewStrategy(moduleId, exportedValue);
} else {
if (conventional = HtmlBehaviorResource.convention(key)) {
if (conventional.elementName !== null && !mainResource) {
mainResource = new ResourceDescription(key, exportedValue, conventional);
} else {
resources.push(new ResourceDescription(key, exportedValue, conventional));
}
_aureliaMetadata.metadata.define(_aureliaMetadata.metadata.resource, conventional, exportedValue);
} else if (conventional = _aureliaBinding.ValueConverterResource.convention(key) || _aureliaBinding.BindingBehaviorResource.convention(key) || ViewEngineHooksResource.convention(key)) {
resources.push(new ResourceDescription(key, exportedValue, conventional));
_aureliaMetadata.metadata.define(_aureliaMetadata.metadata.resource, conventional, exportedValue);
} else if (!fallbackValue) {
fallbackValue = exportedValue;
fallbackKey = key;
}
}
}
if (!mainResource && fallbackValue) {
mainResource = new ResourceDescription(fallbackKey, fallbackValue);
}
resourceModule.moduleInstance = moduleInstance;
resourceModule.mainResource = mainResource;
resourceModule.resources = resources;
resourceModule.viewStrategy = vs;
return resourceModule;
};
return ModuleAnalyzer;
}();
var logger = LogManager.getLogger('templating');
function ensureRegistryEntry(loader, urlOrRegistryEntry) {
if (urlOrRegistryEntry instanceof _aureliaLoader.TemplateRegistryEntry) {
return Promise.resolve(urlOrRegistryEntry);
}
return loader.loadTemplate(urlOrRegistryEntry);
}
var ProxyViewFactory = function () {
function ProxyViewFactory(promise) {
var _this9 = this;
promise.then(function (x) {
return _this9.viewFactory = x;
});
}
ProxyViewFactory.prototype.create = function create(container, bindingContext, createInstruction, element) {
return this.viewFactory.create(container, bindingContext, createInstruction, element);
};
ProxyViewFactory.prototype.setCacheSize = function setCacheSize(size, doNotOverrideIfAlreadySet) {
this.viewFactory.setCacheSize(size, doNotOverrideIfAlreadySet);
};
ProxyViewFactory.prototype.getCachedView = function getCachedView() {
return this.viewFactory.getCachedView();
};
ProxyViewFactory.prototype.returnViewToCache = function returnViewToCache(view) {
this.viewFactory.returnViewToCache(view);
};
_createClass(ProxyViewFactory, [{
key: 'isCaching',
get: function get$$1() {
return this.viewFactory.isCaching;
}
}]);
return ProxyViewFactory;
}();
var ViewEngine = exports.ViewEngine = (_dec8 = (0, _aureliaDependencyInjection.inject)(_aureliaLoader.Loader, _aureliaDependencyInjection.Container, ViewCompiler, ModuleAnalyzer, ViewResources), _dec8(_class14 = (_temp4 = _class15 = function () {
function ViewEngine(loader, container, viewCompiler, moduleAnalyzer, appResources) {
this.loader = loader;
this.container = container;
this.viewCompiler = viewCompiler;
this.moduleAnalyzer = moduleAnalyzer;
this.appResources = appResources;
this._pluginMap = {};
var auSlotBehavior = new HtmlBehaviorResource();
auSlotBehavior.attributeName = 'au-slot';
auSlotBehavior.initialize(container, SlotCustomAttribute);
auSlotBehavior.register(appResources);
}
ViewEngine.prototype.addResourcePlugin = function addResourcePlugin(extension, implementation) {
var name = extension.replace('.', '') + '-resource-plugin';
this._pluginMap[extension] = name;
this.loader.addPlugin(name, implementation);
};
ViewEngine.prototype.loadViewFactory = function loadViewFactory(urlOrRegistryEntry, compileInstruction, loadContext, target) {
var _this10 = this;
loadContext = loadContext || new ResourceLoadContext();
return ensureRegistryEntry(this.loader, urlOrRegistryEntry).then(function (registryEntry) {
if (registryEntry.onReady) {
if (!loadContext.hasDependency(urlOrRegistryEntry)) {
loadContext.addDependency(urlOrRegistryEntry);
return registryEntry.onReady;
}
if (registryEntry.template === null) {
return registryEntry.onReady;
}
return Promise.resolve(new ProxyViewFactory(registryEntry.onReady));
}
loadContext.addDependency(urlOrRegistryEntry);
registryEntry.onReady = _this10.loadTemplateResources(registryEntry, compileInstruction, loadContext, target).then(function (resources) {
registryEntry.resources = resources;
if (registryEntry.template === null) {
return registryEntry.factory = null;
}
var viewFactory = _this10.viewCompiler.compile(registryEntry.template, resources, compileInstruction);
return registryEntry.factory = viewFactory;
});
return registryEntry.onReady;
});
};
ViewEngine.prototype.loadTemplateResources = function loadTemplateResources(registryEntry, compileInstruction, loadContext, target) {
var resources = new ViewResources(this.appResources, registryEntry.address);
var dependencies = registryEntry.dependencies;
var importIds = void 0;
var names = void 0;
compileInstruction = compileInstruction || ViewCompileInstruction.normal;
if (dependencies.length === 0 && !compileInstruction.associatedModuleId) {
return Promise.resolve(resources);
}
importIds = dependencies.map(function (x) {
return x.src;
});
names = dependencies.map(function (x) {
return x.name;
});
logger.debug('importing resources for ' + registryEntry.address, importIds);
if (target) {
var viewModelRequires = _aureliaMetadata.metadata.get(ViewEngine.viewModelRequireMetadataKey, target);
if (viewModelRequires) {
var templateImportCount = importIds.length;
for (var i = 0, ii = viewModelRequires.length; i < ii; ++i) {
var req = viewModelRequires[i];
var importId = typeof req === 'function' ? _aureliaMetadata.Origin.get(req).moduleId : (0, _aureliaPath.relativeToFile)(req.src || req, registryEntry.address);
if (importIds.indexOf(importId) === -1) {
importIds.push(importId);
names.push(req.as);
}
}
logger.debug('importing ViewModel resources for ' + compileInstruction.associatedModuleId, importIds.slice(templateImportCount));
}
}
return this.importViewResources(importIds, names, resources, compileInstruction, loadContext);
};
ViewEngine.prototype.importViewModelResource = function importViewModelResource(moduleImport, moduleMember) {
var _this11 = this;
return this.loader.loadModule(moduleImport).then(function (viewModelModule) {
var normalizedId = _aureliaMetadata.Origin.get(viewModelModule).moduleId;
var resourceModule = _this11.moduleAnalyzer.analyze(normalizedId, viewModelModule, moduleMember);
if (!resourceModule.mainResource) {
throw new Error('No view model found in module "' + moduleImport + '".');
}
resourceModule.initialize(_this11.container);
return resourceModule.mainResource;
});
};
ViewEngine.prototype.importViewResources = function importViewResources(moduleIds, names, resources, compileInstruction, loadContext) {
var _this12 = this;
loadContext = loadContext || new ResourceLoadContext();
compileInstruction = compileInstruction || ViewCompileInstruction.normal;
moduleIds = moduleIds.map(function (x) {
return _this12._applyLoaderPlugin(x);
});
return this.loader.loadAllModules(moduleIds).then(function (imports) {
var i = void 0;
var ii = void 0;
var analysis = void 0;
var normalizedId = void 0;
var current = void 0;
var associatedModule = void 0;
var container = _this12.container;
var moduleAnalyzer = _this12.moduleAnalyzer;
var allAnalysis = new Array(imports.length);
for (i = 0, ii = imports.length; i < ii; ++i) {
current = imports[i];
normalizedId = _aureliaMetadata.Origin.get(current).moduleId;
analysis = moduleAnalyzer.analyze(normalizedId, current);
analysis.initialize(container);
analysis.register(resources, names[i]);
allAnalysis[i] = analysis;
}
if (compileInstruction.associatedModuleId) {
associatedModule = moduleAnalyzer.getAnalysis(compileInstruction.associatedModuleId);
if (associatedModule) {
associatedModule.register(resources);
}
}
for (i = 0, ii = allAnalysis.length; i < ii; ++i) {
allAnalysis[i] = allAnalysis[i].load(container, loadContext);
}
return Promise.all(allAnalysis).then(function () {
return resources;
});
});
};
ViewEngine.prototype._applyLoaderPlugin = function _applyLoaderPlugin(id) {
var index = id.lastIndexOf('.');
if (index !== -1) {
var ext = id.substring(index);
var pluginName = this._pluginMap[ext];
if (pluginName === undefined) {
return id;
}
return this.loader.applyPluginToUrl(id, pluginName);
}
return id;
};
return ViewEngine;
}(), _class15.viewModelRequireMetadataKey = 'aurelia:view-model-require', _temp4)) || _class14);
var Controller = exports.Controller = function () {
function Controller(behavior, instruction, viewModel, container) {
this.behavior = behavior;
this.instruction = instruction;
this.viewModel = viewModel;
this.isAttached = false;
this.view = null;
this.isBound = false;
this.scope = null;
this.container = container;
this.elementEvents = container.elementEvents || null;
var observerLookup = behavior.observerLocator.getOrCreateObserversLookup(viewModel);
var handlesBind = behavior.handlesBind;
var attributes = instruction.attributes;
var boundProperties = this.boundProperties = [];
var properties = behavior.properties;
var i = void 0;
var ii = void 0;
behavior._ensurePropertiesDefined(viewModel, observerLookup);
for (i = 0, ii = properties.length; i < ii; ++i) {
properties[i]._initialize(viewModel, observerLookup, attributes, handlesBind, boundProperties);
}
}
Controller.prototype.created = function created(owningView) {
if (this.behavior.handlesCreated) {
this.viewModel.created(owningView, this.view);
}
};
Controller.prototype.automate = function automate(overrideContext, owningView) {
this.view.bindingContext = this.viewModel;
this.view.overrideContext = overrideContext || (0, _aureliaBinding.createOverrideContext)(this.viewModel);
this.view._isUserControlled = true;
if (this.behavior.handlesCreated) {
this.viewModel.created(owningView || null, this.view);
}
this.bind(this.view);
};
Controller.prototype.bind = function bind(scope) {
var skipSelfSubscriber = this.behavior.handlesBind;
var boundProperties = this.boundProperties;
var i = void 0;
var ii = void 0;
var x = void 0;
var observer = void 0;
var selfSubscriber = void 0;
if (this.isBound) {
if (this.scope === scope) {
return;
}
this.unbind();
}
this.isBound = true;
this.scope = scope;
for (i = 0, ii = boundProperties.length; i < ii; ++i) {
x = boundProperties[i];
observer = x.observer;
selfSubscriber = observer.selfSubscriber;
observer.publishing = false;
if (skipSelfSubscriber) {
observer.selfSubscriber = null;
}
x.binding.bind(scope);
observer.call();
observer.publishing = true;
observer.selfSubscriber = selfSubscriber;
}
var overrideContext = void 0;
if (this.view !== null) {
if (skipSelfSubscriber) {
this.view.viewModelScope = scope;
}
if (this.viewModel === scope.overrideContext.bindingContext) {
overrideContext = scope.overrideContext;
} else if (this.instruction.inheritBindingContext) {
overrideContext = (0, _aureliaBinding.createOverrideContext)(this.viewModel, scope.overrideContext);
} else {
overrideContext = (0, _aureliaBinding.createOverrideContext)(this.viewModel);
overrideContext.__parentOverrideContext = scope.overrideContext;
}
this.view.bind(this.viewModel, overrideContext);
} else if (skipSelfSubscriber) {
overrideContext = scope.overrideContext;
if (scope.overrideContext.__parentOverrideContext !== undefined && this.viewModel.viewFactory && this.viewModel.viewFactory.factoryCreateInstruction.partReplacements) {
overrideContext = Object.assign({}, scope.overrideContext);
overrideContext.parentOverrideContext = scope.overrideContext.__parentOverrideContext;
}
this.viewModel.bind(scope.bindingContext, overrideContext);
}
};
Controller.prototype.unbind = function unbind() {
if (this.isBound) {
var _boundProperties = this.boundProperties;
var _i2 = void 0;
var _ii2 = void 0;
this.isBound = false;
this.scope = null;
if (this.view !== null) {
this.view.unbind();
}
if (this.behavior.handlesUnbind) {
this.viewModel.unbind();
}
if (this.elementEvents !== null) {
this.elementEvents.disposeAll();
}
for (_i2 = 0, _ii2 = _boundProperties.length; _i2 < _ii2; ++_i2) {
_boundProperties[_i2].binding.unbind();
}
}
};
Controller.prototype.attached = function attached() {
if (this.isAttached) {
return;
}
this.isAttached = true;
if (this.behavior.handlesAttached) {
this.viewModel.attached();
}
if (this.view !== null) {
this.view.attached();
}
};
Controller.prototype.detached = function detached() {
if (this.isAttached) {
this.isAttached = false;
if (this.view !== null) {
this.view.detached();
}
if (this.behavior.handlesDetached) {
this.viewModel.detached();
}
}
};
return Controller;
}();
var BehaviorPropertyObserver = exports.BehaviorPropertyObserver = (_dec9 = (0, _aureliaBinding.subscriberCollection)(), _dec9(_class16 = function () {
function BehaviorPropertyObserver(taskQueue, obj, propertyName, selfSubscriber, initialValue) {
this.taskQueue = taskQueue;
this.obj = obj;
this.propertyName = propertyName;
this.notqueued = true;
this.publishing = false;
this.selfSubscriber = selfSubscriber;
this.currentValue = this.oldValue = initialValue;
}
BehaviorPropertyObserver.prototype.getValue = function getValue() {
return this.currentValue;
};
BehaviorPropertyObserver.prototype.setValue = function setValue(newValue) {
var oldValue = this.currentValue;
if (oldValue !== newValue) {
this.oldValue = oldValue;
this.currentValue = newValue;
if (this.publishing && this.notqueued) {
if (this.taskQueue.flushing) {
this.call();
} else {
this.notqueued = false;
this.taskQueue.queueMicroTask(this);
}
}
}
};
BehaviorPropertyObserver.prototype.call = function call() {
var oldValue = this.oldValue;
var newValue = this.currentValue;
this.notqueued = true;
if (newValue === oldValue) {
return;
}
if (this.selfSubscriber) {
this.selfSubscriber(newValue, oldValue);
}
this.callSubscribers(newValue, oldValue);
this.oldValue = newValue;
};
BehaviorPropertyObserver.prototype.subscribe = function subscribe(context, callable) {
this.addSubscriber(context, callable);
};
BehaviorPropertyObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
this.removeSubscriber(context, callable);
};
return BehaviorPropertyObserver;
}()) || _class16);
function getObserver(behavior, instance, name) {
var lookup = instance.__observers__;
if (lookup === undefined) {
if (!behavior.isInitialized) {
behavior.initialize(_aureliaDependencyInjection.Container.instance || new _aureliaDependencyInjection.Container(), instance.constructor);
}
lookup = behavior.observerLocator.getOrCreateObserversLookup(instance);
behavior._ensurePropertiesDefined(instance, lookup);
}
return lookup[name];
}
var BindableProperty = exports.BindableProperty = function () {
function BindableProperty(nameOrConfig) {
if (typeof nameOrConfig === 'string') {
this.name = nameOrConfig;
} else {
Object.assign(this, nameOrConfig);
}
this.attribute = this.attribute || _hyphenate(this.name);
if (this.defaultBindingMode === null || this.defaultBindingMode === undefined) {
this.defaultBindingMode = _aureliaBinding.bindingMode.oneWay;
}
this.changeHandler = this.changeHandler || null;
this.owner = null;
this.descriptor = null;
}
BindableProperty.prototype.registerWith = function registerWith(target, behavior, descriptor) {
behavior.properties.push(this);
behavior.attributes[this.attribute] = this;
this.owner = behavior;
if (descriptor) {
this.descriptor = descriptor;
return this._configureDescriptor(behavior, descriptor);
}
return undefined;
};
BindableProperty.prototype._configureDescriptor = function _configureDescriptor(behavior, descriptor) {
var name = this.name;
descriptor.configurable = true;
descriptor.enumerable = true;
if ('initializer' in descriptor) {
this.defaultValue = descriptor.initializer;
delete descriptor.initializer;
delete descriptor.writable;
}
if ('value' in descriptor) {
this.defaultValue = descriptor.value;
delete descriptor.value;
delete descriptor.writable;
}
descriptor.get = function () {
return getObserver(behavior, this, name).getValue();
};
descriptor.set = function (value) {
getObserver(behavior, this, name).setValue(value);
};
descriptor.get.getObserver = function (obj) {
return getObserver(behavior, obj, name);
};
return descriptor;
};
BindableProperty.prototype.defineOn = function defineOn(target, behavior) {
var name = this.name;
var handlerName = void 0;
if (this.changeHandler === null) {
handlerName = name + 'Changed';
if (handlerName in target.prototype) {
this.changeHandler = handlerName;
}
}
if (this.descriptor === null) {
Object.defineProperty(target.prototype, name, this._configureDescriptor(behavior, {}));
}
};
BindableProperty.prototype.createObserver = function createObserver(viewModel) {
var selfSubscriber = null;
var defaultValue = this.defaultValue;
var changeHandlerName = this.changeHandler;
var name = this.name;
var initialValue = void 0;
if (this.hasOptions) {
return undefined;
}
if (changeHandlerName in viewModel) {
if ('propertyChanged' in viewModel) {
selfSubscriber = function selfSubscriber(newValue, oldValue) {
viewModel[changeHandlerName](newValue, oldValue);
viewModel.propertyChanged(name, newValue, oldValue);
};
} else {
selfSubscriber = function selfSubscriber(newValue, oldValue) {
return viewModel[changeHandlerName](newValue, oldValue);
};
}
} else if ('propertyChanged' in viewModel) {
selfSubscriber = function selfSubscriber(newValue, oldValue) {
return viewModel.propertyChanged(name, newValue, oldValue);
};
} else if (changeHandlerName !== null) {
throw new Error('Change handler ' + changeHandlerName + ' was specified but not declared on the class.');
}
if (defaultValue !== undefined) {
initialValue = typeof defaultValue === 'function' ? defaultValue.call(viewModel) : defaultValue;
}
return new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, this.name, selfSubscriber, initialValue);
};
BindableProperty.prototype._initialize = function _initialize(viewModel, observerLookup, attributes, behaviorHandlesBind, boundProperties) {
var selfSubscriber = void 0;
var observer = void 0;
var attribute = void 0;
var defaultValue = this.defaultValue;
if (this.isDynamic) {
for (var key in attributes) {
this._createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, key, attributes[key], boundProperties);
}
} else if (!this.hasOptions) {
observer = observerLookup[this.name];
if (attributes !== null) {
selfSubscriber = observer.selfSubscriber;
attribute = attributes[this.attribute];
if (behaviorHandlesBind) {
observer.selfSubscriber = null;
}
if (typeof attribute === 'string') {
viewModel[this.name] = attribute;
observer.call();
} else if (attribute) {
boundProperties.push({ observer: observer, binding: attribute.createBinding(viewModel) });
} else if (defaultValue !== undefined) {
observer.call();
}
observer.selfSubscriber = selfSubscriber;
}
observer.publishing = true;
}
};
BindableProperty.prototype._createDynamicProperty = function _createDynamicProperty(viewModel, observerLookup, behaviorHandlesBind, name, attribute, boundProperties) {
var changeHandlerName = name + 'Changed';
var selfSubscriber = null;
var observer = void 0;
var info = void 0;
if (changeHandlerName in viewModel) {
if ('propertyChanged' in viewModel) {
selfSubscriber = function selfSubscriber(newValue, oldValue) {
viewModel[changeHandlerName](newValue, oldValue);
viewModel.propertyChanged(name, newValue, oldValue);
};
} else {
selfSubscriber = function selfSubscriber(newValue, oldValue) {
return viewModel[changeHandlerName](newValue, oldValue);
};
}
} else if ('propertyChanged' in viewModel) {
selfSubscriber = function selfSubscriber(newValue, oldValue) {
return viewModel.propertyChanged(name, newValue, oldValue);
};
}
observer = observerLookup[name] = new BehaviorPropertyObserver(this.owner.taskQueue, viewModel, name, selfSubscriber);
Object.defineProperty(viewModel, name, {
configurable: true,
enumerable: true,
get: observer.getValue.bind(observer),
set: observer.setValue.bind(observer)
});
if (behaviorHandlesBind) {
observer.selfSubscriber = null;
}
if (typeof attribute === 'string') {
viewModel[name] = attribute;
observer.call();
} else if (attribute) {
info = { observer: observer, binding: attribute.createBinding(viewModel) };
boundProperties.push(info);
}
observer.publishing = true;
observer.selfSubscriber = selfSubscriber;
};
return BindableProperty;
}();
var lastProviderId = 0;
function nextProviderId() {
return ++lastProviderId;
}
function doProcessContent() {
return true;
}
function doProcessAttributes() {}
var HtmlBehaviorResource = exports.HtmlBehaviorResource = function () {
function HtmlBehaviorResource() {
this.elementName = null;
this.attributeName = null;
this.attributeDefaultBindingMode = undefined;
this.liftsContent = false;
this.targetShadowDOM = false;
this.shadowDOMOptions = null;
this.processAttributes = doProcessAttributes;
this.processContent = doProcessContent;
this.usesShadowDOM = false;
this.childBindings = null;
this.hasDynamicOptions = false;
this.containerless = false;
this.properties = [];
this.attributes = {};
this.isInitialized = false;
this.primaryProperty = null;
}
HtmlBehaviorResource.convention = function convention(name, existing) {
var behavior = void 0;
if (name.endsWith('CustomAttribute')) {
behavior = existing || new HtmlBehaviorResource();
behavior.attributeName = _hyphenate(name.substring(0, name.length - 15));
}
if (name.endsWith('CustomElement')) {
behavior = existing || new HtmlBehaviorResource();
behavior.elementName = _hyphenate(name.substring(0, name.length - 13));
}
return behavior;
};
HtmlBehaviorResource.prototype.addChildBinding = function addChildBinding(behavior) {
if (this.childBindings === null) {
this.childBindings = [];
}
this.childBindings.push(behavior);
};
HtmlBehaviorResource.prototype.initialize = function initialize(container, target) {
var proto = target.prototype;
var properties = this.properties;
var attributeName = this.attributeName;
var attributeDefaultBindingMode = this.attributeDefaultBindingMode;
var i = void 0;
var ii = void 0;
var current = void 0;
if (this.isInitialized) {
return;
}
this.isInitialized = true;
target.__providerId__ = nextProviderId();
this.observerLocator = container.get(_aureliaBinding.ObserverLocator);
this.taskQueue = container.get(_aureliaTaskQueue.TaskQueue);
this.target = target;
this.usesShadowDOM = this.targetShadowDOM && _aureliaPal.FEATURE.shadowDOM;
this.handlesCreated = 'created' in proto;
this.handlesBind = 'bind' in proto;
this.handlesUnbind = 'unbind' in proto;
this.handlesAttached = 'attached' in proto;
this.handlesDetached = 'detached' in proto;
this.htmlName = this.elementName || this.attributeName;
if (attributeName !== null) {
if (properties.length === 0) {
new BindableProperty({
name: 'value',
changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,
attribute: attributeName,
defaultBindingMode: attributeDefaultBindingMode
}).registerWith(target, this);
}
current = properties[0];
if (properties.length === 1 && current.name === 'value') {
current.isDynamic = current.hasOptions = this.hasDynamicOptions;
current.defineOn(target, this);
} else {
for (i = 0, ii = properties.length; i < ii; ++i) {
properties[i].defineOn(target, this);
if (properties[i].primaryProperty) {
if (this.primaryProperty) {
throw new Error('Only one bindable property on a custom element can be defined as the default');
}
this.primaryProperty = properties[i];
}
}
current = new BindableProperty({
name: 'value',
changeHandler: 'valueChanged' in proto ? 'valueChanged' : null,
attribute: attributeName,
defaultBindingMode: attributeDefaultBindingMode
});
current.hasOptions = true;
current.registerWith(target, this);
}
} else {
for (i = 0, ii = properties.length; i < ii; ++i) {
properties[i].defineOn(target, this);
}
}
};
HtmlBehaviorResource.prototype.register = function register(registry, name) {
var _this13 = this;
if (this.attributeName !== null) {
registry.registerAttribute(name || this.attributeName, this, this.attributeName);
if (Array.isArray(this.aliases)) {
this.aliases.forEach(function (alias) {
registry.registerAttribute(alias, _this13, _this13.attributeName);
});
}
}
if (this.elementName !== null) {
registry.registerElement(name || this.elementName, this);
}
};
HtmlBehaviorResource.prototype.load = function load(container, target, loadContext, viewStrategy, transientView) {
var _this14 = this;
var options = void 0;
if (this.elementName !== null) {
viewStrategy = container.get(ViewLocator).getViewStrategy(viewStrategy || this.viewStrategy || target);
options = new ViewCompileInstruction(this.targetShadowDOM, true);
if (!viewStrategy.moduleId) {
viewStrategy.moduleId = _aureliaMetadata.Origin.get(target).moduleId;
}
return viewStrategy.loadViewFactory(container.get(ViewEngine), options, loadContext, target).then(function (viewFactory) {
if (!transientView || !_this14.viewFactory) {
_this14.viewFactory = viewFactory;
}
return viewFactory;
});
}
return Promise.resolve(this);
};
HtmlBehaviorResource.prototype.compile = function compile(compiler, resources, node, instruction, parentNode) {
if (this.liftsContent) {
if (!instruction.viewFactory) {
var template = _aureliaPal.DOM.createElement('template');
var fragment = _aureliaPal.DOM.createDocumentFragment();
var cacheSize = node.getAttribute('view-cache');
var part = node.getAttribute('part');
node.removeAttribute(instruction.originalAttrName);
_aureliaPal.DOM.replaceNode(template, node, parentNode);
fragment.appendChild(node);
instruction.viewFactory = compiler.compile(fragment, resources);
if (part) {
instruction.viewFactory.part = part;
node.removeAttribute('part');
}
if (cacheSize) {
instruction.viewFactory.setCacheSize(cacheSize);
node.removeAttribute('view-cache');
}
node = template;
}
} else if (this.elementName !== null) {
var _partReplacements2 = {};
if (this.processContent(compiler, resources, node, instruction) && node.hasChildNodes()) {
var currentChild = node.firstChild;
var contentElement = this.usesShadowDOM ? null : _aureliaPal.DOM.createElement('au-content');
var nextSibling = void 0;
var toReplace = void 0;
while (currentChild) {
nextSibling = currentChild.nextSibling;
if (currentChild.tagName === 'TEMPLATE' && (toReplace = currentChild.getAttribute('replace-part'))) {
_partReplacements2[toReplace] = compiler.compile(currentChild, resources);
_aureliaPal.DOM.removeNode(currentChild, parentNode);
instruction.partReplacements = _partReplacements2;
} else if (contentElement !== null) {
if (currentChild.nodeType === 3 && _isAllWhitespace(currentChild)) {
_aureliaPal.DOM.removeNode(currentChild, parentNode);
} else {
contentElement.appendChild(currentChild);
}
}
currentChild = nextSibling;
}
if (contentElement !== null && contentElement.hasChildNodes()) {
node.appendChild(contentElement);
}
instruction.skipContentProcessing = false;
} else {
instruction.skipContentProcessing = true;
}
}
return node;
};
HtmlBehaviorResource.prototype.create = function create(container, instruction, element, bindings) {
var viewHost = void 0;
var au = null;
instruction = instruction || BehaviorInstruction.normal;
element = element || null;
bindings = bindings || null;
if (this.elementName !== null && element) {
if (this.usesShadowDOM) {
viewHost = element.attachShadow(this.shadowDOMOptions);
container.registerInstance(_aureliaPal.DOM.boundary, viewHost);
} else {
viewHost = element;
if (this.targetShadowDOM) {
container.registerInstance(_aureliaPal.DOM.boundary, viewHost);
}
}
}
if (element !== null) {
element.au = au = element.au || {};
}
var viewModel = instruction.viewModel || container.get(this.target);
var controller = new Controller(this, instruction, viewModel, container);
var childBindings = this.childBindings;
var viewFactory = void 0;
if (this.liftsContent) {
au.controller = controller;
} else if (this.elementName !== null) {
viewFactory = instruction.viewFactory || this.viewFactory;
container.viewModel = viewModel;
if (viewFactory) {
controller.view = viewFactory.create(container, instruction, element);
}
if (element !== null) {
au.controller = controller;
if (controller.view) {
if (!this.usesShadowDOM && (element.childNodes.length === 1 || element.contentElement)) {
var contentElement = element.childNodes[0] || element.contentElement;
controller.view.contentView = { fragment: contentElement };
contentElement.parentNode && _aureliaPal.DOM.removeNode(contentElement);
}
if (instruction.anchorIsContainer) {
if (childBindings !== null) {
for (var _i3 = 0, _ii3 = childBindings.length; _i3 < _ii3; ++_i3) {
controller.view.addBinding(childBindings[_i3].create(element, viewModel, controller));
}
}
controller.view.appendNodesTo(viewHost);
} else {
controller.view.insertNodesBefore(viewHost);
}
} else if (childBindings !== null) {
for (var _i4 = 0, _ii4 = childBindings.length; _i4 < _ii4; ++_i4) {
bindings.push(childBindings[_i4].create(element, viewModel, controller));
}
}
} else if (controller.view) {
controller.view.controller = controller;
if (childBindings !== null) {
for (var _i5 = 0, _ii5 = childBindings.length; _i5 < _ii5; ++_i5) {
controller.view.addBinding(childBindings[_i5].create(instruction.host, viewModel, controller));
}
}
} else if (childBindings !== null) {
for (var _i6 = 0, _ii6 = childBindings.length; _i6 < _ii6; ++_i6) {
bindings.push(childBindings[_i6].create(instruction.host, viewModel, controller));
}
}
} else if (childBindings !== null) {
for (var _i7 = 0, _ii7 = childBindings.length; _i7 < _ii7; ++_i7) {
bindings.push(childBindings[_i7].create(element, viewModel, controller));
}
}
if (au !== null) {
au[this.htmlName] = controller;
}
if (instruction.initiatedByBehavior && viewFactory) {
controller.view.created();
}
return controller;
};
HtmlBehaviorResource.prototype._ensurePropertiesDefined = function _ensurePropertiesDefined(instance, lookup) {
var properties = void 0;
var i = void 0;
var ii = void 0;
var observer = void 0;
if ('__propertiesDefined__' in lookup) {
return;
}
lookup.__propertiesDefined__ = true;
properties = this.properties;
for (i = 0, ii = properties.length; i < ii; ++i) {
observer = properties[i].createObserver(instance);
if (observer !== undefined) {
lookup[observer.propertyName] = observer;
}
}
};
return HtmlBehaviorResource;
}();
function createChildObserverDecorator(selectorOrConfig, all) {
return function (target, key, descriptor) {
var actualTarget = typeof key === 'string' ? target.constructor : target;
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, actualTarget);
if (typeof selectorOrConfig === 'string') {
selectorOrConfig = {
selector: selectorOrConfig,
name: key
};
}
if (descriptor) {
descriptor.writable = true;
descriptor.configurable = true;
}
selectorOrConfig.all = all;
r.addChildBinding(new ChildObserver(selectorOrConfig));
};
}
function children(selectorOrConfig) {
return createChildObserverDecorator(selectorOrConfig, true);
}
function child(selectorOrConfig) {
return createChildObserverDecorator(selectorOrConfig, false);
}
var ChildObserver = function () {
function ChildObserver(config) {
this.name = config.name;
this.changeHandler = config.changeHandler || this.name + 'Changed';
this.selector = config.selector;
this.all = config.all;
}
ChildObserver.prototype.create = function create(viewHost, viewModel, controller) {
return new ChildObserverBinder(this.selector, viewHost, this.name, viewModel, controller, this.changeHandler, this.all);
};
return ChildObserver;
}();
var noMutations = [];
function trackMutation(groupedMutations, binder, record) {
var mutations = groupedMutations.get(binder);
if (!mutations) {
mutations = [];
groupedMutations.set(binder, mutations);
}
mutations.push(record);
}
function onChildChange(mutations, observer) {
var binders = observer.binders;
var bindersLength = binders.length;
var groupedMutations = new Map();
for (var _i8 = 0, _ii8 = mutations.length; _i8 < _ii8; ++_i8) {
var record = mutations[_i8];
var added = record.addedNodes;
var removed = record.removedNodes;
for (var j = 0, jj = removed.length; j < jj; ++j) {
var node = removed[j];
if (node.nodeType === 1) {
for (var k = 0; k < bindersLength; ++k) {
var binder = binders[k];
if (binder.onRemove(node)) {
trackMutation(groupedMutations, binder, record);
}
}
}
}
for (var _j = 0, _jj = added.length; _j < _jj; ++_j) {
var _node = added[_j];
if (_node.nodeType === 1) {
for (var _k = 0; _k < bindersLength; ++_k) {
var _binder = binders[_k];
if (_binder.onAdd(_node)) {
trackMutation(groupedMutations, _binder, record);
}
}
}
}
}
groupedMutations.forEach(function (value, key) {
if (key.changeHandler !== null) {
key.viewModel[key.changeHandler](value);
}
});
}
var ChildObserverBinder = function () {
function ChildObserverBinder(selector, viewHost, property, viewModel, controller, changeHandler, all) {
this.selector = selector;
this.viewHost = viewHost;
this.property = property;
this.viewModel = viewModel;
this.controller = controller;
this.changeHandler = changeHandler in viewModel ? changeHandler : null;
this.usesShadowDOM = controller.behavior.usesShadowDOM;
this.all = all;
if (!this.usesShadowDOM && controller.view && controller.view.contentView) {
this.contentView = controller.view.contentView;
} else {
this.contentView = null;
}
}
ChildObserverBinder.prototype.matches = function matches(element) {
if (element.matches(this.selector)) {
if (this.contentView === null) {
return true;
}
var contentView = this.contentView;
var assignedSlot = element.auAssignedSlot;
if (assignedSlot && assignedSlot.projectFromAnchors) {
var anchors = assignedSlot.projectFromAnchors;
for (var _i9 = 0, _ii9 = anchors.length; _i9 < _ii9; ++_i9) {
if (anchors[_i9].auOwnerView === contentView) {
return true;
}
}
return false;
}
return element.auOwnerView === contentView;
}
return false;
};
ChildObserverBinder.prototype.bind = function bind(source) {
var viewHost = this.viewHost;
var viewModel = this.viewModel;
var observer = viewHost.__childObserver__;
if (!observer) {
observer = viewHost.__childObserver__ = _aureliaPal.DOM.createMutationObserver(onChildChange);
var options = {
childList: true,
subtree: !this.usesShadowDOM
};
observer.observe(viewHost, options);
observer.binders = [];
}
observer.binders.push(this);
if (this.usesShadowDOM) {
var current = viewHost.firstElementChild;
if (this.all) {
var items = viewModel[this.property];
if (!items) {
items = viewModel[this.property] = [];
} else {
items.length = 0;
}
while (current) {
if (this.matches(current)) {
items.push(current.au && current.au.controller ? current.au.controller.viewModel : current);
}
current = current.nextElementSibling;
}
if (this.changeHandler !== null) {
this.viewModel[this.changeHandler](noMutations);
}
} else {
while (current) {
if (this.matches(current)) {
var value = current.au && current.au.controller ? current.au.controller.viewModel : current;
this.viewModel[this.property] = value;
if (this.changeHandler !== null) {
this.viewModel[this.changeHandler](value);
}
break;
}
current = current.nextElementSibling;
}
}
}
};
ChildObserverBinder.prototype.onRemove = function onRemove(element) {
if (this.matches(element)) {
var value = element.au && element.au.controller ? element.au.controller.viewModel : element;
if (this.all) {
var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);
var index = items.indexOf(value);
if (index !== -1) {
items.splice(index, 1);
}
return true;
}
return false;
}
return false;
};
ChildObserverBinder.prototype.onAdd = function onAdd(element) {
if (this.matches(element)) {
var value = element.au && element.au.controller ? element.au.controller.viewModel : element;
if (this.all) {
var items = this.viewModel[this.property] || (this.viewModel[this.property] = []);
var index = 0;
var prev = element.previousElementSibling;
while (prev) {
if (this.matches(prev)) {
index++;
}
prev = prev.previousElementSibling;
}
items.splice(index, 0, value);
return true;
}
this.viewModel[this.property] = value;
if (this.changeHandler !== null) {
this.viewModel[this.changeHandler](value);
}
}
return false;
};
ChildObserverBinder.prototype.unbind = function unbind() {
if (this.viewHost.__childObserver__) {
this.viewHost.__childObserver__.disconnect();
this.viewHost.__childObserver__ = null;
}
};
return ChildObserverBinder;
}();
function remove(viewSlot, previous) {
return Array.isArray(previous) ? viewSlot.removeMany(previous, true) : viewSlot.remove(previous, true);
}
var SwapStrategies = exports.SwapStrategies = {
before: function before(viewSlot, previous, callback) {
return previous === undefined ? callback() : callback().then(function () {
return remove(viewSlot, previous);
});
},
with: function _with(viewSlot, previous, callback) {
return previous === undefined ? callback() : Promise.all([remove(viewSlot, previous), callback()]);
},
after: function after(viewSlot, previous, callback) {
return Promise.resolve(viewSlot.removeAll(true)).then(callback);
}
};
function tryActivateViewModel(context) {
if (context.skipActivation || typeof context.viewModel.activate !== 'function') {
return Promise.resolve();
}
return context.viewModel.activate(context.model) || Promise.resolve();
}
var CompositionEngine = exports.CompositionEngine = (_dec10 = (0, _aureliaDependencyInjection.inject)(ViewEngine, ViewLocator), _dec10(_class17 = function () {
function CompositionEngine(viewEngine, viewLocator) {
this.viewEngine = viewEngine;
this.viewLocator = viewLocator;
}
CompositionEngine.prototype._swap = function _swap(context, view) {
var swapStrategy = SwapStrategies[context.swapOrder] || SwapStrategies.after;
var previousViews = context.viewSlot.children.slice();
return swapStrategy(context.viewSlot, previousViews, function () {
return Promise.resolve(context.viewSlot.add(view)).then(function () {
if (context.currentController) {
context.currentController.unbind();
}
});
}).then(function () {
if (context.compositionTransactionNotifier) {
context.compositionTransactionNotifier.done();
}
});
};
CompositionEngine.prototype._createControllerAndSwap = function _createControllerAndSwap(context) {
var _this15 = this;
return this.createController(context).then(function (controller) {
controller.automate(context.overrideContext, context.owningView);
if (context.compositionTransactionOwnershipToken) {
return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {
return _this15._swap(context, controller.view);
}).then(function () {
return controller;
});
}
return _this15._swap(context, controller.view).then(function () {
return controller;
});
});
};
CompositionEngine.prototype.createController = function createController(context) {
var _this16 = this;
var childContainer = void 0;
var viewModel = void 0;
var viewModelResource = void 0;
var m = void 0;
return this.ensureViewModel(context).then(tryActivateViewModel).then(function () {
childContainer = context.childContainer;
viewModel = context.viewModel;
viewModelResource = context.viewModelResource;
m = viewModelResource.metadata;
var viewStrategy = _this16.viewLocator.getViewStrategy(context.view || viewModel);
if (context.viewResources) {
viewStrategy.makeRelativeTo(context.viewResources.viewUrl);
}
return m.load(childContainer, viewModelResource.value, null, viewStrategy, true);
}).then(function (viewFactory) {
return m.create(childContainer, BehaviorInstruction.dynamic(context.host, viewModel, viewFactory));
});
};
CompositionEngine.prototype.ensureViewModel = function ensureViewModel(context) {
var childContainer = context.childContainer = context.childContainer || context.container.createChild();
if (typeof context.viewModel === 'string') {
context.viewModel = context.viewResources ? context.viewResources.relativeToView(context.viewModel) : context.viewModel;
return this.viewEngine.importViewModelResource(context.viewModel).then(function (viewModelResource) {
childContainer.autoRegister(viewModelResource.value);
if (context.host) {
childContainer.registerInstance(_aureliaPal.DOM.Element, context.host);
}
context.viewModel = childContainer.viewModel = childContainer.get(viewModelResource.value);
context.viewModelResource = viewModelResource;
return context;
});
}
var m = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, context.viewModel.constructor);
m.elementName = m.elementName || 'dynamic-element';
m.initialize(context.container || childContainer, context.viewModel.constructor);
context.viewModelResource = { metadata: m, value: context.viewModel.constructor };
childContainer.viewModel = context.viewModel;
return Promise.resolve(context);
};
CompositionEngine.prototype.compose = function compose(context) {
var _this17 = this;
context.childContainer = context.childContainer || context.container.createChild();
context.view = this.viewLocator.getViewStrategy(context.view);
var transaction = context.childContainer.get(CompositionTransaction);
var compositionTransactionOwnershipToken = transaction.tryCapture();
if (compositionTransactionOwnershipToken) {
context.compositionTransactionOwnershipToken = compositionTransactionOwnershipToken;
} else {
context.compositionTransactionNotifier = transaction.enlist();
}
if (context.viewModel) {
return this._createControllerAndSwap(context);
} else if (context.view) {
if (context.viewResources) {
context.view.makeRelativeTo(context.viewResources.viewUrl);
}
return context.view.loadViewFactory(this.viewEngine, new ViewCompileInstruction()).then(function (viewFactory) {
var result = viewFactory.create(context.childContainer);
result.bind(context.bindingContext, context.overrideContext);
if (context.compositionTransactionOwnershipToken) {
return context.compositionTransactionOwnershipToken.waitForCompositionComplete().then(function () {
return _this17._swap(context, result);
}).then(function () {
return result;
});
}
return _this17._swap(context, result).then(function () {
return result;
});
});
} else if (context.viewSlot) {
context.viewSlot.removeAll();
if (context.compositionTransactionNotifier) {
context.compositionTransactionNotifier.done();
}
return Promise.resolve(null);
}
return Promise.resolve(null);
};
return CompositionEngine;
}()) || _class17);
var ElementConfigResource = exports.ElementConfigResource = function () {
function ElementConfigResource() {}
ElementConfigResource.prototype.initialize = function initialize(container, target) {};
ElementConfigResource.prototype.register = function register(registry, name) {};
ElementConfigResource.prototype.load = function load(container, target) {
var config = new target();
var eventManager = container.get(_aureliaBinding.EventManager);
eventManager.registerElementConfig(config);
};
return ElementConfigResource;
}();
function validateBehaviorName(name, type) {
if (/[A-Z]/.test(name)) {
var newName = _hyphenate(name);
LogManager.getLogger('templating').warn('\'' + name + '\' is not a valid ' + type + ' name and has been converted to \'' + newName + '\'. Upper-case letters are not allowed because the DOM is not case-sensitive.');
return newName;
}
return name;
}
function resource(instance) {
return function (target) {
_aureliaMetadata.metadata.define(_aureliaMetadata.metadata.resource, instance, target);
};
}
function behavior(override) {
return function (target) {
if (override instanceof HtmlBehaviorResource) {
_aureliaMetadata.metadata.define(_aureliaMetadata.metadata.resource, override, target);
} else {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, target);
Object.assign(r, override);
}
};
}
function customElement(name) {
return function (target) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, target);
r.elementName = validateBehaviorName(name, 'custom element');
};
}
function customAttribute(name, defaultBindingMode, aliases) {
return function (target) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, target);
r.attributeName = validateBehaviorName(name, 'custom attribute');
r.attributeDefaultBindingMode = defaultBindingMode;
r.aliases = aliases;
};
}
function templateController(target) {
var deco = function deco(t) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, t);
r.liftsContent = true;
};
return target ? deco(target) : deco;
}
function bindable(nameOrConfigOrTarget, key, descriptor) {
var deco = function deco(target, key2, descriptor2) {
var actualTarget = key2 ? target.constructor : target;
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, actualTarget);
var prop = void 0;
if (key2) {
nameOrConfigOrTarget = nameOrConfigOrTarget || {};
nameOrConfigOrTarget.name = key2;
}
prop = new BindableProperty(nameOrConfigOrTarget);
return prop.registerWith(actualTarget, r, descriptor2);
};
if (!nameOrConfigOrTarget) {
return deco;
}
if (key) {
var _target = nameOrConfigOrTarget;
nameOrConfigOrTarget = null;
return deco(_target, key, descriptor);
}
return deco;
}
function dynamicOptions(target) {
var deco = function deco(t) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, t);
r.hasDynamicOptions = true;
};
return target ? deco(target) : deco;
}
var defaultShadowDOMOptions = { mode: 'open' };
function useShadowDOM(targetOrOptions) {
var options = typeof targetOrOptions === 'function' || !targetOrOptions ? defaultShadowDOMOptions : targetOrOptions;
var deco = function deco(t) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, t);
r.targetShadowDOM = true;
r.shadowDOMOptions = options;
};
return typeof targetOrOptions === 'function' ? deco(targetOrOptions) : deco;
}
function processAttributes(processor) {
return function (t) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, t);
r.processAttributes = function (compiler, resources, node, attributes, elementInstruction) {
try {
processor(compiler, resources, node, attributes, elementInstruction);
} catch (error) {
LogManager.getLogger('templating').error(error);
}
};
};
}
function doNotProcessContent() {
return false;
}
function processContent(processor) {
return function (t) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, t);
r.processContent = processor ? function (compiler, resources, node, instruction) {
try {
return processor(compiler, resources, node, instruction);
} catch (error) {
LogManager.getLogger('templating').error(error);
return false;
}
} : doNotProcessContent;
};
}
function containerless(target) {
var deco = function deco(t) {
var r = _aureliaMetadata.metadata.getOrCreateOwn(_aureliaMetadata.metadata.resource, HtmlBehaviorResource, t);
r.containerless = true;
};
return target ? deco(target) : deco;
}
function useViewStrategy(strategy) {
return function (target) {
_aureliaMetadata.metadata.define(ViewLocator.viewStrategyMetadataKey, strategy, target);
};
}
function useView(path) {
return useViewStrategy(new RelativeViewStrategy(path));
}
function inlineView(markup, dependencies, dependencyBaseUrl) {
return useViewStrategy(new InlineViewStrategy(markup, dependencies, dependencyBaseUrl));
}
function noView(targetOrDependencies, dependencyBaseUrl) {
var target = void 0;
var dependencies = void 0;
if (typeof targetOrDependencies === 'function') {
target = targetOrDependencies;
} else {
dependencies = targetOrDependencies;
target = undefined;
}
var deco = function deco(t) {
_aureliaMetadata.metadata.define(ViewLocator.viewStrategyMetadataKey, new NoViewStrategy(dependencies, dependencyBaseUrl), t);
};
return target ? deco(target) : deco;
}
function elementConfig(target) {
var deco = function deco(t) {
_aureliaMetadata.metadata.define(_aureliaMetadata.metadata.resource, new ElementConfigResource(), t);
};
return target ? deco(target) : deco;
}
function viewResources() {
for (var _len = arguments.length, resources = Array(_len), _key = 0; _key < _len; _key++) {
resources[_key] = arguments[_key];
}
return function (target) {
_aureliaMetadata.metadata.define(ViewEngine.viewModelRequireMetadataKey, resources, target);
};
}
var TemplatingEngine = exports.TemplatingEngine = (_dec11 = (0, _aureliaDependencyInjection.inject)(_aureliaDependencyInjection.Container, ModuleAnalyzer, ViewCompiler, CompositionEngine), _dec11(_class18 = function () {
function TemplatingEngine(container, moduleAnalyzer, viewCompiler, compositionEngine) {
this._container = container;
this._moduleAnalyzer = moduleAnalyzer;
this._viewCompiler = viewCompiler;
this._compositionEngine = compositionEngine;
container.registerInstance(Animator, Animator.instance = new Animator());
}
TemplatingEngine.prototype.configureAnimator = function configureAnimator(animator) {
this._container.unregister(Animator);
this._container.registerInstance(Animator, Animator.instance = animator);
};
TemplatingEngine.prototype.compose = function compose(context) {
return this._compositionEngine.compose(context);
};
TemplatingEngine.prototype.enhance = function enhance(instruction) {
if (instruction instanceof _aureliaPal.DOM.Element) {
instruction = { element: instruction };
}
var compilerInstructions = {};
var resources = instruction.resources || this._container.get(ViewResources);
this._viewCompiler._compileNode(instruction.element, resources, compilerInstructions, instruction.element.parentNode, 'root', true);
var factory = new ViewFactory(instruction.element, compilerInstructions, resources);
var container = instruction.container || this._container.createChild();
var view = factory.create(container, BehaviorInstruction.enhance());
view.bind(instruction.bindingContext || {}, instruction.overrideContext);
view.firstChild = view.lastChild = view.fragment;
view.fragment = _aureliaPal.DOM.createDocumentFragment();
view.attached();
return view;
};
return TemplatingEngine;
}()) || _class18);
var aureliaTemplating = Object.freeze({
});
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Origin = exports.metadata = undefined;
var _extends$1 = Object.assign || function (target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i];for (var key in source) {
if (Object.prototype.hasOwnProperty.call(source, key)) {
target[key] = source[key];
}
}
}return target;
};
var _typeof$2 = typeof Symbol === "function" && _typeof$1(Symbol.iterator) === "symbol" ? function (obj) {
return typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
};
exports.decorators = decorators;
exports.deprecated = deprecated;
exports.mixin = mixin;
exports.protocol = protocol;
var _aureliaPal$1 = require('aurelia-pal');
function isObject(val) {
return val && (typeof val === 'function' || (typeof val === 'undefined' ? 'undefined' : _typeof$2(val)) === 'object');
}
var metadata = exports.metadata = {
resource: 'aurelia:resource',
paramTypes: 'design:paramtypes',
propertyType: 'design:type',
properties: 'design:properties',
get: function get$$1(metadataKey, target, targetKey) {
if (!isObject(target)) {
return undefined;
}
var result = metadata.getOwn(metadataKey, target, targetKey);
return result === undefined ? metadata.get(metadataKey, Object.getPrototypeOf(target), targetKey) : result;
},
getOwn: function getOwn(metadataKey, target, targetKey) {
if (!isObject(target)) {
return undefined;
}
return Reflect.getOwnMetadata(metadataKey, target, targetKey);
},
define: function define(metadataKey, metadataValue, target, targetKey) {
Reflect.defineMetadata(metadataKey, metadataValue, target, targetKey);
},
getOrCreateOwn: function getOrCreateOwn(metadataKey, Type, target, targetKey) {
var result = metadata.getOwn(metadataKey, target, targetKey);
if (result === undefined) {
result = new Type();
Reflect.defineMetadata(metadataKey, result, target, targetKey);
}
return result;
}
};
var originStorage = new Map();
var unknownOrigin = Object.freeze({ moduleId: undefined, moduleMember: undefined });
var Origin = exports.Origin = function () {
function Origin(moduleId, moduleMember) {
this.moduleId = moduleId;
this.moduleMember = moduleMember;
}
Origin.get = function get$$1(fn) {
var origin = originStorage.get(fn);
if (origin === undefined) {
_aureliaPal$1.PLATFORM.eachModule(function (key, value) {
if ((typeof value === 'undefined' ? 'undefined' : _typeof$2(value)) === 'object') {
for (var name in value) {
var exp = value[name];
if (exp === fn) {
originStorage.set(fn, origin = new Origin(key, name));
return true;
}
}
}
if (value === fn) {
originStorage.set(fn, origin = new Origin(key, 'default'));
return true;
}
return false;
});
}
return origin || unknownOrigin;
};
Origin.set = function set$$1(fn, origin) {
originStorage.set(fn, origin);
};
return Origin;
}();
function decorators() {
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
var applicator = function applicator(target, key, descriptor) {
var i = rest.length;
if (key) {
descriptor = descriptor || {
value: target[key],
writable: true,
configurable: true,
enumerable: true
};
while (i--) {
descriptor = rest[i](target, key, descriptor) || descriptor;
}
Object.defineProperty(target, key, descriptor);
} else {
while (i--) {
target = rest[i](target) || target;
}
}
return target;
};
applicator.on = applicator;
return applicator;
}
function deprecated(optionsOrTarget, maybeKey, maybeDescriptor) {
function decorator(target, key, descriptor) {
var methodSignature = target.constructor.name + '#' + key;
var options = maybeKey ? {} : optionsOrTarget || {};
var message = 'DEPRECATION - ' + methodSignature;
if (typeof descriptor.value !== 'function') {
throw new SyntaxError('Only methods can be marked as deprecated.');
}
if (options.message) {
message += ' - ' + options.message;
}
return _extends$1({}, descriptor, {
value: function deprecationWrapper() {
if (options.error) {
throw new Error(message);
} else {
console.warn(message);
}
return descriptor.value.apply(this, arguments);
}
});
}
return maybeKey ? decorator(optionsOrTarget, maybeKey, maybeDescriptor) : decorator;
}
function mixin(behavior) {
var instanceKeys = Object.keys(behavior);
function _mixin(possible) {
var decorator = function decorator(target) {
var resolvedTarget = typeof target === 'function' ? target.prototype : target;
var i = instanceKeys.length;
while (i--) {
var property = instanceKeys[i];
Object.defineProperty(resolvedTarget, property, {
value: behavior[property],
writable: true
});
}
};
return possible ? decorator(possible) : decorator;
}
return _mixin;
}
function alwaysValid() {
return true;
}
function noCompose() {}
function ensureProtocolOptions(options) {
if (options === undefined) {
options = {};
} else if (typeof options === 'function') {
options = {
validate: options
};
}
if (!options.validate) {
options.validate = alwaysValid;
}
if (!options.compose) {
options.compose = noCompose;
}
return options;
}
function createProtocolValidator(validate) {
return function (target) {
var result = validate(target);
return result === true;
};
}
function createProtocolAsserter(name, validate) {
return function (target) {
var result = validate(target);
if (result !== true) {
throw new Error(result || name + ' was not correctly implemented.');
}
};
}
function protocol(name, options) {
options = ensureProtocolOptions(options);
var result = function result(target) {
var resolvedTarget = typeof target === 'function' ? target.prototype : target;
options.compose(resolvedTarget);
result.assert(resolvedTarget);
Object.defineProperty(resolvedTarget, 'protocol:' + name, {
enumerable: false,
configurable: false,
writable: false,
value: true
});
};
result.validate = createProtocolValidator(options.validate);
result.assert = createProtocolAsserter(name, options.validate);
return result;
}
protocol.create = function (name, options) {
options = ensureProtocolOptions(options);
var hidden = 'protocol:' + name;
var result = function result(target) {
var decorator = protocol(name, options);
return target ? decorator(target) : decorator;
};
result.decorates = function (obj) {
return obj[hidden] === true;
};
result.validate = createProtocolValidator(options.validate);
result.assert = createProtocolAsserter(name, options.validate);
return result;
};
var aureliaMetadata = Object.freeze({
});
var _aureliaMetadata$1 = ( aureliaMetadata && undefined ) || aureliaMetadata;
var aureliaDependencyInjection = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Container = exports.InvocationHandler = exports._emptyParameters = exports.SingletonRegistration = exports.TransientRegistration = exports.FactoryInvoker = exports.NewInstance = exports.Factory = exports.StrategyResolver = exports.Parent = exports.Optional = exports.All = exports.Lazy = exports.resolver = undefined;
var _dec, _class, _dec2, _class3, _dec3, _class5, _dec4, _class7, _dec5, _class9, _dec6, _class11, _dec7, _class13, _classInvokers;
exports.getDecoratorDependencies = getDecoratorDependencies;
exports.lazy = lazy;
exports.all = all;
exports.optional = optional;
exports.parent = parent;
exports.factory = factory;
exports.newInstance = newInstance;
exports.invoker = invoker;
exports.invokeAsFactory = invokeAsFactory;
exports.registration = registration;
exports.transient = transient;
exports.singleton = singleton;
exports.autoinject = autoinject;
exports.inject = inject;
var resolver = exports.resolver = _aureliaMetadata$1.protocol.create('aurelia:resolver', function (target) {
if (!(typeof target.get === 'function')) {
return 'Resolvers must implement: get(container: Container, key: any): any';
}
return true;
});
var Lazy = exports.Lazy = (_dec = resolver(), _dec(_class = function () {
function Lazy(key) {
this._key = key;
}
Lazy.prototype.get = function get(container) {
var _this = this;
return function () {
return container.get(_this._key);
};
};
Lazy.of = function of(key) {
return new Lazy(key);
};
return Lazy;
}()) || _class);
var All = exports.All = (_dec2 = resolver(), _dec2(_class3 = function () {
function All(key) {
this._key = key;
}
All.prototype.get = function get(container) {
return container.getAll(this._key);
};
All.of = function of(key) {
return new All(key);
};
return All;
}()) || _class3);
var Optional = exports.Optional = (_dec3 = resolver(), _dec3(_class5 = function () {
function Optional(key) {
var checkParent = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];
this._key = key;
this._checkParent = checkParent;
}
Optional.prototype.get = function get(container) {
if (container.hasResolver(this._key, this._checkParent)) {
return container.get(this._key);
}
return null;
};
Optional.of = function of(key) {
var checkParent = arguments.length <= 1 || arguments[1] === undefined ? true : arguments[1];
return new Optional(key, checkParent);
};
return Optional;
}()) || _class5);
var Parent = exports.Parent = (_dec4 = resolver(), _dec4(_class7 = function () {
function Parent(key) {
this._key = key;
}
Parent.prototype.get = function get(container) {
return container.parent ? container.parent.get(this._key) : null;
};
Parent.of = function of(key) {
return new Parent(key);
};
return Parent;
}()) || _class7);
var StrategyResolver = exports.StrategyResolver = (_dec5 = resolver(), _dec5(_class9 = function () {
function StrategyResolver(strategy, state) {
this.strategy = strategy;
this.state = state;
}
StrategyResolver.prototype.get = function get(container, key) {
switch (this.strategy) {
case 0:
return this.state;
case 1:
var singleton = container.invoke(this.state);
this.state = singleton;
this.strategy = 0;
return singleton;
case 2:
return container.invoke(this.state);
case 3:
return this.state(container, key, this);
case 4:
return this.state[0].get(container, key);
case 5:
return container.get(this.state);
default:
throw new Error('Invalid strategy: ' + this.strategy);
}
};
return StrategyResolver;
}()) || _class9);
var Factory = exports.Factory = (_dec6 = resolver(), _dec6(_class11 = function () {
function Factory(key) {
this._key = key;
}
Factory.prototype.get = function get(container) {
var _this2 = this;
return function () {
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
return container.invoke(_this2._key, rest);
};
};
Factory.of = function of(key) {
return new Factory(key);
};
return Factory;
}()) || _class11);
var NewInstance = exports.NewInstance = (_dec7 = resolver(), _dec7(_class13 = function () {
function NewInstance(key) {
this.key = key;
this.asKey = key;
for (var _len2 = arguments.length, dynamicDependencies = Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {
dynamicDependencies[_key2 - 1] = arguments[_key2];
}
this.dynamicDependencies = dynamicDependencies;
}
NewInstance.prototype.get = function get(container) {
var dynamicDependencies = this.dynamicDependencies.length > 0 ? this.dynamicDependencies.map(function (dependency) {
return dependency['protocol:aurelia:resolver'] ? dependency.get(container) : container.get(dependency);
}) : undefined;
var instance = container.invoke(this.key, dynamicDependencies);
container.registerInstance(this.asKey, instance);
return instance;
};
NewInstance.prototype.as = function as(key) {
this.asKey = key;
return this;
};
NewInstance.of = function of(key) {
for (var _len3 = arguments.length, dynamicDependencies = Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {
dynamicDependencies[_key3 - 1] = arguments[_key3];
}
return new (Function.prototype.bind.apply(NewInstance, [null].concat([key], dynamicDependencies)))();
};
return NewInstance;
}()) || _class13);
function getDecoratorDependencies(target, name) {
var dependencies = target.inject;
if (typeof dependencies === 'function') {
throw new Error('Decorator ' + name + ' cannot be used with "inject()". Please use an array instead.');
}
if (!dependencies) {
dependencies = _aureliaMetadata$1.metadata.getOwn(_aureliaMetadata$1.metadata.paramTypes, target).slice();
target.inject = dependencies;
}
return dependencies;
}
function lazy(keyValue) {
return function (target, key, index) {
var params = getDecoratorDependencies(target, 'lazy');
params[index] = Lazy.of(keyValue);
};
}
function all(keyValue) {
return function (target, key, index) {
var params = getDecoratorDependencies(target, 'all');
params[index] = All.of(keyValue);
};
}
function optional() {
var checkParentOrTarget = arguments.length <= 0 || arguments[0] === undefined ? true : arguments[0];
var deco = function deco(checkParent) {
return function (target, key, index) {
var params = getDecoratorDependencies(target, 'optional');
params[index] = Optional.of(params[index], checkParent);
};
};
if (typeof checkParentOrTarget === 'boolean') {
return deco(checkParentOrTarget);
}
return deco(true);
}
function parent(target, key, index) {
var params = getDecoratorDependencies(target, 'parent');
params[index] = Parent.of(params[index]);
}
function factory(keyValue, asValue) {
return function (target, key, index) {
var params = getDecoratorDependencies(target, 'factory');
var factory = Factory.of(keyValue);
params[index] = asValue ? factory.as(asValue) : factory;
};
}
function newInstance(asKeyOrTarget) {
for (var _len4 = arguments.length, dynamicDependencies = Array(_len4 > 1 ? _len4 - 1 : 0), _key4 = 1; _key4 < _len4; _key4++) {
dynamicDependencies[_key4 - 1] = arguments[_key4];
}
var deco = function deco(asKey) {
return function (target, key, index) {
var params = getDecoratorDependencies(target, 'newInstance');
params[index] = NewInstance.of.apply(NewInstance, [params[index]].concat(dynamicDependencies));
if (!!asKey) {
params[index].as(asKey);
}
};
};
if (arguments.length >= 1) {
return deco(asKeyOrTarget);
}
return deco();
}
function invoker(value) {
return function (target) {
_aureliaMetadata$1.metadata.define(_aureliaMetadata$1.metadata.invoker, value, target);
};
}
function invokeAsFactory(potentialTarget) {
var deco = function deco(target) {
_aureliaMetadata$1.metadata.define(_aureliaMetadata$1.metadata.invoker, FactoryInvoker.instance, target);
};
return potentialTarget ? deco(potentialTarget) : deco;
}
var FactoryInvoker = exports.FactoryInvoker = function () {
function FactoryInvoker() {}
FactoryInvoker.prototype.invoke = function invoke(container, fn, dependencies) {
var i = dependencies.length;
var args = new Array(i);
while (i--) {
args[i] = container.get(dependencies[i]);
}
return fn.apply(undefined, args);
};
FactoryInvoker.prototype.invokeWithDynamicDependencies = function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {
var i = staticDependencies.length;
var args = new Array(i);
while (i--) {
args[i] = container.get(staticDependencies[i]);
}
if (dynamicDependencies !== undefined) {
args = args.concat(dynamicDependencies);
}
return fn.apply(undefined, args);
};
return FactoryInvoker;
}();
FactoryInvoker.instance = new FactoryInvoker();
function registration(value) {
return function (target) {
_aureliaMetadata$1.metadata.define(_aureliaMetadata$1.metadata.registration, value, target);
};
}
function transient(key) {
return registration(new TransientRegistration(key));
}
function singleton(keyOrRegisterInChild) {
var registerInChild = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
return registration(new SingletonRegistration(keyOrRegisterInChild, registerInChild));
}
var TransientRegistration = exports.TransientRegistration = function () {
function TransientRegistration(key) {
this._key = key;
}
TransientRegistration.prototype.registerResolver = function registerResolver(container, key, fn) {
var existingResolver = container.getResolver(this._key || key);
return existingResolver === undefined ? container.registerTransient(this._key || key, fn) : existingResolver;
};
return TransientRegistration;
}();
var SingletonRegistration = exports.SingletonRegistration = function () {
function SingletonRegistration(keyOrRegisterInChild) {
var registerInChild = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
if (typeof keyOrRegisterInChild === 'boolean') {
this._registerInChild = keyOrRegisterInChild;
} else {
this._key = keyOrRegisterInChild;
this._registerInChild = registerInChild;
}
}
SingletonRegistration.prototype.registerResolver = function registerResolver(container, key, fn) {
var targetContainer = this._registerInChild ? container : container.root;
var existingResolver = targetContainer.getResolver(this._key || key);
return existingResolver === undefined ? targetContainer.registerSingleton(this._key || key, fn) : existingResolver;
};
return SingletonRegistration;
}();
function validateKey(key) {
if (key === null || key === undefined) {
throw new Error('key/value cannot be null or undefined. Are you trying to inject/register something that doesn\'t exist with DI?');
}
}
var _emptyParameters = exports._emptyParameters = Object.freeze([]);
_aureliaMetadata$1.metadata.registration = 'aurelia:registration';
_aureliaMetadata$1.metadata.invoker = 'aurelia:invoker';
var resolverDecorates = resolver.decorates;
var InvocationHandler = exports.InvocationHandler = function () {
function InvocationHandler(fn, invoker, dependencies) {
this.fn = fn;
this.invoker = invoker;
this.dependencies = dependencies;
}
InvocationHandler.prototype.invoke = function invoke(container, dynamicDependencies) {
return dynamicDependencies !== undefined ? this.invoker.invokeWithDynamicDependencies(container, this.fn, this.dependencies, dynamicDependencies) : this.invoker.invoke(container, this.fn, this.dependencies);
};
return InvocationHandler;
}();
function invokeWithDynamicDependencies(container, fn, staticDependencies, dynamicDependencies) {
var i = staticDependencies.length;
var args = new Array(i);
while (i--) {
args[i] = container.get(staticDependencies[i]);
}
if (dynamicDependencies !== undefined) {
args = args.concat(dynamicDependencies);
}
return Reflect.construct(fn, args);
}
var classInvokers = (_classInvokers = {}, _classInvokers[0] = {
invoke: function invoke(container, Type) {
return new Type();
},
invokeWithDynamicDependencies: invokeWithDynamicDependencies
}, _classInvokers[1] = {
invoke: function invoke(container, Type, deps) {
return new Type(container.get(deps[0]));
},
invokeWithDynamicDependencies: invokeWithDynamicDependencies
}, _classInvokers[2] = {
invoke: function invoke(container, Type, deps) {
return new Type(container.get(deps[0]), container.get(deps[1]));
},
invokeWithDynamicDependencies: invokeWithDynamicDependencies
}, _classInvokers[3] = {
invoke: function invoke(container, Type, deps) {
return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]));
},
invokeWithDynamicDependencies: invokeWithDynamicDependencies
}, _classInvokers[4] = {
invoke: function invoke(container, Type, deps) {
return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]));
},
invokeWithDynamicDependencies: invokeWithDynamicDependencies
}, _classInvokers[5] = {
invoke: function invoke(container, Type, deps) {
return new Type(container.get(deps[0]), container.get(deps[1]), container.get(deps[2]), container.get(deps[3]), container.get(deps[4]));
},
invokeWithDynamicDependencies: invokeWithDynamicDependencies
}, _classInvokers.fallback = {
invoke: invokeWithDynamicDependencies,
invokeWithDynamicDependencies: invokeWithDynamicDependencies
}, _classInvokers);
function getDependencies(f) {
if (!f.hasOwnProperty('inject')) {
return [];
}
if (typeof f.inject === 'function') {
return f.inject();
}
return f.inject;
}
var Container = exports.Container = function () {
function Container(configuration) {
if (configuration === undefined) {
configuration = {};
}
this._configuration = configuration;
this._onHandlerCreated = configuration.onHandlerCreated;
this._handlers = configuration.handlers || (configuration.handlers = new Map());
this._resolvers = new Map();
this.root = this;
this.parent = null;
}
Container.prototype.makeGlobal = function makeGlobal() {
Container.instance = this;
return this;
};
Container.prototype.setHandlerCreatedCallback = function setHandlerCreatedCallback(onHandlerCreated) {
this._onHandlerCreated = onHandlerCreated;
this._configuration.onHandlerCreated = onHandlerCreated;
};
Container.prototype.registerInstance = function registerInstance(key, instance) {
return this.registerResolver(key, new StrategyResolver(0, instance === undefined ? key : instance));
};
Container.prototype.registerSingleton = function registerSingleton(key, fn) {
return this.registerResolver(key, new StrategyResolver(1, fn === undefined ? key : fn));
};
Container.prototype.registerTransient = function registerTransient(key, fn) {
return this.registerResolver(key, new StrategyResolver(2, fn === undefined ? key : fn));
};
Container.prototype.registerHandler = function registerHandler(key, handler) {
return this.registerResolver(key, new StrategyResolver(3, handler));
};
Container.prototype.registerAlias = function registerAlias(originalKey, aliasKey) {
return this.registerResolver(aliasKey, new StrategyResolver(5, originalKey));
};
Container.prototype.registerResolver = function registerResolver(key, resolver) {
validateKey(key);
var allResolvers = this._resolvers;
var result = allResolvers.get(key);
if (result === undefined) {
allResolvers.set(key, resolver);
} else if (result.strategy === 4) {
result.state.push(resolver);
} else {
allResolvers.set(key, new StrategyResolver(4, [result, resolver]));
}
return resolver;
};
Container.prototype.autoRegister = function autoRegister(key, fn) {
fn = fn === undefined ? key : fn;
if (typeof fn === 'function') {
var _registration = _aureliaMetadata$1.metadata.get(_aureliaMetadata$1.metadata.registration, fn);
if (_registration === undefined) {
return this.registerResolver(key, new StrategyResolver(1, fn));
}
return _registration.registerResolver(this, key, fn);
}
return this.registerResolver(key, new StrategyResolver(0, fn));
};
Container.prototype.autoRegisterAll = function autoRegisterAll(fns) {
var i = fns.length;
while (i--) {
this.autoRegister(fns[i]);
}
};
Container.prototype.unregister = function unregister(key) {
this._resolvers.delete(key);
};
Container.prototype.hasResolver = function hasResolver(key) {
var checkParent = arguments.length <= 1 || arguments[1] === undefined ? false : arguments[1];
validateKey(key);
return this._resolvers.has(key) || checkParent && this.parent !== null && this.parent.hasResolver(key, checkParent);
};
Container.prototype.getResolver = function getResolver(key) {
return this._resolvers.get(key);
};
Container.prototype.get = function get(key) {
validateKey(key);
if (key === Container) {
return this;
}
if (resolverDecorates(key)) {
return key.get(this, key);
}
var resolver = this._resolvers.get(key);
if (resolver === undefined) {
if (this.parent === null) {
return this.autoRegister(key).get(this, key);
}
var _registration2 = _aureliaMetadata$1.metadata.get(_aureliaMetadata$1.metadata.registration, key);
if (_registration2 === undefined) {
return this.parent._get(key);
}
return _registration2.registerResolver(this, key, key).get(this, key);
}
return resolver.get(this, key);
};
Container.prototype._get = function _get(key) {
var resolver = this._resolvers.get(key);
if (resolver === undefined) {
if (this.parent === null) {
return this.autoRegister(key).get(this, key);
}
return this.parent._get(key);
}
return resolver.get(this, key);
};
Container.prototype.getAll = function getAll(key) {
validateKey(key);
var resolver = this._resolvers.get(key);
if (resolver === undefined) {
if (this.parent === null) {
return _emptyParameters;
}
return this.parent.getAll(key);
}
if (resolver.strategy === 4) {
var state = resolver.state;
var i = state.length;
var results = new Array(i);
while (i--) {
results[i] = state[i].get(this, key);
}
return results;
}
return [resolver.get(this, key)];
};
Container.prototype.createChild = function createChild() {
var child = new Container(this._configuration);
child.root = this.root;
child.parent = this;
return child;
};
Container.prototype.invoke = function invoke(fn, dynamicDependencies) {
try {
var _handler = this._handlers.get(fn);
if (_handler === undefined) {
_handler = this._createInvocationHandler(fn);
this._handlers.set(fn, _handler);
}
return _handler.invoke(this, dynamicDependencies);
} catch (e) {
throw new aureliaPal.AggregateError('Error invoking ' + fn.name + '. Check the inner error for details.', e, true);
}
};
Container.prototype._createInvocationHandler = function _createInvocationHandler(fn) {
var dependencies = void 0;
if (fn.inject === undefined) {
dependencies = _aureliaMetadata$1.metadata.getOwn(_aureliaMetadata$1.metadata.paramTypes, fn) || _emptyParameters;
} else {
dependencies = [];
var ctor = fn;
while (typeof ctor === 'function') {
var _dependencies;
(_dependencies = dependencies).push.apply(_dependencies, getDependencies(ctor));
ctor = Object.getPrototypeOf(ctor);
}
}
var invoker = _aureliaMetadata$1.metadata.getOwn(_aureliaMetadata$1.metadata.invoker, fn) || classInvokers[dependencies.length] || classInvokers.fallback;
var handler = new InvocationHandler(fn, invoker, dependencies);
return this._onHandlerCreated !== undefined ? this._onHandlerCreated(handler) : handler;
};
return Container;
}();
function autoinject(potentialTarget) {
var deco = function deco(target) {
var previousInject = target.inject ? target.inject.slice() : null;
var autoInject = _aureliaMetadata$1.metadata.getOwn(_aureliaMetadata$1.metadata.paramTypes, target) || _emptyParameters;
if (!previousInject) {
target.inject = autoInject;
} else {
for (var i = 0; i < autoInject.length; i++) {
if (previousInject[i] && previousInject[i] !== autoInject[i]) {
var prevIndex = previousInject.indexOf(autoInject[i]);
if (prevIndex > -1) {
previousInject.splice(prevIndex, 1);
}
previousInject.splice(prevIndex > -1 && prevIndex < i ? i - 1 : i, 0, autoInject[i]);
} else if (!previousInject[i]) {
previousInject[i] = autoInject[i];
}
}
target.inject = previousInject;
}
};
return potentialTarget ? deco(potentialTarget) : deco;
}
function inject() {
for (var _len5 = arguments.length, rest = Array(_len5), _key5 = 0; _key5 < _len5; _key5++) {
rest[_key5] = arguments[_key5];
}
return function (target, key, descriptor) {
if (typeof descriptor === 'number' && rest.length === 1) {
var params = target.inject;
if (typeof params === 'function') {
throw new Error('Decorator inject cannot be used with "inject()". Please use an array instead.');
}
if (!params) {
params = _aureliaMetadata$1.metadata.getOwn(_aureliaMetadata$1.metadata.paramTypes, target).slice();
target.inject = params;
}
params[descriptor] = rest[0];
return;
}
if (descriptor) {
var _fn = descriptor.value;
_fn.inject = rest;
} else {
target.inject = rest;
}
};
}
});
var aureliaLogging = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getLogger = getLogger;
exports.addAppender = addAppender;
exports.removeAppender = removeAppender;
exports.setLevel = setLevel;
exports.getLevel = getLevel;
var logLevel = exports.logLevel = {
none: 0,
error: 1,
warn: 2,
info: 3,
debug: 4
};
var loggers = {};
var appenders = [];
var globalDefaultLevel = logLevel.none;
function appendArgs() {
return [this].concat(Array.prototype.slice.call(arguments));
}
function logFactory(level) {
var threshold = logLevel[level];
return function () {
if (this.level < threshold) {
return;
}
var args = appendArgs.apply(this, arguments);
var i = appenders.length;
while (i--) {
var _appenders$i;
(_appenders$i = appenders[i])[level].apply(_appenders$i, args);
}
};
}
function connectLoggers() {
var proto = Logger.prototype;
proto.debug = logFactory('debug');
proto.info = logFactory('info');
proto.warn = logFactory('warn');
proto.error = logFactory('error');
}
function getLogger(id) {
return loggers[id] || new Logger(id);
}
function addAppender(appender) {
if (appenders.push(appender) === 1) {
connectLoggers();
}
}
function removeAppender(appender) {
appenders = appenders.filter(function (a) {
return a !== appender;
});
}
function setLevel(level) {
globalDefaultLevel = level;
for (var key in loggers) {
loggers[key].setLevel(level);
}
}
function getLevel() {
return globalDefaultLevel;
}
var Logger = exports.Logger = function () {
function Logger(id) {
var cached = loggers[id];
if (cached) {
return cached;
}
loggers[id] = this;
this.id = id;
this.level = globalDefaultLevel;
}
Logger.prototype.debug = function debug(message) {};
Logger.prototype.info = function info(message) {};
Logger.prototype.warn = function warn(message) {};
Logger.prototype.error = function error(message) {};
Logger.prototype.setLevel = function setLevel(level) {
this.level = level;
};
return Logger;
}();
});
var _aureliaTemplating = ( aureliaTemplating && undefined ) || aureliaTemplating;
var compileSpy = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.CompileSpy = undefined;
var _dec, _dec2, _class;
var LogManager = _interopRequireWildcard(aureliaLogging);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
}
}newObj.default = obj;return newObj;
}
}
var CompileSpy = exports.CompileSpy = (_dec = (0, _aureliaTemplating.customAttribute)('compile-spy'), _dec2 = (0, aureliaDependencyInjection.inject)(aureliaPal.DOM.Element, _aureliaTemplating.TargetInstruction), _dec(_class = _dec2(_class = function CompileSpy(element, instruction) {
LogManager.getLogger('compile-spy').info(element, instruction);
}) || _class) || _class);
});
var viewSpy = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ViewSpy = undefined;
var _dec, _class;
var LogManager = _interopRequireWildcard(aureliaLogging);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
}
}newObj.default = obj;return newObj;
}
}
var ViewSpy = exports.ViewSpy = (_dec = (0, _aureliaTemplating.customAttribute)('view-spy'), _dec(_class = function () {
function ViewSpy() {
this.logger = LogManager.getLogger('view-spy');
}
ViewSpy.prototype._log = function _log(lifecycleName, context) {
if (!this.value && lifecycleName === 'created') {
this.logger.info(lifecycleName, this.view);
} else if (this.value && this.value.indexOf(lifecycleName) !== -1) {
this.logger.info(lifecycleName, this.view, context);
}
};
ViewSpy.prototype.created = function created(view) {
this.view = view;
this._log('created');
};
ViewSpy.prototype.bind = function bind(bindingContext) {
this._log('bind', bindingContext);
};
ViewSpy.prototype.attached = function attached() {
this._log('attached');
};
ViewSpy.prototype.detached = function detached() {
this._log('detached');
};
ViewSpy.prototype.unbind = function unbind() {
this._log('unbind');
};
return ViewSpy;
}()) || _class);
});
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.getSetObserver = exports.BindingEngine = exports.NameExpression = exports.Listener = exports.ListenerExpression = exports.BindingBehaviorResource = exports.ValueConverterResource = exports.Call = exports.CallExpression = exports.Binding = exports.BindingExpression = exports.ObjectObservationAdapter = exports.ObserverLocator = exports.SVGAnalyzer = exports.presentationAttributes = exports.presentationElements = exports.elements = exports.ComputedExpression = exports.ClassObserver = exports.SelectValueObserver = exports.CheckedObserver = exports.ValueAttributeObserver = exports.StyleObserver = exports.DataAttributeObserver = exports.dataAttributeAccessor = exports.XLinkAttributeObserver = exports.SetterObserver = exports.PrimitiveObserver = exports.propertyAccessor = exports.DirtyCheckProperty = exports.DirtyChecker = exports.EventManager = exports.delegationStrategy = exports.getMapObserver = exports.ParserImplementation = exports.Parser = exports.Scanner = exports.Lexer = exports.Token = exports.bindingMode = exports.ExpressionCloner = exports.Unparser = exports.LiteralObject = exports.LiteralArray = exports.LiteralString = exports.LiteralPrimitive = exports.PrefixNot = exports.Binary = exports.CallFunction = exports.CallMember = exports.CallScope = exports.AccessKeyed = exports.AccessMember = exports.AccessScope = exports.AccessThis = exports.Conditional = exports.Assign = exports.ValueConverter = exports.BindingBehavior = exports.Chain = exports.Expression = exports.getArrayObserver = exports.CollectionLengthObserver = exports.ModifyCollectionObserver = exports.ExpressionObserver = exports.sourceContext = undefined;
var _typeof$3 = typeof Symbol === "function" && _typeof$1(Symbol.iterator) === "symbol" ? function (obj) {
return typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
};
var _createClass$1 = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
}
}return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
};
}();
var _dec$1;
var _dec2$1;
var _class$1;
var _dec3$1;
var _class2$1;
var _dec4$1;
var _class3$1;
var _dec5$1;
var _class5$1;
var _dec6$1;
var _class7$1;
var _dec7$1;
var _class8$1;
var _dec8$1;
var _class9$1;
var _dec9$1;
var _class10;
var _class12;
var _temp$1;
var _dec10$1;
var _class13$1;
var _class14$1;
var _temp2$1;
exports.camelCase = camelCase;
exports.createOverrideContext = createOverrideContext;
exports.getContextFor = getContextFor;
exports.createScopeForTest = createScopeForTest;
exports.connectable = connectable;
exports.enqueueBindingConnect = enqueueBindingConnect;
exports.subscriberCollection = subscriberCollection;
exports.calcSplices = calcSplices;
exports.mergeSplice = mergeSplice;
exports.projectArraySplices = projectArraySplices;
exports.getChangeRecords = getChangeRecords;
exports.cloneExpression = cloneExpression;
exports.hasDeclaredDependencies = hasDeclaredDependencies;
exports.declarePropertyDependencies = declarePropertyDependencies;
exports.computedFrom = computedFrom;
exports.createComputedObserver = createComputedObserver;
exports.valueConverter = valueConverter;
exports.bindingBehavior = bindingBehavior;
exports.observable = observable;
var _aureliaLogging$2 = require('aurelia-logging');
var LogManager$1 = _interopRequireWildcard$1(_aureliaLogging$2);
var _aureliaPal$3 = require('aurelia-pal');
var _aureliaTaskQueue$1 = require('aurelia-task-queue');
var _aureliaMetadata$2 = require('aurelia-metadata');
function _interopRequireWildcard$1(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
}
}newObj.default = obj;return newObj;
}
}
function _possibleConstructorReturn(self, call) {
if (!self) {
throw new ReferenceError("this hasn't been initialised - super() hasn't been called");
}return call && ((typeof call === "undefined" ? "undefined" : _typeof$1(call)) === "object" || typeof call === "function") ? call : self;
}
function _inherits(subClass, superClass) {
if (typeof superClass !== "function" && superClass !== null) {
throw new TypeError("Super expression must either be null or a function, not " + (typeof superClass === "undefined" ? "undefined" : _typeof$1(superClass)));
}subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } });if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass;
}
var map = Object.create(null);
function camelCase(name) {
if (name in map) {
return map[name];
}
var result = name.charAt(0).toLowerCase() + name.slice(1).replace(/[_.-](\w|$)/g, function (_, x) {
return x.toUpperCase();
});
map[name] = result;
return result;
}
function createOverrideContext(bindingContext, parentOverrideContext) {
return {
bindingContext: bindingContext,
parentOverrideContext: parentOverrideContext || null
};
}
function getContextFor(name, scope, ancestor) {
var oc = scope.overrideContext;
if (ancestor) {
while (ancestor && oc) {
ancestor--;
oc = oc.parentOverrideContext;
}
if (ancestor || !oc) {
return undefined;
}
return name in oc ? oc : oc.bindingContext;
}
while (oc && !(name in oc) && !(oc.bindingContext && name in oc.bindingContext)) {
oc = oc.parentOverrideContext;
}
if (oc) {
return name in oc ? oc : oc.bindingContext;
}
return scope.bindingContext || scope.overrideContext;
}
function createScopeForTest(bindingContext, parentBindingContext) {
if (parentBindingContext) {
return {
bindingContext: bindingContext,
overrideContext: createOverrideContext(bindingContext, createOverrideContext(parentBindingContext))
};
}
return {
bindingContext: bindingContext,
overrideContext: createOverrideContext(bindingContext)
};
}
var sourceContext = exports.sourceContext = 'Binding:source';
var slotNames = [];
var versionSlotNames = [];
for (var i = 0; i < 100; i++) {
slotNames.push('_observer' + i);
versionSlotNames.push('_observerVersion' + i);
}
function addObserver(observer) {
var observerSlots = this._observerSlots === undefined ? 0 : this._observerSlots;
var i = observerSlots;
while (i-- && this[slotNames[i]] !== observer) {}
if (i === -1) {
i = 0;
while (this[slotNames[i]]) {
i++;
}
this[slotNames[i]] = observer;
observer.subscribe(sourceContext, this);
if (i === observerSlots) {
this._observerSlots = i + 1;
}
}
if (this._version === undefined) {
this._version = 0;
}
this[versionSlotNames[i]] = this._version;
}
function observeProperty(obj, propertyName) {
var observer = this.observerLocator.getObserver(obj, propertyName);
addObserver.call(this, observer);
}
function observeArray(array) {
var observer = this.observerLocator.getArrayObserver(array);
addObserver.call(this, observer);
}
function unobserve(all) {
var i = this._observerSlots;
while (i--) {
if (all || this[versionSlotNames[i]] !== this._version) {
var observer = this[slotNames[i]];
this[slotNames[i]] = null;
if (observer) {
observer.unsubscribe(sourceContext, this);
}
}
}
}
function connectable() {
return function (target) {
target.prototype.observeProperty = observeProperty;
target.prototype.observeArray = observeArray;
target.prototype.unobserve = unobserve;
target.prototype.addObserver = addObserver;
};
}
var queue = [];
var queued = {};
var nextId = 0;
var minimumImmediate = 100;
var frameBudget = 15;
var isFlushRequested = false;
var immediate = 0;
function flush(animationFrameStart) {
var length = queue.length;
var i = 0;
while (i < length) {
var binding = queue[i];
queued[binding.__connectQueueId] = false;
binding.connect(true);
i++;
if (i % 100 === 0 && _aureliaPal$3.PLATFORM.performance.now() - animationFrameStart > frameBudget) {
break;
}
}
queue.splice(0, i);
if (queue.length) {
_aureliaPal$3.PLATFORM.requestAnimationFrame(flush);
} else {
isFlushRequested = false;
immediate = 0;
}
}
function enqueueBindingConnect(binding) {
if (immediate < minimumImmediate) {
immediate++;
binding.connect(false);
} else {
var id = binding.__connectQueueId;
if (id === undefined) {
id = nextId;
nextId++;
binding.__connectQueueId = id;
}
if (!queued[id]) {
queue.push(binding);
queued[id] = true;
}
}
if (!isFlushRequested) {
isFlushRequested = true;
_aureliaPal$3.PLATFORM.requestAnimationFrame(flush);
}
}
function addSubscriber(context, callable) {
if (this.hasSubscriber(context, callable)) {
return false;
}
if (!this._context0) {
this._context0 = context;
this._callable0 = callable;
return true;
}
if (!this._context1) {
this._context1 = context;
this._callable1 = callable;
return true;
}
if (!this._context2) {
this._context2 = context;
this._callable2 = callable;
return true;
}
if (!this._contextsRest) {
this._contextsRest = [context];
this._callablesRest = [callable];
return true;
}
this._contextsRest.push(context);
this._callablesRest.push(callable);
return true;
}
function removeSubscriber(context, callable) {
if (this._context0 === context && this._callable0 === callable) {
this._context0 = null;
this._callable0 = null;
return true;
}
if (this._context1 === context && this._callable1 === callable) {
this._context1 = null;
this._callable1 = null;
return true;
}
if (this._context2 === context && this._callable2 === callable) {
this._context2 = null;
this._callable2 = null;
return true;
}
var rest = this._contextsRest;
var index = void 0;
if (!rest || !rest.length || (index = rest.indexOf(context)) === -1 || this._callablesRest[index] !== callable) {
return false;
}
rest.splice(index, 1);
this._callablesRest.splice(index, 1);
return true;
}
var arrayPool1 = [];
var arrayPool2 = [];
var poolUtilization = [];
function callSubscribers(newValue, oldValue) {
var context0 = this._context0;
var callable0 = this._callable0;
var context1 = this._context1;
var callable1 = this._callable1;
var context2 = this._context2;
var callable2 = this._callable2;
var length = this._contextsRest ? this._contextsRest.length : 0;
var contextsRest = void 0;
var callablesRest = void 0;
var poolIndex = void 0;
var i = void 0;
if (length) {
poolIndex = poolUtilization.length;
while (poolIndex-- && poolUtilization[poolIndex]) {}
if (poolIndex < 0) {
poolIndex = poolUtilization.length;
contextsRest = [];
callablesRest = [];
poolUtilization.push(true);
arrayPool1.push(contextsRest);
arrayPool2.push(callablesRest);
} else {
poolUtilization[poolIndex] = true;
contextsRest = arrayPool1[poolIndex];
callablesRest = arrayPool2[poolIndex];
}
i = length;
while (i--) {
contextsRest[i] = this._contextsRest[i];
callablesRest[i] = this._callablesRest[i];
}
}
if (context0) {
if (callable0) {
callable0.call(context0, newValue, oldValue);
} else {
context0(newValue, oldValue);
}
}
if (context1) {
if (callable1) {
callable1.call(context1, newValue, oldValue);
} else {
context1(newValue, oldValue);
}
}
if (context2) {
if (callable2) {
callable2.call(context2, newValue, oldValue);
} else {
context2(newValue, oldValue);
}
}
if (length) {
for (i = 0; i < length; i++) {
var callable = callablesRest[i];
var context = contextsRest[i];
if (callable) {
callable.call(context, newValue, oldValue);
} else {
context(newValue, oldValue);
}
contextsRest[i] = null;
callablesRest[i] = null;
}
poolUtilization[poolIndex] = false;
}
}
function hasSubscribers() {
return !!(this._context0 || this._context1 || this._context2 || this._contextsRest && this._contextsRest.length);
}
function hasSubscriber(context, callable) {
var has = this._context0 === context && this._callable0 === callable || this._context1 === context && this._callable1 === callable || this._context2 === context && this._callable2 === callable;
if (has) {
return true;
}
var index = void 0;
var contexts = this._contextsRest;
if (!contexts || (index = contexts.length) === 0) {
return false;
}
var callables = this._callablesRest;
while (index--) {
if (contexts[index] === context && callables[index] === callable) {
return true;
}
}
return false;
}
function subscriberCollection() {
return function (target) {
target.prototype.addSubscriber = addSubscriber;
target.prototype.removeSubscriber = removeSubscriber;
target.prototype.callSubscribers = callSubscribers;
target.prototype.hasSubscribers = hasSubscribers;
target.prototype.hasSubscriber = hasSubscriber;
};
}
var ExpressionObserver = exports.ExpressionObserver = (_dec$1 = connectable(), _dec2$1 = subscriberCollection(), _dec$1(_class$1 = _dec2$1(_class$1 = function () {
function ExpressionObserver(scope, expression, observerLocator, lookupFunctions) {
this.scope = scope;
this.expression = expression;
this.observerLocator = observerLocator;
this.lookupFunctions = lookupFunctions;
}
ExpressionObserver.prototype.getValue = function getValue() {
return this.expression.evaluate(this.scope, this.lookupFunctions);
};
ExpressionObserver.prototype.setValue = function setValue(newValue) {
this.expression.assign(this.scope, newValue);
};
ExpressionObserver.prototype.subscribe = function subscribe(context, callable) {
var _this = this;
if (!this.hasSubscribers()) {
this.oldValue = this.expression.evaluate(this.scope, this.lookupFunctions);
this.expression.connect(this, this.scope);
}
this.addSubscriber(context, callable);
if (arguments.length === 1 && context instanceof Function) {
return {
dispose: function dispose() {
_this.unsubscribe(context, callable);
}
};
}
};
ExpressionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {
this.unobserve(true);
this.oldValue = undefined;
}
};
ExpressionObserver.prototype.call = function call() {
var newValue = this.expression.evaluate(this.scope, this.lookupFunctions);
var oldValue = this.oldValue;
if (newValue !== oldValue) {
this.oldValue = newValue;
this.callSubscribers(newValue, oldValue);
}
this._version++;
this.expression.connect(this, this.scope);
this.unobserve(false);
};
return ExpressionObserver;
}()) || _class$1) || _class$1);
function isIndex(s) {
return +s === s >>> 0;
}
function toNumber(s) {
return +s;
}
function newSplice(index, removed, addedCount) {
return {
index: index,
removed: removed,
addedCount: addedCount
};
}
var EDIT_LEAVE = 0;
var EDIT_UPDATE = 1;
var EDIT_ADD = 2;
var EDIT_DELETE = 3;
function ArraySplice() {}
ArraySplice.prototype = {
calcEditDistances: function calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd) {
var rowCount = oldEnd - oldStart + 1;
var columnCount = currentEnd - currentStart + 1;
var distances = new Array(rowCount);
var north = void 0;
var west = void 0;
for (var _i = 0; _i < rowCount; ++_i) {
distances[_i] = new Array(columnCount);
distances[_i][0] = _i;
}
for (var j = 0; j < columnCount; ++j) {
distances[0][j] = j;
}
for (var _i2 = 1; _i2 < rowCount; ++_i2) {
for (var _j = 1; _j < columnCount; ++_j) {
if (this.equals(current[currentStart + _j - 1], old[oldStart + _i2 - 1])) {
distances[_i2][_j] = distances[_i2 - 1][_j - 1];
} else {
north = distances[_i2 - 1][_j] + 1;
west = distances[_i2][_j - 1] + 1;
distances[_i2][_j] = north < west ? north : west;
}
}
}
return distances;
},
spliceOperationsFromEditDistances: function spliceOperationsFromEditDistances(distances) {
var i = distances.length - 1;
var j = distances[0].length - 1;
var current = distances[i][j];
var edits = [];
while (i > 0 || j > 0) {
if (i === 0) {
edits.push(EDIT_ADD);
j--;
continue;
}
if (j === 0) {
edits.push(EDIT_DELETE);
i--;
continue;
}
var northWest = distances[i - 1][j - 1];
var west = distances[i - 1][j];
var north = distances[i][j - 1];
var min = void 0;
if (west < north) {
min = west < northWest ? west : northWest;
} else {
min = north < northWest ? north : northWest;
}
if (min === northWest) {
if (northWest === current) {
edits.push(EDIT_LEAVE);
} else {
edits.push(EDIT_UPDATE);
current = northWest;
}
i--;
j--;
} else if (min === west) {
edits.push(EDIT_DELETE);
i--;
current = west;
} else {
edits.push(EDIT_ADD);
j--;
current = north;
}
}
edits.reverse();
return edits;
},
calcSplices: function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {
var prefixCount = 0;
var suffixCount = 0;
var minLength = Math.min(currentEnd - currentStart, oldEnd - oldStart);
if (currentStart === 0 && oldStart === 0) {
prefixCount = this.sharedPrefix(current, old, minLength);
}
if (currentEnd === current.length && oldEnd === old.length) {
suffixCount = this.sharedSuffix(current, old, minLength - prefixCount);
}
currentStart += prefixCount;
oldStart += prefixCount;
currentEnd -= suffixCount;
oldEnd -= suffixCount;
if (currentEnd - currentStart === 0 && oldEnd - oldStart === 0) {
return [];
}
if (currentStart === currentEnd) {
var _splice = newSplice(currentStart, [], 0);
while (oldStart < oldEnd) {
_splice.removed.push(old[oldStart++]);
}
return [_splice];
} else if (oldStart === oldEnd) {
return [newSplice(currentStart, [], currentEnd - currentStart)];
}
var ops = this.spliceOperationsFromEditDistances(this.calcEditDistances(current, currentStart, currentEnd, old, oldStart, oldEnd));
var splice = undefined;
var splices = [];
var index = currentStart;
var oldIndex = oldStart;
for (var _i3 = 0; _i3 < ops.length; ++_i3) {
switch (ops[_i3]) {
case EDIT_LEAVE:
if (splice) {
splices.push(splice);
splice = undefined;
}
index++;
oldIndex++;
break;
case EDIT_UPDATE:
if (!splice) {
splice = newSplice(index, [], 0);
}
splice.addedCount++;
index++;
splice.removed.push(old[oldIndex]);
oldIndex++;
break;
case EDIT_ADD:
if (!splice) {
splice = newSplice(index, [], 0);
}
splice.addedCount++;
index++;
break;
case EDIT_DELETE:
if (!splice) {
splice = newSplice(index, [], 0);
}
splice.removed.push(old[oldIndex]);
oldIndex++;
break;
}
}
if (splice) {
splices.push(splice);
}
return splices;
},
sharedPrefix: function sharedPrefix(current, old, searchLength) {
for (var _i4 = 0; _i4 < searchLength; ++_i4) {
if (!this.equals(current[_i4], old[_i4])) {
return _i4;
}
}
return searchLength;
},
sharedSuffix: function sharedSuffix(current, old, searchLength) {
var index1 = current.length;
var index2 = old.length;
var count = 0;
while (count < searchLength && this.equals(current[--index1], old[--index2])) {
count++;
}
return count;
},
calculateSplices: function calculateSplices(current, previous) {
return this.calcSplices(current, 0, current.length, previous, 0, previous.length);
},
equals: function equals(currentValue, previousValue) {
return currentValue === previousValue;
}
};
var arraySplice = new ArraySplice();
function calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd) {
return arraySplice.calcSplices(current, currentStart, currentEnd, old, oldStart, oldEnd);
}
function intersect(start1, end1, start2, end2) {
if (end1 < start2 || end2 < start1) {
return -1;
}
if (end1 === start2 || end2 === start1) {
return 0;
}
if (start1 < start2) {
if (end1 < end2) {
return end1 - start2;
}
return end2 - start2;
}
if (end2 < end1) {
return end2 - start1;
}
return end1 - start1;
}
function mergeSplice(splices, index, removed, addedCount) {
var splice = newSplice(index, removed, addedCount);
var inserted = false;
var insertionOffset = 0;
for (var _i5 = 0; _i5 < splices.length; _i5++) {
var current = splices[_i5];
current.index += insertionOffset;
if (inserted) {
continue;
}
var intersectCount = intersect(splice.index, splice.index + splice.removed.length, current.index, current.index + current.addedCount);
if (intersectCount >= 0) {
splices.splice(_i5, 1);
_i5--;
insertionOffset -= current.addedCount - current.removed.length;
splice.addedCount += current.addedCount - intersectCount;
var deleteCount = splice.removed.length + current.removed.length - intersectCount;
if (!splice.addedCount && !deleteCount) {
inserted = true;
} else {
var currentRemoved = current.removed;
if (splice.index < current.index) {
var prepend = splice.removed.slice(0, current.index - splice.index);
Array.prototype.push.apply(prepend, currentRemoved);
currentRemoved = prepend;
}
if (splice.index + splice.removed.length > current.index + current.addedCount) {
var append = splice.removed.slice(current.index + current.addedCount - splice.index);
Array.prototype.push.apply(currentRemoved, append);
}
splice.removed = currentRemoved;
if (current.index < splice.index) {
splice.index = current.index;
}
}
} else if (splice.index < current.index) {
inserted = true;
splices.splice(_i5, 0, splice);
_i5++;
var offset = splice.addedCount - splice.removed.length;
current.index += offset;
insertionOffset += offset;
}
}
if (!inserted) {
splices.push(splice);
}
}
function createInitialSplices(array, changeRecords) {
var splices = [];
for (var _i6 = 0; _i6 < changeRecords.length; _i6++) {
var record = changeRecords[_i6];
switch (record.type) {
case 'splice':
mergeSplice(splices, record.index, record.removed.slice(), record.addedCount);
break;
case 'add':
case 'update':
case 'delete':
if (!isIndex(record.name)) {
continue;
}
var index = toNumber(record.name);
if (index < 0) {
continue;
}
mergeSplice(splices, index, [record.oldValue], record.type === 'delete' ? 0 : 1);
break;
default:
console.error('Unexpected record type: ' + JSON.stringify(record));
break;
}
}
return splices;
}
function projectArraySplices(array, changeRecords) {
var splices = [];
createInitialSplices(array, changeRecords).forEach(function (splice) {
if (splice.addedCount === 1 && splice.removed.length === 1) {
if (splice.removed[0] !== array[splice.index]) {
splices.push(splice);
}
return;
}
splices = splices.concat(calcSplices(array, splice.index, splice.index + splice.addedCount, splice.removed, 0, splice.removed.length));
});
return splices;
}
function newRecord(type, object, key, oldValue) {
return {
type: type,
object: object,
key: key,
oldValue: oldValue
};
}
function getChangeRecords(map) {
var entries = new Array(map.size);
var keys = map.keys();
var i = 0;
var item = void 0;
while (item = keys.next()) {
if (item.done) {
break;
}
entries[i] = newRecord('added', map, item.value);
i++;
}
return entries;
}
var ModifyCollectionObserver = exports.ModifyCollectionObserver = (_dec3$1 = subscriberCollection(), _dec3$1(_class2$1 = function () {
function ModifyCollectionObserver(taskQueue, collection) {
this.taskQueue = taskQueue;
this.queued = false;
this.changeRecords = null;
this.oldCollection = null;
this.collection = collection;
this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';
}
ModifyCollectionObserver.prototype.subscribe = function subscribe(context, callable) {
this.addSubscriber(context, callable);
};
ModifyCollectionObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
this.removeSubscriber(context, callable);
};
ModifyCollectionObserver.prototype.addChangeRecord = function addChangeRecord(changeRecord) {
if (!this.hasSubscribers() && !this.lengthObserver) {
return;
}
if (changeRecord.type === 'splice') {
var index = changeRecord.index;
var arrayLength = changeRecord.object.length;
if (index > arrayLength) {
index = arrayLength - changeRecord.addedCount;
} else if (index < 0) {
index = arrayLength + changeRecord.removed.length + index - changeRecord.addedCount;
}
if (index < 0) {
index = 0;
}
changeRecord.index = index;
}
if (this.changeRecords === null) {
this.changeRecords = [changeRecord];
} else {
this.changeRecords.push(changeRecord);
}
if (!this.queued) {
this.queued = true;
this.taskQueue.queueMicroTask(this);
}
};
ModifyCollectionObserver.prototype.flushChangeRecords = function flushChangeRecords() {
if (this.changeRecords && this.changeRecords.length || this.oldCollection) {
this.call();
}
};
ModifyCollectionObserver.prototype.reset = function reset(oldCollection) {
this.oldCollection = oldCollection;
if (this.hasSubscribers() && !this.queued) {
this.queued = true;
this.taskQueue.queueMicroTask(this);
}
};
ModifyCollectionObserver.prototype.getLengthObserver = function getLengthObserver() {
return this.lengthObserver || (this.lengthObserver = new CollectionLengthObserver(this.collection));
};
ModifyCollectionObserver.prototype.call = function call() {
var changeRecords = this.changeRecords;
var oldCollection = this.oldCollection;
var records = void 0;
this.queued = false;
this.changeRecords = [];
this.oldCollection = null;
if (this.hasSubscribers()) {
if (oldCollection) {
if (this.collection instanceof Map || this.collection instanceof Set) {
records = getChangeRecords(oldCollection);
} else {
records = calcSplices(this.collection, 0, this.collection.length, oldCollection, 0, oldCollection.length);
}
} else {
if (this.collection instanceof Map || this.collection instanceof Set) {
records = changeRecords;
} else {
records = projectArraySplices(this.collection, changeRecords);
}
}
this.callSubscribers(records);
}
if (this.lengthObserver) {
this.lengthObserver.call(this.collection[this.lengthPropertyName]);
}
};
return ModifyCollectionObserver;
}()) || _class2$1);
var CollectionLengthObserver = exports.CollectionLengthObserver = (_dec4$1 = subscriberCollection(), _dec4$1(_class3$1 = function () {
function CollectionLengthObserver(collection) {
this.collection = collection;
this.lengthPropertyName = collection instanceof Map || collection instanceof Set ? 'size' : 'length';
this.currentValue = collection[this.lengthPropertyName];
}
CollectionLengthObserver.prototype.getValue = function getValue() {
return this.collection[this.lengthPropertyName];
};
CollectionLengthObserver.prototype.setValue = function setValue(newValue) {
this.collection[this.lengthPropertyName] = newValue;
};
CollectionLengthObserver.prototype.subscribe = function subscribe(context, callable) {
this.addSubscriber(context, callable);
};
CollectionLengthObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
this.removeSubscriber(context, callable);
};
CollectionLengthObserver.prototype.call = function call(newValue) {
var oldValue = this.currentValue;
this.callSubscribers(newValue, oldValue);
this.currentValue = newValue;
};
return CollectionLengthObserver;
}()) || _class3$1);
var pop = Array.prototype.pop;
var push = Array.prototype.push;
var reverse = Array.prototype.reverse;
var shift = Array.prototype.shift;
var sort = Array.prototype.sort;
var splice = Array.prototype.splice;
var unshift = Array.prototype.unshift;
Array.prototype.pop = function () {
var notEmpty = this.length > 0;
var methodCallResult = pop.apply(this, arguments);
if (notEmpty && this.__array_observer__ !== undefined) {
this.__array_observer__.addChangeRecord({
type: 'delete',
object: this,
name: this.length,
oldValue: methodCallResult
});
}
return methodCallResult;
};
Array.prototype.push = function () {
var methodCallResult = push.apply(this, arguments);
if (this.__array_observer__ !== undefined) {
this.__array_observer__.addChangeRecord({
type: 'splice',
object: this,
index: this.length - arguments.length,
removed: [],
addedCount: arguments.length
});
}
return methodCallResult;
};
Array.prototype.reverse = function () {
var oldArray = void 0;
if (this.__array_observer__ !== undefined) {
this.__array_observer__.flushChangeRecords();
oldArray = this.slice();
}
var methodCallResult = reverse.apply(this, arguments);
if (this.__array_observer__ !== undefined) {
this.__array_observer__.reset(oldArray);
}
return methodCallResult;
};
Array.prototype.shift = function () {
var notEmpty = this.length > 0;
var methodCallResult = shift.apply(this, arguments);
if (notEmpty && this.__array_observer__ !== undefined) {
this.__array_observer__.addChangeRecord({
type: 'delete',
object: this,
name: 0,
oldValue: methodCallResult
});
}
return methodCallResult;
};
Array.prototype.sort = function () {
var oldArray = void 0;
if (this.__array_observer__ !== undefined) {
this.__array_observer__.flushChangeRecords();
oldArray = this.slice();
}
var methodCallResult = sort.apply(this, arguments);
if (this.__array_observer__ !== undefined) {
this.__array_observer__.reset(oldArray);
}
return methodCallResult;
};
Array.prototype.splice = function () {
var methodCallResult = splice.apply(this, arguments);
if (this.__array_observer__ !== undefined) {
this.__array_observer__.addChangeRecord({
type: 'splice',
object: this,
index: +arguments[0],
removed: methodCallResult,
addedCount: arguments.length > 2 ? arguments.length - 2 : 0
});
}
return methodCallResult;
};
Array.prototype.unshift = function () {
var methodCallResult = unshift.apply(this, arguments);
if (this.__array_observer__ !== undefined) {
this.__array_observer__.addChangeRecord({
type: 'splice',
object: this,
index: 0,
removed: [],
addedCount: arguments.length
});
}
return methodCallResult;
};
function _getArrayObserver(taskQueue, array) {
return ModifyArrayObserver.for(taskQueue, array);
}
exports.getArrayObserver = _getArrayObserver;
var ModifyArrayObserver = function (_ModifyCollectionObse) {
_inherits(ModifyArrayObserver, _ModifyCollectionObse);
function ModifyArrayObserver(taskQueue, array) {
return _possibleConstructorReturn(this, _ModifyCollectionObse.call(this, taskQueue, array));
}
ModifyArrayObserver.for = function _for(taskQueue, array) {
if (!('__array_observer__' in array)) {
Reflect.defineProperty(array, '__array_observer__', {
value: ModifyArrayObserver.create(taskQueue, array),
enumerable: false, configurable: false
});
}
return array.__array_observer__;
};
ModifyArrayObserver.create = function create(taskQueue, array) {
return new ModifyArrayObserver(taskQueue, array);
};
return ModifyArrayObserver;
}(ModifyCollectionObserver);
var Expression = exports.Expression = function () {
function Expression() {
this.isChain = false;
this.isAssignable = false;
}
Expression.prototype.evaluate = function evaluate(scope, lookupFunctions, args) {
throw new Error('Binding expression "' + this + '" cannot be evaluated.');
};
Expression.prototype.assign = function assign(scope, value, lookupFunctions) {
throw new Error('Binding expression "' + this + '" cannot be assigned to.');
};
Expression.prototype.toString = function toString() {
return typeof FEATURE_NO_UNPARSER === 'undefined' ? _Unparser.unparse(this) : Function.prototype.toString.call(this);
};
return Expression;
}();
var Chain = exports.Chain = function (_Expression) {
_inherits(Chain, _Expression);
function Chain(expressions) {
var _this3 = _possibleConstructorReturn(this, _Expression.call(this));
_this3.expressions = expressions;
_this3.isChain = true;
return _this3;
}
Chain.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var result = void 0;
var expressions = this.expressions;
var last = void 0;
for (var _i7 = 0, length = expressions.length; _i7 < length; ++_i7) {
last = expressions[_i7].evaluate(scope, lookupFunctions);
if (last !== null) {
result = last;
}
}
return result;
};
Chain.prototype.accept = function accept(visitor) {
return visitor.visitChain(this);
};
return Chain;
}(Expression);
var BindingBehavior = exports.BindingBehavior = function (_Expression2) {
_inherits(BindingBehavior, _Expression2);
function BindingBehavior(expression, name, args) {
var _this4 = _possibleConstructorReturn(this, _Expression2.call(this));
_this4.expression = expression;
_this4.name = name;
_this4.args = args;
return _this4;
}
BindingBehavior.prototype.evaluate = function evaluate(scope, lookupFunctions) {
return this.expression.evaluate(scope, lookupFunctions);
};
BindingBehavior.prototype.assign = function assign(scope, value, lookupFunctions) {
return this.expression.assign(scope, value, lookupFunctions);
};
BindingBehavior.prototype.accept = function accept(visitor) {
return visitor.visitBindingBehavior(this);
};
BindingBehavior.prototype.connect = function connect(binding, scope) {
this.expression.connect(binding, scope);
};
BindingBehavior.prototype.bind = function bind(binding, scope, lookupFunctions) {
if (this.expression.expression && this.expression.bind) {
this.expression.bind(binding, scope, lookupFunctions);
}
var behavior = lookupFunctions.bindingBehaviors(this.name);
if (!behavior) {
throw new Error('No BindingBehavior named "' + this.name + '" was found!');
}
var behaviorKey = 'behavior-' + this.name;
if (binding[behaviorKey]) {
throw new Error('A binding behavior named "' + this.name + '" has already been applied to "' + this.expression + '"');
}
binding[behaviorKey] = behavior;
behavior.bind.apply(behavior, [binding, scope].concat(evalList(scope, this.args, binding.lookupFunctions)));
};
BindingBehavior.prototype.unbind = function unbind(binding, scope) {
var behaviorKey = 'behavior-' + this.name;
binding[behaviorKey].unbind(binding, scope);
binding[behaviorKey] = null;
if (this.expression.expression && this.expression.unbind) {
this.expression.unbind(binding, scope);
}
};
return BindingBehavior;
}(Expression);
var ValueConverter = exports.ValueConverter = function (_Expression3) {
_inherits(ValueConverter, _Expression3);
function ValueConverter(expression, name, args, allArgs) {
var _this5 = _possibleConstructorReturn(this, _Expression3.call(this));
_this5.expression = expression;
_this5.name = name;
_this5.args = args;
_this5.allArgs = allArgs;
return _this5;
}
ValueConverter.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var converter = lookupFunctions.valueConverters(this.name);
if (!converter) {
throw new Error('No ValueConverter named "' + this.name + '" was found!');
}
if ('toView' in converter) {
return converter.toView.apply(converter, evalList(scope, this.allArgs, lookupFunctions));
}
return this.allArgs[0].evaluate(scope, lookupFunctions);
};
ValueConverter.prototype.assign = function assign(scope, value, lookupFunctions) {
var converter = lookupFunctions.valueConverters(this.name);
if (!converter) {
throw new Error('No ValueConverter named "' + this.name + '" was found!');
}
if ('fromView' in converter) {
value = converter.fromView.apply(converter, [value].concat(evalList(scope, this.args, lookupFunctions)));
}
return this.allArgs[0].assign(scope, value, lookupFunctions);
};
ValueConverter.prototype.accept = function accept(visitor) {
return visitor.visitValueConverter(this);
};
ValueConverter.prototype.connect = function connect(binding, scope) {
var expressions = this.allArgs;
var i = expressions.length;
while (i--) {
expressions[i].connect(binding, scope);
}
};
return ValueConverter;
}(Expression);
var Assign = exports.Assign = function (_Expression4) {
_inherits(Assign, _Expression4);
function Assign(target, value) {
var _this6 = _possibleConstructorReturn(this, _Expression4.call(this));
_this6.target = target;
_this6.value = value;
_this6.isAssignable = true;
return _this6;
}
Assign.prototype.evaluate = function evaluate(scope, lookupFunctions) {
return this.target.assign(scope, this.value.evaluate(scope, lookupFunctions));
};
Assign.prototype.accept = function accept(vistor) {
vistor.visitAssign(this);
};
Assign.prototype.connect = function connect(binding, scope) {};
Assign.prototype.assign = function assign(scope, value) {
this.value.assign(scope, value);
this.target.assign(scope, value);
};
return Assign;
}(Expression);
var Conditional = exports.Conditional = function (_Expression5) {
_inherits(Conditional, _Expression5);
function Conditional(condition, yes, no) {
var _this7 = _possibleConstructorReturn(this, _Expression5.call(this));
_this7.condition = condition;
_this7.yes = yes;
_this7.no = no;
return _this7;
}
Conditional.prototype.evaluate = function evaluate(scope, lookupFunctions) {
return !!this.condition.evaluate(scope, lookupFunctions) ? this.yes.evaluate(scope, lookupFunctions) : this.no.evaluate(scope, lookupFunctions);
};
Conditional.prototype.accept = function accept(visitor) {
return visitor.visitConditional(this);
};
Conditional.prototype.connect = function connect(binding, scope) {
this.condition.connect(binding, scope);
if (this.condition.evaluate(scope)) {
this.yes.connect(binding, scope);
} else {
this.no.connect(binding, scope);
}
};
return Conditional;
}(Expression);
var AccessThis = exports.AccessThis = function (_Expression6) {
_inherits(AccessThis, _Expression6);
function AccessThis(ancestor) {
var _this8 = _possibleConstructorReturn(this, _Expression6.call(this));
_this8.ancestor = ancestor;
return _this8;
}
AccessThis.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var oc = scope.overrideContext;
var i = this.ancestor;
while (i-- && oc) {
oc = oc.parentOverrideContext;
}
return i < 1 && oc ? oc.bindingContext : undefined;
};
AccessThis.prototype.accept = function accept(visitor) {
return visitor.visitAccessThis(this);
};
AccessThis.prototype.connect = function connect(binding, scope) {};
return AccessThis;
}(Expression);
var AccessScope = exports.AccessScope = function (_Expression7) {
_inherits(AccessScope, _Expression7);
function AccessScope(name, ancestor) {
var _this9 = _possibleConstructorReturn(this, _Expression7.call(this));
_this9.name = name;
_this9.ancestor = ancestor;
_this9.isAssignable = true;
return _this9;
}
AccessScope.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var context = getContextFor(this.name, scope, this.ancestor);
return context[this.name];
};
AccessScope.prototype.assign = function assign(scope, value) {
var context = getContextFor(this.name, scope, this.ancestor);
return context ? context[this.name] = value : undefined;
};
AccessScope.prototype.accept = function accept(visitor) {
return visitor.visitAccessScope(this);
};
AccessScope.prototype.connect = function connect(binding, scope) {
var context = getContextFor(this.name, scope, this.ancestor);
binding.observeProperty(context, this.name);
};
return AccessScope;
}(Expression);
var AccessMember = exports.AccessMember = function (_Expression8) {
_inherits(AccessMember, _Expression8);
function AccessMember(object, name) {
var _this10 = _possibleConstructorReturn(this, _Expression8.call(this));
_this10.object = object;
_this10.name = name;
_this10.isAssignable = true;
return _this10;
}
AccessMember.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var instance = this.object.evaluate(scope, lookupFunctions);
return instance === null || instance === undefined ? instance : instance[this.name];
};
AccessMember.prototype.assign = function assign(scope, value) {
var instance = this.object.evaluate(scope);
if (instance === null || instance === undefined) {
instance = {};
this.object.assign(scope, instance);
}
instance[this.name] = value;
return value;
};
AccessMember.prototype.accept = function accept(visitor) {
return visitor.visitAccessMember(this);
};
AccessMember.prototype.connect = function connect(binding, scope) {
this.object.connect(binding, scope);
var obj = this.object.evaluate(scope);
if (obj) {
binding.observeProperty(obj, this.name);
}
};
return AccessMember;
}(Expression);
var AccessKeyed = exports.AccessKeyed = function (_Expression9) {
_inherits(AccessKeyed, _Expression9);
function AccessKeyed(object, key) {
var _this11 = _possibleConstructorReturn(this, _Expression9.call(this));
_this11.object = object;
_this11.key = key;
_this11.isAssignable = true;
return _this11;
}
AccessKeyed.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var instance = this.object.evaluate(scope, lookupFunctions);
var lookup = this.key.evaluate(scope, lookupFunctions);
return getKeyed(instance, lookup);
};
AccessKeyed.prototype.assign = function assign(scope, value) {
var instance = this.object.evaluate(scope);
var lookup = this.key.evaluate(scope);
return setKeyed(instance, lookup, value);
};
AccessKeyed.prototype.accept = function accept(visitor) {
return visitor.visitAccessKeyed(this);
};
AccessKeyed.prototype.connect = function connect(binding, scope) {
this.object.connect(binding, scope);
var obj = this.object.evaluate(scope);
if (obj instanceof Object) {
this.key.connect(binding, scope);
var key = this.key.evaluate(scope);
if (key !== null && key !== undefined && !(Array.isArray(obj) && typeof key === 'number')) {
binding.observeProperty(obj, key);
}
}
};
return AccessKeyed;
}(Expression);
var CallScope = exports.CallScope = function (_Expression10) {
_inherits(CallScope, _Expression10);
function CallScope(name, args, ancestor) {
var _this12 = _possibleConstructorReturn(this, _Expression10.call(this));
_this12.name = name;
_this12.args = args;
_this12.ancestor = ancestor;
return _this12;
}
CallScope.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {
var args = evalList(scope, this.args, lookupFunctions);
var context = getContextFor(this.name, scope, this.ancestor);
var func = getFunction(context, this.name, mustEvaluate);
if (func) {
return func.apply(context, args);
}
return undefined;
};
CallScope.prototype.accept = function accept(visitor) {
return visitor.visitCallScope(this);
};
CallScope.prototype.connect = function connect(binding, scope) {
var args = this.args;
var i = args.length;
while (i--) {
args[i].connect(binding, scope);
}
};
return CallScope;
}(Expression);
var CallMember = exports.CallMember = function (_Expression11) {
_inherits(CallMember, _Expression11);
function CallMember(object, name, args) {
var _this13 = _possibleConstructorReturn(this, _Expression11.call(this));
_this13.object = object;
_this13.name = name;
_this13.args = args;
return _this13;
}
CallMember.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {
var instance = this.object.evaluate(scope, lookupFunctions);
var args = evalList(scope, this.args, lookupFunctions);
var func = getFunction(instance, this.name, mustEvaluate);
if (func) {
return func.apply(instance, args);
}
return undefined;
};
CallMember.prototype.accept = function accept(visitor) {
return visitor.visitCallMember(this);
};
CallMember.prototype.connect = function connect(binding, scope) {
this.object.connect(binding, scope);
var obj = this.object.evaluate(scope);
if (getFunction(obj, this.name, false)) {
var args = this.args;
var _i8 = args.length;
while (_i8--) {
args[_i8].connect(binding, scope);
}
}
};
return CallMember;
}(Expression);
var CallFunction = exports.CallFunction = function (_Expression12) {
_inherits(CallFunction, _Expression12);
function CallFunction(func, args) {
var _this14 = _possibleConstructorReturn(this, _Expression12.call(this));
_this14.func = func;
_this14.args = args;
return _this14;
}
CallFunction.prototype.evaluate = function evaluate(scope, lookupFunctions, mustEvaluate) {
var func = this.func.evaluate(scope, lookupFunctions);
if (typeof func === 'function') {
return func.apply(null, evalList(scope, this.args, lookupFunctions));
}
if (!mustEvaluate && (func === null || func === undefined)) {
return undefined;
}
throw new Error(this.func + ' is not a function');
};
CallFunction.prototype.accept = function accept(visitor) {
return visitor.visitCallFunction(this);
};
CallFunction.prototype.connect = function connect(binding, scope) {
this.func.connect(binding, scope);
var func = this.func.evaluate(scope);
if (typeof func === 'function') {
var args = this.args;
var _i9 = args.length;
while (_i9--) {
args[_i9].connect(binding, scope);
}
}
};
return CallFunction;
}(Expression);
var Binary = exports.Binary = function (_Expression13) {
_inherits(Binary, _Expression13);
function Binary(operation, left, right) {
var _this15 = _possibleConstructorReturn(this, _Expression13.call(this));
_this15.operation = operation;
_this15.left = left;
_this15.right = right;
return _this15;
}
Binary.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var left = this.left.evaluate(scope, lookupFunctions);
switch (this.operation) {
case '&&':
return left && this.right.evaluate(scope, lookupFunctions);
case '||':
return left || this.right.evaluate(scope, lookupFunctions);
}
var right = this.right.evaluate(scope, lookupFunctions);
switch (this.operation) {
case '==':
return left == right;
case '===':
return left === right;
case '!=':
return left != right;
case '!==':
return left !== right;
}
if (left === null || right === null || left === undefined || right === undefined) {
switch (this.operation) {
case '+':
if (left !== null && left !== undefined) return left;
if (right !== null && right !== undefined) return right;
return 0;
case '-':
if (left !== null && left !== undefined) return left;
if (right !== null && right !== undefined) return 0 - right;
return 0;
}
return null;
}
switch (this.operation) {
case '+':
return autoConvertAdd(left, right);
case '-':
return left - right;
case '*':
return left * right;
case '/':
return left / right;
case '%':
return left % right;
case '<':
return left < right;
case '>':
return left > right;
case '<=':
return left <= right;
case '>=':
return left >= right;
case '^':
return left ^ right;
}
throw new Error('Internal error [' + this.operation + '] not handled');
};
Binary.prototype.accept = function accept(visitor) {
return visitor.visitBinary(this);
};
Binary.prototype.connect = function connect(binding, scope) {
this.left.connect(binding, scope);
var left = this.left.evaluate(scope);
if (this.operation === '&&' && !left || this.operation === '||' && left) {
return;
}
this.right.connect(binding, scope);
};
return Binary;
}(Expression);
var PrefixNot = exports.PrefixNot = function (_Expression14) {
_inherits(PrefixNot, _Expression14);
function PrefixNot(operation, expression) {
var _this16 = _possibleConstructorReturn(this, _Expression14.call(this));
_this16.operation = operation;
_this16.expression = expression;
return _this16;
}
PrefixNot.prototype.evaluate = function evaluate(scope, lookupFunctions) {
return !this.expression.evaluate(scope, lookupFunctions);
};
PrefixNot.prototype.accept = function accept(visitor) {
return visitor.visitPrefix(this);
};
PrefixNot.prototype.connect = function connect(binding, scope) {
this.expression.connect(binding, scope);
};
return PrefixNot;
}(Expression);
var LiteralPrimitive = exports.LiteralPrimitive = function (_Expression15) {
_inherits(LiteralPrimitive, _Expression15);
function LiteralPrimitive(value) {
var _this17 = _possibleConstructorReturn(this, _Expression15.call(this));
_this17.value = value;
return _this17;
}
LiteralPrimitive.prototype.evaluate = function evaluate(scope, lookupFunctions) {
return this.value;
};
LiteralPrimitive.prototype.accept = function accept(visitor) {
return visitor.visitLiteralPrimitive(this);
};
LiteralPrimitive.prototype.connect = function connect(binding, scope) {};
return LiteralPrimitive;
}(Expression);
var LiteralString = exports.LiteralString = function (_Expression16) {
_inherits(LiteralString, _Expression16);
function LiteralString(value) {
var _this18 = _possibleConstructorReturn(this, _Expression16.call(this));
_this18.value = value;
return _this18;
}
LiteralString.prototype.evaluate = function evaluate(scope, lookupFunctions) {
return this.value;
};
LiteralString.prototype.accept = function accept(visitor) {
return visitor.visitLiteralString(this);
};
LiteralString.prototype.connect = function connect(binding, scope) {};
return LiteralString;
}(Expression);
var LiteralArray = exports.LiteralArray = function (_Expression17) {
_inherits(LiteralArray, _Expression17);
function LiteralArray(elements) {
var _this19 = _possibleConstructorReturn(this, _Expression17.call(this));
_this19.elements = elements;
return _this19;
}
LiteralArray.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var elements = this.elements;
var result = [];
for (var _i10 = 0, length = elements.length; _i10 < length; ++_i10) {
result[_i10] = elements[_i10].evaluate(scope, lookupFunctions);
}
return result;
};
LiteralArray.prototype.accept = function accept(visitor) {
return visitor.visitLiteralArray(this);
};
LiteralArray.prototype.connect = function connect(binding, scope) {
var length = this.elements.length;
for (var _i11 = 0; _i11 < length; _i11++) {
this.elements[_i11].connect(binding, scope);
}
};
return LiteralArray;
}(Expression);
var LiteralObject = exports.LiteralObject = function (_Expression18) {
_inherits(LiteralObject, _Expression18);
function LiteralObject(keys, values) {
var _this20 = _possibleConstructorReturn(this, _Expression18.call(this));
_this20.keys = keys;
_this20.values = values;
return _this20;
}
LiteralObject.prototype.evaluate = function evaluate(scope, lookupFunctions) {
var instance = {};
var keys = this.keys;
var values = this.values;
for (var _i12 = 0, length = keys.length; _i12 < length; ++_i12) {
instance[keys[_i12]] = values[_i12].evaluate(scope, lookupFunctions);
}
return instance;
};
LiteralObject.prototype.accept = function accept(visitor) {
return visitor.visitLiteralObject(this);
};
LiteralObject.prototype.connect = function connect(binding, scope) {
var length = this.keys.length;
for (var _i13 = 0; _i13 < length; _i13++) {
this.values[_i13].connect(binding, scope);
}
};
return LiteralObject;
}(Expression);
function evalList(scope, list, lookupFunctions) {
var length = list.length;
var result = [];
for (var _i14 = 0; _i14 < length; _i14++) {
result[_i14] = list[_i14].evaluate(scope, lookupFunctions);
}
return result;
}
function autoConvertAdd(a, b) {
if (a !== null && b !== null) {
if (typeof a === 'string' && typeof b !== 'string') {
return a + b.toString();
}
if (typeof a !== 'string' && typeof b === 'string') {
return a.toString() + b;
}
return a + b;
}
if (a !== null) {
return a;
}
if (b !== null) {
return b;
}
return 0;
}
function getFunction(obj, name, mustExist) {
var func = obj === null || obj === undefined ? null : obj[name];
if (typeof func === 'function') {
return func;
}
if (!mustExist && (func === null || func === undefined)) {
return null;
}
throw new Error(name + ' is not a function');
}
function getKeyed(obj, key) {
if (Array.isArray(obj)) {
return obj[parseInt(key, 10)];
} else if (obj) {
return obj[key];
} else if (obj === null || obj === undefined) {
return undefined;
}
return obj[key];
}
function setKeyed(obj, key, value) {
if (Array.isArray(obj)) {
var index = parseInt(key, 10);
if (obj.length <= index) {
obj.length = index + 1;
}
obj[index] = value;
} else {
obj[key] = value;
}
return value;
}
var _Unparser = null;
exports.Unparser = _Unparser;
if (typeof FEATURE_NO_UNPARSER === 'undefined') {
exports.Unparser = _Unparser = function () {
function Unparser(buffer) {
this.buffer = buffer;
}
Unparser.unparse = function unparse(expression) {
var buffer = [];
var visitor = new _Unparser(buffer);
expression.accept(visitor);
return buffer.join('');
};
Unparser.prototype.write = function write(text) {
this.buffer.push(text);
};
Unparser.prototype.writeArgs = function writeArgs(args) {
this.write('(');
for (var _i15 = 0, length = args.length; _i15 < length; ++_i15) {
if (_i15 !== 0) {
this.write(',');
}
args[_i15].accept(this);
}
this.write(')');
};
Unparser.prototype.visitChain = function visitChain(chain) {
var expressions = chain.expressions;
for (var _i16 = 0, length = expression.length; _i16 < length; ++_i16) {
if (_i16 !== 0) {
this.write(';');
}
expressions[_i16].accept(this);
}
};
Unparser.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {
var args = behavior.args;
behavior.expression.accept(this);
this.write('&' + behavior.name);
for (var _i17 = 0, length = args.length; _i17 < length; ++_i17) {
this.write(':');
args[_i17].accept(this);
}
};
Unparser.prototype.visitValueConverter = function visitValueConverter(converter) {
var args = converter.args;
converter.expression.accept(this);
this.write('|' + converter.name);
for (var _i18 = 0, length = args.length; _i18 < length; ++_i18) {
this.write(':');
args[_i18].accept(this);
}
};
Unparser.prototype.visitAssign = function visitAssign(assign) {
assign.target.accept(this);
this.write('=');
assign.value.accept(this);
};
Unparser.prototype.visitConditional = function visitConditional(conditional) {
conditional.condition.accept(this);
this.write('?');
conditional.yes.accept(this);
this.write(':');
conditional.no.accept(this);
};
Unparser.prototype.visitAccessThis = function visitAccessThis(access) {
if (access.ancestor === 0) {
this.write('$this');
return;
}
this.write('$parent');
var i = access.ancestor - 1;
while (i--) {
this.write('.$parent');
}
};
Unparser.prototype.visitAccessScope = function visitAccessScope(access) {
var i = access.ancestor;
while (i--) {
this.write('$parent.');
}
this.write(access.name);
};
Unparser.prototype.visitAccessMember = function visitAccessMember(access) {
access.object.accept(this);
this.write('.' + access.name);
};
Unparser.prototype.visitAccessKeyed = function visitAccessKeyed(access) {
access.object.accept(this);
this.write('[');
access.key.accept(this);
this.write(']');
};
Unparser.prototype.visitCallScope = function visitCallScope(call) {
var i = call.ancestor;
while (i--) {
this.write('$parent.');
}
this.write(call.name);
this.writeArgs(call.args);
};
Unparser.prototype.visitCallFunction = function visitCallFunction(call) {
call.func.accept(this);
this.writeArgs(call.args);
};
Unparser.prototype.visitCallMember = function visitCallMember(call) {
call.object.accept(this);
this.write('.' + call.name);
this.writeArgs(call.args);
};
Unparser.prototype.visitPrefix = function visitPrefix(prefix) {
this.write('(' + prefix.operation);
prefix.expression.accept(this);
this.write(')');
};
Unparser.prototype.visitBinary = function visitBinary(binary) {
binary.left.accept(this);
this.write(binary.operation);
binary.right.accept(this);
};
Unparser.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {
this.write('' + literal.value);
};
Unparser.prototype.visitLiteralArray = function visitLiteralArray(literal) {
var elements = literal.elements;
this.write('[');
for (var _i19 = 0, length = elements.length; _i19 < length; ++_i19) {
if (_i19 !== 0) {
this.write(',');
}
elements[_i19].accept(this);
}
this.write(']');
};
Unparser.prototype.visitLiteralObject = function visitLiteralObject(literal) {
var keys = literal.keys;
var values = literal.values;
this.write('{');
for (var _i20 = 0, length = keys.length; _i20 < length; ++_i20) {
if (_i20 !== 0) {
this.write(',');
}
this.write('\'' + keys[_i20] + '\':');
values[_i20].accept(this);
}
this.write('}');
};
Unparser.prototype.visitLiteralString = function visitLiteralString(literal) {
var escaped = literal.value.replace(/'/g, "\'");
this.write('\'' + escaped + '\'');
};
return Unparser;
}();
}
var ExpressionCloner = exports.ExpressionCloner = function () {
function ExpressionCloner() {}
ExpressionCloner.prototype.cloneExpressionArray = function cloneExpressionArray(array) {
var clonedArray = [];
var i = array.length;
while (i--) {
clonedArray[i] = array[i].accept(this);
}
return clonedArray;
};
ExpressionCloner.prototype.visitChain = function visitChain(chain) {
return new Chain(this.cloneExpressionArray(chain.expressions));
};
ExpressionCloner.prototype.visitBindingBehavior = function visitBindingBehavior(behavior) {
return new BindingBehavior(behavior.expression.accept(this), behavior.name, this.cloneExpressionArray(behavior.args));
};
ExpressionCloner.prototype.visitValueConverter = function visitValueConverter(converter) {
return new ValueConverter(converter.expression.accept(this), converter.name, this.cloneExpressionArray(converter.args));
};
ExpressionCloner.prototype.visitAssign = function visitAssign(assign) {
return new Assign(assign.target.accept(this), assign.value.accept(this));
};
ExpressionCloner.prototype.visitConditional = function visitConditional(conditional) {
return new Conditional(conditional.condition.accept(this), conditional.yes.accept(this), conditional.no.accept(this));
};
ExpressionCloner.prototype.visitAccessThis = function visitAccessThis(access) {
return new AccessThis(access.ancestor);
};
ExpressionCloner.prototype.visitAccessScope = function visitAccessScope(access) {
return new AccessScope(access.name, access.ancestor);
};
ExpressionCloner.prototype.visitAccessMember = function visitAccessMember(access) {
return new AccessMember(access.object.accept(this), access.name);
};
ExpressionCloner.prototype.visitAccessKeyed = function visitAccessKeyed(access) {
return new AccessKeyed(access.object.accept(this), access.key.accept(this));
};
ExpressionCloner.prototype.visitCallScope = function visitCallScope(call) {
return new CallScope(call.name, this.cloneExpressionArray(call.args), call.ancestor);
};
ExpressionCloner.prototype.visitCallFunction = function visitCallFunction(call) {
return new CallFunction(call.func.accept(this), this.cloneExpressionArray(call.args));
};
ExpressionCloner.prototype.visitCallMember = function visitCallMember(call) {
return new CallMember(call.object.accept(this), call.name, this.cloneExpressionArray(call.args));
};
ExpressionCloner.prototype.visitPrefix = function visitPrefix(prefix) {
return new PrefixNot(prefix.operation, prefix.expression.accept(this));
};
ExpressionCloner.prototype.visitBinary = function visitBinary(binary) {
return new Binary(binary.operation, binary.left.accept(this), binary.right.accept(this));
};
ExpressionCloner.prototype.visitLiteralPrimitive = function visitLiteralPrimitive(literal) {
return new LiteralPrimitive(literal);
};
ExpressionCloner.prototype.visitLiteralArray = function visitLiteralArray(literal) {
return new LiteralArray(this.cloneExpressionArray(literal.elements));
};
ExpressionCloner.prototype.visitLiteralObject = function visitLiteralObject(literal) {
return new LiteralObject(literal.keys, this.cloneExpressionArray(literal.values));
};
ExpressionCloner.prototype.visitLiteralString = function visitLiteralString(literal) {
return new LiteralString(literal.value);
};
return ExpressionCloner;
}();
function cloneExpression(expression) {
var visitor = new ExpressionCloner();
return expression.accept(visitor);
}
var bindingMode = exports.bindingMode = {
oneTime: 0,
oneWay: 1,
twoWay: 2
};
var Token = exports.Token = function () {
function Token(index, text) {
this.index = index;
this.text = text;
}
Token.prototype.withOp = function withOp(op) {
this.opKey = op;
return this;
};
Token.prototype.withGetterSetter = function withGetterSetter(key) {
this.key = key;
return this;
};
Token.prototype.withValue = function withValue(value) {
this.value = value;
return this;
};
Token.prototype.toString = function toString() {
return 'Token(' + this.text + ')';
};
return Token;
}();
var Lexer = exports.Lexer = function () {
function Lexer() {}
Lexer.prototype.lex = function lex(text) {
var scanner = new Scanner(text);
var tokens = [];
var token = scanner.scanToken();
while (token) {
tokens.push(token);
token = scanner.scanToken();
}
return tokens;
};
return Lexer;
}();
var Scanner = exports.Scanner = function () {
function Scanner(input) {
this.input = input;
this.length = input.length;
this.peek = 0;
this.index = -1;
this.advance();
}
Scanner.prototype.scanToken = function scanToken() {
while (this.peek <= $SPACE) {
if (++this.index >= this.length) {
this.peek = $EOF;
return null;
}
this.peek = this.input.charCodeAt(this.index);
}
if (isIdentifierStart(this.peek)) {
return this.scanIdentifier();
}
if (isDigit(this.peek)) {
return this.scanNumber(this.index);
}
var start = this.index;
switch (this.peek) {
case $PERIOD:
this.advance();
return isDigit(this.peek) ? this.scanNumber(start) : new Token(start, '.');
case $LPAREN:
case $RPAREN:
case $LBRACE:
case $RBRACE:
case $LBRACKET:
case $RBRACKET:
case $COMMA:
case $COLON:
case $SEMICOLON:
return this.scanCharacter(start, String.fromCharCode(this.peek));
case $SQ:
case $DQ:
return this.scanString();
case $PLUS:
case $MINUS:
case $STAR:
case $SLASH:
case $PERCENT:
case $CARET:
case $QUESTION:
return this.scanOperator(start, String.fromCharCode(this.peek));
case $LT:
case $GT:
case $BANG:
case $EQ:
return this.scanComplexOperator(start, $EQ, String.fromCharCode(this.peek), '=');
case $AMPERSAND:
return this.scanComplexOperator(start, $AMPERSAND, '&', '&');
case $BAR:
return this.scanComplexOperator(start, $BAR, '|', '|');
case $NBSP:
while (isWhitespace(this.peek)) {
this.advance();
}
return this.scanToken();
}
var character = String.fromCharCode(this.peek);
this.error('Unexpected character [' + character + ']');
return null;
};
Scanner.prototype.scanCharacter = function scanCharacter(start, text) {
assert(this.peek === text.charCodeAt(0));
this.advance();
return new Token(start, text);
};
Scanner.prototype.scanOperator = function scanOperator(start, text) {
assert(this.peek === text.charCodeAt(0));
assert(OPERATORS.indexOf(text) !== -1);
this.advance();
return new Token(start, text).withOp(text);
};
Scanner.prototype.scanComplexOperator = function scanComplexOperator(start, code, one, two) {
assert(this.peek === one.charCodeAt(0));
this.advance();
var text = one;
if (this.peek === code) {
this.advance();
text += two;
}
if (this.peek === code) {
this.advance();
text += two;
}
assert(OPERATORS.indexOf(text) !== -1);
return new Token(start, text).withOp(text);
};
Scanner.prototype.scanIdentifier = function scanIdentifier() {
assert(isIdentifierStart(this.peek));
var start = this.index;
this.advance();
while (isIdentifierPart(this.peek)) {
this.advance();
}
var text = this.input.substring(start, this.index);
var result = new Token(start, text);
if (OPERATORS.indexOf(text) !== -1) {
result.withOp(text);
} else {
result.withGetterSetter(text);
}
return result;
};
Scanner.prototype.scanNumber = function scanNumber(start) {
assert(isDigit(this.peek));
var simple = this.index === start;
this.advance();
while (true) {
if (!isDigit(this.peek)) {
if (this.peek === $PERIOD) {
simple = false;
} else if (isExponentStart(this.peek)) {
this.advance();
if (isExponentSign(this.peek)) {
this.advance();
}
if (!isDigit(this.peek)) {
this.error('Invalid exponent', -1);
}
simple = false;
} else {
break;
}
}
this.advance();
}
var text = this.input.substring(start, this.index);
var value = simple ? parseInt(text, 10) : parseFloat(text);
return new Token(start, text).withValue(value);
};
Scanner.prototype.scanString = function scanString() {
assert(this.peek === $SQ || this.peek === $DQ);
var start = this.index;
var quote = this.peek;
this.advance();
var buffer = void 0;
var marker = this.index;
while (this.peek !== quote) {
if (this.peek === $BACKSLASH) {
if (!buffer) {
buffer = [];
}
buffer.push(this.input.substring(marker, this.index));
this.advance();
var _unescaped = void 0;
if (this.peek === $u) {
var hex = this.input.substring(this.index + 1, this.index + 5);
if (!/[A-Z0-9]{4}/.test(hex)) {
this.error("Invalid unicode escape [\\u" + hex + ']');
}
_unescaped = parseInt(hex, 16);
for (var _i21 = 0; _i21 < 5; ++_i21) {
this.advance();
}
} else {
_unescaped = unescape(this.peek);
this.advance();
}
buffer.push(String.fromCharCode(_unescaped));
marker = this.index;
} else if (this.peek === $EOF) {
this.error('Unterminated quote');
} else {
this.advance();
}
}
var last = this.input.substring(marker, this.index);
this.advance();
var text = this.input.substring(start, this.index);
var unescaped = last;
if (buffer !== null && buffer !== undefined) {
buffer.push(last);
unescaped = buffer.join('');
}
return new Token(start, text).withValue(unescaped);
};
Scanner.prototype.advance = function advance() {
if (++this.index >= this.length) {
this.peek = $EOF;
} else {
this.peek = this.input.charCodeAt(this.index);
}
};
Scanner.prototype.error = function error(message) {
var offset = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];
var position = this.index + offset;
throw new Error('Lexer Error: ' + message + ' at column ' + position + ' in expression [' + this.input + ']');
};
return Scanner;
}();
var OPERATORS = ['undefined', 'null', 'true', 'false', '+', '-', '*', '/', '%', '^', '=', '==', '===', '!=', '!==', '<', '>', '<=', '>=', '&&', '||', '&', '|', '!', '?'];
var $EOF = 0;
var $TAB = 9;
var $LF = 10;
var $VTAB = 11;
var $FF = 12;
var $CR = 13;
var $SPACE = 32;
var $BANG = 33;
var $DQ = 34;
var $$ = 36;
var $PERCENT = 37;
var $AMPERSAND = 38;
var $SQ = 39;
var $LPAREN = 40;
var $RPAREN = 41;
var $STAR = 42;
var $PLUS = 43;
var $COMMA = 44;
var $MINUS = 45;
var $PERIOD = 46;
var $SLASH = 47;
var $COLON = 58;
var $SEMICOLON = 59;
var $LT = 60;
var $EQ = 61;
var $GT = 62;
var $QUESTION = 63;
var $0 = 48;
var $9 = 57;
var $A = 65;
var $E = 69;
var $Z = 90;
var $LBRACKET = 91;
var $BACKSLASH = 92;
var $RBRACKET = 93;
var $CARET = 94;
var $_ = 95;
var $a = 97;
var $e = 101;
var $f = 102;
var $n = 110;
var $r = 114;
var $t = 116;
var $u = 117;
var $v = 118;
var $z = 122;
var $LBRACE = 123;
var $BAR = 124;
var $RBRACE = 125;
var $NBSP = 160;
function isWhitespace(code) {
return code >= $TAB && code <= $SPACE || code === $NBSP;
}
function isIdentifierStart(code) {
return $a <= code && code <= $z || $A <= code && code <= $Z || code === $_ || code === $$;
}
function isIdentifierPart(code) {
return $a <= code && code <= $z || $A <= code && code <= $Z || $0 <= code && code <= $9 || code === $_ || code === $$;
}
function isDigit(code) {
return $0 <= code && code <= $9;
}
function isExponentStart(code) {
return code === $e || code === $E;
}
function isExponentSign(code) {
return code === $MINUS || code === $PLUS;
}
function unescape(code) {
switch (code) {
case $n:
return $LF;
case $f:
return $FF;
case $r:
return $CR;
case $t:
return $TAB;
case $v:
return $VTAB;
default:
return code;
}
}
function assert(condition, message) {
if (!condition) {
throw message || 'Assertion failed';
}
}
var EOF = new Token(-1, null);
var Parser = exports.Parser = function () {
function Parser() {
this.cache = {};
this.lexer = new Lexer();
}
Parser.prototype.parse = function parse(input) {
input = input || '';
return this.cache[input] || (this.cache[input] = new ParserImplementation(this.lexer, input).parseChain());
};
return Parser;
}();
var ParserImplementation = exports.ParserImplementation = function () {
function ParserImplementation(lexer, input) {
this.index = 0;
this.input = input;
this.tokens = lexer.lex(input);
}
ParserImplementation.prototype.parseChain = function parseChain() {
var isChain = false;
var expressions = [];
while (this.optional(';')) {
isChain = true;
}
while (this.index < this.tokens.length) {
if (this.peek.text === ')' || this.peek.text === '}' || this.peek.text === ']') {
this.error('Unconsumed token ' + this.peek.text);
}
var expr = this.parseBindingBehavior();
expressions.push(expr);
while (this.optional(';')) {
isChain = true;
}
if (isChain) {
this.error('Multiple expressions are not allowed.');
}
}
return expressions.length === 1 ? expressions[0] : new Chain(expressions);
};
ParserImplementation.prototype.parseBindingBehavior = function parseBindingBehavior() {
var result = this.parseValueConverter();
while (this.optional('&')) {
var name = this.peek.text;
var args = [];
this.advance();
while (this.optional(':')) {
args.push(this.parseExpression());
}
result = new BindingBehavior(result, name, args);
}
return result;
};
ParserImplementation.prototype.parseValueConverter = function parseValueConverter() {
var result = this.parseExpression();
while (this.optional('|')) {
var name = this.peek.text;
var args = [];
this.advance();
while (this.optional(':')) {
args.push(this.parseExpression());
}
result = new ValueConverter(result, name, args, [result].concat(args));
}
return result;
};
ParserImplementation.prototype.parseExpression = function parseExpression() {
var start = this.peek.index;
var result = this.parseConditional();
while (this.peek.text === '=') {
if (!result.isAssignable) {
var end = this.index < this.tokens.length ? this.peek.index : this.input.length;
var _expression = this.input.substring(start, end);
this.error('Expression ' + _expression + ' is not assignable');
}
this.expect('=');
result = new Assign(result, this.parseConditional());
}
return result;
};
ParserImplementation.prototype.parseConditional = function parseConditional() {
var start = this.peek.index;
var result = this.parseLogicalOr();
if (this.optional('?')) {
var yes = this.parseExpression();
if (!this.optional(':')) {
var end = this.index < this.tokens.length ? this.peek.index : this.input.length;
var _expression2 = this.input.substring(start, end);
this.error('Conditional expression ' + _expression2 + ' requires all 3 expressions');
}
var no = this.parseExpression();
result = new Conditional(result, yes, no);
}
return result;
};
ParserImplementation.prototype.parseLogicalOr = function parseLogicalOr() {
var result = this.parseLogicalAnd();
while (this.optional('||')) {
result = new Binary('||', result, this.parseLogicalAnd());
}
return result;
};
ParserImplementation.prototype.parseLogicalAnd = function parseLogicalAnd() {
var result = this.parseEquality();
while (this.optional('&&')) {
result = new Binary('&&', result, this.parseEquality());
}
return result;
};
ParserImplementation.prototype.parseEquality = function parseEquality() {
var result = this.parseRelational();
while (true) {
if (this.optional('==')) {
result = new Binary('==', result, this.parseRelational());
} else if (this.optional('!=')) {
result = new Binary('!=', result, this.parseRelational());
} else if (this.optional('===')) {
result = new Binary('===', result, this.parseRelational());
} else if (this.optional('!==')) {
result = new Binary('!==', result, this.parseRelational());
} else {
return result;
}
}
};
ParserImplementation.prototype.parseRelational = function parseRelational() {
var result = this.parseAdditive();
while (true) {
if (this.optional('<')) {
result = new Binary('<', result, this.parseAdditive());
} else if (this.optional('>')) {
result = new Binary('>', result, this.parseAdditive());
} else if (this.optional('<=')) {
result = new Binary('<=', result, this.parseAdditive());
} else if (this.optional('>=')) {
result = new Binary('>=', result, this.parseAdditive());
} else {
return result;
}
}
};
ParserImplementation.prototype.parseAdditive = function parseAdditive() {
var result = this.parseMultiplicative();
while (true) {
if (this.optional('+')) {
result = new Binary('+', result, this.parseMultiplicative());
} else if (this.optional('-')) {
result = new Binary('-', result, this.parseMultiplicative());
} else {
return result;
}
}
};
ParserImplementation.prototype.parseMultiplicative = function parseMultiplicative() {
var result = this.parsePrefix();
while (true) {
if (this.optional('*')) {
result = new Binary('*', result, this.parsePrefix());
} else if (this.optional('%')) {
result = new Binary('%', result, this.parsePrefix());
} else if (this.optional('/')) {
result = new Binary('/', result, this.parsePrefix());
} else {
return result;
}
}
};
ParserImplementation.prototype.parsePrefix = function parsePrefix() {
if (this.optional('+')) {
return this.parsePrefix();
} else if (this.optional('-')) {
return new Binary('-', new LiteralPrimitive(0), this.parsePrefix());
} else if (this.optional('!')) {
return new PrefixNot('!', this.parsePrefix());
}
return this.parseAccessOrCallMember();
};
ParserImplementation.prototype.parseAccessOrCallMember = function parseAccessOrCallMember() {
var result = this.parsePrimary();
while (true) {
if (this.optional('.')) {
var name = this.peek.text;
this.advance();
if (this.optional('(')) {
var args = this.parseExpressionList(')');
this.expect(')');
if (result instanceof AccessThis) {
result = new CallScope(name, args, result.ancestor);
} else {
result = new CallMember(result, name, args);
}
} else {
if (result instanceof AccessThis) {
result = new AccessScope(name, result.ancestor);
} else {
result = new AccessMember(result, name);
}
}
} else if (this.optional('[')) {
var key = this.parseExpression();
this.expect(']');
result = new AccessKeyed(result, key);
} else if (this.optional('(')) {
var _args = this.parseExpressionList(')');
this.expect(')');
result = new CallFunction(result, _args);
} else {
return result;
}
}
};
ParserImplementation.prototype.parsePrimary = function parsePrimary() {
if (this.optional('(')) {
var result = this.parseExpression();
this.expect(')');
return result;
} else if (this.optional('null')) {
return new LiteralPrimitive(null);
} else if (this.optional('undefined')) {
return new LiteralPrimitive(undefined);
} else if (this.optional('true')) {
return new LiteralPrimitive(true);
} else if (this.optional('false')) {
return new LiteralPrimitive(false);
} else if (this.optional('[')) {
var elements = this.parseExpressionList(']');
this.expect(']');
return new LiteralArray(elements);
} else if (this.peek.text === '{') {
return this.parseObject();
} else if (this.peek.key !== null && this.peek.key !== undefined) {
return this.parseAccessOrCallScope();
} else if (this.peek.value !== null && this.peek.value !== undefined) {
var value = this.peek.value;
this.advance();
return value instanceof String || typeof value === 'string' ? new LiteralString(value) : new LiteralPrimitive(value);
} else if (this.index >= this.tokens.length) {
throw new Error('Unexpected end of expression: ' + this.input);
} else {
this.error('Unexpected token ' + this.peek.text);
}
};
ParserImplementation.prototype.parseAccessOrCallScope = function parseAccessOrCallScope() {
var name = this.peek.key;
this.advance();
if (name === '$this') {
return new AccessThis(0);
}
var ancestor = 0;
while (name === '$parent') {
ancestor++;
if (this.optional('.')) {
name = this.peek.key;
this.advance();
} else if (this.peek === EOF || this.peek.text === '(' || this.peek.text === ')' || this.peek.text === '[' || this.peek.text === '}' || this.peek.text === ',') {
return new AccessThis(ancestor);
} else {
this.error('Unexpected token ' + this.peek.text);
}
}
if (this.optional('(')) {
var args = this.parseExpressionList(')');
this.expect(')');
return new CallScope(name, args, ancestor);
}
return new AccessScope(name, ancestor);
};
ParserImplementation.prototype.parseObject = function parseObject() {
var keys = [];
var values = [];
this.expect('{');
if (this.peek.text !== '}') {
do {
var peek = this.peek;
var value = peek.value;
keys.push(typeof value === 'string' ? value : peek.text);
this.advance();
if (peek.key && (this.peek.text === ',' || this.peek.text === '}')) {
--this.index;
values.push(this.parseAccessOrCallScope());
} else {
this.expect(':');
values.push(this.parseExpression());
}
} while (this.optional(','));
}
this.expect('}');
return new LiteralObject(keys, values);
};
ParserImplementation.prototype.parseExpressionList = function parseExpressionList(terminator) {
var result = [];
if (this.peek.text !== terminator) {
do {
result.push(this.parseExpression());
} while (this.optional(','));
}
return result;
};
ParserImplementation.prototype.optional = function optional(text) {
if (this.peek.text === text) {
this.advance();
return true;
}
return false;
};
ParserImplementation.prototype.expect = function expect(text) {
if (this.peek.text === text) {
this.advance();
} else {
this.error('Missing expected ' + text);
}
};
ParserImplementation.prototype.advance = function advance() {
this.index++;
};
ParserImplementation.prototype.error = function error(message) {
var location = this.index < this.tokens.length ? 'at column ' + (this.tokens[this.index].index + 1) + ' in' : 'at the end of the expression';
throw new Error('Parser Error: ' + message + ' ' + location + ' [' + this.input + ']');
};
_createClass$1(ParserImplementation, [{
key: 'peek',
get: function get$$1() {
return this.index < this.tokens.length ? this.tokens[this.index] : EOF;
}
}]);
return ParserImplementation;
}();
var mapProto = Map.prototype;
function _getMapObserver(taskQueue, map) {
return ModifyMapObserver.for(taskQueue, map);
}
exports.getMapObserver = _getMapObserver;
var ModifyMapObserver = function (_ModifyCollectionObse2) {
_inherits(ModifyMapObserver, _ModifyCollectionObse2);
function ModifyMapObserver(taskQueue, map) {
return _possibleConstructorReturn(this, _ModifyCollectionObse2.call(this, taskQueue, map));
}
ModifyMapObserver.for = function _for(taskQueue, map) {
if (!('__map_observer__' in map)) {
Reflect.defineProperty(map, '__map_observer__', {
value: ModifyMapObserver.create(taskQueue, map),
enumerable: false, configurable: false
});
}
return map.__map_observer__;
};
ModifyMapObserver.create = function create(taskQueue, map) {
var observer = new ModifyMapObserver(taskQueue, map);
var proto = mapProto;
if (proto.set !== map.set || proto.delete !== map.delete || proto.clear !== map.clear) {
proto = {
set: map.set,
delete: map.delete,
clear: map.clear
};
}
map.set = function () {
var hasValue = map.has(arguments[0]);
var type = hasValue ? 'update' : 'add';
var oldValue = map.get(arguments[0]);
var methodCallResult = proto.set.apply(map, arguments);
if (!hasValue || oldValue !== map.get(arguments[0])) {
observer.addChangeRecord({
type: type,
object: map,
key: arguments[0],
oldValue: oldValue
});
}
return methodCallResult;
};
map.delete = function () {
var hasValue = map.has(arguments[0]);
var oldValue = map.get(arguments[0]);
var methodCallResult = proto.delete.apply(map, arguments);
if (hasValue) {
observer.addChangeRecord({
type: 'delete',
object: map,
key: arguments[0],
oldValue: oldValue
});
}
return methodCallResult;
};
map.clear = function () {
var methodCallResult = proto.clear.apply(map, arguments);
observer.addChangeRecord({
type: 'clear',
object: map
});
return methodCallResult;
};
return observer;
};
return ModifyMapObserver;
}(ModifyCollectionObserver);
function findOriginalEventTarget(event) {
return event.path && event.path[0] || event.deepPath && event.deepPath[0] || event.target;
}
function stopPropagation() {
this.standardStopPropagation();
this.propagationStopped = true;
}
function interceptStopPropagation(event) {
event.standardStopPropagation = event.stopPropagation;
event.stopPropagation = stopPropagation;
}
function handleCapturedEvent(event) {
var interceptInstalled = false;
event.propagationStopped = false;
var target = findOriginalEventTarget(event);
var orderedCallbacks = [];
while (target) {
if (target.capturedCallbacks) {
var callback = target.capturedCallbacks[event.type];
if (callback) {
if (!interceptInstalled) {
interceptStopPropagation(event);
interceptInstalled = true;
}
orderedCallbacks.push(callback);
}
}
target = target.parentNode;
}
for (var _i22 = orderedCallbacks.length - 1; _i22 >= 0; _i22--) {
var orderedCallback = orderedCallbacks[_i22];
orderedCallback(event);
if (event.propagationStopped) {
break;
}
}
}
var CapturedHandlerEntry = function () {
function CapturedHandlerEntry(eventName) {
this.eventName = eventName;
this.count = 0;
}
CapturedHandlerEntry.prototype.increment = function increment() {
this.count++;
if (this.count === 1) {
_aureliaPal$3.DOM.addEventListener(this.eventName, handleCapturedEvent, true);
}
};
CapturedHandlerEntry.prototype.decrement = function decrement() {
this.count--;
if (this.count === 0) {
_aureliaPal$3.DOM.removeEventListener(this.eventName, handleCapturedEvent, true);
}
};
return CapturedHandlerEntry;
}();
function handleDelegatedEvent(event) {
var interceptInstalled = false;
event.propagationStopped = false;
var target = findOriginalEventTarget(event);
while (target && !event.propagationStopped) {
if (target.delegatedCallbacks) {
var callback = target.delegatedCallbacks[event.type];
if (callback) {
if (!interceptInstalled) {
interceptStopPropagation(event);
interceptInstalled = true;
}
callback(event);
}
}
target = target.parentNode;
}
}
var DelegateHandlerEntry = function () {
function DelegateHandlerEntry(eventName) {
this.eventName = eventName;
this.count = 0;
}
DelegateHandlerEntry.prototype.increment = function increment() {
this.count++;
if (this.count === 1) {
_aureliaPal$3.DOM.addEventListener(this.eventName, handleDelegatedEvent, false);
}
};
DelegateHandlerEntry.prototype.decrement = function decrement() {
this.count--;
if (this.count === 0) {
_aureliaPal$3.DOM.removeEventListener(this.eventName, handleDelegatedEvent);
}
};
return DelegateHandlerEntry;
}();
var DefaultEventStrategy = function () {
function DefaultEventStrategy() {
this.delegatedHandlers = {};
this.capturedHandlers = {};
}
DefaultEventStrategy.prototype.subscribe = function subscribe(target, targetEvent, callback, strategy) {
var _this22 = this;
var delegatedHandlers = void 0;
var capturedHandlers = void 0;
var handlerEntry = void 0;
if (strategy === delegationStrategy.bubbling) {
var _ret = function () {
delegatedHandlers = _this22.delegatedHandlers;
handlerEntry = delegatedHandlers[targetEvent] || (delegatedHandlers[targetEvent] = new DelegateHandlerEntry(targetEvent));
var delegatedCallbacks = target.delegatedCallbacks || (target.delegatedCallbacks = {});
handlerEntry.increment();
delegatedCallbacks[targetEvent] = callback;
return {
v: function v() {
handlerEntry.decrement();
delegatedCallbacks[targetEvent] = null;
}
};
}();
if ((typeof _ret === 'undefined' ? 'undefined' : _typeof$3(_ret)) === "object") return _ret.v;
}
if (strategy === delegationStrategy.capturing) {
var _ret2 = function () {
capturedHandlers = _this22.capturedHandlers;
handlerEntry = capturedHandlers[targetEvent] || (capturedHandlers[targetEvent] = new CapturedHandlerEntry(targetEvent));
var capturedCallbacks = target.capturedCallbacks || (target.capturedCallbacks = {});
handlerEntry.increment();
capturedCallbacks[targetEvent] = callback;
return {
v: function v() {
handlerEntry.decrement();
capturedCallbacks[targetEvent] = null;
}
};
}();
if ((typeof _ret2 === 'undefined' ? 'undefined' : _typeof$3(_ret2)) === "object") return _ret2.v;
}
target.addEventListener(targetEvent, callback, false);
return function () {
target.removeEventListener(targetEvent, callback);
};
};
return DefaultEventStrategy;
}();
var delegationStrategy = exports.delegationStrategy = {
none: 0,
capturing: 1,
bubbling: 2
};
var EventManager = exports.EventManager = function () {
function EventManager() {
this.elementHandlerLookup = {};
this.eventStrategyLookup = {};
this.registerElementConfig({
tagName: 'input',
properties: {
value: ['change', 'input'],
checked: ['change', 'input'],
files: ['change', 'input']
}
});
this.registerElementConfig({
tagName: 'textarea',
properties: {
value: ['change', 'input']
}
});
this.registerElementConfig({
tagName: 'select',
properties: {
value: ['change']
}
});
this.registerElementConfig({
tagName: 'content editable',
properties: {
value: ['change', 'input', 'blur', 'keyup', 'paste']
}
});
this.registerElementConfig({
tagName: 'scrollable element',
properties: {
scrollTop: ['scroll'],
scrollLeft: ['scroll']
}
});
this.defaultEventStrategy = new DefaultEventStrategy();
}
EventManager.prototype.registerElementConfig = function registerElementConfig(config) {
var tagName = config.tagName.toLowerCase();
var properties = config.properties;
var propertyName = void 0;
this.elementHandlerLookup[tagName] = {};
for (propertyName in properties) {
if (properties.hasOwnProperty(propertyName)) {
this.registerElementPropertyConfig(tagName, propertyName, properties[propertyName]);
}
}
};
EventManager.prototype.registerElementPropertyConfig = function registerElementPropertyConfig(tagName, propertyName, events) {
this.elementHandlerLookup[tagName][propertyName] = this.createElementHandler(events);
};
EventManager.prototype.createElementHandler = function createElementHandler(events) {
return {
subscribe: function subscribe(target, callback) {
events.forEach(function (changeEvent) {
target.addEventListener(changeEvent, callback, false);
});
return function () {
events.forEach(function (changeEvent) {
target.removeEventListener(changeEvent, callback);
});
};
}
};
};
EventManager.prototype.registerElementHandler = function registerElementHandler(tagName, handler) {
this.elementHandlerLookup[tagName.toLowerCase()] = handler;
};
EventManager.prototype.registerEventStrategy = function registerEventStrategy(eventName, strategy) {
this.eventStrategyLookup[eventName] = strategy;
};
EventManager.prototype.getElementHandler = function getElementHandler(target, propertyName) {
var tagName = void 0;
var lookup = this.elementHandlerLookup;
if (target.tagName) {
tagName = target.tagName.toLowerCase();
if (lookup[tagName] && lookup[tagName][propertyName]) {
return lookup[tagName][propertyName];
}
if (propertyName === 'textContent' || propertyName === 'innerHTML') {
return lookup['content editable'].value;
}
if (propertyName === 'scrollTop' || propertyName === 'scrollLeft') {
return lookup['scrollable element'][propertyName];
}
}
return null;
};
EventManager.prototype.addEventListener = function addEventListener(target, targetEvent, callback, delegate) {
return (this.eventStrategyLookup[targetEvent] || this.defaultEventStrategy).subscribe(target, targetEvent, callback, delegate);
};
return EventManager;
}();
var DirtyChecker = exports.DirtyChecker = function () {
function DirtyChecker() {
this.tracked = [];
this.checkDelay = 120;
}
DirtyChecker.prototype.addProperty = function addProperty(property) {
var tracked = this.tracked;
tracked.push(property);
if (tracked.length === 1) {
this.scheduleDirtyCheck();
}
};
DirtyChecker.prototype.removeProperty = function removeProperty(property) {
var tracked = this.tracked;
tracked.splice(tracked.indexOf(property), 1);
};
DirtyChecker.prototype.scheduleDirtyCheck = function scheduleDirtyCheck() {
var _this23 = this;
setTimeout(function () {
return _this23.check();
}, this.checkDelay);
};
DirtyChecker.prototype.check = function check() {
var tracked = this.tracked;
var i = tracked.length;
while (i--) {
var current = tracked[i];
if (current.isDirty()) {
current.call();
}
}
if (tracked.length) {
this.scheduleDirtyCheck();
}
};
return DirtyChecker;
}();
var DirtyCheckProperty = exports.DirtyCheckProperty = (_dec5$1 = subscriberCollection(), _dec5$1(_class5$1 = function () {
function DirtyCheckProperty(dirtyChecker, obj, propertyName) {
this.dirtyChecker = dirtyChecker;
this.obj = obj;
this.propertyName = propertyName;
}
DirtyCheckProperty.prototype.getValue = function getValue() {
return this.obj[this.propertyName];
};
DirtyCheckProperty.prototype.setValue = function setValue(newValue) {
this.obj[this.propertyName] = newValue;
};
DirtyCheckProperty.prototype.call = function call() {
var oldValue = this.oldValue;
var newValue = this.getValue();
this.callSubscribers(newValue, oldValue);
this.oldValue = newValue;
};
DirtyCheckProperty.prototype.isDirty = function isDirty() {
return this.oldValue !== this.obj[this.propertyName];
};
DirtyCheckProperty.prototype.subscribe = function subscribe(context, callable) {
if (!this.hasSubscribers()) {
this.oldValue = this.getValue();
this.dirtyChecker.addProperty(this);
}
this.addSubscriber(context, callable);
};
DirtyCheckProperty.prototype.unsubscribe = function unsubscribe(context, callable) {
if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {
this.dirtyChecker.removeProperty(this);
}
};
return DirtyCheckProperty;
}()) || _class5$1);
var logger$1 = LogManager$1.getLogger('property-observation');
var propertyAccessor = exports.propertyAccessor = {
getValue: function getValue(obj, propertyName) {
return obj[propertyName];
},
setValue: function setValue(value, obj, propertyName) {
obj[propertyName] = value;
}
};
var PrimitiveObserver = exports.PrimitiveObserver = function () {
function PrimitiveObserver(primitive, propertyName) {
this.doNotCache = true;
this.primitive = primitive;
this.propertyName = propertyName;
}
PrimitiveObserver.prototype.getValue = function getValue() {
return this.primitive[this.propertyName];
};
PrimitiveObserver.prototype.setValue = function setValue() {
var type = _typeof$3(this.primitive);
throw new Error('The ' + this.propertyName + ' property of a ' + type + ' (' + this.primitive + ') cannot be assigned.');
};
PrimitiveObserver.prototype.subscribe = function subscribe() {};
PrimitiveObserver.prototype.unsubscribe = function unsubscribe() {};
return PrimitiveObserver;
}();
var SetterObserver = exports.SetterObserver = (_dec6$1 = subscriberCollection(), _dec6$1(_class7$1 = function () {
function SetterObserver(taskQueue, obj, propertyName) {
this.taskQueue = taskQueue;
this.obj = obj;
this.propertyName = propertyName;
this.queued = false;
this.observing = false;
}
SetterObserver.prototype.getValue = function getValue() {
return this.obj[this.propertyName];
};
SetterObserver.prototype.setValue = function setValue(newValue) {
this.obj[this.propertyName] = newValue;
};
SetterObserver.prototype.getterValue = function getterValue() {
return this.currentValue;
};
SetterObserver.prototype.setterValue = function setterValue(newValue) {
var oldValue = this.currentValue;
if (oldValue !== newValue) {
if (!this.queued) {
this.oldValue = oldValue;
this.queued = true;
this.taskQueue.queueMicroTask(this);
}
this.currentValue = newValue;
}
};
SetterObserver.prototype.call = function call() {
var oldValue = this.oldValue;
var newValue = this.currentValue;
this.queued = false;
this.callSubscribers(newValue, oldValue);
};
SetterObserver.prototype.subscribe = function subscribe(context, callable) {
if (!this.observing) {
this.convertProperty();
}
this.addSubscriber(context, callable);
};
SetterObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
this.removeSubscriber(context, callable);
};
SetterObserver.prototype.convertProperty = function convertProperty() {
this.observing = true;
this.currentValue = this.obj[this.propertyName];
this.setValue = this.setterValue;
this.getValue = this.getterValue;
if (!Reflect.defineProperty(this.obj, this.propertyName, {
configurable: true,
enumerable: this.propertyName in this.obj ? this.obj.propertyIsEnumerable(this.propertyName) : true,
get: this.getValue.bind(this),
set: this.setValue.bind(this)
})) {
logger$1.warn('Cannot observe property \'' + this.propertyName + '\' of object', this.obj);
}
};
return SetterObserver;
}()) || _class7$1);
var XLinkAttributeObserver = exports.XLinkAttributeObserver = function () {
function XLinkAttributeObserver(element, propertyName, attributeName) {
this.element = element;
this.propertyName = propertyName;
this.attributeName = attributeName;
}
XLinkAttributeObserver.prototype.getValue = function getValue() {
return this.element.getAttributeNS('http://www.w3.org/1999/xlink', this.attributeName);
};
XLinkAttributeObserver.prototype.setValue = function setValue(newValue) {
return this.element.setAttributeNS('http://www.w3.org/1999/xlink', this.attributeName, newValue);
};
XLinkAttributeObserver.prototype.subscribe = function subscribe() {
throw new Error('Observation of a "' + this.element.nodeName + '" element\'s "' + this.propertyName + '" property is not supported.');
};
return XLinkAttributeObserver;
}();
var dataAttributeAccessor = exports.dataAttributeAccessor = {
getValue: function getValue(obj, propertyName) {
return obj.getAttribute(propertyName);
},
setValue: function setValue(value, obj, propertyName) {
return obj.setAttribute(propertyName, value);
}
};
var DataAttributeObserver = exports.DataAttributeObserver = function () {
function DataAttributeObserver(element, propertyName) {
this.element = element;
this.propertyName = propertyName;
}
DataAttributeObserver.prototype.getValue = function getValue() {
return this.element.getAttribute(this.propertyName);
};
DataAttributeObserver.prototype.setValue = function setValue(newValue) {
return this.element.setAttribute(this.propertyName, newValue);
};
DataAttributeObserver.prototype.subscribe = function subscribe() {
throw new Error('Observation of a "' + this.element.nodeName + '" element\'s "' + this.propertyName + '" property is not supported.');
};
return DataAttributeObserver;
}();
var StyleObserver = exports.StyleObserver = function () {
function StyleObserver(element, propertyName) {
this.element = element;
this.propertyName = propertyName;
this.styles = null;
this.version = 0;
}
StyleObserver.prototype.getValue = function getValue() {
return this.element.style.cssText;
};
StyleObserver.prototype._setProperty = function _setProperty(style, value) {
var priority = '';
if (value !== null && value !== undefined && typeof value.indexOf === 'function' && value.indexOf('!important') !== -1) {
priority = 'important';
value = value.replace('!important', '');
}
this.element.style.setProperty(style, value, priority);
};
StyleObserver.prototype.setValue = function setValue(newValue) {
var styles = this.styles || {};
var style = void 0;
var version = this.version;
if (newValue !== null && newValue !== undefined) {
if (newValue instanceof Object) {
var value = void 0;
for (style in newValue) {
if (newValue.hasOwnProperty(style)) {
value = newValue[style];
style = style.replace(/([A-Z])/g, function (m) {
return '-' + m.toLowerCase();
});
styles[style] = version;
this._setProperty(style, value);
}
}
} else if (newValue.length) {
var rx = /\s*([\w\-]+)\s*:\s*((?:(?:[\w\-]+\(\s*(?:"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|[\w\-]+\(\s*(?:^"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|[^\)]*)\),?|[^\)]*)\),?|"(?:\\"|[^"])*"|'(?:\\'|[^'])*'|[^;]*),?\s*)+);?/g;
var pair = void 0;
while ((pair = rx.exec(newValue)) !== null) {
style = pair[1];
if (!style) {
continue;
}
styles[style] = version;
this._setProperty(style, pair[2]);
}
}
}
this.styles = styles;
this.version += 1;
if (version === 0) {
return;
}
version -= 1;
for (style in styles) {
if (!styles.hasOwnProperty(style) || styles[style] !== version) {
continue;
}
this.element.style.removeProperty(style);
}
};
StyleObserver.prototype.subscribe = function subscribe() {
throw new Error('Observation of a "' + this.element.nodeName + '" element\'s "' + this.propertyName + '" property is not supported.');
};
return StyleObserver;
}();
var ValueAttributeObserver = exports.ValueAttributeObserver = (_dec7$1 = subscriberCollection(), _dec7$1(_class8$1 = function () {
function ValueAttributeObserver(element, propertyName, handler) {
this.element = element;
this.propertyName = propertyName;
this.handler = handler;
if (propertyName === 'files') {
this.setValue = function () {};
}
}
ValueAttributeObserver.prototype.getValue = function getValue() {
return this.element[this.propertyName];
};
ValueAttributeObserver.prototype.setValue = function setValue(newValue) {
newValue = newValue === undefined || newValue === null ? '' : newValue;
if (this.element[this.propertyName] !== newValue) {
this.element[this.propertyName] = newValue;
this.notify();
}
};
ValueAttributeObserver.prototype.notify = function notify() {
var oldValue = this.oldValue;
var newValue = this.getValue();
this.callSubscribers(newValue, oldValue);
this.oldValue = newValue;
};
ValueAttributeObserver.prototype.subscribe = function subscribe(context, callable) {
if (!this.hasSubscribers()) {
this.oldValue = this.getValue();
this.disposeHandler = this.handler.subscribe(this.element, this.notify.bind(this));
}
this.addSubscriber(context, callable);
};
ValueAttributeObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {
this.disposeHandler();
this.disposeHandler = null;
}
};
return ValueAttributeObserver;
}()) || _class8$1);
var checkedArrayContext = 'CheckedObserver:array';
var checkedValueContext = 'CheckedObserver:value';
var CheckedObserver = exports.CheckedObserver = (_dec8$1 = subscriberCollection(), _dec8$1(_class9$1 = function () {
function CheckedObserver(element, handler, observerLocator) {
this.element = element;
this.handler = handler;
this.observerLocator = observerLocator;
}
CheckedObserver.prototype.getValue = function getValue() {
return this.value;
};
CheckedObserver.prototype.setValue = function setValue(newValue) {
if (this.initialSync && this.value === newValue) {
return;
}
if (this.arrayObserver) {
this.arrayObserver.unsubscribe(checkedArrayContext, this);
this.arrayObserver = null;
}
if (this.element.type === 'checkbox' && Array.isArray(newValue)) {
this.arrayObserver = this.observerLocator.getArrayObserver(newValue);
this.arrayObserver.subscribe(checkedArrayContext, this);
}
this.oldValue = this.value;
this.value = newValue;
this.synchronizeElement();
this.notify();
if (!this.initialSync) {
this.initialSync = true;
this.observerLocator.taskQueue.queueMicroTask(this);
}
};
CheckedObserver.prototype.call = function call(context, splices) {
this.synchronizeElement();
if (!this.valueObserver) {
this.valueObserver = this.element.__observers__.model || this.element.__observers__.value;
if (this.valueObserver) {
this.valueObserver.subscribe(checkedValueContext, this);
}
}
};
CheckedObserver.prototype.synchronizeElement = function synchronizeElement() {
var value = this.value;
var element = this.element;
var elementValue = element.hasOwnProperty('model') ? element.model : element.value;
var isRadio = element.type === 'radio';
var matcher = element.matcher || function (a, b) {
return a === b;
};
element.checked = isRadio && !!matcher(value, elementValue) || !isRadio && value === true || !isRadio && Array.isArray(value) && value.findIndex(function (item) {
return !!matcher(item, elementValue);
}) !== -1;
};
CheckedObserver.prototype.synchronizeValue = function synchronizeValue() {
var value = this.value;
var element = this.element;
var elementValue = element.hasOwnProperty('model') ? element.model : element.value;
var index = void 0;
var matcher = element.matcher || function (a, b) {
return a === b;
};
if (element.type === 'checkbox') {
if (Array.isArray(value)) {
index = value.findIndex(function (item) {
return !!matcher(item, elementValue);
});
if (element.checked && index === -1) {
value.push(elementValue);
} else if (!element.checked && index !== -1) {
value.splice(index, 1);
}
return;
}
value = element.checked;
} else if (element.checked) {
value = elementValue;
} else {
return;
}
this.oldValue = this.value;
this.value = value;
this.notify();
};
CheckedObserver.prototype.notify = function notify() {
var oldValue = this.oldValue;
var newValue = this.value;
if (newValue === oldValue) {
return;
}
this.callSubscribers(newValue, oldValue);
};
CheckedObserver.prototype.subscribe = function subscribe(context, callable) {
if (!this.hasSubscribers()) {
this.disposeHandler = this.handler.subscribe(this.element, this.synchronizeValue.bind(this, false));
}
this.addSubscriber(context, callable);
};
CheckedObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {
this.disposeHandler();
this.disposeHandler = null;
}
};
CheckedObserver.prototype.unbind = function unbind() {
if (this.arrayObserver) {
this.arrayObserver.unsubscribe(checkedArrayContext, this);
this.arrayObserver = null;
}
if (this.valueObserver) {
this.valueObserver.unsubscribe(checkedValueContext, this);
}
};
return CheckedObserver;
}()) || _class9$1);
var selectArrayContext = 'SelectValueObserver:array';
var SelectValueObserver = exports.SelectValueObserver = (_dec9$1 = subscriberCollection(), _dec9$1(_class10 = function () {
function SelectValueObserver(element, handler, observerLocator) {
this.element = element;
this.handler = handler;
this.observerLocator = observerLocator;
}
SelectValueObserver.prototype.getValue = function getValue() {
return this.value;
};
SelectValueObserver.prototype.setValue = function setValue(newValue) {
if (newValue !== null && newValue !== undefined && this.element.multiple && !Array.isArray(newValue)) {
throw new Error('Only null or Array instances can be bound to a multi-select.');
}
if (this.value === newValue) {
return;
}
if (this.arrayObserver) {
this.arrayObserver.unsubscribe(selectArrayContext, this);
this.arrayObserver = null;
}
if (Array.isArray(newValue)) {
this.arrayObserver = this.observerLocator.getArrayObserver(newValue);
this.arrayObserver.subscribe(selectArrayContext, this);
}
this.oldValue = this.value;
this.value = newValue;
this.synchronizeOptions();
this.notify();
if (!this.initialSync) {
this.initialSync = true;
this.observerLocator.taskQueue.queueMicroTask(this);
}
};
SelectValueObserver.prototype.call = function call(context, splices) {
this.synchronizeOptions();
};
SelectValueObserver.prototype.synchronizeOptions = function synchronizeOptions() {
var value = this.value;
var isArray = void 0;
if (Array.isArray(value)) {
isArray = true;
}
var options = this.element.options;
var i = options.length;
var matcher = this.element.matcher || function (a, b) {
return a === b;
};
var _loop = function _loop() {
var option = options.item(i);
var optionValue = option.hasOwnProperty('model') ? option.model : option.value;
if (isArray) {
option.selected = value.findIndex(function (item) {
return !!matcher(optionValue, item);
}) !== -1;
return 'continue';
}
option.selected = !!matcher(optionValue, value);
};
while (i--) {
var _ret3 = _loop();
if (_ret3 === 'continue') continue;
}
};
SelectValueObserver.prototype.synchronizeValue = function synchronizeValue() {
var _this24 = this;
var options = this.element.options;
var count = 0;
var value = [];
for (var _i23 = 0, ii = options.length; _i23 < ii; _i23++) {
var _option = options.item(_i23);
if (!_option.selected) {
continue;
}
value.push(_option.hasOwnProperty('model') ? _option.model : _option.value);
count++;
}
if (this.element.multiple) {
if (Array.isArray(this.value)) {
var _ret4 = function () {
var matcher = _this24.element.matcher || function (a, b) {
return a === b;
};
var i = 0;
var _loop2 = function _loop2() {
var a = _this24.value[i];
if (value.findIndex(function (b) {
return matcher(a, b);
}) === -1) {
_this24.value.splice(i, 1);
} else {
i++;
}
};
while (i < _this24.value.length) {
_loop2();
}
i = 0;
var _loop3 = function _loop3() {
var a = value[i];
if (_this24.value.findIndex(function (b) {
return matcher(a, b);
}) === -1) {
_this24.value.push(a);
}
i++;
};
while (i < value.length) {
_loop3();
}
return {
v: void 0
};
}();
if ((typeof _ret4 === 'undefined' ? 'undefined' : _typeof$3(_ret4)) === "object") return _ret4.v;
}
} else {
if (count === 0) {
value = null;
} else {
value = value[0];
}
}
if (value !== this.value) {
this.oldValue = this.value;
this.value = value;
this.notify();
}
};
SelectValueObserver.prototype.notify = function notify() {
var oldValue = this.oldValue;
var newValue = this.value;
this.callSubscribers(newValue, oldValue);
};
SelectValueObserver.prototype.subscribe = function subscribe(context, callable) {
if (!this.hasSubscribers()) {
this.disposeHandler = this.handler.subscribe(this.element, this.synchronizeValue.bind(this, false));
}
this.addSubscriber(context, callable);
};
SelectValueObserver.prototype.unsubscribe = function unsubscribe(context, callable) {
if (this.removeSubscriber(context, callable) && !this.hasSubscribers()) {
this.disposeHandler();
this.disposeHandler = null;
}
};
SelectValueObserver.prototype.bind = function bind() {
var _this25 = this;
this.domObserver = _aureliaPal$3.DOM.createMutationObserver(function () {
_this25.synchronizeOptions();
_this25.synchronizeValue();
});
this.domObserver.observe(this.element, { childList: true, subtree: true });
};
SelectValueObserver.prototype.unbind = function unbind() {
this.domObserver.disconnect();
this.domObserver = null;
if (this.arrayObserver) {
this.arrayObserver.unsubscribe(selectArrayContext, this);
this.arrayObserver = null;
}
};
return SelectValueObserver;
}()) || _class10);
var ClassObserver = exports.ClassObserver = function () {
function ClassObserver(element) {
this.element = element;
this.doNotCache = true;
this.value = '';
this.version = 0;
}
ClassObserver.prototype.getValue = function getValue() {
return this.value;
};
ClassObserver.prototype.setValue = function setValue(newValue) {
var nameIndex = this.nameIndex || {};
var version = this.version;
var names = void 0;
var name = void 0;
if (newValue !== null && newValue !== undefined && newValue.length) {
names = newValue.split(/\s+/);
for (var _i24 = 0, length = names.length; _i24 < length; _i24++) {
name = names[_i24];
if (name === '') {
continue;
}
nameIndex[name] = version;
this.element.classList.add(name);
}
}
this.value = newValue;
this.nameIndex = nameIndex;
this.version += 1;
if (version === 0) {
return;
}
version -= 1;
for (name in nameIndex) {
if (!nameIndex.hasOwnProperty(name) || nameIndex[name] !== version) {
continue;
}
this.element.classList.remove(name);
}
};
ClassObserver.prototype.subscribe = function subscribe() {
throw new Error('Observation of a "' + this.element.nodeName + '" element\'s "class" property is not supported.');
};
return ClassObserver;
}();
function hasDeclaredDependencies(descriptor) {
return !!(descriptor && descriptor.get && descriptor.get.dependencies);
}
function declarePropertyDependencies(ctor, propertyName, dependencies) {
var descriptor = Object.getOwnPropertyDescriptor(ctor.prototype, propertyName);
descriptor.get.dependencies = dependencies;
}
function computedFrom() {
for (var _len = arguments.length, rest = Array(_len), _key = 0; _key < _len; _key++) {
rest[_key] = arguments[_key];
}
return function (target, key, descriptor) {
descriptor.get.dependencies = rest;
return descriptor;
};
}
var ComputedExpression = exports.ComputedExpression = function (_Expression19) {
_inherits(ComputedExpression, _Expression19);
function ComputedExpression(name, dependencies) {
var _this26 = _possibleConstructorReturn(this, _Expression19.call(this));
_this26.name = name;
_this26.dependencies = dependencies;
_this26.isAssignable = true;
return _this26;
}
ComputedExpression.prototype.evaluate = function evaluate(scope, lookupFunctions) {
return scope.bindingContext[this.name];
};
ComputedExpression.prototype.assign = function assign(scope, value) {
scope.bindingContext[this.name] = value;
};
ComputedExpression.prototype.accept = function accept(visitor) {
throw new Error('not implemented');
};
ComputedExpression.prototype.connect = function connect(binding, scope) {
var dependencies = this.dependencies;
var i = dependencies.length;
while (i--) {
dependencies[i].connect(binding, scope);
}
};
return ComputedExpression;
}(Expression);
function createComputedObserver(obj, propertyName, descriptor, observerLocator) {
var dependencies = descriptor.get.dependencies;
if (!(dependencies instanceof ComputedExpression)) {
var _i25 = dependencies.length;
while (_i25--) {
dependencies[_i25] = observerLocator.parser.parse(dependencies[_i25]);
}
dependencies = descriptor.get.dependencies = new ComputedExpression(propertyName, dependencies);
}
var scope = { bindingContext: obj, overrideContext: createOverrideContext(obj) };
return new ExpressionObserver(scope, dependencies, observerLocator);
}
var svgElements = void 0;
var svgPresentationElements = void 0;
var svgPresentationAttributes = void 0;
var svgAnalyzer = void 0;
if (typeof FEATURE_NO_SVG === 'undefined') {
(function () {
svgElements = {
a: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'target', 'transform', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
altGlyph: ['class', 'dx', 'dy', 'externalResourcesRequired', 'format', 'glyphRef', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
altGlyphDef: ['id', 'xml:base', 'xml:lang', 'xml:space'],
altGlyphItem: ['id', 'xml:base', 'xml:lang', 'xml:space'],
animate: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
animateColor: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
animateMotion: ['accumulate', 'additive', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keyPoints', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'origin', 'path', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'rotate', 'systemLanguage', 'to', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
animateTransform: ['accumulate', 'additive', 'attributeName', 'attributeType', 'begin', 'by', 'calcMode', 'dur', 'end', 'externalResourcesRequired', 'fill', 'from', 'id', 'keySplines', 'keyTimes', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'type', 'values', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
circle: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'r', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
clipPath: ['class', 'clipPathUnits', 'externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
'color-profile': ['id', 'local', 'name', 'rendering-intent', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
cursor: ['externalResourcesRequired', 'id', 'requiredExtensions', 'requiredFeatures', 'systemLanguage', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
defs: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
desc: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],
ellipse: ['class', 'cx', 'cy', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
feBlend: ['class', 'height', 'id', 'in', 'in2', 'mode', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feColorMatrix: ['class', 'height', 'id', 'in', 'result', 'style', 'type', 'values', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feComponentTransfer: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feComposite: ['class', 'height', 'id', 'in', 'in2', 'k1', 'k2', 'k3', 'k4', 'operator', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feConvolveMatrix: ['bias', 'class', 'divisor', 'edgeMode', 'height', 'id', 'in', 'kernelMatrix', 'kernelUnitLength', 'order', 'preserveAlpha', 'result', 'style', 'targetX', 'targetY', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feDiffuseLighting: ['class', 'diffuseConstant', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feDisplacementMap: ['class', 'height', 'id', 'in', 'in2', 'result', 'scale', 'style', 'width', 'x', 'xChannelSelector', 'xml:base', 'xml:lang', 'xml:space', 'y', 'yChannelSelector'],
feDistantLight: ['azimuth', 'elevation', 'id', 'xml:base', 'xml:lang', 'xml:space'],
feFlood: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feFuncA: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],
feFuncB: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],
feFuncG: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],
feFuncR: ['amplitude', 'exponent', 'id', 'intercept', 'offset', 'slope', 'tableValues', 'type', 'xml:base', 'xml:lang', 'xml:space'],
feGaussianBlur: ['class', 'height', 'id', 'in', 'result', 'stdDeviation', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feImage: ['class', 'externalResourcesRequired', 'height', 'id', 'preserveAspectRatio', 'result', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feMerge: ['class', 'height', 'id', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feMergeNode: ['id', 'xml:base', 'xml:lang', 'xml:space'],
feMorphology: ['class', 'height', 'id', 'in', 'operator', 'radius', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feOffset: ['class', 'dx', 'dy', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
fePointLight: ['id', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],
feSpecularLighting: ['class', 'height', 'id', 'in', 'kernelUnitLength', 'result', 'specularConstant', 'specularExponent', 'style', 'surfaceScale', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feSpotLight: ['id', 'limitingConeAngle', 'pointsAtX', 'pointsAtY', 'pointsAtZ', 'specularExponent', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'z'],
feTile: ['class', 'height', 'id', 'in', 'result', 'style', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
feTurbulence: ['baseFrequency', 'class', 'height', 'id', 'numOctaves', 'result', 'seed', 'stitchTiles', 'style', 'type', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
filter: ['class', 'externalResourcesRequired', 'filterRes', 'filterUnits', 'height', 'id', 'primitiveUnits', 'style', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
font: ['class', 'externalResourcesRequired', 'horiz-adv-x', 'horiz-origin-x', 'horiz-origin-y', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],
'font-face': ['accent-height', 'alphabetic', 'ascent', 'bbox', 'cap-height', 'descent', 'font-family', 'font-size', 'font-stretch', 'font-style', 'font-variant', 'font-weight', 'hanging', 'id', 'ideographic', 'mathematical', 'overline-position', 'overline-thickness', 'panose-1', 'slope', 'stemh', 'stemv', 'strikethrough-position', 'strikethrough-thickness', 'underline-position', 'underline-thickness', 'unicode-range', 'units-per-em', 'v-alphabetic', 'v-hanging', 'v-ideographic', 'v-mathematical', 'widths', 'x-height', 'xml:base', 'xml:lang', 'xml:space'],
'font-face-format': ['id', 'string', 'xml:base', 'xml:lang', 'xml:space'],
'font-face-name': ['id', 'name', 'xml:base', 'xml:lang', 'xml:space'],
'font-face-src': ['id', 'xml:base', 'xml:lang', 'xml:space'],
'font-face-uri': ['id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
foreignObject: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
g: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
glyph: ['arabic-form', 'class', 'd', 'glyph-name', 'horiz-adv-x', 'id', 'lang', 'orientation', 'style', 'unicode', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],
glyphRef: ['class', 'dx', 'dy', 'format', 'glyphRef', 'id', 'style', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
hkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space'],
image: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
line: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'x1', 'x2', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],
linearGradient: ['class', 'externalResourcesRequired', 'gradientTransform', 'gradientUnits', 'id', 'spreadMethod', 'style', 'x1', 'x2', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y1', 'y2'],
marker: ['class', 'externalResourcesRequired', 'id', 'markerHeight', 'markerUnits', 'markerWidth', 'orient', 'preserveAspectRatio', 'refX', 'refY', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],
mask: ['class', 'externalResourcesRequired', 'height', 'id', 'maskContentUnits', 'maskUnits', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
metadata: ['id', 'xml:base', 'xml:lang', 'xml:space'],
'missing-glyph': ['class', 'd', 'horiz-adv-x', 'id', 'style', 'vert-adv-y', 'vert-origin-x', 'vert-origin-y', 'xml:base', 'xml:lang', 'xml:space'],
mpath: ['externalResourcesRequired', 'id', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
path: ['class', 'd', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'pathLength', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
pattern: ['class', 'externalResourcesRequired', 'height', 'id', 'patternContentUnits', 'patternTransform', 'patternUnits', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'viewBox', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
polygon: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
polyline: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'points', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
radialGradient: ['class', 'cx', 'cy', 'externalResourcesRequired', 'fx', 'fy', 'gradientTransform', 'gradientUnits', 'id', 'r', 'spreadMethod', 'style', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
rect: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rx', 'ry', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
script: ['externalResourcesRequired', 'id', 'type', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
set: ['attributeName', 'attributeType', 'begin', 'dur', 'end', 'externalResourcesRequired', 'fill', 'id', 'max', 'min', 'onbegin', 'onend', 'onload', 'onrepeat', 'repeatCount', 'repeatDur', 'requiredExtensions', 'requiredFeatures', 'restart', 'systemLanguage', 'to', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
stop: ['class', 'id', 'offset', 'style', 'xml:base', 'xml:lang', 'xml:space'],
style: ['id', 'media', 'title', 'type', 'xml:base', 'xml:lang', 'xml:space'],
svg: ['baseProfile', 'class', 'contentScriptType', 'contentStyleType', 'externalResourcesRequired', 'height', 'id', 'onabort', 'onactivate', 'onclick', 'onerror', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'onresize', 'onscroll', 'onunload', 'onzoom', 'preserveAspectRatio', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'version', 'viewBox', 'width', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y', 'zoomAndPan'],
switch: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'xml:base', 'xml:lang', 'xml:space'],
symbol: ['class', 'externalResourcesRequired', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'preserveAspectRatio', 'style', 'viewBox', 'xml:base', 'xml:lang', 'xml:space'],
text: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'transform', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
textPath: ['class', 'externalResourcesRequired', 'id', 'lengthAdjust', 'method', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'spacing', 'startOffset', 'style', 'systemLanguage', 'textLength', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space'],
title: ['class', 'id', 'style', 'xml:base', 'xml:lang', 'xml:space'],
tref: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
tspan: ['class', 'dx', 'dy', 'externalResourcesRequired', 'id', 'lengthAdjust', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'rotate', 'style', 'systemLanguage', 'textLength', 'x', 'xml:base', 'xml:lang', 'xml:space', 'y'],
use: ['class', 'externalResourcesRequired', 'height', 'id', 'onactivate', 'onclick', 'onfocusin', 'onfocusout', 'onload', 'onmousedown', 'onmousemove', 'onmouseout', 'onmouseover', 'onmouseup', 'requiredExtensions', 'requiredFeatures', 'style', 'systemLanguage', 'transform', 'width', 'x', 'xlink:actuate', 'xlink:arcrole', 'xlink:href', 'xlink:role', 'xlink:show', 'xlink:title', 'xlink:type', 'xml:base', 'xml:lang', 'xml:space', 'y'],
view: ['externalResourcesRequired', 'id', 'preserveAspectRatio', 'viewBox', 'viewTarget', 'xml:base', 'xml:lang', 'xml:space', 'zoomAndPan'],
vkern: ['g1', 'g2', 'id', 'k', 'u1', 'u2', 'xml:base', 'xml:lang', 'xml:space']
};
svgPresentationElements = {
'a': true,
'altGlyph': true,
'animate': true,
'animateColor': true,
'circle': true,
'clipPath': true,
'defs': true,
'ellipse': true,
'feBlend': true,
'feColorMatrix': true,
'feComponentTransfer': true,
'feComposite': true,
'feConvolveMatrix': true,
'feDiffuseLighting': true,
'feDisplacementMap': true,
'feFlood': true,
'feGaussianBlur': true,
'feImage': true,
'feMerge': true,
'feMorphology': true,
'feOffset': true,
'feSpecularLighting': true,
'feTile': true,
'feTurbulence': true,
'filter': true,
'font': true,
'foreignObject': true,
'g': true,
'glyph': true,
'glyphRef': true,
'image': true,
'line': true,
'linearGradient': true,
'marker': true,
'mask': true,
'missing-glyph': true,
'path': true,
'pattern': true,
'polygon': true,
'polyline': true,
'radialGradient': true,
'rect': true,
'stop': true,
'svg': true,
'switch': true,
'symbol': true,
'text': true,
'textPath': true,
'tref': true,
'tspan': true,
'use': true
};
svgPresentationAttributes = {
'alignment-baseline': true,
'baseline-shift': true,
'clip-path': true,
'clip-rule': true,
'clip': true,
'color-interpolation-filters': true,
'color-interpolation': true,
'color-profile': true,
'color-rendering': true,
'color': true,
'cursor': true,
'direction': true,
'display': true,
'dominant-baseline': true,
'enable-background': true,
'fill-opacity': true,
'fill-rule': true,
'fill': true,
'filter': true,
'flood-color': true,
'flood-opacity': true,
'font-family': true,
'font-size-adjust': true,
'font-size': true,
'font-stretch': true,
'font-style': true,
'font-variant': true,
'font-weight': true,
'glyph-orientation-horizontal': true,
'glyph-orientation-vertical': true,
'image-rendering': true,
'kerning': true,
'letter-spacing': true,
'lighting-color': true,
'marker-end': true,
'marker-mid': true,
'marker-start': true,
'mask': true,
'opacity': true,
'overflow': true,
'pointer-events': true,
'shape-rendering': true,
'stop-color': true,
'stop-opacity': true,
'stroke-dasharray': true,
'stroke-dashoffset': true,
'stroke-linecap': true,
'stroke-linejoin': true,
'stroke-miterlimit': true,
'stroke-opacity': true,
'stroke-width': true,
'stroke': true,
'text-anchor': true,
'text-decoration': true,
'text-rendering': true,
'unicode-bidi': true,
'visibility': true,
'word-spacing': true,
'writing-mode': true
};
var createElement = function createElement(html) {
var div = _aureliaPal$3.DOM.createElement('div');
div.innerHTML = html;
return div.firstChild;
};
svgAnalyzer = function () {
function SVGAnalyzer() {
if (createElement('<svg><altGlyph /></svg>').firstElementChild.nodeName === 'altglyph' && elements.altGlyph) {
elements.altglyph = elements.altGlyph;
delete elements.altGlyph;
elements.altglyphdef = elements.altGlyphDef;
delete elements.altGlyphDef;
elements.altglyphitem = elements.altGlyphItem;
delete elements.altGlyphItem;
elements.glyphref = elements.glyphRef;
delete elements.glyphRef;
}
}
SVGAnalyzer.prototype.isStandardSvgAttribute = function isStandardSvgAttribute(nodeName, attributeName) {
return presentationElements[nodeName] && presentationAttributes[attributeName] || elements[nodeName] && elements[nodeName].indexOf(attributeName) !== -1;
};
return SVGAnalyzer;
}();
})();
}
var elements = exports.elements = svgElements;
var presentationElements = exports.presentationElements = svgPresentationElements;
var presentationAttributes = exports.presentationAttributes = svgPresentationAttributes;
var SVGAnalyzer = exports.SVGAnalyzer = svgAnalyzer || function () {
function _class11() {}
_class11.prototype.isStandardSvgAttribute = function isStandardSvgAttribute() {
return false;
};
return _class11;
}();
var ObserverLocator = exports.ObserverLocator = (_temp$1 = _class12 = function () {
function ObserverLocator(taskQueue, eventManager, dirtyChecker, svgAnalyzer, parser) {
this.taskQueue = taskQueue;
this.eventManager = eventManager;
this.dirtyChecker = dirtyChecker;
this.svgAnalyzer = svgAnalyzer;
this.parser = parser;
this.adapters = [];
this.logger = LogManager$1.getLogger('observer-locator');
}
ObserverLocator.prototype.getObserver = function getObserver(obj, propertyName) {
var observersLookup = obj.__observers__;
var observer = void 0;
if (observersLookup && propertyName in observersLookup) {
return observersLookup[propertyName];
}
observer = this.createPropertyObserver(obj, propertyName);
if (!observer.doNotCache) {
if (observersLookup === undefined) {
observersLookup = this.getOrCreateObserversLookup(obj);
}
observersLookup[propertyName] = observer;
}
return observer;
};
ObserverLocator.prototype.getOrCreateObserversLookup = function getOrCreateObserversLookup(obj) {
return obj.__observers__ || this.createObserversLookup(obj);
};
ObserverLocator.prototype.createObserversLookup = function createObserversLookup(obj) {
var value = {};
if (!Reflect.defineProperty(obj, '__observers__', {
enumerable: false,
configurable: false,
writable: false,
value: value
})) {
this.logger.warn('Cannot add observers to object', obj);
}
return value;
};
ObserverLocator.prototype.addAdapter = function addAdapter(adapter) {
this.adapters.push(adapter);
};
ObserverLocator.prototype.getAdapterObserver = function getAdapterObserver(obj, propertyName, descriptor) {
for (var _i26 = 0, ii = this.adapters.length; _i26 < ii; _i26++) {
var adapter = this.adapters[_i26];
var observer = adapter.getObserver(obj, propertyName, descriptor);
if (observer) {
return observer;
}
}
return null;
};
ObserverLocator.prototype.createPropertyObserver = function createPropertyObserver(obj, propertyName) {
var descriptor = void 0;
var handler = void 0;
var xlinkResult = void 0;
if (!(obj instanceof Object)) {
return new PrimitiveObserver(obj, propertyName);
}
if (obj instanceof _aureliaPal$3.DOM.Element) {
if (propertyName === 'class') {
return new ClassObserver(obj);
}
if (propertyName === 'style' || propertyName === 'css') {
return new StyleObserver(obj, propertyName);
}
handler = this.eventManager.getElementHandler(obj, propertyName);
if (propertyName === 'value' && obj.tagName.toLowerCase() === 'select') {
return new SelectValueObserver(obj, handler, this);
}
if (propertyName === 'checked' && obj.tagName.toLowerCase() === 'input') {
return new CheckedObserver(obj, handler, this);
}
if (handler) {
return new ValueAttributeObserver(obj, propertyName, handler);
}
xlinkResult = /^xlink:(.+)$/.exec(propertyName);
if (xlinkResult) {
return new XLinkAttributeObserver(obj, propertyName, xlinkResult[1]);
}
if (propertyName === 'role' && (obj instanceof _aureliaPal$3.DOM.Element || obj instanceof _aureliaPal$3.DOM.SVGElement) || /^\w+:|^data-|^aria-/.test(propertyName) || obj instanceof _aureliaPal$3.DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {
return new DataAttributeObserver(obj, propertyName);
}
}
descriptor = Object.getPropertyDescriptor(obj, propertyName);
if (hasDeclaredDependencies(descriptor)) {
return createComputedObserver(obj, propertyName, descriptor, this);
}
if (descriptor) {
var existingGetterOrSetter = descriptor.get || descriptor.set;
if (existingGetterOrSetter) {
if (existingGetterOrSetter.getObserver) {
return existingGetterOrSetter.getObserver(obj);
}
var adapterObserver = this.getAdapterObserver(obj, propertyName, descriptor);
if (adapterObserver) {
return adapterObserver;
}
return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);
}
}
if (obj instanceof Array) {
if (propertyName === 'length') {
return this.getArrayObserver(obj).getLengthObserver();
}
return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);
} else if (obj instanceof Map) {
if (propertyName === 'size') {
return this.getMapObserver(obj).getLengthObserver();
}
return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);
} else if (obj instanceof Set) {
if (propertyName === 'size') {
return this.getSetObserver(obj).getLengthObserver();
}
return new DirtyCheckProperty(this.dirtyChecker, obj, propertyName);
}
return new SetterObserver(this.taskQueue, obj, propertyName);
};
ObserverLocator.prototype.getAccessor = function getAccessor(obj, propertyName) {
if (obj instanceof _aureliaPal$3.DOM.Element) {
if (propertyName === 'class' || propertyName === 'style' || propertyName === 'css' || propertyName === 'value' && (obj.tagName.toLowerCase() === 'input' || obj.tagName.toLowerCase() === 'select') || propertyName === 'checked' && obj.tagName.toLowerCase() === 'input' || propertyName === 'model' && obj.tagName.toLowerCase() === 'input' || /^xlink:.+$/.exec(propertyName)) {
return this.getObserver(obj, propertyName);
}
if (/^\w+:|^data-|^aria-/.test(propertyName) || obj instanceof _aureliaPal$3.DOM.SVGElement && this.svgAnalyzer.isStandardSvgAttribute(obj.nodeName, propertyName)) {
return dataAttributeAccessor;
}
}
return propertyAccessor;
};
ObserverLocator.prototype.getArrayObserver = function getArrayObserver(array) {
return _getArrayObserver(this.taskQueue, array);
};
ObserverLocator.prototype.getMapObserver = function getMapObserver(map) {
return _getMapObserver(this.taskQueue, map);
};
ObserverLocator.prototype.getSetObserver = function getSetObserver(set$$1) {
return _getSetObserver(this.taskQueue, set$$1);
};
return ObserverLocator;
}(), _class12.inject = [_aureliaTaskQueue$1.TaskQueue, EventManager, DirtyChecker, SVGAnalyzer, Parser], _temp$1);
var ObjectObservationAdapter = exports.ObjectObservationAdapter = function () {
function ObjectObservationAdapter() {}
ObjectObservationAdapter.prototype.getObserver = function getObserver(object, propertyName, descriptor) {
throw new Error('BindingAdapters must implement getObserver(object, propertyName).');
};
return ObjectObservationAdapter;
}();
var BindingExpression = exports.BindingExpression = function () {
function BindingExpression(observerLocator, targetProperty, sourceExpression, mode, lookupFunctions, attribute) {
this.observerLocator = observerLocator;
this.targetProperty = targetProperty;
this.sourceExpression = sourceExpression;
this.mode = mode;
this.lookupFunctions = lookupFunctions;
this.attribute = attribute;
this.discrete = false;
}
BindingExpression.prototype.createBinding = function createBinding(target) {
return new Binding(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.mode, this.lookupFunctions);
};
return BindingExpression;
}();
var targetContext = 'Binding:target';
var Binding = exports.Binding = (_dec10$1 = connectable(), _dec10$1(_class13$1 = function () {
function Binding(observerLocator, sourceExpression, target, targetProperty, mode, lookupFunctions) {
this.observerLocator = observerLocator;
this.sourceExpression = sourceExpression;
this.target = target;
this.targetProperty = targetProperty;
this.mode = mode;
this.lookupFunctions = lookupFunctions;
}
Binding.prototype.updateTarget = function updateTarget(value) {
this.targetObserver.setValue(value, this.target, this.targetProperty);
};
Binding.prototype.updateSource = function updateSource(value) {
this.sourceExpression.assign(this.source, value, this.lookupFunctions);
};
Binding.prototype.call = function call(context, newValue, oldValue) {
if (!this.isBound) {
return;
}
if (context === sourceContext) {
oldValue = this.targetObserver.getValue(this.target, this.targetProperty);
newValue = this.sourceExpression.evaluate(this.source, this.lookupFunctions);
if (newValue !== oldValue) {
this.updateTarget(newValue);
}
if (this.mode !== bindingMode.oneTime) {
this._version++;
this.sourceExpression.connect(this, this.source);
this.unobserve(false);
}
return;
}
if (context === targetContext) {
if (newValue !== this.sourceExpression.evaluate(this.source, this.lookupFunctions)) {
this.updateSource(newValue);
}
return;
}
throw new Error('Unexpected call context ' + context);
};
Binding.prototype.bind = function bind(source) {
if (this.isBound) {
if (this.source === source) {
return;
}
this.unbind();
}
this.isBound = true;
this.source = source;
if (this.sourceExpression.bind) {
this.sourceExpression.bind(this, source, this.lookupFunctions);
}
var mode = this.mode;
if (!this.targetObserver) {
var method = mode === bindingMode.twoWay ? 'getObserver' : 'getAccessor';
this.targetObserver = this.observerLocator[method](this.target, this.targetProperty);
}
if ('bind' in this.targetObserver) {
this.targetObserver.bind();
}
var value = this.sourceExpression.evaluate(source, this.lookupFunctions);
this.updateTarget(value);
if (mode === bindingMode.oneWay) {
enqueueBindingConnect(this);
} else if (mode === bindingMode.twoWay) {
this.sourceExpression.connect(this, source);
this.targetObserver.subscribe(targetContext, this);
}
};
Binding.prototype.unbind = function unbind() {
if (!this.isBound) {
return;
}
this.isBound = false;
if (this.sourceExpression.unbind) {
this.sourceExpression.unbind(this, this.source);
}
this.source = null;
if ('unbind' in this.targetObserver) {
this.targetObserver.unbind();
}
if (this.targetObserver.unsubscribe) {
this.targetObserver.unsubscribe(targetContext, this);
}
this.unobserve(true);
};
Binding.prototype.connect = function connect(evaluate) {
if (!this.isBound) {
return;
}
if (evaluate) {
var value = this.sourceExpression.evaluate(this.source, this.lookupFunctions);
this.updateTarget(value);
}
this.sourceExpression.connect(this, this.source);
};
return Binding;
}()) || _class13$1);
var CallExpression = exports.CallExpression = function () {
function CallExpression(observerLocator, targetProperty, sourceExpression, lookupFunctions) {
this.observerLocator = observerLocator;
this.targetProperty = targetProperty;
this.sourceExpression = sourceExpression;
this.lookupFunctions = lookupFunctions;
}
CallExpression.prototype.createBinding = function createBinding(target) {
return new Call(this.observerLocator, this.sourceExpression, target, this.targetProperty, this.lookupFunctions);
};
return CallExpression;
}();
var Call = exports.Call = function () {
function Call(observerLocator, sourceExpression, target, targetProperty, lookupFunctions) {
this.sourceExpression = sourceExpression;
this.target = target;
this.targetProperty = observerLocator.getObserver(target, targetProperty);
this.lookupFunctions = lookupFunctions;
}
Call.prototype.callSource = function callSource($event) {
var overrideContext = this.source.overrideContext;
Object.assign(overrideContext, $event);
overrideContext.$event = $event;
var mustEvaluate = true;
var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);
delete overrideContext.$event;
for (var prop in $event) {
delete overrideContext[prop];
}
return result;
};
Call.prototype.bind = function bind(source) {
var _this27 = this;
if (this.isBound) {
if (this.source === source) {
return;
}
this.unbind();
}
this.isBound = true;
this.source = source;
if (this.sourceExpression.bind) {
this.sourceExpression.bind(this, source, this.lookupFunctions);
}
this.targetProperty.setValue(function ($event) {
return _this27.callSource($event);
});
};
Call.prototype.unbind = function unbind() {
if (!this.isBound) {
return;
}
this.isBound = false;
if (this.sourceExpression.unbind) {
this.sourceExpression.unbind(this, this.source);
}
this.source = null;
this.targetProperty.setValue(null);
};
return Call;
}();
var ValueConverterResource = exports.ValueConverterResource = function () {
function ValueConverterResource(name) {
this.name = name;
}
ValueConverterResource.convention = function convention(name) {
if (name.endsWith('ValueConverter')) {
return new ValueConverterResource(camelCase(name.substring(0, name.length - 14)));
}
};
ValueConverterResource.prototype.initialize = function initialize(container, target) {
this.instance = container.get(target);
};
ValueConverterResource.prototype.register = function register(registry, name) {
registry.registerValueConverter(name || this.name, this.instance);
};
ValueConverterResource.prototype.load = function load(container, target) {};
return ValueConverterResource;
}();
function valueConverter(nameOrTarget) {
if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {
return function (target) {
_aureliaMetadata$2.metadata.define(_aureliaMetadata$2.metadata.resource, new ValueConverterResource(nameOrTarget), target);
};
}
_aureliaMetadata$2.metadata.define(_aureliaMetadata$2.metadata.resource, new ValueConverterResource(), nameOrTarget);
}
var BindingBehaviorResource = exports.BindingBehaviorResource = function () {
function BindingBehaviorResource(name) {
this.name = name;
}
BindingBehaviorResource.convention = function convention(name) {
if (name.endsWith('BindingBehavior')) {
return new BindingBehaviorResource(camelCase(name.substring(0, name.length - 15)));
}
};
BindingBehaviorResource.prototype.initialize = function initialize(container, target) {
this.instance = container.get(target);
};
BindingBehaviorResource.prototype.register = function register(registry, name) {
registry.registerBindingBehavior(name || this.name, this.instance);
};
BindingBehaviorResource.prototype.load = function load(container, target) {};
return BindingBehaviorResource;
}();
function bindingBehavior(nameOrTarget) {
if (nameOrTarget === undefined || typeof nameOrTarget === 'string') {
return function (target) {
_aureliaMetadata$2.metadata.define(_aureliaMetadata$2.metadata.resource, new BindingBehaviorResource(nameOrTarget), target);
};
}
_aureliaMetadata$2.metadata.define(_aureliaMetadata$2.metadata.resource, new BindingBehaviorResource(), nameOrTarget);
}
var ListenerExpression = exports.ListenerExpression = function () {
function ListenerExpression(eventManager, targetEvent, sourceExpression, delegationStrategy, preventDefault, lookupFunctions) {
this.eventManager = eventManager;
this.targetEvent = targetEvent;
this.sourceExpression = sourceExpression;
this.delegationStrategy = delegationStrategy;
this.discrete = true;
this.preventDefault = preventDefault;
this.lookupFunctions = lookupFunctions;
}
ListenerExpression.prototype.createBinding = function createBinding(target) {
return new Listener(this.eventManager, this.targetEvent, this.delegationStrategy, this.sourceExpression, target, this.preventDefault, this.lookupFunctions);
};
return ListenerExpression;
}();
var Listener = exports.Listener = function () {
function Listener(eventManager, targetEvent, delegationStrategy, sourceExpression, target, preventDefault, lookupFunctions) {
this.eventManager = eventManager;
this.targetEvent = targetEvent;
this.delegationStrategy = delegationStrategy;
this.sourceExpression = sourceExpression;
this.target = target;
this.preventDefault = preventDefault;
this.lookupFunctions = lookupFunctions;
}
Listener.prototype.callSource = function callSource(event) {
var overrideContext = this.source.overrideContext;
overrideContext.$event = event;
var mustEvaluate = true;
var result = this.sourceExpression.evaluate(this.source, this.lookupFunctions, mustEvaluate);
delete overrideContext.$event;
if (result !== true && this.preventDefault) {
event.preventDefault();
}
return result;
};
Listener.prototype.bind = function bind(source) {
var _this28 = this;
if (this.isBound) {
if (this.source === source) {
return;
}
this.unbind();
}
this.isBound = true;
this.source = source;
if (this.sourceExpression.bind) {
this.sourceExpression.bind(this, source, this.lookupFunctions);
}
this._disposeListener = this.eventManager.addEventListener(this.target, this.targetEvent, function (event) {
return _this28.callSource(event);
}, this.delegationStrategy);
};
Listener.prototype.unbind = function unbind() {
if (!this.isBound) {
return;
}
this.isBound = false;
if (this.sourceExpression.unbind) {
this.sourceExpression.unbind(this, this.source);
}
this.source = null;
this._disposeListener();
this._disposeListener = null;
};
return Listener;
}();
function getAU(element) {
var au = element.au;
if (au === undefined) {
throw new Error('No Aurelia APIs are defined for the element: "' + element.tagName + '".');
}
return au;
}
var NameExpression = exports.NameExpression = function () {
function NameExpression(sourceExpression, apiName, lookupFunctions) {
this.sourceExpression = sourceExpression;
this.apiName = apiName;
this.lookupFunctions = lookupFunctions;
this.discrete = true;
}
NameExpression.prototype.createBinding = function createBinding(target) {
return new NameBinder(this.sourceExpression, NameExpression.locateAPI(target, this.apiName), this.lookupFunctions);
};
NameExpression.locateAPI = function locateAPI(element, apiName) {
switch (apiName) {
case 'element':
return element;
case 'controller':
return getAU(element).controller;
case 'view-model':
return getAU(element).controller.viewModel;
case 'view':
return getAU(element).controller.view;
default:
var target = getAU(element)[apiName];
if (target === undefined) {
throw new Error('Attempted to reference "' + apiName + '", but it was not found amongst the target\'s API.');
}
return target.viewModel;
}
};
return NameExpression;
}();
var NameBinder = function () {
function NameBinder(sourceExpression, target, lookupFunctions) {
this.sourceExpression = sourceExpression;
this.target = target;
this.lookupFunctions = lookupFunctions;
}
NameBinder.prototype.bind = function bind(source) {
if (this.isBound) {
if (this.source === source) {
return;
}
this.unbind();
}
this.isBound = true;
this.source = source;
if (this.sourceExpression.bind) {
this.sourceExpression.bind(this, source, this.lookupFunctions);
}
this.sourceExpression.assign(this.source, this.target, this.lookupFunctions);
};
NameBinder.prototype.unbind = function unbind() {
if (!this.isBound) {
return;
}
this.isBound = false;
if (this.sourceExpression.evaluate(this.source, this.lookupFunctions) === this.target) {
this.sourceExpression.assign(this.source, null, this.lookupFunctions);
}
if (this.sourceExpression.unbind) {
this.sourceExpression.unbind(this, this.source);
}
this.source = null;
};
return NameBinder;
}();
var LookupFunctions = {
bindingBehaviors: function bindingBehaviors(name) {
return null;
},
valueConverters: function valueConverters(name) {
return null;
}
};
var BindingEngine = exports.BindingEngine = (_temp2$1 = _class14$1 = function () {
function BindingEngine(observerLocator, parser) {
this.observerLocator = observerLocator;
this.parser = parser;
}
BindingEngine.prototype.createBindingExpression = function createBindingExpression(targetProperty, sourceExpression) {
var mode = arguments.length <= 2 || arguments[2] === undefined ? bindingMode.oneWay : arguments[2];
var lookupFunctions = arguments.length <= 3 || arguments[3] === undefined ? LookupFunctions : arguments[3];
return new BindingExpression(this.observerLocator, targetProperty, this.parser.parse(sourceExpression), mode, lookupFunctions);
};
BindingEngine.prototype.propertyObserver = function propertyObserver(obj, propertyName) {
var _this29 = this;
return {
subscribe: function subscribe(callback) {
var observer = _this29.observerLocator.getObserver(obj, propertyName);
observer.subscribe(callback);
return {
dispose: function dispose() {
return observer.unsubscribe(callback);
}
};
}
};
};
BindingEngine.prototype.collectionObserver = function collectionObserver(collection) {
var _this30 = this;
return {
subscribe: function subscribe(callback) {
var observer = void 0;
if (collection instanceof Array) {
observer = _this30.observerLocator.getArrayObserver(collection);
} else if (collection instanceof Map) {
observer = _this30.observerLocator.getMapObserver(collection);
} else if (collection instanceof Set) {
observer = _this30.observerLocator.getSetObserver(collection);
} else {
throw new Error('collection must be an instance of Array, Map or Set.');
}
observer.subscribe(callback);
return {
dispose: function dispose() {
return observer.unsubscribe(callback);
}
};
}
};
};
BindingEngine.prototype.expressionObserver = function expressionObserver(bindingContext, expression) {
var scope = { bindingContext: bindingContext, overrideContext: createOverrideContext(bindingContext) };
return new ExpressionObserver(scope, this.parser.parse(expression), this.observerLocator, LookupFunctions);
};
BindingEngine.prototype.parseExpression = function parseExpression(expression) {
return this.parser.parse(expression);
};
BindingEngine.prototype.registerAdapter = function registerAdapter(adapter) {
this.observerLocator.addAdapter(adapter);
};
return BindingEngine;
}(), _class14$1.inject = [ObserverLocator, Parser], _temp2$1);
var setProto = Set.prototype;
function _getSetObserver(taskQueue, set$$1) {
return ModifySetObserver.for(taskQueue, set$$1);
}
exports.getSetObserver = _getSetObserver;
var ModifySetObserver = function (_ModifyCollectionObse3) {
_inherits(ModifySetObserver, _ModifyCollectionObse3);
function ModifySetObserver(taskQueue, set$$1) {
return _possibleConstructorReturn(this, _ModifyCollectionObse3.call(this, taskQueue, set$$1));
}
ModifySetObserver.for = function _for(taskQueue, set$$1) {
if (!('__set_observer__' in set$$1)) {
Reflect.defineProperty(set$$1, '__set_observer__', {
value: ModifySetObserver.create(taskQueue, set$$1),
enumerable: false, configurable: false
});
}
return set$$1.__set_observer__;
};
ModifySetObserver.create = function create(taskQueue, set$$1) {
var observer = new ModifySetObserver(taskQueue, set$$1);
var proto = setProto;
if (proto.add !== set$$1.add || proto.delete !== set$$1.delete || proto.clear !== set$$1.clear) {
proto = {
add: set$$1.add,
delete: set$$1.delete,
clear: set$$1.clear
};
}
set$$1.add = function () {
var type = 'add';
var oldSize = set$$1.size;
var methodCallResult = proto.add.apply(set$$1, arguments);
var hasValue = set$$1.size === oldSize;
if (!hasValue) {
observer.addChangeRecord({
type: type,
object: set$$1,
value: Array.from(set$$1).pop()
});
}
return methodCallResult;
};
set$$1.delete = function () {
var hasValue = set$$1.has(arguments[0]);
var methodCallResult = proto.delete.apply(set$$1, arguments);
if (hasValue) {
observer.addChangeRecord({
type: 'delete',
object: set$$1,
value: arguments[0]
});
}
return methodCallResult;
};
set$$1.clear = function () {
var methodCallResult = proto.clear.apply(set$$1, arguments);
observer.addChangeRecord({
type: 'clear',
object: set$$1
});
return methodCallResult;
};
return observer;
};
return ModifySetObserver;
}(ModifyCollectionObserver);
function observable(targetOrConfig, key, descriptor) {
function deco(target, key, descriptor, config) {
var isClassDecorator = key === undefined;
if (isClassDecorator) {
target = target.prototype;
key = typeof config === 'string' ? config : config.name;
}
var innerPropertyName = '_' + key;
var innerPropertyDescriptor = {
configurable: true,
enumerable: false,
writable: true
};
var callbackName = config && config.changeHandler || key + 'Changed';
if (descriptor) {
if (typeof descriptor.initializer === 'function') {
innerPropertyDescriptor.value = descriptor.initializer();
}
} else {
descriptor = {};
}
if (!('enumerable' in descriptor)) {
descriptor.enumerable = true;
}
delete descriptor.value;
delete descriptor.writable;
delete descriptor.initializer;
Reflect.defineProperty(target, innerPropertyName, innerPropertyDescriptor);
descriptor.get = function () {
return this[innerPropertyName];
};
descriptor.set = function (newValue) {
var oldValue = this[innerPropertyName];
if (newValue === oldValue) {
return;
}
this[innerPropertyName] = newValue;
Reflect.defineProperty(this, innerPropertyName, { enumerable: false });
if (this[callbackName]) {
this[callbackName](newValue, oldValue, key);
}
};
descriptor.get.dependencies = [innerPropertyName];
if (isClassDecorator) {
Reflect.defineProperty(target, key, descriptor);
} else {
return descriptor;
}
}
if (key === undefined) {
return function (t, k, d) {
return deco(t, k, d, targetOrConfig);
};
}
return deco(targetOrConfig, key, descriptor);
}
var aureliaBinding = Object.freeze({
});
Object.defineProperty(exports, "__esModule", {
value: true
});
var _typeof$4 = typeof Symbol === "function" && _typeof$1(Symbol.iterator) === "symbol" ? function (obj) {
return typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
};
exports.relativeToFile = relativeToFile;
exports.join = join;
exports.buildQueryString = buildQueryString;
exports.parseQueryString = parseQueryString;
function trimDots(ary) {
for (var i = 0; i < ary.length; ++i) {
var part = ary[i];
if (part === '.') {
ary.splice(i, 1);
i -= 1;
} else if (part === '..') {
if (i === 0 || i === 1 && ary[2] === '..' || ary[i - 1] === '..') {
continue;
} else if (i > 0) {
ary.splice(i - 1, 2);
i -= 2;
}
}
}
}
function relativeToFile(name, file) {
var fileParts = file && file.split('/');
var nameParts = name.trim().split('/');
if (nameParts[0].charAt(0) === '.' && fileParts) {
var normalizedBaseParts = fileParts.slice(0, fileParts.length - 1);
nameParts.unshift.apply(nameParts, normalizedBaseParts);
}
trimDots(nameParts);
return nameParts.join('/');
}
function join(path1, path2) {
if (!path1) {
return path2;
}
if (!path2) {
return path1;
}
var schemeMatch = path1.match(/^([^/]*?:)\//);
var scheme = schemeMatch && schemeMatch.length > 0 ? schemeMatch[1] : '';
path1 = path1.substr(scheme.length);
var urlPrefix = void 0;
if (path1.indexOf('///') === 0 && scheme === 'file:') {
urlPrefix = '///';
} else if (path1.indexOf('//') === 0) {
urlPrefix = '//';
} else if (path1.indexOf('/') === 0) {
urlPrefix = '/';
} else {
urlPrefix = '';
}
var trailingSlash = path2.slice(-1) === '/' ? '/' : '';
var url1 = path1.split('/');
var url2 = path2.split('/');
var url3 = [];
for (var i = 0, ii = url1.length; i < ii; ++i) {
if (url1[i] === '..') {
url3.pop();
} else if (url1[i] === '.' || url1[i] === '') {
continue;
} else {
url3.push(url1[i]);
}
}
for (var _i = 0, _ii = url2.length; _i < _ii; ++_i) {
if (url2[_i] === '..') {
url3.pop();
} else if (url2[_i] === '.' || url2[_i] === '') {
continue;
} else {
url3.push(url2[_i]);
}
}
return scheme + urlPrefix + url3.join('/') + trailingSlash;
}
var encode = encodeURIComponent;
var encodeKey = function encodeKey(k) {
return encode(k).replace('%24', '$');
};
function buildParam(key, value, traditional) {
var result = [];
if (value === null || value === undefined) {
return result;
}
if (Array.isArray(value)) {
for (var i = 0, l = value.length; i < l; i++) {
if (traditional) {
result.push(encodeKey(key) + '=' + encode(value[i]));
} else {
var arrayKey = key + '[' + (_typeof$4(value[i]) === 'object' && value[i] !== null ? i : '') + ']';
result = result.concat(buildParam(arrayKey, value[i]));
}
}
} else if ((typeof value === 'undefined' ? 'undefined' : _typeof$4(value)) === 'object' && !traditional) {
for (var propertyName in value) {
result = result.concat(buildParam(key + '[' + propertyName + ']', value[propertyName]));
}
} else {
result.push(encodeKey(key) + '=' + encode(value));
}
return result;
}
function buildQueryString(params, traditional) {
var pairs = [];
var keys = Object.keys(params || {}).sort();
for (var i = 0, len = keys.length; i < len; i++) {
var key = keys[i];
pairs = pairs.concat(buildParam(key, params[key], traditional));
}
if (pairs.length === 0) {
return '';
}
return pairs.join('&');
}
function processScalarParam(existedParam, value) {
if (Array.isArray(existedParam)) {
existedParam.push(value);
return existedParam;
}
if (existedParam !== undefined) {
return [existedParam, value];
}
return value;
}
function parseComplexParam(queryParams, keys, value) {
var currentParams = queryParams;
var keysLastIndex = keys.length - 1;
for (var j = 0; j <= keysLastIndex; j++) {
var key = keys[j] === '' ? currentParams.length : keys[j];
if (j < keysLastIndex) {
var prevValue = !currentParams[key] || _typeof$4(currentParams[key]) === 'object' ? currentParams[key] : [currentParams[key]];
currentParams = currentParams[key] = prevValue || (isNaN(keys[j + 1]) ? {} : []);
} else {
currentParams = currentParams[key] = value;
}
}
}
function parseQueryString(queryString) {
var queryParams = {};
if (!queryString || typeof queryString !== 'string') {
return queryParams;
}
var query = queryString;
if (query.charAt(0) === '?') {
query = query.substr(1);
}
var pairs = query.replace(/\+/g, ' ').split('&');
for (var i = 0; i < pairs.length; i++) {
var pair = pairs[i].split('=');
var key = decodeURIComponent(pair[0]);
if (!key) {
continue;
}
var keys = key.split('][');
var keysLastIndex = keys.length - 1;
if (/\[/.test(keys[0]) && /\]$/.test(keys[keysLastIndex])) {
keys[keysLastIndex] = keys[keysLastIndex].replace(/\]$/, '');
keys = keys.shift().split('[').concat(keys);
keysLastIndex = keys.length - 1;
} else {
keysLastIndex = 0;
}
if (pair.length >= 2) {
var value = pair[1] ? decodeURIComponent(pair[1]) : '';
if (keysLastIndex) {
parseComplexParam(queryParams, keys, value);
} else {
queryParams[key] = processScalarParam(queryParams[key], value);
}
} else {
queryParams[key] = true;
}
}
return queryParams;
}
var aureliaPath = Object.freeze({
});
var _aureliaPath$1 = ( aureliaPath && undefined ) || aureliaPath;
var aureliaLoader = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.Loader = exports.TemplateRegistryEntry = exports.TemplateDependency = undefined;
var _createClass = function () {
function defineProperties(target, props) {
for (var i = 0; i < props.length; i++) {
var descriptor = props[i];descriptor.enumerable = descriptor.enumerable || false;descriptor.configurable = true;if ("value" in descriptor) descriptor.writable = true;Object.defineProperty(target, descriptor.key, descriptor);
}
}return function (Constructor, protoProps, staticProps) {
if (protoProps) defineProperties(Constructor.prototype, protoProps);if (staticProps) defineProperties(Constructor, staticProps);return Constructor;
};
}();
var TemplateDependency = exports.TemplateDependency = function TemplateDependency(src, name) {
this.src = src;
this.name = name;
};
var TemplateRegistryEntry = exports.TemplateRegistryEntry = function () {
function TemplateRegistryEntry(address) {
this.templateIsLoaded = false;
this.factoryIsReady = false;
this.resources = null;
this.dependencies = null;
this.address = address;
this.onReady = null;
this._template = null;
this._factory = null;
}
TemplateRegistryEntry.prototype.addDependency = function addDependency(src, name) {
var finalSrc = typeof src === 'string' ? (0, _aureliaPath$1.relativeToFile)(src, this.address) : _aureliaMetadata$1.Origin.get(src).moduleId;
this.dependencies.push(new TemplateDependency(finalSrc, name));
};
_createClass(TemplateRegistryEntry, [{
key: 'template',
get: function get() {
return this._template;
},
set: function set(value) {
var address = this.address;
var requires = void 0;
var current = void 0;
var src = void 0;
var dependencies = void 0;
this._template = value;
this.templateIsLoaded = true;
requires = value.content.querySelectorAll('require');
dependencies = this.dependencies = new Array(requires.length);
for (var i = 0, ii = requires.length; i < ii; ++i) {
current = requires[i];
src = current.getAttribute('from');
if (!src) {
throw new Error('<require> element in ' + address + ' has no "from" attribute.');
}
dependencies[i] = new TemplateDependency((0, _aureliaPath$1.relativeToFile)(src, address), current.getAttribute('as'));
if (current.parentNode) {
current.parentNode.removeChild(current);
}
}
}
}, {
key: 'factory',
get: function get() {
return this._factory;
},
set: function set(value) {
this._factory = value;
this.factoryIsReady = true;
}
}]);
return TemplateRegistryEntry;
}();
var Loader = exports.Loader = function () {
function Loader() {
this.templateRegistry = {};
}
Loader.prototype.map = function map(id, source) {
throw new Error('Loaders must implement map(id, source).');
};
Loader.prototype.normalizeSync = function normalizeSync(moduleId, relativeTo) {
throw new Error('Loaders must implement normalizeSync(moduleId, relativeTo).');
};
Loader.prototype.normalize = function normalize(moduleId, relativeTo) {
throw new Error('Loaders must implement normalize(moduleId: string, relativeTo: string): Promise<string>.');
};
Loader.prototype.loadModule = function loadModule(id) {
throw new Error('Loaders must implement loadModule(id).');
};
Loader.prototype.loadAllModules = function loadAllModules(ids) {
throw new Error('Loader must implement loadAllModules(ids).');
};
Loader.prototype.loadTemplate = function loadTemplate(url) {
throw new Error('Loader must implement loadTemplate(url).');
};
Loader.prototype.loadText = function loadText(url) {
throw new Error('Loader must implement loadText(url).');
};
Loader.prototype.applyPluginToUrl = function applyPluginToUrl(url, pluginName) {
throw new Error('Loader must implement applyPluginToUrl(url, pluginName).');
};
Loader.prototype.addPlugin = function addPlugin(pluginName, implementation) {
throw new Error('Loader must implement addPlugin(pluginName, implementation).');
};
Loader.prototype.getOrCreateTemplateRegistryEntry = function getOrCreateTemplateRegistryEntry(address) {
return this.templateRegistry[address] || (this.templateRegistry[address] = new TemplateRegistryEntry(address));
};
return Loader;
}();
});
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.TaskQueue = undefined;
var _typeof$5 = typeof Symbol === "function" && _typeof$1(Symbol.iterator) === "symbol" ? function (obj) {
return typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
} : function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol ? "symbol" : typeof obj === "undefined" ? "undefined" : _typeof$1(obj);
};
var _aureliaPal$4 = require('aurelia-pal');
var hasSetImmediate = typeof setImmediate === 'function';
var stackSeparator = '\nEnqueued in TaskQueue by:\n';
var microStackSeparator = '\nEnqueued in MicroTaskQueue by:\n';
function makeRequestFlushFromMutationObserver(flush) {
var toggle = 1;
var observer = _aureliaPal$4.DOM.createMutationObserver(flush);
var node = _aureliaPal$4.DOM.createTextNode('');
observer.observe(node, { characterData: true });
return function requestFlush() {
toggle = -toggle;
node.data = toggle;
};
}
function makeRequestFlushFromTimer(flush) {
return function requestFlush() {
var timeoutHandle = setTimeout(handleFlushTimer, 0);
var intervalHandle = setInterval(handleFlushTimer, 50);
function handleFlushTimer() {
clearTimeout(timeoutHandle);
clearInterval(intervalHandle);
flush();
}
};
}
function onError(error, task, longStacks) {
if (longStacks && task.stack && (typeof error === 'undefined' ? 'undefined' : _typeof$5(error)) === 'object' && error !== null) {
error.stack = filterFlushStack(error.stack) + task.stack;
}
if ('onError' in task) {
task.onError(error);
} else if (hasSetImmediate) {
setImmediate(function () {
throw error;
});
} else {
setTimeout(function () {
throw error;
}, 0);
}
}
var TaskQueue = exports.TaskQueue = function () {
function TaskQueue() {
var _this = this;
this.flushing = false;
this.longStacks = false;
this.microTaskQueue = [];
this.microTaskQueueCapacity = 1024;
this.taskQueue = [];
if (_aureliaPal$4.FEATURE.mutationObserver) {
this.requestFlushMicroTaskQueue = makeRequestFlushFromMutationObserver(function () {
return _this.flushMicroTaskQueue();
});
} else {
this.requestFlushMicroTaskQueue = makeRequestFlushFromTimer(function () {
return _this.flushMicroTaskQueue();
});
}
this.requestFlushTaskQueue = makeRequestFlushFromTimer(function () {
return _this.flushTaskQueue();
});
}
TaskQueue.prototype.queueMicroTask = function queueMicroTask(task) {
if (this.microTaskQueue.length < 1) {
this.requestFlushMicroTaskQueue();
}
if (this.longStacks) {
task.stack = this.prepareQueueStack(microStackSeparator);
}
this.microTaskQueue.push(task);
};
TaskQueue.prototype.queueTask = function queueTask(task) {
if (this.taskQueue.length < 1) {
this.requestFlushTaskQueue();
}
if (this.longStacks) {
task.stack = this.prepareQueueStack(stackSeparator);
}
this.taskQueue.push(task);
};
TaskQueue.prototype.flushTaskQueue = function flushTaskQueue() {
var queue = this.taskQueue;
var index = 0;
var task = void 0;
this.taskQueue = [];
try {
this.flushing = true;
while (index < queue.length) {
task = queue[index];
if (this.longStacks) {
this.stack = typeof task.stack === 'string' ? task.stack : undefined;
}
task.call();
index++;
}
} catch (error) {
onError(error, task, this.longStacks);
} finally {
this.flushing = false;
}
};
TaskQueue.prototype.flushMicroTaskQueue = function flushMicroTaskQueue() {
var queue = this.microTaskQueue;
var capacity = this.microTaskQueueCapacity;
var index = 0;
var task = void 0;
try {
this.flushing = true;
while (index < queue.length) {
task = queue[index];
if (this.longStacks) {
this.stack = typeof task.stack === 'string' ? task.stack : undefined;
}
task.call();
index++;
if (index > capacity) {
for (var scan = 0, newLength = queue.length - index; scan < newLength; scan++) {
queue[scan] = queue[scan + index];
}
queue.length -= index;
index = 0;
}
}
} catch (error) {
onError(error, task, this.longStacks);
} finally {
this.flushing = false;
}
queue.length = 0;
};
TaskQueue.prototype.prepareQueueStack = function prepareQueueStack(separator) {
var stack = separator + filterQueueStack(captureStack());
if (typeof this.stack === 'string') {
stack = filterFlushStack(stack) + this.stack;
}
return stack;
};
return TaskQueue;
}();
function captureStack() {
var error = new Error();
if (error.stack) {
return error.stack;
}
try {
throw error;
} catch (e) {
return e.stack;
}
}
function filterQueueStack(stack) {
return stack.replace(/^[\s\S]*?\bqueue(Micro)?Task\b[^\n]*\n/, '');
}
function filterFlushStack(stack) {
var index = stack.lastIndexOf('flushMicroTaskQueue');
if (index < 0) {
index = stack.lastIndexOf('flushTaskQueue');
if (index < 0) {
return stack;
}
}
index = stack.lastIndexOf('\n', index);
return index < 0 ? stack : stack.substr(0, index);
}
var aureliaTaskQueue = Object.freeze({
});
var _aureliaBinding$1 = ( aureliaBinding && undefined ) || aureliaBinding;
var _aureliaTaskQueue$2 = ( aureliaTaskQueue && undefined ) || aureliaTaskQueue;
var aureliaFramework = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.LogManager = exports.FrameworkConfiguration = exports.Aurelia = undefined;
Object.keys(aureliaDependencyInjection).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return aureliaDependencyInjection[key];
}
});
});
Object.keys(_aureliaBinding$1).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _aureliaBinding$1[key];
}
});
});
Object.keys(_aureliaMetadata$1).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _aureliaMetadata$1[key];
}
});
});
Object.keys(_aureliaTemplating).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _aureliaTemplating[key];
}
});
});
Object.keys(aureliaLoader).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return aureliaLoader[key];
}
});
});
Object.keys(_aureliaTaskQueue$2).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _aureliaTaskQueue$2[key];
}
});
});
Object.keys(_aureliaPath$1).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return _aureliaPath$1[key];
}
});
});
Object.keys(aureliaPal).forEach(function (key) {
if (key === "default" || key === "__esModule") return;
Object.defineProperty(exports, key, {
enumerable: true,
get: function get() {
return aureliaPal[key];
}
});
});
var TheLogManager = _interopRequireWildcard(aureliaLogging);
function _interopRequireWildcard(obj) {
if (obj && obj.__esModule) {
return obj;
} else {
var newObj = {};if (obj != null) {
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) newObj[key] = obj[key];
}
}newObj.default = obj;return newObj;
}
}
function preventActionlessFormSubmit() {
aureliaPal.DOM.addEventListener('submit', function (evt) {
var target = evt.target;
var action = target.action;
if (target.tagName.toLowerCase() === 'form' && !action) {
evt.preventDefault();
}
});
}
var Aurelia = exports.Aurelia = function () {
function Aurelia(loader, container, resources) {
this.loader = loader || new aureliaPal.PLATFORM.Loader();
this.container = container || new aureliaDependencyInjection.Container().makeGlobal();
this.resources = resources || new _aureliaTemplating.ViewResources();
this.use = new FrameworkConfiguration(this);
this.logger = TheLogManager.getLogger('aurelia');
this.hostConfigured = false;
this.host = null;
this.use.instance(Aurelia, this);
this.use.instance(aureliaLoader.Loader, this.loader);
this.use.instance(_aureliaTemplating.ViewResources, this.resources);
}
Aurelia.prototype.start = function start() {
var _this = this;
if (this._started) {
return this._started;
}
this.logger.info('Aurelia Starting');
return this._started = this.use.apply().then(function () {
preventActionlessFormSubmit();
if (!_this.container.hasResolver(_aureliaTemplating.BindingLanguage)) {
var message = 'You must configure Aurelia with a BindingLanguage implementation.';
_this.logger.error(message);
throw new Error(message);
}
_this.logger.info('Aurelia Started');
var evt = aureliaPal.DOM.createCustomEvent('aurelia-started', { bubbles: true, cancelable: true });
aureliaPal.DOM.dispatchEvent(evt);
return _this;
});
};
Aurelia.prototype.enhance = function enhance() {
var _this2 = this;
var bindingContext = arguments.length <= 0 || arguments[0] === undefined ? {} : arguments[0];
var applicationHost = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
this._configureHost(applicationHost || aureliaPal.DOM.querySelectorAll('body')[0]);
return new Promise(function (resolve) {
var engine = _this2.container.get(_aureliaTemplating.TemplatingEngine);
_this2.root = engine.enhance({ container: _this2.container, element: _this2.host, resources: _this2.resources, bindingContext: bindingContext });
_this2.root.attached();
_this2._onAureliaComposed();
resolve(_this2);
});
};
Aurelia.prototype.setRoot = function setRoot() {
var _this3 = this;
var root = arguments.length <= 0 || arguments[0] === undefined ? null : arguments[0];
var applicationHost = arguments.length <= 1 || arguments[1] === undefined ? null : arguments[1];
var instruction = {};
if (this.root && this.root.viewModel && this.root.viewModel.router) {
this.root.viewModel.router.deactivate();
this.root.viewModel.router.reset();
}
this._configureHost(applicationHost);
var engine = this.container.get(_aureliaTemplating.TemplatingEngine);
var transaction = this.container.get(_aureliaTemplating.CompositionTransaction);
delete transaction.initialComposition;
if (!root) {
if (this.configModuleId) {
root = (0, _aureliaPath$1.relativeToFile)('./app', this.configModuleId);
} else {
root = 'app';
}
}
instruction.viewModel = root;
instruction.container = instruction.childContainer = this.container;
instruction.viewSlot = this.hostSlot;
instruction.host = this.host;
return engine.compose(instruction).then(function (r) {
_this3.root = r;
instruction.viewSlot.attached();
_this3._onAureliaComposed();
return _this3;
});
};
Aurelia.prototype._configureHost = function _configureHost(applicationHost) {
if (this.hostConfigured) {
return;
}
applicationHost = applicationHost || this.host;
if (!applicationHost || typeof applicationHost === 'string') {
this.host = aureliaPal.DOM.getElementById(applicationHost || 'applicationHost');
} else {
this.host = applicationHost;
}
if (!this.host) {
throw new Error('No applicationHost was specified.');
}
this.hostConfigured = true;
this.host.aurelia = this;
this.hostSlot = new _aureliaTemplating.ViewSlot(this.host, true);
this.hostSlot.transformChildNodesIntoView();
this.container.registerInstance(aureliaPal.DOM.boundary, this.host);
};
Aurelia.prototype._onAureliaComposed = function _onAureliaComposed() {
var evt = aureliaPal.DOM.createCustomEvent('aurelia-composed', { bubbles: true, cancelable: true });
setTimeout(function () {
return aureliaPal.DOM.dispatchEvent(evt);
}, 1);
};
return Aurelia;
}();
var logger = TheLogManager.getLogger('aurelia');
var extPattern = /\.[^/.]+$/;
function runTasks(config, tasks) {
var current = void 0;
var next = function next() {
current = tasks.shift();
if (current) {
return Promise.resolve(current(config)).then(next);
}
return Promise.resolve();
};
return next();
}
function loadPlugin(config, loader, info) {
logger.debug('Loading plugin ' + info.moduleId + '.');
config.resourcesRelativeTo = info.resourcesRelativeTo;
var id = info.moduleId;
if (info.resourcesRelativeTo.length > 1) {
return loader.normalize(info.moduleId, info.resourcesRelativeTo[1]).then(function (normalizedId) {
return _loadPlugin(normalizedId);
});
}
return _loadPlugin(id);
function _loadPlugin(moduleId) {
return loader.loadModule(moduleId).then(function (m) {
if ('configure' in m) {
return Promise.resolve(m.configure(config, info.config || {})).then(function () {
config.resourcesRelativeTo = null;
logger.debug('Configured plugin ' + info.moduleId + '.');
});
}
config.resourcesRelativeTo = null;
logger.debug('Loaded plugin ' + info.moduleId + '.');
});
}
}
function loadResources(aurelia, resourcesToLoad, appResources) {
var viewEngine = aurelia.container.get(_aureliaTemplating.ViewEngine);
return Promise.all(Object.keys(resourcesToLoad).map(function (n) {
return _normalize(resourcesToLoad[n]);
})).then(function (loads) {
var names = [];
var importIds = [];
loads.forEach(function (l) {
names.push(undefined);
importIds.push(l.importId);
});
return viewEngine.importViewResources(importIds, names, appResources);
});
function _normalize(load) {
var moduleId = load.moduleId;
var ext = getExt(moduleId);
if (isOtherResource(moduleId)) {
moduleId = removeExt(moduleId);
}
return aurelia.loader.normalize(moduleId, load.relativeTo).then(function (normalized) {
return {
name: load.moduleId,
importId: isOtherResource(load.moduleId) ? addOriginalExt(normalized, ext) : normalized
};
});
}
function isOtherResource(name) {
var ext = getExt(name);
if (!ext) return false;
if (ext === '') return false;
if (ext === '.js' || ext === '.ts') return false;
return true;
}
function removeExt(name) {
return name.replace(extPattern, '');
}
function addOriginalExt(normalized, ext) {
return removeExt(normalized) + '.' + ext;
}
}
function getExt(name) {
var match = name.match(extPattern);
if (match && match.length > 0) {
return match[0].split('.')[1];
}
}
function assertProcessed(plugins) {
if (plugins.processed) {
throw new Error('This config instance has already been applied. To load more plugins or global resources, create a new FrameworkConfiguration instance.');
}
}
var FrameworkConfiguration = function () {
function FrameworkConfiguration(aurelia) {
var _this4 = this;
this.aurelia = aurelia;
this.container = aurelia.container;
this.info = [];
this.processed = false;
this.preTasks = [];
this.postTasks = [];
this.resourcesToLoad = {};
this.preTask(function () {
return aurelia.loader.normalize('aurelia-bootstrapper').then(function (name) {
return _this4.bootstrapperName = name;
});
});
this.postTask(function () {
return loadResources(aurelia, _this4.resourcesToLoad, aurelia.resources);
});
}
FrameworkConfiguration.prototype.instance = function instance(type, _instance) {
this.container.registerInstance(type, _instance);
return this;
};
FrameworkConfiguration.prototype.singleton = function singleton(type, implementation) {
this.container.registerSingleton(type, implementation);
return this;
};
FrameworkConfiguration.prototype.transient = function transient(type, implementation) {
this.container.registerTransient(type, implementation);
return this;
};
FrameworkConfiguration.prototype.preTask = function preTask(task) {
assertProcessed(this);
this.preTasks.push(task);
return this;
};
FrameworkConfiguration.prototype.postTask = function postTask(task) {
assertProcessed(this);
this.postTasks.push(task);
return this;
};
FrameworkConfiguration.prototype.feature = function feature(plugin) {
var config = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1];
var hasIndex = /\/index$/i.test(plugin);
var moduleId = hasIndex || getExt(plugin) ? plugin : plugin + '/index';
var root = hasIndex ? plugin.substr(0, plugin.length - 6) : plugin;
return this.plugin({ moduleId: moduleId, resourcesRelativeTo: [root, ''], config: config });
};
FrameworkConfiguration.prototype.globalResources = function globalResources(resources) {
assertProcessed(this);
var toAdd = Array.isArray(resources) ? resources : arguments;
var resource = void 0;
var resourcesRelativeTo = this.resourcesRelativeTo || ['', ''];
for (var i = 0, ii = toAdd.length; i < ii; ++i) {
resource = toAdd[i];
if (typeof resource !== 'string') {
throw new Error('Invalid resource path [' + resource + ']. Resources must be specified as relative module IDs.');
}
var parent = resourcesRelativeTo[0];
var grandParent = resourcesRelativeTo[1];
var name = resource;
if ((resource.startsWith('./') || resource.startsWith('../')) && parent !== '') {
name = (0, _aureliaPath$1.join)(parent, resource);
}
this.resourcesToLoad[name] = { moduleId: name, relativeTo: grandParent };
}
return this;
};
FrameworkConfiguration.prototype.globalName = function globalName(resourcePath, newName) {
assertProcessed(this);
this.resourcesToLoad[resourcePath] = { moduleId: newName, relativeTo: '' };
return this;
};
FrameworkConfiguration.prototype.plugin = function plugin(_plugin, config) {
assertProcessed(this);
if (typeof _plugin === 'string') {
return this.plugin({ moduleId: _plugin, resourcesRelativeTo: [_plugin, ''], config: config || {} });
}
this.info.push(_plugin);
return this;
};
FrameworkConfiguration.prototype._addNormalizedPlugin = function _addNormalizedPlugin(name, config) {
var _this5 = this;
var plugin = { moduleId: name, resourcesRelativeTo: [name, ''], config: config || {} };
this.plugin(plugin);
this.preTask(function () {
var relativeTo = [name, _this5.bootstrapperName];
plugin.moduleId = name;
plugin.resourcesRelativeTo = relativeTo;
return Promise.resolve();
});
return this;
};
FrameworkConfiguration.prototype.defaultBindingLanguage = function defaultBindingLanguage() {
return this._addNormalizedPlugin('aurelia-templating-binding');
};
FrameworkConfiguration.prototype.router = function router() {
return this._addNormalizedPlugin('aurelia-templating-router');
};
FrameworkConfiguration.prototype.history = function history() {
return this._addNormalizedPlugin('aurelia-history-browser');
};
FrameworkConfiguration.prototype.defaultResources = function defaultResources() {
return this._addNormalizedPlugin('aurelia-templating-resources');
};
FrameworkConfiguration.prototype.eventAggregator = function eventAggregator() {
return this._addNormalizedPlugin('aurelia-event-aggregator');
};
FrameworkConfiguration.prototype.basicConfiguration = function basicConfiguration() {
return this.defaultBindingLanguage().defaultResources().eventAggregator();
};
FrameworkConfiguration.prototype.standardConfiguration = function standardConfiguration() {
return this.basicConfiguration().history().router();
};
FrameworkConfiguration.prototype.developmentLogging = function developmentLogging() {
var _this6 = this;
this.preTask(function () {
return _this6.aurelia.loader.normalize('aurelia-logging-console', _this6.bootstrapperName).then(function (name) {
return _this6.aurelia.loader.loadModule(name).then(function (m) {
TheLogManager.addAppender(new m.ConsoleAppender());
TheLogManager.setLevel(TheLogManager.logLevel.debug);
});
});
});
return this;
};
FrameworkConfiguration.prototype.apply = function apply() {
var _this7 = this;
if (this.processed) {
return Promise.resolve();
}
return runTasks(this, this.preTasks).then(function () {
var loader = _this7.aurelia.loader;
var info = _this7.info;
var current = void 0;
var next = function next() {
current = info.shift();
if (current) {
return loadPlugin(_this7, loader, current).then(next);
}
_this7.processed = true;
return Promise.resolve();
};
return next().then(function () {
return runTasks(_this7, _this7.postTasks);
});
});
};
return FrameworkConfiguration;
}();
exports.FrameworkConfiguration = FrameworkConfiguration;
var LogManager = exports.LogManager = TheLogManager;
});
var wait = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.waitFor = waitFor;
exports.waitForDocumentElement = waitForDocumentElement;
exports.waitForDocumentElements = waitForDocumentElements;
function waitFor(getter, options) {
var timedOut = false;
options = Object.assign({
present: true,
interval: 50,
timeout: 5000
}, options);
function wait() {
var element = getter();
var found = element !== null && (!(element instanceof NodeList) && !element.jquery || element.length > 0);
if (!options.present ^ found || timedOut) {
return Promise.resolve(element);
}
return new Promise(function (rs) {
return setTimeout(rs, options.interval);
}).then(wait);
}
return Promise.race([new Promise(function (rs, rj) {
return setTimeout(function () {
timedOut = true;
rj(options.present ? 'Element not found' : 'Element not removed');
}, options.timeout);
}), wait()]);
}
function waitForDocumentElement(selector, options) {
return waitFor(function () {
return document.querySelector(selector);
}, options);
}
function waitForDocumentElements(selector, options) {
return waitFor(function () {
return document.querySelectorAll(selector);
}, options);
}
});
var componentTester = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.ComponentTester = exports.StageComponent = undefined;
var StageComponent = exports.StageComponent = function () {
function StageComponent() {}
StageComponent.withResources = function withResources(resources) {
return new ComponentTester().withResources(resources);
};
return StageComponent;
}();
var ComponentTester = exports.ComponentTester = function () {
function ComponentTester() {
this.configure = function (aurelia) {
return aurelia.use.standardConfiguration();
};
this._resources = [];
}
ComponentTester.prototype.bootstrap = function bootstrap(configure) {
this.configure = configure;
};
ComponentTester.prototype.withResources = function withResources(resources) {
this._resources = resources;
return this;
};
ComponentTester.prototype.inView = function inView(html) {
this._html = html;
return this;
};
ComponentTester.prototype.boundTo = function boundTo(bindingContext) {
this._bindingContext = bindingContext;
return this;
};
ComponentTester.prototype.manuallyHandleLifecycle = function manuallyHandleLifecycle() {
this._prepareLifecycle();
return this;
};
ComponentTester.prototype.create = function create(bootstrap) {
var _this = this;
return bootstrap(function (aurelia) {
return Promise.resolve(_this.configure(aurelia)).then(function () {
if (_this._resources) {
aurelia.use.globalResources(_this._resources);
}
return aurelia.start().then(function (a) {
_this.host = document.createElement('div');
_this.host.innerHTML = _this._html;
document.body.appendChild(_this.host);
return aurelia.enhance(_this._bindingContext, _this.host).then(function () {
_this._rootView = aurelia.root;
_this.element = _this.host.firstElementChild;
if (aurelia.root.controllers.length) {
_this.viewModel = aurelia.root.controllers[0].viewModel;
}
return new Promise(function (resolve) {
return setTimeout(function () {
return resolve();
}, 0);
});
});
});
});
});
};
ComponentTester.prototype.dispose = function dispose() {
if (this.host === undefined || this._rootView === undefined) {
throw new Error('Cannot call ComponentTester.dispose() before ComponentTester.create()');
}
this._rootView.detached();
this._rootView.unbind();
return this.host.parentNode.removeChild(this.host);
};
ComponentTester.prototype._prepareLifecycle = function _prepareLifecycle() {
var _this2 = this;
var bindPrototype = _aureliaTemplating.View.prototype.bind;
_aureliaTemplating.View.prototype.bind = function () {};
this.bind = function (bindingContext) {
return new Promise(function (resolve) {
_aureliaTemplating.View.prototype.bind = bindPrototype;
if (bindingContext !== undefined) {
_this2._bindingContext = bindingContext;
}
_this2._rootView.bind(_this2._bindingContext);
setTimeout(function () {
return resolve();
}, 0);
});
};
var attachedPrototype = _aureliaTemplating.View.prototype.attached;
_aureliaTemplating.View.prototype.attached = function () {};
this.attached = function () {
return new Promise(function (resolve) {
_aureliaTemplating.View.prototype.attached = attachedPrototype;
_this2._rootView.attached();
setTimeout(function () {
return resolve();
}, 0);
});
};
this.detached = function () {
return new Promise(function (resolve) {
_this2._rootView.detached();
setTimeout(function () {
return resolve();
}, 0);
});
};
this.unbind = function () {
return new Promise(function (resolve) {
_this2._rootView.unbind();
setTimeout(function () {
return resolve();
}, 0);
});
};
};
ComponentTester.prototype.waitForElement = function waitForElement(selector, options) {
var _this3 = this;
return (0, wait.waitFor)(function () {
return _this3.element.querySelector(selector);
}, options);
};
ComponentTester.prototype.waitForElements = function waitForElements(selector, options) {
var _this4 = this;
return (0, wait.waitFor)(function () {
return _this4.element.querySelectorAll(selector);
}, options);
};
return ComponentTester;
}();
});
var aureliaTesting = createCommonjsModule(function (module, exports) {
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.waitForDocumentElements = exports.waitForDocumentElement = exports.waitFor = exports.configure = exports.ComponentTester = exports.StageComponent = exports.ViewSpy = exports.CompileSpy = undefined;
function configure(config) {
config.globalResources('./compile-spy', './view-spy');
}
exports.CompileSpy = compileSpy.CompileSpy;
exports.ViewSpy = viewSpy.ViewSpy;
exports.StageComponent = componentTester.StageComponent;
exports.ComponentTester = componentTester.ComponentTester;
exports.configure = configure;
exports.waitFor = wait.waitFor;
exports.waitForDocumentElement = wait.waitForDocumentElement;
exports.waitForDocumentElements = wait.waitForDocumentElements;
});
function configure(aurelia) {
aurelia.use.standardConfiguration().feature(aureliaPal_5.moduleName('./resources/index'));
if (environment.debug) {
aurelia.use.developmentLogging();
}
if (environment.testing) {
aurelia.use.plugin(aureliaPal_5.moduleName('aurelia-testing'));
}
aurelia.start().then(function () {
return aurelia.setRoot();
});
}
exports.configure = configure;
Object.defineProperty(exports, '__esModule', { value: true });
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment