@afeefa/vue-app 0.0.152 → 0.0.154
Sign up to get free protection for your applications and to get access to all the features.
@@ -1 +1 @@
|
|
1
|
-
0.0.
|
1
|
+
0.0.154
|
package/package.json
CHANGED
@@ -13,7 +13,7 @@ import { randomCssClass } from '@a-vue/utils/random'
|
|
13
13
|
import { CancelOnEscMixin } from '@a-vue/services/escape/CancelOnEscMixin'
|
14
14
|
|
15
15
|
@Component({
|
16
|
-
props: [{show: false}, 'beforeClose']
|
16
|
+
props: [{show: false}, 'beforeClose', 'width']
|
17
17
|
})
|
18
18
|
export default class FlyingContext extends Mixins(CancelOnEscMixin) {
|
19
19
|
isVisible = false
|
@@ -43,7 +43,14 @@ export default class FlyingContext extends Mixins(CancelOnEscMixin) {
|
|
43
43
|
}
|
44
44
|
|
45
45
|
if (this.isVisible) {
|
46
|
-
const
|
46
|
+
const containerContainer = this.getFlyingContextContainer()
|
47
|
+
if (this.width) {
|
48
|
+
containerContainer.style.width = this.width
|
49
|
+
} else {
|
50
|
+
containerContainer.style.width = '50vw'
|
51
|
+
}
|
52
|
+
|
53
|
+
const container = this.getChildrenContainer()
|
47
54
|
container.appendChild(el)
|
48
55
|
this.coe_watchCancel() // show context -> watch esc
|
49
56
|
} else {
|
@@ -53,7 +60,7 @@ export default class FlyingContext extends Mixins(CancelOnEscMixin) {
|
|
53
60
|
}
|
54
61
|
|
55
62
|
destroyed () {
|
56
|
-
const container = this.
|
63
|
+
const container = this.getChildrenContainer()
|
57
64
|
const el = this.getContent()
|
58
65
|
if (container.contains(el)) {
|
59
66
|
container.removeChild(el)
|
@@ -87,7 +94,11 @@ export default class FlyingContext extends Mixins(CancelOnEscMixin) {
|
|
87
94
|
return document.querySelector('.' + this.contextId)
|
88
95
|
}
|
89
96
|
|
90
|
-
|
97
|
+
getFlyingContextContainer () {
|
98
|
+
return document.getElementById('flyingContextContainer')
|
99
|
+
}
|
100
|
+
|
101
|
+
getChildrenContainer () {
|
91
102
|
return document.getElementById('flyingContextContainer__children')
|
92
103
|
}
|
93
104
|
}
|
@@ -32,6 +32,7 @@ import { getZIndex } from 'vuetify/lib/util/helpers'
|
|
32
32
|
})
|
33
33
|
export default class FlyingContextContainer extends Vue {
|
34
34
|
visible = false
|
35
|
+
oldOverflowY = null
|
35
36
|
|
36
37
|
mounted () {
|
37
38
|
this.mutationWatcher = new MutationObserver(this.domChanged)
|
@@ -40,14 +41,42 @@ export default class FlyingContextContainer extends Vue {
|
|
40
41
|
window.addEventListener('mousedown', this.onClickOutside)
|
41
42
|
}
|
42
43
|
|
44
|
+
getScrollbarWidth () {
|
45
|
+
const el = document.documentElement
|
46
|
+
const overflowY = getComputedStyle(el)['overflow-y']
|
47
|
+
if (overflowY === 'scroll' || (overflowY === 'auto' && el.scrollHeight > el.clientHeight)) {
|
48
|
+
// measure scrollbar width https://stackoverflow.com/a/55278118
|
49
|
+
const scrollbox = document.createElement('div')
|
50
|
+
scrollbox.style.overflow = 'scroll'
|
51
|
+
document.body.appendChild(scrollbox)
|
52
|
+
const scrollBarWidth = scrollbox.offsetWidth - scrollbox.clientWidth
|
53
|
+
document.body.removeChild(scrollbox)
|
54
|
+
return scrollBarWidth
|
55
|
+
}
|
56
|
+
return 0
|
57
|
+
}
|
58
|
+
|
43
59
|
domChanged () {
|
44
60
|
const container = this.getChildrenContainer()
|
45
61
|
this.visible = !!container.children.length
|
46
62
|
|
63
|
+
const el = document.documentElement
|
64
|
+
|
47
65
|
if (this.visible) {
|
48
|
-
|
66
|
+
const style = getComputedStyle(el)
|
67
|
+
this.oldOverflowY = style.overflowY
|
68
|
+
const scrollbarWidth = this.getScrollbarWidth()
|
69
|
+
setTimeout(() => {
|
70
|
+
el.style.overflowY = 'hidden'
|
71
|
+
el.style.marginRight = scrollbarWidth + 'px'
|
72
|
+
}, 100)
|
73
|
+
|
74
|
+
this.$el.style.left = (el.offsetWidth - this.$el.offsetWidth + scrollbarWidth) + 'px'
|
49
75
|
} else {
|
50
|
-
|
76
|
+
el.style.overflowY = this.oldOverflowY
|
77
|
+
el.style.marginRight = 0
|
78
|
+
|
79
|
+
this.$el.style.left = '101vw'
|
51
80
|
}
|
52
81
|
}
|
53
82
|
|
@@ -94,19 +123,20 @@ export default class FlyingContextContainer extends Vue {
|
|
94
123
|
#flyingContextContainer {
|
95
124
|
position: fixed;
|
96
125
|
z-index: 200;
|
97
|
-
|
126
|
+
left: 50vw;
|
98
127
|
height: 100%;
|
128
|
+
width: 50vw;
|
99
129
|
min-width: 400px;
|
100
130
|
max-width: calc(100vw - 100px);
|
101
131
|
top: 0;
|
102
132
|
background: white;
|
103
|
-
transition:
|
133
|
+
transition: left .2s;
|
104
134
|
padding: 2rem;
|
105
135
|
overflow-y: auto;
|
106
136
|
border-left: 1px solid rgba(0, 0, 0, .12);
|
107
137
|
|
108
138
|
&:not(.visible) {
|
109
|
-
|
139
|
+
left: 101vw;
|
110
140
|
}
|
111
141
|
|
112
142
|
.closeButton {
|