Skip to content

Commit f7138a0

Browse files
committed
Add tables
1 parent aca4aaf commit f7138a0

File tree

3 files changed

+84
-28
lines changed

3 files changed

+84
-28
lines changed

src/Flame/Native/Attribute/Internal.purs

-3
Original file line numberDiff line numberDiff line change
@@ -90,9 +90,6 @@ caseify name'
9090
id ToStringAttribute
9191
id = createProperty "id"
9292

93-
innerHtml ToStringAttribute
94-
innerHtml = createProperty "innerHTML"
95-
9693
alt ToStringAttribute
9794
alt = createProperty "alt"
9895

src/Flame/Native/Element.js

+53-25
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,28 @@
1-
import React, {createElement } from 'react';
1+
import {createElement } from 'react';
22
import { View, Text, Button, TextInput, StyleSheet, Image } from 'react-native';
33

4-
let textNode = 1,
5-
elementNode = 2,
6-
svgNode = 3,
7-
lazyNode = 5,
8-
managedNode = 6;
94
let styleData = 1,
105
classData = 2,
116
propertyData = 3,
127
attributeData = 4,
138
keyData = 7;
149

10+
let initialStyles = StyleSheet.create({
11+
hr: {
12+
borderBottomColor: 'black',
13+
borderBottomWidth: StyleSheet.hairlineWidth,
14+
},
15+
table : {
16+
flexDirection: 'column'
17+
},
18+
tr : {
19+
flexDirection: 'row',
20+
justifyContent: 'space-between'
21+
},
22+
b: {
23+
fontWeight: 'bold'
24+
}
25+
});
1526

1627
export function createViewNode(nodeData) {
1728
return function (children) {
@@ -24,28 +35,52 @@ export function createViewNode(nodeData) {
2435
export function createButtonNode(nodeData) {
2536
return function(children) {
2637
let props = fromNodeData(nodeData)
38+
props.title = children[0] ;
2739

28-
return createElement(Button, { title: children[0], ...props });
40+
return createElement(Button, props);
2941
}
3042
}
3143

32-
let initialHrStyle = {
33-
borderBottomColor: 'black',
34-
borderBottomWidth: StyleSheet.hairlineWidth,
35-
};
36-
3744
export function createHrNode(nodeData) {
3845
let props = fromNodeData(nodeData);
3946

4047
if (props.style === undefined)
41-
props.style = { ...initialHrStyle};
48+
props.style = [initialStyles.hr];
4249
else {
43-
props.style = { ...initialHrStyle, ...props.style };
50+
props.style = [initialStyles.hr, props.style];
4451
}
4552

4653
return createViewNode(nodeData)(undefined);
4754
}
4855

56+
export function createTableNode(nodeData) {
57+
return function(children) {
58+
let props = fromNodeData(nodeData);
59+
60+
if (props.style === undefined)
61+
props.style = [initialStyles.table];
62+
else {
63+
props.style = [initialStyles.table, props.style];
64+
}
65+
66+
return createElement(View, props, ...children);
67+
}
68+
}
69+
70+
export function createTrNode(nodeData) {
71+
return function(children) {
72+
let props = fromNodeData(nodeData);
73+
74+
if (props.style === undefined)
75+
props.style = [initialStyles.tr];
76+
else {
77+
props.style = [initialStyles.tr, props.style];
78+
}
79+
80+
return createElement(View, props, ...children);
81+
}
82+
}
83+
4984
export function createLabelNode(nodeData) {
5085
return function(children) {
5186
let props = fromNodeData(nodeData),
@@ -95,18 +130,14 @@ export function createANode(nodeData) {
95130
}
96131
}
97132

98-
let initialBStyle = {
99-
fontWeight: 'bold'
100-
};
101-
102133
export function createBNode(nodeData) {
103134
return function(children) {
104135
let props = fromNodeData(nodeData);
105136

106137
if (props.style === undefined)
107-
props.style = { ...initialBStyle};
138+
props.style = [initialStyles.b];
108139
else {
109-
props.style = { ...initialBStyle, ...props.style };
140+
props.style = [initialStyles.b, props.style];
110141
}
111142

112143
let propedChildren = [];
@@ -133,11 +164,9 @@ export function text(value) {
133164
}
134165

135166
function fromNodeData(allData) {
136-
let nodeData;
137-
138-
if (allData !== undefined) {
139-
nodeData = {};
167+
let nodeData = {};
140168

169+
if (allData !== undefined)
141170
for (let data of allData) {
142171
let dataOne = data[1];
143172
//[0] also always contain the data type
@@ -162,7 +191,6 @@ function fromNodeData(allData) {
162191
nodeData[dataOne] = data[2];
163192
}
164193
}
165-
}
166194

167195
return nodeData;
168196
}

src/Flame/Native/Element.purs

+31
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,10 @@ foreign import createBNode :: forall message. Array (NodeData message) -> Array
5454

5555
foreign import createLabelNode :: forall message. Array (NodeData message) -> Array (Html message) -> Html message
5656

57+
foreign import createTableNode :: forall message. Array (NodeData message) -> Array (Html message) -> Html message
58+
59+
foreign import createTrNode :: forall message. Array (NodeData message) -> Array (Html message) -> Html message
60+
5761
-- | Creates a text node
5862
foreign import text message. String Html message
5963

@@ -117,6 +121,33 @@ div' nodeData = createViewNode (toNode nodeData) []
117121
img a h. ToHtml' a h
118122
img nodeData = createImageNode (toNode nodeData)
119123

124+
table :: forall a b h. ToHtml a b h
125+
table nodeData children = createTableNode (toNode nodeData) $ toNode children
126+
127+
table_ :: forall b h. ToHtml_ b h
128+
table_ children = createTableNode [] $ toNode children
129+
130+
table' :: forall a h. ToHtml' a h
131+
table' nodeData = createTableNode (toNode nodeData) []
132+
133+
tr :: forall a b h. ToHtml a b h
134+
tr nodeData children = createTrNode (toNode nodeData) $ toNode children
135+
136+
tr_ :: forall b h. ToHtml_ b h
137+
tr_ children = createTrNode [] $ toNode children
138+
139+
tr' :: forall a h. ToHtml' a h
140+
tr' nodeData = createTrNode (toNode nodeData) []
141+
142+
td :: forall a b h. ToHtml a b h
143+
td nodeData children = createViewNode (toNode nodeData) $ toNode children
144+
145+
td_ :: forall b h. ToHtml_ b h
146+
td_ children = createViewNode [] $ toNode children
147+
148+
td' :: forall a h. ToHtml' a h
149+
td' nodeData = createViewNode (toNode nodeData) []
150+
120151
-- h1 ∷ ∀ a b h. ToHtml a b h
121152
-- h1 = createElement "h1"
122153

0 commit comments

Comments
 (0)