Мод-менеджер с галочками и коллекции мастерской

Вместо двух отдельных списков (Workshop ID и Mod ID) — один список модов:
галочка включает мод, перетаскивание задаёт порядок загрузки, кнопка
убирает пакет вместе со всеми его модами.

Чтобы галочкам было за что зацепиться, панель читает mod.info уже
скачанных модов: серверу в Mods нужен именно Mod ID, а он лежит внутри
пакета мастерской и вручную его приходилось искать в описании мода. Пока
мод не скачан, строка помечена и галочка недоступна — Mod ID неизвестен.

Один пакет мастерской может содержать несколько модов; теперь они видны
отдельными строками и включаются по отдельности.

Коллекции: кнопка разворачивает коллекцию Steam в список входящих в неё
модов, сохраняя порядок со страницы коллекции. И мод, и коллекция
принимаются как ссылкой, так и голым идентификатором.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-04 00:36:06 +03:00
co-authored by Claude Opus 5
parent 277ab7af4a
commit fe517cfb71
9 changed files with 675 additions and 71 deletions
+28
View File
@@ -295,6 +295,34 @@ input.input-sm, .input-sm { width: auto; padding: 6px 10px; font-size: 13px; }
padding: 9px 12px;
margin-bottom: 6px;
}
.mod-toolbar { display: flex; align-items: center; gap: 10px; margin: 14px 0 10px; flex-wrap: wrap; }
/* Включённый мод виден с одного взгляда: он попадёт на сервер. */
.mod-row.enabled { border-left: 3px solid var(--accent); }
.mod-row .mod-toggle { width: 16px; height: 16px; flex: none; cursor: pointer; }
.mod-row .mod-toggle:disabled { cursor: not-allowed; opacity: .4; }
.mod-row .mod-title small { display: block; }
.mod-row .mod-title a { color: var(--muted); }
.mod-thumb {
width: 40px;
height: 40px;
flex: none;
border-radius: 6px;
background: var(--bg);
}
.drag-handle {
color: var(--muted);
cursor: grab;
user-select: none;
font-size: 15px;
line-height: 1;
}
.mod-row:not(.enabled) .drag-handle { opacity: .3; cursor: default; }
.mod-row.dragging { opacity: .5; }
.mod-row.drop-target { border-color: var(--accent); box-shadow: 0 0 0 1px var(--accent) inset; }
.mod-list .mod-title { flex: 1; min-width: 0; }
.mod-list .mod-title b { display: block; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
.mod-list .mod-title small { color: var(--muted); font-family: var(--mono); font-size: 11px; }