프로젝트 초기 상태를 기준으로 저장소를 재구성하고 업로드 규칙을 정비한다. 이미지 자산은 Git LFS를 통해 원격 용량 제한에 대응한다. Made-with: Cursor
523 lines
28 KiB
HTML
523 lines
28 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<link href="./style/tailwind.css" rel="stylesheet" />
|
|
</head>
|
|
<body>
|
|
<div class="bg-white">
|
|
<div>
|
|
<main class="mx-auto w-full px-4 sm:px-6 lg:px-8">
|
|
<div class="flex items-baseline justify-between border-b border-gray-200 pt-8 pb-6">
|
|
<a href="./index.html"><h1 class="text-4xl font-bold tracking-tight text-gray-900">Title</h1></a>
|
|
<div class="flex items-center"></div>
|
|
</div>
|
|
|
|
<section aria-labelledby="products-heading" class="pt-6 pb-12">
|
|
<div class="grid grid-cols-1 gap-x-8 gap-y-2 lg:grid-cols-4">
|
|
<!-- 필터 섹션 -->
|
|
<div class="lg:block">
|
|
<!-- <div class="lg:hidden">
|
|
<button
|
|
id="filterToggle"
|
|
class="w-full flex items-center justify-between pl-4 pr-2 py-2 text-sm font-medium text-gray-700 bg-white border border-gray-300 rounded-md hover:bg-gray-50 cursor-pointer">
|
|
<span>필터 메뉴</span>
|
|
<svg
|
|
class="w-4 h-4 transform transition-transform duration-200"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
viewBox="0 0 24 24">
|
|
<path
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"
|
|
stroke-width="2"
|
|
d="M19 9l-7 7-7-7" />
|
|
</svg>
|
|
</button>
|
|
</div> -->
|
|
<div
|
|
id="filterContent"
|
|
class="absolute z-10 mt-1 w-[calc(100%-3rem)] max-h-96 overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black/5 focus:outline-none sm:text-sm hidden lg:block lg:relative lg:mt-0 lg:w-full lg:max-h-none lg:overflow-visible lg:shadow-none lg:ring-0">
|
|
<div class="p-4">
|
|
<div>
|
|
<div class="flex items-center space-x-4 lg:flex-col lg:items-start">
|
|
<label class="text-base font-medium text-gray-900">언어 선택</label>
|
|
<div class="flex items-center space-x-4">
|
|
<div class="flex items-center">
|
|
<input
|
|
id="ko"
|
|
name="language"
|
|
type="radio"
|
|
value="ko"
|
|
class="h-4 w-4 border-gray-300 text-indigo-600 focus:ring-indigo-600 cursor-pointer"
|
|
checked />
|
|
<label
|
|
for="ko"
|
|
class="ml-2 block text-sm font-medium leading-6 text-gray-900 cursor-pointer">
|
|
한국어
|
|
</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="ja"
|
|
name="language"
|
|
type="radio"
|
|
value="ja"
|
|
class="h-4 w-4 border-gray-300 text-indigo-600 focus:ring-indigo-600 cursor-pointer" />
|
|
<label
|
|
for="ja"
|
|
class="ml-2 block text-sm font-medium leading-6 text-gray-900 cursor-pointer">
|
|
日本語
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<p class="text-sm text-gray-500">선택한 언어로 표시됩니다</p>
|
|
</div>
|
|
|
|
<div class="flex items-center justify-between">
|
|
<div class="w-full">
|
|
<form id="searchForm" class="mb-4">
|
|
<label
|
|
for="search-input"
|
|
class="block text-sm font-medium leading-6 text-gray-900">
|
|
직접 검색
|
|
</label>
|
|
<div class="relative mt-2 flex rounded-md shadow-sm">
|
|
<span
|
|
class="inline-flex items-center rounded-l-md border border-r-0 border-gray-300 px-3 text-gray-500 sm:text-sm">
|
|
게임명
|
|
</span>
|
|
<input
|
|
type="text"
|
|
name="search-input"
|
|
id="search-input"
|
|
class="block w-full px-2 min-w-0 flex-1 rounded-none rounded-r-md py-1.5 text-gray-900 ring-1 ring-inset ring-gray-300 placeholder:text-gray-400 focus:ring-2 focus:ring-inset focus:ring-indigo-600 sm:text-sm sm:leading-6"
|
|
placeholder=" " />
|
|
<div
|
|
class="cursor-pointer absolute inset-y-0 right-0 flex items-center pr-3"
|
|
id="reset-search">
|
|
<svg
|
|
class="h-5 w-5 text-gray-400"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M10 18a8 8 0 100-16 8 8 0 000 16zM8.28 7.22a.75.75 0 00-1.06 1.06L8.94 10l-1.72 1.72a.75.75 0 101.06 1.06L10 11.06l1.72 1.72a.75.75 0 101.06-1.06L11.06 10l1.72-1.72a.75.75 0 00-1.06-1.06L10 8.94 8.28 7.22z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</div>
|
|
</div>
|
|
</form>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="flex items-center justify-between">
|
|
<button
|
|
type="button"
|
|
class="w-full rounded-md bg-indigo-600 px-3 py-2 text-sm font-semibold text-white shadow-sm hover:bg-indigo-500 focus-visible:outline focus-visible:outline-2 focus-visible:outline-offset-2 focus-visible:outline-indigo-600"
|
|
id="resetFilters">
|
|
필터 초기화
|
|
</button>
|
|
</div>
|
|
|
|
<div class="mt-6 space-y-6">
|
|
<!-- 언어 필터 -->
|
|
<div class="space-y-2">
|
|
<h3 class="text-base font-medium text-gray-900">Language</h3>
|
|
<div class="space-y-2">
|
|
<div class="language">
|
|
<div class="flex items-center">
|
|
<input
|
|
id="korean-support"
|
|
name="language-filter"
|
|
type="checkbox"
|
|
value="koreanSupport"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label
|
|
for="korean-support"
|
|
class="ml-3 text-sm font-medium leading-6 text-gray-900">
|
|
한국어 지원
|
|
</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="korean-not-support"
|
|
name="language-filter"
|
|
type="checkbox"
|
|
value="koreanNotSupport"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label
|
|
for="korean-not-support"
|
|
class="ml-3 text-sm font-medium leading-6 text-gray-900">
|
|
한국어 미지원
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 상태 필터 -->
|
|
<div class="space-y-2">
|
|
<h3 class="text-base font-medium text-gray-900">Status</h3>
|
|
<div class="space-y-2">
|
|
<div class="flex items-center">
|
|
<input
|
|
id="package"
|
|
name="status-filter"
|
|
type="checkbox"
|
|
value="package"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="package" class="ml-2 text-sm text-gray-900">Package</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="download"
|
|
name="status-filter"
|
|
type="checkbox"
|
|
value="download"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="download" class="ml-2 text-sm text-gray-900">
|
|
Download
|
|
</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="extension"
|
|
name="status-filter"
|
|
type="checkbox"
|
|
value="extension"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="extension" class="ml-2 text-sm text-gray-900">
|
|
Extension
|
|
</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="sold"
|
|
name="status-filter"
|
|
type="checkbox"
|
|
value="sold"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="sold" class="ml-2 text-sm text-gray-900">Sold</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- 국가 필터 -->
|
|
<div class="space-y-2">
|
|
<h3 class="text-base font-medium text-gray-900">Edition</h3>
|
|
<div class="space-y-2">
|
|
<div class="flex items-center">
|
|
<input
|
|
id="kor"
|
|
name="country-filter"
|
|
type="checkbox"
|
|
value="KOR"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="kor" class="ml-2 text-sm text-gray-900">
|
|
Korea Edition
|
|
</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="jpn"
|
|
name="country-filter"
|
|
type="checkbox"
|
|
value="JPN"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="jpn" class="ml-2 text-sm text-gray-900">
|
|
Japan Edition
|
|
</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
|
|
<!-- CERO 필터 -->
|
|
<div class="space-y-2">
|
|
<h3 class="text-base font-medium text-gray-900">CERO</h3>
|
|
<div class="space-y-2">
|
|
<div class="flex items-center">
|
|
<input
|
|
id="cero-a"
|
|
name="cero-filter"
|
|
type="checkbox"
|
|
value="A"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="cero-a" class="ml-2 text-sm text-gray-900">A</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="cero-b"
|
|
name="cero-filter"
|
|
type="checkbox"
|
|
value="B"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="cero-b" class="ml-2 text-sm text-gray-900">B</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="cero-c"
|
|
name="cero-filter"
|
|
type="checkbox"
|
|
value="C"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="cero-c" class="ml-2 text-sm text-gray-900">C</label>
|
|
</div>
|
|
<div class="flex items-center">
|
|
<input
|
|
id="cero-d"
|
|
name="cero-filter"
|
|
type="checkbox"
|
|
value="D"
|
|
class="h-4 w-4 rounded border-gray-300 text-indigo-600 focus:ring-indigo-600" />
|
|
<label for="cero-d" class="ml-2 text-sm text-gray-900">D</label>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="lg:col-span-3">
|
|
<div class="sm:px-6 lg:px-8">
|
|
<div class="flex flex-col">
|
|
<div class="flex items-center justify-between sm:flex-auto sm:-mx-6 lg:-mx-4">
|
|
<p class="mt-2 sm:mt-0 text-sm text-gray-700">
|
|
개수:
|
|
<span id="gameCount">0</span>
|
|
</p>
|
|
<div class="sort">
|
|
<div class="flex items-center gap-2">
|
|
<label id="sort-label" class="block text-sm/6 font-medium text-gray-900">
|
|
정렬
|
|
</label>
|
|
<div class="relative w-40 mt-2 sm:mt-0">
|
|
<button
|
|
type="button"
|
|
class="flex justify-between items-center w-full cursor-pointer rounded-md bg-white py-1.5 pl-3 pr-2 text-left text-gray-900 outline outline-1 -outline-offset-1 outline-gray-300 focus:outline focus:outline-2 focus:-outline-offset-2 focus:outline-indigo-600 sm:text-sm/6"
|
|
id="sort-button"
|
|
aria-expanded="false"
|
|
aria-haspopup="true">
|
|
<span class="col-start-1 row-start-1 truncate pr-6">순번 최신순</span>
|
|
<svg
|
|
class="w-4 h-4 transform transition-transform duration-200"
|
|
fill="none"
|
|
stroke="currentColor"
|
|
viewBox="0 0 24 24">
|
|
<path
|
|
stroke-linecap="round"
|
|
stroke-linejoin="round"
|
|
stroke-width="2"
|
|
d="M19 9l-7 7-7-7" />
|
|
</svg>
|
|
</button>
|
|
|
|
<ul
|
|
id="sort-options"
|
|
class="absolute z-10 mt-1 max-h-60 w-full overflow-auto rounded-md bg-white py-1 text-base shadow-lg ring-1 ring-black/5 focus:outline-none sm:text-sm hidden"
|
|
tabindex="-1"
|
|
role="listbox"
|
|
aria-labelledby="sort-label">
|
|
<li
|
|
class="relative cursor-pointer hover:bg-gray-100 select-none py-2 pl-3 pr-9 text-gray-900"
|
|
role="option"
|
|
data-value="sortByNoDesc">
|
|
<span class="block truncate font-semibold">순번 최신순</span>
|
|
<span
|
|
class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600">
|
|
<svg
|
|
class="size-5"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
data-slot="icon">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
</li>
|
|
<li
|
|
class="relative cursor-pointer hover:bg-gray-100 select-none py-2 pl-3 pr-9 text-gray-900"
|
|
role="option"
|
|
data-value="sortByNo">
|
|
<span class="block truncate">순번 과거순</span>
|
|
<span
|
|
class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 hidden">
|
|
<svg
|
|
class="size-5"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
data-slot="icon">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
</li>
|
|
<li
|
|
class="relative cursor-pointer hover:bg-gray-100 select-none py-2 pl-3 pr-9 text-gray-900"
|
|
role="option"
|
|
data-value="sortByDateDesc">
|
|
<span class="block truncate">발매일 최신순</span>
|
|
<span
|
|
class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 hidden">
|
|
<svg
|
|
class="size-5"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
data-slot="icon">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
</li>
|
|
<li
|
|
class="relative cursor-pointer hover:bg-gray-100 select-none py-2 pl-3 pr-9 text-gray-900"
|
|
role="option"
|
|
data-value="sortByDate">
|
|
<span class="block truncate">발매일 과거순</span>
|
|
<span
|
|
class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 hidden">
|
|
<svg
|
|
class="size-5"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
data-slot="icon">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
</li>
|
|
<li
|
|
class="relative cursor-pointer hover:bg-gray-100 select-none py-2 pl-3 pr-9 text-gray-900"
|
|
role="option"
|
|
data-value="sortByPurchaseDateDesc">
|
|
<span class="block truncate">구매일 최신순</span>
|
|
<span
|
|
class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 hidden">
|
|
<svg
|
|
class="size-5"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
data-slot="icon">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
</li>
|
|
<li
|
|
class="relative cursor-pointer hover:bg-gray-100 select-none py-2 pl-3 pr-9 text-gray-900"
|
|
role="option"
|
|
data-value="sortByPurchaseDate">
|
|
<span class="block truncate">구매일 과거순</span>
|
|
<span
|
|
class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 hidden">
|
|
<svg
|
|
class="size-5"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
data-slot="icon">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
</li>
|
|
<li
|
|
class="relative cursor-pointer hover:bg-gray-100 select-none py-2 pl-3 pr-9 text-gray-900"
|
|
role="option"
|
|
data-value="sortByRandom">
|
|
<span class="block truncate">무작위</span>
|
|
<span
|
|
class="absolute inset-y-0 right-0 flex items-center pr-4 text-indigo-600 hidden">
|
|
<svg
|
|
class="size-5"
|
|
viewBox="0 0 20 20"
|
|
fill="currentColor"
|
|
aria-hidden="true"
|
|
data-slot="icon">
|
|
<path
|
|
fill-rule="evenodd"
|
|
d="M16.704 4.153a.75.75 0 0 1 .143 1.052l-8 10.5a.75.75 0 0 1-1.127.075l-4.5-4.5a.75.75 0 0 1 1.06-1.06l3.894 3.893 7.48-9.817a.75.75 0 0 1 1.05-.143Z"
|
|
clip-rule="evenodd" />
|
|
</svg>
|
|
</span>
|
|
</li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="mt-8 flow-root">
|
|
<div class="-my-2 -mx-4 overflow-x-auto sm:-mx-6 lg:-mx-8">
|
|
<div class="inline-block min-w-full py-2 align-middle sm:px-2 lg:px-4">
|
|
<div
|
|
class="overflow-hidden shadow ring-1 ring-black ring-opacity-5 sm:rounded-lg">
|
|
<table class="min-w-full divide-y divide-gray-300">
|
|
<thead class="bg-gray-50">
|
|
<tr>
|
|
<th
|
|
scope="col"
|
|
class="py-3.5 pl-4 pr-3 text-left text-sm font-semibold text-gray-900">
|
|
Title
|
|
</th>
|
|
<th
|
|
scope="col"
|
|
class="hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 lg:table-cell">
|
|
Infomation
|
|
</th>
|
|
<th
|
|
scope="col"
|
|
class="px-3 py-3.5 text-left text-sm font-semibold text-gray-900">
|
|
Status
|
|
</th>
|
|
<th
|
|
scope="col"
|
|
class="hidden px-3 py-3.5 text-left text-sm font-semibold text-gray-900 lg:table-cell">
|
|
Role
|
|
</th>
|
|
<th
|
|
scope="col"
|
|
class="hidden py-3.5 pl-3 pr-4 text-left text-sm font-semibold text-gray-900 sm:table-cell">
|
|
Location
|
|
</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody
|
|
id="gameList"
|
|
class="divide-y divide-gray-200 bg-white"></tbody>
|
|
</table>
|
|
<div id="loading" class="hidden">Loading...</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</section>
|
|
</main>
|
|
</div>
|
|
</div>
|
|
<script type="module" src="./script/nsw.js"></script>
|
|
</body>
|
|
</html>
|