PageSourceSearch

https://hue.gov.vn/Portals/_default/skins/congttdt/assets/js/jquery.appear.js?cdv=427

js hue.gov.vn collected 2026-10-02 18:39:03 UTC 2,857 bytes, 120 lines download raw bytes

1(function ($) {
2  var selectors = [];
3
4  var checkBinded = false;
5  var checkLock = false;
6  var defaults = {
7    interval: 250,
8    force_process: false
9  };
10  var $window = $(window);
11
12  var $priorAppeared = [];
13
14  function isAppeared() {
15    return $(this).is(':appeared');
16  }
17
18  function isNotTriggered() {
19    return !$(this).data('_appear_triggered');
20  }
21
22  function process() {
23    checkLock = false;
24
25    for (var index = 0, selectorsLength = selectors.length; index < selectorsLength; index++) {
26      var $appeared = $(selectors[index]).filter(isAppeared);
27
28      $appeared
29        .filter(isNotTriggered)
30        .data('_appear_triggered', true)
31        .trigger('appear', [$appeared]);
32
33      if ($priorAppeared[index]) {
34        var $disappeared = $priorAppeared[index].not($appeared);
35        $disappeared
36          .data('_appear_triggered', false)
37          .trigger('disappear', [$disappeared]);
38      }
39      $priorAppeared[index] = $appeared;
40    }
41  }
42
43  function addSelector(selector) {
44    selectors.push(selector);
45    $priorAppeared.push();
46  }
47
48  // ":appeared" custom filter
49  $.expr.pseudos.appeared = $.expr.createPseudo(function (_arg) {
50    return function (element) {
51      var $element = $(element);
52
53      if (!$element.is(':visible')) {
54        return false;
55      }
56
57      var windowLeft = $window.scrollLeft();
58      var windowTop = $window.scrollTop();
59      var offset = $element.offset();
60      var left = offset.left;
61      var top = offset.top;
62
63      if (top + $element.height() >= windowTop &&
64          top - ($element.data('appear-top-offset') || 0) <= windowTop + $window.height() &&
65          left + $element.width() >= windowLeft &&
66          left - ($element.data('appear-left-offset') || 0) <= windowLeft + $window.width()) {
67        return true;
68      }
69      return false;
70    };
71  });
72
73  $.fn.extend({
74    // watching for element's appearance in browser viewport
75    appear: function (selector, options) {
76      $.appear(this, options);
77      return this;
78    }
79  });
80
81  $.extend({
82    appear: function (selector, options) {
83      var opts = $.extend({}, defaults, options || {});
84
85      if (!checkBinded) {
86        var onCheck = function () {
87          if (checkLock) {
88            return;
89          }
90          checkLock = true;
91
92          setTimeout(process, opts.interval);
93        };
94
95        $(window).scroll(onCheck).resize(onCheck);
96        checkBinded = true;
97      }
98
99      if (opts.force_process) {
100        setTimeout(process, opts.interval);
101      }
102
103      addSelector(selector);
104    },
105    // force elements's appearance check
106    force_appear: function () {
107      if (checkBinded) {
108        process();
109        return true;
110      }
111      return false;
112    }
113  });
114}(function () {
115  if (typeof module !== 'undefined') {
116    // Node
117    return require('jquery');
118  }
119  return jQuery;
120}()));

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.