mirror of
https://git.proxmox.com/git/libgit2
synced 2025-05-06 07:47:18 +00:00

Writing a sample Javascript driver pointed out some extra whitespace handling that needed to be done in the diff driver. This adds some tests with some sample javascript code that I pulled off of GitHub just to see what would happen. Also, to clean up the userdiff test data, I did a "git gc" and packed up the test objects.
110 lines
2.7 KiB
JavaScript
110 lines
2.7 KiB
JavaScript
/*
|
|
Some code extracted from https://github.com/julianlloyd/scrollReveal.js
|
|
which happens to be a trending Javascript repo with an MIT license at
|
|
the time I was working on Javascript userdiff support in libgit2
|
|
|
|
I extracted just some of the code, so I suspect this is no longer valid
|
|
Javascript code, but it contains enough example patterns to work.
|
|
*/
|
|
;(function (window) {
|
|
|
|
'use strict';
|
|
|
|
var docElem = window.document.documentElement;
|
|
|
|
function getViewportH () {
|
|
var client = docElem['clientHeight'],
|
|
inner = window['innerHeight'];
|
|
|
|
return (client < inner) ? inner : client;
|
|
}
|
|
|
|
function getOffset (el) {
|
|
var offsetTop = 0,
|
|
offsetLeft = 0;
|
|
|
|
do {
|
|
if (!isNaN(el.offsetTop)) {
|
|
offsetTop += el.offsetTop;
|
|
}
|
|
if (!isNaN(el.offsetLeft)) {
|
|
offsetLeft += el.offsetLeft;
|
|
}
|
|
} while (el = el.offsetParent)
|
|
|
|
return {
|
|
top: offsetTop,
|
|
left: offsetLeft
|
|
}
|
|
}
|
|
|
|
function isElementInViewport (el, h) {
|
|
var scrolled = window.pageYOffset,
|
|
viewed = scrolled + getViewportH(),
|
|
elH = el.offsetHeight,
|
|
elTop = getOffset(el).top,
|
|
elBottom = elTop + elH,
|
|
h = h || 0;
|
|
|
|
return (elTop + elH * h) <= viewed && (elBottom) >= scrolled;
|
|
}
|
|
|
|
scrollReveal.prototype = {
|
|
|
|
_init: function () {
|
|
|
|
var self = this;
|
|
|
|
this.elems = Array.prototype.slice.call(docElem.querySelectorAll('[data-scrollReveal]'));
|
|
this.scrolled = false;
|
|
|
|
// Initialize all scrollreveals, triggering all
|
|
// reveals on visible elements.
|
|
this.elems.forEach(function (el, i) {
|
|
self.animate(el);
|
|
});
|
|
|
|
var scrollHandler = function () {
|
|
if (!self.scrolled) {
|
|
self.scrolled = true;
|
|
setTimeout(function () {
|
|
self._scrollPage();
|
|
}, 60);
|
|
}
|
|
};
|
|
|
|
var resizeHandler = function () {
|
|
function delayed() {
|
|
self._scrollPage();
|
|
self.resizeTimeout = null;
|
|
}
|
|
if (self.resizeTimeout) {
|
|
clearTimeout(self.resizeTimeout);
|
|
}
|
|
self.resizeTimeout = setTimeout(delayed, 200);
|
|
};
|
|
|
|
window.addEventListener('scroll', scrollHandler, false);
|
|
window.addEventListener('resize', resizeHandler, false);
|
|
},
|
|
|
|
/*=============================================================================*/
|
|
|
|
_scrollPage: function () {
|
|
var self = this;
|
|
|
|
this.elems.forEach(function (el, i) {
|
|
if (isElementInViewport(el, self.options.viewportFactor)) {
|
|
self.animate(el);
|
|
}
|
|
});
|
|
this.scrolled = false;
|
|
},
|
|
}; // end scrollReveal.prototype
|
|
|
|
document.addEventListener("DOMContentLoaded", function (evt) {
|
|
window.scrollReveal = new scrollReveal();
|
|
});
|
|
|
|
})(window);
|