1 | 'use strict';
|
2 |
|
3 | exports.__esModule = true;
|
4 | exports.isInContainer = exports.getScrollContainer = exports.isScroll = exports.getStyle = exports.once = exports.off = exports.on = undefined;
|
5 |
|
6 | var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
|
7 |
|
8 | exports.hasClass = hasClass;
|
9 | exports.addClass = addClass;
|
10 | exports.removeClass = removeClass;
|
11 | exports.setStyle = setStyle;
|
12 |
|
13 | var _vue = require('vue');
|
14 |
|
15 | var _vue2 = _interopRequireDefault(_vue);
|
16 |
|
17 | function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
18 |
|
19 | var isServer = _vue2.default.prototype.$isServer;
|
20 | var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
|
21 | var MOZ_HACK_REGEXP = /^moz([A-Z])/;
|
22 | var ieVersion = isServer ? 0 : Number(document.documentMode);
|
23 |
|
24 |
|
25 | var trim = function trim(string) {
|
26 | return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
|
27 | };
|
28 |
|
29 | var camelCase = function camelCase(name) {
|
30 | return name.replace(SPECIAL_CHARS_REGEXP, function (_, separator, letter, offset) {
|
31 | return offset ? letter.toUpperCase() : letter;
|
32 | }).replace(MOZ_HACK_REGEXP, 'Moz$1');
|
33 | };
|
34 |
|
35 |
|
36 | var on = exports.on = function () {
|
37 | if (!isServer && document.addEventListener) {
|
38 | return function (element, event, handler) {
|
39 | if (element && event && handler) {
|
40 | element.addEventListener(event, handler, false);
|
41 | }
|
42 | };
|
43 | } else {
|
44 | return function (element, event, handler) {
|
45 | if (element && event && handler) {
|
46 | element.attachEvent('on' + event, handler);
|
47 | }
|
48 | };
|
49 | }
|
50 | }();
|
51 |
|
52 |
|
53 | var off = exports.off = function () {
|
54 | if (!isServer && document.removeEventListener) {
|
55 | return function (element, event, handler) {
|
56 | if (element && event) {
|
57 | element.removeEventListener(event, handler, false);
|
58 | }
|
59 | };
|
60 | } else {
|
61 | return function (element, event, handler) {
|
62 | if (element && event) {
|
63 | element.detachEvent('on' + event, handler);
|
64 | }
|
65 | };
|
66 | }
|
67 | }();
|
68 |
|
69 |
|
70 | var once = exports.once = function once(el, event, fn) {
|
71 | var listener = function listener() {
|
72 | if (fn) {
|
73 | fn.apply(this, arguments);
|
74 | }
|
75 | off(el, event, listener);
|
76 | };
|
77 | on(el, event, listener);
|
78 | };
|
79 |
|
80 |
|
81 | function hasClass(el, cls) {
|
82 | if (!el || !cls) return false;
|
83 | if (cls.indexOf(' ') !== -1) throw new Error('className should not contain space.');
|
84 | if (el.classList) {
|
85 | return el.classList.contains(cls);
|
86 | } else {
|
87 | return (' ' + el.className + ' ').indexOf(' ' + cls + ' ') > -1;
|
88 | }
|
89 | };
|
90 |
|
91 |
|
92 | function addClass(el, cls) {
|
93 | if (!el) return;
|
94 | var curClass = el.className;
|
95 | var classes = (cls || '').split(' ');
|
96 |
|
97 | for (var i = 0, j = classes.length; i < j; i++) {
|
98 | var clsName = classes[i];
|
99 | if (!clsName) continue;
|
100 |
|
101 | if (el.classList) {
|
102 | el.classList.add(clsName);
|
103 | } else if (!hasClass(el, clsName)) {
|
104 | curClass += ' ' + clsName;
|
105 | }
|
106 | }
|
107 | if (!el.classList) {
|
108 | el.className = curClass;
|
109 | }
|
110 | };
|
111 |
|
112 |
|
113 | function removeClass(el, cls) {
|
114 | if (!el || !cls) return;
|
115 | var classes = cls.split(' ');
|
116 | var curClass = ' ' + el.className + ' ';
|
117 |
|
118 | for (var i = 0, j = classes.length; i < j; i++) {
|
119 | var clsName = classes[i];
|
120 | if (!clsName) continue;
|
121 |
|
122 | if (el.classList) {
|
123 | el.classList.remove(clsName);
|
124 | } else if (hasClass(el, clsName)) {
|
125 | curClass = curClass.replace(' ' + clsName + ' ', ' ');
|
126 | }
|
127 | }
|
128 | if (!el.classList) {
|
129 | el.className = trim(curClass);
|
130 | }
|
131 | };
|
132 |
|
133 |
|
134 | var getStyle = exports.getStyle = ieVersion < 9 ? function (element, styleName) {
|
135 | if (isServer) return;
|
136 | if (!element || !styleName) return null;
|
137 | styleName = camelCase(styleName);
|
138 | if (styleName === 'float') {
|
139 | styleName = 'styleFloat';
|
140 | }
|
141 | try {
|
142 | switch (styleName) {
|
143 | case 'opacity':
|
144 | try {
|
145 | return element.filters.item('alpha').opacity / 100;
|
146 | } catch (e) {
|
147 | return 1.0;
|
148 | }
|
149 | default:
|
150 | return element.style[styleName] || element.currentStyle ? element.currentStyle[styleName] : null;
|
151 | }
|
152 | } catch (e) {
|
153 | return element.style[styleName];
|
154 | }
|
155 | } : function (element, styleName) {
|
156 | if (isServer) return;
|
157 | if (!element || !styleName) return null;
|
158 | styleName = camelCase(styleName);
|
159 | if (styleName === 'float') {
|
160 | styleName = 'cssFloat';
|
161 | }
|
162 | try {
|
163 | var computed = document.defaultView.getComputedStyle(element, '');
|
164 | return element.style[styleName] || computed ? computed[styleName] : null;
|
165 | } catch (e) {
|
166 | return element.style[styleName];
|
167 | }
|
168 | };
|
169 |
|
170 |
|
171 | function setStyle(element, styleName, value) {
|
172 | if (!element || !styleName) return;
|
173 |
|
174 | if ((typeof styleName === 'undefined' ? 'undefined' : _typeof(styleName)) === 'object') {
|
175 | for (var prop in styleName) {
|
176 | if (styleName.hasOwnProperty(prop)) {
|
177 | setStyle(element, prop, styleName[prop]);
|
178 | }
|
179 | }
|
180 | } else {
|
181 | styleName = camelCase(styleName);
|
182 | if (styleName === 'opacity' && ieVersion < 9) {
|
183 | element.style.filter = isNaN(value) ? '' : 'alpha(opacity=' + value * 100 + ')';
|
184 | } else {
|
185 | element.style[styleName] = value;
|
186 | }
|
187 | }
|
188 | };
|
189 |
|
190 | var isScroll = exports.isScroll = function isScroll(el, vertical) {
|
191 | if (isServer) return;
|
192 |
|
193 | var determinedDirection = vertical !== null || vertical !== undefined;
|
194 | var overflow = determinedDirection ? vertical ? getStyle(el, 'overflow-y') : getStyle(el, 'overflow-x') : getStyle(el, 'overflow');
|
195 |
|
196 | return overflow.match(/(scroll|auto)/);
|
197 | };
|
198 |
|
199 | var getScrollContainer = exports.getScrollContainer = function getScrollContainer(el, vertical) {
|
200 | if (isServer) return;
|
201 |
|
202 | var parent = el;
|
203 | while (parent) {
|
204 | if ([window, document, document.documentElement].includes(parent)) {
|
205 | return window;
|
206 | }
|
207 | if (isScroll(parent, vertical)) {
|
208 | return parent;
|
209 | }
|
210 | parent = parent.parentNode;
|
211 | }
|
212 |
|
213 | return parent;
|
214 | };
|
215 |
|
216 | var isInContainer = exports.isInContainer = function isInContainer(el, container) {
|
217 | if (isServer || !el || !container) return false;
|
218 |
|
219 | var elRect = el.getBoundingClientRect();
|
220 | var containerRect = void 0;
|
221 |
|
222 | if ([window, document, document.documentElement, null, undefined].includes(container)) {
|
223 | containerRect = {
|
224 | top: 0,
|
225 | right: window.innerWidth,
|
226 | bottom: window.innerHeight,
|
227 | left: 0
|
228 | };
|
229 | } else {
|
230 | containerRect = container.getBoundingClientRect();
|
231 | }
|
232 |
|
233 | return elRect.top < containerRect.bottom && elRect.bottom > containerRect.top && elRect.right > containerRect.left && elRect.left < containerRect.right;
|
234 | }; |
\ | No newline at end of file |