@@ -5,24 +5,28 @@ import {
5
5
RenderComponentType ,
6
6
RenderDebugInfo
7
7
} from 'angular2/src/core/render/api' ;
8
- import { APP_ROOT_VIEW } from "./platform-providers" ;
8
+ import { APP_ROOT_VIEW , DEVICE } from "./platform-providers" ;
9
9
import { isBlank } from 'angular2/src/facade/lang' ;
10
10
import { DOM } from 'angular2/src/platform/dom/dom_adapter' ;
11
11
import { COMPONENT_VARIABLE , CONTENT_ATTR } from 'angular2/src/platform/dom/dom_renderer' ;
12
12
import { View } from "ui/core/view" ;
13
13
import * as application from "application" ;
14
14
import { topmost } from 'ui/frame' ;
15
15
import { Page } from 'ui/page' ;
16
- import * as util from "./view-util" ;
16
+ import { traceLog , ViewUtil , NgView } from "./view-util" ;
17
17
import { escapeRegexSymbols } from "utils/utils" ;
18
+ import { Device } from "platform" ;
18
19
19
20
export { rendererTraceCategory } from "./view-util" ;
20
21
21
22
@Injectable ( )
22
23
export class NativeScriptRootRenderer implements RootRenderer {
23
24
private _rootView : View = null ;
24
- constructor ( @Optional ( ) @Inject ( APP_ROOT_VIEW ) rootView : View ) {
25
+ private _viewUtil : ViewUtil ;
26
+
27
+ constructor ( @Optional ( ) @Inject ( APP_ROOT_VIEW ) rootView : View , @Inject ( DEVICE ) device : Device ) {
25
28
this . _rootView = rootView ;
29
+ this . _viewUtil = new ViewUtil ( device ) ;
26
30
}
27
31
28
32
private _registeredComponents : Map < string , NativeScriptRenderer > = new Map < string , NativeScriptRenderer > ( ) ;
@@ -38,6 +42,10 @@ export class NativeScriptRootRenderer implements RootRenderer {
38
42
return < Page > this . rootView . page ;
39
43
}
40
44
45
+ public get viewUtil ( ) : ViewUtil {
46
+ return this . _viewUtil ;
47
+ }
48
+
41
49
renderComponent ( componentProto : RenderComponentType ) : Renderer {
42
50
var renderer = this . _registeredComponents . get ( componentProto . id ) ;
43
51
if ( isBlank ( renderer ) ) {
@@ -53,140 +61,145 @@ export class NativeScriptRenderer extends Renderer {
53
61
private componentProtoId : string ;
54
62
private hasComponentStyles : boolean ;
55
63
private rootRenderer : NativeScriptRootRenderer ;
64
+
65
+ private get viewUtil ( ) : ViewUtil {
66
+ return this . rootRenderer . viewUtil ;
67
+ }
68
+
56
69
constructor ( private _rootRenderer : NativeScriptRootRenderer , private componentProto : RenderComponentType ) {
57
70
super ( ) ;
58
71
this . rootRenderer = _rootRenderer ;
59
72
let page = this . rootRenderer . page ;
60
73
let stylesLength = componentProto . styles . length ;
61
74
this . componentProtoId = componentProto . id ;
62
- for ( let i = 0 ; i < stylesLength ; i ++ ) {
75
+ for ( let i = 0 ; i < stylesLength ; i ++ ) {
63
76
this . hasComponentStyles = true ;
64
77
let cssString = componentProto . styles [ i ] + "" ;
65
78
const realCSS = this . replaceNgAttribute ( cssString , this . componentProtoId ) ;
66
79
application . addCss ( realCSS ) ;
67
80
}
68
- util . traceLog ( 'NativeScriptRenderer created' ) ;
81
+ traceLog ( 'NativeScriptRenderer created' ) ;
69
82
}
70
83
71
84
private attrReplacer = new RegExp ( escapeRegexSymbols ( CONTENT_ATTR ) , "g" ) ;
72
85
private attrSanitizer = / - / g;
73
86
74
87
private replaceNgAttribute ( input : string , componentId : string ) : string {
75
88
return input . replace ( this . attrReplacer ,
76
- "_ng_content_" + componentId . replace ( this . attrSanitizer , "_" ) ) ;
89
+ "_ng_content_" + componentId . replace ( this . attrSanitizer , "_" ) ) ;
77
90
}
78
91
79
92
renderComponent ( componentProto : RenderComponentType ) : Renderer {
80
93
return this . _rootRenderer . renderComponent ( componentProto ) ;
81
94
}
82
95
83
- selectRootElement ( selector : string ) : util . NgView {
84
- util . traceLog ( 'selectRootElement: ' + selector ) ;
85
- const rootView = < util . NgView > < any > this . rootRenderer . rootView ;
96
+ selectRootElement ( selector : string ) : NgView {
97
+ traceLog ( 'selectRootElement: ' + selector ) ;
98
+ const rootView = < NgView > < any > this . rootRenderer . rootView ;
86
99
rootView . nodeName = 'ROOT' ;
87
100
return rootView ;
88
101
}
89
102
90
- createViewRoot ( hostElement : util . NgView ) : util . NgView {
91
- util . traceLog ( 'CREATE VIEW ROOT: ' + hostElement . nodeName ) ;
103
+ createViewRoot ( hostElement : NgView ) : NgView {
104
+ traceLog ( 'CREATE VIEW ROOT: ' + hostElement . nodeName ) ;
92
105
return hostElement ;
93
106
}
94
107
95
- projectNodes ( parentElement : util . NgView , nodes : util . NgView [ ] ) : void {
96
- util . traceLog ( 'NativeScriptRenderer.projectNodes' ) ;
108
+ projectNodes ( parentElement : NgView , nodes : NgView [ ] ) : void {
109
+ traceLog ( 'NativeScriptRenderer.projectNodes' ) ;
97
110
nodes . forEach ( ( node ) => {
98
- util . insertChild ( parentElement , node ) ;
111
+ this . viewUtil . insertChild ( parentElement , node ) ;
99
112
} ) ;
100
113
}
101
114
102
- attachViewAfter ( anchorNode : util . NgView , viewRootNodes : util . NgView [ ] ) {
103
- util . traceLog ( 'NativeScriptRenderer.attachViewAfter: ' + anchorNode . nodeName + ' ' + anchorNode ) ;
104
- const parent = ( < util . NgView > anchorNode . parent || anchorNode . templateParent ) ;
105
- const insertPosition = util . getChildIndex ( parent , anchorNode ) ;
115
+ attachViewAfter ( anchorNode : NgView , viewRootNodes : NgView [ ] ) {
116
+ traceLog ( 'NativeScriptRenderer.attachViewAfter: ' + anchorNode . nodeName + ' ' + anchorNode ) ;
117
+ const parent = ( < NgView > anchorNode . parent || anchorNode . templateParent ) ;
118
+ const insertPosition = this . viewUtil . getChildIndex ( parent , anchorNode ) ;
106
119
107
120
viewRootNodes . forEach ( ( node , index ) => {
108
121
const childIndex = insertPosition + index + 1 ;
109
- util . insertChild ( parent , node , childIndex ) ;
122
+ this . viewUtil . insertChild ( parent , node , childIndex ) ;
110
123
this . animateNodeEnter ( node ) ;
111
124
} ) ;
112
125
}
113
126
114
- detachView ( viewRootNodes : util . NgView [ ] ) {
115
- util . traceLog ( 'NativeScriptRenderer.detachView' ) ;
127
+ detachView ( viewRootNodes : NgView [ ] ) {
128
+ traceLog ( 'NativeScriptRenderer.detachView' ) ;
116
129
for ( var i = 0 ; i < viewRootNodes . length ; i ++ ) {
117
130
var node = viewRootNodes [ i ] ;
118
- util . removeChild ( < util . NgView > node . parent , node ) ;
131
+ this . viewUtil . removeChild ( < NgView > node . parent , node ) ;
119
132
this . animateNodeLeave ( node ) ;
120
133
}
121
134
}
122
135
123
- animateNodeEnter ( node : util . NgView ) {
136
+ animateNodeEnter ( node : NgView ) {
124
137
}
125
138
126
- animateNodeLeave ( node : util . NgView ) {
139
+ animateNodeLeave ( node : NgView ) {
127
140
}
128
141
129
- public destroyView ( hostElement : util . NgView , viewAllNodes : util . NgView [ ] ) {
130
- util . traceLog ( "NativeScriptRenderer.destroyView" ) ;
142
+ public destroyView ( hostElement : NgView , viewAllNodes : NgView [ ] ) {
143
+ traceLog ( "NativeScriptRenderer.destroyView" ) ;
131
144
// Seems to be called on component dispose only (router outlet)
132
145
//TODO: handle this when we resolve routing and navigation.
133
146
}
134
147
135
- setElementProperty ( renderElement : util . NgView , propertyName : string , propertyValue : any ) {
136
- util . traceLog ( "NativeScriptRenderer.setElementProperty " + renderElement + ': ' + propertyName + " = " + propertyValue ) ;
137
- util . setProperty ( renderElement , propertyName , propertyValue ) ;
148
+ setElementProperty ( renderElement : NgView , propertyName : string , propertyValue : any ) {
149
+ traceLog ( "NativeScriptRenderer.setElementProperty " + renderElement + ': ' + propertyName + " = " + propertyValue ) ;
150
+ this . viewUtil . setProperty ( renderElement , propertyName , propertyValue ) ;
138
151
}
139
152
140
- setElementAttribute ( renderElement : util . NgView , attributeName : string , attributeValue : string ) {
141
- util . traceLog ( "NativeScriptRenderer.setElementAttribute " + renderElement + ': ' + attributeName + " = " + attributeValue ) ;
153
+ setElementAttribute ( renderElement : NgView , attributeName : string , attributeValue : string ) {
154
+ traceLog ( "NativeScriptRenderer.setElementAttribute " + renderElement + ': ' + attributeName + " = " + attributeValue ) ;
142
155
return this . setElementProperty ( renderElement , attributeName , attributeValue ) ;
143
156
}
144
157
145
- setElementClass ( renderElement : util . NgView , className : string , isAdd : boolean ) : void {
146
- util . traceLog ( "NativeScriptRenderer.setElementClass " + className + " - " + isAdd ) ;
158
+ setElementClass ( renderElement : NgView , className : string , isAdd : boolean ) : void {
159
+ traceLog ( "NativeScriptRenderer.setElementClass " + className + " - " + isAdd ) ;
147
160
148
161
if ( isAdd ) {
149
- util . addClass ( renderElement , className ) ;
162
+ this . viewUtil . addClass ( renderElement , className ) ;
150
163
} else {
151
- util . removeClass ( renderElement , className ) ;
164
+ this . viewUtil . removeClass ( renderElement , className ) ;
152
165
}
153
166
}
154
167
155
- setElementStyle ( renderElement : util . NgView , styleName : string , styleValue : string ) : void {
156
- util . setStyleProperty ( renderElement , styleName , styleValue ) ;
168
+ setElementStyle ( renderElement : NgView , styleName : string , styleValue : string ) : void {
169
+ this . viewUtil . setStyleProperty ( renderElement , styleName , styleValue ) ;
157
170
}
158
171
159
172
/**
160
173
* Used only in debug mode to serialize property changes to comment nodes,
161
174
* such as <template> placeholders.
162
175
*/
163
- setBindingDebugInfo ( renderElement : util . NgView , propertyName : string , propertyValue : string ) : void {
164
- util . traceLog ( 'NativeScriptRenderer.setBindingDebugInfo: ' + renderElement + ', ' + propertyName + ' = ' + propertyValue ) ;
176
+ setBindingDebugInfo ( renderElement : NgView , propertyName : string , propertyValue : string ) : void {
177
+ traceLog ( 'NativeScriptRenderer.setBindingDebugInfo: ' + renderElement + ', ' + propertyName + ' = ' + propertyValue ) ;
165
178
}
166
179
167
180
setElementDebugInfo ( renderElement : any , info : RenderDebugInfo ) : void {
168
- util . traceLog ( 'NativeScriptRenderer.setElementDebugInfo: ' + renderElement ) ;
181
+ traceLog ( 'NativeScriptRenderer.setElementDebugInfo: ' + renderElement ) ;
169
182
}
170
183
171
184
/**
172
185
* Calls a method on an element.
173
186
*/
174
- invokeElementMethod ( renderElement : util . NgView , methodName : string , args : Array < any > ) {
175
- util . traceLog ( "NativeScriptRenderer.invokeElementMethod " + methodName + " " + args ) ;
187
+ invokeElementMethod ( renderElement : NgView , methodName : string , args : Array < any > ) {
188
+ traceLog ( "NativeScriptRenderer.invokeElementMethod " + methodName + " " + args ) ;
176
189
}
177
190
178
191
setText ( renderNode : any , text : string ) {
179
- util . traceLog ( "NativeScriptRenderer.setText" ) ;
192
+ traceLog ( "NativeScriptRenderer.setText" ) ;
180
193
}
181
194
182
- public createTemplateAnchor ( parentElement : util . NgView ) : util . NgView {
183
- util . traceLog ( 'NativeScriptRenderer.createTemplateAnchor' ) ;
184
- return util . createTemplateAnchor ( parentElement ) ;
195
+ public createTemplateAnchor ( parentElement : NgView ) : NgView {
196
+ traceLog ( 'NativeScriptRenderer.createTemplateAnchor' ) ;
197
+ return this . viewUtil . createTemplateAnchor ( parentElement ) ;
185
198
}
186
199
187
- public createElement ( parentElement : util . NgView , name : string ) : util . NgView {
188
- util . traceLog ( 'NativeScriptRenderer.createElement: ' + name + ' parent: ' + parentElement + ', ' + ( parentElement ? parentElement . nodeName : 'null' ) ) ;
189
- return util . createView ( name , parentElement , ( view ) => {
200
+ public createElement ( parentElement : NgView , name : string ) : NgView {
201
+ traceLog ( 'NativeScriptRenderer.createElement: ' + name + ' parent: ' + parentElement + ', ' + ( parentElement ? parentElement . nodeName : 'null' ) ) ;
202
+ return this . viewUtil . createView ( name , parentElement , ( view ) => {
190
203
// Set an attribute to the view to scope component-specific css.
191
204
// The property name is pre-generated by Angular.
192
205
if ( this . hasComponentStyles ) {
@@ -196,13 +209,13 @@ export class NativeScriptRenderer extends Renderer {
196
209
} ) ;
197
210
}
198
211
199
- public createText ( value : string ) : util . NgView {
200
- util . traceLog ( 'NativeScriptRenderer.createText' ) ;
201
- return util . createText ( value ) ; ;
212
+ public createText ( value : string ) : NgView {
213
+ traceLog ( 'NativeScriptRenderer.createText' ) ;
214
+ return this . viewUtil . createText ( value ) ; ;
202
215
}
203
216
204
- public listen ( renderElement : util . NgView , eventName : string , callback : Function ) : Function {
205
- util . traceLog ( 'NativeScriptRenderer.listen: ' + eventName ) ;
217
+ public listen ( renderElement : NgView , eventName : string , callback : Function ) : Function {
218
+ traceLog ( 'NativeScriptRenderer.listen: ' + eventName ) ;
206
219
let zonedCallback = ( < any > global ) . zone . bind ( callback ) ;
207
220
renderElement . on ( eventName , zonedCallback ) ;
208
221
return ( ) => renderElement . off ( eventName , zonedCallback ) ;
0 commit comments