1(function($) { 2 // inView 3 var inviewObjects = [], 4 viewportSize, viewportOffset, 5 d = document, 6 w = window, 7 documentElement = d.documentElement, 8 timer 9 10 $.event.special.inview = { 11 add: function(data) { 12 inviewObjects.push({ 13 data: data, 14 $element: $(this), 15 element: this 16 }) 17 18 if (!timer && inviewObjects.length) { 19 timer = setInterval(checkInView, 250) 20 } 21 }, 22 23 remove: function(data) { 24 for (var i = 0; i < inviewObjects.length; i++) { 25 var inviewObject = inviewObjects[i] 26 if (inviewObject.element === this && inviewObject.data.guid === data.guid) { 27 inviewObjects.splice(i, 1) 28 break 29 } 30 } 31 32 if (!inviewObjects.length) { 33 clearInterval(timer) 34 timer = null 35 } 36 } 37 } 38 39 function getViewportSize() { 40 var mode, domObject, size = { 41 height: w.innerHeight, 42 width: w.innerWidth 43 } 44 45 if (!size.height) { 46 mode = d.compatMode 47 if (mode || !$.support.boxModel) { // IE, Gecko 48 domObject = mode === 'CSS1Compat' ? 49 documentElement : // Standards 50 d.body // Quirks 51 size = { 52 height: domObject.clientHeight, 53 width: domObject.clientWidth 54 } 55 } 56 } 57 58 return size 59 } 60 61 function getViewportOffset() { 62 return { 63 top: w.pageYOffset || documentElement.scrollTop || d.body.scrollTop, 64 left: w.pageXOffset || documentElement.scrollLeft || d.body.scrollLeft 65 } 66 } 67 68 function checkInView() { 69 if (!inviewObjects.length) { 70 return 71 } 72 73 var i = 0, 74 $elements = $.map(inviewObjects, function(inviewObject) { 75 var selector = inviewObject.data.selector, 76 $element = inviewObject.$element 77 return selector ? $element.find(selector) : $element 78 }) 79 80 viewportSize = viewportSize || getViewportSize() 81 viewportOffset = viewportOffset || getViewportOffset() 82 83 for (; i < inviewObjects.length; i++) { 84 if (!$.contains(documentElement, $elements[i][0])) { 85 continue 86 } 87 88 var $element = $($elements[i]), 89 elementSize = { 90 height: $element[0].offsetHeight, 91 width: $element[0].offsetWidth 92 }, 93 elementOffset = $element.offset(), 94 inView = $element.data('inview') 95 96 if (!viewportOffset || !viewportSize) { 97 return 98 } 99 100 if (elementOffset.top + elementSize.height > viewportOffset.top && 101 elementOffset.top < viewportOffset.top + viewportSize.height && 102 elementOffset.left + elementSize.width > viewportOffset.left && 103 elementOffset.left < viewportOffset.left + viewportSize.width) { 104 if (!inView) { 105 $element.data('inview', true).trigger('inview', [true]) 106 } 107 } else if (inView) { 108 $element.data('inview', false).trigger('inview', [false]) 109 } 110 } 111 } 112 113 $(w).on("scroll resize scrollstop", function() { 114 viewportSize = viewportOffset = null 115 }) 116 117 if (!documentElement.addEventListener && documentElement.attachEvent) { 118 documentElement.attachEvent("onfocusin", function() { 119 viewportOffset = null 120 }) 121 } 122 123 // eaelProgressBar 124 $.fn.eaelProgressBar = function() { 125 var $this = $(this) 126 var $layout = $this.data('layout') 127 var $num = $this.data('count') 128 var $duration = $this.data('duration') 129 130 $this.one('inview', function() { 131 if ($layout == 'line' || $layout == 'line_rainbow') { 132 $('.eael-progressbar-line-fill', $this).css({ 133 'width': $num + '%', 134 }) 135 } else if ($layout == 'half_circle' || $layout == 'half_circle_fill') { 136 $('.eael-progressbar-circle-half', $this).css({ 137 'transform': 'rotate(' + ($num * 1.8) + 'deg)', 138 }) 139 } else if ($layout == 'box') { 140 $('.eael-progressbar-box-fill', $this).css({ 141 'height': $num + '%', 142 }) 143 } 144 145 $('.eael-progressbar-count', $this).prop({ 146 'counter': 0 147 }).animate({ 148 counter: $num 149 }, { 150 duration: $duration, 151 easing: 'linear', 152 step: function(counter) { 153 if ($layout == 'circle' || $layout == 'circle_fill') { 154 var rotate = (counter * 3.6) 155 $('.eael-progressbar-circle-half-left', $this).css({ 156 'transform': "rotate(" + rotate + "deg)", 157 }) 158 if (rotate > 180) { 159 $('.eael-progressbar-circle-pie', $this).css({ 160 'clip-path': 'inset(0)' 161 }) 162 $('.eael-progressbar-circle-half-right', $this).css({ 163 'visibility': 'visible' 164 }) 165 } 166 } 167 168 $(this).text(Math.ceil(counter)) 169 } 170 }) 171 }) 172 } 173}
173(jQuery))
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.