403 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			403 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | (function() { | ||
|  |   var MutationObserver, Util, WeakMap, | ||
|  |     __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }, | ||
|  |     __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; | ||
|  | 
 | ||
|  |   Util = (function() { | ||
|  |     function Util() {} | ||
|  | 
 | ||
|  |     Util.prototype.extend = function(custom, defaults) { | ||
|  |       var key, value; | ||
|  |       for (key in defaults) { | ||
|  |         value = defaults[key]; | ||
|  |         if (custom[key] == null) { | ||
|  |           custom[key] = value; | ||
|  |         } | ||
|  |       } | ||
|  |       return custom; | ||
|  |     }; | ||
|  | 
 | ||
|  |     Util.prototype.isMobile = function(agent) { | ||
|  |       return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(agent); | ||
|  |     }; | ||
|  | 
 | ||
|  |     return Util; | ||
|  | 
 | ||
|  |   })(); | ||
|  | 
 | ||
|  |   WeakMap = this.WeakMap || this.MozWeakMap || (WeakMap = (function() { | ||
|  |     function WeakMap() { | ||
|  |       this.keys = []; | ||
|  |       this.values = []; | ||
|  |     } | ||
|  | 
 | ||
|  |     WeakMap.prototype.get = function(key) { | ||
|  |       var i, item, _i, _len, _ref; | ||
|  |       _ref = this.keys; | ||
|  |       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { | ||
|  |         item = _ref[i]; | ||
|  |         if (item === key) { | ||
|  |           return this.values[i]; | ||
|  |         } | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     WeakMap.prototype.set = function(key, value) { | ||
|  |       var i, item, _i, _len, _ref; | ||
|  |       _ref = this.keys; | ||
|  |       for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) { | ||
|  |         item = _ref[i]; | ||
|  |         if (item === key) { | ||
|  |           this.values[i] = value; | ||
|  |           return; | ||
|  |         } | ||
|  |       } | ||
|  |       this.keys.push(key); | ||
|  |       return this.values.push(value); | ||
|  |     }; | ||
|  | 
 | ||
|  |     return WeakMap; | ||
|  | 
 | ||
|  |   })()); | ||
|  | 
 | ||
|  |   MutationObserver = this.MutationObserver || this.WebkitMutationObserver || this.MozMutationObserver || (MutationObserver = (function() { | ||
|  |     function MutationObserver() { | ||
|  |       console.warn('MutationObserver is not supported by your browser.'); | ||
|  |       console.warn('WOW.js cannot detect dom mutations, please call .sync() after loading new content.'); | ||
|  |     } | ||
|  | 
 | ||
|  |     MutationObserver.notSupported = true; | ||
|  | 
 | ||
|  |     MutationObserver.prototype.observe = function() {}; | ||
|  | 
 | ||
|  |     return MutationObserver; | ||
|  | 
 | ||
|  |   })()); | ||
|  | 
 | ||
|  |   this.WOW = (function() { | ||
|  |     WOW.prototype.defaults = { | ||
|  |       boxClass: 'wow', | ||
|  |       animateClass: 'animated', | ||
|  |       offset: 0, | ||
|  |       mobile: true, | ||
|  |       live: true | ||
|  |     }; | ||
|  | 
 | ||
|  |     function WOW(options) { | ||
|  |       if (options == null) { | ||
|  |         options = {}; | ||
|  |       } | ||
|  |       this.scrollCallback = __bind(this.scrollCallback, this); | ||
|  |       this.scrollHandler = __bind(this.scrollHandler, this); | ||
|  |       this.start = __bind(this.start, this); | ||
|  |       this.scrolled = true; | ||
|  |       this.config = this.util().extend(options, this.defaults); | ||
|  |       this.animationNameCache = new WeakMap(); | ||
|  |     } | ||
|  | 
 | ||
|  |     WOW.prototype.init = function() { | ||
|  |       var _ref; | ||
|  |       this.element = window.document.documentElement; | ||
|  |       if ((_ref = document.readyState) === "interactive" || _ref === "complete") { | ||
|  |         this.start(); | ||
|  |       } else { | ||
|  |         document.addEventListener('DOMContentLoaded', this.start); | ||
|  |       } | ||
|  |       return this.finished = []; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.start = function() { | ||
|  |       var box, _i, _len, _ref; | ||
|  |       this.stopped = false; | ||
|  |       this.boxes = (function() { | ||
|  |         var _i, _len, _ref, _results; | ||
|  |         _ref = this.element.getElementsByClassName(this.config.boxClass); | ||
|  |         _results = []; | ||
|  |         for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |           box = _ref[_i]; | ||
|  |           _results.push(box); | ||
|  |         } | ||
|  |         return _results; | ||
|  |       }).call(this); | ||
|  |       this.all = (function() { | ||
|  |         var _i, _len, _ref, _results; | ||
|  |         _ref = this.boxes; | ||
|  |         _results = []; | ||
|  |         for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |           box = _ref[_i]; | ||
|  |           _results.push(box); | ||
|  |         } | ||
|  |         return _results; | ||
|  |       }).call(this); | ||
|  |       if (this.boxes.length) { | ||
|  |         if (this.disabled()) { | ||
|  |           this.resetStyle(); | ||
|  |         } else { | ||
|  |           _ref = this.boxes; | ||
|  |           for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |             box = _ref[_i]; | ||
|  |             this.applyStyle(box, true); | ||
|  |           } | ||
|  |           window.addEventListener('scroll', this.scrollHandler, false); | ||
|  |           window.addEventListener('resize', this.scrollHandler, false); | ||
|  |           this.interval = setInterval(this.scrollCallback, 50); | ||
|  |         } | ||
|  |       } | ||
|  |       if (this.config.live) { | ||
|  |         return new MutationObserver((function(_this) { | ||
|  |           return function(records) { | ||
|  |             var node, record, _j, _len1, _results; | ||
|  |             _results = []; | ||
|  |             for (_j = 0, _len1 = records.length; _j < _len1; _j++) { | ||
|  |               record = records[_j]; | ||
|  |               _results.push((function() { | ||
|  |                 var _k, _len2, _ref1, _results1; | ||
|  |                 _ref1 = record.addedNodes || []; | ||
|  |                 _results1 = []; | ||
|  |                 for (_k = 0, _len2 = _ref1.length; _k < _len2; _k++) { | ||
|  |                   node = _ref1[_k]; | ||
|  |                   _results1.push(this.doSync(node)); | ||
|  |                 } | ||
|  |                 return _results1; | ||
|  |               }).call(_this)); | ||
|  |             } | ||
|  |             return _results; | ||
|  |           }; | ||
|  |         })(this)).observe(document.body, { | ||
|  |           childList: true, | ||
|  |           subtree: true | ||
|  |         }); | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.stop = function() { | ||
|  |       this.stopped = true; | ||
|  |       window.removeEventListener('scroll', this.scrollHandler, false); | ||
|  |       window.removeEventListener('resize', this.scrollHandler, false); | ||
|  |       if (this.interval != null) { | ||
|  |         return clearInterval(this.interval); | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.sync = function(element) { | ||
|  |       if (MutationObserver.notSupported) { | ||
|  |         return this.doSync(this.element); | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.doSync = function(element) { | ||
|  |       var box, _i, _len, _ref, _results; | ||
|  |       if (!this.stopped) { | ||
|  |         if (element == null) { | ||
|  |           element = this.element; | ||
|  |         } | ||
|  |         if (element.nodeType !== 1) { | ||
|  |           return; | ||
|  |         } | ||
|  |         element = element.parentNode || element; | ||
|  |         _ref = element.getElementsByClassName(this.config.boxClass); | ||
|  |         _results = []; | ||
|  |         for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |           box = _ref[_i]; | ||
|  |           if (__indexOf.call(this.all, box) < 0) { | ||
|  |             this.applyStyle(box, true); | ||
|  |             this.boxes.push(box); | ||
|  |             this.all.push(box); | ||
|  |             _results.push(this.scrolled = true); | ||
|  |           } else { | ||
|  |             _results.push(void 0); | ||
|  |           } | ||
|  |         } | ||
|  |         return _results; | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.show = function(box) { | ||
|  |       this.applyStyle(box); | ||
|  |       return box.className = "" + box.className + " " + this.config.animateClass; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.applyStyle = function(box, hidden) { | ||
|  |       var delay, duration, iteration; | ||
|  |       duration = box.getAttribute('data-wow-duration'); | ||
|  |       delay = box.getAttribute('data-wow-delay'); | ||
|  |       iteration = box.getAttribute('data-wow-iteration'); | ||
|  |       return this.animate((function(_this) { | ||
|  |         return function() { | ||
|  |           return _this.customStyle(box, hidden, duration, delay, iteration); | ||
|  |         }; | ||
|  |       })(this)); | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.animate = (function() { | ||
|  |       if ('requestAnimationFrame' in window) { | ||
|  |         return function(callback) { | ||
|  |           return window.requestAnimationFrame(callback); | ||
|  |         }; | ||
|  |       } else { | ||
|  |         return function(callback) { | ||
|  |           return callback(); | ||
|  |         }; | ||
|  |       } | ||
|  |     })(); | ||
|  | 
 | ||
|  |     WOW.prototype.resetStyle = function() { | ||
|  |       var box, _i, _len, _ref, _results; | ||
|  |       _ref = this.boxes; | ||
|  |       _results = []; | ||
|  |       for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |         box = _ref[_i]; | ||
|  |         _results.push(box.setAttribute('style', 'visibility: visible;')); | ||
|  |       } | ||
|  |       return _results; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.customStyle = function(box, hidden, duration, delay, iteration) { | ||
|  |       if (hidden) { | ||
|  |         this.cacheAnimationName(box); | ||
|  |       } | ||
|  |       box.style.visibility = hidden ? 'hidden' : 'visible'; | ||
|  |       if (duration) { | ||
|  |         this.vendorSet(box.style, { | ||
|  |           animationDuration: duration | ||
|  |         }); | ||
|  |       } | ||
|  |       if (delay) { | ||
|  |         this.vendorSet(box.style, { | ||
|  |           animationDelay: delay | ||
|  |         }); | ||
|  |       } | ||
|  |       if (iteration) { | ||
|  |         this.vendorSet(box.style, { | ||
|  |           animationIterationCount: iteration | ||
|  |         }); | ||
|  |       } | ||
|  |       this.vendorSet(box.style, { | ||
|  |         animationName: hidden ? 'none' : this.cachedAnimationName(box) | ||
|  |       }); | ||
|  |       return box; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.vendors = ["moz", "webkit"]; | ||
|  | 
 | ||
|  |     WOW.prototype.vendorSet = function(elem, properties) { | ||
|  |       var name, value, vendor, _results; | ||
|  |       _results = []; | ||
|  |       for (name in properties) { | ||
|  |         value = properties[name]; | ||
|  |         elem["" + name] = value; | ||
|  |         _results.push((function() { | ||
|  |           var _i, _len, _ref, _results1; | ||
|  |           _ref = this.vendors; | ||
|  |           _results1 = []; | ||
|  |           for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |             vendor = _ref[_i]; | ||
|  |             _results1.push(elem["" + vendor + (name.charAt(0).toUpperCase()) + (name.substr(1))] = value); | ||
|  |           } | ||
|  |           return _results1; | ||
|  |         }).call(this)); | ||
|  |       } | ||
|  |       return _results; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.vendorCSS = function(elem, property) { | ||
|  |       var result, style, vendor, _i, _len, _ref; | ||
|  |       style = window.getComputedStyle(elem); | ||
|  |       result = style.getPropertyCSSValue(property); | ||
|  |       _ref = this.vendors; | ||
|  |       for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |         vendor = _ref[_i]; | ||
|  |         result = result || style.getPropertyCSSValue("-" + vendor + "-" + property); | ||
|  |       } | ||
|  |       return result; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.animationName = function(box) { | ||
|  |       var animationName; | ||
|  |       try { | ||
|  |         animationName = this.vendorCSS(box, 'animation-name').cssText; | ||
|  |       } catch (_error) { | ||
|  |         animationName = window.getComputedStyle(box).getPropertyValue('animation-name'); | ||
|  |       } | ||
|  |       if (animationName === 'none') { | ||
|  |         return ''; | ||
|  |       } else { | ||
|  |         return animationName; | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.cacheAnimationName = function(box) { | ||
|  |       return this.animationNameCache.set(box, this.animationName(box)); | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.cachedAnimationName = function(box) { | ||
|  |       return this.animationNameCache.get(box); | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.scrollHandler = function() { | ||
|  |       return this.scrolled = true; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.scrollCallback = function() { | ||
|  |       var box; | ||
|  |       if (this.scrolled) { | ||
|  |         this.scrolled = false; | ||
|  |         this.boxes = (function() { | ||
|  |           var _i, _len, _ref, _results; | ||
|  |           _ref = this.boxes; | ||
|  |           _results = []; | ||
|  |           for (_i = 0, _len = _ref.length; _i < _len; _i++) { | ||
|  |             box = _ref[_i]; | ||
|  |             if (!(box)) { | ||
|  |               continue; | ||
|  |             } | ||
|  |             if (this.isVisible(box)) { | ||
|  |               this.show(box); | ||
|  |               continue; | ||
|  |             } | ||
|  |             _results.push(box); | ||
|  |           } | ||
|  |           return _results; | ||
|  |         }).call(this); | ||
|  |         if (!(this.boxes.length || this.config.live)) { | ||
|  |           return this.stop(); | ||
|  |         } | ||
|  |       } | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.offsetTop = function(element) { | ||
|  |       var top; | ||
|  |       while (element.offsetTop === void 0) { | ||
|  |         element = element.parentNode; | ||
|  |       } | ||
|  |       top = element.offsetTop; | ||
|  |       while (element = element.offsetParent) { | ||
|  |         top += element.offsetTop; | ||
|  |       } | ||
|  |       return top; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.isVisible = function(box) { | ||
|  |       var bottom, offset, top, viewBottom, viewTop; | ||
|  |       offset = box.getAttribute('data-wow-offset') || this.config.offset; | ||
|  |       viewTop = window.pageYOffset; | ||
|  |       viewBottom = viewTop + Math.min(this.element.clientHeight, innerHeight) - offset; | ||
|  |       top = this.offsetTop(box); | ||
|  |       bottom = top + box.clientHeight; | ||
|  |       return top <= viewBottom && bottom >= viewTop; | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.util = function() { | ||
|  |       return this._util != null ? this._util : this._util = new Util(); | ||
|  |     }; | ||
|  | 
 | ||
|  |     WOW.prototype.disabled = function() { | ||
|  |       return !this.config.mobile && this.util().isMobile(navigator.userAgent); | ||
|  |     }; | ||
|  | 
 | ||
|  |     return WOW; | ||
|  | 
 | ||
|  |   })(); | ||
|  | 
 | ||
|  | }).call(this); |