Initial commit
This commit is contained in:
revize
a1d841d15f
|
@ -0,0 +1,13 @@
|
||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
/build
|
||||||
|
/.svelte-kit
|
||||||
|
/package
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
|
# Ignore files for PNPM, NPM and YARN
|
||||||
|
pnpm-lock.yaml
|
||||||
|
package-lock.json
|
||||||
|
yarn.lock
|
|
@ -0,0 +1,15 @@
|
||||||
|
module.exports = {
|
||||||
|
root: true,
|
||||||
|
extends: ['eslint:recommended', 'prettier'],
|
||||||
|
plugins: ['svelte3'],
|
||||||
|
overrides: [{ files: ['*.svelte'], processor: 'svelte3/svelte3' }],
|
||||||
|
parserOptions: {
|
||||||
|
sourceType: 'module',
|
||||||
|
ecmaVersion: 2020
|
||||||
|
},
|
||||||
|
env: {
|
||||||
|
browser: true,
|
||||||
|
es2017: true,
|
||||||
|
node: true
|
||||||
|
}
|
||||||
|
};
|
|
@ -0,0 +1,43 @@
|
||||||
|
name: GitHub Pages
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- main # Set a branch name to trigger deployment
|
||||||
|
pull_request:
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
deploy:
|
||||||
|
runs-on: ubuntu-22.04
|
||||||
|
permissions:
|
||||||
|
contents: write
|
||||||
|
concurrency:
|
||||||
|
group: ${{ github.workflow }}-${{ github.ref }}
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v3
|
||||||
|
with:
|
||||||
|
submodules: true # Fetch Hugo themes (true OR recursive)
|
||||||
|
fetch-depth: 0 # Fetch all history for .GitInfo and .Lastmod
|
||||||
|
|
||||||
|
- uses: actions/setup-node@v3
|
||||||
|
with:
|
||||||
|
node-version: 18
|
||||||
|
|
||||||
|
- name: Install dependencies
|
||||||
|
run: npm ci
|
||||||
|
|
||||||
|
- name: Build
|
||||||
|
run: npm run build
|
||||||
|
|
||||||
|
- name: Add custom domain
|
||||||
|
run: "touch build/CNAME && echo \"inspect.prgblockweek.com\" >> build/CNAME"
|
||||||
|
|
||||||
|
- name: Deploy
|
||||||
|
uses: peaceiris/actions-gh-pages@v3
|
||||||
|
# If you're changing the branch from main,
|
||||||
|
# also change the `main` in `refs/heads/main`
|
||||||
|
# below accordingly.
|
||||||
|
if: ${{ github.ref == 'refs/heads/main' }}
|
||||||
|
with:
|
||||||
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
publish_dir: ./build
|
|
@ -0,0 +1,3 @@
|
||||||
|
.DS_Store
|
||||||
|
.svelte-kit
|
||||||
|
node_modules
|
|
@ -0,0 +1 @@
|
||||||
|
engine-strict=true
|
|
@ -0,0 +1,13 @@
|
||||||
|
.DS_Store
|
||||||
|
node_modules
|
||||||
|
/build
|
||||||
|
/.svelte-kit
|
||||||
|
/package
|
||||||
|
.env
|
||||||
|
.env.*
|
||||||
|
!.env.example
|
||||||
|
|
||||||
|
# Ignore files for PNPM, NPM and YARN
|
||||||
|
pnpm-lock.yaml
|
||||||
|
package-lock.json
|
||||||
|
yarn.lock
|
|
@ -0,0 +1,9 @@
|
||||||
|
{
|
||||||
|
"useTabs": true,
|
||||||
|
"singleQuote": true,
|
||||||
|
"trailingComma": "none",
|
||||||
|
"printWidth": 100,
|
||||||
|
"plugins": ["prettier-plugin-svelte"],
|
||||||
|
"pluginSearchDirs": ["."],
|
||||||
|
"overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }]
|
||||||
|
}
|
|
@ -0,0 +1,121 @@
|
||||||
|
Creative Commons Legal Code
|
||||||
|
|
||||||
|
CC0 1.0 Universal
|
||||||
|
|
||||||
|
CREATIVE COMMONS CORPORATION IS NOT A LAW FIRM AND DOES NOT PROVIDE
|
||||||
|
LEGAL SERVICES. DISTRIBUTION OF THIS DOCUMENT DOES NOT CREATE AN
|
||||||
|
ATTORNEY-CLIENT RELATIONSHIP. CREATIVE COMMONS PROVIDES THIS
|
||||||
|
INFORMATION ON AN "AS-IS" BASIS. CREATIVE COMMONS MAKES NO WARRANTIES
|
||||||
|
REGARDING THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS
|
||||||
|
PROVIDED HEREUNDER, AND DISCLAIMS LIABILITY FOR DAMAGES RESULTING FROM
|
||||||
|
THE USE OF THIS DOCUMENT OR THE INFORMATION OR WORKS PROVIDED
|
||||||
|
HEREUNDER.
|
||||||
|
|
||||||
|
Statement of Purpose
|
||||||
|
|
||||||
|
The laws of most jurisdictions throughout the world automatically confer
|
||||||
|
exclusive Copyright and Related Rights (defined below) upon the creator
|
||||||
|
and subsequent owner(s) (each and all, an "owner") of an original work of
|
||||||
|
authorship and/or a database (each, a "Work").
|
||||||
|
|
||||||
|
Certain owners wish to permanently relinquish those rights to a Work for
|
||||||
|
the purpose of contributing to a commons of creative, cultural and
|
||||||
|
scientific works ("Commons") that the public can reliably and without fear
|
||||||
|
of later claims of infringement build upon, modify, incorporate in other
|
||||||
|
works, reuse and redistribute as freely as possible in any form whatsoever
|
||||||
|
and for any purposes, including without limitation commercial purposes.
|
||||||
|
These owners may contribute to the Commons to promote the ideal of a free
|
||||||
|
culture and the further production of creative, cultural and scientific
|
||||||
|
works, or to gain reputation or greater distribution for their Work in
|
||||||
|
part through the use and efforts of others.
|
||||||
|
|
||||||
|
For these and/or other purposes and motivations, and without any
|
||||||
|
expectation of additional consideration or compensation, the person
|
||||||
|
associating CC0 with a Work (the "Affirmer"), to the extent that he or she
|
||||||
|
is an owner of Copyright and Related Rights in the Work, voluntarily
|
||||||
|
elects to apply CC0 to the Work and publicly distribute the Work under its
|
||||||
|
terms, with knowledge of his or her Copyright and Related Rights in the
|
||||||
|
Work and the meaning and intended legal effect of CC0 on those rights.
|
||||||
|
|
||||||
|
1. Copyright and Related Rights. A Work made available under CC0 may be
|
||||||
|
protected by copyright and related or neighboring rights ("Copyright and
|
||||||
|
Related Rights"). Copyright and Related Rights include, but are not
|
||||||
|
limited to, the following:
|
||||||
|
|
||||||
|
i. the right to reproduce, adapt, distribute, perform, display,
|
||||||
|
communicate, and translate a Work;
|
||||||
|
ii. moral rights retained by the original author(s) and/or performer(s);
|
||||||
|
iii. publicity and privacy rights pertaining to a person's image or
|
||||||
|
likeness depicted in a Work;
|
||||||
|
iv. rights protecting against unfair competition in regards to a Work,
|
||||||
|
subject to the limitations in paragraph 4(a), below;
|
||||||
|
v. rights protecting the extraction, dissemination, use and reuse of data
|
||||||
|
in a Work;
|
||||||
|
vi. database rights (such as those arising under Directive 96/9/EC of the
|
||||||
|
European Parliament and of the Council of 11 March 1996 on the legal
|
||||||
|
protection of databases, and under any national implementation
|
||||||
|
thereof, including any amended or successor version of such
|
||||||
|
directive); and
|
||||||
|
vii. other similar, equivalent or corresponding rights throughout the
|
||||||
|
world based on applicable law or treaty, and any national
|
||||||
|
implementations thereof.
|
||||||
|
|
||||||
|
2. Waiver. To the greatest extent permitted by, but not in contravention
|
||||||
|
of, applicable law, Affirmer hereby overtly, fully, permanently,
|
||||||
|
irrevocably and unconditionally waives, abandons, and surrenders all of
|
||||||
|
Affirmer's Copyright and Related Rights and associated claims and causes
|
||||||
|
of action, whether now known or unknown (including existing as well as
|
||||||
|
future claims and causes of action), in the Work (i) in all territories
|
||||||
|
worldwide, (ii) for the maximum duration provided by applicable law or
|
||||||
|
treaty (including future time extensions), (iii) in any current or future
|
||||||
|
medium and for any number of copies, and (iv) for any purpose whatsoever,
|
||||||
|
including without limitation commercial, advertising or promotional
|
||||||
|
purposes (the "Waiver"). Affirmer makes the Waiver for the benefit of each
|
||||||
|
member of the public at large and to the detriment of Affirmer's heirs and
|
||||||
|
successors, fully intending that such Waiver shall not be subject to
|
||||||
|
revocation, rescission, cancellation, termination, or any other legal or
|
||||||
|
equitable action to disrupt the quiet enjoyment of the Work by the public
|
||||||
|
as contemplated by Affirmer's express Statement of Purpose.
|
||||||
|
|
||||||
|
3. Public License Fallback. Should any part of the Waiver for any reason
|
||||||
|
be judged legally invalid or ineffective under applicable law, then the
|
||||||
|
Waiver shall be preserved to the maximum extent permitted taking into
|
||||||
|
account Affirmer's express Statement of Purpose. In addition, to the
|
||||||
|
extent the Waiver is so judged Affirmer hereby grants to each affected
|
||||||
|
person a royalty-free, non transferable, non sublicensable, non exclusive,
|
||||||
|
irrevocable and unconditional license to exercise Affirmer's Copyright and
|
||||||
|
Related Rights in the Work (i) in all territories worldwide, (ii) for the
|
||||||
|
maximum duration provided by applicable law or treaty (including future
|
||||||
|
time extensions), (iii) in any current or future medium and for any number
|
||||||
|
of copies, and (iv) for any purpose whatsoever, including without
|
||||||
|
limitation commercial, advertising or promotional purposes (the
|
||||||
|
"License"). The License shall be deemed effective as of the date CC0 was
|
||||||
|
applied by Affirmer to the Work. Should any part of the License for any
|
||||||
|
reason be judged legally invalid or ineffective under applicable law, such
|
||||||
|
partial invalidity or ineffectiveness shall not invalidate the remainder
|
||||||
|
of the License, and in such case Affirmer hereby affirms that he or she
|
||||||
|
will not (i) exercise any of his or her remaining Copyright and Related
|
||||||
|
Rights in the Work or (ii) assert any associated claims and causes of
|
||||||
|
action with respect to the Work, in either case contrary to Affirmer's
|
||||||
|
express Statement of Purpose.
|
||||||
|
|
||||||
|
4. Limitations and Disclaimers.
|
||||||
|
|
||||||
|
a. No trademark or patent rights held by Affirmer are waived, abandoned,
|
||||||
|
surrendered, licensed or otherwise affected by this document.
|
||||||
|
b. Affirmer offers the Work as-is and makes no representations or
|
||||||
|
warranties of any kind concerning the Work, express, implied,
|
||||||
|
statutory or otherwise, including without limitation warranties of
|
||||||
|
title, merchantability, fitness for a particular purpose, non
|
||||||
|
infringement, or the absence of latent or other defects, accuracy, or
|
||||||
|
the present or absence of errors, whether or not discoverable, all to
|
||||||
|
the greatest extent permissible under applicable law.
|
||||||
|
c. Affirmer disclaims responsibility for clearing rights of other persons
|
||||||
|
that may apply to the Work or any use thereof, including without
|
||||||
|
limitation any person's Copyright and Related Rights in the Work.
|
||||||
|
Further, Affirmer disclaims responsibility for obtaining any necessary
|
||||||
|
consents, permissions or other rights required for any use of the
|
||||||
|
Work.
|
||||||
|
d. Affirmer understands and acknowledges that Creative Commons is not a
|
||||||
|
party to this document and has no duty or obligation with respect to
|
||||||
|
this CC0 or use of the Work.
|
|
@ -0,0 +1 @@
|
||||||
|
# PBW Inspect
|
Rozdílový obsah nebyl zobrazen, protože je příliš veliký
Načíst rozdílové porovnání
|
@ -0,0 +1,30 @@
|
||||||
|
{
|
||||||
|
"name": "pbw-inspect",
|
||||||
|
"version": "0.1.0",
|
||||||
|
"private": true,
|
||||||
|
"scripts": {
|
||||||
|
"dev": "vite dev",
|
||||||
|
"build": "vite build",
|
||||||
|
"preview": "vite preview",
|
||||||
|
"test": "playwright test",
|
||||||
|
"lint": "prettier --plugin-search-dir . --check . && eslint .",
|
||||||
|
"format": "prettier --plugin-search-dir . --write ."
|
||||||
|
},
|
||||||
|
"devDependencies": {
|
||||||
|
"@playwright/test": "^1.28.1",
|
||||||
|
"@sveltejs/adapter-auto": "^1.0.0",
|
||||||
|
"@sveltejs/adapter-static": "^1.0.1",
|
||||||
|
"@sveltejs/kit": "^1.0.0",
|
||||||
|
"autoprefixer": "^10.4.13",
|
||||||
|
"eslint": "^8.28.0",
|
||||||
|
"eslint-config-prettier": "^8.5.0",
|
||||||
|
"eslint-plugin-svelte3": "^4.0.0",
|
||||||
|
"postcss": "^8.4.21",
|
||||||
|
"prettier": "^2.8.0",
|
||||||
|
"prettier-plugin-svelte": "^2.8.1",
|
||||||
|
"svelte": "^3.54.0",
|
||||||
|
"tailwindcss": "^3.2.4",
|
||||||
|
"vite": "^4.0.0"
|
||||||
|
},
|
||||||
|
"type": "module"
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
/** @type {import('@playwright/test').PlaywrightTestConfig} */
|
||||||
|
const config = {
|
||||||
|
webServer: {
|
||||||
|
command: 'npm run build && npm run preview',
|
||||||
|
port: 4173
|
||||||
|
},
|
||||||
|
testDir: 'tests'
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
|
@ -0,0 +1,6 @@
|
||||||
|
module.exports = {
|
||||||
|
plugins: {
|
||||||
|
tailwindcss: {},
|
||||||
|
autoprefixer: {},
|
||||||
|
},
|
||||||
|
}
|
|
@ -0,0 +1,33 @@
|
||||||
|
@import url('https://fonts.googleapis.com/css2?family=Barlow+Semi+Condensed:wght@400;500;800&display=swap');
|
||||||
|
|
||||||
|
@tailwind base;
|
||||||
|
@tailwind components;
|
||||||
|
@tailwind utilities;
|
||||||
|
|
||||||
|
@layer components {
|
||||||
|
.link {
|
||||||
|
@apply underline hover:no-underline hover:text-red-200;
|
||||||
|
}
|
||||||
|
.text a {
|
||||||
|
@apply underline hover:no-underline hover:text-red-200;
|
||||||
|
}
|
||||||
|
#footer a {
|
||||||
|
@apply underline hover:no-underline hover:text-pbw-white;
|
||||||
|
}
|
||||||
|
.separator {
|
||||||
|
@apply inline-block mx-3;
|
||||||
|
}
|
||||||
|
.button {
|
||||||
|
@apply border border-pbw-yellow py-3 px-4 rounded hover:bg-pbw-yellow hover:text-pbw-red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.cc0-license {
|
||||||
|
vertical-align: -0.1em;
|
||||||
|
margin-right: 0.3em;
|
||||||
|
width: 1em;
|
||||||
|
height: 1em;
|
||||||
|
background-size: 1em 1em;
|
||||||
|
background-position: center;
|
||||||
|
background-image: url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' id='Layer_1' x='0px' y='0px' width='64px' height='64px' viewBox='-0.5 0.5 64 64' enable-background='new -0.5 0.5 64 64' xml:space='preserve'%3E%3Cg%3E%3Ccircle fill='%23FFFFFF' cx='31.325' cy='32.873' r='30.096'/%3E%3Cpath id='text2809_1_' d='M31.5,14.08c-10.565,0-13.222,9.969-13.222,18.42c0,8.452,2.656,18.42,13.222,18.42 c10.564,0,13.221-9.968,13.221-18.42C44.721,24.049,42.064,14.08,31.5,14.08z M31.5,21.026c0.429,0,0.82,0.066,1.188,0.157 c0.761,0.656,1.133,1.561,0.403,2.823l-7.036,12.93c-0.216-1.636-0.247-3.24-0.247-4.437C25.808,28.777,26.066,21.026,31.5,21.026z M36.766,26.987c0.373,1.984,0.426,4.056,0.426,5.513c0,3.723-0.258,11.475-5.69,11.475c-0.428,0-0.822-0.045-1.188-0.136 c-0.07-0.021-0.134-0.043-0.202-0.067c-0.112-0.032-0.23-0.068-0.336-0.11c-1.21-0.515-1.972-1.446-0.874-3.093L36.766,26.987z'/%3E%3Cpath id='path2815_1_' d='M31.433,0.5c-8.877,0-16.359,3.09-22.454,9.3c-3.087,3.087-5.443,6.607-7.082,10.532 C0.297,24.219-0.5,28.271-0.5,32.5c0,4.268,0.797,8.32,2.397,12.168c1.6,3.85,3.921,7.312,6.969,10.396 c3.085,3.049,6.549,5.399,10.398,7.037c3.886,1.602,7.939,2.398,12.169,2.398c4.229,0,8.34-0.826,12.303-2.465 c3.962-1.639,7.496-3.994,10.621-7.081c3.011-2.933,5.289-6.297,6.812-10.106C62.73,41,63.5,36.883,63.5,32.5 c0-4.343-0.77-8.454-2.33-12.303c-1.562-3.885-3.848-7.32-6.857-10.33C48.025,3.619,40.385,0.5,31.433,0.5z M31.567,6.259 c7.238,0,13.412,2.566,18.554,7.709c2.477,2.477,4.375,5.31,5.67,8.471c1.296,3.162,1.949,6.518,1.949,10.061 c0,7.354-2.516,13.454-7.506,18.33c-2.592,2.516-5.502,4.447-8.74,5.781c-3.2,1.334-6.498,1.994-9.927,1.994 c-3.468,0-6.788-0.653-9.949-1.948c-3.163-1.334-6.001-3.238-8.516-5.716c-2.515-2.514-4.455-5.353-5.826-8.516 c-1.333-3.199-2.017-6.498-2.017-9.927c0-3.467,0.684-6.787,2.017-9.949c1.371-3.2,3.312-6.074,5.826-8.628 C18.092,8.818,24.252,6.259,31.567,6.259z'/%3E%3C/g%3E%3C/svg%3E");
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<link rel="icon" href="%sveltekit.assets%/favicon.png" />
|
||||||
|
<meta name="viewport" content="width=device-width" />
|
||||||
|
|
||||||
|
<!-- Plausible -->
|
||||||
|
<script defer data-domain="prgblockweek.com" src="https://x.gwei.cz/js/script.js"></script>
|
||||||
|
|
||||||
|
%sveltekit.head%
|
||||||
|
</head>
|
||||||
|
<body data-sveltekit-preload-data="hover">
|
||||||
|
<div style="display: contents">%sveltekit.body%</div>
|
||||||
|
</body>
|
||||||
|
</html>
|
|
@ -0,0 +1,18 @@
|
||||||
|
|
||||||
|
<script>
|
||||||
|
export let arr;
|
||||||
|
export let entry = "23";
|
||||||
|
export let col = "speaker";
|
||||||
|
export let img = "photoUrl";
|
||||||
|
|
||||||
|
const _url = (col, item) => `/${entry}/${col}/${item.id}`
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{#each arr as item}
|
||||||
|
<div class="p-4">
|
||||||
|
{#if item[img]}
|
||||||
|
<a href={_url(col, item)}><img src={item[img]} class="rounded-3xl w-full mb-4" /></a>
|
||||||
|
{/if}
|
||||||
|
<h3 class=" text-pbw-red"><a href={_url(col, item)}>{item.shortname || item.name}</a></h3>
|
||||||
|
</div>
|
||||||
|
{/each}
|
|
@ -0,0 +1,13 @@
|
||||||
|
<div class="w-full bg-pbw-red text-pbw-white text-xl relative">
|
||||||
|
<div class="max-w-5xl mx-auto flex pt-5 md:pt-10 pb-16 sm:pb-24 md:pb-40" style="background: url(/bg-prg.png) bottom repeat-x; background-size: 100%;">
|
||||||
|
<div class="flex-grow"></div>
|
||||||
|
<div class="text-right items-end p-10">
|
||||||
|
<div class="uppercase">
|
||||||
|
<div class="text-5xl md:text-6xl lg:text-7xl font-bold">Prague Blockchain Week</div>
|
||||||
|
<div class="text-4xl md:text-4xl lg:text-5xl font-medium text-pbw-yellow">June 2-11, 2023</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<slot />
|
|
@ -0,0 +1,9 @@
|
||||||
|
export async function load(entry="23") {
|
||||||
|
const resp = await fetch(`https://data.prgblockweek.com/${entry}/index.json`)
|
||||||
|
return resp.json()
|
||||||
|
}
|
||||||
|
|
||||||
|
export async function loadSchema() {
|
||||||
|
const resp = await fetch("https://data.prgblockweek.com/schema/1/bundle.json")
|
||||||
|
return resp.json()
|
||||||
|
}
|
|
@ -0,0 +1 @@
|
||||||
|
export const prerender = true;
|
|
@ -0,0 +1,15 @@
|
||||||
|
<script>
|
||||||
|
import { page } from '$app/stores';
|
||||||
|
import "../app.css";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="mx-6 xl:mx-0">
|
||||||
|
<div class="max-w-7xl mx-auto pt-10">
|
||||||
|
<h1 class="text-5xl uppercase font-bold text-pbw-red"><a href="/{$page.params.entry}">Prague Blockchain Week 2023</a></h1>
|
||||||
|
<div class="text-4xl text-pbw-yellow">June 2-11, 2023</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="mb-24">
|
||||||
|
<slot />
|
||||||
|
</div>
|
|
@ -0,0 +1,5 @@
|
||||||
|
import { redirect } from '@sveltejs/kit';
|
||||||
|
|
||||||
|
export function load() {
|
||||||
|
throw redirect(302, '/23');
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
<svelte:head>
|
||||||
|
<title>Prague Blockchain Week | Inspect</title>
|
||||||
|
</svelte:head>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import Layout from '$lib/Layout.svelte';
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<Layout>
|
||||||
|
</Layout>
|
|
@ -0,0 +1,8 @@
|
||||||
|
import * as dataApi from '$lib/dataApi';
|
||||||
|
|
||||||
|
export async function load({params}) {
|
||||||
|
return {
|
||||||
|
bundle: await dataApi.load(params.entry),
|
||||||
|
schema: await dataApi.loadSchema()
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,38 @@
|
||||||
|
|
||||||
|
<script>
|
||||||
|
import CollectionList from '$lib/CollectionList.svelte';
|
||||||
|
import { page } from '$app/stores';
|
||||||
|
|
||||||
|
function makeSpeakers (data) {
|
||||||
|
const arr = []
|
||||||
|
for (const ev of data.bundle.events) {
|
||||||
|
if (!ev.speakers) continue;
|
||||||
|
for (const speaker of ev.speakers) {
|
||||||
|
speaker.events = [ev.id]
|
||||||
|
arr.push(speaker)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return arr
|
||||||
|
}
|
||||||
|
|
||||||
|
export let data;
|
||||||
|
$: speakers = makeSpeakers(data)
|
||||||
|
$: entry = $page.params.entry
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="w-full px-6 xl:mx-0">
|
||||||
|
<div class="max-w-7xl mx-auto pt-2 md:pt-7">
|
||||||
|
<h2 class="text-2xl uppercase font-bold text-gray-500">Unions ({data.bundle.unions.length})</h2>
|
||||||
|
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-6 my-6 text-center text-2xl">
|
||||||
|
<CollectionList arr={data.bundle.unions} img="logo" col="union" entry={entry} />
|
||||||
|
</div>
|
||||||
|
<h2 class="text-2xl uppercase font-bold text-gray-500">Events ({data.bundle.events.length})</h2>
|
||||||
|
<div class="grid grid-cols-2 sm:grid-cols-3 md:grid-cols-4 xl:grid-cols-6 my-6 text-center text-2xl">
|
||||||
|
<CollectionList arr={data.bundle.events} img="logo" col="event" entry={entry}/>
|
||||||
|
</div>
|
||||||
|
<h2 class="text-2xl uppercase font-bold mt-10 text-gray-500">Speakers ({speakers.length})</h2>
|
||||||
|
<div class="grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 xl:grid-cols-8 my-6 text-center text-xl">
|
||||||
|
<CollectionList arr={speakers} entry={entry} />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
|
@ -0,0 +1,73 @@
|
||||||
|
<script>
|
||||||
|
export let data;
|
||||||
|
import { page } from '$app/stores';
|
||||||
|
import CollectionList from '$lib/CollectionList.svelte';
|
||||||
|
|
||||||
|
const colsDef = {
|
||||||
|
union: "unions",
|
||||||
|
event: "events",
|
||||||
|
}
|
||||||
|
|
||||||
|
$: col = $page.params.type
|
||||||
|
$: colPlural = colsDef[col]
|
||||||
|
$: item = data.bundle[colPlural].find(e => e.id === $page.params.slug)
|
||||||
|
$: defs = data.schema ? data.schema.definitions[col] : {}
|
||||||
|
|
||||||
|
let showSource = false;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<div class="w-full mx-6 xl:mx-0">
|
||||||
|
<div class="max-w-7xl mx-auto pt-2 md:pt-7">
|
||||||
|
<span class="font-normal text-xl opacity-50">{col.toUpperCase()}</span>
|
||||||
|
<h2 class="text-4xl font-bold text-gray-600">{item.name}</h2>
|
||||||
|
<div class="p-2 text-xl m-6">
|
||||||
|
<table>
|
||||||
|
{#each Object.keys(defs.properties) as key}
|
||||||
|
<tr>
|
||||||
|
<td class="text-right pr-4 text-gray-400">{defs.properties[key]?.title || key}</td>
|
||||||
|
<td>
|
||||||
|
{#if key === 'logo'}
|
||||||
|
<div class="m-2">
|
||||||
|
<a href={item.logo} target="_blank"><img class="w-32" src={item.logo} /></a>
|
||||||
|
</div>
|
||||||
|
{/if}
|
||||||
|
{#if defs.properties[key].type === 'string' && defs.properties[key].format === 'uri'}
|
||||||
|
<a href="{item[key]}" class="underline hover:no-underline">{item[key]}</a>
|
||||||
|
{:else if defs.properties[key].type === 'array'}
|
||||||
|
{item[key]?.join(", ")}
|
||||||
|
{#if defs.properties[key].items.enum}
|
||||||
|
<div class="text-base">Available choices: {defs.properties[key].items.enum.join(", ")}</div>
|
||||||
|
{/if}
|
||||||
|
{:else}
|
||||||
|
{item[key] || "❌"}
|
||||||
|
{/if}
|
||||||
|
{#if defs.properties[key].enum}
|
||||||
|
<div class="text-base">Available choices: {defs.properties[key].enum.join(", ")}</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
{/each}
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<h2 class="text-2xl uppercase font-bold mt-10 text-gray-500">Speakers ({item.speakers?.length || 0})</h2>
|
||||||
|
{#if item.speakers}
|
||||||
|
<div class="grid grid-cols-3 sm:grid-cols-4 md:grid-cols-6 xl:grid-cols-8 mt-4 text-center">
|
||||||
|
<CollectionList arr={item.speakers} />
|
||||||
|
</div>
|
||||||
|
{:else}
|
||||||
|
<div class="my-4">No speakers yet.</div>
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<h2 class="text-2xl uppercase font-bold mt-10 text-gray-500 mb-4">Source code / Edit</h2>
|
||||||
|
<div>
|
||||||
|
<a href="#" class="underline hover:no-underline" on:click={() => { showSource = !showSource; }}>Show/Hide source</a>,
|
||||||
|
<a href="https://github.com/utxo-foundation/prague-blockchain-week/tree/main/data/23/events/{item.id}" class="underline hover:no-underline">Edit on GitHub</a>
|
||||||
|
</div>
|
||||||
|
{#if showSource}
|
||||||
|
<h2 class="text-2xl uppercase font-bold mt-10 text-gray-500">JSON source-code</h2>
|
||||||
|
<div class="mt-4 font-mono whitespace-pre-wrap p-4 rounded-md bg-slate-200 text-sm">{JSON.stringify(item, null, 2)}</div>
|
||||||
|
{/if}
|
||||||
|
</div>
|
||||||
|
</div>
|
Binární soubor nebyl zobrazen.
Za Šířka: | Výška: | Velikost: 35 KiB |
Binární soubor nebyl zobrazen.
Za Šířka: | Výška: | Velikost: 13 KiB |
Binární soubor nebyl zobrazen.
Za Šířka: | Výška: | Velikost: 93 KiB |
Binární soubor nebyl zobrazen.
Za Šířka: | Výška: | Velikost: 49 KiB |
Binární soubor nebyl zobrazen.
Za Šířka: | Výška: | Velikost: 286 KiB |
|
@ -0,0 +1,12 @@
|
||||||
|
import adapter from '@sveltejs/adapter-static';
|
||||||
|
import { vitePreprocess } from '@sveltejs/kit/vite';
|
||||||
|
|
||||||
|
/** @type {import('@sveltejs/kit').Config} */
|
||||||
|
const config = {
|
||||||
|
kit: {
|
||||||
|
adapter: adapter()
|
||||||
|
},
|
||||||
|
preprocess: vitePreprocess()
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
|
@ -0,0 +1,22 @@
|
||||||
|
/** @type {import('tailwindcss').Config} */
|
||||||
|
|
||||||
|
const defaultTheme = require('tailwindcss/defaultTheme')
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
content: ['./src/**/*.{html,js,svelte,ts}'],
|
||||||
|
theme: {
|
||||||
|
extend: {
|
||||||
|
fontFamily: {
|
||||||
|
'sans': ['Barlow Semi Condensed', ...defaultTheme.fontFamily.sans]
|
||||||
|
},
|
||||||
|
colors: {
|
||||||
|
'pbw': {
|
||||||
|
'red': '#ff1616',
|
||||||
|
'yellow': '#ffde59',
|
||||||
|
'white': '#ffffff'
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
plugins: [],
|
||||||
|
}
|
|
@ -0,0 +1,6 @@
|
||||||
|
import { expect, test } from '@playwright/test';
|
||||||
|
|
||||||
|
test('index page has expected h1', async ({ page }) => {
|
||||||
|
await page.goto('/');
|
||||||
|
expect(await page.textContent('h1')).toBe('Welcome to SvelteKit');
|
||||||
|
});
|
|
@ -0,0 +1,7 @@
|
||||||
|
import { sveltekit } from '@sveltejs/kit/vite';
|
||||||
|
|
||||||
|
const config = {
|
||||||
|
plugins: [sveltekit()]
|
||||||
|
};
|
||||||
|
|
||||||
|
export default config;
|
Načítá se…
Odkázat v novém úkolu