1
1
import { View } from 'ui/core/view' ;
2
2
3
- export interface TypeId {
4
- moduleName : string ;
5
- className : string ;
6
- }
7
-
8
3
export interface ViewClass {
9
4
new ( ) : View
10
5
}
11
6
12
- var elementMap : Map < string , TypeId > = new Map < string , TypeId > ( ) ;
7
+ export type ViewResolver = ( ) => ViewClass ;
8
+
9
+ var elementMap : Map < string , ViewResolver > = new Map < string , ViewResolver > ( ) ;
13
10
14
- export function registerElement ( elementName : string , typeId : TypeId ) : void {
11
+ export function registerElement ( elementName : string , resolver : ViewResolver ) : void {
15
12
if ( elementMap . has ( elementName ) ) {
16
13
throw new Error ( `Element for ${ elementName } already registered.` ) ;
17
14
} else {
18
- elementMap . set ( elementName , typeId ) ;
19
- elementMap . set ( elementName . toLowerCase ( ) , typeId ) ;
15
+ elementMap . set ( elementName , resolver ) ;
16
+ elementMap . set ( elementName . toLowerCase ( ) , resolver ) ;
20
17
}
21
18
}
22
19
23
20
export function getViewClass ( elementName : string ) : ViewClass {
24
- let typeId = elementMap . get ( elementName ) ||
21
+ const resolver = elementMap . get ( elementName ) ||
25
22
elementMap . get ( elementName . toLowerCase ( ) ) ;
26
- if ( ! typeId ) {
23
+ if ( ! resolver ) {
27
24
throw new TypeError ( `No known component for element ${ elementName } .` ) ;
28
25
}
29
26
try {
30
- let module = require ( typeId . moduleName ) ;
31
- return module [ typeId . className ] ;
27
+ return resolver ( ) ;
32
28
} catch ( e ) {
33
- throw new TypeError ( `Could not load type : ${ typeId . moduleName } . ${ typeId . className } .
29
+ throw new TypeError ( `Could not load view for : ${ elementName } .
34
30
35
31
${ e } `) ;
36
32
}
@@ -42,36 +38,36 @@ export function isKnownView(elementName: string): boolean {
42
38
}
43
39
44
40
//Register default NativeScript components
45
- registerElement ( "AbsoluteLayout" , { className : "AbsoluteLayout" , moduleName : "ui/layouts/absolute-layout" } ) ;
46
- registerElement ( "ActionBar" , { className : "ActionBar" , moduleName : "ui/action-bar" } ) ;
47
- registerElement ( "ActionItem" , { className : "ActionItem" , moduleName : "ui/action-bar" } ) ;
48
- registerElement ( "ActivityIndicator" , { className : "ActivityIndicator" , moduleName : "ui/activity-indicator" } ) ;
49
- registerElement ( "Border" , { className : "Border" , moduleName : "ui/border" } ) ;
50
- registerElement ( "Button" , { className : "Button" , moduleName : "ui/button" } ) ;
51
- registerElement ( "ContentView" , { className : "ContentView" , moduleName : "ui/content-view" } ) ;
52
- registerElement ( "DatePicker" , { className : "DatePicker" , moduleName : "ui/date-picker" } ) ;
53
- registerElement ( "DockLayout" , { className : "DockLayout" , moduleName : "ui/layouts/dock-layout" } ) ;
54
- registerElement ( "GridLayout" , { className : "GridLayout" , moduleName : "ui/layouts/grid-layout" } ) ;
55
- registerElement ( "HtmlView" , { className : "HtmlView" , moduleName : "ui/html-view" } ) ;
56
- registerElement ( "Image" , { className : "Image" , moduleName : "ui/image" } ) ;
41
+ registerElement ( "AbsoluteLayout" , ( ) => require ( "ui/layouts/absolute-layout" ) . AbsoluteLayout ) ;
42
+ registerElement ( "ActionBar" , ( ) => require ( "ui/action-bar" ) . ActionBar ) ;
43
+ registerElement ( "ActionItem" , ( ) => require ( "ui/action-bar" ) . ActionItem ) ;
44
+ registerElement ( "ActivityIndicator" , ( ) => require ( "ui/activity-indicator" ) . ActivityIndicator ) ;
45
+ registerElement ( "Border" , ( ) => require ( "ui/border" ) . Border ) ;
46
+ registerElement ( "Button" , ( ) => require ( "ui/button" ) . Button ) ;
47
+ registerElement ( "ContentView" , ( ) => require ( "ui/content-view" ) . ContentView ) ;
48
+ registerElement ( "DatePicker" , ( ) => require ( "ui/date-picker" ) . DatePicker ) ;
49
+ registerElement ( "DockLayout" , ( ) => require ( "ui/layouts/dock-layout" ) . DockLayout ) ;
50
+ registerElement ( "GridLayout" , ( ) => require ( "ui/layouts/grid-layout" ) . GridLayout ) ;
51
+ registerElement ( "HtmlView" , ( ) => require ( "ui/html-view" ) . HtmlView ) ;
52
+ registerElement ( "Image" , ( ) => require ( "ui/image" ) . Image ) ;
57
53
// Parse5 changes <Image> tags to <img>. WTF!
58
- registerElement ( "img" , { className : "Image" , moduleName : "ui/image" } ) ;
59
- registerElement ( "Label" , { className : "Label" , moduleName : "ui/label" } ) ;
60
- registerElement ( "ListPicker" , { className : "ListPicker" , moduleName : "ui/list-picker" } ) ;
61
- registerElement ( "ListView" , { className : "ListView" , moduleName : "ui/list-view" } ) ;
62
- registerElement ( "Page" , { className : "Page" , moduleName : "ui/page" } ) ;
63
- registerElement ( "Placeholder" , { className : "Placeholder" , moduleName : "ui/placeholder" } ) ;
64
- registerElement ( "Progress" , { className : "Progress" , moduleName : "ui/progress" } ) ;
65
- registerElement ( "Repeater" , { className : "Repeater" , moduleName : "ui/repeater" } ) ;
66
- registerElement ( "ScrollView" , { className : "ScrollView" , moduleName : "ui/scroll-view" } ) ;
67
- registerElement ( "SearchBar" , { className : "SearchBar" , moduleName : "ui/search-bar" } ) ;
68
- registerElement ( "SegmentedBar" , { className : "SegmentedBar" , moduleName : "ui/segmented-bar" } ) ;
69
- registerElement ( "Slider" , { className : "Slider" , moduleName : "ui/slider" } ) ;
70
- registerElement ( "StackLayout" , { className : "StackLayout" , moduleName : "ui/layouts/stack-layout" } ) ;
71
- registerElement ( "Switch" , { className : "Switch" , moduleName : "ui/switch" } ) ;
72
- registerElement ( "TabView" , { className : "TabView" , moduleName : "ui/tab-view" } ) ;
73
- registerElement ( "TextField" , { className : "TextField" , moduleName : "ui/text-field" } ) ;
74
- registerElement ( "TextView" , { className : "TextView" , moduleName : "ui/text-view" } ) ;
75
- registerElement ( "TimePicker" , { className : "TimePicker" , moduleName : "ui/time-picker" } ) ;
76
- registerElement ( "WebView" , { className : "WebView" , moduleName : "ui/web-view" } ) ;
77
- registerElement ( "WrapLayout" , { className : "WrapLayout" , moduleName : "ui/layouts/wrap-layout" } ) ;
54
+ registerElement ( "img" , ( ) => require ( "ui/image" ) . Image ) ;
55
+ registerElement ( "Label" , ( ) => require ( "ui/label" ) . Label ) ;
56
+ registerElement ( "ListPicker" , ( ) => require ( "ui/list-picker" ) . ListPicker ) ;
57
+ registerElement ( "ListView" , ( ) => require ( "ui/list-view" ) . ListView ) ;
58
+ registerElement ( "Page" , ( ) => require ( "ui/page" ) . Page ) ;
59
+ registerElement ( "Placeholder" , ( ) => require ( "ui/placeholder" ) . Placeholder ) ;
60
+ registerElement ( "Progress" , ( ) => require ( "ui/progress" ) . Progress ) ;
61
+ registerElement ( "Repeater" , ( ) => require ( "ui/repeater" ) . Repeater ) ;
62
+ registerElement ( "ScrollView" , ( ) => require ( "ui/scroll-view" ) . ScrollView ) ;
63
+ registerElement ( "SearchBar" , ( ) => require ( "ui/search-bar" ) . SearchBar ) ;
64
+ registerElement ( "SegmentedBar" , ( ) => require ( "ui/segmented-bar" ) . SegmentedBar ) ;
65
+ registerElement ( "Slider" , ( ) => require ( "ui/slider" ) . Slider ) ;
66
+ registerElement ( "StackLayout" , ( ) => require ( "ui/layouts/stack-layout" ) . StackLayout ) ;
67
+ registerElement ( "Switch" , ( ) => require ( "ui/switch" ) . Switch ) ;
68
+ registerElement ( "TabView" , ( ) => require ( "ui/tab-view" ) . TabView ) ;
69
+ registerElement ( "TextField" , ( ) => require ( "ui/text-field" ) . TextField ) ;
70
+ registerElement ( "TextView" , ( ) => require ( "ui/text-view" ) . TextView ) ;
71
+ registerElement ( "TimePicker" , ( ) => require ( "ui/time-picker" ) . TimePicker ) ;
72
+ registerElement ( "WebView" , ( ) => require ( "ui/web-view" ) . WebView ) ;
73
+ registerElement ( "WrapLayout" , ( ) => require ( "ui/layouts/wrap-layout" ) . WrapLayout ) ;
0 commit comments