Feat: Implementation of New UI (Bar, Homepage, Commander, BSets), Removing NGINX dependency, Dockerfile added
3
.gitignore
vendored
|
@ -20,4 +20,7 @@ app/next-env.d.ts
|
|||
|
||||
# data
|
||||
app/tools/data/*
|
||||
app/data/misc/*
|
||||
app/data/commander/*
|
||||
app/data/bset/*
|
||||
app/tools/json/*
|
||||
|
|
26
app/.dockerignore
Normal file
|
@ -0,0 +1,26 @@
|
|||
node_modules/
|
||||
.env
|
||||
|
||||
# testing
|
||||
coverage
|
||||
|
||||
# next.js
|
||||
.next/
|
||||
out/
|
||||
|
||||
# production
|
||||
build
|
||||
|
||||
# debug
|
||||
npm-debug.log*
|
||||
|
||||
# typescript
|
||||
*.tsbuildinfo
|
||||
next-env.d.ts
|
||||
|
||||
# data
|
||||
tools/data
|
||||
tools/json
|
||||
data/misc/*
|
||||
data/commander/*
|
||||
data/bset/*
|
28
app/Dockerfile
Normal file
|
@ -0,0 +1,28 @@
|
|||
FROM node:alpine AS build
|
||||
|
||||
WORKDIR /app
|
||||
COPY package.json ./
|
||||
# install dependencies
|
||||
RUN npm install
|
||||
COPY . .
|
||||
# build
|
||||
RUN npx prisma generate
|
||||
RUN npm run build
|
||||
# remove dev dependencies
|
||||
RUN npm prune --production
|
||||
|
||||
FROM node:alpine
|
||||
|
||||
WORKDIR /app
|
||||
|
||||
RUN apk add --no-cache openssl
|
||||
# copy from build image
|
||||
COPY --from=build /app/package.json ./package.json
|
||||
COPY --from=build /app/node_modules ./node_modules
|
||||
COPY --from=build /app/.next ./.next
|
||||
COPY --from=build /app/public ./public
|
||||
COPY --from=build /app/tools ./tools
|
||||
COPY --from=build /app/data ./data
|
||||
|
||||
EXPOSE 3000
|
||||
CMD ["npm","run","start"]
|
25
app/app/api/json/[...slug]/route.ts
Normal file
|
@ -0,0 +1,25 @@
|
|||
import { NextResponse, NextRequest } from 'next/server'
|
||||
import fs from "fs";
|
||||
import path from "path";
|
||||
|
||||
export async function GET(req: NextRequest, {params}: { params: { slug: string[] } }) {
|
||||
try {
|
||||
const jsonPath = await (params).slug.join("/")
|
||||
const filePath = path.resolve(".",`data/${jsonPath}`);
|
||||
const jsonBuffer = fs.readFileSync(filePath);
|
||||
return new NextResponse(jsonBuffer,{
|
||||
status: 200,
|
||||
headers: {
|
||||
"content-type": "application/json",
|
||||
}
|
||||
});
|
||||
} catch (error) {
|
||||
console.log(error)
|
||||
return NextResponse.json(
|
||||
{ error: "Failed, check console" },
|
||||
{
|
||||
status: 500,
|
||||
}
|
||||
);
|
||||
}
|
||||
}
|
|
@ -1,7 +1,8 @@
|
|||
'use client'
|
||||
|
||||
import { useEffect, useState } from 'react'
|
||||
import { useEffect, useState, useRef } from 'react'
|
||||
import { CardGroup } from '@/components/ui/card-group'
|
||||
import {PlaneswalkerIcon, SorceryIcon, InstantIcon, CreatureIcon, EnchantmentIcon, LandIcon, ArtifactIcon} from '@/components/ui/symbols-icons'
|
||||
|
||||
interface PageContentProps {
|
||||
bset: string
|
||||
|
@ -17,8 +18,11 @@ export default function PageContent({bset}: PageContentProps) {
|
|||
const [enchantmentList, setEnchantmentList] = useState([])
|
||||
const [landList, setLandList] = useState([])
|
||||
|
||||
const [scrollState, setScrollState] = useState("commander")
|
||||
const CardListRef = useRef<HTMLDivElement>(null)
|
||||
|
||||
useEffect(() => {
|
||||
fetch('http://localhost:8072/bset/'+bset+'.json').then((res) => {
|
||||
fetch('/api/json/bset/'+bset+'.json').then((res) => {
|
||||
if(res.status == 200) {
|
||||
res.json().then((data) => {
|
||||
const limit = 20
|
||||
|
@ -35,16 +39,57 @@ export default function PageContent({bset}: PageContentProps) {
|
|||
}
|
||||
})
|
||||
}, [])
|
||||
|
||||
useEffect(() => {
|
||||
const handleScroll = () => {
|
||||
const windowHeight = window.innerHeight
|
||||
const TOP_MARGIN = 0.1
|
||||
const BOTTOM_MARGIN = 0.2
|
||||
const card_children = CardListRef.current?.children
|
||||
if (card_children) {
|
||||
for (const child of card_children){
|
||||
const targetBounds = child.getBoundingClientRect()
|
||||
if( targetBounds.bottom > windowHeight * TOP_MARGIN && targetBounds.top < windowHeight * ( 1 - BOTTOM_MARGIN ) ) {
|
||||
setScrollState(child.id)
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Add event listener to the window
|
||||
window.addEventListener('scroll', handleScroll);
|
||||
|
||||
// Remove event listener when the component is unmounted
|
||||
return () => {
|
||||
window.removeEventListener('scroll', handleScroll);
|
||||
};
|
||||
}, []);
|
||||
|
||||
return (
|
||||
<div className="flex flex-col items-center mt-32">
|
||||
<CardGroup groupName={"Commander"} cards={commanderList} />
|
||||
<CardGroup groupName={"Planeswalker"} cards={planeswalkerList} />
|
||||
<CardGroup groupName={"Creature"} cards={creatureList} />
|
||||
<CardGroup groupName={"Sorcery"} cards={sorceryList} />
|
||||
<CardGroup groupName={"Artifact"} cards={artifactList} />
|
||||
<CardGroup groupName={"Instant"} cards={instantList} />
|
||||
<CardGroup groupName={"Enchantment"} cards={enchantmentList} />
|
||||
<CardGroup groupName={"Land"} cards={landList} />
|
||||
<div>
|
||||
<div className="flex flex-col items-center w-full">
|
||||
<div ref={CardListRef} className="flex flex-col items-center mt-24 gap-4 max-w-6xl">
|
||||
<CardGroup className="scroll-mt-16" groupName={"Commandants"} id="commander" cards={commanderList} />
|
||||
<CardGroup className="scroll-mt-16" groupName={"Planeswalker"} Icon={PlaneswalkerIcon} id="planeswalker" cards={planeswalkerList} />
|
||||
<CardGroup className="scroll-mt-16" groupName={"Créatures"} Icon={CreatureIcon} id="creature" cards={creatureList} />
|
||||
<CardGroup className="scroll-mt-16" groupName={"Rituels"} Icon={SorceryIcon} id="sorcery" cards={sorceryList} />
|
||||
<CardGroup className="scroll-mt-16" groupName={"Artefacts"} Icon={ArtifactIcon} id="artifact" cards={artifactList} />
|
||||
<CardGroup className="scroll-mt-16" groupName={"Éphémères"} Icon={InstantIcon} id="instant" cards={instantList} />
|
||||
<CardGroup className="scroll-mt-16" groupName={"Enchantements"} Icon={EnchantmentIcon} id="enchantment" cards={enchantmentList} />
|
||||
<CardGroup className="scroll-mt-16" groupName={"Terrains"} Icon={LandIcon} id="land" cards={landList} />
|
||||
</div>
|
||||
</div>
|
||||
<div className="fixed top-80 ml-8 flex flex-col gap-2 text-stone-500">
|
||||
<a href="#commander" className={ scrollState == "commander" ? "text-black text-2xl" : ""}>Commandants</a>
|
||||
<a href="#planeswalker" className={`${scrollState == "planeswalker" ? "text-black text-2xl" : "neutral-svg-filter"} flex flex-row items-center gap-1`}><PlaneswalkerIcon className={scrollState == "planeswalker" ? "h-5" : "h-4"} />Planeswalker</a>
|
||||
<a href="#creature" className={`${scrollState == "creature" ? "text-black text-2xl" : "neutral-svg-filter"} flex flex-row items-center gap-1`}><CreatureIcon className={scrollState == "creature" ? "h-5" : "h-4"} />Créatures</a>
|
||||
<a href="#sorcery" className={`${scrollState == "sorcery" ? "text-black text-2xl" : "neutral-svg-filter"} flex flex-row items-center gap-1`}><SorceryIcon className={scrollState == "sorcery" ? "h-5" : "h-4"} />Rituels</a>
|
||||
<a href="#artifact" className={`${scrollState == "artifact" ? "text-black text-2xl" : "neutral-svg-filter"} flex flex-row items-center gap-1`}><ArtifactIcon className={scrollState == "artifact" ? "h-5" : "h-4"} />Artefacts</a>
|
||||
<a href="#instant" className={`${scrollState == "instant" ? "text-black text-2xl" : "neutral-svg-filter"} flex flex-row items-center gap-1`}><InstantIcon className={scrollState == "instant" ? "h-5" : "h-4"} />Éphémères</a>
|
||||
<a href="#enchantment" className={`${scrollState == "enchantment" ? "text-black text-2xl" : "neutral-svg-filter"} flex flex-row items-center gap-1`}><EnchantmentIcon className={scrollState == "enchantment" ? "h-5" : "h-4"} />Enchantements</a>
|
||||
<a href="#land" className={`${scrollState == "land" ? "text-black text-2xl" : "neutral-svg-filter"} flex flex-row items-center gap-1`}><LandIcon className={scrollState == "land" ? "h-5" : "h-4"} />Terrains</a>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
'use client'
|
||||
|
||||
import { useEffect, useState } from 'react'
|
||||
import { Input } from '@/components/ui/input'
|
||||
|
||||
interface bsetJsonObject {
|
||||
name: string,
|
||||
|
@ -11,29 +12,45 @@ interface bsetJsonObject {
|
|||
|
||||
|
||||
export default function Home() {
|
||||
const [BsetList, setBsetList] = useState([])
|
||||
const [displayedBsetList, setDisplayedBsetList] = useState([])
|
||||
const [originalBsetList, setOriginalBsetList] = useState([])
|
||||
|
||||
useEffect(() => {
|
||||
fetch('http://localhost:8072/misc/bsets.json').then((res) => {
|
||||
fetch('/api/json/misc/bsets.json').then((res) => {
|
||||
if(res.status == 200) {
|
||||
res.json().then((data) => {
|
||||
setBsetList(data)
|
||||
setOriginalBsetList(data)
|
||||
setDisplayedBsetList(data)
|
||||
})
|
||||
}
|
||||
})
|
||||
}, [])
|
||||
|
||||
function filterBsetList(searchString:string) {
|
||||
if(searchString != "") {
|
||||
setDisplayedBsetList(originalBsetList.filter((bset:bsetJsonObject) => bset.name.toLowerCase().includes(searchString.toLowerCase())))
|
||||
} else {
|
||||
setDisplayedBsetList(originalBsetList)
|
||||
}
|
||||
}
|
||||
|
||||
return (
|
||||
<div className="flex flex-col items-center mt-32 gap-4">
|
||||
{ BsetList.map((bset: bsetJsonObject) => (
|
||||
<a key={bset.name} className="flex flex-row gap-4" href={"/bset/" + bset.sanitized_name}>
|
||||
<div className="flex flex-row gap-1">
|
||||
{ bset.icons.map((icon) => (
|
||||
<img key={icon} src={icon} loading="lazy" className="w-4 h-4"/>
|
||||
))}
|
||||
</div>
|
||||
<span>{bset.name}</span>
|
||||
</a>
|
||||
))}
|
||||
<div className="flex flex-col items-center mt-16">
|
||||
<div className="flex flex-col p-16 max-w-6xl w-full gap-4">
|
||||
<Input placeholder="Rechercher des BrawlSets..." onChange={(e) => filterBsetList(e.target.value)}/>
|
||||
<div className="grid grid-cols-3 gap-4 p-2 w-full">
|
||||
{ displayedBsetList.map((bset: bsetJsonObject) => (
|
||||
<a key={bset.name} className="flex flex-row gap-2 items-center text-stone-500" href={"/bset/" + bset.sanitized_name}>
|
||||
<div className="flex flex-row gap-1">
|
||||
{ bset.icons.map((icon) => (
|
||||
<img key={icon} src={icon} loading="lazy" className="w-5 h-5"/>
|
||||
))}
|
||||
</div>
|
||||
<span>{bset.name}</span>
|
||||
</a>
|
||||
))}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -11,7 +11,7 @@ export default function PageContent({color}: PageContentProps) {
|
|||
const [commanderCardList, setCommanderCardList] = useState([])
|
||||
|
||||
useEffect(() => {
|
||||
fetch('http://localhost:8072/commander/'+color+'.json').then((res) => {
|
||||
fetch('/api/json/commander/'+color+'.json').then((res) => {
|
||||
if(res.status == 200) {
|
||||
res.json().then((data) => {
|
||||
const limit = 20
|
||||
|
@ -22,8 +22,10 @@ export default function PageContent({color}: PageContentProps) {
|
|||
})
|
||||
}, [])
|
||||
return (
|
||||
<div className="flex flex-col items-center mt-32">
|
||||
<CardGroup groupName={"Top commander - " + color} cards={commanderCardList} />
|
||||
<div className="flex flex-col items-center w-full">
|
||||
<div className="flex flex-col items-center mt-24 mb-24 max-w-6xl">
|
||||
<CardGroup groupName={"Top commandants - " + color} cards={commanderCardList} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
|
@ -7,7 +7,7 @@ export default function Home() {
|
|||
const [commanderCardList, setCommanderCardList] = useState([])
|
||||
|
||||
useEffect(() => {
|
||||
fetch('http://localhost:8072/commander/top.json').then((res) => {
|
||||
fetch('/api/json/commander/top.json').then((res) => {
|
||||
if(res.status == 200) {
|
||||
res.json().then((data) => {
|
||||
const limit = 20
|
||||
|
@ -18,8 +18,10 @@ export default function Home() {
|
|||
})
|
||||
}, [])
|
||||
return (
|
||||
<div className="flex flex-col items-center mt-32">
|
||||
<CardGroup groupName="Top commander" cards={commanderCardList} />
|
||||
<div className="flex flex-col items-center w-full">
|
||||
<div className="flex flex-col items-center mt-24 mb-24 max-w-6xl">
|
||||
<CardGroup groupName="Top commandants" cards={commanderCardList} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
|
BIN
app/app/fonts/inter-tight-latin-400-italic.ttf
Normal file
BIN
app/app/fonts/inter-tight-latin-400-normal.ttf
Normal file
BIN
app/app/fonts/inter-tight-latin-800-italic.ttf
Normal file
BIN
app/app/fonts/inter-tight-latin-800-normal.ttf
Normal file
|
@ -11,10 +11,38 @@ body {
|
|||
src: url("./fonts/Beleren2016-Bold.woff");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Inter-Tight-Normal";
|
||||
src: url("./fonts/inter-tight-latin-400-normal.ttf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Inter-Tight-Italic";
|
||||
src: url("./fonts/inter-tight-latin-400-italic.ttf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Inter-Tight-Bold";
|
||||
src: url("./fonts/inter-tight-latin-800-normal.ttf");
|
||||
}
|
||||
|
||||
@font-face {
|
||||
font-family: "Inter-Tight-Bold-Italic";
|
||||
src: url("./fonts/inter-tight-latin-800-italic.ttf");
|
||||
}
|
||||
|
||||
.font-beleren {
|
||||
font-family: 'Beleren';
|
||||
}
|
||||
|
||||
.font-inter-tight {
|
||||
font-family: 'Inter-Tight-Normal';
|
||||
}
|
||||
|
||||
.neutral-svg-filter {
|
||||
filter: invert(49%) sepia(2%) saturate(1917%) hue-rotate(343deg) brightness(89%) contrast(85%);
|
||||
}
|
||||
|
||||
@layer utilities {
|
||||
.text-balance {
|
||||
text-wrap: balance;
|
||||
|
|
|
@ -38,10 +38,15 @@ export default async function RootLayout({
|
|||
return (
|
||||
<html lang="fr">
|
||||
<body
|
||||
className={`${geistSans.variable} ${geistMono.variable} antialiased`}
|
||||
className={`${geistSans.variable} ${geistMono.variable} antialiased font-inter-tight`}
|
||||
>
|
||||
<NavigationBar username={username} isLoggedIn={JWT !== undefined} />
|
||||
{children}
|
||||
<div className="min-h-screen scroll-smooth">
|
||||
{children}
|
||||
</div>
|
||||
<div className="flex flex-col p-4 items-center text-sm">
|
||||
<h1>Brawlset is unofficial Fan Content permitted under the Fan Content Policy. Not approved/endorsed by Wizards. Portions of the materials used are property of Wizards of the Coast. ©Wizards of the Coast LLC.</h1>
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
);
|
||||
|
|
|
@ -2,7 +2,9 @@ export default function Home() {
|
|||
return (
|
||||
<>
|
||||
<div className="flex flex-col items-center mt-32">
|
||||
<h1 className="text-5xl">/!\ Work in Progress /!\</h1>
|
||||
<h1 className="text-8xl font-beleren">The BrawlSet</h1>
|
||||
<p className="text-center text-stone-500 mt-12">Un système de règles MTG basé sur le mode de jeu commander et inventé à Rennes, pays de la galette saucisse.<br></br>
|
||||
Pour plus d'informations allez voir les <a className="text-orange-500">règles</a> ou la <a className="text-orange-500">FAQ</a>.</p>
|
||||
</div>
|
||||
</>
|
||||
);
|
||||
|
|
|
@ -21,18 +21,22 @@ interface CardGroupProps {
|
|||
groupName: string,
|
||||
cards: carte_from_stats[],
|
||||
showPrice?: boolean,
|
||||
showStats?: boolean
|
||||
showStats?: boolean,
|
||||
id?: string,
|
||||
Icon?: any
|
||||
}
|
||||
|
||||
const CardGroup = ({ className, groupName, cards, showPrice=true, showStats=true}: CardGroupProps) => {
|
||||
const CardGroup = ({ className, groupName, cards, showPrice=true, showStats=true, id, Icon}: CardGroupProps) => {
|
||||
return (
|
||||
<div>
|
||||
<h1>{groupName}</h1>
|
||||
<div
|
||||
className={cn(
|
||||
"flex flex-row flex-wrap gap-4 p-8",
|
||||
className
|
||||
<div id={id} className={cn('flex flex-col w-full items-start',className)}>
|
||||
<div className="flex items-center flex-row gap-2 mb-2">
|
||||
{ Icon && (
|
||||
<Icon className="h-6"/>
|
||||
)}
|
||||
<h1 className="text-3xl">{groupName}</h1>
|
||||
</div>
|
||||
<div
|
||||
className="flex flex-row flex-wrap gap-4"
|
||||
>
|
||||
|
||||
{cards.map((card: carte_from_stats) => (
|
||||
|
|
|
@ -31,12 +31,12 @@ const MTGCard = ({ className, imageURI, cardname, url, nbrDecks, totalDecks, per
|
|||
<img src={imageURI} className="rounded" height={loaded ? 'auto' : '0'} onLoad={() => {setLoaded(true)}} loading="lazy" />
|
||||
<div className="flex flex-col items-center gap-0">
|
||||
{ price != undefined && (
|
||||
<a href={cardmarketURI != undefined ? cardmarketURI : "#"} target={cardmarketURI != undefined ? "_blank" : "_self"}>{price}€</a>
|
||||
<a className="text-xs" href={cardmarketURI != undefined ? cardmarketURI : "#"} target={cardmarketURI != undefined ? "_blank" : "_self"}>{price}€</a>
|
||||
)}
|
||||
<span className="text-center">{cardname}</span>
|
||||
<span className="text-center text-xs">{cardname}</span>
|
||||
{ nbrDecks != undefined && (
|
||||
<>
|
||||
<span className="text-xs">{nbrDecks} de {totalDecks} Decks ({percentDecks}%)</span>
|
||||
<span className="text-md">{nbrDecks} Deck{nbrDecks > 1 ? "s" : ""} sur {totalDecks} ({percentDecks}%)</span>
|
||||
</>
|
||||
)}
|
||||
</div>
|
||||
|
|
|
@ -17,6 +17,7 @@ import {
|
|||
import { Input } from "@/components/ui/input"
|
||||
import { Button } from "@/components/ui/button"
|
||||
import { IconUserFilled } from "@tabler/icons-react"
|
||||
import { IconChevronDown } from "@tabler/icons-react"
|
||||
import { Black, Blue, Green, White, Red, Colorless } from "@/components/ui/mana-icons"
|
||||
import { useEffect, useState } from 'react'
|
||||
|
||||
|
@ -37,7 +38,7 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
|
|||
const [bsetsList, setBsetsList] = useState<bsetJsonObject[]>([])
|
||||
|
||||
useEffect(() => {
|
||||
fetch('http://localhost:8072/misc/bsets.json').then((res) => {
|
||||
fetch('/api/json/misc/bsets.json').then((res) => {
|
||||
if(res.status == 200) {
|
||||
res.json().then((data) => {
|
||||
setBsetsList(data)
|
||||
|
@ -49,15 +50,17 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
|
|||
|
||||
|
||||
return (
|
||||
<div className="flex z-50 flex-row p-4 gap-4 w-full fixed top-0 left-0 bg-slate-700 items-center justify-between">
|
||||
<div className="flex z-50 flex-row p-4 gap-4 w-full bg-white fixed top-0 left-0 items-center justify-between">
|
||||
<div className="flex flex-row gap-4 items-center">
|
||||
<a className="flex flex-row gap-2 items-center" href="/">
|
||||
<img src="/assets/logo.png" className="h-8" />
|
||||
<span className="font-beleren text-3xl mt-2">BRAWL SET</span>
|
||||
<span className="font-beleren text-3xl mt-2 bg-gradient-to-r from-black to-orange-500 bg-clip-text text-transparent">BrawlSet</span>
|
||||
</a>
|
||||
</div>
|
||||
<div className="flex flex-row gap-4 items-center">
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button>Commandants</Button>
|
||||
<span className="text-stone-500 cursor-pointer flex flex-row gap-1 items-center">Commandants <IconChevronDown className="h-4"/></span>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent className="w-56">
|
||||
<DropdownMenuGroup>
|
||||
|
@ -117,71 +120,91 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
|
|||
<DropdownMenuSubContent>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/azorius">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Azorius</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/dimir">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Dimir</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/rakdos">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Rakdos</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/gruul">
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Gruul</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/selesnya">
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Selesnya</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/orzhov">
|
||||
<White className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<White className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Orzhov</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/izzet">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Izzet</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/golgari">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Golgari</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/boros">
|
||||
<Red className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Red className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Boros</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/simic">
|
||||
<Green className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Green className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Simic</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
|
@ -196,81 +219,101 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
|
|||
<DropdownMenuSubContent>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/esper">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Esper</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/grixis">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Grixis</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/jund">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Jund</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/naya">
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Naya</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/bant">
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Bant</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/abzan">
|
||||
<White className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<White className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Abzan</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/jeskai">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Jeskai</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/sultai">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Sultai</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/mardu">
|
||||
<Red className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Red className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Mardu</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/temur">
|
||||
<Green className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Green className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Temur</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
|
@ -285,56 +328,68 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
|
|||
<DropdownMenuSubContent>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/yore-tiller">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Yore-Tiller</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/glint-eye">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Glint-Eye</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/dune-brood">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Dune-Brood</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/ink-treader">
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Ink-Treader</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/witch-maw">
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<Green className="h-4 w-4"/>
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>Witch-Maw</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem>
|
||||
<a className="flex flex-row gap-2 items-center" href="/commander/five-color">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
<div className="flex flex-row">
|
||||
<White className="h-4 w-4"/>
|
||||
<Blue className="h-4 w-4"/>
|
||||
<Black className="h-4 w-4"/>
|
||||
<Red className="h-4 w-4"/>
|
||||
<Green className="h-4 w-4"/>
|
||||
</div>
|
||||
<span>5 couleurs</span>
|
||||
</a>
|
||||
</DropdownMenuItem>
|
||||
|
@ -346,7 +401,7 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
|
|||
</DropdownMenu>
|
||||
<DropdownMenu>
|
||||
<DropdownMenuTrigger asChild>
|
||||
<Button>BSets</Button>
|
||||
<span className="text-stone-500 cursor-pointer flex flex-row gap-1 items-center">BSets <IconChevronDown className="h-4"/></span>
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent className="w-56">
|
||||
<DropdownMenuGroup>
|
||||
|
@ -373,23 +428,23 @@ export function NavigationBar ({ isLoggedIn, username}: NavigationProps) {
|
|||
</DropdownMenuGroup>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<a href="/rules"><Button>Règles</Button></a>
|
||||
<a href="/rules" className="text-stone-500">Règles</a>
|
||||
<a href="/faq" className="text-stone-500">FAQ</a>
|
||||
</div>
|
||||
<div className="flex flex-row gap-4">
|
||||
<Input placeholder="Rechercher des cartes" />
|
||||
{ !isLoggedIn &&
|
||||
<>
|
||||
<a href="/account/signin"><Button>Connexion</Button></a>
|
||||
<Button disabled={true}>Inscription</Button>
|
||||
<a href="/account/signin" className="text-stone-500">Connexion</a>
|
||||
<Button disabled={true} className="text-stone-500">Inscription</Button>
|
||||
</>
|
||||
}
|
||||
{
|
||||
isLoggedIn &&
|
||||
<>
|
||||
<a href="/account/profile/decks" className="flex flex-row items-center gap-2"><span className="text-gray-400">Decks</span></a>
|
||||
<a href="/account/profile/decks" className="flex flex-row items-center gap-2 text-stone-500">Decks</a>
|
||||
<a href="/account/profile" className="flex flex-row items-center gap-2">
|
||||
<IconUserFilled color="gray" />
|
||||
<span className="text-gray-400">{username}</span>
|
||||
<IconUserFilled color="stone-500" />
|
||||
<span className="text-stone-500">{username}</span>
|
||||
</a>
|
||||
</>
|
||||
}
|
||||
|
|
49
app/components/ui/symbols-icons.tsx
Normal file
|
@ -0,0 +1,49 @@
|
|||
import { cn } from "@/lib/utils"
|
||||
|
||||
interface SymbolsIconProps {
|
||||
className: string
|
||||
}
|
||||
|
||||
const PlaneswalkerIcon = ({ className }: SymbolsIconProps) => {
|
||||
return (
|
||||
<img className={cn("h-4",className)} src="/assets/planeswalker.svg"></img>
|
||||
)}
|
||||
PlaneswalkerIcon.displayName = "PlaneswalkerIcon"
|
||||
|
||||
const SorceryIcon = ({ className }: SymbolsIconProps) => {
|
||||
return (
|
||||
<img className={cn("h-4",className)} src="/assets/sorcery.svg"></img>
|
||||
)}
|
||||
SorceryIcon.displayName = "SorceryIcon"
|
||||
|
||||
const InstantIcon = ({ className }: SymbolsIconProps) => {
|
||||
return (
|
||||
<img className={cn("h-4",className)} src="/assets/instant.svg"></img>
|
||||
)}
|
||||
InstantIcon.displayName = "InstantIcon"
|
||||
|
||||
const CreatureIcon = ({ className }: SymbolsIconProps) => {
|
||||
return (
|
||||
<img className={cn("h-4",className)} src="/assets/creature.svg"></img>
|
||||
)}
|
||||
CreatureIcon.displayName = "CreatureIcon"
|
||||
|
||||
const ArtifactIcon = ({ className }: SymbolsIconProps) => {
|
||||
return (
|
||||
<img className={cn("h-4",className)} src="/assets/artifact.svg"></img>
|
||||
)}
|
||||
ArtifactIcon.displayName = "ArtifactIcon"
|
||||
|
||||
const EnchantmentIcon = ({ className }: SymbolsIconProps) => {
|
||||
return (
|
||||
<img className={cn("h-4",className)} src="/assets/enchantment.svg"></img>
|
||||
)}
|
||||
EnchantmentIcon.displayName = "EnchantmentIcon"
|
||||
|
||||
const LandIcon = ({ className }: SymbolsIconProps) => {
|
||||
return (
|
||||
<img className={cn("h-4",className)} src="/assets/land.svg"></img>
|
||||
)}
|
||||
LandIcon.displayName = "LandIcon"
|
||||
|
||||
export { PlaneswalkerIcon, SorceryIcon, InstantIcon, CreatureIcon, ArtifactIcon, EnchantmentIcon, LandIcon }
|
|
@ -1,10 +0,0 @@
|
|||
services:
|
||||
nginx:
|
||||
container_name: json_files
|
||||
image: nginx
|
||||
ports:
|
||||
- 8072:80
|
||||
volumes:
|
||||
- ./tools/json:/usr/share/nginx/html:ro
|
||||
- ./nginx.conf:/etc/nginx/conf.d/default.conf:ro
|
||||
restart: unless-stopped
|
|
@ -1,56 +0,0 @@
|
|||
server {
|
||||
listen 80;
|
||||
listen [::]:80;
|
||||
server_name localhost;
|
||||
|
||||
#access_log /var/log/nginx/host.access.log main;
|
||||
|
||||
location / {
|
||||
root /usr/share/nginx/html;
|
||||
index index.html index.htm;
|
||||
|
||||
if ($request_method = 'OPTIONS') {
|
||||
add_header 'Access-Control-Allow-Origin' '*';
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
|
||||
#
|
||||
# Custom headers and headers various browsers *should* be OK with but aren't
|
||||
#
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range';
|
||||
#
|
||||
# Tell client that this pre-flight info is valid for 20 days
|
||||
#
|
||||
add_header 'Access-Control-Max-Age' 1728000;
|
||||
add_header 'Content-Type' 'text/plain; charset=utf-8';
|
||||
add_header 'Content-Length' 0;
|
||||
return 204;
|
||||
}
|
||||
if ($request_method = 'POST') {
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
|
||||
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
|
||||
}
|
||||
if ($request_method = 'GET') {
|
||||
add_header 'Access-Control-Allow-Origin' '*' always;
|
||||
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS' always;
|
||||
add_header 'Access-Control-Allow-Headers' 'DNT,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type,Range' always;
|
||||
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range' always;
|
||||
}
|
||||
}
|
||||
|
||||
error_page 404 /404.html;
|
||||
|
||||
# redirect server error pages to the static page /50x.html
|
||||
#
|
||||
error_page 500 502 503 504 /50x.html;
|
||||
location = /50x.html {
|
||||
root /usr/share/nginx/html;
|
||||
}
|
||||
|
||||
# deny access to .htaccess files, if Apache's document root
|
||||
# concurs with nginx's one
|
||||
#
|
||||
#location ~ /\.ht {
|
||||
# deny all;
|
||||
#}
|
||||
}
|
|
@ -1,6 +1,7 @@
|
|||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
previewFeatures = ["relationJoins"]
|
||||
binaryTargets = ["native","linux-musl","linux-musl-openssl-3.0.x"]
|
||||
}
|
||||
|
||||
datasource db {
|
||||
|
|
38
app/public/assets/artifact.svg
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="600"
|
||||
height="849.88568"
|
||||
id="svg3234">
|
||||
<defs
|
||||
id="defs3236" />
|
||||
<metadata
|
||||
id="metadata3239">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-209.32562,77.669905)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 277.30227,767.01932 c -14.98382,-4.60496 -20.64186,-12.00446 -17.72072,-23.17455 2.54286,-9.72384 25.17485,-17.24278 60.09182,-19.96423 17.63669,-1.37448 37.91459,-4.62606 45.06184,-7.22544 37.25354,-13.54849 73.6648,-41.33741 82.79446,-63.18741 2.40778,-5.76203 6.99974,-43.7987 10.86075,-89.95941 6.1682,-73.74185 6.311,-80.39439 1.83471,-85.34071 -2.67002,-2.95053 -24.65509,-15.2711 -48.8556,-27.37918 C 372.66032,431.42116 364.58431,426.03025 344.2126,405.95958 323.19716,385.25499 319.73422,380.09259 306.75918,350.12703 290.92799,313.56525 263.72307,233.30669 255.45209,198.76349 250.4907,178.04213 248.79634,175.1888 231.38891,158.24067 217.33102,144.5539 212.143,137.20262 210.57731,128.75229 c -3.7542,-20.26282 0.63506,-32.423269 17.27292,-47.854696 l 15.18709,-14.08577 -2.14895,-61.0241488 c -2.08752,-59.2802402 -1.96714,-61.2551122 4.20972,-69.1076892 3.49724,-4.445957 11.36244,-9.473279 17.47826,-11.171974 15.25642,-4.237222 478.24875,-4.237222 493.50479,0 6.11602,1.698695 14.01192,6.756348 17.54646,11.239605 6.24525,7.921151 6.36243,9.719126 4.15075,63.68249188 C 776.52651,30.972325 775.65258,58.5171 775.83626,61.640761 c 0.18274,3.123662 7.04458,11.903485 15.24605,19.510969 16.3485,15.163915 20.73304,27.4421 16.99806,47.60056 -1.56757,8.46032 -6.76369,15.81122 -20.91841,29.59218 -17.48429,17.02274 -19.21595,19.92429 -24.18224,40.52263 -8.56807,35.53582 -35.54297,115.43249 -51.06935,151.25993 -12.98144,29.95501 -16.45739,35.13531 -37.46529,55.83255 -20.3719,20.07067 -28.4479,25.46158 -67.15712,44.82881 -24.20051,12.10808 -46.18539,24.42865 -48.85541,27.37918 -4.47647,4.94632 -4.33273,11.63051 1.84149,85.74461 3.7606,45.14059 8.48368,84.69115 10.77316,90.21299 8.72218,21.03653 45.99719,49.15212 82.87508,62.51128 7.14726,2.58902 27.63596,5.93366 45.52999,7.43229 35.25983,2.95335 57.12094,10.20403 59.62405,19.77603 3.01214,11.51936 -2.67134,18.50347 -19.00533,23.35408 -22.89442,6.79911 -440.58943,6.63691 -462.76872,-0.17897 z"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7117"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
38
app/public/assets/creature.svg
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="600.00006"
|
||||
height="533.4812"
|
||||
id="svg3208">
|
||||
<defs
|
||||
id="defs3210" />
|
||||
<metadata
|
||||
id="metadata3213">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-510.31037,-331.03141)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 713.85991,852.97324 c -13.24237,-13.24237 -14.84693,-23.54582 -7.09008,-45.53094 6.99159,-19.81635 16.57282,-30.21975 46.99885,-51.03259 15.37837,-10.51951 42.36291,-30.01837 59.96548,-43.3307 30.71662,-23.23012 46.24631,-32.88718 138.57862,-86.17383 67.21712,-38.79226 157.99762,-74.97988 157.99762,-62.98235 0,5.72718 -21.6024,21.17322 -51.8605,37.08105 -38.8505,20.42524 -148.00006,94.34145 -180.46523,122.21143 -25.57402,21.9543 -59.52308,58.95089 -95.23194,103.78065 -32.31156,40.56494 -48.28299,46.58727 -68.89282,25.97728 z M 582.44653,816.20576 c -8.45298,-9.07328 -10.25942,-20.87627 -6.1929,-40.46499 5.2375,-25.22816 4.44304,-50.05388 -2.02527,-63.29429 -4.62779,-9.47312 -9.75636,-13.42386 -30.8275,-23.74688 -13.90181,-6.81075 -27.06754,-14.83324 -29.25718,-17.82777 -8.88347,-12.14885 -1.85438,-42.35067 16.19924,-69.60247 15.03429,-22.6943 70.08906,-84.7188 103.21529,-116.28207 34.27584,-32.65888 56.12645,-47.6048 82.96195,-56.74722 20.31794,-6.9218 32.05522,-12.39753 98.21751,-45.81973 78.12883,-39.46719 156.03835,-62.44863 156.03835,-46.0273 0,2.79086 -15.37038,11.06447 -42.01036,22.61341 -58.01571,25.15103 -67.51638,30.78852 -109.88679,65.20542 -20.43225,16.59679 -52.72358,41.95507 -71.75852,56.35162 -36.37515,27.5111 -64.18822,55.36967 -93.04461,93.19691 -37.09377,48.6251 -41.04109,58.81668 -29.87389,77.13251 3.29473,5.40382 5.94112,13.84359 5.99037,18.75463 0.11904,11.89398 5.92237,8.12016 11.5416,3.70876 8.32595,-6.53631 22.8854,-19.75439 46.97278,-42.4296 63.70864,-59.9738 148.65491,-122.48685 207.54269,-152.73336 37.96748,-19.50115 139.96581,-61.43062 168.98981,-69.46828 26.6216,-7.37234 42.0707,-8.09195 42.0707,-1.95939 0,5.34202 -7.4131,9.84589 -70.7112,42.96168 -87.20664,45.62406 -123.09569,71.60314 -191.85365,138.87721 -37.24738,36.4438 -103.39288,96.203 -150.30449,135.79298 -5.41638,4.57104 -24.86797,25.80313 -43.2257,47.1823 -18.35757,21.37917 -36.85635,41.60758 -41.10811,44.95205 -9.97667,7.84768 -20.15683,7.72767 -27.66012,-0.32613 z"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7130"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
38
app/public/assets/enchantment.svg
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="600"
|
||||
height="470.37875"
|
||||
id="svg3193">
|
||||
<defs
|
||||
id="defs3195" />
|
||||
<metadata
|
||||
id="metadata3198">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-74.617828,-93.966166)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="M 227.47403,561.75843 C 207.24579,558.40482 79.908114,529.25417 76.620024,527.22197 c -4.4587,-2.75567 0.63436,-6.37383 11.94276,-8.48412 9.97287,-1.86114 82.172696,-20.26915 112.536416,-28.69223 13.22825,-3.66957 19.03248,-12.07303 14.36399,-20.7963 -2.70246,-5.04959 -66.2607,-60.97927 -123.865836,-108.99867 -17.4482,-14.54494 -20.99596,-20.17028 -12.72047,-20.17028 2.49562,0 41.615306,14.96527 86.932496,33.25621 45.31731,18.29081 84.80719,32.79907 87.75534,32.24037 12.29295,-2.32957 8.13469,-17.7239 -30.48361,-112.85687 -36.69419,-90.39306 -42.61293,-108.76388 -33.37597,-103.59465 2.37278,1.32796 33.44868,41.23856 69.05753,88.69028 65.01878,86.64283 70.75428,92.55169 79.54961,81.95408 2.10247,-2.53346 9.05782,-56.11536 16.80808,-129.48607 13.49588,-127.76175 14.71997,-136.317554 19.50335,-136.317554 4.34971,0 5.27361,6.636194 19.16919,137.690004 13.71054,129.30808 14.97592,135.29299 27.7473,131.23949 3.14139,-0.99699 35.22173,-40.97928 71.28978,-88.84954 36.06792,-47.87026 66.73875,-87.03675 68.15723,-87.03675 5.88502,0 0.85671,15.01798 -33.70527,100.66907 -19.95652,49.45557 -37.46987,93.80604 -38.91862,98.55659 -3.15267,10.33757 1.03675,19.876 8.72994,19.876 2.94199,0 40.37442,-14.35605 83.18303,-31.90223 77.0726,-31.59011 94.34154,-37.44717 94.34154,-31.99762 0,1.54671 -20.5133,20.27107 -45.58507,41.60991 -99.32162,84.53292 -101.26842,86.50973 -95.60896,97.08439 3.63533,6.79275 6.01606,7.57393 78.16486,25.6479 66.48498,16.65536 64.76143,16.10807 61.2801,19.4563 -4.07799,3.92193 -104.24375,26.84943 -163.46883,37.41742 -14.61264,2.60731 -16.35991,-1.26179 -16.4407,-36.40478 -0.0616,-26.69068 -1.29076,-35.41639 -7.00754,-49.73205 -9.69782,-24.28443 -34.12561,-51.39814 -59.91009,-62.87234 -34.77689,-15.47576 -73.57113,-14.51621 -103.07505,-0.0244 -47.33861,23.25102 -71.40325,66.16517 -67.37271,119.91724 1.67751,22.37059 1.20421,24.74863 -3.96604,27.76294 -8.05186,4.69324 -17.16443,0.84312 -24.15377,-0.3157 z"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7143"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.9 KiB |
38
app/public/assets/instant.svg
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="600"
|
||||
height="798.29449"
|
||||
id="svg3260">
|
||||
<defs
|
||||
id="defs3262" />
|
||||
<metadata
|
||||
id="metadata3265">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-126.2445,-111.90626)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 371.57707,908.61481 c -0.98691,-0.9867 -0.94614,-4.0257 0.09,-6.7534 1.03667,-2.7275 39.21124,-63.714 84.8321,-135.5256 45.6207,-71.8114 84.60551,-133.6678 86.63266,-137.4585 5.863,-10.9625 3.04531,-25.2559 -5.97086,-30.2919 -7.10708,-3.9695 -24.22149,-1.7812 -193.59847,24.7552 -102.19094,16.0103 -189.33421,29.0708 -193.65129,29.0234 -12.63035,-0.1393 -23.66671,-10.7845 -23.66671,-22.8293 0,-12.7751 13.70899,-39.2564 96.33389,-186.08678 76.14904,-135.32228 74.83463,-130.01779 34.29302,-138.38284 -13.28704,-2.74159 -18.94621,-12.09393 -15.53722,-25.67637 2.92691,-11.66213 79.52303,-137.50094 91.12775,-149.71292 5.66664,-5.96322 15.43242,-12.37896 21.70173,-14.2573 14.40509,-4.31589 326.25013,-4.83092 337.49053,-0.55733 11.073,4.21007 14.825,12.9869 10.1836,23.82282 -2.0915,4.88238 -78.06728,85.99788 -168.83526,180.25652 -90.76781,94.25884 -166.69058,174.54354 -168.71654,178.41048 -2.96548,5.65984 -2.88683,8.12082 0.40223,12.61897 3.93336,5.37923 8.10248,4.7774 111.68733,-16.12173 59.18105,-11.94037 112.66675,-21.69884 118.85742,-21.68576 14.92691,0.0323 20.99833,6.6442 29.31161,31.92359 15.48761,47.09528 20.46141,50.82765 63.56401,47.70085 32.041,-2.32424 40.7414,0.87122 37.5031,13.7744 -1.003,3.9957 -25.1768,30.1217 -53.7198,58.0577 -28.5429,27.9363 -89.04025,87.3578 -134.43826,132.048 -162.15269,159.625 -160.61628,158.2083 -165.8766,152.9478 z"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7156"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.3 KiB |
38
app/public/assets/land.svg
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="600"
|
||||
height="470.40985"
|
||||
id="svg3167">
|
||||
<defs
|
||||
id="defs3169" />
|
||||
<metadata
|
||||
id="metadata3172">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-109.58004,-73.095985)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="M 328.63936,541.67929 C 246.53884,533.77761 165.84388,512.6966 132.07303,490.32766 96.641563,466.85884 102.10545,442.36571 155.33678,386.04328 c 47.79682,-50.57247 69.78599,-92.9501 100.81797,-194.29796 20.38021,-66.55995 39.18723,-108.401257 51.90149,-115.468842 19.63437,-10.914083 33.19725,4.882525 59.18602,68.933912 27.62365,68.08066 51.2835,109.36882 80.49105,140.46283 8.81695,9.38627 17.39024,15.77384 21.17158,15.77384 7.47226,0 18.42198,-13.08595 38.06261,-45.48852 15.90054,-26.23243 28.05191,-34.47776 46.56017,-31.59338 17.13916,2.6709 30.08009,19.69425 45.28907,59.57568 7.13786,18.71712 17.37737,42.81959 22.75449,53.56078 10.08757,20.15073 35.72363,57.03791 39.7181,57.14976 4.60422,0.12868 39.1318,34.82074 43.89588,44.10456 14.44499,28.14975 -6.88892,53.0083 -61.48392,71.64177 -65.61796,22.39567 -124.91599,31.36027 -217.5119,32.88281 -38.00751,0.62508 -81.90503,-0.0957 -97.55003,-1.60123 z"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7169"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 1.9 KiB |
61
app/public/assets/planeswalker.svg
Normal file
|
@ -0,0 +1,61 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="600"
|
||||
height="1204.1633"
|
||||
id="svg3570">
|
||||
<defs
|
||||
id="defs3572">
|
||||
<clipPath
|
||||
id="clipPath3783">
|
||||
<path
|
||||
d="M 0,300 147,300 147,0 0,0 0,300 z"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3785" />
|
||||
</clipPath>
|
||||
</defs>
|
||||
<metadata
|
||||
id="metadata3575">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-128.125,398.84217)"
|
||||
id="layer1">
|
||||
<g
|
||||
transform="matrix(4.0816327,0,0,-4.0816327,128.125,815.48356)"
|
||||
id="g3777">
|
||||
<g
|
||||
id="g3779">
|
||||
<g
|
||||
clip-path="url(#clipPath3783)"
|
||||
id="g3781">
|
||||
<g
|
||||
transform="translate(145.458,184.2598)"
|
||||
id="g3787">
|
||||
<path
|
||||
d="m 0,0 c -1.245,32.734 -4.061,45.164 -5.927,45.164 -1.894,0 -2.49,-18.131 -4.979,-34.153 -2.49,-15.985 -6.874,-34.113 -6.874,-34.113 l -11.204,4.268 c 0,0 -3.141,23.131 -4.385,50.851 -1.216,27.721 -2.164,51.931 -5.63,51.931 -3.382,0.029 -4.031,-22.762 -5.276,-52.296 -1.246,-29.517 -5.601,-45.865 -5.601,-45.865 l -10.283,1.433 c 0,0 -4.98,25.602 -6.848,103.807 -0.433,18.509 -4.951,22.223 -4.951,22.223 0,0 -4.52,-3.714 -4.953,-22.223 -1.866,-78.205 -6.874,-103.807 -6.874,-103.807 l -10.257,-1.433 c 0,0 -4.382,16.348 -5.627,45.865 -1.245,29.534 -1.869,52.325 -5.276,52.296 -3.438,0 -4.386,-24.21 -5.659,-51.931 -1.216,-27.72 -4.33,-50.851 -4.33,-50.851 l -11.204,-4.268 c 0,0 -4.382,18.128 -6.872,34.113 -2.489,16.022 -3.113,34.153 -4.979,34.153 -1.868,0 -4.681,-12.43 -5.927,-45.164 -1.245,-32.693 -1.542,-39.084 -1.542,-39.084 0,0 36.777,-15.67 51.093,-56.223 14.343,-40.529 17.969,-75.72 18.077,-79.627 0.188,-6.064 4.33,-6.836 4.33,-6.836 0,0 3.6,0.772 4.33,6.836 0.459,3.879 3.734,39.098 18.075,79.627 14.318,40.553 51.095,56.223 51.095,56.223 0,0 -0.299,6.391 -1.542,39.084"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path3789"
|
||||
style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" />
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 2.6 KiB |
38
app/public/assets/sorcery.svg
Normal file
|
@ -0,0 +1,38 @@
|
|||
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
|
||||
<!-- Created with Inkscape (http://www.inkscape.org/) -->
|
||||
|
||||
<svg
|
||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||
xmlns:cc="http://creativecommons.org/ns#"
|
||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||
xmlns:svg="http://www.w3.org/2000/svg"
|
||||
xmlns="http://www.w3.org/2000/svg"
|
||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||
version="1.1"
|
||||
width="600"
|
||||
height="758.45209"
|
||||
id="svg3338">
|
||||
<defs
|
||||
id="defs3340" />
|
||||
<metadata
|
||||
id="metadata3343">
|
||||
<rdf:RDF>
|
||||
<cc:Work
|
||||
rdf:about="">
|
||||
<dc:format>image/svg+xml</dc:format>
|
||||
<dc:type
|
||||
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
|
||||
<dc:title />
|
||||
</cc:Work>
|
||||
</rdf:RDF>
|
||||
</metadata>
|
||||
<g
|
||||
transform="translate(-248.75759,103.7998)"
|
||||
id="layer1">
|
||||
<path
|
||||
d="m 549.35881,651.15793 c -7.26111,-3.30528 -9.75906,-6.38344 -9.75906,-12.02521 0,-9.63732 8.08597,-14.82133 32.81288,-21.03582 10.615,-2.66807 21.08723,-6.33414 23.27159,-8.14697 6.81083,-5.65252 4.49888,-16.5977 -5.23635,-24.78929 -23.09774,-19.43541 -67.63066,-21.56509 -115.4088,-5.51909 -36.947,12.4082 -52.50696,14.06376 -79.62666,8.47176 -34.64907,-7.14427 -67.84003,-25.03721 -93.95261,-50.64833 -26.21188,-25.70856 -39.07084,-47.2129 -47.17177,-78.88733 -13.77915,-53.87651 -1.31183,-108.98633 31.84244,-140.75376 22.18432,-21.25618 63.3297,-33.24003 73.21822,-21.32512 3.03843,3.66117 1.3796,5.78081 -9.81608,12.54327 -38.97877,23.54405 -42.44669,77.09646 -7.39267,114.16076 29.4188,31.10591 66.36486,43.04256 133.33259,43.07667 77.97133,0.0397 108.53348,6.46944 138.17357,29.06853 15.91748,12.1362 33.35102,35.33256 37.51949,49.92138 5.0202,17.56954 7.82356,20.67854 15.123,16.77202 9.13048,-4.88654 17.30572,-26.03103 17.38026,-44.95259 0.17058,-43.53187 -29.41295,-86.80809 -73.86362,-108.04745 -17.36811,-8.29885 -26.87761,-10.32104 -98.17715,-20.87833 -23.04844,-3.41301 -33.22998,-7.90698 -48.71307,-21.50106 -11.7892,-10.35119 -19.40549,-22.99003 -19.40549,-32.20276 0,-8.91341 3.13517,-9.47539 23.06736,-4.13482 14.85755,3.98106 19.78241,4.20141 27.00777,1.20854 13.29452,-5.5067 20.36543,-19.68263 20.42174,-40.94091 0.11216,-42.38594 -35.18535,-71.20981 -114.03762,-93.1233 C 356.52243,185.39467 317.72545,156.03943 301.5472,122.99917 284.34055,87.85892 279.29745,39.536552 288.96328,2.4264521 306.88472,-66.378407 371.02643,-108.50168 450.07709,-103.38006 c 35.58306,2.30541 62.68734,13.967959 58.74366,25.276943 -0.4129,1.184015 -14.26332,2.339288 -30.77877,2.567351 -19.8892,0.274798 -34.59065,2.122206 -43.54098,5.471189 -43.63514,16.327808 -61.94402,50.84462 -49.67719,93.654906 7.33612,25.603172 28.66824,44.991379 77.06305,70.040047 48.43336,25.068764 50.03238,26.213994 89.59182,64.170704 37.99478,36.45512 51.65803,44.90072 72.63941,44.90072 48.47589,0 64.72472,-58.86938 28.19389,-102.14586 C 642.01314,88.355472 633.86991,84.008945 592.149,68.443608 565.01575,58.320717 558.94683,54.937385 558.15912,49.494938 c -1.87638,-12.964572 19.99622,-15.887338 58.8897,-7.869829 45.31432,9.341259 94.90108,38.511196 137.35432,80.800391 40.53175,40.37475 65.35563,84.30293 80.83521,143.04448 35.48117,134.64419 -0.2748,268.71238 -90.85178,340.65077 -22.29018,17.70367 -59.43089,35.45314 -87.67712,41.90131 -31.36972,7.1611 -94.45921,9.00407 -107.35064,3.13587 z"
|
||||
inkscape:connector-curvature="0"
|
||||
id="path7218"
|
||||
style="fill:#000000" />
|
||||
</g>
|
||||
</svg>
|
After Width: | Height: | Size: 3.4 KiB |
|
@ -65,6 +65,7 @@ function getColorName(colorArray) {
|
|||
|
||||
async function createJson() {
|
||||
console.log("Fetching data...")
|
||||
console.log(process.env.NODE_ENV)
|
||||
const bsets = await db.bset.findMany({
|
||||
relationLoadStrategy: "join",
|
||||
include: {
|
||||
|
@ -165,7 +166,12 @@ async function createJson() {
|
|||
}
|
||||
})
|
||||
|
||||
writeFileSync(import.meta.dirname + "/json/misc/bsets.json",JSON.stringify(bsets_list_export), 'utf8')
|
||||
if(process.env.NODE_ENV == "production") {
|
||||
console.log('Production detected !')
|
||||
writeFileSync("/app/data/misc/bsets.json",JSON.stringify(bsets_list_export), 'utf8')
|
||||
} else {
|
||||
writeFileSync(import.meta.dirname + "/json/misc/bsets.json",JSON.stringify(bsets_list_export), 'utf8')
|
||||
}
|
||||
|
||||
|
||||
//for (const card of all_cards) {
|
||||
|
@ -173,7 +179,12 @@ async function createJson() {
|
|||
|
||||
for (const index of Object.keys(commanderData)) {
|
||||
let JSONToWrite = commanderData[index].sort((a,b) => b.percent_decks - a.percent_decks)
|
||||
writeFileSync(import.meta.dirname + "/json/commander/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
if(process.env.NODE_ENV == "production") {
|
||||
console.log('Production detected !')
|
||||
writeFileSync("/app/data/commander/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
} else {
|
||||
writeFileSync(import.meta.dirname + "/json/commander/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
}
|
||||
}
|
||||
|
||||
for (const index of Object.keys(bset_cards_data_export)) {
|
||||
|
@ -181,7 +192,12 @@ async function createJson() {
|
|||
for (const type of Object.keys(JSONToWrite)) {
|
||||
JSONToWrite[type] = JSONToWrite[type].sort((a,b) => b.percent_decks - a.percent_decks)
|
||||
}
|
||||
writeFileSync(import.meta.dirname + "/json/bset/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
if(process.env.NODE_ENV == "production") {
|
||||
console.log('Production detected !')
|
||||
writeFileSync("/app/data/bset/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
} else {
|
||||
writeFileSync(import.meta.dirname + "/json/bset/" + index + ".json",JSON.stringify(JSONToWrite), 'utf8')
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,6 @@
|
|||
{
|
||||
"compilerOptions": {
|
||||
"target": "es2023",
|
||||
"lib": ["dom", "dom.iterable", "esnext"],
|
||||
"allowJs": true,
|
||||
"skipLibCheck": true,
|
||||
|
|