@@ -24,10 +24,14 @@ function init(element) {
24
24
sources . set ( element [ i ] , { element : element [ i ] , selector } )
25
25
element [ i ] . setValue = ( data ) => {
26
26
// TODO: something to dertimine if its from crud. crudTpye, action??
27
- let index
28
- if ( data . filter && data . filter . index )
27
+ let index , update , remove
28
+ if ( data . filter && data . filter . index ) {
29
29
index = data . filter . index
30
- render ( { source : element [ i ] , data, index } )
30
+ update = data . filter . update
31
+ remove = data . filter . remove
32
+ }
33
+
34
+ render ( { source : element [ i ] , data, index, update, remove } )
31
35
}
32
36
element [ i ] . getValue = ( ) => sources . get ( element [ i ] ) . data
33
37
}
@@ -94,13 +98,13 @@ function renderTemplate(template, data, key, index, dotNotation) {
94
98
95
99
let Data = { [ renderKey ] : { key : keys [ i ] , value, type } }
96
100
97
- if ( ! template . keys . has ( Data [ renderKey ] . key ) ) {
98
- template . keys . set ( Data [ renderKey ] . key , Data )
99
- let clone = cloneTemplate ( template ) ;
100
- clone . setAttribute ( 'renderedKey' , Data [ renderKey ] . key )
101
- renderValues ( clone , Data , keys [ i ] , renderKey ) ;
102
- insertElement ( template , clone , index ) ;
103
- }
101
+ // if (!template.keys.has(Data[renderKey].key)) {
102
+ // template.keys.set(Data[renderKey].key, Data)
103
+ let clone = cloneTemplate ( template ) ;
104
+ clone . setAttribute ( 'renderedKey' , Data [ renderKey ] . key )
105
+ renderValues ( clone , Data , keys [ i ] , renderKey ) ;
106
+ insertElement ( template , clone , index ) ;
107
+ // }
104
108
105
109
}
106
110
} else {
@@ -120,16 +124,15 @@ function renderTemplate(template, data, key, index, dotNotation) {
120
124
renderData = [ renderData ]
121
125
122
126
renderData . forEach ( ( item ) => {
123
- if ( ! template . keys . has ( item ) ) {
124
- template . keys . set ( item , '' )
125
-
126
- let clone = cloneTemplate ( template ) ;
127
- let object = { [ renderKey ] : item }
128
- if ( renderKey . includes ( '.' ) )
129
- object = dotNotationToObject ( object ) ;
130
- renderValues ( clone , object , key , renderKey ) ;
131
- insertElement ( template , clone , index ) ;
132
- }
127
+ // if (!template.keys.has(item)) {
128
+ // template.keys.set(item, '')
129
+ let clone = cloneTemplate ( template ) ;
130
+ let object = { [ renderKey ] : item }
131
+ if ( renderKey . includes ( '.' ) )
132
+ object = dotNotationToObject ( object ) ;
133
+ renderValues ( clone , object , key , renderKey ) ;
134
+ insertElement ( template , clone , index ) ;
135
+ // }
133
136
} ) ;
134
137
}
135
138
}
@@ -164,7 +167,7 @@ function cloneTemplate(template) {
164
167
container . remove ( )
165
168
}
166
169
167
- renderedNodes . set ( clone , { template } )
170
+ renderedNodes . set ( clone , { template, element : clone } )
168
171
return clone ;
169
172
}
170
173
@@ -194,13 +197,8 @@ function insertElement(template, element, index) {
194
197
195
198
function renderValues ( node , data , key , renderKey ) {
196
199
if ( ! data ) return ;
197
- let isRenderKey
198
- // if (data.renderKey)
199
- // isRenderKey = true
200
200
201
- let updateData , renderedValue , placeholder ;
202
201
let renderedNode = renderedNodes . get ( node )
203
-
204
202
if ( ! renderedNode )
205
203
renderedNode = { key, renderKey }
206
204
@@ -222,6 +220,13 @@ function renderValues(node, data, key, renderKey) {
222
220
renderedNode . template . renderKeys . set ( renderKey , key )
223
221
renderedNode . dotNotation = key
224
222
223
+ // if (key == 'status')
224
+ // console.log('status')
225
+ // if (key == 'document.created.on')
226
+ // console.log('document.created.on')
227
+ // if (key == 'document.created.by')
228
+ // console.log('document.created.by')
229
+
225
230
if ( key . includes ( '.' ) ) {
226
231
let keys = key . split ( '.' )
227
232
for ( i = 0 ; i < keys . length ; i ++ ) {
@@ -234,58 +239,44 @@ function renderValues(node, data, key, renderKey) {
234
239
eid = data [ renderKey ] [ eid ]
235
240
if ( eid ) {
236
241
let oldEid = renderedNode . eid
237
- if ( oldEid !== eid ) {
238
- renderedNode . template . clones . delete ( oldEid )
242
+ let temp = renderedNode . template
243
+ if ( ! temp ) {
244
+ console . log ( 'temp could not be found' )
245
+ } else if ( ! temp . clones ) {
246
+ if ( temp . template )
247
+ temp = temp . template
248
+ else
249
+ console . log ( temp )
250
+
251
+ if ( oldEid && oldEid !== eid )
252
+ temp . clones . delete ( oldEid )
253
+
254
+ temp . clones . set ( eid , node )
239
255
}
240
256
241
257
renderedNode . eid = eid
242
- renderedNode . template . clones . set ( eid , node )
243
258
244
259
node . setAttribute ( 'eid' , eid )
245
- break
260
+ break ;
246
261
}
247
262
}
248
263
}
249
264
250
- if ( placeholder && ! isRenderKey ) {
251
- if ( key && Array . isArray ( data [ key ] ) )
252
- updateData = data [ key ] [ 0 ]
253
- else if ( data [ key ] )
254
- updateData = data [ key ]
255
-
256
- if ( renderKey ) {
257
- if ( updateData )
258
- updateData = { [ renderKey ] : updateData }
259
- else
260
- updateData = { [ renderKey ] : data }
261
- }
262
-
263
- let textContent = placeholder
264
- let text = renderValue ( node , updateData , textContent , renderKey , renderedNode ) ;
265
- if ( text && text != renderedValue )
266
- node . innerHTML = placeholder
267
- }
268
-
269
265
Array . from ( node . attributes ) . forEach ( attr => {
270
266
let name = attr . name ;
271
267
let value = attr . value ;
272
268
273
269
let renderedAttribute = renderedNodes . get ( attr )
274
270
if ( ! renderedAttribute ) {
275
271
renderedAttribute = { placeholder : { name, value } , key, renderKey }
276
- name = renderValue ( attr , data , name , renderKey , renderedAttribute ) ;
277
- value = renderValue ( attr , data , value , renderKey , renderedAttribute ) ;
278
- } else if ( ! isRenderKey && renderedAttribute . placeholder ) {
279
- let temp = renderedAttribute . placeholder
280
- if ( updateData ) {
281
- name = renderValue ( attr , updateData , temp . name , renderKey , renderedAttribute ) ;
282
- value = renderValue ( attr , updateData , temp . value , renderKey , renderedAttribute ) ;
283
- }
284
- } else {
285
- name = renderValue ( attr , data , name , renderKey , renderedAttribute ) ;
286
- value = renderValue ( attr , data , value , renderKey , renderedAttribute ) ;
287
272
}
288
273
274
+ let namePlaceholder = renderedAttribute . placeholder . name || name ;
275
+ let valuePlaceholder = renderedAttribute . placeholder . value || value ;
276
+
277
+ name = renderValue ( attr , data , namePlaceholder , renderKey , renderedAttribute ) ;
278
+ value = renderValue ( attr , data , valuePlaceholder , renderKey , renderedAttribute ) ;
279
+
289
280
if ( name === undefined && name === null ) {
290
281
renderedNodes . delete ( attr )
291
282
node . removeAttribute ( attr . name ) ;
@@ -316,34 +307,21 @@ function renderValues(node, data, key, renderKey) {
316
307
renderTemplate ( node , data ) ;
317
308
} else if ( node . childNodes . length > 0 ) {
318
309
Array . from ( node . childNodes ) . forEach ( childNode => {
319
- renderValues ( childNode , updateData || data , key , renderKey ) ;
310
+ renderValues ( childNode , data , key , renderKey ) ;
320
311
} ) ;
321
312
}
322
313
323
314
} else if ( node . nodeType == 3 ) {
324
315
let valueType = node . parentElement . getAttribute ( 'value-type' )
325
316
326
317
let textContent , text ;
327
- if ( placeholder && ! isRenderKey ) {
328
- let updateData = data ;
329
- textContent = placeholder
330
- if ( key && Array . isArray ( data [ key ] ) )
331
- updateData = data [ key ] [ 0 ]
332
- else
333
- updateData = data [ key ]
334
- if ( renderKey )
335
- updateData = { [ renderKey ] : updateData }
336
- text = renderValue ( node , updateData , textContent , renderKey , renderedNode ) ;
337
- }
338
318
339
- if ( ! placeholder && ! text ) {
340
- textContent = node . textContent ;
341
- renderedNode . placeholder = textContent
342
- text = renderValue ( node , data , textContent , renderKey , renderedNode ) ;
343
- }
319
+ textContent = renderedNode . placeholder || node . textContent ;
320
+ renderedNode . placeholder = textContent
321
+ text = renderValue ( node , data , textContent , renderKey , renderedNode ) ;
344
322
345
323
if ( text || text == "" ) {
346
- if ( text != renderedValue ) {
324
+ if ( text != renderedNode . text ) {
347
325
renderedNode . text = text
348
326
349
327
if ( valueType == 'text' || valueType == 'string' ) {
@@ -357,13 +335,13 @@ function renderValues(node, data, key, renderKey) {
357
335
if ( ! renderedParent ) {
358
336
renderedParent = { placeholder : textContent , key, renderKey }
359
337
}
360
- renderedParent . renderedValue = text
338
+ renderedParent . text = text
361
339
node . replaceWith ( ...newNode . childNodes )
362
340
}
363
341
364
342
if ( node . childNodes . length > 0 ) {
365
343
Array . from ( node . childNodes ) . forEach ( childNode => {
366
- renderValues ( childNode , updateData || data , key , renderKey ) ;
344
+ renderValues ( childNode , data , key , renderKey ) ;
367
345
} ) ;
368
346
}
369
347
}
@@ -384,8 +362,6 @@ function renderValue(node, data, placeholder, renderKey, renderedNode) {
384
362
match = output . match ( / { { ( [ A - Z a - z 0 - 9 _ . , \[ \] \- ] * ) } } / ) ;
385
363
386
364
if ( match ) {
387
- if ( match [ 1 ] == 'document.created.on' )
388
- console . log ( 'aaaaaa' )
389
365
390
366
let value = getRenderValue ( node , data , match [ 1 ] , renderKey )
391
367
@@ -419,13 +395,10 @@ function getRenderValue(node, data, key, renderKey) {
419
395
420
396
if ( parentTemplate ) {
421
397
do {
422
- if ( key == 'status' )
423
- console . log ( 'lllls' )
424
-
425
398
let parentNode = renderedNodes . get ( parentTemplate )
426
399
if ( parentNode ) {
427
400
if ( parentNode . template ) {
428
- let Data , parent = parentNode . parent || parentNode . template
401
+ let Data , eid , parent = parentNode . parent || parentNode . template
429
402
do {
430
403
if ( parent . source )
431
404
Data = parent . source . data
@@ -434,45 +407,35 @@ function getRenderValue(node, data, key, renderKey) {
434
407
else if ( parent . template )
435
408
parent = parent . template
436
409
410
+ if ( ! Data && parent && parent . eid )
411
+ eid = parent . eid
412
+
413
+
437
414
} while ( parent && ! Data )
438
- if ( key == 'status' )
439
- console . log ( 'lllls' , Data )
440
415
441
- let dotNotation = parentNode . dotNotation
442
- let renderedData = getValueFromObject ( Data , dotNotation ) ;
443
- if ( ! renderedData ) {
444
- value = getValueFromObject ( Data , key ) ;
445
- }
446
- if ( renderedData ) {
447
- if ( Array . isArray ( renderedData ) ) {
448
- const keysArray = Array . from ( parentNode . template . clones . keys ( ) ) ;
449
- const index = keysArray . indexOf ( parentNode . eid ) ;
450
- Data = { [ parentNode . renderKey ] : renderedData [ index ] }
451
- } else
452
- Data = { [ parentNode . renderKey ] : renderedData }
453
-
454
- let nodeData = renderedNodes . get ( node )
455
- if ( nodeData . key && nodeData . renderKey ) {
456
- Data = getValueFromObject ( Data , nodeData . key ) ;
457
- Data = { [ nodeData . renderKey ] : Data }
458
- }
416
+ value = getValueFromObject ( Data , key ) ;
417
+ if ( ! value && key . includes ( '.' ) ) {
418
+ let renderedData = getValueFromObject ( Data , key . split ( '.' ) [ 0 ] ) ;
419
+ if ( renderedData ) {
420
+ let index
421
+ if ( ! parent . clones . size )
422
+ index = 0
423
+ else
424
+ index = Array . from ( parent . clones . keys ( ) ) . indexOf ( eid ) ;
459
425
460
- value = getValueFromObject ( Data , key ) ;
461
- if ( value && renderKey && key . startsWidth ( `${ renderKey } .` ) )
462
- value = getValueFromObject ( { [ renderKey ] : value } , key ) ;
426
+ Data = { [ key . split ( '.' ) [ 0 ] ] : renderedData [ index ] }
427
+ value = getValueFromObject ( Data , key ) ;
463
428
464
- if ( ! value ) {
465
- value = getValueFromObject ( parentNode . template . source . data , key ) ;
466
429
}
430
+
467
431
}
468
432
}
469
433
}
470
434
471
435
if ( ! value && parentTemplate . parentElement )
472
436
parentTemplate = parentTemplate . parentElement . closest ( '[render]' )
473
- else {
437
+ else
474
438
parentTemplate = undefined
475
- }
476
439
477
440
} while ( ! value && parentTemplate )
478
441
}
0 commit comments