reflex_behaviors 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +12 -7
- data/README.md +1 -1
- data/app/assets/builds/reflex_behaviors.js +133 -10
- data/app/assets/builds/reflex_behaviors.js.map +4 -4
- data/app/javascript/devtools/dom.js +34 -0
- data/app/javascript/devtools/elements/devtool_element.js +62 -0
- data/app/javascript/devtools/elements/supervisor_element.js +113 -0
- data/app/javascript/devtools/elements/tooltip_element.js +102 -0
- data/app/javascript/devtools/index.js +3 -115
- data/app/javascript/devtools/supervisor.js +83 -0
- data/app/javascript/devtools/toggle.js +150 -0
- data/app/javascript/elements/reflex_element.js +12 -0
- data/app/javascript/elements/toggle_trigger_element.js +41 -42
- data/app/javascript/index.js +1 -5
- data/lib/reflex_behaviors/engine.rb +0 -1
- data/lib/reflex_behaviors/version.rb +1 -1
- data/package.json +1 -1
- data/tags +1069 -853
- data/yarn.lock +138 -138
- metadata +8 -7
- data/app/assets/config/reflex_behaviors_manifest.js +0 -1
- data/app/assets/stylesheets/devtools.css +0 -51
- data/app/assets/stylesheets/reflex_behaviors.css +0 -4
- data/app/assets/stylesheets/toggle.css +0 -56
- data/app/assets/stylesheets/tooltip.css +0 -18
@@ -1,48 +1,27 @@
|
|
1
1
|
import ReflexElement from './reflex_element'
|
2
|
-
import
|
2
|
+
import DevtoolSupervisor from '../devtools/supervisor'
|
3
|
+
import ToggleDevtool from '../devtools/toggle'
|
3
4
|
|
4
5
|
export default class ToggleTriggerElement extends ReflexElement {
|
5
|
-
|
6
|
-
super()
|
7
|
-
|
8
|
-
this.addEventListener('mouseenter', event => {
|
9
|
-
if (devtools.isEnabled('toggle')) {
|
10
|
-
clearTimeout(this.mouseLeaveTimeout)
|
11
|
-
event.target.target.classList.add('debug')
|
12
|
-
event.target.showDebugTooltips()
|
13
|
-
}
|
14
|
-
})
|
6
|
+
connectedCallback () {
|
7
|
+
super.connectedCallback()
|
15
8
|
|
16
|
-
|
17
|
-
|
18
|
-
clearTimeout(this.mouseLeaveTimeout)
|
19
|
-
this.mouseLeaveTimeout = setTimeout(() => {
|
20
|
-
event.target.target.classList.remove('debug')
|
21
|
-
document
|
22
|
-
.querySelectorAll('.reflex-behaviors-tooltip')
|
23
|
-
.forEach(tooltip => tooltip.remove())
|
24
|
-
}, 250)
|
25
|
-
}
|
26
|
-
})
|
27
|
-
}
|
9
|
+
const mouseenter = () => this.devtool.show()
|
10
|
+
const mouseleave = () => this.devtool.hide()
|
28
11
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
let body = this.viewStack.map(path => {
|
34
|
-
shared = shared || path === sharedViewPath
|
35
|
-
return `<div class='${shared ? 'shared' : null}'>${path}<div>`
|
12
|
+
document.addEventListener('reflex-behaviors:devtools-start', () => {
|
13
|
+
this.devtool = new ToggleDevtool(this)
|
14
|
+
this.addEventListener('mouseenter', mouseenter)
|
15
|
+
this.addEventListener('mouseleave', mouseleave)
|
36
16
|
})
|
37
|
-
devtools.tooltip(this, title, body.join(''), 'trigger', 'top')
|
38
17
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
return `<div class='${shared ? 'shared' : null}'>${path}<div>`
|
18
|
+
document.addEventListener('reflex-behaviors:devtools-stop', () => {
|
19
|
+
this.removeEventListener('mouseenter', mouseenter)
|
20
|
+
this.removeEventListener('mouseleave', mouseleave)
|
21
|
+
delete this.devtool
|
44
22
|
})
|
45
|
-
|
23
|
+
|
24
|
+
DevtoolSupervisor.restart()
|
46
25
|
}
|
47
26
|
|
48
27
|
collapse () {
|
@@ -54,19 +33,38 @@ export default class ToggleTriggerElement extends ReflexElement {
|
|
54
33
|
}
|
55
34
|
}
|
56
35
|
|
57
|
-
get
|
58
|
-
|
59
|
-
|
36
|
+
get sharedViews () {
|
37
|
+
if (!this.target) return []
|
38
|
+
const reducer = (memo, view) => {
|
39
|
+
if (this.target.viewStack.includes(view)) memo.push(view)
|
40
|
+
return memo
|
41
|
+
}
|
42
|
+
return this.viewStack.reduce(reducer.bind(this), [])
|
60
43
|
}
|
61
44
|
|
62
|
-
get
|
63
|
-
|
45
|
+
get renderingInfo () {
|
46
|
+
if (!this.dataset.render) return {}
|
47
|
+
return JSON.parse(this.dataset.render)
|
48
|
+
}
|
49
|
+
|
50
|
+
get renderingPartial () {
|
51
|
+
return this.renderingInfo.partial
|
52
|
+
}
|
53
|
+
|
54
|
+
get renderingElement () {
|
55
|
+
const { id } = this.renderingInfo
|
56
|
+
if (!id) return null
|
57
|
+
return document.getElementById(id)
|
64
58
|
}
|
65
59
|
|
66
60
|
get expanded () {
|
67
61
|
return this.getAttribute('aria-expanded') === 'true'
|
68
62
|
}
|
69
63
|
|
64
|
+
get controls () {
|
65
|
+
return this.getAttribute('aria-controls')
|
66
|
+
}
|
67
|
+
|
70
68
|
get target () {
|
71
69
|
return document.getElementById(this.controls)
|
72
70
|
}
|
@@ -94,6 +92,7 @@ addEventListener(
|
|
94
92
|
)
|
95
93
|
|
96
94
|
addEventListener('click', event => {
|
95
|
+
if (event.target.tagName.match(/reflex-behaviors-devtool/i)) return
|
97
96
|
setTimeout(() => {
|
98
97
|
const selector =
|
99
98
|
'toggle-trigger[aria-controls][aria-expanded="true"][data-auto-collapse="true"]'
|
data/app/javascript/index.js
CHANGED
data/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "reflex_behaviors",
|
3
|
-
"version": "0.0.
|
3
|
+
"version": "0.0.3",
|
4
4
|
"description": "Pre-built easy to use reactive TurboReflex behaviors for Rails/Hotwire apps.",
|
5
5
|
"main": "app/javascript/index.js",
|
6
6
|
"repository": "https://github.com/hopsoft/reflex_behaviors",
|