turbo_reflex 0.0.30 → 0.0.31
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +6 -6
- data/README.md +5 -5
- data/app/assets/builds/turbo_reflex.js +3 -3
- data/app/assets/builds/turbo_reflex.js.map +3 -3
- data/app/javascript/drivers/window.js +4 -2
- data/app/javascript/events.js +7 -13
- data/app/javascript/index.js +36 -11
- data/app/javascript/lifecycle.js +4 -1
- data/app/javascript/state/index.js +3 -1
- data/app/javascript/state/observable.js +2 -2
- data/app/javascript/turbo.js +1 -1
- data/lib/turbo_reflex/engine.rb +1 -0
- data/lib/turbo_reflex/version.rb +1 -1
- data/package.json +1 -1
- data/tags +1045 -930
- data/yarn.lock +161 -161
- metadata +2 -2
@@ -7,7 +7,9 @@ import renderer from '../renderer'
|
|
7
7
|
|
8
8
|
function aborted (event) {
|
9
9
|
const xhr = event.target
|
10
|
-
dispatch(lifecycle.events.abort, document, {
|
10
|
+
dispatch(lifecycle.events.abort, document, {
|
11
|
+
detail: { ...event.detail, xhr }
|
12
|
+
})
|
11
13
|
}
|
12
14
|
|
13
15
|
function errored (event) {
|
@@ -22,7 +24,7 @@ function errored (event) {
|
|
22
24
|
dispatch(
|
23
25
|
lifecycle.events.clientError,
|
24
26
|
document,
|
25
|
-
{
|
27
|
+
{ detail: { ...event.detail, error, xhr } },
|
26
28
|
true
|
27
29
|
)
|
28
30
|
}
|
data/app/javascript/events.js
CHANGED
@@ -14,17 +14,11 @@ export const stateEvents = {
|
|
14
14
|
|
15
15
|
export const allEvents = { ...lifecycleEvents, ...stateEvents }
|
16
16
|
|
17
|
-
export function dispatch (name, target
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
})
|
25
|
-
target.dispatchEvent(event)
|
26
|
-
} catch (error) {
|
27
|
-
if (raise) throw error
|
28
|
-
dispatch(lifecycleEvents.clientError, target, { error, ...detail }, true)
|
29
|
-
}
|
17
|
+
export function dispatch (name, target, options = {}) {
|
18
|
+
options = options || {}
|
19
|
+
options.detail = options.detail || {}
|
20
|
+
target = target || document
|
21
|
+
const evt = new CustomEvent(name, { ...options, bubbles: true })
|
22
|
+
target.dispatchEvent(evt)
|
23
|
+
return evt
|
30
24
|
}
|
data/app/javascript/index.js
CHANGED
@@ -13,6 +13,16 @@ import state from './state'
|
|
13
13
|
import urls from './urls'
|
14
14
|
import uuids from './uuids'
|
15
15
|
|
16
|
+
function buildReflexPayload (id, element) {
|
17
|
+
return {
|
18
|
+
id, // reflex id
|
19
|
+
name: element.dataset.turboReflex, // reflex name
|
20
|
+
elementId: element.id.length > 0 ? element.id : null,
|
21
|
+
elementAttributes: elements.buildAttributePayload(element),
|
22
|
+
startedAt: new Date().getTime()
|
23
|
+
}
|
24
|
+
}
|
25
|
+
|
16
26
|
function invokeReflex (event) {
|
17
27
|
let element
|
18
28
|
let payload = {}
|
@@ -22,22 +32,38 @@ function invokeReflex (event) {
|
|
22
32
|
if (!element) return
|
23
33
|
if (!delegates.isRegisteredForElement(event.type, element)) return
|
24
34
|
|
25
|
-
const
|
35
|
+
const reflexId = `reflex-${uuids.v4()}`
|
36
|
+
let driver = drivers.find(element)
|
37
|
+
let payload = {
|
38
|
+
...buildReflexPayload(reflexId, element),
|
39
|
+
driver: driver.name,
|
40
|
+
frameId: driver.frame ? driver.frame.id : null,
|
41
|
+
src: driver.src
|
42
|
+
}
|
43
|
+
|
44
|
+
const startEvent = dispatch(lifecycle.events.start, element, {
|
45
|
+
cancelable: true,
|
46
|
+
detail: payload
|
47
|
+
})
|
48
|
+
|
49
|
+
if (startEvent.defaultPrevented)
|
50
|
+
return dispatch(lifecycle.events.abort, element, {
|
51
|
+
detail: {
|
52
|
+
message: `An event handler for '${lifecycle.events.start}' prevented default behavior and blocked reflex invocation!`,
|
53
|
+
source: startEvent
|
54
|
+
}
|
55
|
+
})
|
26
56
|
|
27
|
-
//
|
57
|
+
// the element and thus the driver may have changed based on the start event handler(s)
|
58
|
+
driver = drivers.find(element)
|
28
59
|
payload = {
|
29
|
-
|
30
|
-
name: element.dataset.turboReflex,
|
60
|
+
...buildReflexPayload(reflexId, element),
|
31
61
|
driver: driver.name,
|
32
|
-
src: driver.src,
|
33
62
|
frameId: driver.frame ? driver.frame.id : null,
|
34
|
-
|
35
|
-
elementAttributes: elements.buildAttributePayload(element),
|
36
|
-
startedAt: new Date().getTime()
|
63
|
+
src: driver.src
|
37
64
|
}
|
38
65
|
|
39
66
|
activity.add(payload)
|
40
|
-
dispatch(lifecycle.events.start, element, payload)
|
41
67
|
|
42
68
|
if (['frame', 'window'].includes(driver.name)) event.preventDefault()
|
43
69
|
|
@@ -56,8 +82,7 @@ function invokeReflex (event) {
|
|
56
82
|
}
|
57
83
|
} catch (error) {
|
58
84
|
dispatch(lifecycle.events.clientError, element, {
|
59
|
-
error
|
60
|
-
...payload
|
85
|
+
detail: { ...payload, error }
|
61
86
|
})
|
62
87
|
}
|
63
88
|
}
|
data/app/javascript/lifecycle.js
CHANGED
@@ -4,7 +4,10 @@ import { dispatch, lifecycleEvents as events } from './events'
|
|
4
4
|
function finish (event) {
|
5
5
|
event.detail.endedAt = new Date().getTime()
|
6
6
|
event.detail.milliseconds = event.detail.endedAt - event.detail.startedAt
|
7
|
-
setTimeout(
|
7
|
+
setTimeout(
|
8
|
+
() => dispatch(events.finish, event.target, { detail: event.detail }),
|
9
|
+
25
|
10
|
+
)
|
8
11
|
}
|
9
12
|
|
10
13
|
addEventListener(events.serverError, finish)
|
@@ -13,7 +13,9 @@ function loadState () {
|
|
13
13
|
loadedState = { ...currentState }
|
14
14
|
delete meta.element.dataset.clientStateChange
|
15
15
|
setTimeout(() =>
|
16
|
-
dispatch(events.stateLoad, meta.element, {
|
16
|
+
dispatch(events.stateLoad, meta.element, {
|
17
|
+
detail: { state: currentState }
|
18
|
+
})
|
17
19
|
)
|
18
20
|
}
|
19
21
|
|
@@ -9,13 +9,13 @@ function observable (object, parent = null) {
|
|
9
9
|
const proxy = new Proxy(object, {
|
10
10
|
deleteProperty (target, key) {
|
11
11
|
delete target[key]
|
12
|
-
dispatch(events.stateChange, meta.element, { state: head })
|
12
|
+
dispatch(events.stateChange, meta.element, { detail: { state: head } })
|
13
13
|
return true
|
14
14
|
},
|
15
15
|
|
16
16
|
set (target, key, value, receiver) {
|
17
17
|
target[key] = observable(value, this)
|
18
|
-
dispatch(events.stateChange, meta.element, { state: head })
|
18
|
+
dispatch(events.stateChange, meta.element, { detail: { state: head } })
|
19
19
|
return true
|
20
20
|
}
|
21
21
|
})
|
data/app/javascript/turbo.js
CHANGED
data/lib/turbo_reflex/engine.rb
CHANGED
data/lib/turbo_reflex/version.rb
CHANGED
data/package.json
CHANGED