@@ -26,7 +26,7 @@ function init(element) {
2626 }
2727}
2828
29- function render ( { source, element, data, key, index, currentIndex, update, remove } ) {
29+ async function render ( { source, element, data, key, index, currentIndex, update, remove } ) {
3030 if ( ! element ) {
3131 if ( source ) {
3232 element = queryElements ( { element : source , prefix : 'render' } )
@@ -110,7 +110,7 @@ function render({ source, element, data, key, index, currentIndex, update, remov
110110
111111 if ( ! clone ) return
112112
113- renderValues ( clone [ 1 ] , data ) ;
113+ await renderValues ( clone [ 1 ] , data ) ;
114114 if ( currentIndex >= 0 )
115115 insertElement ( renderedNode , clone [ 1 ] , index , currentIndex )
116116 }
@@ -124,13 +124,13 @@ function render({ source, element, data, key, index, currentIndex, update, remov
124124
125125 renderTemplate ( element [ i ] , data , key , index ) ;
126126 } else
127- renderValues ( element [ i ] , data ) ;
127+ await renderValues ( element [ i ] , data ) ;
128128
129129 }
130130
131131}
132132
133- function renderTemplate ( template , data , key , index , keyPath ) {
133+ async function renderTemplate ( template , data , key , index , keyPath ) {
134134 if ( ! key )
135135 key = template . getAttribute ( 'render' )
136136
@@ -212,7 +212,7 @@ function renderTemplate(template, data, key, index, keyPath) {
212212 clone . parentKey = renderedKey
213213 clone . renderKey = key
214214 clone . element . setAttribute ( 'renderedKey' , keys [ i ] )
215- renderValues ( clone . element , Data , keys [ i ] , renderAs ) ;
215+ await renderValues ( clone . element , Data , keys [ i ] , renderAs ) ;
216216 insertElement ( template , clone . element , index ) ;
217217
218218 }
@@ -227,7 +227,7 @@ function renderTemplate(template, data, key, index, keyPath) {
227227 if ( ! renderData ) {
228228 let clone = cloneTemplate ( template ) ;
229229 clone . keyPath = template . keyPath
230- renderValues ( clone . element , data , key , renderAs ) ;
230+ await renderValues ( clone . element , data , key , renderAs ) ;
231231 insertElement ( template , clone . element , index ) ;
232232 } else {
233233 if ( ! Array . isArray ( renderData ) )
@@ -245,7 +245,7 @@ function renderTemplate(template, data, key, index, keyPath) {
245245 } else
246246 object = renderData [ i ]
247247
248- renderValues ( clone . element , object , key , renderAs ) ;
248+ await renderValues ( clone . element , object , key , renderAs ) ;
249249 insertElement ( template , clone . element , index ) ;
250250 }
251251 }
@@ -314,7 +314,7 @@ function insertElement(template, element, index, currentIndex) {
314314 }
315315}
316316
317- function renderValues ( node , data , key , renderAs , keyPath , parent ) {
317+ async function renderValues ( node , data , key , renderAs , keyPath , parent ) {
318318 if ( ! data ) return ;
319319
320320 let renderedNode = renderedNodes . get ( node )
@@ -374,7 +374,8 @@ function renderValues(node, data, key, renderAs, keyPath, parent) {
374374 }
375375 }
376376
377- Array . from ( node . attributes ) . forEach ( attr => {
377+ // Array.from(node.attributes).forEach(attr => {
378+ for ( let attr of node . attributes ) {
378379 let name = attr . name ;
379380 let value = attr . value ;
380381
@@ -386,16 +387,16 @@ function renderValues(node, data, key, renderAs, keyPath, parent) {
386387 let namePlaceholder = renderedAttribute . placeholder . name || name ;
387388 let valuePlaceholder = renderedAttribute . placeholder . value || value ;
388389
389- name = renderValue ( attr , data , namePlaceholder , renderAs , renderedAttribute ) ;
390- value = renderValue ( attr , data , valuePlaceholder , renderAs , renderedAttribute ) ;
390+ name = await renderValue ( attr , data , namePlaceholder , renderAs , renderedAttribute ) ;
391+ value = await renderValue ( attr , data , valuePlaceholder , renderAs , renderedAttribute ) ;
391392
392393 if ( name === undefined && name === null ) {
393394 renderedNodes . delete ( attr )
394395 node . removeAttribute ( attr . name ) ;
395396 } else if ( ( value || value === "" ) && ( name !== attr . name || value !== attr . value ) )
396397 node . setAttribute ( name , value ) ;
397-
398- } ) ;
398+ }
399+ // });
399400
400401 if ( CoCreate . pass ) {
401402 if ( node . hasAttribute ( '[pass_id]' ) )
@@ -418,11 +419,14 @@ function renderValues(node, data, key, renderAs, keyPath, parent) {
418419 if ( node . getAttribute ( 'render' ) && ! node . hasAttribute ( 'render-clone' ) ) {
419420 renderTemplate ( node , data ) ;
420421 } else if ( node . childNodes . length > 0 ) {
421- Array . from ( node . childNodes ) . forEach ( childNode => {
422- renderValues ( childNode , data , key , renderAs , keyPath , parent ) ;
423- } ) ;
422+ // Array.from(node.childNodes).forEach(childNode => {
423+ for ( let childNode of node . childNodes ) {
424+ await renderValues ( childNode , data , key , renderAs , keyPath , parent ) ;
425+ }
426+ // });
424427 }
425428
429+
426430 } else if ( node . nodeType == 3 ) {
427431 let valueType = node . parentElement . getAttribute ( 'value-type' )
428432
@@ -435,7 +439,7 @@ function renderValues(node, data, key, renderAs, keyPath, parent) {
435439 return
436440 textContent = renderedNode . placeholder || node . textContent ;
437441
438- text = renderValue ( node , data , textContent , renderAs , renderedNode ) ;
442+ text = await renderValue ( node , data , textContent , renderAs , renderedNode ) ;
439443
440444 if ( text || text == "" ) {
441445 if ( text != renderedNode . text ) {
@@ -462,16 +466,18 @@ function renderValues(node, data, key, renderAs, keyPath, parent) {
462466 }
463467
464468 if ( node . childNodes . length > 0 ) {
465- Array . from ( node . childNodes ) . forEach ( childNode => {
466- renderValues ( childNode , data , key , renderAs , keyPath , parent ) ;
467- } ) ;
469+ // Array.from(node.childNodes).forEach(childNode => {
470+ for ( let childNode of node . childNodes ) {
471+ await renderValues ( childNode , data , key , renderAs , keyPath , parent ) ;
472+ }
473+ // });
468474 }
469475 }
470476 }
471477 }
472478}
473479
474- function renderValue ( node , data , placeholder , renderAs , renderedNode ) {
480+ async function renderValue ( node , data , placeholder , renderAs , renderedNode ) {
475481 let output = placeholder ;
476482
477483 if ( placeholder . match ( / { { ( .* ?) } } / ) ) {
@@ -481,13 +487,21 @@ function renderValue(node, data, placeholder, renderAs, renderedNode) {
481487
482488 let match
483489 do {
484- match = output . match ( / { { ( [ A - Z a - z 0 - 9 _ . , \[ \] \- ] * ) } } / ) ;
485-
490+ // match = output.match(/{{([A-Za-z0-9_.,\[\]\- ]*)}}/); // works by getting inner matches first
491+ // match = output.match(/{{([^}]*)} }/);
492+ match = output . match ( / { { ( .* ?) } } / ) ;
486493 if ( match ) {
487- if ( match [ 0 ] === '{{modified.keyPath}}' )
488- console . log ( '{{modified.keyPath}}' )
489-
490- let value = getRenderValue ( node , data , match [ 1 ] , renderAs )
494+ let value
495+ try {
496+ let Data = JSON . parse ( '{' + match [ 1 ] . replace ( / ' / g, '"' ) + '}' ) ;
497+ if ( Data . storage || Data . database || Data . array || Data . object || Data . index ) {
498+ Data . method = 'read.object'
499+ value = await CoCreate . crud . send ( Data )
500+ value = value . object [ 0 ] [ Data . key ]
501+ }
502+ } catch ( error ) {
503+ value = getRenderValue ( node , data , match [ 1 ] , renderAs )
504+ }
491505
492506 if ( value || value === "" ) {
493507 if ( typeof value === "object" )
@@ -503,6 +517,7 @@ function renderValue(node, data, placeholder, renderAs, renderedNode) {
503517 } else {
504518 match = null
505519 }
520+
506521 }
507522
508523 } while ( match )
0 commit comments