uikit 3.11.2-dev.78e397546 → 3.11.2-dev.7dd548556
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.eslintrc.json +4 -49
- package/.prettierignore +14 -0
- package/.prettierrc.json +13 -0
- package/.webstorm.js +3 -3
- package/CHANGELOG.md +13 -2
- package/build/.eslintrc.json +1 -3
- package/build/build.js +26 -28
- package/build/icons.js +7 -11
- package/build/less.js +48 -36
- package/build/package.json +2 -2
- package/build/prefix.js +21 -18
- package/build/publishDev.js +6 -8
- package/build/release.js +20 -17
- package/build/scope.js +21 -11
- package/build/scss.js +72 -39
- package/build/util.js +71 -62
- package/build/wrapper/icons.js +0 -2
- package/dist/css/uikit-core-rtl.css +42 -17
- package/dist/css/uikit-core-rtl.min.css +1 -1
- package/dist/css/uikit-core.css +42 -17
- package/dist/css/uikit-core.min.css +1 -1
- package/dist/css/uikit-rtl.css +42 -17
- package/dist/css/uikit-rtl.min.css +1 -1
- package/dist/css/uikit.css +42 -17
- package/dist/css/uikit.min.css +1 -1
- package/dist/js/components/countdown.js +88 -133
- package/dist/js/components/countdown.min.js +1 -1
- package/dist/js/components/filter.js +409 -438
- package/dist/js/components/filter.min.js +1 -1
- package/dist/js/components/lightbox-panel.js +1116 -1305
- package/dist/js/components/lightbox-panel.min.js +1 -1
- package/dist/js/components/lightbox.js +1164 -1383
- package/dist/js/components/lightbox.min.js +1 -1
- package/dist/js/components/notification.js +94 -114
- package/dist/js/components/notification.min.js +1 -1
- package/dist/js/components/parallax.js +294 -345
- package/dist/js/components/parallax.min.js +1 -1
- package/dist/js/components/slider-parallax.js +292 -344
- package/dist/js/components/slider-parallax.min.js +1 -1
- package/dist/js/components/slider.js +724 -846
- package/dist/js/components/slider.min.js +1 -1
- package/dist/js/components/slideshow-parallax.js +292 -344
- package/dist/js/components/slideshow-parallax.min.js +1 -1
- package/dist/js/components/slideshow.js +615 -799
- package/dist/js/components/slideshow.min.js +1 -1
- package/dist/js/components/sortable.js +586 -617
- package/dist/js/components/sortable.min.js +1 -1
- package/dist/js/components/tooltip.js +324 -356
- package/dist/js/components/tooltip.min.js +1 -1
- package/dist/js/components/upload.js +150 -162
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +5286 -6612
- package/dist/js/uikit-core.min.js +1 -1
- package/dist/js/uikit-icons.js +7 -9
- package/dist/js/uikit-icons.min.js +1 -1
- package/dist/js/uikit.js +8110 -9879
- package/dist/js/uikit.min.js +1 -1
- package/jsconfig.json +1 -1
- package/package.json +64 -60
- package/src/js/api/boot.js +25 -32
- package/src/js/api/component.js +23 -27
- package/src/js/api/global.js +6 -12
- package/src/js/api/hooks.js +13 -32
- package/src/js/api/instance.js +7 -15
- package/src/js/api/state.js +80 -101
- package/src/js/components/countdown.js +23 -49
- package/src/js/components/filter.js +71 -66
- package/src/js/components/index.js +13 -13
- package/src/js/components/internal/lightbox-animations.js +11 -23
- package/src/js/components/internal/slider-transitioner.js +65 -44
- package/src/js/components/internal/slideshow-animations.js +42 -61
- package/src/js/components/lightbox-panel.js +135 -109
- package/src/js/components/lightbox.js +17 -38
- package/src/js/components/notification.js +49 -43
- package/src/js/components/parallax.js +16 -30
- package/src/js/components/slider-parallax.js +13 -23
- package/src/js/components/slider.js +73 -61
- package/src/js/components/slideshow-parallax.js +1 -1
- package/src/js/components/slideshow.js +8 -13
- package/src/js/components/sortable.js +121 -102
- package/src/js/components/tooltip.js +41 -31
- package/src/js/components/upload.js +52 -63
- package/src/js/core/accordion.js +54 -49
- package/src/js/core/alert.js +10 -17
- package/src/js/core/core.js +74 -53
- package/src/js/core/cover.js +11 -15
- package/src/js/core/drop.js +107 -93
- package/src/js/core/form-custom.js +20 -25
- package/src/js/core/gif.js +3 -7
- package/src/js/core/grid.js +57 -58
- package/src/js/core/height-match.js +15 -28
- package/src/js/core/height-viewport.js +28 -35
- package/src/js/core/icon.js +38 -50
- package/src/js/core/img.js +57 -58
- package/src/js/core/index.js +39 -39
- package/src/js/core/leader.js +9 -18
- package/src/js/core/margin.js +21 -37
- package/src/js/core/modal.js +50 -36
- package/src/js/core/nav.js +2 -4
- package/src/js/core/navbar.js +112 -84
- package/src/js/core/offcanvas.js +49 -53
- package/src/js/core/overflow-auto.js +13 -17
- package/src/js/core/responsive.js +14 -12
- package/src/js/core/scroll.js +10 -20
- package/src/js/core/scrollspy-nav.js +34 -31
- package/src/js/core/scrollspy.js +34 -51
- package/src/js/core/sticky.js +139 -94
- package/src/js/core/svg.js +60 -79
- package/src/js/core/switcher.js +47 -46
- package/src/js/core/tab.js +7 -10
- package/src/js/core/toggle.js +63 -65
- package/src/js/core/video.js +11 -22
- package/src/js/mixin/animate.js +19 -20
- package/src/js/mixin/class.js +2 -4
- package/src/js/mixin/container.js +7 -11
- package/src/js/mixin/internal/animate-fade.js +73 -30
- package/src/js/mixin/internal/animate-slide.js +61 -41
- package/src/js/mixin/internal/slideshow-animations.js +7 -14
- package/src/js/mixin/internal/slideshow-transitioner.js +10 -17
- package/src/js/mixin/media.js +5 -10
- package/src/js/mixin/modal.js +89 -66
- package/src/js/mixin/parallax.js +53 -48
- package/src/js/mixin/position.js +26 -20
- package/src/js/mixin/slider-autoplay.js +12 -21
- package/src/js/mixin/slider-drag.js +62 -63
- package/src/js/mixin/slider-nav.js +25 -34
- package/src/js/mixin/slider-reactive.js +2 -8
- package/src/js/mixin/slider.js +51 -50
- package/src/js/mixin/slideshow.js +13 -19
- package/src/js/mixin/togglable.js +90 -63
- package/src/js/uikit-core.js +2 -4
- package/src/js/uikit.js +2 -4
- package/src/js/util/ajax.js +27 -43
- package/src/js/util/animation.js +82 -75
- package/src/js/util/attr.js +9 -15
- package/src/js/util/class.js +14 -52
- package/src/js/util/dimensions.js +56 -43
- package/src/js/util/dom.js +36 -54
- package/src/js/util/env.js +7 -12
- package/src/js/util/event.js +60 -59
- package/src/js/util/fastdom.js +1 -6
- package/src/js/util/filter.js +17 -34
- package/src/js/util/index.js +0 -1
- package/src/js/util/lang.js +79 -119
- package/src/js/util/mouse.js +19 -17
- package/src/js/util/options.js +44 -49
- package/src/js/util/player.js +40 -36
- package/src/js/util/position.js +53 -45
- package/src/js/util/promise.js +0 -191
- package/src/js/util/selector.js +39 -48
- package/src/js/util/style.js +36 -46
- package/src/js/util/viewport.js +75 -64
- package/src/less/components/flex.less +0 -9
- package/src/less/components/navbar.less +0 -7
- package/src/less/components/utility.less +22 -0
- package/src/scss/components/flex.scss +0 -9
- package/src/scss/components/form.scss +3 -3
- package/src/scss/components/icon.scss +2 -2
- package/src/scss/components/navbar.scss +0 -7
- package/src/scss/components/search.scss +1 -1
- package/src/scss/components/utility.scss +22 -0
- package/src/scss/variables-theme.scss +6 -6
- package/src/scss/variables.scss +6 -6
- package/tests/js/index.js +114 -85
- package/tests/sticky-parallax.html +1 -1
- package/tests/sticky.html +14 -3
- package/src/js/mixin/flex-bug.js +0 -56
package/src/js/core/scrollspy.js
CHANGED
|
@@ -1,8 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
$$,
|
|
3
|
+
css,
|
|
4
|
+
filter,
|
|
5
|
+
data as getData,
|
|
6
|
+
isInView,
|
|
7
|
+
once,
|
|
8
|
+
removeClass,
|
|
9
|
+
removeClasses,
|
|
10
|
+
toggleClass,
|
|
11
|
+
trigger,
|
|
12
|
+
} from 'uikit-util';
|
|
2
13
|
|
|
3
14
|
const stateKey = '_ukScrollspy';
|
|
4
15
|
export default {
|
|
5
|
-
|
|
6
16
|
args: 'cls',
|
|
7
17
|
|
|
8
18
|
props: {
|
|
@@ -12,7 +22,7 @@ export default {
|
|
|
12
22
|
offsetTop: Number,
|
|
13
23
|
offsetLeft: Number,
|
|
14
24
|
repeat: Boolean,
|
|
15
|
-
delay: Number
|
|
25
|
+
delay: Number,
|
|
16
26
|
},
|
|
17
27
|
|
|
18
28
|
data: () => ({
|
|
@@ -23,14 +33,12 @@ export default {
|
|
|
23
33
|
offsetLeft: 0,
|
|
24
34
|
repeat: false,
|
|
25
35
|
delay: 0,
|
|
26
|
-
inViewClass: 'uk-scrollspy-inview'
|
|
36
|
+
inViewClass: 'uk-scrollspy-inview',
|
|
27
37
|
}),
|
|
28
38
|
|
|
29
39
|
computed: {
|
|
30
|
-
|
|
31
40
|
elements: {
|
|
32
|
-
|
|
33
|
-
get({target}, $el) {
|
|
41
|
+
get({ target }, $el) {
|
|
34
42
|
return target ? $$(target, $el) : [$el];
|
|
35
43
|
},
|
|
36
44
|
|
|
@@ -40,25 +48,20 @@ export default {
|
|
|
40
48
|
}
|
|
41
49
|
},
|
|
42
50
|
|
|
43
|
-
immediate: true
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
51
|
+
immediate: true,
|
|
52
|
+
},
|
|
47
53
|
},
|
|
48
54
|
|
|
49
55
|
disconnected() {
|
|
50
|
-
this.elements.forEach(el => {
|
|
56
|
+
this.elements.forEach((el) => {
|
|
51
57
|
removeClass(el, this.inViewClass, el[stateKey] ? el[stateKey].cls : '');
|
|
52
58
|
delete el[stateKey];
|
|
53
59
|
});
|
|
54
60
|
},
|
|
55
61
|
|
|
56
62
|
update: [
|
|
57
|
-
|
|
58
63
|
{
|
|
59
|
-
|
|
60
64
|
read(data) {
|
|
61
|
-
|
|
62
65
|
// Let child components be applied at least once first
|
|
63
66
|
if (!data.update) {
|
|
64
67
|
Promise.resolve().then(() => {
|
|
@@ -68,60 +71,43 @@ export default {
|
|
|
68
71
|
return false;
|
|
69
72
|
}
|
|
70
73
|
|
|
71
|
-
this.elements.forEach(el => {
|
|
72
|
-
|
|
74
|
+
this.elements.forEach((el) => {
|
|
73
75
|
if (!el[stateKey]) {
|
|
74
|
-
el[stateKey] = {cls: getData(el, 'uk-scrollspy-class') || this.cls};
|
|
76
|
+
el[stateKey] = { cls: getData(el, 'uk-scrollspy-class') || this.cls };
|
|
75
77
|
}
|
|
76
78
|
|
|
77
79
|
el[stateKey].show = isInView(el, this.offsetTop, this.offsetLeft);
|
|
78
|
-
|
|
79
80
|
});
|
|
80
|
-
|
|
81
81
|
},
|
|
82
82
|
|
|
83
83
|
write(data) {
|
|
84
|
-
|
|
85
|
-
this.elements.forEach(el => {
|
|
86
|
-
|
|
84
|
+
this.elements.forEach((el) => {
|
|
87
85
|
const state = el[stateKey];
|
|
88
86
|
|
|
89
87
|
if (state.show && !state.inview && !state.queued) {
|
|
90
|
-
|
|
91
88
|
state.queued = true;
|
|
92
89
|
|
|
93
|
-
data.promise = (data.promise || Promise.resolve())
|
|
94
|
-
new Promise(resolve =>
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
}, 300);
|
|
103
|
-
});
|
|
104
|
-
|
|
90
|
+
data.promise = (data.promise || Promise.resolve())
|
|
91
|
+
.then(() => new Promise((resolve) => setTimeout(resolve, this.delay)))
|
|
92
|
+
.then(() => {
|
|
93
|
+
this.toggle(el, true);
|
|
94
|
+
setTimeout(() => {
|
|
95
|
+
state.queued = false;
|
|
96
|
+
this.$emit();
|
|
97
|
+
}, 300);
|
|
98
|
+
});
|
|
105
99
|
} else if (!state.show && state.inview && !state.queued && this.repeat) {
|
|
106
|
-
|
|
107
100
|
this.toggle(el, false);
|
|
108
|
-
|
|
109
101
|
}
|
|
110
|
-
|
|
111
102
|
});
|
|
112
|
-
|
|
113
103
|
},
|
|
114
104
|
|
|
115
|
-
events: ['scroll', 'resize']
|
|
116
|
-
|
|
117
|
-
}
|
|
118
|
-
|
|
105
|
+
events: ['scroll', 'resize'],
|
|
106
|
+
},
|
|
119
107
|
],
|
|
120
108
|
|
|
121
109
|
methods: {
|
|
122
|
-
|
|
123
110
|
toggle(el, inview) {
|
|
124
|
-
|
|
125
111
|
const state = el[stateKey];
|
|
126
112
|
|
|
127
113
|
state.off && state.off();
|
|
@@ -142,9 +128,6 @@ export default {
|
|
|
142
128
|
state.inview = inview;
|
|
143
129
|
|
|
144
130
|
this.$update(el);
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
}
|
|
148
|
-
|
|
131
|
+
},
|
|
132
|
+
},
|
|
149
133
|
};
|
|
150
|
-
|
package/src/js/core/sticky.js
CHANGED
|
@@ -1,9 +1,37 @@
|
|
|
1
1
|
import Class from '../mixin/class';
|
|
2
2
|
import Media from '../mixin/media';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
$,
|
|
5
|
+
addClass,
|
|
6
|
+
after,
|
|
7
|
+
Animation,
|
|
8
|
+
clamp,
|
|
9
|
+
css,
|
|
10
|
+
dimensions,
|
|
11
|
+
fastdom,
|
|
12
|
+
height as getHeight,
|
|
13
|
+
getScrollingElement,
|
|
14
|
+
hasClass,
|
|
15
|
+
isNumeric,
|
|
16
|
+
isString,
|
|
17
|
+
isVisible,
|
|
18
|
+
noop,
|
|
19
|
+
offset,
|
|
20
|
+
offsetPosition,
|
|
21
|
+
parent,
|
|
22
|
+
query,
|
|
23
|
+
remove,
|
|
24
|
+
removeClass,
|
|
25
|
+
replaceClass,
|
|
26
|
+
scrollTop,
|
|
27
|
+
toFloat,
|
|
28
|
+
toggleClass,
|
|
29
|
+
toPx,
|
|
30
|
+
trigger,
|
|
31
|
+
within,
|
|
32
|
+
} from 'uikit-util';
|
|
4
33
|
|
|
5
34
|
export default {
|
|
6
|
-
|
|
7
35
|
mixins: [Class, Media],
|
|
8
36
|
|
|
9
37
|
props: {
|
|
@@ -19,7 +47,7 @@ export default {
|
|
|
19
47
|
selTarget: String,
|
|
20
48
|
widthElement: Boolean,
|
|
21
49
|
showOnUp: Boolean,
|
|
22
|
-
targetOffset: Number
|
|
50
|
+
targetOffset: Number,
|
|
23
51
|
},
|
|
24
52
|
|
|
25
53
|
data: {
|
|
@@ -35,12 +63,11 @@ export default {
|
|
|
35
63
|
selTarget: '',
|
|
36
64
|
widthElement: false,
|
|
37
65
|
showOnUp: false,
|
|
38
|
-
targetOffset: false
|
|
66
|
+
targetOffset: false,
|
|
39
67
|
},
|
|
40
68
|
|
|
41
69
|
computed: {
|
|
42
|
-
|
|
43
|
-
position({position}, $el) {
|
|
70
|
+
position({ position }, $el) {
|
|
44
71
|
return position === 'auto'
|
|
45
72
|
? (this.isFixed ? this.placeholder : $el).offsetHeight > getHeight(window)
|
|
46
73
|
? 'bottom'
|
|
@@ -48,23 +75,22 @@ export default {
|
|
|
48
75
|
: position;
|
|
49
76
|
},
|
|
50
77
|
|
|
51
|
-
offset({offset}, $el) {
|
|
78
|
+
offset({ offset }, $el) {
|
|
52
79
|
if (this.position === 'bottom') {
|
|
53
80
|
offset += '+100vh-100%';
|
|
54
81
|
}
|
|
55
82
|
return toPx(offset, 'height', $el);
|
|
56
83
|
},
|
|
57
84
|
|
|
58
|
-
selTarget({selTarget}, $el) {
|
|
59
|
-
return selTarget && $(selTarget, $el) || $el;
|
|
85
|
+
selTarget({ selTarget }, $el) {
|
|
86
|
+
return (selTarget && $(selTarget, $el)) || $el;
|
|
60
87
|
},
|
|
61
88
|
|
|
62
|
-
widthElement({widthElement}, $el) {
|
|
89
|
+
widthElement({ widthElement }, $el) {
|
|
63
90
|
return query(widthElement, $el) || this.placeholder;
|
|
64
91
|
},
|
|
65
92
|
|
|
66
93
|
isActive: {
|
|
67
|
-
|
|
68
94
|
get() {
|
|
69
95
|
return hasClass(this.selTarget, this.clsActive);
|
|
70
96
|
},
|
|
@@ -77,20 +103,19 @@ export default {
|
|
|
77
103
|
replaceClass(this.selTarget, this.clsActive, this.clsInactive);
|
|
78
104
|
trigger(this.$el, 'inactive');
|
|
79
105
|
}
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
}
|
|
83
|
-
|
|
106
|
+
},
|
|
107
|
+
},
|
|
84
108
|
},
|
|
85
109
|
|
|
86
110
|
connected() {
|
|
87
|
-
this.placeholder =
|
|
111
|
+
this.placeholder =
|
|
112
|
+
$('+ .uk-sticky-placeholder', this.$el) ||
|
|
113
|
+
$('<div class="uk-sticky-placeholder"></div>');
|
|
88
114
|
this.isFixed = false;
|
|
89
115
|
this.isActive = false;
|
|
90
116
|
},
|
|
91
117
|
|
|
92
118
|
disconnected() {
|
|
93
|
-
|
|
94
119
|
if (this.isFixed) {
|
|
95
120
|
this.hide();
|
|
96
121
|
removeClass(this.selTarget, this.clsInactive);
|
|
@@ -102,9 +127,7 @@ export default {
|
|
|
102
127
|
},
|
|
103
128
|
|
|
104
129
|
events: [
|
|
105
|
-
|
|
106
130
|
{
|
|
107
|
-
|
|
108
131
|
name: 'load hashchange popstate',
|
|
109
132
|
|
|
110
133
|
el() {
|
|
@@ -112,7 +135,6 @@ export default {
|
|
|
112
135
|
},
|
|
113
136
|
|
|
114
137
|
handler() {
|
|
115
|
-
|
|
116
138
|
if (!(this.targetOffset !== false && location.hash && scrollTop(window) > 0)) {
|
|
117
139
|
return;
|
|
118
140
|
}
|
|
@@ -121,43 +143,51 @@ export default {
|
|
|
121
143
|
|
|
122
144
|
if (target) {
|
|
123
145
|
fastdom.read(() => {
|
|
124
|
-
|
|
125
|
-
const {top} = offset(target);
|
|
146
|
+
const { top } = offset(target);
|
|
126
147
|
const elTop = offset(this.$el).top;
|
|
127
148
|
const elHeight = this.$el.offsetHeight;
|
|
128
149
|
|
|
129
|
-
if (
|
|
130
|
-
|
|
150
|
+
if (
|
|
151
|
+
this.isFixed &&
|
|
152
|
+
elTop + elHeight >= top &&
|
|
153
|
+
elTop <= top + target.offsetHeight
|
|
154
|
+
) {
|
|
155
|
+
scrollTop(
|
|
156
|
+
window,
|
|
157
|
+
top -
|
|
158
|
+
elHeight -
|
|
159
|
+
(isNumeric(this.targetOffset) ? this.targetOffset : 0) -
|
|
160
|
+
this.offset
|
|
161
|
+
);
|
|
131
162
|
}
|
|
132
|
-
|
|
133
163
|
});
|
|
134
164
|
}
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
}
|
|
139
|
-
|
|
165
|
+
},
|
|
166
|
+
},
|
|
140
167
|
],
|
|
141
168
|
|
|
142
169
|
update: [
|
|
143
|
-
|
|
144
170
|
{
|
|
145
|
-
|
|
146
|
-
read({height}, types) {
|
|
147
|
-
|
|
171
|
+
read({ height, margin }, types) {
|
|
148
172
|
this.inactive = !this.matchMedia || !isVisible(this.$el);
|
|
149
173
|
|
|
150
174
|
if (this.inactive) {
|
|
151
175
|
return false;
|
|
152
176
|
}
|
|
153
177
|
|
|
154
|
-
|
|
178
|
+
const hide = this.isActive && types.has('resize');
|
|
179
|
+
if (hide) {
|
|
155
180
|
this.hide();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (!this.isActive) {
|
|
156
184
|
height = this.$el.offsetHeight;
|
|
157
|
-
this
|
|
185
|
+
margin = css(this.$el, 'margin');
|
|
158
186
|
}
|
|
159
187
|
|
|
160
|
-
|
|
188
|
+
if (hide) {
|
|
189
|
+
this.show();
|
|
190
|
+
}
|
|
161
191
|
|
|
162
192
|
const overflow = Math.max(0, height + this.offset - getHeight(window));
|
|
163
193
|
|
|
@@ -166,7 +196,7 @@ export default {
|
|
|
166
196
|
const offsetParentTop = offset(referenceElement.offsetParent).top;
|
|
167
197
|
|
|
168
198
|
const top = parseProp(this.top, this.$el, topOffset);
|
|
169
|
-
const bottom = parseProp(this.bottom, this.$el, topOffset + height);
|
|
199
|
+
const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
|
|
170
200
|
|
|
171
201
|
const start = Math.max(top, topOffset) - this.offset;
|
|
172
202
|
const end = bottom
|
|
@@ -180,17 +210,17 @@ export default {
|
|
|
180
210
|
topOffset,
|
|
181
211
|
offsetParentTop,
|
|
182
212
|
height,
|
|
183
|
-
|
|
213
|
+
margin,
|
|
214
|
+
width: dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el)
|
|
215
|
+
.width,
|
|
184
216
|
top: offsetPosition(this.placeholder)[0],
|
|
185
|
-
margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])
|
|
186
217
|
};
|
|
187
218
|
},
|
|
188
219
|
|
|
189
|
-
write({height,
|
|
190
|
-
|
|
191
|
-
const {placeholder} = this;
|
|
220
|
+
write({ height, margin }) {
|
|
221
|
+
const { placeholder } = this;
|
|
192
222
|
|
|
193
|
-
css(placeholder,
|
|
223
|
+
css(placeholder, { height, margin });
|
|
194
224
|
|
|
195
225
|
if (!within(placeholder, document)) {
|
|
196
226
|
after(this.$el, placeholder);
|
|
@@ -198,17 +228,20 @@ export default {
|
|
|
198
228
|
}
|
|
199
229
|
|
|
200
230
|
this.isActive = !!this.isActive; // force self-assign
|
|
201
|
-
|
|
202
231
|
},
|
|
203
232
|
|
|
204
|
-
events: ['resize']
|
|
205
|
-
|
|
233
|
+
events: ['resize'],
|
|
206
234
|
},
|
|
207
235
|
|
|
208
236
|
{
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
237
|
+
read({
|
|
238
|
+
scroll: prevScroll = 0,
|
|
239
|
+
dir: prevDir = 'down',
|
|
240
|
+
overflow,
|
|
241
|
+
overflowScroll = 0,
|
|
242
|
+
start,
|
|
243
|
+
end,
|
|
244
|
+
}) {
|
|
212
245
|
const scroll = scrollTop(window);
|
|
213
246
|
const dir = prevScroll <= scroll ? 'down' : 'up';
|
|
214
247
|
|
|
@@ -218,21 +251,32 @@ export default {
|
|
|
218
251
|
scroll,
|
|
219
252
|
prevScroll,
|
|
220
253
|
overflowScroll: clamp(
|
|
221
|
-
overflowScroll
|
|
222
|
-
+ clamp(scroll, start, end)
|
|
223
|
-
- clamp(prevScroll, start, end),
|
|
254
|
+
overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
|
|
224
255
|
0,
|
|
225
256
|
overflow
|
|
226
|
-
)
|
|
257
|
+
),
|
|
227
258
|
};
|
|
228
259
|
},
|
|
229
260
|
|
|
230
261
|
write(data, types) {
|
|
231
|
-
|
|
232
262
|
const isScrollUpdate = types.has('scroll');
|
|
233
|
-
const {
|
|
263
|
+
const {
|
|
264
|
+
initTimestamp = 0,
|
|
265
|
+
dir,
|
|
266
|
+
prevDir,
|
|
267
|
+
scroll,
|
|
268
|
+
prevScroll = 0,
|
|
269
|
+
top,
|
|
270
|
+
start,
|
|
271
|
+
topOffset,
|
|
272
|
+
height,
|
|
273
|
+
} = data;
|
|
234
274
|
|
|
235
|
-
if (
|
|
275
|
+
if (
|
|
276
|
+
scroll < 0 ||
|
|
277
|
+
(scroll === prevScroll && isScrollUpdate) ||
|
|
278
|
+
(this.showOnUp && !isScrollUpdate && !this.isFixed)
|
|
279
|
+
) {
|
|
236
280
|
return;
|
|
237
281
|
}
|
|
238
282
|
|
|
@@ -242,17 +286,24 @@ export default {
|
|
|
242
286
|
data.initTimestamp = now;
|
|
243
287
|
}
|
|
244
288
|
|
|
245
|
-
if (
|
|
289
|
+
if (
|
|
290
|
+
this.showOnUp &&
|
|
291
|
+
!this.isFixed &&
|
|
292
|
+
Math.abs(data.initScroll - scroll) <= 30 &&
|
|
293
|
+
Math.abs(prevScroll - scroll) <= 10
|
|
294
|
+
) {
|
|
246
295
|
return;
|
|
247
296
|
}
|
|
248
297
|
|
|
249
|
-
if (
|
|
250
|
-
||
|
|
251
|
-
|
|
298
|
+
if (
|
|
299
|
+
this.inactive ||
|
|
300
|
+
scroll < start ||
|
|
301
|
+
(this.showOnUp &&
|
|
302
|
+
(scroll <= start ||
|
|
303
|
+
(dir === 'down' && isScrollUpdate) ||
|
|
304
|
+
(dir === 'up' && !this.isFixed && scroll <= topOffset + height)))
|
|
252
305
|
) {
|
|
253
|
-
|
|
254
306
|
if (!this.isFixed) {
|
|
255
|
-
|
|
256
307
|
if (Animation.inProgress(this.$el) && top > scroll) {
|
|
257
308
|
Animation.cancel(this.$el);
|
|
258
309
|
this.hide();
|
|
@@ -269,51 +320,47 @@ export default {
|
|
|
269
320
|
} else {
|
|
270
321
|
this.hide();
|
|
271
322
|
}
|
|
272
|
-
|
|
273
323
|
} else if (this.isFixed) {
|
|
274
|
-
|
|
275
324
|
this.update();
|
|
276
|
-
|
|
277
325
|
} else if (this.animation) {
|
|
278
|
-
|
|
279
326
|
Animation.cancel(this.$el);
|
|
280
327
|
this.show();
|
|
281
328
|
Animation.in(this.$el, this.animation).catch(noop);
|
|
282
|
-
|
|
283
329
|
} else {
|
|
284
330
|
this.show();
|
|
285
331
|
}
|
|
286
|
-
|
|
287
332
|
},
|
|
288
333
|
|
|
289
|
-
events: ['resize', 'scroll']
|
|
290
|
-
|
|
291
|
-
}
|
|
292
|
-
|
|
334
|
+
events: ['resize', 'scroll'],
|
|
335
|
+
},
|
|
293
336
|
],
|
|
294
337
|
|
|
295
338
|
methods: {
|
|
296
|
-
|
|
297
339
|
show() {
|
|
298
|
-
|
|
299
340
|
this.isFixed = true;
|
|
300
341
|
this.update();
|
|
301
342
|
this.placeholder.hidden = false;
|
|
302
|
-
|
|
303
343
|
},
|
|
304
344
|
|
|
305
345
|
hide() {
|
|
306
|
-
|
|
307
346
|
this.isActive = false;
|
|
308
347
|
removeClass(this.$el, this.clsFixed, this.clsBelow);
|
|
309
|
-
css(this.$el, {position: '', top: '', width: ''});
|
|
348
|
+
css(this.$el, { position: '', top: '', width: '' });
|
|
310
349
|
this.placeholder.hidden = true;
|
|
311
|
-
|
|
312
350
|
},
|
|
313
351
|
|
|
314
352
|
update() {
|
|
315
|
-
|
|
316
|
-
|
|
353
|
+
const {
|
|
354
|
+
width,
|
|
355
|
+
scroll = 0,
|
|
356
|
+
overflow,
|
|
357
|
+
overflowScroll = 0,
|
|
358
|
+
start,
|
|
359
|
+
end,
|
|
360
|
+
topOffset,
|
|
361
|
+
height,
|
|
362
|
+
offsetParentTop,
|
|
363
|
+
} = this._data;
|
|
317
364
|
const active = start !== 0 || scroll > start;
|
|
318
365
|
let top = this.offset;
|
|
319
366
|
let position = 'fixed';
|
|
@@ -330,32 +377,30 @@ export default {
|
|
|
330
377
|
css(this.$el, {
|
|
331
378
|
position,
|
|
332
379
|
top: `${top}px`,
|
|
333
|
-
width
|
|
380
|
+
width,
|
|
334
381
|
});
|
|
335
382
|
|
|
336
383
|
this.isActive = active;
|
|
337
384
|
toggleClass(this.$el, this.clsBelow, scroll > topOffset + height);
|
|
338
385
|
addClass(this.$el, this.clsFixed);
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
}
|
|
343
|
-
|
|
386
|
+
},
|
|
387
|
+
},
|
|
344
388
|
};
|
|
345
389
|
|
|
346
|
-
function parseProp(value, el, propOffset) {
|
|
347
|
-
|
|
390
|
+
function parseProp(value, el, propOffset, padding) {
|
|
348
391
|
if (!value) {
|
|
349
392
|
return 0;
|
|
350
393
|
}
|
|
351
394
|
|
|
352
395
|
if (isString(value) && value.match(/^-?\d/)) {
|
|
353
|
-
|
|
354
396
|
return propOffset + toPx(value);
|
|
355
|
-
|
|
356
397
|
} else {
|
|
357
|
-
|
|
358
|
-
return
|
|
359
|
-
|
|
398
|
+
const refElement = value === true ? parent(el) : query(value, el);
|
|
399
|
+
return (
|
|
400
|
+
offset(refElement).bottom -
|
|
401
|
+
(padding && refElement && within(el, refElement)
|
|
402
|
+
? toFloat(css(refElement, 'paddingBottom'))
|
|
403
|
+
: 0)
|
|
404
|
+
);
|
|
360
405
|
}
|
|
361
406
|
}
|