function randint (from, to) { return from + Math.floor((Math.random() * (to-from))); } function choice (arr) { let ri = randint(0, arr.length-1); let ret = arr[ri]; arr.splice(ri, 1); return ret; } async function make_phrase (nn, terms, delay) { nn.querySelector(".actor").innerHTML = choice(terms['actor']); await sleep(delay); nn.querySelector(".action").innerHTML = choice(terms['action']); await sleep(delay); if (randint(0, 2) == 0) { nn.querySelector(".prefix").innerHTML = choice(terms['prefix'])+'-'; } else { nn.querySelector(".prefix").remove(); } nn.querySelector(".sort").innerHTML = choice(terms['sort']); await sleep(delay); nn.querySelector(".media").innerHTML = choice(terms['media']); } const sleep = delaysecs => new Promise(resolve => setTimeout(resolve, delaysecs*1000)); let limit = 25; async function make_phrases (json, id) { let terms = await (await fetch(json)).json(); // console.log("terms", terms); let call = document.querySelector(id); let template = call.querySelector(".phrase"); template.remove(); let count = 0; while (true) { let nn = template.cloneNode(true); call.appendChild(nn); await make_phrase(nn, terms, 0.25); if (terms['actor'].length == 0 || terms['action'].length == 0 || terms['prefix'].length == 0 || terms['sort'].length == 0 || terms['media'].length == 0) { console.log("out of terms, stopping"); break; } count += 1; if (limit > 0 && count>=limit) { break }; await (sleep(1.0)); } }