parent
c320240086
commit
d8c5ab232c
|
@ -25,8 +25,8 @@ export class CodegenLogicUtil {
|
||||||
* value of the record. Used by property bindings.
|
* value of the record. Used by property bindings.
|
||||||
*/
|
*/
|
||||||
genPropertyBindingEvalValue(protoRec: ProtoRecord): string {
|
genPropertyBindingEvalValue(protoRec: ProtoRecord): string {
|
||||||
return this.genEvalValue(protoRec, idx => this._names.getLocalName(idx),
|
return this._genEvalValue(protoRec, idx => this._names.getLocalName(idx),
|
||||||
this._names.getLocalsAccessorName());
|
this._names.getLocalsAccessorName());
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -34,12 +34,12 @@ export class CodegenLogicUtil {
|
||||||
* value of the record. Used by event bindings.
|
* value of the record. Used by event bindings.
|
||||||
*/
|
*/
|
||||||
genEventBindingEvalValue(eventRecord: any, protoRec: ProtoRecord): string {
|
genEventBindingEvalValue(eventRecord: any, protoRec: ProtoRecord): string {
|
||||||
return this.genEvalValue(protoRec, idx => this._names.getEventLocalName(eventRecord, idx),
|
return this._genEvalValue(protoRec, idx => this._names.getEventLocalName(eventRecord, idx),
|
||||||
"locals");
|
"locals");
|
||||||
}
|
}
|
||||||
|
|
||||||
private genEvalValue(protoRec: ProtoRecord, getLocalName: Function,
|
private _genEvalValue(protoRec: ProtoRecord, getLocalName: Function,
|
||||||
localsAccessor: string): string {
|
localsAccessor: string): string {
|
||||||
var context = (protoRec.contextIndex == -1) ?
|
var context = (protoRec.contextIndex == -1) ?
|
||||||
this._names.getDirectiveName(protoRec.directiveIndex) :
|
this._names.getDirectiveName(protoRec.directiveIndex) :
|
||||||
getLocalName(protoRec.contextIndex);
|
getLocalName(protoRec.contextIndex);
|
||||||
|
|
|
@ -44,17 +44,17 @@ export class CodegenNameUtil {
|
||||||
_sanitizedNames: string[];
|
_sanitizedNames: string[];
|
||||||
_sanitizedEventNames: Map<EventBinding, string[]>;
|
_sanitizedEventNames: Map<EventBinding, string[]>;
|
||||||
|
|
||||||
constructor(private records: ProtoRecord[], private eventBindings: EventBinding[],
|
constructor(private _records: ProtoRecord[], private _eventBindings: EventBinding[],
|
||||||
private directiveRecords: any[], private utilName: string) {
|
private _directiveRecords: any[], private _utilName: string) {
|
||||||
this._sanitizedNames = ListWrapper.createFixedSize(this.records.length + 1);
|
this._sanitizedNames = ListWrapper.createFixedSize(this._records.length + 1);
|
||||||
this._sanitizedNames[CONTEXT_INDEX] = _CONTEXT_ACCESSOR;
|
this._sanitizedNames[CONTEXT_INDEX] = _CONTEXT_ACCESSOR;
|
||||||
for (var i = 0, iLen = this.records.length; i < iLen; ++i) {
|
for (var i = 0, iLen = this._records.length; i < iLen; ++i) {
|
||||||
this._sanitizedNames[i + 1] = sanitizeName(`${this.records[i].name}${i}`);
|
this._sanitizedNames[i + 1] = sanitizeName(`${this._records[i].name}${i}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._sanitizedEventNames = new Map();
|
this._sanitizedEventNames = new Map();
|
||||||
for (var ebIndex = 0; ebIndex < eventBindings.length; ++ebIndex) {
|
for (var ebIndex = 0; ebIndex < _eventBindings.length; ++ebIndex) {
|
||||||
var eb = eventBindings[ebIndex];
|
var eb = _eventBindings[ebIndex];
|
||||||
var names = [_CONTEXT_ACCESSOR];
|
var names = [_CONTEXT_ACCESSOR];
|
||||||
for (var i = 0, iLen = eb.records.length; i < iLen; ++i) {
|
for (var i = 0, iLen = eb.records.length; i < iLen; ++i) {
|
||||||
names.push(sanitizeName(`${eb.records[i].name}${i}_${ebIndex}`));
|
names.push(sanitizeName(`${eb.records[i].name}${i}_${ebIndex}`));
|
||||||
|
@ -99,7 +99,7 @@ export class CodegenNameUtil {
|
||||||
if (i == CONTEXT_INDEX) {
|
if (i == CONTEXT_INDEX) {
|
||||||
declarations.push(`${this.getLocalName(i)} = ${this.getFieldName(i)}`);
|
declarations.push(`${this.getLocalName(i)} = ${this.getFieldName(i)}`);
|
||||||
} else {
|
} else {
|
||||||
var rec = this.records[i - 1];
|
var rec = this._records[i - 1];
|
||||||
if (rec.argumentToPureFunction) {
|
if (rec.argumentToPureFunction) {
|
||||||
var changeName = this.getChangeName(i);
|
var changeName = this.getChangeName(i);
|
||||||
declarations.push(`${this.getLocalName(i)},${changeName}`);
|
declarations.push(`${this.getLocalName(i)},${changeName}`);
|
||||||
|
@ -138,20 +138,20 @@ export class CodegenNameUtil {
|
||||||
getAllFieldNames(): string[] {
|
getAllFieldNames(): string[] {
|
||||||
var fieldList = [];
|
var fieldList = [];
|
||||||
for (var k = 0, kLen = this.getFieldCount(); k < kLen; ++k) {
|
for (var k = 0, kLen = this.getFieldCount(); k < kLen; ++k) {
|
||||||
if (k === 0 || this.records[k - 1].shouldBeChecked()) {
|
if (k === 0 || this._records[k - 1].shouldBeChecked()) {
|
||||||
fieldList.push(this.getFieldName(k));
|
fieldList.push(this.getFieldName(k));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0, iLen = this.records.length; i < iLen; ++i) {
|
for (var i = 0, iLen = this._records.length; i < iLen; ++i) {
|
||||||
var rec = this.records[i];
|
var rec = this._records[i];
|
||||||
if (rec.isPipeRecord()) {
|
if (rec.isPipeRecord()) {
|
||||||
fieldList.push(this.getPipeName(rec.selfIndex));
|
fieldList.push(this.getPipeName(rec.selfIndex));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var j = 0, jLen = this.directiveRecords.length; j < jLen; ++j) {
|
for (var j = 0, jLen = this._directiveRecords.length; j < jLen; ++j) {
|
||||||
var dRec = this.directiveRecords[j];
|
var dRec = this._directiveRecords[j];
|
||||||
fieldList.push(this.getDirectiveName(dRec.directiveIndex));
|
fieldList.push(this.getDirectiveName(dRec.directiveIndex));
|
||||||
if (!dRec.isDefaultChangeDetection()) {
|
if (!dRec.isDefaultChangeDetection()) {
|
||||||
fieldList.push(this.getDetectorName(dRec.directiveIndex));
|
fieldList.push(this.getDetectorName(dRec.directiveIndex));
|
||||||
|
@ -169,7 +169,7 @@ export class CodegenNameUtil {
|
||||||
if (ListWrapper.isEmpty(fields)) return '';
|
if (ListWrapper.isEmpty(fields)) return '';
|
||||||
|
|
||||||
// At least one assignment.
|
// At least one assignment.
|
||||||
fields.push(`${this.utilName}.uninitialized;`);
|
fields.push(`${this._utilName}.uninitialized;`);
|
||||||
return ListWrapper.join(fields, ' = ');
|
return ListWrapper.join(fields, ' = ');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -179,9 +179,9 @@ export class CodegenNameUtil {
|
||||||
genPipeOnDestroy(): string {
|
genPipeOnDestroy(): string {
|
||||||
return ListWrapper.join(
|
return ListWrapper.join(
|
||||||
ListWrapper.map(
|
ListWrapper.map(
|
||||||
ListWrapper.filter(this.records, (r) => { return r.isPipeRecord(); }),
|
ListWrapper.filter(this._records, (r) => { return r.isPipeRecord(); }),
|
||||||
(r) => {
|
(r) => {
|
||||||
return `${this.utilName}.callPipeOnDestroy(${this.getPipeName(r.selfIndex)});`;
|
return `${this._utilName}.callPipeOnDestroy(${this.getPipeName(r.selfIndex)});`;
|
||||||
}),
|
}),
|
||||||
'\n');
|
'\n');
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,12 +26,12 @@ export class DynamicChangeDetector extends AbstractChangeDetector<any> {
|
||||||
|
|
||||||
constructor(id: string, dispatcher: any, numberOfPropertyProtoRecords: number,
|
constructor(id: string, dispatcher: any, numberOfPropertyProtoRecords: number,
|
||||||
propertyBindingTargets: BindingTarget[], directiveIndices: DirectiveIndex[],
|
propertyBindingTargets: BindingTarget[], directiveIndices: DirectiveIndex[],
|
||||||
strategy: ChangeDetectionStrategy, private records: ProtoRecord[],
|
strategy: ChangeDetectionStrategy, private _records: ProtoRecord[],
|
||||||
private eventBindings: EventBinding[], private directiveRecords: DirectiveRecord[],
|
private _eventBindings: EventBinding[], private _directiveRecords: DirectiveRecord[],
|
||||||
private genConfig: ChangeDetectorGenConfig) {
|
private _genConfig: ChangeDetectorGenConfig) {
|
||||||
super(id, dispatcher, numberOfPropertyProtoRecords, propertyBindingTargets, directiveIndices,
|
super(id, dispatcher, numberOfPropertyProtoRecords, propertyBindingTargets, directiveIndices,
|
||||||
strategy);
|
strategy);
|
||||||
var len = records.length + 1;
|
var len = _records.length + 1;
|
||||||
this.values = ListWrapper.createFixedSize(len);
|
this.values = ListWrapper.createFixedSize(len);
|
||||||
this.localPipes = ListWrapper.createFixedSize(len);
|
this.localPipes = ListWrapper.createFixedSize(len);
|
||||||
this.prevContexts = ListWrapper.createFixedSize(len);
|
this.prevContexts = ListWrapper.createFixedSize(len);
|
||||||
|
@ -80,7 +80,7 @@ export class DynamicChangeDetector extends AbstractChangeDetector<any> {
|
||||||
}
|
}
|
||||||
|
|
||||||
_matchingEventBindings(eventName: string, elIndex: number): EventBinding[] {
|
_matchingEventBindings(eventName: string, elIndex: number): EventBinding[] {
|
||||||
return ListWrapper.filter(this.eventBindings,
|
return ListWrapper.filter(this._eventBindings,
|
||||||
eb => eb.eventName == eventName && eb.elIndex === elIndex);
|
eb => eb.eventName == eventName && eb.elIndex === elIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,7 +119,7 @@ export class DynamicChangeDetector extends AbstractChangeDetector<any> {
|
||||||
checkNoChanges(): void { this.runDetectChanges(true); }
|
checkNoChanges(): void { this.runDetectChanges(true); }
|
||||||
|
|
||||||
detectChangesInRecordsInternal(throwOnChange: boolean) {
|
detectChangesInRecordsInternal(throwOnChange: boolean) {
|
||||||
var protos = this.records;
|
var protos = this._records;
|
||||||
|
|
||||||
var changes = null;
|
var changes = null;
|
||||||
var isChanged = false;
|
var isChanged = false;
|
||||||
|
@ -162,12 +162,12 @@ export class DynamicChangeDetector extends AbstractChangeDetector<any> {
|
||||||
}
|
}
|
||||||
|
|
||||||
_firstInBinding(r: ProtoRecord): boolean {
|
_firstInBinding(r: ProtoRecord): boolean {
|
||||||
var prev = ChangeDetectionUtil.protoByIndex(this.records, r.selfIndex - 1);
|
var prev = ChangeDetectionUtil.protoByIndex(this._records, r.selfIndex - 1);
|
||||||
return isBlank(prev) || prev.bindingRecord !== r.bindingRecord;
|
return isBlank(prev) || prev.bindingRecord !== r.bindingRecord;
|
||||||
}
|
}
|
||||||
|
|
||||||
afterContentLifecycleCallbacksInternal() {
|
afterContentLifecycleCallbacksInternal() {
|
||||||
var dirs = this.directiveRecords;
|
var dirs = this._directiveRecords;
|
||||||
for (var i = dirs.length - 1; i >= 0; --i) {
|
for (var i = dirs.length - 1; i >= 0; --i) {
|
||||||
var dir = dirs[i];
|
var dir = dirs[i];
|
||||||
if (dir.callAfterContentInit && !this.alreadyChecked) {
|
if (dir.callAfterContentInit && !this.alreadyChecked) {
|
||||||
|
@ -181,7 +181,7 @@ export class DynamicChangeDetector extends AbstractChangeDetector<any> {
|
||||||
}
|
}
|
||||||
|
|
||||||
afterViewLifecycleCallbacksInternal() {
|
afterViewLifecycleCallbacksInternal() {
|
||||||
var dirs = this.directiveRecords;
|
var dirs = this._directiveRecords;
|
||||||
for (var i = dirs.length - 1; i >= 0; --i) {
|
for (var i = dirs.length - 1; i >= 0; --i) {
|
||||||
var dir = dirs[i];
|
var dir = dirs[i];
|
||||||
if (dir.callAfterViewInit && !this.alreadyChecked) {
|
if (dir.callAfterViewInit && !this.alreadyChecked) {
|
||||||
|
@ -201,7 +201,7 @@ export class DynamicChangeDetector extends AbstractChangeDetector<any> {
|
||||||
bindingRecord.setter(this._getDirectiveFor(directiveIndex), change.currentValue);
|
bindingRecord.setter(this._getDirectiveFor(directiveIndex), change.currentValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (this.genConfig.logBindingUpdate) {
|
if (this._genConfig.logBindingUpdate) {
|
||||||
super.logBindingUpdate(change.currentValue);
|
super.logBindingUpdate(change.currentValue);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -42,19 +42,19 @@ export class DynamicProtoChangeDetector implements ProtoChangeDetector {
|
||||||
_eventBindingRecords: EventBinding[];
|
_eventBindingRecords: EventBinding[];
|
||||||
_directiveIndices: DirectiveIndex[];
|
_directiveIndices: DirectiveIndex[];
|
||||||
|
|
||||||
constructor(private definition: ChangeDetectorDefinition) {
|
constructor(private _definition: ChangeDetectorDefinition) {
|
||||||
this._propertyBindingRecords = createPropertyRecords(definition);
|
this._propertyBindingRecords = createPropertyRecords(_definition);
|
||||||
this._eventBindingRecords = createEventRecords(definition);
|
this._eventBindingRecords = createEventRecords(_definition);
|
||||||
this._propertyBindingTargets = this.definition.bindingRecords.map(b => b.target);
|
this._propertyBindingTargets = this._definition.bindingRecords.map(b => b.target);
|
||||||
this._directiveIndices = this.definition.directiveRecords.map(d => d.directiveIndex);
|
this._directiveIndices = this._definition.directiveRecords.map(d => d.directiveIndex);
|
||||||
}
|
}
|
||||||
|
|
||||||
instantiate(dispatcher: any): ChangeDetector {
|
instantiate(dispatcher: any): ChangeDetector {
|
||||||
return new DynamicChangeDetector(
|
return new DynamicChangeDetector(
|
||||||
this.definition.id, dispatcher, this._propertyBindingRecords.length,
|
this._definition.id, dispatcher, this._propertyBindingRecords.length,
|
||||||
this._propertyBindingTargets, this._directiveIndices, this.definition.strategy,
|
this._propertyBindingTargets, this._directiveIndices, this._definition.strategy,
|
||||||
this._propertyBindingRecords, this._eventBindingRecords, this.definition.directiveRecords,
|
this._propertyBindingRecords, this._eventBindingRecords, this._definition.directiveRecords,
|
||||||
this.definition.genConfig);
|
this._definition.genConfig);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -40,13 +40,13 @@ export class NgFor {
|
||||||
_ngForOf: any;
|
_ngForOf: any;
|
||||||
private _differ: IterableDiffer;
|
private _differ: IterableDiffer;
|
||||||
|
|
||||||
constructor(private viewContainer: ViewContainerRef, private templateRef: TemplateRef,
|
constructor(private _viewContainer: ViewContainerRef, private _templateRef: TemplateRef,
|
||||||
private iterableDiffers: IterableDiffers, private cdr: ChangeDetectorRef) {}
|
private _iterableDiffers: IterableDiffers, private _cdr: ChangeDetectorRef) {}
|
||||||
|
|
||||||
set ngForOf(value: any) {
|
set ngForOf(value: any) {
|
||||||
this._ngForOf = value;
|
this._ngForOf = value;
|
||||||
if (isBlank(this._differ) && isPresent(value)) {
|
if (isBlank(this._differ) && isPresent(value)) {
|
||||||
this._differ = this.iterableDiffers.find(value).create(this.cdr);
|
this._differ = this._iterableDiffers.find(value).create(this._cdr);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -67,19 +67,19 @@ export class NgFor {
|
||||||
changes.forEachMovedItem((movedRecord) =>
|
changes.forEachMovedItem((movedRecord) =>
|
||||||
recordViewTuples.push(new RecordViewTuple(movedRecord, null)));
|
recordViewTuples.push(new RecordViewTuple(movedRecord, null)));
|
||||||
|
|
||||||
var insertTuples = NgFor.bulkRemove(recordViewTuples, this.viewContainer);
|
var insertTuples = NgFor.bulkRemove(recordViewTuples, this._viewContainer);
|
||||||
|
|
||||||
changes.forEachAddedItem((addedRecord) =>
|
changes.forEachAddedItem((addedRecord) =>
|
||||||
insertTuples.push(new RecordViewTuple(addedRecord, null)));
|
insertTuples.push(new RecordViewTuple(addedRecord, null)));
|
||||||
|
|
||||||
NgFor.bulkInsert(insertTuples, this.viewContainer, this.templateRef);
|
NgFor.bulkInsert(insertTuples, this._viewContainer, this._templateRef);
|
||||||
|
|
||||||
for (var i = 0; i < insertTuples.length; i++) {
|
for (var i = 0; i < insertTuples.length; i++) {
|
||||||
this._perViewChange(insertTuples[i].view, insertTuples[i].record);
|
this._perViewChange(insertTuples[i].view, insertTuples[i].record);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (var i = 0, ilen = this.viewContainer.length; i < ilen; i++) {
|
for (var i = 0, ilen = this._viewContainer.length; i < ilen; i++) {
|
||||||
this.viewContainer.get(i).setLocal('last', i === ilen - 1);
|
this._viewContainer.get(i).setLocal('last', i === ilen - 1);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -33,7 +33,7 @@ class _ArrayLogger {
|
||||||
*/
|
*/
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ExceptionHandler {
|
export class ExceptionHandler {
|
||||||
constructor(private logger: any, private rethrowException: boolean = true) {}
|
constructor(private _logger: any, private _rethrowException: boolean = true) {}
|
||||||
|
|
||||||
static exceptionToString(exception: any, stackTrace: any = null, reason: string = null): string {
|
static exceptionToString(exception: any, stackTrace: any = null, reason: string = null): string {
|
||||||
var l = new _ArrayLogger();
|
var l = new _ArrayLogger();
|
||||||
|
@ -47,36 +47,36 @@ export class ExceptionHandler {
|
||||||
var originalStack = this._findOriginalStack(exception);
|
var originalStack = this._findOriginalStack(exception);
|
||||||
var context = this._findContext(exception);
|
var context = this._findContext(exception);
|
||||||
|
|
||||||
this.logger.logGroup(`EXCEPTION: ${exception}`);
|
this._logger.logGroup(`EXCEPTION: ${exception}`);
|
||||||
|
|
||||||
if (isPresent(stackTrace) && isBlank(originalStack)) {
|
if (isPresent(stackTrace) && isBlank(originalStack)) {
|
||||||
this.logger.logError("STACKTRACE:");
|
this._logger.logError("STACKTRACE:");
|
||||||
this.logger.logError(this._longStackTrace(stackTrace));
|
this._logger.logError(this._longStackTrace(stackTrace));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPresent(reason)) {
|
if (isPresent(reason)) {
|
||||||
this.logger.logError(`REASON: ${reason}`);
|
this._logger.logError(`REASON: ${reason}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPresent(originalException)) {
|
if (isPresent(originalException)) {
|
||||||
this.logger.logError(`ORIGINAL EXCEPTION: ${originalException}`);
|
this._logger.logError(`ORIGINAL EXCEPTION: ${originalException}`);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPresent(originalStack)) {
|
if (isPresent(originalStack)) {
|
||||||
this.logger.logError("ORIGINAL STACKTRACE:");
|
this._logger.logError("ORIGINAL STACKTRACE:");
|
||||||
this.logger.logError(this._longStackTrace(originalStack));
|
this._logger.logError(this._longStackTrace(originalStack));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isPresent(context)) {
|
if (isPresent(context)) {
|
||||||
this.logger.logError("ERROR CONTEXT:");
|
this._logger.logError("ERROR CONTEXT:");
|
||||||
this.logger.logError(context);
|
this._logger.logError(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
this.logger.logGroupEnd();
|
this._logger.logGroupEnd();
|
||||||
|
|
||||||
// We rethrow exceptions, so operations like 'bootstrap' will result in an error
|
// We rethrow exceptions, so operations like 'bootstrap' will result in an error
|
||||||
// when an exception happens. If we do not rethrow, bootstrap will always succeed.
|
// when an exception happens. If we do not rethrow, bootstrap will always succeed.
|
||||||
if (this.rethrowException) throw exception;
|
if (this._rethrowException) throw exception;
|
||||||
}
|
}
|
||||||
|
|
||||||
_longStackTrace(stackTrace: any): any {
|
_longStackTrace(stackTrace: any): any {
|
||||||
|
|
|
@ -110,5 +110,5 @@ export class DatePipe implements PipeTransform {
|
||||||
return DateFormatter.format(value, defaultLocale, pattern);
|
return DateFormatter.format(value, defaultLocale, pattern);
|
||||||
}
|
}
|
||||||
|
|
||||||
private supports(obj: any): boolean { return isDate(obj) || isNumber(obj); }
|
supports(obj: any): boolean { return isDate(obj) || isNumber(obj); }
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,30 +31,34 @@ import {setProperty} from './shared';
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export class CheckboxControlValueAccessor implements ControlValueAccessor {
|
export class CheckboxControlValueAccessor implements ControlValueAccessor {
|
||||||
private cd: NgControl;
|
private _cd: NgControl;
|
||||||
onChange = (_) => {};
|
onChange = (_) => {};
|
||||||
onTouched = () => {};
|
onTouched = () => {};
|
||||||
|
|
||||||
constructor(@Self() cd: NgControl, private renderer: Renderer, private elementRef: ElementRef) {
|
constructor(@Self() cd: NgControl, private _renderer: Renderer, private _elementRef: ElementRef) {
|
||||||
this.cd = cd;
|
this._cd = cd;
|
||||||
cd.valueAccessor = this;
|
cd.valueAccessor = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
writeValue(value: any) { setProperty(this.renderer, this.elementRef, "checked", value); }
|
writeValue(value: any) { setProperty(this._renderer, this._elementRef, "checked", value); }
|
||||||
|
|
||||||
get ngClassUntouched(): boolean {
|
get ngClassUntouched(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.untouched : false;
|
return isPresent(this._cd.control) ? this._cd.control.untouched : false;
|
||||||
}
|
}
|
||||||
get ngClassTouched(): boolean {
|
get ngClassTouched(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.touched : false;
|
return isPresent(this._cd.control) ? this._cd.control.touched : false;
|
||||||
}
|
}
|
||||||
get ngClassPristine(): boolean {
|
get ngClassPristine(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.pristine : false;
|
return isPresent(this._cd.control) ? this._cd.control.pristine : false;
|
||||||
|
}
|
||||||
|
get ngClassDirty(): boolean {
|
||||||
|
return isPresent(this._cd.control) ? this._cd.control.dirty : false;
|
||||||
|
}
|
||||||
|
get ngClassValid(): boolean {
|
||||||
|
return isPresent(this._cd.control) ? this._cd.control.valid : false;
|
||||||
}
|
}
|
||||||
get ngClassDirty(): boolean { return isPresent(this.cd.control) ? this.cd.control.dirty : false; }
|
|
||||||
get ngClassValid(): boolean { return isPresent(this.cd.control) ? this.cd.control.valid : false; }
|
|
||||||
get ngClassInvalid(): boolean {
|
get ngClassInvalid(): boolean {
|
||||||
return isPresent(this.cd.control) ? !this.cd.control.valid : false;
|
return isPresent(this._cd.control) ? !this._cd.control.valid : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }
|
registerOnChange(fn: (_: any) => {}): void { this.onChange = fn; }
|
||||||
|
|
|
@ -32,12 +32,12 @@ import {setProperty} from './shared';
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export class DefaultValueAccessor implements ControlValueAccessor {
|
export class DefaultValueAccessor implements ControlValueAccessor {
|
||||||
private cd: NgControl;
|
private _cd: NgControl;
|
||||||
onChange = (_) => {};
|
onChange = (_) => {};
|
||||||
onTouched = () => {};
|
onTouched = () => {};
|
||||||
|
|
||||||
constructor(@Self() cd: NgControl, private renderer: Renderer, private elementRef: ElementRef) {
|
constructor(@Self() cd: NgControl, private _renderer: Renderer, private _elementRef: ElementRef) {
|
||||||
this.cd = cd;
|
this._cd = cd;
|
||||||
cd.valueAccessor = this;
|
cd.valueAccessor = this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -45,22 +45,26 @@ export class DefaultValueAccessor implements ControlValueAccessor {
|
||||||
// both this.value and setProperty are required at the moment
|
// both this.value and setProperty are required at the moment
|
||||||
// remove when a proper imperative API is provided
|
// remove when a proper imperative API is provided
|
||||||
var normalizedValue = isBlank(value) ? '' : value;
|
var normalizedValue = isBlank(value) ? '' : value;
|
||||||
setProperty(this.renderer, this.elementRef, 'value', normalizedValue);
|
setProperty(this._renderer, this._elementRef, 'value', normalizedValue);
|
||||||
}
|
}
|
||||||
|
|
||||||
get ngClassUntouched(): boolean {
|
get ngClassUntouched(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.untouched : false;
|
return isPresent(this._cd.control) ? this._cd.control.untouched : false;
|
||||||
}
|
}
|
||||||
get ngClassTouched(): boolean {
|
get ngClassTouched(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.touched : false;
|
return isPresent(this._cd.control) ? this._cd.control.touched : false;
|
||||||
}
|
}
|
||||||
get ngClassPristine(): boolean {
|
get ngClassPristine(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.pristine : false;
|
return isPresent(this._cd.control) ? this._cd.control.pristine : false;
|
||||||
|
}
|
||||||
|
get ngClassDirty(): boolean {
|
||||||
|
return isPresent(this._cd.control) ? this._cd.control.dirty : false;
|
||||||
|
}
|
||||||
|
get ngClassValid(): boolean {
|
||||||
|
return isPresent(this._cd.control) ? this._cd.control.valid : false;
|
||||||
}
|
}
|
||||||
get ngClassDirty(): boolean { return isPresent(this.cd.control) ? this.cd.control.dirty : false; }
|
|
||||||
get ngClassValid(): boolean { return isPresent(this.cd.control) ? this.cd.control.valid : false; }
|
|
||||||
get ngClassInvalid(): boolean {
|
get ngClassInvalid(): boolean {
|
||||||
return isPresent(this.cd.control) ? !this.cd.control.valid : false;
|
return isPresent(this._cd.control) ? !this._cd.control.valid : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
|
registerOnChange(fn: (_: any) => void): void { this.onChange = fn; }
|
||||||
|
|
|
@ -41,36 +41,40 @@ export class NgSelectOption {
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
export class SelectControlValueAccessor implements ControlValueAccessor {
|
export class SelectControlValueAccessor implements ControlValueAccessor {
|
||||||
private cd: NgControl;
|
private _cd: NgControl;
|
||||||
value: string;
|
value: string;
|
||||||
onChange = (_) => {};
|
onChange = (_) => {};
|
||||||
onTouched = () => {};
|
onTouched = () => {};
|
||||||
|
|
||||||
constructor(@Self() cd: NgControl, private renderer: Renderer, private elementRef: ElementRef,
|
constructor(@Self() cd: NgControl, private _renderer: Renderer, private _elementRef: ElementRef,
|
||||||
@Query(NgSelectOption, {descendants: true}) query: QueryList<NgSelectOption>) {
|
@Query(NgSelectOption, {descendants: true}) query: QueryList<NgSelectOption>) {
|
||||||
this.cd = cd;
|
this._cd = cd;
|
||||||
cd.valueAccessor = this;
|
cd.valueAccessor = this;
|
||||||
this._updateValueWhenListOfOptionsChanges(query);
|
this._updateValueWhenListOfOptionsChanges(query);
|
||||||
}
|
}
|
||||||
|
|
||||||
writeValue(value: any) {
|
writeValue(value: any) {
|
||||||
this.value = value;
|
this.value = value;
|
||||||
setProperty(this.renderer, this.elementRef, "value", value);
|
setProperty(this._renderer, this._elementRef, "value", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
get ngClassUntouched(): boolean {
|
get ngClassUntouched(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.untouched : false;
|
return isPresent(this._cd.control) ? this._cd.control.untouched : false;
|
||||||
}
|
}
|
||||||
get ngClassTouched(): boolean {
|
get ngClassTouched(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.touched : false;
|
return isPresent(this._cd.control) ? this._cd.control.touched : false;
|
||||||
}
|
}
|
||||||
get ngClassPristine(): boolean {
|
get ngClassPristine(): boolean {
|
||||||
return isPresent(this.cd.control) ? this.cd.control.pristine : false;
|
return isPresent(this._cd.control) ? this._cd.control.pristine : false;
|
||||||
|
}
|
||||||
|
get ngClassDirty(): boolean {
|
||||||
|
return isPresent(this._cd.control) ? this._cd.control.dirty : false;
|
||||||
|
}
|
||||||
|
get ngClassValid(): boolean {
|
||||||
|
return isPresent(this._cd.control) ? this._cd.control.valid : false;
|
||||||
}
|
}
|
||||||
get ngClassDirty(): boolean { return isPresent(this.cd.control) ? this.cd.control.dirty : false; }
|
|
||||||
get ngClassValid(): boolean { return isPresent(this.cd.control) ? this.cd.control.valid : false; }
|
|
||||||
get ngClassInvalid(): boolean {
|
get ngClassInvalid(): boolean {
|
||||||
return isPresent(this.cd.control) ? !this.cd.control.valid : false;
|
return isPresent(this._cd.control) ? !this._cd.control.valid : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
registerOnChange(fn: () => any): void { this.onChange = fn; }
|
registerOnChange(fn: () => any): void { this.onChange = fn; }
|
||||||
|
|
|
@ -191,7 +191,7 @@ export class PathRecognizer {
|
||||||
specificity: number;
|
specificity: number;
|
||||||
terminal: boolean = true;
|
terminal: boolean = true;
|
||||||
hash: string;
|
hash: string;
|
||||||
private cache: Map<string, ComponentInstruction> = new Map<string, ComponentInstruction>();
|
private _cache: Map<string, ComponentInstruction> = new Map<string, ComponentInstruction>();
|
||||||
|
|
||||||
|
|
||||||
// TODO: cache component instruction instances by params and by ParsedUrl instance
|
// TODO: cache component instruction instances by params and by ParsedUrl instance
|
||||||
|
@ -299,11 +299,11 @@ export class PathRecognizer {
|
||||||
private _getInstruction(urlPath: string, urlParams: string[], _recognizer: PathRecognizer,
|
private _getInstruction(urlPath: string, urlParams: string[], _recognizer: PathRecognizer,
|
||||||
params: StringMap<string, any>): ComponentInstruction {
|
params: StringMap<string, any>): ComponentInstruction {
|
||||||
var hashKey = urlPath + '?' + urlParams.join('?');
|
var hashKey = urlPath + '?' + urlParams.join('?');
|
||||||
if (this.cache.has(hashKey)) {
|
if (this._cache.has(hashKey)) {
|
||||||
return this.cache.get(hashKey);
|
return this._cache.get(hashKey);
|
||||||
}
|
}
|
||||||
var instruction = new ComponentInstruction(urlPath, urlParams, _recognizer, params);
|
var instruction = new ComponentInstruction(urlPath, urlParams, _recognizer, params);
|
||||||
this.cache.set(hashKey, instruction);
|
this._cache.set(hashKey, instruction);
|
||||||
|
|
||||||
return instruction;
|
return instruction;
|
||||||
}
|
}
|
||||||
|
|
|
@ -74,19 +74,19 @@ function matchUrlSegment(str: string): string {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class UrlParser {
|
export class UrlParser {
|
||||||
private remaining: string;
|
private _remaining: string;
|
||||||
|
|
||||||
peekStartsWith(str: string): boolean { return this.remaining.startsWith(str); }
|
peekStartsWith(str: string): boolean { return this._remaining.startsWith(str); }
|
||||||
|
|
||||||
capture(str: string): void {
|
capture(str: string): void {
|
||||||
if (!this.remaining.startsWith(str)) {
|
if (!this._remaining.startsWith(str)) {
|
||||||
throw new BaseException(`Expected "${str}".`);
|
throw new BaseException(`Expected "${str}".`);
|
||||||
}
|
}
|
||||||
this.remaining = this.remaining.substring(str.length);
|
this._remaining = this._remaining.substring(str.length);
|
||||||
}
|
}
|
||||||
|
|
||||||
parse(url: string): Url {
|
parse(url: string): Url {
|
||||||
this.remaining = url;
|
this._remaining = url;
|
||||||
if (url == '' || url == '/') {
|
if (url == '' || url == '/') {
|
||||||
return new Url('');
|
return new Url('');
|
||||||
}
|
}
|
||||||
|
@ -98,7 +98,7 @@ export class UrlParser {
|
||||||
if (this.peekStartsWith('/')) {
|
if (this.peekStartsWith('/')) {
|
||||||
this.capture('/');
|
this.capture('/');
|
||||||
}
|
}
|
||||||
var path = matchUrlSegment(this.remaining);
|
var path = matchUrlSegment(this._remaining);
|
||||||
this.capture(path);
|
this.capture(path);
|
||||||
|
|
||||||
var aux = [];
|
var aux = [];
|
||||||
|
@ -123,13 +123,13 @@ export class UrlParser {
|
||||||
|
|
||||||
// segment + (matrix params) + (aux segments)
|
// segment + (matrix params) + (aux segments)
|
||||||
parseSegment(): Url {
|
parseSegment(): Url {
|
||||||
if (this.remaining.length == 0) {
|
if (this._remaining.length == 0) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
if (this.peekStartsWith('/')) {
|
if (this.peekStartsWith('/')) {
|
||||||
this.capture('/');
|
this.capture('/');
|
||||||
}
|
}
|
||||||
var path = matchUrlSegment(this.remaining);
|
var path = matchUrlSegment(this._remaining);
|
||||||
this.capture(path);
|
this.capture(path);
|
||||||
|
|
||||||
var matrixParams = null;
|
var matrixParams = null;
|
||||||
|
@ -152,7 +152,7 @@ export class UrlParser {
|
||||||
var params = {};
|
var params = {};
|
||||||
this.capture('?');
|
this.capture('?');
|
||||||
this.parseParam(params);
|
this.parseParam(params);
|
||||||
while (this.remaining.length > 0 && this.peekStartsWith('&')) {
|
while (this._remaining.length > 0 && this.peekStartsWith('&')) {
|
||||||
this.capture('&');
|
this.capture('&');
|
||||||
this.parseParam(params);
|
this.parseParam(params);
|
||||||
}
|
}
|
||||||
|
@ -161,7 +161,7 @@ export class UrlParser {
|
||||||
|
|
||||||
parseMatrixParams(): StringMap<string, any> {
|
parseMatrixParams(): StringMap<string, any> {
|
||||||
var params = {};
|
var params = {};
|
||||||
while (this.remaining.length > 0 && this.peekStartsWith(';')) {
|
while (this._remaining.length > 0 && this.peekStartsWith(';')) {
|
||||||
this.capture(';');
|
this.capture(';');
|
||||||
this.parseParam(params);
|
this.parseParam(params);
|
||||||
}
|
}
|
||||||
|
@ -169,7 +169,7 @@ export class UrlParser {
|
||||||
}
|
}
|
||||||
|
|
||||||
parseParam(params: StringMap<string, any>): void {
|
parseParam(params: StringMap<string, any>): void {
|
||||||
var key = matchUrlSegment(this.remaining);
|
var key = matchUrlSegment(this._remaining);
|
||||||
if (isBlank(key)) {
|
if (isBlank(key)) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@ export class UrlParser {
|
||||||
var value: any = true;
|
var value: any = true;
|
||||||
if (this.peekStartsWith('=')) {
|
if (this.peekStartsWith('=')) {
|
||||||
this.capture('=');
|
this.capture('=');
|
||||||
var valueMatch = matchUrlSegment(this.remaining);
|
var valueMatch = matchUrlSegment(this._remaining);
|
||||||
if (isPresent(valueMatch)) {
|
if (isPresent(valueMatch)) {
|
||||||
value = valueMatch;
|
value = valueMatch;
|
||||||
this.capture(value);
|
this.capture(value);
|
||||||
|
@ -191,7 +191,7 @@ export class UrlParser {
|
||||||
var routes = [];
|
var routes = [];
|
||||||
this.capture('(');
|
this.capture('(');
|
||||||
|
|
||||||
while (!this.peekStartsWith(')') && this.remaining.length > 0) {
|
while (!this.peekStartsWith(')') && this._remaining.length > 0) {
|
||||||
routes.push(this.parseSegment());
|
routes.push(this.parseSegment());
|
||||||
if (this.peekStartsWith('//')) {
|
if (this.peekStartsWith('//')) {
|
||||||
this.capture('//');
|
this.capture('//');
|
||||||
|
|
|
@ -49,8 +49,8 @@ export function main() {
|
||||||
|
|
||||||
@Directive({selector: '[lifecycle-dir]', lifecycle: [LifecycleEvent.DoCheck]})
|
@Directive({selector: '[lifecycle-dir]', lifecycle: [LifecycleEvent.DoCheck]})
|
||||||
class LifecycleDir {
|
class LifecycleDir {
|
||||||
constructor(private log: Log) {}
|
constructor(private _log: Log) {}
|
||||||
doCheck() { this.log.add("child_doCheck"); }
|
doCheck() { this._log.add("child_doCheck"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({
|
@Component({
|
||||||
|
@ -69,21 +69,21 @@ class LifecycleDir {
|
||||||
@View({template: `<div lifecycle-dir></div>`, directives: [LifecycleDir]})
|
@View({template: `<div lifecycle-dir></div>`, directives: [LifecycleDir]})
|
||||||
class LifecycleCmp {
|
class LifecycleCmp {
|
||||||
field;
|
field;
|
||||||
constructor(private log: Log) {}
|
constructor(private _log: Log) {}
|
||||||
|
|
||||||
onChanges(_) { this.log.add("onChanges"); }
|
onChanges(_) { this._log.add("onChanges"); }
|
||||||
|
|
||||||
onInit() { this.log.add("onInit"); }
|
onInit() { this._log.add("onInit"); }
|
||||||
|
|
||||||
doCheck() { this.log.add("doCheck"); }
|
doCheck() { this._log.add("doCheck"); }
|
||||||
|
|
||||||
afterContentInit() { this.log.add("afterContentInit"); }
|
afterContentInit() { this._log.add("afterContentInit"); }
|
||||||
|
|
||||||
afterContentChecked() { this.log.add("afterContentChecked"); }
|
afterContentChecked() { this._log.add("afterContentChecked"); }
|
||||||
|
|
||||||
afterViewInit() { this.log.add("afterViewInit"); }
|
afterViewInit() { this._log.add("afterViewInit"); }
|
||||||
|
|
||||||
afterViewChecked() { this.log.add("afterViewChecked"); }
|
afterViewChecked() { this._log.add("afterViewChecked"); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({selector: 'my-comp'})
|
@Component({selector: 'my-comp'})
|
||||||
|
|
|
@ -217,16 +217,16 @@ export function main() {
|
||||||
}
|
}
|
||||||
|
|
||||||
export class MockStep implements CompileStep {
|
export class MockStep implements CompileStep {
|
||||||
constructor(private processElementClosure: Function,
|
constructor(private _processElementClosure: Function,
|
||||||
private processStyleClosure: Function = null) {}
|
private _processStyleClosure: Function = null) {}
|
||||||
processElement(parent: CompileElement, current: CompileElement, control: CompileControl) {
|
processElement(parent: CompileElement, current: CompileElement, control: CompileControl) {
|
||||||
if (isPresent(this.processElementClosure)) {
|
if (isPresent(this._processElementClosure)) {
|
||||||
this.processElementClosure(parent, current, control);
|
this._processElementClosure(parent, current, control);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
processStyle(style: string): string {
|
processStyle(style: string): string {
|
||||||
if (isPresent(this.processStyleClosure)) {
|
if (isPresent(this._processStyleClosure)) {
|
||||||
return this.processStyleClosure(style);
|
return this._processStyleClosure(style);
|
||||||
} else {
|
} else {
|
||||||
return style;
|
return style;
|
||||||
}
|
}
|
||||||
|
|
|
@ -33,9 +33,9 @@ class OrderItem {
|
||||||
|
|
||||||
class Order {
|
class Order {
|
||||||
constructor(public orderId: number, public customerName: string, public limit: number,
|
constructor(public orderId: number, public customerName: string, public limit: number,
|
||||||
private dataService: DataService) {}
|
private _dataService: DataService) {}
|
||||||
|
|
||||||
get items(): OrderItem[] { return this.dataService.itemsFor(this); }
|
get items(): OrderItem[] { return this._dataService.itemsFor(this); }
|
||||||
get total(): number { return this.items.map(i => i.total).reduce((a, b) => a + b); }
|
get total(): number { return this.items.map(i => i.total).reduce((a, b) => a + b); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -113,8 +113,8 @@ class DataService {
|
||||||
class OrderListComponent {
|
class OrderListComponent {
|
||||||
orders: Order[];
|
orders: Order[];
|
||||||
|
|
||||||
constructor(private service: DataService) { this.orders = service.orders; }
|
constructor(private _service: DataService) { this.orders = _service.orders; }
|
||||||
select(order: Order): void { this.service.currentOrder = order; }
|
select(order: Order): void { this._service.currentOrder = order; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -182,13 +182,13 @@ class OrderItemComponent {
|
||||||
directives: [FORM_DIRECTIVES, OrderItemComponent, NgFor, NgIf]
|
directives: [FORM_DIRECTIVES, OrderItemComponent, NgFor, NgIf]
|
||||||
})
|
})
|
||||||
class OrderDetailsComponent {
|
class OrderDetailsComponent {
|
||||||
constructor(private service: DataService) {}
|
constructor(private _service: DataService) {}
|
||||||
|
|
||||||
get order(): Order { return this.service.currentOrder; }
|
get order(): Order { return this._service.currentOrder; }
|
||||||
|
|
||||||
deleteItem(item: OrderItem): void { this.service.deleteItem(item); }
|
deleteItem(item: OrderItem): void { this._service.deleteItem(item); }
|
||||||
|
|
||||||
addItem(): void { this.service.addItemForOrder(this.order); }
|
addItem(): void { this._service.addItemForOrder(this.order); }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({selector: 'order-management-app', viewBindings: [DataService]})
|
@Component({selector: 'order-management-app', viewBindings: [DataService]})
|
||||||
|
|
|
@ -115,8 +115,8 @@ class DataService {
|
||||||
directives: [FORM_DIRECTIVES]
|
directives: [FORM_DIRECTIVES]
|
||||||
})
|
})
|
||||||
class FullNameComponent {
|
class FullNameComponent {
|
||||||
constructor(private service: DataService) {}
|
constructor(private _service: DataService) {}
|
||||||
get person(): Person { return this.service.currentPerson; }
|
get person(): Person { return this._service.currentPerson; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({selector: 'person-detail-cmp'})
|
@Component({selector: 'person-detail-cmp'})
|
||||||
|
@ -163,8 +163,8 @@ class FullNameComponent {
|
||||||
directives: [FORM_DIRECTIVES, NgIf]
|
directives: [FORM_DIRECTIVES, NgIf]
|
||||||
})
|
})
|
||||||
class PersonsDetailComponent {
|
class PersonsDetailComponent {
|
||||||
constructor(private service: DataService) {}
|
constructor(private _service: DataService) {}
|
||||||
get person(): Person { return this.service.currentPerson; }
|
get person(): Person { return this._service.currentPerson; }
|
||||||
}
|
}
|
||||||
|
|
||||||
@Component({selector: 'persons-cmp'})
|
@Component({selector: 'persons-cmp'})
|
||||||
|
@ -186,9 +186,9 @@ class PersonsDetailComponent {
|
||||||
class PersonsComponent {
|
class PersonsComponent {
|
||||||
persons: Person[];
|
persons: Person[];
|
||||||
|
|
||||||
constructor(private service: DataService) { this.persons = service.persons; }
|
constructor(private _service: DataService) { this.persons = _service.persons; }
|
||||||
|
|
||||||
select(person: Person): void { this.service.currentPerson = person; }
|
select(person: Person): void { this._service.currentPerson = person; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue