saoulbonmonsieur/js/base.js

171 lines
No EOL
5.7 KiB
JavaScript

/****************************************/
/* global variables */
/****************************************/
//Getting the complete URL and slice it by [0] to the directory URL, return the domain name.
var urlStr = window.location.toString().slice(0, window.location.toString().lastIndexOf(window.location.pathname) + 1);
//Getting the dir name by gathering the pathname and substract it with the last '/'.
var dirStr = window.location.pathname.substring(1, window.location.pathname.lastIndexOf('/'));
//the head tag
var headTag = document.getElementsByTagName("head")[0];
//the body tag
var bodyTag = document.getElementsByTagName("body")[0];
//Global variable set to true when finished loading external html/css/js files
var finishedLoading = false;
/****************************************/
/* functions */
/****************************************/
function load(urlHTML, elementHTML, urlJS, elementJS) {
const returnPromise = new Promise((resolve, reject) => {
fetch(urlHTML).then(res => {
return res.text();
}).then(htmltext => {
return elementHTML.innerHTML = htmltext;
}).then(loadedHTML => {
loadJS(urlJS, elementJS);
resolve(elementHTML);
})
.catch(
function (err) {
reject('Could not load ' + urlHTML + ': Add the correct tag ?', err);
}
);
});
return returnPromise;
}
function loadHTML(url, element) {
fetch(url).then(res => {
return res.text();
}).then(htmltext => {
element.innerHTML = htmltext;
}).catch(
function (err) {
console.warn('Could not load ' + url + ': Add the correct tag ?', err);
}
);
}
function loadJS(url, element) {
var scriptTag = document.createElement('script');
scriptTag.src = url;
element.appendChild(scriptTag);
}
function loadCSS(url, element) {
var linkTag = document.createElement('link');
linkTag.rel = "stylesheet";
linkTag.href = url;
element.appendChild(linkTag);
}
function ready(callback) {
// in case the document is already rendered
if (document.readyState != 'loading') callback();
// modern browsers
else if (document.addEventListener) document.addEventListener('DOMContentLoaded', callback);
// IE <= 8
else document.attachEvent('onreadystatechange', function () {
if (document.readyState == 'complete') callback();
});
}
/**
* Parse each character of the given string.
* @param {string} string
* @returns number of '/' in the string
*/
function getSlashNum(string) {
var returnValue = 0;
for (char of string) {
if (char == "/") {
returnValue++;
}
}
return returnValue;
}
/**
* Will contenate a string of slash (num of parent dir) onto a given path
* @param {Int, number of slashes} slashNum
* @param {Concat String} basePath
* @returns the concatened string
*/
function concatPath(slashNum, basePath) {
var slashString = "";
for (let i = 0; i < slashNum; i++) {
slashString += "../";
}
return slashString + basePath;
}
function popUpPlacement(className) {
var popup = document.getElementsByClassName(className)[0];
var body = document.getElementsByTagName("body")[0];
body.insertBefore(popup, body.firstChild)
}
function loadingCreation() {
var elementLoadingBg = document.createElement("div");
elementLoadingBg.id="loading-bg";
var elementLoadingContainer = document.createElement("div");
elementLoadingContainer.id="loading-container";
//the text inside the container
var elementLoadingContentTxt = document.createElement("div");
elementLoadingContentTxt.className="loading-content";
var txt = document.createElement("p");
txt.innerHTML="Loading...";
elementLoadingContentTxt.appendChild(txt);
//the image inside the container
var elementLoadingContentImg = document.createElement("div");
elementLoadingContentImg.className="loading-content";
var img = document.createElement("img");
img.className = "loading-img";
img.src = urlStr+ "assets/Logo.png";
elementLoadingContentImg.appendChild(img);
//we then append all
elementLoadingContainer.append(elementLoadingContentImg);
elementLoadingContainer.append(elementLoadingContentTxt);
elementLoadingBg.append(elementLoadingContainer);
return elementLoadingBg;
}
/****************************************/
/* main */
/****************************************/
//Adding the loading bar
var loadingElement = loadingCreation();
bodyTag.insertBefore(loadingElement, bodyTag.firstChild);
//We then create the animation
var loadingAnimation = anime({
targets: '.loading-content .loading-img',
easing: 'easeOutQuint',
translateY: [
{ value: -30, duration: 1000, delay: 0 },
{ value: -30, duration: 500, delay: 0 },
{ value: 0, duration: 1000, delay: 0 }
],
loop: true
});
//Loading the html,js and css of navbar and footer
window.addEventListener('load', function () {
//instant loading
loadJS("//code.iconify.design/1/1.0.6/iconify.min.js", headTag);
loadCSS(urlStr + "css/navbar.css", headTag);
loadCSS(urlStr + "css/footer.css", headTag);
//async loading
load(urlStr + "components/navbar.html", document.getElementsByTagName("Navbar")[0], urlStr + "js/navbar.js", headTag).then(() => {
load(urlStr + "components/footer.html", document.getElementsByTagName("Footer")[0], urlStr + "js/footer.js", headTag).then(() => {
finishedLoading = true;
popUpPlacement("black-bg");
document.getElementById("loading-bg").style.display = "none";
});
});
})