| 182 | File.menu.bindContextmenu(a, this); |
| 183 | return a; |
| 184 | } else { |
| 185 | const uk = this.createunknown(url); |
| 186 | if (OSpoiler) { |
| 187 | uk.append(makeSpoilerHTML()); |
| 188 | } |
| 189 | File.menu.bindContextmenu(uk, this); |
| 190 | return uk; |
| 191 | } |
| 192 | } |
| 193 | refreshURL(url = this.proxy_url || this.url): Promise<string> | void { |
| 194 | if (!this.owner) return; |
| 195 | const urlObj = new URL(url); |
| 196 | if (urlObj.host === new URL(this.owner.info.cdn).host) { |
| 197 | if (Number.parseInt(urlObj.searchParams.get("ex") || "", 16) >= Date.now() - 5000) { |
| 198 | return; |
| 199 | } |
| 200 | const newUrl = this.owner.localuser.refreshURL(url); |
| 201 | newUrl.then((_) => (this.proxy_url = _)); |
| 202 | return newUrl; |
| 203 | } |
| 204 | } |
| 205 | private getAudioHTML(url: Promise<string> | void) { |
| 206 | const src = this.proxy_url || this.url; |
| 207 | return makePlayBox(src, player, 0, url); |
| 208 | } |
| 209 | upHTML( |
| 210 | files: Blob[], |
| 211 | map: WeakMap<Blob, HTMLElement>, |
| 212 | file: globalThis.File, |
| 213 | onremove: () => void, |
| 214 | ): HTMLElement { |
| 215 | const div = document.createElement("div"); |
| 216 | let contained = this.getHTML(true, false, file.name.startsWith("SPOILER_")); |
| 217 | div.classList.add("containedFile"); |
| 218 | div.append(contained); |
| 219 | const controls = document.createElement("div"); |
| 220 | controls.classList.add("controls"); |
| 221 | |
| 222 | const garbage = document.createElement("button"); |
| 223 | const icon = document.createElement("span"); |
| 224 | icon.classList.add("svgicon", "svg-delete"); |
| 225 | garbage.append(icon); |
| 226 | garbage.onclick = (_) => { |
| 227 | div.remove(); |
| 228 | files.splice(files.indexOf(file), 1); |
| 229 | onremove(); |
| 230 | }; |
| 231 | |
| 232 | const spoiler = document.createElement("button"); |
| 233 | const sicon = document.createElement("span"); |
| 234 | sicon.classList.add( |
| 235 | "svgicon", |
| 236 | file.name.startsWith("SPOILER_") ? "svg-unspoiler" : "svg-spoiler", |