UNPKG

6.83 kBJavaScriptView Raw
1'use strict';
2
3exports.__esModule = true;
4exports.isInContainer = exports.getScrollContainer = exports.isScroll = exports.getStyle = exports.once = exports.off = exports.on = undefined;
5
6var _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; }; /* istanbul ignore next */
7
8exports.hasClass = hasClass;
9exports.addClass = addClass;
10exports.removeClass = removeClass;
11exports.setStyle = setStyle;
12
13var _vue = require('vue');
14
15var _vue2 = _interopRequireDefault(_vue);
16
17function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
18
19var isServer = _vue2.default.prototype.$isServer;
20var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g;
21var MOZ_HACK_REGEXP = /^moz([A-Z])/;
22var ieVersion = isServer ? 0 : Number(document.documentMode);
23
24/* istanbul ignore next */
25var trim = function trim(string) {
26 return (string || '').replace(/^[\s\uFEFF]+|[\s\uFEFF]+$/g, '');
27};
28/* istanbul ignore next */
29var 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/* istanbul ignore next */
36var 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/* istanbul ignore next */
53var 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/* istanbul ignore next */
70var 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/* istanbul ignore next */
81function 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/* istanbul ignore next */
92function 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/* istanbul ignore next */
113function 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/* istanbul ignore next */
134var 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/* istanbul ignore next */
171function 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
190var 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
199var 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
216var 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