mirror of
				https://git.proxmox.com/git/libgit2
				synced 2025-10-31 01:23:30 +00:00 
			
		
		
		
	 082e82dba5
			
		
	
	
		082e82dba5
		
	
	
	
	
		
			
			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);
 |