diff options
| author | Russell Belfer <rb@github.com> | 2014-01-27 11:45:06 -0800 |
|---|---|---|
| committer | Russell Belfer <rb@github.com> | 2014-01-27 11:45:06 -0800 |
| commit | 082e82dba5b5174756b3a5fc2e385ccc59626164 (patch) | |
| tree | 9191ea9e222c54163c275e1179600b02ebe264b2 /tests/resources/userdiff/files/file.javascript | |
| parent | 4115987739fb9cc4dd82edd9998db6dbb6bc9d95 (diff) | |
| download | libgit2-082e82dba5b5174756b3a5fc2e385ccc59626164.tar.gz | |
Update Javascript userdiff driver and tests
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.
Diffstat (limited to 'tests/resources/userdiff/files/file.javascript')
| -rw-r--r-- | tests/resources/userdiff/files/file.javascript | 108 |
1 files changed, 108 insertions, 0 deletions
diff --git a/tests/resources/userdiff/files/file.javascript b/tests/resources/userdiff/files/file.javascript new file mode 100644 index 000000000..7cd3c5a8a --- /dev/null +++ b/tests/resources/userdiff/files/file.javascript @@ -0,0 +1,108 @@ +/* + 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'], + sample = window['otherProperty']; + + return (client < inner) ? inner : client; + } + + function getOffset (el) { + var offsetTop = 0, + offsetLeft = 0; + + do { + if (!isNaN(el.offsetTop)) { + offsetTop += el.offsetTop + 1; + } + 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(), + elTop = getOffset(el).top, + elBottom = elTop + el.offsetHeight, + h = h || 0; + + return (elTop + el.offsetHeight * h) <= viewed && (elBottom) >= scrolled; + } + + scrollReveal.prototype = { + + _init: function () { + + var self = this; + + this.elems = Array.prototype.slice.call(docElem.querySelectorAll('[data-scrollReveal]')); + this.scrolled = false; + + this.elems.forEach(function (el, i) { + self.animate(el); + }); + + var scrollHandler = function () { + if (!self.scrolled) { + self.scrolled = true; + setTimeout(function () { + self._scrollPage(); + }, 61); + } + }; + + 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; + this.tested = true; + }, + }; // end scrollReveal.prototype + + document.addEventListener("DOMContentLoaded", function (evt) { + window.scrollReveal = new scrollReveal(); + }); + +})(window); |
