angular2
Version:
Angular 2 - a web framework for modern web apps
319 lines (318 loc) • 14.5 kB
JavaScript
"use strict";
Object.defineProperties(module.exports, {
ProtoViewBuilder: {get: function() {
return ProtoViewBuilder;
}},
ElementBinderBuilder: {get: function() {
return ElementBinderBuilder;
}},
DirectiveBuilder: {get: function() {
return DirectiveBuilder;
}},
EventBuilder: {get: function() {
return EventBuilder;
}},
__esModule: {value: true}
});
var $__angular2_47_src_47_facade_47_lang__,
$__angular2_47_src_47_facade_47_collection__,
$__angular2_47_src_47_dom_47_dom_95_adapter__,
$__angular2_47_change_95_detection__,
$__angular2_47_src_47_reflection_47_types__,
$__proto_95_view__,
$__element_95_binder__,
$__property_95_setter_95_factory__,
$___46__46__47__46__46__47_api__,
$___46__46__47_direct_95_dom_95_renderer__,
$___46__46__47_util__;
var $__0 = ($__angular2_47_src_47_facade_47_lang__ = require("angular2/src/facade/lang"), $__angular2_47_src_47_facade_47_lang__ && $__angular2_47_src_47_facade_47_lang__.__esModule && $__angular2_47_src_47_facade_47_lang__ || {default: $__angular2_47_src_47_facade_47_lang__}),
isPresent = $__0.isPresent,
isBlank = $__0.isBlank,
BaseException = $__0.BaseException;
var $__1 = ($__angular2_47_src_47_facade_47_collection__ = require("angular2/src/facade/collection"), $__angular2_47_src_47_facade_47_collection__ && $__angular2_47_src_47_facade_47_collection__.__esModule && $__angular2_47_src_47_facade_47_collection__ || {default: $__angular2_47_src_47_facade_47_collection__}),
ListWrapper = $__1.ListWrapper,
MapWrapper = $__1.MapWrapper,
Set = $__1.Set,
SetWrapper = $__1.SetWrapper,
List = $__1.List;
var DOM = ($__angular2_47_src_47_dom_47_dom_95_adapter__ = require("angular2/src/dom/dom_adapter"), $__angular2_47_src_47_dom_47_dom_95_adapter__ && $__angular2_47_src_47_dom_47_dom_95_adapter__.__esModule && $__angular2_47_src_47_dom_47_dom_95_adapter__ || {default: $__angular2_47_src_47_dom_47_dom_95_adapter__}).DOM;
var $__3 = ($__angular2_47_change_95_detection__ = require("angular2/change_detection"), $__angular2_47_change_95_detection__ && $__angular2_47_change_95_detection__.__esModule && $__angular2_47_change_95_detection__ || {default: $__angular2_47_change_95_detection__}),
ASTWithSource = $__3.ASTWithSource,
AST = $__3.AST,
AstTransformer = $__3.AstTransformer,
AccessMember = $__3.AccessMember,
LiteralArray = $__3.LiteralArray,
ImplicitReceiver = $__3.ImplicitReceiver;
var SetterFn = ($__angular2_47_src_47_reflection_47_types__ = require("angular2/src/reflection/types"), $__angular2_47_src_47_reflection_47_types__ && $__angular2_47_src_47_reflection_47_types__.__esModule && $__angular2_47_src_47_reflection_47_types__ || {default: $__angular2_47_src_47_reflection_47_types__}).SetterFn;
var RenderProtoView = ($__proto_95_view__ = require("./proto_view"), $__proto_95_view__ && $__proto_95_view__.__esModule && $__proto_95_view__ || {default: $__proto_95_view__}).RenderProtoView;
var $__6 = ($__element_95_binder__ = require("./element_binder"), $__element_95_binder__ && $__element_95_binder__.__esModule && $__element_95_binder__ || {default: $__element_95_binder__}),
ElementBinder = $__6.ElementBinder,
Event = $__6.Event;
var setterFactory = ($__property_95_setter_95_factory__ = require("./property_setter_factory"), $__property_95_setter_95_factory__ && $__property_95_setter_95_factory__.__esModule && $__property_95_setter_95_factory__ || {default: $__property_95_setter_95_factory__}).setterFactory;
var api = ($___46__46__47__46__46__47_api__ = require("../../api"), $___46__46__47__46__46__47_api__ && $___46__46__47__46__46__47_api__.__esModule && $___46__46__47__46__46__47_api__ || {default: $___46__46__47__46__46__47_api__});
var directDomRenderer = ($___46__46__47_direct_95_dom_95_renderer__ = require("../direct_dom_renderer"), $___46__46__47_direct_95_dom_95_renderer__ && $___46__46__47_direct_95_dom_95_renderer__.__esModule && $___46__46__47_direct_95_dom_95_renderer__ || {default: $___46__46__47_direct_95_dom_95_renderer__});
var $__8 = ($___46__46__47_util__ = require("../util"), $___46__46__47_util__ && $___46__46__47_util__.__esModule && $___46__46__47_util__ || {default: $___46__46__47_util__}),
NG_BINDING_CLASS = $__8.NG_BINDING_CLASS,
EVENT_TARGET_SEPARATOR = $__8.EVENT_TARGET_SEPARATOR;
var ProtoViewBuilder = function ProtoViewBuilder(rootElement) {
this.rootElement = rootElement;
this.elements = [];
this.variableBindings = MapWrapper.create();
this.imperativeRendererId = null;
};
var $ProtoViewBuilder = ProtoViewBuilder;
($traceurRuntime.createClass)(ProtoViewBuilder, {
setImperativeRendererId: function(id) {
this.imperativeRendererId = id;
return this;
},
bindElement: function(element) {
var description = arguments[1] !== (void 0) ? arguments[1] : null;
var builder = new ElementBinderBuilder(this.elements.length, element, description);
ListWrapper.push(this.elements, builder);
DOM.addClass(element, NG_BINDING_CLASS);
return builder;
},
bindVariable: function(name, value) {
MapWrapper.set(this.variableBindings, value, name);
},
build: function() {
var renderElementBinders = [];
var apiElementBinders = [];
ListWrapper.forEach(this.elements, (function(ebb) {
var propertySetters = MapWrapper.create();
var apiDirectiveBinders = ListWrapper.map(ebb.directives, (function(db) {
ebb.eventBuilder.merge(db.eventBuilder);
return new api.DirectiveBinder({
directiveIndex: db.directiveIndex,
propertyBindings: db.propertyBindings,
eventBindings: db.eventBindings
});
}));
MapWrapper.forEach(ebb.propertySetters, (function(setter, propertyName) {
MapWrapper.set(propertySetters, propertyName, setter);
}));
var nestedProtoView = isPresent(ebb.nestedProtoView) ? ebb.nestedProtoView.build() : null;
var parentIndex = isPresent(ebb.parent) ? ebb.parent.index : -1;
ListWrapper.push(apiElementBinders, new api.ElementBinder({
index: ebb.index,
parentIndex: parentIndex,
distanceToParent: ebb.distanceToParent,
directives: apiDirectiveBinders,
nestedProtoView: nestedProtoView,
propertyBindings: ebb.propertyBindings,
variableBindings: ebb.variableBindings,
eventBindings: ebb.eventBindings,
textBindings: ebb.textBindings,
readAttributes: ebb.readAttributes
}));
ListWrapper.push(renderElementBinders, new ElementBinder({
textNodeIndices: ebb.textBindingIndices,
contentTagSelector: ebb.contentTagSelector,
parentIndex: parentIndex,
distanceToParent: ebb.distanceToParent,
nestedProtoView: isPresent(nestedProtoView) ? nestedProtoView.render.delegate : null,
componentId: ebb.componentId,
eventLocals: new LiteralArray(ebb.eventBuilder.buildEventLocals()),
localEvents: ebb.eventBuilder.buildLocalEvents(),
globalEvents: ebb.eventBuilder.buildGlobalEvents(),
propertySetters: propertySetters
}));
}));
return new api.ProtoViewDto({
render: new directDomRenderer.DirectDomProtoViewRef(new RenderProtoView({
element: this.rootElement,
elementBinders: renderElementBinders,
imperativeRendererId: this.imperativeRendererId
})),
elementBinders: apiElementBinders,
variableBindings: this.variableBindings
});
}
}, {});
Object.defineProperty(ProtoViewBuilder.prototype.setImperativeRendererId, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
var ElementBinderBuilder = function ElementBinderBuilder(index, element, description) {
this.element = element;
this.index = index;
this.parent = null;
this.distanceToParent = 0;
this.directives = [];
this.nestedProtoView = null;
this.propertyBindings = MapWrapper.create();
this.variableBindings = MapWrapper.create();
this.eventBindings = ListWrapper.create();
this.eventBuilder = new EventBuilder();
this.textBindings = [];
this.textBindingIndices = [];
this.contentTagSelector = null;
this.propertySetters = MapWrapper.create();
this.componentId = null;
this.readAttributes = MapWrapper.create();
};
var $ElementBinderBuilder = ElementBinderBuilder;
($traceurRuntime.createClass)(ElementBinderBuilder, {
setParent: function(parent, distanceToParent) {
this.parent = parent;
if (isPresent(parent)) {
this.distanceToParent = distanceToParent;
}
return this;
},
readAttribute: function(attrName) {
if (isBlank(MapWrapper.get(this.readAttributes, attrName))) {
MapWrapper.set(this.readAttributes, attrName, DOM.getAttribute(this.element, attrName));
}
},
bindDirective: function(directiveIndex) {
var directive = new DirectiveBuilder(directiveIndex);
ListWrapper.push(this.directives, directive);
return directive;
},
bindNestedProtoView: function(rootElement) {
if (isPresent(this.nestedProtoView)) {
throw new BaseException('Only one nested view per element is allowed');
}
this.nestedProtoView = new ProtoViewBuilder(rootElement);
return this.nestedProtoView;
},
bindProperty: function(name, expression) {
MapWrapper.set(this.propertyBindings, name, expression);
this.bindPropertySetter(name);
},
bindPropertySetter: function(name) {
MapWrapper.set(this.propertySetters, name, setterFactory(name));
},
bindVariable: function(name, value) {
if (isPresent(this.nestedProtoView)) {
this.nestedProtoView.bindVariable(name, value);
} else {
MapWrapper.set(this.variableBindings, value, name);
}
},
bindEvent: function(name, expression) {
var target = arguments[2] !== (void 0) ? arguments[2] : null;
ListWrapper.push(this.eventBindings, this.eventBuilder.add(name, expression, target));
},
bindText: function(index, expression) {
ListWrapper.push(this.textBindingIndices, index);
ListWrapper.push(this.textBindings, expression);
},
setContentTagSelector: function(value) {
this.contentTagSelector = value;
},
setComponentId: function(componentId) {
this.componentId = componentId;
}
}, {});
Object.defineProperty(ElementBinderBuilder.prototype.setParent, "parameters", {get: function() {
return [[ElementBinderBuilder], []];
}});
Object.defineProperty(ElementBinderBuilder.prototype.readAttribute, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ElementBinderBuilder.prototype.bindDirective, "parameters", {get: function() {
return [[$traceurRuntime.type.number]];
}});
Object.defineProperty(ElementBinderBuilder.prototype.setContentTagSelector, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
Object.defineProperty(ElementBinderBuilder.prototype.setComponentId, "parameters", {get: function() {
return [[$traceurRuntime.type.string]];
}});
var DirectiveBuilder = function DirectiveBuilder(directiveIndex) {
this.directiveIndex = directiveIndex;
this.propertyBindings = MapWrapper.create();
this.eventBindings = ListWrapper.create();
this.eventBuilder = new EventBuilder();
};
($traceurRuntime.createClass)(DirectiveBuilder, {
bindProperty: function(name, expression) {
MapWrapper.set(this.propertyBindings, name, expression);
},
bindEvent: function(name, expression) {
var target = arguments[2] !== (void 0) ? arguments[2] : null;
ListWrapper.push(this.eventBindings, this.eventBuilder.add(name, expression, target));
}
}, {});
var EventBuilder = function EventBuilder() {
$traceurRuntime.superConstructor($EventBuilder).call(this);
this.locals = [];
this.localEvents = [];
this.globalEvents = [];
this._implicitReceiver = new ImplicitReceiver();
};
var $EventBuilder = EventBuilder;
($traceurRuntime.createClass)(EventBuilder, {
add: function(name, source, target) {
var adjustedAst = source.ast;
var fullName = isPresent(target) ? target + EVENT_TARGET_SEPARATOR + name : name;
var result = new api.EventBinding(fullName, new ASTWithSource(adjustedAst, source.source, source.location));
var event = new Event(name, target, fullName);
if (isBlank(target)) {
ListWrapper.push(this.localEvents, event);
} else {
ListWrapper.push(this.globalEvents, event);
}
return result;
},
visitAccessMember: function(ast) {
var isEventAccess = false;
var current = ast;
while (!isEventAccess && (current instanceof AccessMember)) {
if (current.name == '$event') {
isEventAccess = true;
}
current = current.receiver;
}
if (isEventAccess) {
ListWrapper.push(this.locals, ast);
var index = this.locals.length - 1;
return new AccessMember(this._implicitReceiver, ("" + index), (function(arr) {
return arr[index];
}), null);
} else {
return ast;
}
},
buildEventLocals: function() {
return this.locals;
},
buildLocalEvents: function() {
return this.localEvents;
},
buildGlobalEvents: function() {
return this.globalEvents;
},
merge: function(eventBuilder) {
this._merge(this.localEvents, eventBuilder.localEvents);
this._merge(this.globalEvents, eventBuilder.globalEvents);
ListWrapper.concat(this.locals, eventBuilder.locals);
},
_merge: function(host, tobeAdded) {
var names = ListWrapper.create();
for (var i = 0; i < host.length; i++) {
ListWrapper.push(names, host[i].fullName);
}
for (var j = 0; j < tobeAdded.length; j++) {
if (!ListWrapper.contains(names, tobeAdded[j].fullName)) {
ListWrapper.push(host, tobeAdded[j]);
}
}
}
}, {}, AstTransformer);
Object.defineProperty(EventBuilder.prototype.add, "parameters", {get: function() {
return [[$traceurRuntime.type.string], [ASTWithSource], [$traceurRuntime.type.string]];
}});
Object.defineProperty(EventBuilder.prototype.visitAccessMember, "parameters", {get: function() {
return [[AccessMember]];
}});
Object.defineProperty(EventBuilder.prototype.merge, "parameters", {get: function() {
return [[EventBuilder]];
}});
Object.defineProperty(EventBuilder.prototype._merge, "parameters", {get: function() {
return [[$traceurRuntime.genericType(List, Event)], [$traceurRuntime.genericType(List, Event)]];
}});
//# sourceMappingURL=proto_view_builder.js.map
//# sourceMappingURL=./proto_view_builder.map