Skip to content

Commit

Permalink
Incorporate PreTeXtBook "JS_lib" repository into "js_lib" directory
Browse files Browse the repository at this point in the history
git-subtree-dir: js_lib
git-subtree-mainline: 1ad9112
git-subtree-split: 290a9d7
  • Loading branch information
rbeezer committed Jan 18, 2024
2 parents 1ad9112 + 290a9d7 commit cc768a1
Show file tree
Hide file tree
Showing 6 changed files with 860 additions and 0 deletions.
195 changes: 195 additions & 0 deletions js_lib/jquery.espy.min.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,195 @@

(function(b, u, v) {
function x(b, f, e) {
b = (b + "").match(/^(-?[0-9]+)(%)?$/);
if (!b) return !1;
var c = parseInt(b[1], 10);
b[2] && (c *= f / 100);
return 0 > c ? f + c + (e || 0) : c
}

function y(k, f) {
function e() {
function b() {
g = +new Date;
f.apply(e, t);
c && (c = clearTimeout(c))
}
var e = this,
q = +new Date - g,
t = arguments;
c && (c = clearTimeout(c));
q > k ? b() : c = setTimeout(b, k - q)
}
var c, g = 0;
b.guid && (e.guid = f.guid = f.guid || b.guid++);
return e
}
b.Espy = function(k, f, e) {
function c(a, d) {
b.isPlainObject(a) && (d = a, a = null);
b.extend(t.prototype, d);
null !== a && (w = a)
}

function g(a) {
if (a =
q(a)) {
var d = a.$el.offset()[a.settings.horizontal ? "left" : "top"] - p.offset[a.settings.horizontal ? "left" : "top"],
h = a.$el[a.settings.horizontal ? "outerWidth" : "outerHeight"]();
b.extend(a, {
start: d,
elSize: h,
end: d + h
})
}
}

function r(a) {
// console.log("r(a) with a = ", a);
if (a === v) b.each(m, r);
else if (a = q(a)) {
var d = p[a.settings.horizontal ? "width" : "height"],
h = x(a.settings.size, d),
d = p[a.settings.horizontal ? "left" : "top"] + x(a.settings.offset, d, -h),
c = d + h,
h = a.settings.contain ? d <= a.start && c >= a.end ? "inside" : d + h / 2 > a.start + a.elSize / 2 ? a.settings.horizontal ? "left" :
"up" : a.settings.horizontal ? "right" : "down" : d > a.start && d < a.end || c > a.start && c < a.end || d <= a.start && c >= a.start || d <= a.end && c >= a.end ? "inside" : d > a.end ? a.settings.horizontal ? "left" : "up" : a.settings.horizontal ? "right" : "down";
a.state !== h && (a.state = h, "function" === typeof w && w.call(a.el, "inside" === h, h), "function" === typeof a.callback && a.callback.call(a.el, "inside" === h, h))
}
}

function s(a) {
if (m.hasOwnProperty(a)) return a;
if (b.isPlainObject(a) && m.hasOwnProperty(a.id)) return a.id;
a = b(a)[0];
var d = !1;
b.each(m, function(b,
c) {
c.el === a && (d = b)
});
return d
}

// console.log("nothing yet");
function q(a) {
return (a = s(a)) ? m[a] : !1
}
"function" !== typeof f && (e = f, f = 0);
// console.log("k was", k);
var t = function(a) {
b.extend(this, a)
},
u = function(a, d, c, e) {
this.id = a;
this.el = d;
this.$el = b(d);
this.callback = c;
this.settings = new t(e);
this.configure = function(a, d) {
b.isPlainObject(a) && (d = a, a = null);
b.extend(this.settings, d);
null !== a && (this.callback = a)
}
},
n = this,
l = b(k);
// console.log("l", l, "l==window", l[0]==window);
k = b.fn.espy.defaults;
// console.log("k is", k);
var w, m = {},
z = 0;
// because window.offset() is not defined in jQuery 3 (why?!?!?!),
// we have to treat that as a special case (DF 1/28/19)
if (l[0]==window) { offSET = { top: 0, left: 0 } }
else { offSET = l.offset() }
var p = {
top: l.scrollTop(),
left: l.scrollLeft(),
width: l.innerWidth(),
height: l.innerHeight(),
offset: offSET
/*
offset: l.offset() || {
top: 0,
left: 0
}
*/
};
// console.log("p", p);
c(f, b.extend({}, k, e));
n.add = function(a, d, c) {
b.isPlainObject(d) && (c = d, d = 0);
b(a).each(function(a, b) {
var e = s(b) || "s" + z++;
m[e] = new u(e, b, d, c);
g(e);
r(e)
})
};
n.configure = function(a, d, e) {
"function" === typeof a ? (d = a, a = null, b.isPlainObject(d) && (e = d, d = null)) : b.isPlainObject(a) ? (e = a, d = a = null) : b.isPlainObject(d) && (e = d, d = null);
null === a ? (c(d, e), b.each(m, function(a, b) {
g(b)
})) : b(a).each(function(a, b) {
var c = q(b);
c && (c.configure(d, e), g(b))
})
};
n.reload = function(a) {
a === v ? b.each(m, function() {
g(this.id)
}) :
b(a).each(function(a, b) {
var c = s(b);
c && (g(c), r(c))
})
};
n.remove = function(a) {
b(a).each(function(a, b) {
var c = s(b);
c && delete m[c]
})
};
n.destroy = function() {
l.off(".espy");
m = {};
n = v
};
n.resize = function() {
b.each(m, function() {
this.reloadOnResize && g(this)
});
p.width = l.innerWidth();
p.height = l.innerHeight();
r()
};
l.on("scroll.espy", y(k.delay, function() {
p.top = l.scrollTop();
p.left = l.scrollLeft();
r()
}));
l.on("resize.espy", y(k.delay, function() {
n.resize()
}))
};
b.fn.espy = function(k, f) {
var e, c;
e = f && f.context || u;
var g = b.data(e,
"espy") || b.data(e, "espy", new b.Espy(e));
"string" !== typeof k ? g.add(this, k, f) : (e = k, c = Array.prototype.slice.call(arguments), c[0] = this, "function" === typeof g[e] && g[e].apply(g, c));
return this
};
b.fn.espy.defaults = {
delay: 100,
context: window,
horizontal: 0,
offset: 0,
size: "100%",
contain: 0,
reloadOnResize: !0
}
})(jQuery, window);


2 changes: 2 additions & 0 deletions js_lib/jquery.min.js

Large diffs are not rendered by default.

161 changes: 161 additions & 0 deletions js_lib/jquery.sticky.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,161 @@
// Sticky Plugin v1.0.0 for jQuery
// =============
// Author: Anthony Garand
// Improvements by German M. Bravo (Kronuz) and Ruud Kamphuis (ruudk)
// Improvements by Leonardo C. Daronco (daronco)
// Created: 2/14/2011
// Date: 2/12/2012
// Website: http://labs.anthonygarand.com/sticky
// Description: Makes an element on the page stick on the screen as you scroll
// It will only set the 'top' and 'position' of your element, you
// might need to adjust the width in some cases.

(function($) {
var defaults = {
topSpacing: 0,
bottomSpacing: 0,
className: 'is-sticky',
wrapperClassName: 'sticky-wrapper',
center: false,
getWidthFrom: ''
},
$window = $(window),
$document = $(document),
sticked = [],
windowHeight = $window.height(),
scroller = function() {
var scrollTop = $window.scrollTop(),
documentHeight = $document.height(),
dwh = documentHeight - windowHeight,
extra = (scrollTop > dwh) ? dwh - scrollTop : 0;

for (var i = 0; i < sticked.length; i++) {
var s = sticked[i],
elementTop = s.stickyWrapper.offset().top,
etse = elementTop - s.topSpacing - extra;

if (scrollTop <= etse) {
if (s.currentTop !== null) {
s.stickyElement
.css('position', '')
.css('top', '');
s.stickyElement.parent().removeClass(s.className);
s.currentTop = null;
}
}
else {
var newTop = documentHeight - s.stickyElement.outerHeight()
- s.topSpacing - s.bottomSpacing - scrollTop - extra;
if (newTop < 0) {
newTop = newTop + s.topSpacing;
} else {
newTop = s.topSpacing;
}
if (s.currentTop != newTop) {
s.stickyElement
.css('position', 'fixed')
.css('top', newTop);

if (typeof s.getWidthFrom !== 'undefined') {
s.stickyElement.css('width', $(s.getWidthFrom).width());
}

s.stickyElement.parent().addClass(s.className);
s.currentTop = newTop;
}
}
}
},
resizer = function() {
windowHeight = $window.height();
},
methods = {
init: function(options) {
var o = $.extend({}, defaults, options);
return this.each(function() {
var stickyElement = $(this);

var stickyId = stickyElement.attr('id');
var wrapperId = stickyId ? stickyId + '-' + defaults.wrapperClassName : defaults.wrapperClassName
var wrapper = $('<div></div>')
.attr('id', stickyId + '-sticky-wrapper')
.addClass(o.wrapperClassName);
stickyElement.wrapAll(wrapper);

if (o.center) {
stickyElement.parent().css({width:stickyElement.outerWidth(),marginLeft:"auto",marginRight:"auto"});
}

if (stickyElement.css("float") == "right") {
stickyElement.css({"float":"none"}).parent().css({"float":"right"});
}

var stickyWrapper = stickyElement.parent();
stickyWrapper.css('height', stickyElement.outerHeight());
sticked.push({
topSpacing: o.topSpacing,
bottomSpacing: o.bottomSpacing,
stickyElement: stickyElement,
currentTop: null,
stickyWrapper: stickyWrapper,
className: o.className,
getWidthFrom: o.getWidthFrom
});
});
},
update: scroller,
unstick: function(options) {
return this.each(function() {
var unstickyElement = $(this);

var removeIdx = -1;
for (var i = 0; i < sticked.length; i++)
{
if (sticked[i].stickyElement.get(0) == unstickyElement.get(0))
{
removeIdx = i;
}
}
if(removeIdx != -1)
{
sticked.splice(removeIdx,1);
unstickyElement.unwrap();
unstickyElement.removeAttr('style');
}
});
}
};

// should be more efficient than using $window.scroll(scroller) and $window.resize(resizer):
if (window.addEventListener) {
window.addEventListener('scroll', scroller, false);
window.addEventListener('resize', resizer, false);
} else if (window.attachEvent) {
window.attachEvent('onscroll', scroller);
window.attachEvent('onresize', resizer);
}

$.fn.sticky = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method ) {
return methods.init.apply( this, arguments );
} else {
$.error('Method ' + method + ' does not exist on jQuery.sticky');
}
};

$.fn.unstick = function(method) {
if (methods[method]) {
return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
} else if (typeof method === 'object' || !method ) {
return methods.unstick.apply( this, arguments );
} else {
$.error('Method ' + method + ' does not exist on jQuery.sticky');
}

};
$(function() {
setTimeout(scroller, 0);
});
})(jQuery);
Loading

0 comments on commit cc768a1

Please sign in to comment.