Upload via GUI (60 Dateien)
This commit is contained in:
@@ -0,0 +1,25 @@
|
||||
const test = require('node:test');
|
||||
const assert = require('node:assert');
|
||||
const { listTemplates, buildGitignore } = require('../src/features/gitignoreTemplates.js');
|
||||
|
||||
test('listTemplates nennt Node, .NET und Electron', () => {
|
||||
const keys = listTemplates().map(t => t.key);
|
||||
assert.deepStrictEqual(keys, ['node', 'dotnet', 'electron']);
|
||||
});
|
||||
|
||||
test('buildGitignore enthält immer den allgemeinen Teil', () => {
|
||||
const out = buildGitignore([]);
|
||||
assert.match(out, /\.env/);
|
||||
assert.doesNotMatch(out, /node_modules/);
|
||||
});
|
||||
|
||||
test('buildGitignore fügt gewählte Vorlagen genau einmal hinzu', () => {
|
||||
const out = buildGitignore(['node', 'node', 'electron']);
|
||||
assert.strictEqual(out.split('node_modules/').length - 1, 1);
|
||||
assert.match(out, /dist\//);
|
||||
assert.doesNotMatch(out, /\.vs\//);
|
||||
});
|
||||
|
||||
test('buildGitignore ignoriert unbekannte Schlüssel', () => {
|
||||
assert.doesNotThrow(() => buildGitignore(['gibt-es-nicht', '__proto__', null]));
|
||||
});
|
||||
@@ -4468,3 +4468,111 @@ select option:checked { background: #2d4ea4; color: #ffffff; }
|
||||
:root[data-theme="light"] .project-gravur-title .gravur-sub { color: rgba(40, 60, 100, 0.6); }
|
||||
:root[data-theme="light"] .titlebar-strip-title { color: #4f6180 !important; }
|
||||
:root[data-theme="light"] .activity-log-category { color: #1e4f8a !important; }
|
||||
|
||||
/* ===========================
|
||||
TOOLBAR: AUFGERÄUMTE ANORDNUNG
|
||||
Zeile 1: Marke, Hauptaktionen | Steuerung
|
||||
Zeile 2: Quelle | Plattform, Status
|
||||
Zeile 3: Repo-Leiste, nur in der Repo-Ansicht
|
||||
=========================== */
|
||||
#toolbar { gap: 10px; }
|
||||
|
||||
#toolbar button { white-space: nowrap; flex: 0 0 auto; }
|
||||
|
||||
/* Hauptaktion hervorheben, der Rest bleibt ruhig */
|
||||
#toolbar #btnOpenRepoActions {
|
||||
background: linear-gradient(135deg, #67e8f9 0%, #58a6ff 100%);
|
||||
color: #03131a;
|
||||
border-color: transparent;
|
||||
text-shadow: none;
|
||||
}
|
||||
|
||||
.toolbar-row--top .toolbar-top-actions { gap: 14px; }
|
||||
|
||||
/* Trennlinie zwischen Hauptaktionen und Steuerung */
|
||||
.tool-group--utility {
|
||||
gap: 6px;
|
||||
padding-left: 14px;
|
||||
border-left: 1px solid rgba(138, 164, 214, 0.2);
|
||||
}
|
||||
|
||||
.toolbar-row--bottom { justify-content: space-between; }
|
||||
|
||||
.tool-group--platform {
|
||||
margin-left: auto;
|
||||
gap: 12px;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
.tool-group--platform .toolbar-status-wrap { max-width: 300px; }
|
||||
.tool-group--platform .status { width: min(260px, 100%); }
|
||||
|
||||
/* Repo-Leiste: eigene Zeile, nur sichtbar wenn mindestens ein Knopf eingeblendet ist */
|
||||
.toolbar-row--context {
|
||||
justify-content: flex-start;
|
||||
flex-wrap: wrap;
|
||||
gap: 10px;
|
||||
padding: 6px 8px;
|
||||
border-radius: 12px;
|
||||
background: rgba(8, 16, 32, 0.55);
|
||||
border: 1px solid rgba(88, 213, 255, 0.12);
|
||||
}
|
||||
|
||||
.toolbar-row--context:not(:has(button:not(.hidden))) { display: none; }
|
||||
|
||||
.toolbar-row--context .tool-group {
|
||||
gap: 6px;
|
||||
flex-wrap: nowrap;
|
||||
}
|
||||
|
||||
/* Leere Gruppe samt Trennlinie ausblenden */
|
||||
.toolbar-row--context .tool-group:not(:has(button:not(.hidden))) { display: none; }
|
||||
|
||||
.toolbar-row--context .tool-group--repo-tools {
|
||||
margin-left: auto;
|
||||
padding-left: 12px;
|
||||
border-left: 1px solid rgba(138, 164, 214, 0.2);
|
||||
}
|
||||
|
||||
#toolbar .toolbar-row--context button { height: 28px; font-weight: 600; }
|
||||
|
||||
/* Schmale Fenster: Steuerung nur mit Symbolen (Beschriftung steht im Tooltip) */
|
||||
@media (max-width: 1100px) {
|
||||
.tool-group--utility .btn-label { display: none; }
|
||||
#toolbar .tool-group--utility button { padding: 0 10px; }
|
||||
}
|
||||
|
||||
:root[data-theme="light"] .toolbar-row--context {
|
||||
background: rgba(255, 255, 255, 0.6);
|
||||
border-color: rgba(30, 60, 110, 0.12);
|
||||
}
|
||||
:root[data-theme="light"] .tool-group--utility,
|
||||
:root[data-theme="light"] .toolbar-row--context .tool-group--repo-tools {
|
||||
border-left-color: rgba(30, 60, 110, 0.18);
|
||||
}
|
||||
|
||||
/* Schmale Fenster: Zeilen bleiben nebeneinander und brechen bei Platzmangel um,
|
||||
statt wie früher komplett gestapelt und gestreckt zu werden. */
|
||||
@media (max-width: 1180px) {
|
||||
.toolbar-row { flex-direction: row; align-items: center; flex-wrap: wrap; }
|
||||
.toolbar-top-actions {
|
||||
flex-direction: row;
|
||||
flex-wrap: wrap;
|
||||
align-items: center;
|
||||
justify-content: flex-end;
|
||||
}
|
||||
.toolbar-status-wrap { justify-content: flex-end; max-width: 300px; }
|
||||
.tool-group--platform .status { width: min(260px, 100%); }
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.tool-group,
|
||||
.toolbar-status-wrap { width: auto; }
|
||||
.toolbar-row--context .tool-group { flex-wrap: wrap; }
|
||||
}
|
||||
|
||||
:root[data-theme="light"] #toolbar #btnOpenRepoActions {
|
||||
background: linear-gradient(135deg, #67e8f9 0%, #58a6ff 100%) !important;
|
||||
color: #04101f !important;
|
||||
border-color: transparent !important;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user