const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));
+const getGenres = (lStorage) => {
+ return new Promise((resolve) => {
+ const genres = JSON.parse(lStorage.getItem("genres"))
+ if (genres === null) {
+ fetch("http://api.brackets.jacobcasper.com/genre")
+ .then((response) => response.text())
+ .then((text) => {
+ lStorage.setItem("genres", text);
+ resolve(JSON.parse(text));
+ })
+ } else {
+ resolve(genres);
+ }
+ });
+}
+
/**
* Safari iOS pls
*/
const createGenreListWithClickEvent = (genreList, genres, callback) => {
genreList.append(...genres.map((genre) => {
const name = genre["name"];
- const li = document.createElement("li");
- li.setAttribute("data-name", name);
- li.addEventListener("click", callback);
- li.appendChild(document.createTextNode(name));
- return li;
+ const option = document.createElement("option");
+ option.setAttribute("data-name", name);
+ option.addEventListener("click", callback);
+ option.appendChild(document.createTextNode(name));
+ return option;
}));
}
const drawBranchUp = (xDist, yDist) => drawBranchFrom(ctx, x, y, xDist, yDist, left, -1);
const drawBranchDown = (xDist, yDist) => drawBranchFrom(ctx, x, y, xDist, yDist, left, 1);
const drawArtist = (artistName, x, y) => drawArtistOnCtx(ctx, artistName, x, y);
- const drawArtist1 = (x, y) => drawArtist(artists.shift()["name"], x, y);
- const drawArtist2 = (x, y) => drawArtist(artists.pop()["name"], x, y);
+ const drawArtist1 = (x, y) => {
+ const artist1 = artists.shift();
+ if (!artist1) {
+ return;
+ }
+ drawArtist(artist1["name"], x, y);
+ }
+
+ const drawArtist2 = (x, y) => {
+ const artist2 = artists.pop();
+ if (!artist2) {
+ return;
+ }
+ drawArtist(artist2["name"], x, y);
+ }
ctx.beginPath();
ctx.moveTo(x, y);
drawWinner(canvas);
const [mid_x, mid_y] = getCenter(canvas);
context.font = '28px sans serif'
- context.strokeText(genre.toUpperCase(), mid_x - (28 * (genre.length / 3)), 40);
+ context.textAlign = "center";
+ context.strokeText(genre.toUpperCase(), mid_x, 40);
+ context.textAlign = "start";
const [rect_width, rect_height] = getRectangleDimensions(canvas);
const groups = 4;
- const rounds = Math.floor(Math.log2(artists.length / groups));
+ const rounds = Math.max(
+ Math.floor(Math.log2(artists.length / groups)),
+ 1
+ );
for (let group = 1; group <= groups; group++) {
+ if (artists.length === 0) {
+ break;
+ }
drawMatchup(
canvas,
mid_x + (Math.pow(-1, group) * (rect_width / 6)),
const genreForm = document.getElementById("genre-form");
const canvas = document.getElementById("bracket");
- const formSubmitAction = () => {
- fetch(encodeURI(`http://api.brackets.jacobcasper.com/artist/genre?genre_name=${genreInput.value}`))
- .then((response) => response.json())
- .then((data) => drawBracket(canvas, data.slice(0, 33), genreInput.value));
- }
+ const genreFormSubmitPolyfill = () => formSubmitPolyfill(genreList, formSubmitAction)
const createGenreList = (genreList, genres) => {
return createGenreListWithClickEvent(genreList, genres, (e) => {
genreInput.value = e.target.innerText;
- formSubmitPolyfill(genreForm, formSubmitAction);
+ genreFormSubmitPolyfill()
})
}
- let genres = JSON.parse(lStorage.getItem("genres"))
- if (genres === null) {
- fetch("http://api.brackets.jacobcasper.com/genre")
- .then((response) => response.text())
- .then((text) => {
- window.localStorage.setItem("genres", text);
- genres = JSON.parse(text);
- createGenreList(genreList, genres);
- });
- } else {
- createGenreList(genreList, genres);
+
+ const genres = getGenres(lStorage)
+ .then((genres) => createGenreList(genreList, genres));
+
+ const formSubmitAction = () => {
+ fetch(encodeURI(`http://api.brackets.jacobcasper.com/artist/genre?genre_name=${genreInput.value}`))
+ .then((response) => response.json())
+ .then((data) => drawBracket(canvas, data.slice(0, 33), genreInput.value));
}
genreForm.addEventListener("submit", (e) => {
formSubmitAction()
});
- genreInput.addEventListener("input", (e) => {
- const input = e.target;
- Array.from(genreList.children).forEach((item) => item.style.display= item.dataset.name.includes(input.value.toLowerCase()) ? "block" : "none");
- });
- genreInput.addEventListener("focus", (e) => {
- genreList.style.display = "block";
- });
- genreInput.addEventListener("blur", (e) => {
- sleep(150).then(() => genreList.style.display = "none");
+ genreInput.addEventListener("change", (e) => {
+ genreFormSubmitPolyfill()
});
canvas.width = window.innerWidth;
canvas.height = window.innerHeight;
- drawBracket(canvas, ['dummy', 'dummy', 'dum' ,'dumhy'], "");
+ drawBracket(canvas, [], "");
const bgImg = new Image();
bgImg.onload = () => {
const ctx = canvas.getContext("2d");
- //ctx.mozImageSmoothingEnabled = false;
- //ctx.webkitImageSmoothingEnabled = false;
- //ctx.msImageSmoothingEnabled = false;
- //ctx.imageSmoothingEnabled = false;
ctx.drawImage(
bgImg,
0,