PageSourceSearch

https://www.ashqelon.net/Scripts/OldJs/jquery.sticky-kit.js?v=1.1.2

js ashqelon.net collected 2026-09-24 20:07:14 UTC 8,090 bytes, 251 lines download raw bytes

vendor: 8,090 bytes, lines 1-251
1// Generated by CoffeeScript 1.9.2
2
3/**
4@license Sticky-kit v1.1.2 | WTFPL | Leaf Corcoran 2015 | http://leafo.net
5 */
6
7(function() {
8  var $, win;
9
10  $ = this.jQuery || window.jQuery;
11
12  win = $(window);
13
14  $.fn.stick_in_parent = function(opts) {
15    var doc, elm, enable_bottoming, fn, i, inner_scrolling, len, manual_spacer, offset_top, parent_selector, recalc_every, sticky_class;
16    if (opts == null) {
17      opts = {};
18    }
19    sticky_class = opts.sticky_class, inner_scrolling = opts.inner_scrolling, recalc_every = opts.recalc_every, parent_selector = opts.parent, offset_top = opts.offset_top, manual_spacer = opts.spacer, enable_bottoming = opts.bottoming;
20    if (offset_top == null) {
21      offset_top = 0;
22    }
23    if (parent_selector == null) {
24      parent_selector = void 0;
25    }
26    if (inner_scrolling == null) {
27      inner_scrolling = true;
28    }
29    if (sticky_class == null) {
30      sticky_class = "is_stuck";
31    }
32    doc = $(document);
33    if (enable_bottoming == null) {
34      enable_bottoming = true;
35    }
36    fn = function(elm, padding_bottom, parent_top, parent_height, top, height, el_float, detached) {
37      var bottomed, detach, fixed, last_pos, last_scroll_height, offset, parent, recalc, recalc_and_tick, recalc_counter, spacer, tick;
38      if (elm.data("sticky_kit")) {
39        return;
40      }
41      elm.data("sticky_kit", true);
42      last_scroll_height = doc.height();
43      parent = elm.parent();
44      if (parent_selector != null) {
45        parent = parent.closest(parent_selector);
46      }
47      if (!parent.length) {
48        throw "failed to find stick parent";
49      }
50      fixed = false;
51      bottomed = false;
52      spacer = manual_spacer != null ? manual_spacer && elm.closest(manual_spacer) : $("<div />");
53      if (spacer) {
54        spacer.css('position', elm.css('position'));
55      }
56      recalc = function() {
57        var border_top, padding_top, restore;
58        if (detached) {
59          return;
60        }
61        last_scroll_height = doc.height();
62        border_top = parseInt(parent.css("border-top-width"), 10);
63        padding_top = parseInt(parent.css("padding-top"), 10);
64        padding_bottom = parseInt(parent.css("padding-bottom"), 10);
65        parent_top = parent.offset().top + border_top + padding_top;
66        parent_height = parent.height();
67        if (fixed) {
68          fixed = false;
69          bottomed = false;
70          if (manual_spacer == null) {
71            elm.insertAfter(spacer);
72            spacer.detach();
73          }
74          elm.css({
75            position: "",
76            top: "",
77            width: "",
78            bottom: ""
79          }).removeClass(sticky_class);
80          restore = true;
81        }
82        top = elm.offset().top - (parseInt(elm.css("margin-top"), 10) || 0) - offset_top;
83        height = elm.outerHeight(true);
84        el_float = elm.css("float");
85        if (spacer) {
86          spacer.css({
87            width: elm.outerWidth(true),
88            height: height,
89            display: elm.css("display"),
90            "vertical-align": elm.css("vertical-align"),
91            "float": el_float
92          });
93        }
94        if (restore) {
95          return tick();
96        }
97      };
98      recalc();
99      if (height === parent_height) {
100        return;
101      }
102      last_pos = void 0;
103      offset = offset_top;
104      recalc_counter = recalc_every;
105      tick = function() {
106        var css, delta, recalced, scroll, will_bottom, win_height;
107        if (detached) {
108          return;
109        }
110        recalced = false;
111        if (recalc_counter != null) {
112          recalc_counter -= 1;
113          if (recalc_counter <= 0) {
114            recalc_counter = recalc_every;
115            recalc();
116            recalced = true;
117          }
118        }
119        if (!recalced && doc.height() !== last_scroll_height) {
120          recalc();
121          recalced = true;
122        }
123        scroll = win.scrollTop();
124        if (last_pos != null) {
125          delta = scroll - last_pos;
126        }
127        last_pos = scroll;
128        if (fixed) {
129          if (enable_bottoming) {
130            will_bottom = scroll + height + offset > parent_height + parent_top;
131            if (bottomed && !will_bottom) {
132              bottomed = false;
133              elm.css({
134                position: "fixed",
135                bottom: "",
136                top: offset
137              }).trigger("sticky_kit:unbottom");
138            }
139          }
140          if (scroll < top) {
141            fixed = false;
142            offset = offset_top;
143            if (manual_spacer == null) {
144              if (el_float === "left" || el_float === "right") {
145                elm.insertAfter(spacer);
146              }
147              spacer.detach();
148            }
149            css = {
150              position: "",
151              width: "",
152              top: ""
153            };
154            elm.css(css).removeClass(sticky_class).trigger("sticky_kit:unstick");
155          }
156          if (inner_scrolling) {
157            win_height = win.height();
158            if (height + offset_top > win_height) {
159              if (!bottomed) {
160                offset -= delta;
161                offset = Math.max(win_height - height, offset);
162                offset = Math.min(offset_top, offset);
163                if (fixed) {
164                  elm.css({
165                    top: offset + "px"
166                  });
167                }
168              }
169            }
170          }
171        } else {
172          if (scroll > top) {
173            fixed = true;
174            css = {
175              position: "fixed",
176              top: offset
177            };
178            css.width = elm.css("box-sizing") === "border-box" ? elm.outerWidth() + "px" : elm.width() + "px";
179            elm.css(css).addClass(sticky_class);
180            if (manual_spacer == null) {
181              elm.after(spacer);
182              if (el_float === "left" || el_float === "right") {
183                spacer.append(elm);
184              }
185            }
186            elm.trigger("sticky_kit:stick");
187          }
188        }
189        if (fixed && enable_bottoming) {
190          if (will_bottom == null) {
191            will_bottom = scroll + height + offset > parent_height + parent_top;
192          }
193          if (!bottomed && will_bottom) {
194            bottomed = true;
195            if (parent.css("position") === "static") {
196              parent.css({
197                position: "relative"
198              });
199            }
200            return elm.css({
201              position: "absolute",
202              bottom: padding_bottom,
203              top: "auto"
204            }).trigger("sticky_kit:bottom");
205          }
206        }
207      };
208      recalc_and_tick = function() {
209        recalc();
210        return tick();
211      };
212      detach = function() {
213        detached = true;
214        win.off("touchmove", tick);
215        win.off("scroll", tick);
216        win.off("resize", recalc_and_tick);
217        $(document.body).off("sticky_kit:recalc", recalc_and_tick);
218        elm.off("sticky_kit:detach", detach);
219        elm.removeData("sticky_kit");
220        elm.css({
221          position: "",
222          bottom: "",
223          top: "",
224          width: ""
225        });
226        parent.position("position", "");
227        if (fixed) {
228          if (manual_spacer == null) {
229            if (el_float === "left" || el_float === "right") {
230              elm.insertAfter(spacer);
231            }
232            spacer.remove();
233          }
234          return elm.removeClass(sticky_class);
235        }
236      };
237      win.on("touchmove", tick);
238      win.on("scroll", tick);
239      win.on("resize", recalc_and_tick);
240      $(document.body).on("sticky_kit:recalc", recalc_and_tick);
241      elm.on("sticky_kit:detach", detach);
242      return setTimeout(tick, 0);
243    };
244    for (i = 0, len = this.length; i < len; i++) {
245      elm = this[i];
246      fn($(elm));
247    }
248    return this;
249  };
250
251}).call(this);

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.