forked from website/openpower.foundation
				
			
			You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
			
		
		
	
	
			98 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			JavaScript
		
	
(function() {
 | 
						|
const changelog = document.querySelector(".changelog ol"),
 | 
						|
elH = document.querySelectorAll(".changelog li > div"),
 | 
						|
arrows = document.querySelectorAll(".changelog .arrows .arrow"),
 | 
						|
arrowPrev = document.querySelector(".changelog .arrows .arrow__prev"),
 | 
						|
arrowNext = document.querySelector(".changelog .arrows .arrow__next"),
 | 
						|
firstItem = document.querySelector(".changelog li:first-child"),
 | 
						|
lastItem = document.querySelector(".changelog li:last-child"),
 | 
						|
xScrolling = 280,
 | 
						|
disabledClass = "disabled";
 | 
						|
window.addEventListener("load", init);
 | 
						|
function init() {
 | 
						|
	setEqualHeights(elH);
 | 
						|
	animateTl(xScrolling, arrows, changelog);
 | 
						|
	setSwipeFn(changelog, arrowPrev, arrowNext);
 | 
						|
	setKeyboardFn(arrowPrev, arrowNext);
 | 
						|
}
 | 
						|
function setEqualHeights(el) {
 | 
						|
	let counter = 0;
 | 
						|
	for (let i = 0; i < el.length; i++) {
 | 
						|
		const singleHeight = el[i].offsetHeight;
 | 
						|
		if (counter < singleHeight) {
 | 
						|
			counter = singleHeight;
 | 
						|
		}
 | 
						|
	}
 | 
						|
	for (let i = 0; i < el.length; i++) {
 | 
						|
		el[i].style.height = `${counter}px`;
 | 
						|
	}
 | 
						|
}
 | 
						|
function isElementInViewport(el) {
 | 
						|
	const rect = el.getBoundingClientRect();
 | 
						|
	return (
 | 
						|
		rect.top >= 0 &&
 | 
						|
		rect.left >= 0 &&
 | 
						|
		rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) &&
 | 
						|
		rect.right <= (window.innerWidth || document.documentElement.clientWidth)
 | 
						|
	);
 | 
						|
}
 | 
						|
function setBtnState(el, flag = true) {
 | 
						|
	if (flag) {
 | 
						|
		el.classList.add(disabledClass);
 | 
						|
	} else {
 | 
						|
		if (el.classList.contains(disabledClass)) {
 | 
						|
			el.classList.remove(disabledClass);
 | 
						|
		}
 | 
						|
		el.disabled = false;
 | 
						|
	}
 | 
						|
}
 | 
						|
function animateTl(scrolling, el, tl) {
 | 
						|
	let counter = 0;
 | 
						|
	for (let i = 0; i < el.length; i++) {
 | 
						|
		el[i].addEventListener("click", function() {
 | 
						|
			if (!arrowPrev.disabled) {
 | 
						|
				arrowPrev.disabled = true;
 | 
						|
			}
 | 
						|
			if (!arrowNext.disabled) {
 | 
						|
				arrowNext.disabled = true;
 | 
						|
			}
 | 
						|
			const sign = (this.classList.contains("arrow__prev")) ? "" : "-";
 | 
						|
			if (counter === 0) {
 | 
						|
				tl.style.transform = `translateX(-${scrolling}px)`;
 | 
						|
			} else {
 | 
						|
				const tlStyle = getComputedStyle(tl);
 | 
						|
				const tlTransform = tlStyle.getPropertyValue("-webkit-transform") || tlStyle.getPropertyValue("transform");
 | 
						|
				const values = parseInt(tlTransform.split(",")[4]) + parseInt(`${sign}${scrolling}`);
 | 
						|
				tl.style.transform = `translateX(${values}px)`;
 | 
						|
			}
 | 
						|
			setTimeout(() => {
 | 
						|
				isElementInViewport(firstItem) ? setBtnState(arrowPrev) : setBtnState(arrowPrev, false);
 | 
						|
				isElementInViewport(lastItem) ? setBtnState(arrowNext) : setBtnState(arrowNext, false);
 | 
						|
			}, 1100);
 | 
						|
			counter++;
 | 
						|
		});
 | 
						|
	}
 | 
						|
}
 | 
						|
function setSwipeFn(tl, prev, next) {
 | 
						|
	const hammer = new Hammer(tl);
 | 
						|
	hammer.on("swipeleft", () => next.click());
 | 
						|
	hammer.on("swiperight", () => prev.click());
 | 
						|
}
 | 
						|
function setKeyboardFn(prev, next) {
 | 
						|
	document.addEventListener("keydown", (e) => {
 | 
						|
		if ((e.which === 37) || (e.which === 39)) {
 | 
						|
			const changelogOfTop = changelog.offsetTop;
 | 
						|
			const y = window.pageYOffset;
 | 
						|
			if (changelogOfTop !== y) {
 | 
						|
				window.scrollTo(0, changelogOfTop);
 | 
						|
			}
 | 
						|
			if (e.which === 37) {
 | 
						|
				prev.click();
 | 
						|
			} else if (e.which === 39) {
 | 
						|
				next.click();
 | 
						|
			}
 | 
						|
		}
 | 
						|
	});
 | 
						|
}
 | 
						|
})();
 |