jails-js 6.0.1-beta.6 → 6.0.1-beta.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/src/component.ts CHANGED
@@ -14,6 +14,7 @@ export const Component = ({ name, module, dependencies, node, templates, signal
14
14
  const state = Object.assign({}, scope, model, initialState)
15
15
  const view = module.view? module.view : (data) => data
16
16
  let preserve = []
17
+ let tick
17
18
 
18
19
  const base = {
19
20
  name,
@@ -61,7 +62,6 @@ export const Component = ({ name, module, dependencies, node, templates, signal
61
62
  }
62
63
 
63
64
  const newstate = Object.assign({}, state, scope)
64
-
65
65
  render(newstate)
66
66
 
67
67
  return Promise.resolve(newstate)
@@ -101,6 +101,7 @@ export const Component = ({ name, module, dependencies, node, templates, signal
101
101
  }
102
102
  node.addEventListener(ev, selectorOrCallback.handler, { signal })
103
103
  }
104
+
104
105
  },
105
106
 
106
107
  off( ev, callback ) {
@@ -134,28 +135,28 @@ export const Component = ({ name, module, dependencies, node, templates, signal
134
135
  const clone = element.cloneNode()
135
136
  const html = html_? html_ : target
136
137
  clone.innerHTML = html
137
-
138
- rAF( _ => Idiomorph.morph(element, clone, IdiomorphOptions) )
138
+ Promise.resolve(() => Idiomorph.morph(element, clone, IdiomorphOptions))
139
139
  }
140
140
  }
141
141
 
142
142
  const render = ( data ) => {
143
-
144
- const html = tpl.render.call( view(data), node, safe, g )
145
- Idiomorph.morph( node, html, IdiomorphOptions(node) )
146
-
147
- rAF(() => {
148
- node.querySelectorAll('[tplid]')
149
- .forEach((element) => {
150
- if(!element.base) return
151
- element.base.state.protected().forEach( key => delete data[key] )
152
- element.base.state.set(data)
153
- })
154
- rAF(() => g.scope = {})
143
+ clearTimeout( tick )
144
+ tick = setTimeout(() => {
145
+ const html = tpl.render.call( view(data), node, safe, g )
146
+ Idiomorph.morph( node, html, IdiomorphOptions(node) )
147
+ Promise.resolve().then(() => {
148
+ node.querySelectorAll('[tplid]')
149
+ .forEach((element) => {
150
+ if(!element.base) return
151
+ element.base.state.protected().forEach( key => delete data[key] )
152
+ element.base.state.set(data)
153
+ })
154
+ Promise.resolve().then(() => g.scope = {})
155
+ })
155
156
  })
156
-
157
157
  }
158
158
 
159
+ render( state )
159
160
  node.base = base
160
161
  return module.default( base )
161
162
  }
package/src/element.ts CHANGED
@@ -3,7 +3,6 @@ import { Component } from './component'
3
3
  export const Element = ({ component, templates, start }) => {
4
4
 
5
5
  const { name, module, dependencies } = component
6
- const abortController = new AbortController()
7
6
 
8
7
  return class extends HTMLElement {
9
8
 
@@ -13,6 +12,8 @@ export const Element = ({ component, templates, start }) => {
13
12
 
14
13
  connectedCallback() {
15
14
 
15
+ this.abortController = new AbortController()
16
+
16
17
  if( !this.getAttribute('tplid') ) {
17
18
  start( this.parentNode )
18
19
  }
@@ -23,21 +24,21 @@ export const Element = ({ component, templates, start }) => {
23
24
  module,
24
25
  dependencies,
25
26
  templates,
26
- signal: abortController.signal
27
+ signal: this.abortController.signal
27
28
  })
28
29
 
29
30
  if ( rtrn && rtrn.constructor === Promise ) {
30
- rtrn.then(() => this.dispatchEvent( new CustomEvent(':mount') ))
31
+ rtrn.then(() => {
32
+ this.dispatchEvent( new CustomEvent(':mount') )
33
+ })
31
34
  } else {
32
35
  this.dispatchEvent( new CustomEvent(':mount') )
33
36
  }
34
-
35
- this.base.state.set({})
36
37
  }
37
38
 
38
39
  disconnectedCallback() {
39
40
  this.dispatchEvent( new CustomEvent(':unmount') )
40
- abortController.abort()
41
+ this.abortController.abort()
41
42
  delete this.base
42
43
  }
43
44
  }
@@ -12,7 +12,7 @@ export const templateConfig = (newconfig) => {
12
12
 
13
13
  export const template = ( target, { components }) => {
14
14
 
15
- tagElements( target, [...Object.keys( components ), 'template'] )
15
+ tagElements( target, [...Object.keys( components ), '[html-if]', 'template'] )
16
16
  const clone = target.cloneNode( true )
17
17
 
18
18
  transformTemplate( clone )
@@ -48,6 +48,9 @@ const tagElements = ( target, keys ) => {
48
48
  return tagElements( node.content, keys )
49
49
  }
50
50
  node.setAttribute('tplid', uuid())
51
+ if( node.getAttribute('html-if') && !node.id ) {
52
+ node.id = uuid()
53
+ }
51
54
  })
52
55
  }
53
56
 
@@ -102,7 +105,7 @@ const transformTemplate = ( clone ) => {
102
105
  if (htmlIf) {
103
106
  element.removeAttribute('html-if')
104
107
  const open = document.createTextNode(`%%_ if ( safe(function(){ return ${htmlIf} }) ){ _%%`)
105
- const close = document.createTextNode(`%%_ } _%%`)
108
+ const close = document.createTextNode(`%%_ } _%%`)
106
109
  wrap(open, element, close)
107
110
  }
108
111