Compare commits

..

No commits in common. "144088c01fe15f115431404a3068d0a5bdb2e28b" and "9d4f5fd9a3baa818593fceb9578ec4a2358ba591" have entirely different histories.

6 changed files with 11 additions and 34 deletions

4
package-lock.json generated
View File

@ -1,12 +1,12 @@
{ {
"name": "twitch-vod-manager", "name": "twitch-vod-manager",
"version": "4.6.47", "version": "4.6.46",
"lockfileVersion": 3, "lockfileVersion": 3,
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "twitch-vod-manager", "name": "twitch-vod-manager",
"version": "4.6.47", "version": "4.6.46",
"license": "MIT", "license": "MIT",
"dependencies": { "dependencies": {
"axios": "^1.6.0", "axios": "^1.6.0",

View File

@ -1,6 +1,6 @@
{ {
"name": "twitch-vod-manager", "name": "twitch-vod-manager",
"version": "4.6.47", "version": "4.6.46",
"description": "Twitch VOD Manager - Download Twitch VODs easily", "description": "Twitch VOD Manager - Download Twitch VODs easily",
"main": "dist/main.js", "main": "dist/main.js",
"author": "xRangerDE", "author": "xRangerDE",

View File

@ -102,7 +102,7 @@
<div id="clipFilenameTemplateWrap" class="clip-template-wrap" style="display:none;"> <div id="clipFilenameTemplateWrap" class="clip-template-wrap" style="display:none;">
<input type="text" id="clipFilenameTemplate" value="{date}_{part}.mp4" placeholder="{date}_{part}.mp4" class="clip-modal-template-input" oninput="updateFilenameExamples()"> <input type="text" id="clipFilenameTemplate" value="{date}_{part}.mp4" placeholder="{date}_{part}.mp4" class="clip-modal-template-input" oninput="updateFilenameExamples()">
<div id="clipTemplateHelp" class="clip-modal-hint">Platzhalter: {title} {id} {channel} {date} {part} {trim_start} {trim_end} {trim_length} {date_custom="yyyy-MM-dd"}</div> <div id="clipTemplateHelp" class="clip-modal-hint">Platzhalter: {title} {id} {channel} {date} {part} {trim_start} {trim_end} {trim_length} {date_custom="yyyy-MM-dd"}</div>
<div id="clipTemplateLint" class="template-lint ok" style="margin-top: 4px;">Template-Check: OK</div> <div id="clipTemplateLint" class="clip-template-lint">Template-Check: OK</div>
<button class="btn-secondary" id="clipTemplateGuideBtn" style="margin-top: 8px;" onclick="openTemplateGuide('clip')">Template Guide</button> <button class="btn-secondary" id="clipTemplateGuideBtn" style="margin-top: 8px;" onclick="openTemplateGuide('clip')">Template Guide</button>
</div> </div>
</div> </div>
@ -653,8 +653,8 @@
<label id="defaultClipTemplateLabel" style="font-size: 13px; color: var(--text-secondary); margin-top: 4px;">Clip Template</label> <label id="defaultClipTemplateLabel" style="font-size: 13px; color: var(--text-secondary); margin-top: 4px;">Clip Template</label>
<input type="text" id="defaultClipFilenameTemplate" class="input-monospace" placeholder="{date}_{part}.mp4" oninput="validateFilenameTemplates()"> <input type="text" id="defaultClipFilenameTemplate" class="input-monospace" placeholder="{date}_{part}.mp4" oninput="validateFilenameTemplates()">
</div> </div>
<div id="filenameTemplateHint" class="form-note" style="margin-top: 8px;">Platzhalter: {title} {id} {channel} {date} {part} {part_padded} {trim_start} {trim_end} {trim_length} {date_custom="yyyy-MM-dd"}</div> <div id="filenameTemplateHint" style="color: #888; font-size: 12px; margin-top: 8px;">Platzhalter: {title} {id} {channel} {date} {part} {part_padded} {trim_start} {trim_end} {trim_length} {date_custom="yyyy-MM-dd"}</div>
<div id="filenameTemplateLint" class="template-lint ok" style="margin-top: 6px;">Template-Check: OK</div> <div id="filenameTemplateLint" style="font-size: 12px; margin-top: 6px; color: #8bc34a;">Template-Check: OK</div>
</div> </div>
</div> </div>

View File

@ -49,12 +49,12 @@ function validateFilenameTemplates(showAlert = false): boolean {
const lintNode = byId('filenameTemplateLint'); const lintNode = byId('filenameTemplateLint');
if (!uniqueUnknown.length) { if (!uniqueUnknown.length) {
lintNode.className = 'template-lint ok'; lintNode.style.color = '#8bc34a';
lintNode.textContent = UI_TEXT.static.templateLintOk; lintNode.textContent = UI_TEXT.static.templateLintOk;
return true; return true;
} }
lintNode.className = 'template-lint warn'; lintNode.style.color = '#ff8a80';
lintNode.textContent = `${UI_TEXT.static.templateLintWarn}: ${uniqueUnknown.join(' ')}`; lintNode.textContent = `${UI_TEXT.static.templateLintWarn}: ${uniqueUnknown.join(' ')}`;
if (showAlert) { if (showAlert) {

View File

@ -1245,10 +1245,10 @@ function updateFilenameExamples(): void {
updateFilenameTemplateVisibility(); updateFilenameTemplateVisibility();
if (!unknownTokens.length) { if (!unknownTokens.length) {
clipLint.className = 'template-lint ok'; clipLint.style.color = '#8bc34a';
clipLint.textContent = UI_TEXT.static.templateLintOk; clipLint.textContent = UI_TEXT.static.templateLintOk;
} else { } else {
clipLint.className = 'template-lint warn'; clipLint.style.color = '#ff8a80';
clipLint.textContent = `${UI_TEXT.static.templateLintWarn}: ${unknownTokens.join(' ')}`; clipLint.textContent = `${UI_TEXT.static.templateLintWarn}: ${unknownTokens.join(' ')}`;
} }

View File

@ -282,12 +282,8 @@ body {
line-height: 1.4; line-height: 1.4;
} }
/* .clip-template-lint was the old per-modal rule for the clip-cutter
template lint badge. Superseded by the shared .template-lint
class (with .ok / .warn modifiers driven from var(--success) /
var(--error)). Class kept as a no-op alias in case any external
reference still uses it. */
.clip-template-lint { .clip-template-lint {
color: #8bc34a;
font-size: 12px; font-size: 12px;
margin-top: 4px; margin-top: 4px;
} }
@ -1970,25 +1966,6 @@ select option {
user-select: none; user-select: none;
} }
/* Filename-template lint badge used both by the Settings card's
template inputs and by the clip-cutter modal's custom template
row. Two states: green for OK, red for unknown-placeholder
warning. Pull the colours from --success / --error vars so the
lint always tracks the rest of the apps semantic palette. */
.template-lint {
font-size: 12px;
line-height: 1.4;
transition: color 0.15s;
}
.template-lint.ok {
color: var(--success);
}
.template-lint.warn {
color: var(--error);
}
/* Sidebar queue empty state small dashed-border card matching the /* Sidebar queue empty state small dashed-border card matching the
sibling streamer-list empty state. */ sibling streamer-list empty state. */
.queue-empty { .queue-empty {