uikit 3.11.2-dev.19d26d0f9 → 3.11.2-dev.21a5b7139
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 +16 -1
- 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 +410 -437
- 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 +587 -616
- 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 +153 -161
- package/dist/js/components/upload.min.js +1 -1
- package/dist/js/uikit-core.js +5293 -6602
- 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 +8114 -9862
- 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 +46 -53
- 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 +10 -24
- 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 +151 -93
- 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 +6 -12
- 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 +44 -41
- package/tests/sticky.html +20 -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,12 +1,41 @@
|
|
|
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: {
|
|
38
|
+
position: String,
|
|
10
39
|
top: null,
|
|
11
40
|
bottom: Boolean,
|
|
12
41
|
offset: String,
|
|
@@ -18,10 +47,11 @@ export default {
|
|
|
18
47
|
selTarget: String,
|
|
19
48
|
widthElement: Boolean,
|
|
20
49
|
showOnUp: Boolean,
|
|
21
|
-
targetOffset: Number
|
|
50
|
+
targetOffset: Number,
|
|
22
51
|
},
|
|
23
52
|
|
|
24
53
|
data: {
|
|
54
|
+
position: 'top',
|
|
25
55
|
top: 0,
|
|
26
56
|
bottom: false,
|
|
27
57
|
offset: 0,
|
|
@@ -33,25 +63,34 @@ export default {
|
|
|
33
63
|
selTarget: '',
|
|
34
64
|
widthElement: false,
|
|
35
65
|
showOnUp: false,
|
|
36
|
-
targetOffset: false
|
|
66
|
+
targetOffset: false,
|
|
37
67
|
},
|
|
38
68
|
|
|
39
69
|
computed: {
|
|
70
|
+
position({ position }, $el) {
|
|
71
|
+
return position === 'auto'
|
|
72
|
+
? (this.isFixed ? this.placeholder : $el).offsetHeight > getHeight(window)
|
|
73
|
+
? 'bottom'
|
|
74
|
+
: 'top'
|
|
75
|
+
: position;
|
|
76
|
+
},
|
|
40
77
|
|
|
41
|
-
offset({offset}, $el) {
|
|
78
|
+
offset({ offset }, $el) {
|
|
79
|
+
if (this.position === 'bottom') {
|
|
80
|
+
offset += '+100vh-100%';
|
|
81
|
+
}
|
|
42
82
|
return toPx(offset, 'height', $el);
|
|
43
83
|
},
|
|
44
84
|
|
|
45
|
-
selTarget({selTarget}, $el) {
|
|
46
|
-
return selTarget && $(selTarget, $el) || $el;
|
|
85
|
+
selTarget({ selTarget }, $el) {
|
|
86
|
+
return (selTarget && $(selTarget, $el)) || $el;
|
|
47
87
|
},
|
|
48
88
|
|
|
49
|
-
widthElement({widthElement}, $el) {
|
|
89
|
+
widthElement({ widthElement }, $el) {
|
|
50
90
|
return query(widthElement, $el) || this.placeholder;
|
|
51
91
|
},
|
|
52
92
|
|
|
53
93
|
isActive: {
|
|
54
|
-
|
|
55
94
|
get() {
|
|
56
95
|
return hasClass(this.selTarget, this.clsActive);
|
|
57
96
|
},
|
|
@@ -64,20 +103,19 @@ export default {
|
|
|
64
103
|
replaceClass(this.selTarget, this.clsActive, this.clsInactive);
|
|
65
104
|
trigger(this.$el, 'inactive');
|
|
66
105
|
}
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
}
|
|
70
|
-
|
|
106
|
+
},
|
|
107
|
+
},
|
|
71
108
|
},
|
|
72
109
|
|
|
73
110
|
connected() {
|
|
74
|
-
this.placeholder =
|
|
111
|
+
this.placeholder =
|
|
112
|
+
$('+ .uk-sticky-placeholder', this.$el) ||
|
|
113
|
+
$('<div class="uk-sticky-placeholder"></div>');
|
|
75
114
|
this.isFixed = false;
|
|
76
115
|
this.isActive = false;
|
|
77
116
|
},
|
|
78
117
|
|
|
79
118
|
disconnected() {
|
|
80
|
-
|
|
81
119
|
if (this.isFixed) {
|
|
82
120
|
this.hide();
|
|
83
121
|
removeClass(this.selTarget, this.clsInactive);
|
|
@@ -89,9 +127,7 @@ export default {
|
|
|
89
127
|
},
|
|
90
128
|
|
|
91
129
|
events: [
|
|
92
|
-
|
|
93
130
|
{
|
|
94
|
-
|
|
95
131
|
name: 'load hashchange popstate',
|
|
96
132
|
|
|
97
133
|
el() {
|
|
@@ -99,7 +135,6 @@ export default {
|
|
|
99
135
|
},
|
|
100
136
|
|
|
101
137
|
handler() {
|
|
102
|
-
|
|
103
138
|
if (!(this.targetOffset !== false && location.hash && scrollTop(window) > 0)) {
|
|
104
139
|
return;
|
|
105
140
|
}
|
|
@@ -108,43 +143,51 @@ export default {
|
|
|
108
143
|
|
|
109
144
|
if (target) {
|
|
110
145
|
fastdom.read(() => {
|
|
111
|
-
|
|
112
|
-
const {top} = offset(target);
|
|
146
|
+
const { top } = offset(target);
|
|
113
147
|
const elTop = offset(this.$el).top;
|
|
114
148
|
const elHeight = this.$el.offsetHeight;
|
|
115
149
|
|
|
116
|
-
if (
|
|
117
|
-
|
|
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
|
+
);
|
|
118
162
|
}
|
|
119
|
-
|
|
120
163
|
});
|
|
121
164
|
}
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
}
|
|
126
|
-
|
|
165
|
+
},
|
|
166
|
+
},
|
|
127
167
|
],
|
|
128
168
|
|
|
129
169
|
update: [
|
|
130
|
-
|
|
131
170
|
{
|
|
132
|
-
|
|
133
|
-
read({height}, types) {
|
|
134
|
-
|
|
171
|
+
read({ height, margin }, types) {
|
|
135
172
|
this.inactive = !this.matchMedia || !isVisible(this.$el);
|
|
136
173
|
|
|
137
174
|
if (this.inactive) {
|
|
138
175
|
return false;
|
|
139
176
|
}
|
|
140
177
|
|
|
141
|
-
|
|
178
|
+
const hide = this.isActive && types.has('resize');
|
|
179
|
+
if (hide) {
|
|
142
180
|
this.hide();
|
|
181
|
+
}
|
|
182
|
+
|
|
183
|
+
if (!this.isActive) {
|
|
143
184
|
height = this.$el.offsetHeight;
|
|
144
|
-
this
|
|
185
|
+
margin = css(this.$el, 'margin');
|
|
145
186
|
}
|
|
146
187
|
|
|
147
|
-
|
|
188
|
+
if (hide) {
|
|
189
|
+
this.show();
|
|
190
|
+
}
|
|
148
191
|
|
|
149
192
|
const overflow = Math.max(0, height + this.offset - getHeight(window));
|
|
150
193
|
|
|
@@ -153,7 +196,7 @@ export default {
|
|
|
153
196
|
const offsetParentTop = offset(referenceElement.offsetParent).top;
|
|
154
197
|
|
|
155
198
|
const top = parseProp(this.top, this.$el, topOffset);
|
|
156
|
-
const bottom = parseProp(this.bottom, this.$el, topOffset + height);
|
|
199
|
+
const bottom = parseProp(this.bottom, this.$el, topOffset + height, true);
|
|
157
200
|
|
|
158
201
|
const start = Math.max(top, topOffset) - this.offset;
|
|
159
202
|
const end = bottom
|
|
@@ -167,17 +210,17 @@ export default {
|
|
|
167
210
|
topOffset,
|
|
168
211
|
offsetParentTop,
|
|
169
212
|
height,
|
|
170
|
-
|
|
213
|
+
margin,
|
|
214
|
+
width: dimensions(isVisible(this.widthElement) ? this.widthElement : this.$el)
|
|
215
|
+
.width,
|
|
171
216
|
top: offsetPosition(this.placeholder)[0],
|
|
172
|
-
margins: css(this.$el, ['marginTop', 'marginBottom', 'marginLeft', 'marginRight'])
|
|
173
217
|
};
|
|
174
218
|
},
|
|
175
219
|
|
|
176
|
-
write({height,
|
|
177
|
-
|
|
178
|
-
const {placeholder} = this;
|
|
220
|
+
write({ height, margin }) {
|
|
221
|
+
const { placeholder } = this;
|
|
179
222
|
|
|
180
|
-
css(placeholder,
|
|
223
|
+
css(placeholder, { height, margin });
|
|
181
224
|
|
|
182
225
|
if (!within(placeholder, document)) {
|
|
183
226
|
after(this.$el, placeholder);
|
|
@@ -185,17 +228,20 @@ export default {
|
|
|
185
228
|
}
|
|
186
229
|
|
|
187
230
|
this.isActive = !!this.isActive; // force self-assign
|
|
188
|
-
|
|
189
231
|
},
|
|
190
232
|
|
|
191
|
-
events: ['resize']
|
|
192
|
-
|
|
233
|
+
events: ['resize'],
|
|
193
234
|
},
|
|
194
235
|
|
|
195
236
|
{
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
237
|
+
read({
|
|
238
|
+
scroll: prevScroll = 0,
|
|
239
|
+
dir: prevDir = 'down',
|
|
240
|
+
overflow,
|
|
241
|
+
overflowScroll = 0,
|
|
242
|
+
start,
|
|
243
|
+
end,
|
|
244
|
+
}) {
|
|
199
245
|
const scroll = scrollTop(window);
|
|
200
246
|
const dir = prevScroll <= scroll ? 'down' : 'up';
|
|
201
247
|
|
|
@@ -205,21 +251,32 @@ export default {
|
|
|
205
251
|
scroll,
|
|
206
252
|
prevScroll,
|
|
207
253
|
overflowScroll: clamp(
|
|
208
|
-
overflowScroll
|
|
209
|
-
+ clamp(scroll, start, end)
|
|
210
|
-
- clamp(prevScroll, start, end),
|
|
254
|
+
overflowScroll + clamp(scroll, start, end) - clamp(prevScroll, start, end),
|
|
211
255
|
0,
|
|
212
256
|
overflow
|
|
213
|
-
)
|
|
257
|
+
),
|
|
214
258
|
};
|
|
215
259
|
},
|
|
216
260
|
|
|
217
261
|
write(data, types) {
|
|
218
|
-
|
|
219
262
|
const isScrollUpdate = types.has('scroll');
|
|
220
|
-
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;
|
|
221
274
|
|
|
222
|
-
if (
|
|
275
|
+
if (
|
|
276
|
+
scroll < 0 ||
|
|
277
|
+
(scroll === prevScroll && isScrollUpdate) ||
|
|
278
|
+
(this.showOnUp && !isScrollUpdate && !this.isFixed)
|
|
279
|
+
) {
|
|
223
280
|
return;
|
|
224
281
|
}
|
|
225
282
|
|
|
@@ -229,17 +286,24 @@ export default {
|
|
|
229
286
|
data.initTimestamp = now;
|
|
230
287
|
}
|
|
231
288
|
|
|
232
|
-
if (
|
|
289
|
+
if (
|
|
290
|
+
this.showOnUp &&
|
|
291
|
+
!this.isFixed &&
|
|
292
|
+
Math.abs(data.initScroll - scroll) <= 30 &&
|
|
293
|
+
Math.abs(prevScroll - scroll) <= 10
|
|
294
|
+
) {
|
|
233
295
|
return;
|
|
234
296
|
}
|
|
235
297
|
|
|
236
|
-
if (
|
|
237
|
-
||
|
|
238
|
-
|
|
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)))
|
|
239
305
|
) {
|
|
240
|
-
|
|
241
306
|
if (!this.isFixed) {
|
|
242
|
-
|
|
243
307
|
if (Animation.inProgress(this.$el) && top > scroll) {
|
|
244
308
|
Animation.cancel(this.$el);
|
|
245
309
|
this.hide();
|
|
@@ -256,53 +320,49 @@ export default {
|
|
|
256
320
|
} else {
|
|
257
321
|
this.hide();
|
|
258
322
|
}
|
|
259
|
-
|
|
260
323
|
} else if (this.isFixed) {
|
|
261
|
-
|
|
262
324
|
this.update();
|
|
263
|
-
|
|
264
325
|
} else if (this.animation) {
|
|
265
|
-
|
|
266
326
|
Animation.cancel(this.$el);
|
|
267
327
|
this.show();
|
|
268
328
|
Animation.in(this.$el, this.animation).catch(noop);
|
|
269
|
-
|
|
270
329
|
} else {
|
|
271
330
|
this.show();
|
|
272
331
|
}
|
|
273
|
-
|
|
274
332
|
},
|
|
275
333
|
|
|
276
|
-
events: ['resize', 'scroll']
|
|
277
|
-
|
|
278
|
-
}
|
|
279
|
-
|
|
334
|
+
events: ['resize', 'scroll'],
|
|
335
|
+
},
|
|
280
336
|
],
|
|
281
337
|
|
|
282
338
|
methods: {
|
|
283
|
-
|
|
284
339
|
show() {
|
|
285
|
-
|
|
286
340
|
this.isFixed = true;
|
|
287
341
|
this.update();
|
|
288
342
|
this.placeholder.hidden = false;
|
|
289
|
-
|
|
290
343
|
},
|
|
291
344
|
|
|
292
345
|
hide() {
|
|
293
|
-
|
|
294
346
|
this.isActive = false;
|
|
295
347
|
removeClass(this.$el, this.clsFixed, this.clsBelow);
|
|
296
|
-
css(this.$el, {position: '', top: '', width: ''});
|
|
348
|
+
css(this.$el, { position: '', top: '', width: '' });
|
|
297
349
|
this.placeholder.hidden = true;
|
|
298
|
-
|
|
299
350
|
},
|
|
300
351
|
|
|
301
352
|
update() {
|
|
302
|
-
|
|
303
|
-
|
|
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;
|
|
304
364
|
const active = start !== 0 || scroll > start;
|
|
305
|
-
let top =
|
|
365
|
+
let top = this.offset;
|
|
306
366
|
let position = 'fixed';
|
|
307
367
|
|
|
308
368
|
if (scroll > end) {
|
|
@@ -317,32 +377,30 @@ export default {
|
|
|
317
377
|
css(this.$el, {
|
|
318
378
|
position,
|
|
319
379
|
top: `${top}px`,
|
|
320
|
-
width
|
|
380
|
+
width,
|
|
321
381
|
});
|
|
322
382
|
|
|
323
383
|
this.isActive = active;
|
|
324
384
|
toggleClass(this.$el, this.clsBelow, scroll > topOffset + height);
|
|
325
385
|
addClass(this.$el, this.clsFixed);
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
}
|
|
330
|
-
|
|
386
|
+
},
|
|
387
|
+
},
|
|
331
388
|
};
|
|
332
389
|
|
|
333
|
-
function parseProp(value, el, propOffset) {
|
|
334
|
-
|
|
390
|
+
function parseProp(value, el, propOffset, padding) {
|
|
335
391
|
if (!value) {
|
|
336
392
|
return 0;
|
|
337
393
|
}
|
|
338
394
|
|
|
339
395
|
if (isString(value) && value.match(/^-?\d/)) {
|
|
340
|
-
|
|
341
396
|
return propOffset + toPx(value);
|
|
342
|
-
|
|
343
397
|
} else {
|
|
344
|
-
|
|
345
|
-
return
|
|
346
|
-
|
|
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
|
+
);
|
|
347
405
|
}
|
|
348
406
|
}
|