@@ -2,112 +2,203 @@ const Settings = require('../../../settings')
2
2
const Ontology = require ( '../../lib/Ontology' )
3
3
// const Assets = require('./models/assets')
4
4
// const LocalAsset = require('./models/localAsset')
5
- const Homepage = require ( './models/homepage' )
6
- const Subpage = require ( './models/subpage' )
7
5
8
- const Views = {
9
- homepage : require ( './views/homepage' ) ,
10
- subpages : require ( './views/subpages' )
11
- }
12
6
13
7
module . exports = ( { ontologies } ) => {
8
+ const Models = {
9
+ Homepage : require ( './models/homepage' ) ,
10
+ Subpage : require ( './models/subpage' )
11
+ }
12
+
14
13
const SubOntologies = {
15
- sense : ( entry ) => {
16
- if ( entry . type !== 'object' ) {
17
- return entry
18
- }
19
- const subOntology = ontologies . get ( entry . data . name . data )
20
- if ( ! subOntology ) {
21
- return entry
22
- }
23
- return new subOntology ( entry )
14
+ view : 'should it have a view?' ,
15
+
16
+ schema : ( entry ) => ( {
17
+ type : 'object' ,
18
+ data : {
19
+ name : ontologies . get
20
+ } ,
21
+ } ) ,
22
+
23
+ match : ( entry , _schema ) => {
24
+ const schema = _schema || SubOntologies . schema ( entry )
25
+ return Object . keys ( schema ) . every ( ( key ) => {
26
+ const expected = schema [ key ]
27
+ const actual = entry [ key ]
28
+ if ( typeof expected === 'string' ) {
29
+ return actual . data === expected
30
+ }
31
+ if ( expected instanceof RegExp ) {
32
+ console . log ( 'expected is regex' , entry , key )
33
+ return ! ! actual . data . match ( expected )
34
+ }
35
+ if ( expected instanceof Function ) {
36
+ return expected ( actual . data )
37
+ }
38
+ if ( typeof expected === 'object' ) {
39
+ console . log ( 'expected is object' , entry , key )
40
+ return SubOntologies . match ( actual , expected )
41
+ }
42
+ } )
24
43
} ,
25
44
26
45
reduce : ( model , entry ) => {
27
46
return model
47
+ if ( ! SubOntologies . match ( entry ) ) {
48
+ return model
49
+ }
50
+ const subOntology = ontologies . get ( entry . data . name . data )
28
51
return {
29
52
...model ,
30
- [ entry . name ] : entry . contentModel
53
+ [ entry . data . name . data ] : entry . contentModel
31
54
}
32
55
} ,
33
56
34
57
render : ( renderer , model ) => {
58
+ return Promise . resolve ( )
35
59
}
36
60
}
37
61
62
+ /*
63
+ * Organize Models together with their Views in a [modelName] folder?
64
+ * */
38
65
const HomepageCenter = {
39
- sense : ( entry ) => {
40
- if ( entry . type !== 'object' ) {
41
- return entry
42
- }
43
- if ( ! entry . data . format . data . match ( / ( m a r k d o w n | p l a i n t e x t | h y p e r t e x t | h a n d l e b a r s ) / ) ) {
44
- return entry
45
- }
46
- if ( ! entry . data . name . data . match ( / ( h o m e p a g e | h o m e | i n d e x ) / ) ) {
47
- return entry
48
- }
49
- return new Homepage ( entry )
66
+ view : require ( './views/homepage' ) ,
67
+
68
+ schema : ( entry ) => ( {
69
+ type : 'object' ,
70
+ data : {
71
+ name : / ( h o m e p a g e | h o m e | i n d e x ) / ,
72
+ format : / ( m a r k d o w n | p l a i n t e x t | h y p e r t e x t | h a n d l e b a r s ) / ,
73
+ } ,
74
+ } ) ,
75
+
76
+ match : ( entry , _schema ) => {
77
+ const schema = _schema || HomepageCenter . schema ( entry )
78
+ console . log ( 'HomepageCenter.match schema' , schema )
79
+ return Object . keys ( schema ) . every ( ( key ) => {
80
+ const expected = schema [ key ]
81
+ const actual = entry [ key ]
82
+ if ( typeof expected === 'string' ) {
83
+ console . log ( 'expected is string' , entry , key )
84
+ return ( actual . data || actual ) === expected
85
+ }
86
+ if ( expected instanceof RegExp ) {
87
+ console . log ( 'expected is regex' , entry , key )
88
+ return ! ! ( actual . data || actual ) . match ( expected )
89
+ }
90
+ if ( expected instanceof Function ) {
91
+ return expected ( actual . data || actual )
92
+ }
93
+ if ( key === 'data' ) {
94
+ console . log ( 'expected is object' , entry , key )
95
+ return HomepageCenter . match ( actual , expected )
96
+ }
97
+ } )
50
98
} ,
51
99
52
100
reduce : ( model , entry ) => {
53
- return {
101
+ console . log ( 'HomepageCenter.reduce' , model , entry )
102
+ if ( ! HomepageCenter . match ( entry ) ) {
103
+ console . log ( 'HomepageCenter other' )
104
+ return model
105
+ }
106
+ const homepage = new Models . Homepage ( entry )
107
+ console . log ( 'HomepageCenter homepage' , homepage )
108
+ const newModel = {
54
109
...model ,
55
- homepage : entry . contentModel . data
110
+ homepage : homepage . contentModel . data
56
111
}
112
+ console . log ( 'HomepageCenter newModel' , newModel )
113
+ return newModel
57
114
} ,
58
115
59
116
render : async ( renderer , model ) => {
60
- await Views . homepage ( renderer , model )
117
+ await HomepageCenter . view ( renderer , model )
61
118
}
62
119
}
63
120
121
+ /*
122
+ *
123
+ * Seeing if an interface emerges
124
+ * Will merge with their models under a renewed interface?
125
+ *
126
+ * */
64
127
const Subpages = {
65
- sense : ( entry ) => {
66
- if ( entry . type !== 'object' ) {
67
- return entry
68
- }
69
- if ( ! entry . data . format . data . match ( / ( m a r k d o w n | p l a i n t e x t | h y p e r t e x t | h a n d l e b a r s ) / ) ) {
70
- return entry
128
+ view : require ( './views/subpages' ) ,
129
+
130
+ schema : ( entry ) => ( {
131
+ type : 'object' ,
132
+ data : {
133
+ format : / ( m a r k d o w n | p l a i n t e x t | h y p e r t e x t | h a n d l e b a r s ) /
71
134
}
72
- return new Subpage ( entry )
135
+ } ) ,
136
+
137
+ match : ( entry , _schema ) => {
138
+ const schema = _schema || Subpages . schema ( entry )
139
+ console . log ( 'Subpages.match schema' , schema )
140
+ return Object . keys ( schema ) . every ( ( key ) => {
141
+ const expected = schema [ key ]
142
+ const actual = entry [ key ]
143
+ if ( typeof expected === 'string' ) {
144
+ console . log ( 'expected is string' , entry , key )
145
+ return ( actual . data || actual ) === expected
146
+ }
147
+ if ( expected instanceof RegExp ) {
148
+ console . log ( 'expected is regex' , entry , key )
149
+ return ! ! ( actual . data || actual ) . match ( expected )
150
+ }
151
+ if ( expected instanceof Function ) {
152
+ return expected ( actual . data || actual )
153
+ }
154
+ if ( key === 'data' ) {
155
+ console . log ( 'expected is object' , entry , key )
156
+ return Subpages . match ( actual , expected )
157
+ }
158
+ } )
73
159
} ,
74
160
75
161
reduce : ( model , entry ) => {
76
- return {
162
+ console . log ( 'Subpages.reduce' , model , entry )
163
+ if ( ! Subpages . match ( entry ) ) {
164
+ console . log ( 'Subpages other' )
165
+ return model
166
+ }
167
+ const subpage = new Models . Subpage ( entry )
168
+ console . log ( 'Subpages subpage' , subpage )
169
+ const newModel = {
77
170
...model ,
78
171
subpages : [
79
172
...( model . subpages || [ ] ) ,
80
- entry . contentModel . data
173
+ subpage . contentModel . data
81
174
]
82
175
}
176
+ console . log ( 'Subpages newModel' , newModel )
177
+ return newModel
83
178
} ,
84
179
85
180
render : async ( renderer , model ) => {
86
- await Views . subpages ( renderer , model )
181
+ console . log ( 'subpages.render contentModel' , model )
182
+ await Subpages . view ( renderer , model )
87
183
}
88
184
}
89
185
90
186
class Portal extends Ontology {
91
187
constructor ( contentTree ) {
92
188
super ( contentTree )
93
- // console.log('rootOntology portal')
94
189
this . contentModel = contentTree . tree . reduce ( ( model , entry ) => {
95
- const subOntology = SubOntologies . sense ( entry )
96
- if ( subOntology instanceof Ontology ) {
97
- console . log ( 'sensed subontology' )
98
- return SubOntologies . reduce ( model , subOntology )
99
- }
100
- const homepage = HomepageCenter . sense ( entry )
101
- if ( homepage instanceof Homepage ) {
102
- console . log ( 'sensed homepage' )
103
- return HomepageCenter . reduce ( model , homepage )
104
- }
105
- const subpage = Subpages . sense ( entry )
106
- if ( subpage instanceof Subpage ) {
107
- console . log ( 'sensed subpage' )
108
- return Subpages . reduce ( model , subpage )
109
- }
110
- return model
190
+ console . log ( 'portal.contentTree.reduce' , model , entry )
191
+
192
+ const maybeWithSubOntologies = SubOntologies . reduce ( model , entry )
193
+ console . log ( 'portal.contentTree.reduce withSubOntologies' , maybeWithSubOntologies , entry )
194
+
195
+ const maybeWithHomepage = HomepageCenter . reduce ( maybeWithSubOntologies , entry )
196
+ console . log ( 'portal.contentTree.reduce withHomepage' , maybeWithHomepage , entry )
197
+
198
+ const maybeWithSubpages = Subpages . reduce ( maybeWithHomepage , entry , entry )
199
+ console . log ( 'portal.contentTree.reduce withSubpages' , maybeWithSubpages )
200
+
201
+ return maybeWithSubpages
111
202
} , { } )
112
203
console . log ( 'portal.contentModel' , JSON . stringify ( this . contentModel , null , 2 ) )
113
204
}
0 commit comments