aboutsummaryrefslogtreecommitdiff
path: root/src/routes/girls/+page.svelte
blob: 0dcf75c4cc245e4202a8baecf2c26886e70e77c9 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
<script lang="ts">
  import Spacer from '$lib/Layout/Spacer.svelte';
  import Senpy from '$lib/Data/senpy';
  import HeadTitle from '$lib/Home/HeadTitle.svelte';
  import Message from '$lib/Loading/Message.svelte';
  import Skeleton from '$lib/Loading/Skeleton.svelte';
  import root from '$lib/Utility/root';
  import '$styles/girls.scss';
</script>

<HeadTitle route="Anime Girls Holding Programming Books" path="/girls" />

<div class="card">
  <div class="split">
    <div>
      {#await Senpy.getRandomImage()}
        <Message message="Loading image ..." />

        <Skeleton grid={true} count={1} width="49%" height="16.25em" />
      {:then randomImage}
        <div class="preview">
          <a href={randomImage.image} target="_blank">
            <img src={randomImage.image} alt="A random anime girl holding a programming book" />
          </a>
        </div>
      {/await}
    </div>
    <div>
      The Senpy Club <span class="opaque">|</span> Anime Girls Holding Programming Books

      <Spacer />

      <ul>
        <li>
          <a href="https://github.com/senpy-club/frontend-next" target="_blank"
            >Front-end Version 1.</a
          > — Similar functionality to this page, but with a different design
        </li>
        <li>
          <a href="https://github.com/senpy-club/api-worker" target="_blank">REST API</a> — The Official
          Senpy Club REST API
        </li>
        <li>
          <a href="https://github.com/senpy-club/cli" target="_blank">Command-line Interface</a> — Access
          The Senpy Club API from your terminal (and export to files too)
        </li>
        <li>
          <a href="https://docs.rs/senpy" target="_blank"><code>senpy-rs</code></a> — Rust bindings to
          The Senpy Club API
        </li>
        <li>
          <a href="https://docs.rs/senpy-ffi" target="_blank"><code>senpy-ffi</code></a> — Access The
          Senpy Club API from any programming language (with FFI support)
        </li>
        <li>
          <a href="https://github.com/senpy-club/graphql-api" target="_blank">GraphQL API</a> —
          Official GraphQL access to The Senpy Club API (<a
            href="https://graphql.senpy.club/playground"
            target="_blank"
          >
            Playground</a
          >)
        </li>
      </ul>
    </div>
  </div>
</div>

<Spacer />

<details class="languages" open>
  <summary>Languages</summary>

  {#await Senpy.getLanguages()}
    <Message message="Loading languages ..." />

    <Skeleton
      card={false}
      count={10}
      pad={false}
      height={'0.9rem'}
      width={'100%'}
      list={true}
      grid={false}
    />
  {:then languages}
    <ul>
      {#each languages as language}
        <li><a href={root(`/girls/${encodeURIComponent(language)}`)}>{language}</a></li>
      {/each}
    </ul>
  {/await}
</details>

<style>
  img {
    border-radius: 8px;
    width: 25vh;
  }

  .languages ul {
    columns: 6;
  }

  @media (max-width: 1280px) {
    .languages ul {
      columns: 5;
    }
  }

  @media (max-width: 1024px) {
    .languages ul {
      columns: 4;
    }
  }

  @media (max-width: 768px) {
    .languages ul {
      columns: 3;
    }
  }

  @media (max-width: 512px) {
    .languages ul {
      columns: 2;
    }
  }

  .split {
    display: flex;
    gap: 1em;
  }
</style>