Remove jQuery library and use vanilla js

This commit is contained in:
Ashley Blewer 2020-05-13 09:35:16 -04:00
parent 54577f4b28
commit 843f05cc73
2 changed files with 91 additions and 51 deletions

4
js/jquery.min.js vendored

File diff suppressed because one or more lines are too long

106
js/js.js
View File

@ -1,52 +1,96 @@
$(document).ready(function() { function scrollTo(element, to, duration) {
var start = element.scrollTop,
change = to - start,
currentTime = 0,
increment = 20;
var animateScroll = function(){
currentTime += increment;
var val = Math.easeInOutQuad(currentTime, start, change, duration);
element.scrollTop = val;
if(currentTime < duration) {
setTimeout(animateScroll, increment);
}
}
animateScroll()
}
//t = current time, b = start value, c = change in value, d = duration
Math.easeInOutQuad = function (t, b, c, d) {
t /= d/2;
if (t < 1) return c/2*t*t + b;
t--;
return -c/2 * (t*(t-2) - 1) + b;
}
function appendLink(id) { function appendLink(id) {
$(id).next('div').find('.link').empty(); let link = document.getElementById(id).nextElementSibling.querySelector('.link')
$(id).next('div').find('.link').append("<small>Link to this command: <a href='https://amiaopensource.github.io/ffmprovisr/index.html" + id + "'>https://amiaopensource.github.io/ffmprovisr/index.html" + id + "</a></small>"); if (link) {
link.innerHTML = ("<small>Link to this command: <a href='https://amiaopensource.github.io/ffmprovisr/index.html#" + id + "'>https://amiaopensource.github.io/ffmprovisr/index.html#" + id + "</a></small>")
}
} }
function moveToRecipe(id) { function moveToRecipe(id) {
document.getElementById(id.substring(1)).checked = true; document.getElementById(id).checked = true;
$('html, body').animate({ scrollTop: $(id).offset().top }, 1000); scrollTo(document.body, 0, 1000);
appendLink(id) appendLink(id)
} }
// open recipe window if a hash is found in URL // open recipe window if a hash is found in URL
if (window.location.hash) { if (window.location.hash) {
id = window.location.hash id = window.location.hash.slice(1)
moveToRecipe(id) moveToRecipe(id)
} }
// add hash URL when recipe is opened // add hash URL when recipe is opened
$('label[class="recipe"]').on("click", function(){ let recipes = document.querySelectorAll('label[class="recipe"]')
id = $(this).attr("for"); recipes.forEach(function(item, i){
window.location.hash = ('#' + id) item.addEventListener("click", function(){
appendLink('#' + id) id = this.getAttribute("for");
window.location.hash = (id)
appendLink(id)
})
}) })
// open recipe when clicked // open recipe when clicked
$('a').on("click", function(){ let links = document.querySelectorAll('a')
intralink = $(this).attr("href") links.forEach(function(item, i){
item.addEventListener("click", function(){
intralink = this.getAttribute("href")
if (intralink[0] == "#") { if (intralink[0] == "#") {
moveToRecipe(intralink) moveToRecipe(intralink.substring(1))
}
})
})
function getCheckedBoxes(checkboxes) {
var checkboxesChecked = [];
for (var i = 0; i < checkboxes.length; i++) {
if (checkboxes[i].checked) {
checkboxesChecked.push(checkboxes[i]);
}
}
return checkboxesChecked.length > 0 ? checkboxesChecked : null;
}
// Collapse all recipes when button is clicked
document.getElementById('toggle-expand-collapse-all').addEventListener("click", function(){
let checkboxes = document.querySelectorAll('input[type=checkbox]')
var checked = getCheckedBoxes(checkboxes);
if (checked) {
// Collapse all
document.querySelectorAll('input[type=checkbox]').forEach(function(item, i){
item.checked = false;
})
} else {
// Expand all
document.querySelectorAll('input[type=checkbox]').forEach(function(item, i){
item.checked = true;
})
} }
}) })
// Collapse all recipes when button is clicked
$('#toggle-expand-collapse-all').on("click", function(){
var checkboxes = $('input[type=checkbox]');
var anyRecipesOpen = $(checkboxes).is(':checked');
if (anyRecipesOpen) {
// Collapse all
$('input[type=checkbox]').each(function() {
this.checked = false;
});
} else new Promise(function(resolve, reject) {
// Expand all
$('input[type=checkbox]').each(function() {
this.checked = true;
});
});
});
});