PageSourceSearch

https://www.hologic.es/sites/default/files/cohesion/scripts/inview/jquery.inview.js?tm4wcr

js hologic.es collected 2026-10-08 20:32:17 UTC 4,893 bytes, 143 lines download raw bytes

vendor: 4,893 bytes, lines 1-143
1/**!
2 * @sitestudioexcludesonar
3 * author Christopher Blum
4 *    - based on the idea of Remy Sharp, http://remysharp.com/2009/01/26/element-in-view-event-plugin/
5 *    - forked from http://github.com/zuk/jquery.inview/
6 */
7(function (factory) {
8  if (typeof define == 'function' && define.amd) {
9    // AMD
10    define(['jquery'], factory);
11  } else if (typeof exports === 'object') {
12    // Node, CommonJS
13    module.exports = factory(require('jquery'));
14  } else {
15    // Browser globals
16    factory(jQuery);
17  }
18}(function ($) {
19
20  var inviewObjects = [], viewportSize, viewportOffset,
21    d = document, w = window, documentElement = d.documentElement, timer;
22
23  $.event.special.inview = {
24    add: function(data) {
25      inviewObjects.push({ data: data, $element: $(this), element: this });
26      // Use setInterval in order to also make sure this captures elements within
27      // "overflow:scroll" elements or elements that appeared in the dom tree due to
28      // dom manipulation and reflow
29      // old: $(window).scroll(checkInView);
30      //
31      // By the way, iOS (iPad, iPhone, ...) seems to not execute, or at least delays
32      // intervals while the user scrolls. Therefore the inview event might fire a bit late there
33      //
34      // Don't waste cycles with an interval until we get at least one element that
35      // has bound to the inview event.
36      if (!timer && inviewObjects.length) {
37        timer = setInterval(checkInView, 250);
38      }
39    },
40
41    remove: function(data) {
42      for (var i=0; i<inviewObjects.length; i++) {
43        var inviewObject = inviewObjects[i];
44        if (inviewObject.element === this && inviewObject.data.guid === data.guid) {
45          inviewObjects.splice(i, 1);
46          break;
47        }
48      }
49
50      // Clear interval when we no longer have any elements listening
51      if (!inviewObjects.length) {
52        clearInterval(timer);
53        timer = null;
54      }
55    }
56  };
57
58  function getViewportSize() {
59    var mode, domObject, size = { height: w.innerHeight, width: w.innerWidth };
60
61    // if this is correct then return it. iPad has compat Mode, so will
62    // go into check clientHeight/clientWidth (which has the wrong value).
63    if (!size.height) {
64      mode = d.compatMode;
65      if (mode || !$.support.boxModel) { // IE, Gecko
66        domObject = mode === 'CSS1Compat' ?
67          documentElement : // Standards
68          d.body; // Quirks
69        size = {
70          height: domObject.clientHeight,
71          width:  domObject.clientWidth
72        };
73      }
74    }
75
76    return size;
77  }
78
79  function getViewportOffset() {
80    return {
81      top:  w.pageYOffset || documentElement.scrollTop   || d.body.scrollTop,
82      left: w.pageXOffset || documentElement.scrollLeft  || d.body.scrollLeft
83    };
84  }
85
86  function checkInView() {
87    if (!inviewObjects.length) {
88      return;
89    }
90
91    var i = 0, $elements = $.map(inviewObjects, function(inviewObject) {
92      var selector  = inviewObject.data.selector,
93        $element  = inviewObject.$element;
94      return selector ? $element.find(selector) : $element;
95    });
96
97    viewportSize   = viewportSize   || getViewportSize();
98    viewportOffset = viewportOffset || getViewportOffset();
99
100    for (; i<inviewObjects.length; i++) {
101      // Ignore elements that are not in the DOM tree
102      if (!$.contains(documentElement, $elements[i][0])) {
103        continue;
104      }
105
106      var $element      = $($elements[i]),
107        elementSize   = { height: $element[0].offsetHeight, width: $element[0].offsetWidth },
108        elementOffset = $element.offset(),
109        inView        = $element.data('inview');
110
111      // Don't ask me why because I haven't figured out yet:
112      // viewportOffset and viewportSize are sometimes suddenly null in Firefox 5.
113      // Even though it sounds weird:
114      // It seems that the execution of this function is interferred by the onresize/onscroll event
115      // where viewportOffset and viewportSize are unset
116      if (!viewportOffset || !viewportSize) {
117        return;
118      }
119
120      if (elementOffset.top + elementSize.height > viewportOffset.top &&
121          elementOffset.top < viewportOffset.top + viewportSize.height &&
122          elementOffset.left + elementSize.width > viewportOffset.left &&
123          elementOffset.left < viewportOffset.left + viewportSize.width) {
124        if (!inView) {
125          $element.data('inview', true).trigger('inview', [true]);
126        }
127      } else if (inView) {
128        $element.data('inview', false).trigger('inview', [false]);
129      }
130    }
131  }
132
133  $(w).on("scroll resize scrollstop", function() {
134    viewportSize = viewportOffset = null;
135  });
136
137  // IE < 9 scrolls to focused elements without firing the "scroll" event
138  if (!documentElement.addEventListener && documentElement.attachEvent) {
139    documentElement.attachEvent("onfocusin", function() {
140      viewportOffset = null;
141    });
142  }
143}));

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.