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