10 Commits
v0.1.6 ... main

5 changed files with 186 additions and 105 deletions

View File

@@ -50,8 +50,8 @@ jobs:
- name: Install uv
uses: astral-sh/setup-uv@v5
- name: Set up Python
run: uv python install
- name: "Set up Python"
uses: actions/setup-python@v6
with:
python-version-file: "pyproject.toml"

View File

@@ -1,6 +1,6 @@
[project]
name = "kompage"
version = "0.1.6"
version = "0.1.9"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
@@ -29,7 +29,7 @@ url = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple/"
[tool.bumpversion]
current_version = "0.1.6"
current_version = "0.1.9"
parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)"
serialize = ["{major}.{minor}.{patch}"]
search = "{current_version}"

View File

@@ -1,96 +1,135 @@
/* other styles are in magic.css */
/* ========== GRID LAYOUT ========== */
/* Modern UI refresh */
:root {
--bg: #0b1020;
--bg-soft: #0f172a;
--surface: #111827;
--surface-2: #0f172a;
--text: #e5e7eb;
--muted: #9ca3af;
--ring: #60a5fa;
--primary: #6366f1;
--primary-600: #4f46e5;
--success: #10b981;
--danger: #ef4444;
--warning: #f59e0b;
}
* { box-sizing: border-box; }
html, body {
margin: 0;
padding: 0;
background: linear-gradient(180deg, var(--bg), var(--bg-soft));
color: var(--text);
font-family: ui-sans-serif, system-ui, -apple-system, Segoe UI, Roboto, Ubuntu, Cantarell, Noto Sans, Helvetica Neue, Arial, "Apple Color Emoji", "Segoe UI Emoji";
}
body {
max-width: 1200px;
margin: 0 auto;
padding: 24px 16px 64px;
}
h1 {
font-size: 1.75rem;
line-height: 2rem;
margin: 0 0 16px 0;
font-weight: 700;
}
/* Layout */
.results {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
gap: 1em;
margin-top: 20px;
grid-template-columns: repeat(auto-fill, minmax(220px, 1fr));
gap: 16px;
margin-top: 16px;
}
/* Responsive: show 1 per row on small screens */
@media screen and (max-width: 768px) {
.results {
grid-template-columns: 1fr;
}
@media (max-width: 768px) {
.results { grid-template-columns: 1fr; }
}
/* ========== CARD STYLING ========== */
/* Cards */
.card {
position: relative;
padding: 10px;
border: 1px solid #ccc;
background: #fafafa;
border: 1px solid rgba(255,255,255,0.06);
background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02));
backdrop-filter: blur(6px);
text-align: center;
transition: box-shadow 0.2s transform 0.2s;
border-radius: 10px;
transition: box-shadow 0.2s ease, transform 0.2s ease, border-color 0.2s ease;
border-radius: 14px;
box-shadow:
0 1px 1px rgba(0,0,0,0.08),
0 10px 20px rgba(0,0,0,0.15);
}
.card:hover {
box-shadow: 0 0 10px #aaa;
transform: scale(1.1);
/* pop out by 10% */
z-index: 2;
/* ensure it appears above others */
box-shadow:
0 1px 1px rgba(0,0,0,0.08),
0 16px 32px rgba(0,0,0,0.25);
transform: translateY(-2px) scale(1.02);
z-index: 2;
}
.card img {
width: 100%;
height: auto;
}
.card img { width: 100%; height: auto; border-radius: 8px; }
/* ========== ACTION BUTTONS ========== */
.actions {
margin-top: 10px;
display: flex;
justify-content: space-around;
justify-content: space-between;
gap: 8px;
}
.actions .info {
background-color: #007bff;
color: white;
border: none;
padding: 0.5em 1em;
button, .button {
appearance: none;
border: 1px solid rgba(255,255,255,0.1);
background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.04));
color: var(--text);
padding: 8px 12px;
border-radius: 10px;
cursor: pointer;
border-radius: 5px;
margin-right: 0.5em;
transition: transform 0.15s ease, box-shadow 0.2s ease, border-color 0.2s ease;
}
.actions .info:hover {
background-color: #0056b3;
button:hover, .button:hover {
transform: translateY(-1px);
border-color: rgba(255,255,255,0.2);
box-shadow: 0 8px 16px rgba(0,0,0,0.25);
}
.actions .request {
background-color: #28a745;
color: white;
border: none;
padding: 0.5em 1em;
cursor: pointer;
border-radius: 5px;
}
.actions .info, .refresh, .index, .request-page { border-color: rgba(99,102,241,0.4); }
.actions .info { background: linear-gradient(180deg, rgba(99,102,241,0.35), rgba(99,102,241,0.2)); }
.actions .request { border-color: rgba(16,185,129,0.4); background: linear-gradient(180deg, rgba(16,185,129,0.35), rgba(16,185,129,0.2)); }
.delete-button { border-color: rgba(239,68,68,0.4); background: linear-gradient(180deg, rgba(239,68,68,0.35), rgba(239,68,68,0.2)); }
.reset { border-color: rgba(239,68,68,0.4); background: linear-gradient(180deg, rgba(239,68,68,0.35), rgba(239,68,68,0.2)); color: #fff; }
.actions .request:hover {
background-color: #1e7e34;
}
/* Page actions */
.refresh, .index, .request-page { padding: 10px 14px; }
/* ========== MODAL ========== */
.modal {
position: fixed;
z-index: 1;
left: 0;
top: 0;
width: 100%;
height: 100%;
overflow: auto;
background-color: rgba(0, 0, 0, 0.4);
z-index: 50;
inset: 0;
display: none;
background: rgba(2,6,23,0.7);
-webkit-backdrop-filter: blur(4px);
backdrop-filter: blur(4px);
}
.modal[style*="display: block"] { display: block; }
.modal-content {
background-color: #fefefe;
background: linear-gradient(180deg, rgba(255,255,255,0.06), rgba(255,255,255,0.03));
border: 1px solid rgba(255,255,255,0.1);
margin: 5% auto;
padding: 20px;
border: 1px solid #888;
width: 50%;
border-radius: 10px;
width: min(720px, 92%);
border-radius: 16px;
color: var(--text);
box-shadow: 0 20px 40px rgba(0,0,0,0.4);
}
.close {
@@ -98,6 +137,8 @@
font-size: 28px;
font-weight: bold;
cursor: pointer;
padding: 2px 8px;
border-radius: 8px;
}
/* ========== IMAGE CONTAINER ========== */
@@ -144,48 +185,72 @@ body.nsfw-disabled .image-container.nsfw:hover img {
pointer-events: none;
}
.download-badge {
position: absolute;
top: 8px;
right: 8px;
background-color: rgba(99,102,241,0.9);
color: white;
padding: 4px 8px;
font-size: 12px;
font-weight: 700;
border-radius: 6px;
z-index: 2;
}
.search-bar {
display: flex;
flex-direction: column;
gap: 10px;
gap: 12px;
margin-bottom: 20px;
padding: 16px;
border-radius: 16px;
background: linear-gradient(180deg, rgba(255,255,255,0.04), rgba(255,255,255,0.02));
border: 1px solid rgba(255,255,255,0.08);
box-shadow: 0 10px 20px rgba(0,0,0,0.25);
}
.search-bar select {
padding: 5px;
border: 1px solid #ccc;
border-radius: 4px;
.search-bar input[type="text"], .search-bar select {
padding: 10px 12px;
border-radius: 10px;
border: 1px solid rgba(255,255,255,0.15);
background: rgba(255,255,255,0.04);
color: var(--text);
outline: none;
transition: border-color 0.2s ease, box-shadow 0.2s ease;
}
.search-bar input[type="text"]:focus, .search-bar select:focus {
border-color: var(--ring);
box-shadow: 0 0 0 3px rgba(96,165,250,0.2);
}
.dropdown-content {
display: none;
position: absolute;
background-color: #f9f9f9;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
z-index: 1;
background-color: var(--surface);
color: var(--text);
min-width: 200px;
box-shadow: 0 12px 28px rgba(0,0,0,0.35);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 10px;
z-index: 5;
}
.dropdown-content .dropdown-item {
padding: 8px 16px;
padding: 10px 14px;
cursor: pointer;
}
.dropdown-content .dropdown-item:hover {
background-color: #f1f1f1;
background-color: rgba(255,255,255,0.06);
}
.dropdown-content.show {
display: block;
}
.reset {
/* Implement design here */
background-color: #f44336;
/* round the edges of the button */
border-radius: 9px;
}
.reset { border-radius: 10px; }
.selectors {
display: flex;
@@ -200,23 +265,38 @@ body.nsfw-disabled .image-container.nsfw:hover img {
/* ========== KOMGA SPECIFIC STYLES ========== */
.card.komga {
border: 3px solid green;
box-sizing: border-box;
/* disable the request button for entries in Komga */
/* only allow the info button to be clicked */
opacity: 0.3;
.card.komga::after {
content: 'In Komga';
position: absolute;
top: 10px;
left: 10px;
background: rgba(16,185,129,0.9);
color: white;
font-size: 12px;
font-weight: 700;
padding: 4px 8px;
border-radius: 6px;
z-index: 3;
}
.card.requested {
border: 3px solid orange;
box-sizing: border-box;
/* disable the request button for entries in Komga */
/* only allow the info button to be clicked */
opacity: 0.3;
.card.requested::after {
content: 'Requested';
position: absolute;
top: 10px;
left: 10px;
background: rgba(245,158,11,0.9);
color: #111827;
font-size: 12px;
font-weight: 700;
padding: 4px 8px;
border-radius: 6px;
z-index: 3;
}
.card.komga { opacity: 0.6; }
.card.requested { opacity: 0.8; }
.card.manga.requested .request {
pointer-events: none;
opacity: 0.5;
@@ -236,9 +316,8 @@ body.nsfw-disabled .image-container.nsfw:hover img {
position: absolute;
top: 5px;
right: 5px;
background-color: #dc3545;
color: white;
border: none;
border: 1px solid rgba(255,255,255,0.15);
padding: 0.5em;
cursor: pointer;
border-radius: 50%;

View File

@@ -330,7 +330,7 @@
}
// Add download badge if applicable
if (result.downloads && document.getElementById("checkAvailability").checked) {
if (document.getElementById("checkAvailability").checked) {
const downloadBadge = document.createElement('div');
downloadBadge.className = 'download-badge';
downloadBadge.textContent = `${result.downloads} Downloads`;

24
uv.lock generated
View File

@@ -14,7 +14,7 @@ wheels = [
[[package]]
name = "anilistapi"
version = "0.1.1"
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple/" }
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple" }
dependencies = [
{ name = "limit" },
{ name = "requests" },
@@ -279,7 +279,7 @@ wheels = [
[[package]]
name = "komcache"
version = "0.1.2"
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple/" }
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple" }
dependencies = [
{ name = "komconfig" },
{ name = "pymysql" },
@@ -293,7 +293,7 @@ wheels = [
[[package]]
name = "komconfig"
version = "0.2.2"
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple/" }
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple" }
dependencies = [
{ name = "omegaconf" },
]
@@ -305,7 +305,7 @@ wheels = [
[[package]]
name = "komgapi"
version = "0.1.1"
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple/" }
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple" }
dependencies = [
{ name = "httpx" },
{ name = "komconfig" },
@@ -358,8 +358,8 @@ requires-dist = [
[[package]]
name = "komsuite-nyaapy"
version = "0.1.2"
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple/" }
version = "0.1.3"
source = { registry = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/simple" }
dependencies = [
{ name = "bencodepy" },
{ name = "httpx" },
@@ -367,9 +367,9 @@ dependencies = [
{ name = "lxml" },
{ name = "regex" },
]
sdist = { url = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/files/komsuite-nyaapy/0.1.2/komsuite_nyaapy-0.1.2.tar.gz", hash = "sha256:8f336ba3977a0833f611c4dc6d589b817ace657eb5c32d713390ad981d28274d" }
sdist = { url = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/files/komsuite-nyaapy/0.1.3/komsuite_nyaapy-0.1.3.tar.gz", hash = "sha256:bb11afe8f722bea974760e17fb6c3f199de2bf298202718449ad2fa3fec88a41" }
wheels = [
{ url = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/files/komsuite-nyaapy/0.1.2/komsuite_nyaapy-0.1.2-py3-none-any.whl", hash = "sha256:3ea99891dd041a40613567a21adb6844d22532de429bd74b2fa8c062e038e7cb" },
{ url = "https://git.theprivateserver.de/api/packages/KomSuite/pypi/files/komsuite-nyaapy/0.1.3/komsuite_nyaapy-0.1.3-py3-none-any.whl", hash = "sha256:f8d3628759c8074928b412ea43305b9a972bac6eaaa645fbc4ab83cb14bef400" },
]
[[package]]
@@ -403,10 +403,12 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/52/46/3572761efc1bd45fcafb44a63b3b0feeb5b3f0066886821e94b0254f9253/lxml-6.0.0-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d18a25b19ca7307045581b18b3ec9ead2b1db5ccd8719c291f0cd0a5cec6cb81", size = 4947559, upload-time = "2025-06-28T18:47:31.091Z" },
{ url = "https://files.pythonhosted.org/packages/94/8a/5e40de920e67c4f2eef9151097deb9b52d86c95762d8ee238134aff2125d/lxml-6.0.0-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d4f0c66df4386b75d2ab1e20a489f30dc7fd9a06a896d64980541506086be1f1", size = 5102143, upload-time = "2025-06-28T18:47:33.612Z" },
{ url = "https://files.pythonhosted.org/packages/7c/4b/20555bdd75d57945bdabfbc45fdb1a36a1a0ff9eae4653e951b2b79c9209/lxml-6.0.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:9f4b481b6cc3a897adb4279216695150bbe7a44c03daba3c894f49d2037e0a24", size = 5021931, upload-time = "2025-06-26T16:26:47.503Z" },
{ url = "https://files.pythonhosted.org/packages/b6/6e/cf03b412f3763d4ca23b25e70c96a74cfece64cec3addf1c4ec639586b13/lxml-6.0.0-cp313-cp313-manylinux_2_27_ppc64le.manylinux_2_28_ppc64le.whl", hash = "sha256:8a78d6c9168f5bcb20971bf3329c2b83078611fbe1f807baadc64afc70523b3a", size = 5645469, upload-time = "2025-07-03T19:19:13.32Z" },
{ url = "https://files.pythonhosted.org/packages/d4/dd/39c8507c16db6031f8c1ddf70ed95dbb0a6d466a40002a3522c128aba472/lxml-6.0.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2ae06fbab4f1bb7db4f7c8ca9897dc8db4447d1a2b9bee78474ad403437bcc29", size = 5247467, upload-time = "2025-06-26T16:26:49.998Z" },
{ url = "https://files.pythonhosted.org/packages/4d/56/732d49def0631ad633844cfb2664563c830173a98d5efd9b172e89a4800d/lxml-6.0.0-cp313-cp313-manylinux_2_31_armv7l.whl", hash = "sha256:1fa377b827ca2023244a06554c6e7dc6828a10aaf74ca41965c5d8a4925aebb4", size = 4720601, upload-time = "2025-06-26T16:26:52.564Z" },
{ url = "https://files.pythonhosted.org/packages/8f/7f/6b956fab95fa73462bca25d1ea7fc8274ddf68fb8e60b78d56c03b65278e/lxml-6.0.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:1676b56d48048a62ef77a250428d1f31f610763636e0784ba67a9740823988ca", size = 5060227, upload-time = "2025-06-26T16:26:55.054Z" },
{ url = "https://files.pythonhosted.org/packages/97/06/e851ac2924447e8b15a294855caf3d543424364a143c001014d22c8ca94c/lxml-6.0.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:0e32698462aacc5c1cf6bdfebc9c781821b7e74c79f13e5ffc8bfe27c42b1abf", size = 4790637, upload-time = "2025-06-26T16:26:57.384Z" },
{ url = "https://files.pythonhosted.org/packages/06/d4/fd216f3cd6625022c25b336c7570d11f4a43adbaf0a56106d3d496f727a7/lxml-6.0.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:4d6036c3a296707357efb375cfc24bb64cd955b9ec731abf11ebb1e40063949f", size = 5662049, upload-time = "2025-07-03T19:19:16.409Z" },
{ url = "https://files.pythonhosted.org/packages/52/03/0e764ce00b95e008d76b99d432f1807f3574fb2945b496a17807a1645dbd/lxml-6.0.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7488a43033c958637b1a08cddc9188eb06d3ad36582cebc7d4815980b47e27ef", size = 5272430, upload-time = "2025-06-26T16:27:00.031Z" },
{ url = "https://files.pythonhosted.org/packages/5f/01/d48cc141bc47bc1644d20fe97bbd5e8afb30415ec94f146f2f76d0d9d098/lxml-6.0.0-cp313-cp313-win32.whl", hash = "sha256:5fcd7d3b1d8ecb91445bd71b9c88bdbeae528fefee4f379895becfc72298d181", size = 3612896, upload-time = "2025-06-26T16:27:04.251Z" },
{ url = "https://files.pythonhosted.org/packages/f4/87/6456b9541d186ee7d4cb53bf1b9a0d7f3b1068532676940fdd594ac90865/lxml-6.0.0-cp313-cp313-win_amd64.whl", hash = "sha256:2f34687222b78fff795feeb799a7d44eca2477c3d9d3a46ce17d51a4f383e32e", size = 4013132, upload-time = "2025-06-26T16:27:06.415Z" },
@@ -584,11 +586,11 @@ asyncio = [
[[package]]
name = "typing-extensions"
version = "4.14.0"
version = "4.14.1"
source = { registry = "https://pypi.org/simple" }
sdist = { url = "https://files.pythonhosted.org/packages/d1/bc/51647cd02527e87d05cb083ccc402f93e441606ff1f01739a62c8ad09ba5/typing_extensions-4.14.0.tar.gz", hash = "sha256:8676b788e32f02ab42d9e7c61324048ae4c6d844a399eebace3d4979d75ceef4", size = 107423, upload-time = "2025-06-02T14:52:11.399Z" }
sdist = { url = "https://files.pythonhosted.org/packages/98/5a/da40306b885cc8c09109dc2e1abd358d5684b1425678151cdaed4731c822/typing_extensions-4.14.1.tar.gz", hash = "sha256:38b39f4aeeab64884ce9f74c94263ef78f3c22467c8724005483154c26648d36", size = 107673, upload-time = "2025-07-04T13:28:34.16Z" }
wheels = [
{ url = "https://files.pythonhosted.org/packages/69/e0/552843e0d356fbb5256d21449fa957fa4eff3bbc135a74a691ee70c7c5da/typing_extensions-4.14.0-py3-none-any.whl", hash = "sha256:a1514509136dd0b477638fc68d6a91497af5076466ad0fa6c338e44e359944af", size = 43839, upload-time = "2025-06-02T14:52:10.026Z" },
{ url = "https://files.pythonhosted.org/packages/b5/00/d631e67a838026495268c2f6884f3711a15a9a2a96cd244fdaea53b823fb/typing_extensions-4.14.1-py3-none-any.whl", hash = "sha256:d1e1e3b58374dc93031d6eda2420a48ea44a36c2b4766a4fdeb3710755731d76", size = 43906, upload-time = "2025-07-04T13:28:32.743Z" },
]
[[package]]