/** @type {HTMLElement} */ let beforeImage = null; /** @type {HTMLImageElement} */ let imageHolder = null; /** @type {HTMLInputElement} */ let inputText = null; /** @type {HTMLInputElement} */ let inputFontSize = null; /** @type {HTMLInputElement} */ let inputColor = null; /** @type {HTMLInputElement} */ let inputUnsplashID = null; /** * * @param {Object} data * @returns {String} */ const encodeQueryData = function (data) { const ret = []; for (let d in data) { ret.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d])); } return ret.join("&"); } const setCurrentWizardPage = function(callee) { const current = parseInt(callee.getAttribute("wizardCurrent")); const next = parseInt(callee.getAttribute("wizardNext")); console.log(!inputText.validity.valid) if (current === 1 && !inputText.validity.valid) { inputText.reportValidity(); return; } if (current === 2 && (!inputFontSize.validity.valid || !inputColor.validity.valid)) { if (!inputFontSize.validity.valid) { inputFontSize.reportValidity(); } if (!inputColor.validity.valid) { inputColor.reportValidity(); } return; } if (current === 3 && !inputUnsplashID.validity.valid) { inputUnsplashID.reportValidity(); return; } document.querySelectorAll("[wizardPage]").forEach(page => { const pageIdx = parseInt(page.getAttribute("wizardPage")); page.hidden = pageIdx !== next; }); if (next === 4) { loadImage(); } } /** * * @param {String} text * @param {Number} fontSize * @param {Number} fontWeight * @param {String} color * @param {String?} backgroundImage * @returns {String} */ const endpointTpl = (text, fontSize, color="#FFFFFF", backgroundImageId="random") => "https://img.bruzu.com/?" + encodeQueryData({ backgroundImage: `https://source.unsplash.com/${backgroundImageId}/500x500?hash=${Date.now()}`, "a.text": text, "a.color": color, "a.fontFamily": "Poppins", "a.fontSize": fontSize, "a.width": 450, }); const loadImage = async function () { const text = inputText.value; const fontSize = parseInt(inputFontSize.value); const color = inputColor.value; const backgroundImageId = inputUnsplashID.value; const imageUri = endpointTpl(text, fontSize, color, backgroundImageId); try { const resp = await fetch(imageUri); const imageBlob = await resp.blob(); const imageObjectURL = URL.createObjectURL(imageBlob); beforeImage.hidden = true imageHolder.children[0].src = imageObjectURL; imageHolder.hidden = false; } catch (e) { alert(`Произошла ошибка: ${e}`); location.reload(); } } const init = function () { beforeImage = document.getElementById("beforeImage"); imageHolder = document.getElementById("imageHolder"); inputText = document.getElementById("inputText"); inputFontSize = document.getElementById("inputFontSize"); inputColor = document.getElementById("inputColor"); inputUnsplashID = document.getElementById("inputUnsplashID"); document.querySelectorAll("[wizardNext]").forEach(e => e.addEventListener("click", setCurrentWizardPage.bind(window, e))) } document.addEventListener("DOMContentLoaded", init);