Skip to content

Commit ccecaa7

Browse files
committed
Compile latest angular and migrate the renderer to the new interface.
1 parent b7c3aaf commit ccecaa7

File tree

3 files changed

+133
-12
lines changed

3 files changed

+133
-12
lines changed

src/nativescript-angular/application.ts

Lines changed: 92 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ import {Parse5DomAdapter} from 'angular2/src/dom/parse5_adapter';
1111
import {bootstrap as angularBootstrap} from 'angular2/src/core/application';
1212

1313

14-
type BindingList = List<Type | Binding | List<any>>;
14+
export type BindingList = List<Type | Binding | List<any>>;
1515

1616
export function nativeScriptBootstrap(appComponentType: Type,
1717
componentInjectableBindings: BindingList = null,
@@ -53,3 +53,94 @@ if (![].fill) {
5353
return O;
5454
};
5555
}
56+
57+
//if (!(<any>Array).from) {
58+
//(<any>Array).from = function (object) {
59+
//'use strict';
60+
//return [].slice.call(object);
61+
//};
62+
//}
63+
/*! https://mths.be/array-from v0.2.0 by @mathias */
64+
if (!(<any>Array).from) {
65+
(function() {
66+
'use strict';
67+
var defineProperty = (function() {
68+
// IE 8 only supports `Object.defineProperty` on DOM elements.
69+
try {
70+
var object = {};
71+
var $defineProperty = Object.defineProperty;
72+
var result = $defineProperty(object, <string>object, object) && $defineProperty;
73+
} catch(error) {}
74+
return result || function put(object, key, descriptor) {
75+
object[key] = descriptor.value;
76+
};
77+
}());
78+
var toStr = Object.prototype.toString;
79+
var isCallable = function(fn) {
80+
// In a perfect world, the `typeof` check would be sufficient. However,
81+
// in Chrome 1–12, `typeof /x/ == 'object'`, and in IE 6–8
82+
// `typeof alert == 'object'` and similar for other host objects.
83+
return typeof fn == 'function' || toStr.call(fn) == '[object Function]';
84+
};
85+
var toInteger = function(value) {
86+
var number = Number(value);
87+
if (isNaN(number)) {
88+
return 0;
89+
}
90+
if (number == 0 || !isFinite(number)) {
91+
return number;
92+
}
93+
return (number > 0 ? 1 : -1) * Math.floor(Math.abs(number));
94+
};
95+
var maxSafeInteger = Math.pow(2, 53) - 1;
96+
var toLength = function(value) {
97+
var len = toInteger(value);
98+
return Math.min(Math.max(len, 0), maxSafeInteger);
99+
};
100+
var from = function(arrayLike) {
101+
var C = this;
102+
if (arrayLike == null) {
103+
throw new TypeError('`Array.from` requires an array-like object, not `null` or `undefined`');
104+
}
105+
var items = Object(arrayLike);
106+
var mapping = arguments.length > 1;
107+
108+
var mapFn, T;
109+
if (arguments.length > 1) {
110+
mapFn = arguments[1];
111+
if (!isCallable(mapFn)) {
112+
throw new TypeError('When provided, the second argument to `Array.from` must be a function');
113+
}
114+
if (arguments.length > 2) {
115+
T = arguments[2];
116+
}
117+
}
118+
119+
var len = toLength(items.length);
120+
var A = isCallable(C) ? Object(new C(len)) : new Array(len);
121+
var k = 0;
122+
var kValue, mappedValue;
123+
while (k < len) {
124+
kValue = items[k];
125+
if (mapFn) {
126+
mappedValue = typeof T == 'undefined' ? mapFn(kValue, k) : mapFn.call(T, kValue, k);
127+
} else {
128+
mappedValue = kValue;
129+
}
130+
defineProperty(A, <string><any>k, {
131+
'value': mappedValue,
132+
'configurable': true,
133+
'enumerable': true
134+
});
135+
++k;
136+
}
137+
A.length = len;
138+
return A;
139+
};
140+
defineProperty(Array, 'from', {
141+
'value': from,
142+
'configurable': true,
143+
'writable': true
144+
});
145+
}());
146+
}

src/nativescript-angular/libjs.d.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,3 +18,31 @@ declare type ClassDecorator = <TFunction extends Function>(target: TFunction) =>
1818
declare type PropertyDecorator = (target: Object, propertyKey: string | symbol) => void;
1919
declare type MethodDecorator = <T>(target: Object, propertyKey: string | symbol, descriptor: TypedPropertyDescriptor<T>) => TypedPropertyDescriptor<T> | void;
2020
declare type ParameterDecorator = (target: Object, propertyKey: string | symbol, parameterIndex: number) => void;
21+
22+
//XMLHttpRequest-related
23+
interface FormData {
24+
append(name: any, value: any, blobName?: string): void;
25+
}
26+
27+
declare var FormData: {
28+
prototype: FormData;
29+
new(): FormData;
30+
}
31+
32+
interface Blob {
33+
size: number;
34+
type: string;
35+
msClose(): void;
36+
msDetachStream(): any;
37+
slice(start?: number, end?: number, contentType?: string): Blob;
38+
}
39+
40+
declare var Blob: {
41+
prototype: Blob;
42+
new (blobParts?: any[], options?: BlobPropertyBag): Blob;
43+
}
44+
45+
interface BlobPropertyBag {
46+
type?: string;
47+
endings?: string;
48+
}

src/nativescript-angular/renderer.ts

Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {View} from 'ui/core/view';
22
import {Injectable} from 'angular2/angular2';
33
import {MapWrapper} from 'angular2/src/facade/collection';
44
import {DomProtoView, resolveInternalDomProtoView} from 'angular2/src/render/dom/view/proto_view';
5-
import {Renderer, RenderProtoViewRef, RenderViewRef, EventDispatcher} from 'angular2/src/render/api';
5+
import {Renderer, RenderElementRef, RenderProtoViewRef, RenderViewRef, EventDispatcher} from 'angular2/src/render/api';
66
import {NG_BINDING_CLASS} from 'angular2/src/render/dom/util';
77
import {DOM} from 'angular2/src/dom/dom_adapter';
88
import {topmost} from 'ui/frame';
@@ -179,26 +179,28 @@ export class NativeScriptRenderer extends Renderer {
179179
// noop for now
180180
}
181181

182-
attachComponentView(hostViewRef: RenderViewRef, elementIndex: number,
183-
componentViewRef: RenderViewRef) {
182+
attachComponentView(location: RenderElementRef, componentViewRef: RenderViewRef) {
184183
console.log("NativeScriptRenderer.attachComponentView");
185-
var hostView = (<NativeScriptViewRef>hostViewRef).resolveView();
186-
var parent = hostView.boundElements[elementIndex];
184+
var hostView = (<NativeScriptViewRef>location.renderView).resolveView();
185+
var parent = hostView.boundElements[location.boundElementIndex];
187186
var componentView = (<NativeScriptViewRef>componentViewRef).resolveView();
188187
componentView.rootChildElements.forEach((child, index) => {
189188
parent.insertChildAt(index, child);
190189
});
191190
}
192191

193-
detachComponentView(hostViewRef: RenderViewRef, boundElementIndex: number, componentViewRef: RenderViewRef) {
192+
/**
193+
* Detaches a componentView into the given hostView at the given element
194+
*/
195+
detachComponentView(location: RenderElementRef, componentViewRef: RenderViewRef) {
194196
console.log("NativeScriptRenderer.detachComponentView ");
195197
}
196198

197-
attachViewInContainer(parentViewRef: RenderViewRef, boundElementIndex: number, atIndex: number, viewRef: RenderViewRef) {
199+
attachViewInContainer(location: RenderElementRef, atIndex: number, viewRef: RenderViewRef) {
198200
console.log("NativeScriptRenderer.attachViewInContainer ");
199201
}
200202

201-
detachViewInContainer(parentViewRef: RenderViewRef, boundElementIndex: number, atIndex: number, viewRef: RenderViewRef) {
203+
detachViewInContainer(location: RenderElementRef, atIndex: number, viewRef: RenderViewRef) {
202204
console.log("NativeScriptRenderer.detachViewInContainer ");
203205
}
204206

@@ -210,11 +212,11 @@ export class NativeScriptRenderer extends Renderer {
210212
console.log("NativeScriptRenderer.dehydrateView");
211213
}
212214

213-
setElementProperty(viewRef: RenderViewRef, elementIndex: number, propertyName: string, propertyValue: any) {
215+
setElementProperty(location: RenderElementRef, propertyName: string, propertyValue: any) {
214216
console.log("NativeScriptRenderer.setElementProperty " + propertyName + " = " + propertyValue);
215217

216-
var view = (<NativeScriptViewRef>viewRef).resolveView();
217-
var element = view.boundElements[elementIndex];
218+
var view = (<NativeScriptViewRef>location.renderView).resolveView();
219+
var element = view.boundElements[location.boundElementIndex];
218220
element.setProperty(propertyName, propertyValue);
219221
}
220222

0 commit comments

Comments
 (0)