turbo_reflex 0.0.5 → 0.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +4 -3
- data/README.md +1 -6
- data/app/assets/builds/turbo_reflex.js +1 -1
- data/app/assets/builds/turbo_reflex.js.map +4 -4
- data/app/controllers/concerns/turbo_reflex/controller.rb +12 -108
- data/app/javascript/activity.js +20 -0
- data/app/javascript/delegates.js +27 -0
- data/app/javascript/drivers/form.js +12 -0
- data/app/javascript/drivers/frame.js +11 -0
- data/app/javascript/drivers/index.js +63 -0
- data/app/javascript/drivers/window.js +70 -0
- data/app/javascript/elements.js +29 -50
- data/app/javascript/index.js +72 -0
- data/app/javascript/lifecycle.js +40 -0
- data/app/javascript/logger.js +34 -0
- data/app/javascript/schema.js +6 -0
- data/app/javascript/turbo.js +24 -0
- data/app/javascript/urls.js +9 -0
- data/app/javascript/uuids.js +10 -0
- data/lib/turbo_reflex/base.rb +59 -9
- data/lib/turbo_reflex/engine.rb +2 -10
- data/lib/turbo_reflex/runner.rb +199 -0
- data/lib/turbo_reflex/version.rb +1 -1
- data/package.json +5 -4
- data/turbo_reflex.gemspec +1 -0
- data/yarn.lock +146 -155
- metadata +30 -11
- data/app/controllers/turbo_reflex/turbo_reflexes_controller.rb +0 -12
- data/app/helpers/turbo_reflex/turbo_reflex_helper.rb +0 -9
- data/app/javascript/event_registry.js +0 -34
- data/app/javascript/frame_sources.js +0 -28
- data/app/javascript/lifecycle_events.js +0 -24
- data/app/javascript/security.js +0 -7
- data/app/javascript/turbo_reflex.js +0 -111
- data/config/routes.rb +0 -5
- data/lib/turbo_reflex/errors.rb +0 -6
@@ -1,111 +0,0 @@
|
|
1
|
-
import './frame_sources'
|
2
|
-
import Security from './security'
|
3
|
-
import LifecycleEvents from './lifecycle_events'
|
4
|
-
import {
|
5
|
-
findClosestReflex,
|
6
|
-
findClosestFrame,
|
7
|
-
findFrameId,
|
8
|
-
findFrame,
|
9
|
-
findFrameSrc,
|
10
|
-
buildAttributePayload
|
11
|
-
} from './elements'
|
12
|
-
import {
|
13
|
-
registerEventListener,
|
14
|
-
registerEvent,
|
15
|
-
registeredEvents,
|
16
|
-
isRegisteredEvent,
|
17
|
-
logRegisteredEvents
|
18
|
-
} from './event_registry'
|
19
|
-
|
20
|
-
// fires before making a turbo HTTP request
|
21
|
-
addEventListener('turbo:before-fetch-request', event => {
|
22
|
-
const frame = event.target
|
23
|
-
const { turboReflexActive } = frame.dataset
|
24
|
-
if (!turboReflexActive) return
|
25
|
-
const { fetchOptions } = event.detail
|
26
|
-
fetchOptions.headers['Turbo-Reflex'] = Security.token
|
27
|
-
})
|
28
|
-
|
29
|
-
function buildURL (urlString) {
|
30
|
-
const a = document.createElement('a')
|
31
|
-
a.href = urlString
|
32
|
-
return new URL(a)
|
33
|
-
}
|
34
|
-
|
35
|
-
function invokeFormReflex (form, payload = {}) {
|
36
|
-
payload.token = Security.token
|
37
|
-
const input = document.createElement('input')
|
38
|
-
input.type = 'hidden'
|
39
|
-
input.name = 'turbo_reflex'
|
40
|
-
input.value = JSON.stringify(payload)
|
41
|
-
form.appendChild(input)
|
42
|
-
}
|
43
|
-
|
44
|
-
function invokeReflex (event) {
|
45
|
-
let element, frameId, frame, frameSrc
|
46
|
-
try {
|
47
|
-
element = findClosestReflex(event.target)
|
48
|
-
if (!element) return
|
49
|
-
|
50
|
-
if (!isRegisteredEvent(event.type, element.tagName)) return
|
51
|
-
|
52
|
-
LifecycleEvents.dispatch(LifecycleEvents.beforeStart, element, { element })
|
53
|
-
|
54
|
-
frameId = findFrameId(element)
|
55
|
-
if (!frameId) return
|
56
|
-
|
57
|
-
frame = findFrame(frameId)
|
58
|
-
if (!frame) return
|
59
|
-
|
60
|
-
frameSrc = findFrameSrc(frame)
|
61
|
-
if (!frameSrc) return
|
62
|
-
|
63
|
-
const payload = {
|
64
|
-
frameId: frameId,
|
65
|
-
element: buildAttributePayload(element)
|
66
|
-
}
|
67
|
-
|
68
|
-
LifecycleEvents.dispatch(LifecycleEvents.start, element, {
|
69
|
-
element,
|
70
|
-
frameId,
|
71
|
-
frame,
|
72
|
-
frameSrc,
|
73
|
-
payload
|
74
|
-
})
|
75
|
-
frame.dataset.turboReflexActive = true
|
76
|
-
frame.dataset.turboReflexElementId = element.id
|
77
|
-
|
78
|
-
if (element.tagName.toLowerCase() === 'form')
|
79
|
-
return invokeFormReflex(element, payload)
|
80
|
-
|
81
|
-
event.preventDefault()
|
82
|
-
const frameURL = buildURL(frameSrc)
|
83
|
-
frameURL.searchParams.set('turbo_reflex', JSON.stringify(payload))
|
84
|
-
frame.src = frameURL.toString()
|
85
|
-
} catch (error) {
|
86
|
-
console.error(
|
87
|
-
`TurboReflex encountered an unexpected error!`,
|
88
|
-
{ element, frameId, frame, frameSrc, target: event.target },
|
89
|
-
error
|
90
|
-
)
|
91
|
-
LifecycleEvents.dispatch(LifecycleEvents.error, element || document, {
|
92
|
-
element,
|
93
|
-
frameId,
|
94
|
-
frame,
|
95
|
-
frameSrc,
|
96
|
-
error
|
97
|
-
})
|
98
|
-
}
|
99
|
-
}
|
100
|
-
|
101
|
-
// wire things up and setup default events
|
102
|
-
registerEventListener(invokeReflex)
|
103
|
-
registerEvent('change', ['input', 'select', 'textarea'])
|
104
|
-
registerEvent('submit', ['form'])
|
105
|
-
registerEvent('click', ['*'])
|
106
|
-
|
107
|
-
export default {
|
108
|
-
registerEvent,
|
109
|
-
logRegisteredEvents,
|
110
|
-
logLifecycleEventNames: LifecycleEvents.logEventNames
|
111
|
-
}
|
data/config/routes.rb
DELETED