this repo has no description yoyle.city
nekoweb html css javascript astro
at main 250 lines 9.3 kB view raw
1let angleIndex = 0; 2let angleToggleIndex = 0; 3let outfitIndex = 0; 4const titleArea = document.getElementById("title") 5const dataSection = document.getElementById("dataSection") 6const infoTable = document.getElementById("infoTable") 7const colorTable = document.getElementById("colorTable") 8const anglePic = document.getElementById("angleguy") 9const angleForm = document.getElementById("angleToggles") 10const outfitPic = document.getElementById("outfitguy") 11const angleTxt = document.getElementById("anglesText") 12const outfitTxt = document.getElementById("outfitsText") 13const angleSel = document.getElementById("angleSelector") 14const outfitSel = document.getElementById("outfitSelector") 15const hideMyAss = document.getElementById("hidetext") 16const titles = [ 17 document.getElementById("anglesTitle"), 18 document.getElementById("outfitsTitle"), 19 document.getElementById("dataTitle"), 20] 21 22function preloadEverything() { 23 var images = []; 24 function preload() { 25 for (var i = 0; i < arguments.length; i++) { 26 images[i] = new Image(); 27 images[i].src = preload.arguments[i]; 28 } 29 } 30 for (let i = 0; i < angles.length; i++) { 31 preload(angles[i][1]); 32 for (let j = 1; j < angleToggles.length; j++) { 33 preload(`${(angles[i][1]).slice(0, -4)}_${angleToggles[j]}.png`); 34 } 35 } 36 for (let i = 0; i < outfits.length; i++) { 37 preload(outfits[i][1]); 38 } 39} 40 41function changeAngleToggle(val) { 42 angleToggleIndex = val; 43 updateImages(); 44} 45function spawnInThings() { 46 updateImages(); 47 for (let i = 0; i < 3; i++) { 48 console.log(titles[i]); 49 console.log(headers[i]); 50 if (headers[i] == "") { 51 titles[i].style.display = "none"; 52 } else { 53 titles[i].innerText = headers[i]; 54 } 55 } 56 if (angles.length == 1) { 57 document.getElementById("butt1").style.display = "none"; 58 document.getElementById("butt2").style.display = "none"; 59 angleSel.classList.add("single-item") 60 } 61 if (outfits.length == 1) { 62 document.getElementById("butt3").style.display = "none"; 63 document.getElementById("butt4").style.display = "none"; 64 outfitSel.classList.add("single-item") 65 } 66 for (let i = 0; i < (info.length); i++) { 67 if (info[i][1] == "h") { 68 const newRow = document.createElement("tr"); 69 const newHeading = document.createElement("td"); 70 newHeading.colSpan = 2; 71 newHeading.classList.add("tableSeparator") 72 const newHeadingContent = document.createTextNode(info[i][0]); 73 newHeading.appendChild(newHeadingContent); 74 newRow.appendChild(newHeading); 75 infoTable.appendChild(newRow); 76 } else if (info[i][1] == "l") { 77 const tr = document.createElement("tr"); 78 const th = document.createElement("th"); 79 th.innerText = info[i][0]; 80 tr.appendChild(th); 81 const td = document.createElement("td"); 82 const list = document.createElement("ul"); 83 for (let j = 0; j < info[i][2].length; j++) { 84 const listItem = document.createElement("li"); 85 listItem.innerText = info[i][2][j]; 86 list.appendChild(listItem); 87 } 88 td.appendChild(list); 89 tr.appendChild(td); 90 infoTable.appendChild(tr); 91 } else if (info[i][1] == "n") { 92 const tr = document.createElement("tr"); 93 const td = document.createElement("td"); 94 td.innerText = info[i][0]; 95 td.colSpan = 2; 96 tr.appendChild(td); 97 infoTable.appendChild(tr); 98 } 99 else { 100 const newInfoRow = document.createElement("tr"); 101 const newInfoType = document.createElement("th"); 102 const newInfoTypeContent = document.createTextNode(info[i][0]); 103 newInfoType.classList.add("rowfit"); 104 newInfoType.appendChild(newInfoTypeContent); 105 const newInfoDesc = document.createElement("td"); 106 const newInfoDescContent = document.createTextNode(info[i][1]); 107 newInfoDesc.appendChild(newInfoDescContent); 108 newInfoRow.appendChild(newInfoType); 109 newInfoRow.appendChild(newInfoDesc); 110 infoTable.appendChild(newInfoRow); 111 } 112 } 113 const createdUsingMessage = document.createElement("h6"); 114 createdUsingMessage.innerHTML = "<a href='https://puzzylpiece.xyz/reftek/'>Created using Reftek (alpha II)</a>" 115 dataSection.appendChild(createdUsingMessage) 116 117 if (angleToggles.length != 1) { 118 for (let i = 0; i < (angleToggles.length); i++) { 119 const newToggle = document.createElement("input"); 120 const newToggleLabel = document.createElement("label"); 121 newToggle.setAttribute('type', 'radio'); 122 newToggle.setAttribute('name', 'angle_toggles'); 123 if (angleToggles[i] == "") { 124 newToggle.id = "normal"; 125 } else { 126 newToggle.id = angleToggles[i]; 127 } 128 newToggle.addEventListener('click', function () { 129 changeAngleToggle(i); 130 }); 131 angleForm.appendChild(newToggle); 132 newToggleLabel.setAttribute('for', angleToggles[i]) 133 if (angleToggles[i] == "") { 134 newToggleLabel.innerText = "none"; 135 } else { 136 newToggleLabel.innerText = angleToggles[i]; 137 } 138 angleForm.appendChild(newToggleLabel); 139 angleForm.appendChild(document.createElement("br")) 140 } 141 if (headers[3] == "") { 142 hideMyAss.style.display = "none"; 143 } else { 144 hideMyAss.innerText = headers[3]; 145 } 146 } else { 147 hideMyAss.style.display = "none"; 148 } 149 for (let i = 0; i < (colors.length); i++) { 150 if (colors[i][1] == "h") { 151 const newRow = document.createElement("tr"); 152 const newHeading = document.createElement("td"); 153 newHeading.colSpan = 4; 154 newHeading.classList.add("tableSeparator") 155 const newHeadingContent = document.createTextNode(colors[i][0]); 156 newHeading.appendChild(newHeadingContent); 157 newRow.appendChild(newHeading); 158 colorTable.appendChild(newRow) 159 } else { 160 const newColorRow = document.createElement("tr"); 161 const newColorPreview = document.createElement("td"); 162 newColorPreview.style.backgroundColor = `#${colors[i][0]}`; 163 const newColorDesc = document.createElement("td"); 164 const newColorDescContent = document.createTextNode(colors[i][1]); 165 newColorDesc.appendChild(newColorDescContent); 166 const newColorHex = document.createElement("td"); 167 const newColorHexContent = document.createTextNode(colors[i][0]); 168 newColorHex.classList.add("hex"); 169 newColorHex.appendChild(newColorHexContent); 170 const newColorCopy = document.createElement("td"); 171 const newColorCopyButton = document.createElement("button"); 172 newColorCopyButton.innerText = "COPY" 173 newColorCopyButton.addEventListener('click', function () { 174 copyColorToClipboard(i); 175 }); 176 newColorCopy.appendChild(newColorCopyButton); 177 newColorRow.appendChild(newColorPreview); 178 newColorRow.appendChild(newColorDesc); 179 newColorRow.appendChild(newColorHex); 180 newColorRow.appendChild(newColorCopy); 181 colorTable.appendChild(newColorRow); 182 } 183 } 184} 185 186 187if (title[0] == "t") { 188 titleArea.innerHTML = `<h2>${title[1]}</h2>`; 189} else if (title[0] == "i") { 190 titleArea.innerHTML = `<img src="${title[1]}" width="200">`; 191} 192preloadEverything(); 193spawnInThings(); 194 195function updateImages() { 196 preloadEverything(); 197 if (angleToggleIndex == 0) { 198 anglePic.style.backgroundImage = `url(${angles[angleIndex][1]})`; 199 } else { 200 anglePic.style.backgroundImage = `url(${(angles[angleIndex][1]).slice(0, -4)}_${angleToggles[angleToggleIndex]}.png)`; 201 } 202 angleTxt.innerText = angles[angleIndex][0]; 203 outfitPic.style.backgroundImage = `url(${outfits[outfitIndex][1]})`; 204 outfitTxt.innerText = outfits[outfitIndex][0]; 205} 206 207 208function prevAngle() { 209 if (angleIndex == 0) { 210 angleIndex = (angles.length - 1); 211 } else { 212 angleIndex--; 213 } 214 anglePic.animate(keyframesLeft, options); 215 updateImages(); 216} 217 218function nextAngle() { 219 if (!(angleIndex >= (angles.length - 1))) { 220 angleIndex++; 221 } else { 222 angleIndex = 0; 223 } 224 anglePic.animate(keyframesRight, options); 225 updateImages(); 226} 227 228function prevOutfit() { 229 if (outfitIndex == 0) { 230 outfitIndex = (outfits.length - 1); 231 } else { 232 outfitIndex--; 233 } 234 outfitPic.animate(keyframesLeft, options); 235 updateImages(); 236} 237 238function nextOutfit() { 239 if (!(outfitIndex >= (outfits.length - 1))) { 240 outfitIndex++; 241 } else { 242 outfitIndex = 0; 243 } 244 outfitPic.animate(keyframesRight, options); 245 updateImages(); 246} 247 248function copyColorToClipboard(colorIndex) { 249 navigator.clipboard.writeText(colors[colorIndex][0]); 250}