(function (window, document) { window.addEventListener("load", init); function init() { generateRandomPara(); clearTextareaInput(); copyTextareaInputValue(); } // generate a paragraph when generate button is clicked, and append // to the textarea input function generateRandomPara() { const generateBtn = document.querySelector('#generator__generate-btn'); const textareaInput = document.querySelector('#generator__textarea'); const wordList = [ "One Noun every day, forever", "35mm film", "aardvark", "abstract", "ape", "bag", "bagpipe", "banana", "bank", "bao", "baseball", "basketball", "bat", "beached whale", "bear", "beer", "beet", "bell", "bigfoot", "blackhole", "blueberry", "bomb", "bonsai", "boombox", "boot", "box", "boxing glove", "brain", "bubble gum", "burger", "cake", "calculator", "calendar", "camcorder", "canned ham", "car", "cash register", "cassette tape", "cat", "cd", "chain", "chainsaw", "chameleon", "chart", "cheese", "chef hat", "cherry", "chicken", "chilli", "chipboard", "chips", "chocolate", "cloud", "clover", "clutch", "coffee bean", "cone", "cookie", "cordless phone", "cotton ball", "cow", "crab", "crane", "crocodile", "crown king", "crown queen", "crt", "crystal ball", "diamond blue", "diamond red", "dictionary", "dinosaur", "dna", "dog", "doughnut", "drill", "duck", "egg", "earth", "faberge egg", "factory", "fan", "fence", "film strip", "fir", "fire hydrant", "flamingo", "flower", "fox", "frog", "garlic", "gavel", "ghost", "", "gnome", "goat", "gold coin", "goldfish", "grouper", "hair", "handheld console", "hard hat", "heart", "helicopter", "high heel", "hockey punk", "horse", "hotdog", "house", "icepop", "igloo", "island", "jellyfish", "jupiter", "kangaroo", "ketchup", "laptop", "lightning bolt", "lint", "lips", "lipstick", "lock", "macaroni", "mailbox", "maze", "microwave", "milk", "mirror", "mixer", "moon", "moose", "mosquito", "mountain", "mouse", "mug", "mushroom", "mustard", "nigiri", "noodles", "onion", "orangutan", "orca", "otter", "outlet", "owl", "oyster", "paintbrush", "panda", "paperclip", "peanut", "pencil", "peyote", "piano", "pickle", "pie", "piggybank", "pill", "pillow", "pineapple", "pipe", "pirateship", "pizza", "plane", "pop", "potato", "pufferfish", "pumpkin", "pyramid", "rabbit", "rainbow", "rangefinder", "raven", "retainer", "rgb", "ring", "road", "robot", "rock", "rosebud", "rubber ducky", "saguaro", "sailboat", "sandwich", "saturn", "saw", "scorpion", "shark", "shower", "skateboard", "skeleton", "skilift", "smile", "snowglobe", "snowmobile", "spaghetti", "speech bubble", "sponge", "squid", "stapler", "star", "steak", "sunset", "taco", "taxi", "thumbs up", "toaster", "toilet paper", "tooth", "toothbrush", "tornado", "trash can", "triangular ruler", "turing machine", "ufo", "undead", "unicorn", "vent", "void", "volcano", "volleyball", "wall", "wallet", "wallsafe", "washing machine", "watch", "watermelon", "wave", "weed", "weight", "werewolf", "whale", "wine", "wizard hat", "yeti", "zebra", "black w/ red eyes", "black rgb", "black", "blue", "frog green", "full black", "green & blue", "grey", "guava", "hip rose", "honey", "magenta", "orange", "pink & purple", "red", "smoke", "teal", "watermelon", "yellow & orange", "yellow", "beige", "beige light", "blue sky", "bluegrey", "cold", "computer blue", "dark brown", "dark pink", "fog grey", "gold", "white", "dark grey", "darker grey", "darkest grey", "green", "gunk", "hot brown", "magenta", "orange", "orange light", "peach", "peachy", "purple", "red", "pink", "rust", "slime green", "teal", "teal light", "yellow", "1n", "aardvark", "anchor necklace", "arrow", "axe", "band shirt", "beige grid", "big red stripes", "bird flying", "black shirt", "black tie", "blit stripes", "blood stains", "blue stripes", "brown stripes", "cardinal", "carrot", "cc", "chain logo", "chain necklace", "chameleon", "checker big green", "checker big red", "checker blue", "checker disco shirt", "checker grey", "checker rainbow", "checker rgb", "checker small black", "checker small blue", "checker small magenta", "checker vibrant", "checker wide black", "checker wide white", "cheese necklace", "chicken", "cloud", "clover", "clown scarf", "collar sunset", "copy", "cow", "dao", "dawn shirt", "doom", "dope", "dusk shirt", "decay", "decay pride", "dinosaur", "dollar necklace", "dragon", "ducky", "eth", "eye", "flash", "foo", "fries", "glacier shirt", "gold bar necklace", "heart", "heart necklace", "hoodie strings", "ice shirt", "ico", "id", "infinity", "insignia", "i/o", "leaf", "lightbulb", "lines green", "lines rose", "lmao", "lol", "lp", "mask necklace", "mars face", "matrix white", "mint", "moon block", "nil", "noun", "noun green", "nouns glasses", "olive stripes", "pi", "pop", "pizza necklace", "pocket pencil", "pride shirt", "purple tie", "red/pink shirt", "rain", "rainbow steps", "red stripes", "rgb", "rings", "robot", "rofl", "scissors", "sparkles", "sunset shirt", "safety vest", "shrimp", "slime splat", "snowflake", "stripes & checks", "sunset", "taxi", "think", "tie dye", "text", "we", "yay", "wall", "wave", "wet money", "wool weave", "xcopy x", "yolo", "yin & yang", "yo shirt", "zombie stains", ]; generateBtn.addEventListener("click", function () { const generatedParaArr = []; // loop through a random number between 30 and 60 // and push randomly a word from the wordsList array for (let i = 0; i <= randomNumBetween(60, 120); i++) { const randomWord = wordList[randomNumBetween(0, wordList.length - 1)]; generatedParaArr.push(randomWord); // insert punctual characters randomly if (randomNumBetween(1, 30) % randomNumBetween(1, 30) === 3) { generatedParaArr.push(","); } } // if a punctual character is at the end of the array if ( generatedParaArr[generatedParaArr.length - 1] === "." || generatedParaArr[generatedParaArr.length - 1] === "?" || generatedParaArr[generatedParaArr.length - 1] === "!" ) { // append newline character generatedParaArr.push("\n\n"); } else if (generatedParaArr[generatedParaArr.length - 1] === ",") { generatedParaArr.pop(); generatedParaArr.push(".\n\n"); } else { // append a perido and a newline character generatedParaArr.push(".\n\n"); } // join the generatedParaArr, and replace any " " // with "" --> removing the space before the punctual // character let generatedParaString = generatedParaArr .join(" ") .replaceAll(" ,", ",") .replaceAll(" ?", "?") .replaceAll(" !", "!") .replaceAll(" .", "."); // append the generated string to the textarea input textareaInput.value += generatedParaString.charAt(0).toUpperCase() + generatedParaString.slice(1); // Capitalize the first letter of the first word }); } // clear the textarea input function clearTextareaInput() { const clearBtn = document.querySelector('#generator__clear-btn'); const textareaInput = document.querySelector('#generator__textarea'); clearBtn.addEventListener("click", function () { textareaInput.value = ""; }); } // copy textarea input's value function copyTextareaInputValue() { const copyBtn = document.querySelector('#generator__copy-btn'); const textareaInput = document.querySelector('#generator__textarea'); copyBtn.addEventListener("click", function () { const textareaInputValue = textareaInput.value; navigator.clipboard.writeText(textareaInputValue); }); } // get radom number between min and max function randomNumBetween(min, max) { return Math.floor(Math.random() * (max - min + 1) + min); } })(window, document);