@afeefa/vue-app 0.0.153 → 0.0.155
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.155
|
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 = 'auto'
|
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
|
}
|
@@ -35,10 +35,13 @@ export default class FlyingContextContainer extends Vue {
|
|
35
35
|
oldOverflowY = null
|
36
36
|
|
37
37
|
mounted () {
|
38
|
-
|
39
|
-
|
38
|
+
const mutationWatcher = new MutationObserver(this.domChanged)
|
39
|
+
mutationWatcher.observe(this.getChildrenContainer(), { childList: true })
|
40
40
|
|
41
41
|
window.addEventListener('mousedown', this.onClickOutside)
|
42
|
+
|
43
|
+
const sizeWatcher = new ResizeObserver(this.sizeChanged)
|
44
|
+
sizeWatcher.observe(this.getChildrenContainer())
|
42
45
|
}
|
43
46
|
|
44
47
|
getScrollbarWidth () {
|
@@ -57,6 +60,17 @@ export default class FlyingContextContainer extends Vue {
|
|
57
60
|
}
|
58
61
|
|
59
62
|
|
63
|
+
sizeChanged () {
|
64
|
+
if (this.visible) {
|
65
|
+
this.$nextTick(() => {
|
66
|
+
const scrollbarWidth = this.getScrollbarWidth()
|
67
|
+
const el = document.documentElement
|
68
|
+
const newSize = el.offsetWidth - this.$el.offsetWidth + scrollbarWidth
|
69
|
+
this.$el.style.left = newSize + 'px'
|
70
|
+
})
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
60
74
|
domChanged () {
|
61
75
|
const container = this.getChildrenContainer()
|
62
76
|
this.visible = !!container.children.length
|
@@ -71,6 +85,8 @@ export default class FlyingContextContainer extends Vue {
|
|
71
85
|
el.style.overflowY = 'hidden'
|
72
86
|
el.style.marginRight = scrollbarWidth + 'px'
|
73
87
|
}, 100)
|
88
|
+
|
89
|
+
this.$el.style.left = (el.offsetWidth - this.$el.offsetWidth + scrollbarWidth) + 'px'
|
74
90
|
} else {
|
75
91
|
el.style.overflowY = this.oldOverflowY
|
76
92
|
el.style.marginRight = 0
|
@@ -79,7 +95,10 @@ export default class FlyingContextContainer extends Vue {
|
|
79
95
|
|
80
96
|
hide () {
|
81
97
|
if (this.visible) {
|
82
|
-
this.$
|
98
|
+
this.$el.style.left = '101vw'
|
99
|
+
setTimeout(() => { // fade in then hide contents
|
100
|
+
this.$events.dispatch(new FlyingContextEvent(FlyingContextEvent.HIDE_ALL))
|
101
|
+
}, 200)
|
83
102
|
}
|
84
103
|
}
|
85
104
|
|
@@ -120,19 +139,19 @@ export default class FlyingContextContainer extends Vue {
|
|
120
139
|
#flyingContextContainer {
|
121
140
|
position: fixed;
|
122
141
|
z-index: 200;
|
123
|
-
right: 0;
|
124
142
|
height: 100%;
|
143
|
+
width: auto;
|
125
144
|
min-width: 400px;
|
126
145
|
max-width: calc(100vw - 100px);
|
127
146
|
top: 0;
|
128
147
|
background: white;
|
129
|
-
transition:
|
148
|
+
transition: left .2s;
|
130
149
|
padding: 2rem;
|
131
150
|
overflow-y: auto;
|
132
151
|
border-left: 1px solid rgba(0, 0, 0, .12);
|
133
152
|
|
134
153
|
&:not(.visible) {
|
135
|
-
|
154
|
+
left: 101vw;
|
136
155
|
}
|
137
156
|
|
138
157
|
.closeButton {
|