onMount(async () => {
fetchTime = performance.now();
- image = (await fetchRandomImage()).image;
+ image = await fetchRandomImage();
fetchTime = performance.now() - fetchTime;
complete = true;
});
{#if !complete}
<p>Fetching a random image...</p>
{:else}
- <div id="random-image">
- <a href={image}>
+ <div class="highlight-image">
+ <a href={`/language?language=${image.language}&image=${image.image}`}>
<img
- src={image}
+ src={image.image}
alt="Image of an anime girl holding a programming book"
/>
</a>
</div>
- <p>Fetch time: {fetchTime}ms</p>
+
+ <p>Double fetch_time = {fetchTime}; /* ms */</p>
{/if}
<h2>Contributing</h2>
import { fetchImages } from "$lib/api";
import { page } from "$app/stores";
+ const errorImages = [
+ "https://www.pngarts.com/files/8/Confused-Anime-Transparent-Image.png",
+ "https://cdn130.picsart.com/246838980018212.png?r1024x1024",
+ "https://toppng.com/public/uploads/thumbnail/confused-anime-png-anime-question-png-gif-11563638774nccphyut3x.png",
+ "https://linuxreviews.org/images/8/8d/Blond-anime-girl-with-red-questionmark.png",
+ "https://external-preview.redd.it/VNfYgsb6Pqn4xlEBpYl11534fIpOfN1XeMe7NrzgmQs.png?width=282&auto=webp&s=3247341e1cb8a6d6f63b7b3d63809e52ca0558fd",
+ "https://i.ya-webdesign.com/images/confused-anime-png-5.png",
+ "https://www.pngarts.com/files/8/Confused-Anime-PNG-Picture.png",
+ "https://64.media.tumblr.com/20fb900f57db568393387211c9c4760c/tumblr_olanyyuuQZ1tbejoso2_400.png",
+ "https://stickershop.line-scdn.net/stickershop/v1/product/7982958/LINEStorePC/main.png;compress=true",
+ "https://emoji.gg/assets/emoji/8573_Shikiconfused.png",
+ "https://i.imgur.com/TOgxESH.jpg",
+ ];
+
let language = $page.url.searchParams.get("language");
- let images, fetchTime;
+ let images, fetchTime, image, imageSize;
let complete = false;
+ let imageQuery = $page.url.searchParams.get("image");
onMount(async () => {
fetchTime = performance.now();
images = await fetchImages(language);
fetchTime = performance.now() - fetchTime;
complete = true;
+
+ if (imageQuery) {
+ image = images.filter((i) => i.includes(imageQuery));
+
+ if (!image[0]) {
+ image =
+ "https://www.pngarts.com/files/8/Confused-Anime-Transparent-Image.png";
+ image = errorImages[Math.floor(Math.random() * errorImages.length)];
+ } else {
+ let xhr = new XMLHttpRequest();
+
+ xhr.open("HEAD", image, true);
+ xhr.onreadystatechange = () => {
+ if (xhr.readyState === 4) {
+ if (xhr.status === 200) {
+ imageSize = `${xhr.getResponseHeader("Content-Length") / 1024}`;
+ } else {
+ imageSize = "Error";
+ }
+ }
+ };
+ xhr.send(null);
+ }
+ }
});
</script>
<p>Fetching images...</p>
{:else if images.length === 0}
<p>Sorry, no images were found for this language.</p>
+ {:else if image}
+ {#if errorImages.includes(image)}
+ <div class="highlight-image">
+ <p>
+ <i>Could not locate that specific image!</i>
+ Wanna go <a href={`/language?language=${language}`}>back</a> to language
+ homepage?
+ </p>
+
+ <a href={image}>
+ <img src={image} alt="Image of a confused anime girl" />
+ </a>
+ </div>
+ {:else if image}
+ <div class="highlight-image">
+ <p>
+ Wanna go <a href={`/language?language=${language}`}>back</a> to language
+ homepage?
+ </p>
+
+ <a href={image}>
+ <img
+ src={image}
+ alt="Image of an anime girl holding a programming book"
+ />
+ </a>
+
+ <p>
+ Attributes attributes = {<br />
+  direct_link: "<a href={image}>url</a>",<br />
+  size: {imageSize}, /* kb */<br />
+  fetch_time: {fetchTime}, /* ms */<br />
+ };
+ </p>
+ </div>
+ {/if}
{:else}
<ul class="image-rack">
{#each images as image}
<li id="image-rack-item">
- <a href={image}>
+ <a href={`/language?language=${language}&image=${image}`}>
<img
src={image}
alt="Image of an anime girl holding a programming book"
</li>
{/each}
</ul>
- <p>Fetch time: {fetchTime}ms</p>
+
+ <p>Double fetch_time = {fetchTime}; /* ms */</p>
{/if}
</div>
"@babel/helper-validator-identifier" "^7.16.7"
to-fast-properties "^2.0.0"
-"@eslint/eslintrc@^1.2.0":
- version "1.2.0"
- resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.0.tgz#7ce1547a5c46dfe56e1e45c3c9ed18038c721c6a"
- integrity sha512-igm9SjJHNEJRiUnecP/1R5T3wKLEJ7pL6e2P+GUSfCd0dGjPYYZve08uzw8L2J8foVHFz+NGu12JxRcU2gGo6w==
+"@eslint/eslintrc@^1.2.1":
+ version "1.2.1"
+ resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.2.1.tgz#8b5e1c49f4077235516bc9ec7d41378c0f69b8c6"
+ integrity sha512-bxvbYnBPN1Gibwyp6NrpnFzA3YtRL3BBAyEAFVIpNTm2Rn4Vy87GA5M4aSn3InRrlsbX5N0GW7XIx+U4SAEKdQ==
dependencies:
ajv "^6.12.4"
debug "^4.3.2"
espree "^9.3.1"
globals "^13.9.0"
- ignore "^4.0.6"
+ ignore "^5.2.0"
import-fresh "^3.2.1"
js-yaml "^4.1.0"
minimatch "^3.0.4"
resolved "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz"
integrity sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==
-eslint@8.10.0:
- version "8.10.0"
- resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.10.0.tgz#931be395eb60f900c01658b278e05b6dae47199d"
- integrity sha512-tcI1D9lfVec+R4LE1mNDnzoJ/f71Kl/9Cv4nG47jOueCMBrCCKYXr4AUVS7go6mWYGFD4+EoN6+eXSrEbRzXVw==
+eslint@8.11.0:
+ version "8.11.0"
+ resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.11.0.tgz#88b91cfba1356fc10bb9eb592958457dfe09fb37"
+ integrity sha512-/KRpd9mIRg2raGxHRGwW9ZywYNAClZrHjdueHcrVDuO3a6bj83eoTirCCk0M0yPwOjWYKHwRVRid+xK4F/GHgA==
dependencies:
- "@eslint/eslintrc" "^1.2.0"
+ "@eslint/eslintrc" "^1.2.1"
"@humanwhocodes/config-array" "^0.9.2"
ajv "^6.10.0"
chalk "^4.0.0"
agent-base "6"
debug "4"
-ignore@^4.0.6:
- version "4.0.6"
- resolved "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz"
- integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==
-
ignore@^5.1.8, ignore@^5.2.0:
version "5.2.0"
resolved "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz"
resolved "https://registry.yarnpkg.com/prettier-plugin-svelte/-/prettier-plugin-svelte-2.6.0.tgz#0e845b560b55cd1d951d6c50431b4949f8591746"
integrity sha512-NPSRf6Y5rufRlBleok/pqg4+1FyGsL0zYhkYP6hnueeL1J/uCm3OfOZPsLX4zqD9VAdcXfyEL2PYqGv8ZoOSfA==
-prettier@2.5.1:
- version "2.5.1"
- resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
- integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
+prettier@2.6.0:
+ version "2.6.0"
+ resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.6.0.tgz#12f8f504c4d8ddb76475f441337542fa799207d4"
+ integrity sha512-m2FgJibYrBGGgQXNzfd0PuDGShJgRavjUoRCw1mZERIWVSXF0iLzLm+aOqTAbLnC3n6JzUhAA8uZnFVghHJ86A==
pretty-format@^27.2.5, pretty-format@^27.5.1:
version "27.5.1"