localization
This commit is contained in:
		
							parent
							
								
									e2e5fe1641
								
							
						
					
					
						commit
						1e7c1a2468
					
				@ -14,7 +14,7 @@ if (authResult instanceof Response) {
 | 
			
		||||
const { authenticated, userEmail, userId } = authResult;
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<BaseLayout title="Contribute" description="Contribute tools, methods, concepts, and knowledge articles to CC24-Guide">
 | 
			
		||||
<BaseLayout title="Contribute" description="Inhalte zum CC24-Guide beitragen">
 | 
			
		||||
  <section style="padding: 2rem 0;">
 | 
			
		||||
    <!-- Header -->
 | 
			
		||||
    <div style="text-align: center; margin-bottom: 3rem; padding: 2rem; background: linear-gradient(135deg, var(--color-primary) 0%, var(--color-accent) 100%); color: white; border-radius: 1rem; border: 1px solid var(--color-border);">
 | 
			
		||||
@ -25,15 +25,15 @@ const { authenticated, userEmail, userId } = authResult;
 | 
			
		||||
          <line x1="20" y1="8" x2="20" y2="14"/>
 | 
			
		||||
          <line x1="23" y1="11" x2="17" y2="11"/>
 | 
			
		||||
        </svg>
 | 
			
		||||
        Contribute to CC24-Guide
 | 
			
		||||
        Zum CC24-Guide beitragen
 | 
			
		||||
      </h1>
 | 
			
		||||
      <p style="margin: 0; opacity: 0.9; line-height: 1.6; font-size: 1.125rem;">
 | 
			
		||||
        Help expand our DFIR knowledge base by contributing tools, methods, concepts, and detailed articles. 
 | 
			
		||||
        All contributions are reviewed before being merged into the main database.
 | 
			
		||||
        Habt ihr Ideen/Ergänzungen zu den dargestellten Tools/Methoden/Konzepten? Oder habt ihr einen umfangreicheren Eintrag für unsere Knowledgebase?
 | 
			
		||||
        Hier habt ihr die Möglichkeit, direkt beizutragen!
 | 
			
		||||
      </p>
 | 
			
		||||
      {userEmail && (
 | 
			
		||||
        <p style="margin-top: 1rem; opacity: 0.8; font-size: 0.9rem;">
 | 
			
		||||
          Logged in as: <strong>{userEmail}</strong>
 | 
			
		||||
          Angemeldet als: <strong>{userEmail}</strong>
 | 
			
		||||
        </p>
 | 
			
		||||
      )}
 | 
			
		||||
    </div>
 | 
			
		||||
@ -61,23 +61,23 @@ const { authenticated, userEmail, userId } = authResult;
 | 
			
		||||
          <path d="M14.7 6.3a1 1 0 0 0 0 1.4l1.6 1.6a1 1 0 0 0 1.4 0l3.77-3.77a6 6 0 0 1-7.94 7.94l-6.91 6.91a2.12 2.12 0 0 1-3-3l6.91-6.91a6 6 0 0 1 7.94-7.94l-3.76 3.76z"/>
 | 
			
		||||
        </svg>
 | 
			
		||||
      </div>
 | 
			
		||||
      <h3 style="margin: 0; color: var(--color-primary); font-size: 1.25rem;">Tools, Methods & Concepts</h3>
 | 
			
		||||
      <h3 style="margin: 0; color: var(--color-primary); font-size: 1.25rem;">Software, Methoden oder Konzepte</h3>
 | 
			
		||||
    </div>
 | 
			
		||||
    
 | 
			
		||||
    <p style="margin-bottom: 1.5rem; line-height: 1.6;">
 | 
			
		||||
      Add new software tools, forensic methodologies, or fundamental concepts to our database. 
 | 
			
		||||
      Includes detailed forms for metadata, licensing, platforms, and categorization.
 | 
			
		||||
      Ergänzt Software/Tools, forensische Methoden und relevante Konzepte zu unserer Datenbank.
 | 
			
		||||
      Füllt einfach ein kurzes Formular aus!
 | 
			
		||||
    </p>
 | 
			
		||||
    
 | 
			
		||||
    <div style="display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem;">
 | 
			
		||||
      <span class="badge" style="background-color: var(--color-primary); color: white;">Software Tools</span>
 | 
			
		||||
      <span class="badge" style="background-color: var(--color-method); color: white;">Methods</span>
 | 
			
		||||
      <span class="badge" style="background-color: var(--color-concept); color: white;">Concepts</span>
 | 
			
		||||
      <span class="badge" style="background-color: var(--color-primary); color: white;">Software/Tools</span>
 | 
			
		||||
      <span class="badge" style="background-color: var(--color-method); color: white;">Methoden</span>
 | 
			
		||||
      <span class="badge" style="background-color: var(--color-concept); color: white;">Konzepte</span>
 | 
			
		||||
    </div>
 | 
			
		||||
    
 | 
			
		||||
    <div style="margin-top:auto; display:flex; gap:1rem;">
 | 
			
		||||
      <a href="/contribute/tool" class="btn btn-primary" style="flex: 1;">Add New Entry</a>
 | 
			
		||||
      <a href="/contribute/tool?mode=browse" class="btn btn-secondary" style="flex: 1;">Edit Existing</a>
 | 
			
		||||
      <a href="/contribute/tool" class="btn btn-primary" style="flex: 1;">Neuer Eintrag</a>
 | 
			
		||||
      <a href="/contribute/tool?mode=browse" class="btn btn-secondary" style="flex: 1;">Existierenden Bearbeiten</a>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
@ -96,24 +96,24 @@ const { authenticated, userEmail, userId } = authResult;
 | 
			
		||||
          <polyline points="10 9 9 9 8 9"/>
 | 
			
		||||
        </svg>
 | 
			
		||||
      </div>
 | 
			
		||||
      <h3 style="margin: 0; color: var(--color-accent); font-size: 1.25rem;">Knowledgebase Articles</h3>
 | 
			
		||||
      <h3 style="margin: 0; color: var(--color-accent); font-size: 1.25rem;">Knowledgebase-Artikel</h3>
 | 
			
		||||
    </div>
 | 
			
		||||
    
 | 
			
		||||
    <p style="margin-bottom: 1.5rem; line-height: 1.6;">
 | 
			
		||||
      Write detailed guides, tutorials, configuration instructions, and best practices. 
 | 
			
		||||
      Features a markdown editor with live preview and media upload capabilities.
 | 
			
		||||
      Wenn ihr einen umfangreicheren Beitrag zu einem Tool, einer Methode oder einem Kozept habt, könnt ihr ihn hier einreichen.
 | 
			
		||||
      Dazu müsst ihr ein kurzes Formular ausfüllen, zusätzlich könnt ihr Dateien einreichen.
 | 
			
		||||
    </p>
 | 
			
		||||
    
 | 
			
		||||
    <div style="display: flex; flex-wrap: wrap; gap: 0.5rem; margin-bottom: 1.5rem;">
 | 
			
		||||
      <span class="badge badge-secondary">Installation Guides</span>
 | 
			
		||||
      <span class="badge badge-secondary">Installationsanleitungen</span>
 | 
			
		||||
      <span class="badge badge-secondary">Tutorials</span>
 | 
			
		||||
      <span class="badge badge-secondary">Best Practices</span>
 | 
			
		||||
      <span class="badge badge-secondary">Case Studies</span>
 | 
			
		||||
      <span class="badge badge-secondary">Fallstudien</span>
 | 
			
		||||
    </div>
 | 
			
		||||
    
 | 
			
		||||
    <div style="margin-top:auto; display:flex; gap:1rem;">
 | 
			
		||||
      <a href="/contribute/knowledgebase" class="btn btn-accent" style="flex: 1;">Write Article</a>
 | 
			
		||||
      <a href="/knowledgebase" class="btn btn-secondary" style="flex: 1;">View Articles</a>
 | 
			
		||||
      <a href="/contribute/knowledgebase" class="btn btn-accent" style="flex: 1;">Beitrag einreichen</a>
 | 
			
		||||
      <a href="/knowledgebase" class="btn btn-secondary" style="flex: 1;">Beiträge ansehen</a>
 | 
			
		||||
    </div>
 | 
			
		||||
  </div>
 | 
			
		||||
 | 
			
		||||
@ -129,19 +129,19 @@ const { authenticated, userEmail, userId } = authResult;
 | 
			
		||||
          <line x1="12" y1="16" x2="12.01" y2="16"/>
 | 
			
		||||
        </svg>
 | 
			
		||||
      </div>
 | 
			
		||||
      <h3 style="margin: 0; color: var(--color-warning); font-size: 1.25rem;">Issues & Improvements</h3>
 | 
			
		||||
      <h3 style="margin: 0; color: var(--color-warning); font-size: 1.25rem;">Probleme & Verbesserungen</h3>
 | 
			
		||||
    </div>
 | 
			
		||||
    
 | 
			
		||||
    <div style="display: grid; grid-template-columns: 2fr 1fr; gap: 2rem; align-items: center;">
 | 
			
		||||
      <div style="display:flex; flex-direction:column;">
 | 
			
		||||
        <p style="margin-bottom: 1rem; line-height: 1.6;">
 | 
			
		||||
          Found incorrect information, broken links, or have suggestions for improvements? 
 | 
			
		||||
          Report issues directly in our Git repository or suggest enhancements to existing entries.
 | 
			
		||||
          Ist euch ein Bug oder eine fehlerhafte Information aufgefallen? Auch wenn es nur Kleinigkeiten sind - hier könnt ihr sie einreichen.
 | 
			
		||||
          Erstellt direkt einen Issue in unserem Git.
 | 
			
		||||
        </p>
 | 
			
		||||
        <div style="display: flex; flex-wrap: wrap; gap: 0.5rem;">
 | 
			
		||||
          <span class="badge" style="background-color: var(--color-warning); color: white;">Bug Reports</span>
 | 
			
		||||
          <span class="badge" style="background-color: var(--color-warning); color: white;">Corrections</span>
 | 
			
		||||
          <span class="badge" style="background-color: var(--color-warning); color: white;">Suggestions</span>
 | 
			
		||||
          <span class="badge" style="background-color: var(--color-warning); color: white;">Korrekturen</span>
 | 
			
		||||
          <span class="badge" style="background-color: var(--color-warning); color: white;">Vorschläge</span>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
      <div style="display: flex; flex-direction: column; gap: 1rem;">
 | 
			
		||||
@ -151,7 +151,7 @@ const { authenticated, userEmail, userId } = authResult;
 | 
			
		||||
            <polyline points="15 3 21 3 21 9"/>
 | 
			
		||||
            <line x1="10" y1="14" x2="21" y2="3"/>
 | 
			
		||||
          </svg>
 | 
			
		||||
          Report Issue
 | 
			
		||||
          Problem melden
 | 
			
		||||
        </a>
 | 
			
		||||
      </div>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -165,39 +165,40 @@ const { authenticated, userEmail, userId } = authResult;
 | 
			
		||||
 | 
			
		||||
    <!-- Guidelines -->
 | 
			
		||||
    <div class="card" style="margin-bottom: 2rem;">
 | 
			
		||||
      <h3 style="margin-bottom: 1.5rem; color: var(--color-text);">Contribution Guidelines</h3>
 | 
			
		||||
      <h3 style="margin-bottom: 1.5rem; color: var(--color-text);">Richtlinien</h3>
 | 
			
		||||
      
 | 
			
		||||
      <div style="display: grid; grid-template-columns: repeat(auto-fit, minmax(300px, 1fr)); gap: 1.5rem;">
 | 
			
		||||
        <div>
 | 
			
		||||
          <h4 style="margin-bottom: 0.75rem; color: var(--color-primary);">Quality Standards</h4>
 | 
			
		||||
          <h4 style="margin-bottom: 0.75rem; color: var(--color-primary);">Qualitätsstandards</h4>
 | 
			
		||||
          <ul style="margin: 0; padding-left: 1.5rem; line-height: 1.6;">
 | 
			
		||||
            <li>Provide accurate and up-to-date information</li>
 | 
			
		||||
            <li>Use clear, professional language</li>
 | 
			
		||||
            <li>Include relevant tags and categorization</li>
 | 
			
		||||
            <li>Verify all URLs and links work correctly</li>
 | 
			
		||||
            <li>Test installation and configuration steps</li>
 | 
			
		||||
            <li>Informationen sollten stets korrekt und up-to-date sein</li>
 | 
			
		||||
            <li>Nutzt klare, verständliche Sprache</li>
 | 
			
		||||
            <li>Nutzt passende Tags und Kategorisierungen</li>
 | 
			
		||||
            <li>Verifiziert, ob alle Links funktionieren</li>
 | 
			
		||||
            <li>Testet die Tools/Methoden oder Installationsanleitungen nach Möglichkeit vorher aus</li>
 | 
			
		||||
            <li>Stellt auf keinen Fall Informationen ein, die nicht öffentlich sein dürfen. Alles wird unter BSD-3-Clause-Veröffentlicht.</li>
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
        
 | 
			
		||||
        <div>
 | 
			
		||||
          <h4 style="margin-bottom: 0.75rem; color: var(--color-accent);">Review Process</h4>
 | 
			
		||||
          <h4 style="margin-bottom: 0.75rem; color: var(--color-accent);">QS</h4>
 | 
			
		||||
          <ul style="margin: 0; padding-left: 1.5rem; line-height: 1.6;">
 | 
			
		||||
            <li>All contributions are submitted as pull requests</li>
 | 
			
		||||
            <li>Automated validation checks run on submissions</li>
 | 
			
		||||
            <li>Manual review by CC24 team members</li>
 | 
			
		||||
            <li>Feedback provided through PR comments</li>
 | 
			
		||||
            <li>Merge after approval and testing</li>
 | 
			
		||||
            <li>Alle Beiträge werden transparent als Pull Requests in unserem Git veröffentlicht</li>
 | 
			
		||||
            <li>Die Inforamtionen werden teilweise automatisiert validiert</li>
 | 
			
		||||
            <li>Manuelle Prüfung innerhalb des Git-Review-Prozesses durch Maintainer</li>
 | 
			
		||||
            <li>Feedback durch PR-Kommentare, ggf. auch direkt</li>
 | 
			
		||||
            <li>Der PR wird dann zeitnah veröffentlicht und ist beim nächsten Serverupdate verfügbar</li>
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
        
 | 
			
		||||
        <div>
 | 
			
		||||
          <h4 style="margin-bottom: 0.75rem; color: var(--color-warning);">Best Practices</h4>
 | 
			
		||||
          <ul style="margin: 0; padding-left: 1.5rem; line-height: 1.6;">
 | 
			
		||||
            <li>Search existing entries before adding duplicates</li>
 | 
			
		||||
            <li>Use consistent naming and categorization</li>
 | 
			
		||||
            <li>Provide detailed descriptions and use cases</li>
 | 
			
		||||
            <li>Include screenshots for complex procedures</li>
 | 
			
		||||
            <li>Credit original sources and authors</li>
 | 
			
		||||
            <li>Vermeidet Duplokate</li>
 | 
			
		||||
            <li>Versucht, konsistent bei der Benennung, Kategorisierung und Tags zu sein</li>
 | 
			
		||||
            <li>Schreibt detaillierte Beschreibungen</li>
 | 
			
		||||
            <li>Inkludiert Screenshots bei komplizierten Guides</li>
 | 
			
		||||
            <li>Nennt eure Primärquellen</li>
 | 
			
		||||
          </ul>
 | 
			
		||||
        </div>
 | 
			
		||||
      </div>
 | 
			
		||||
 | 
			
		||||
@ -24,7 +24,7 @@ const editToolName = Astro.url.searchParams.get('edit');
 | 
			
		||||
const editTool = editToolName ? existingTools.find(tool => tool.name === editToolName) : null;
 | 
			
		||||
const isEdit = !!editTool;
 | 
			
		||||
 | 
			
		||||
const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
const title = isEdit ? `Edit ${editTool?.name}` : 'Beitrag erstellen';
 | 
			
		||||
---
 | 
			
		||||
 | 
			
		||||
<BaseLayout title={title} description="Contribute tools, methods, and concepts to the CC24-Guide database">
 | 
			
		||||
@ -39,12 +39,12 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
          <line x1="16" y1="17" x2="8" y2="17"/>
 | 
			
		||||
          <polyline points="10 9 9 9 8 9"/>
 | 
			
		||||
        </svg>
 | 
			
		||||
        {isEdit ? `Edit Tool: ${editTool?.name}` : 'Contribute New Tool'}
 | 
			
		||||
        {isEdit ? `Eintrag editieren: ${editTool?.name}` : 'Beitragen - Formular'}
 | 
			
		||||
      </h1>
 | 
			
		||||
      <p style="margin: 0; opacity: 0.9; line-height: 1.5;">
 | 
			
		||||
        {isEdit 
 | 
			
		||||
          ? 'Update the information for this tool, method, or concept. Your changes will be submitted as a pull request for review.'
 | 
			
		||||
          : 'Submit a new tool, method, or concept to the CC24-Guide database. Your contribution will be reviewed before being added.'
 | 
			
		||||
          ? 'Überarbeitet die Informationen zu diesem Tool, Methode oder Konzept. Deine Änderungen werden als Pull-Request eingereicht.'
 | 
			
		||||
          : 'Erstellt ein neues Tool, Methode, oder Konzept in der CC24-Guide Datenbank. Dein Beitrag wird als Pull-Request eingereicht.'
 | 
			
		||||
        }
 | 
			
		||||
      </p>
 | 
			
		||||
    </div>
 | 
			
		||||
@ -57,16 +57,16 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
          <!-- Tool Type Selection -->
 | 
			
		||||
          <div>
 | 
			
		||||
            <label for="tool-type" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">
 | 
			
		||||
              Tool Type <span style="color: var(--color-error);">*</span>
 | 
			
		||||
              Beitragstyp <span style="color: var(--color-error);">*</span>
 | 
			
		||||
            </label>
 | 
			
		||||
            <select id="tool-type" name="type" required style="max-width: 300px;">
 | 
			
		||||
              <option value="">Select type...</option>
 | 
			
		||||
              <option value="">Auswählen...</option>
 | 
			
		||||
              <option value="software" selected={editTool?.type === 'software'}>Software</option>
 | 
			
		||||
              <option value="method" selected={editTool?.type === 'method'}>Method</option>
 | 
			
		||||
              <option value="concept" selected={editTool?.type === 'concept'}>Concept</option>
 | 
			
		||||
              <option value="method" selected={editTool?.type === 'method'}>Methode</option>
 | 
			
		||||
              <option value="concept" selected={editTool?.type === 'concept'}>Konzept</option>
 | 
			
		||||
            </select>
 | 
			
		||||
            <div class="field-help" style="font-size: 0.8125rem; color: var(--color-text-secondary); margin-top: 0.25rem;">
 | 
			
		||||
              Software: Applications and tools • Method: Procedures and methodologies • Concept: Fundamental knowledge
 | 
			
		||||
              Software: Anwendungen und Tools • Methode: Prozeduren und Workflows • Konzept: Gruundlagenwissen
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
@ -79,7 +79,7 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
              </label>
 | 
			
		||||
              <input type="text" id="tool-name" name="name" required maxlength="100"
 | 
			
		||||
                     value={editTool?.name || ''} 
 | 
			
		||||
                     placeholder="e.g., Autopsy, Live Response Methodology, Regular Expressions" />
 | 
			
		||||
                     placeholder="z.B., Autopsy, Live Response im Active Directory, Regular Expressions" />
 | 
			
		||||
              <div id="name-error" class="field-error" style="display: none;"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
@ -92,7 +92,7 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
                     value={editTool?.icon || ''}
 | 
			
		||||
                     placeholder="📦 🔧 📋 (optional, single emoji recommended)" />
 | 
			
		||||
              <div class="field-help">
 | 
			
		||||
                Choose an emoji that represents your tool/method/concept. Leave blank if unsure.
 | 
			
		||||
                Wählt ein Emoji, das euer Tool/Methode/Konzept repräsentiert. Kann auch freigelassen werden.
 | 
			
		||||
              </div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
@ -100,13 +100,13 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
          <!-- Description -->
 | 
			
		||||
          <div>
 | 
			
		||||
            <label for="tool-description" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">
 | 
			
		||||
              Description <span style="color: var(--color-error);">*</span>
 | 
			
		||||
              Beschreibung <span style="color: var(--color-error);">*</span>
 | 
			
		||||
            </label>
 | 
			
		||||
            <textarea id="tool-description" name="description" required 
 | 
			
		||||
                      rows="4" minlength="10" maxlength="1000"
 | 
			
		||||
                      placeholder="Provide a clear, concise description of what this tool/method/concept is and what it does...">{editTool?.description || ''}</textarea>
 | 
			
		||||
                      placeholder="Schreibt eine klare, kurze Beschreibung (2-5 Sätze) mit dem, was euer Tool/Methode/Konzept macht.">{editTool?.description || ''}</textarea>
 | 
			
		||||
            <div style="display: flex; justify-content: space-between; margin-top: 0.25rem;">
 | 
			
		||||
              <div class="field-help">Be specific about functionality, use cases, and key features.</div>
 | 
			
		||||
              <div class="field-help">Seid spezifisch hinsichtlich use-case, Funktionalität und Schlüsselfeatures.</div>
 | 
			
		||||
              <div id="description-count" style="font-size: 0.75rem; color: var(--color-text-secondary);">0/1000</div>
 | 
			
		||||
            </div>
 | 
			
		||||
            <div id="description-error" class="field-error" style="display: none;"></div>
 | 
			
		||||
@ -117,25 +117,15 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
            <!-- Main URL -->
 | 
			
		||||
            <div>
 | 
			
		||||
              <label for="tool-url" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">
 | 
			
		||||
                Main URL <span style="color: var(--color-error);">*</span>
 | 
			
		||||
                Hauptlink <span style="color: var(--color-error);">*</span>
 | 
			
		||||
              </label>
 | 
			
		||||
              <input type="url" id="tool-url" name="url" required
 | 
			
		||||
                     value={editTool?.url || ''}
 | 
			
		||||
                     placeholder="https://example.com" />
 | 
			
		||||
              <div class="field-help">Homepage, documentation, or primary resource link</div>
 | 
			
		||||
              <div class="field-help">Homepage, Dokumentation, oder Primärquelle</div>
 | 
			
		||||
              <div id="url-error" class="field-error" style="display: none;"></div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Project URL (CC24 Server) -->
 | 
			
		||||
            <div id="project-url-field" style="display: none;">
 | 
			
		||||
              <label for="project-url" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">
 | 
			
		||||
                CC24 Server URL
 | 
			
		||||
              </label>
 | 
			
		||||
              <input type="url" id="project-url" name="projectUrl"
 | 
			
		||||
                     value={editTool?.projectUrl || ''}
 | 
			
		||||
                     placeholder="https://tool.cc24.dev" />
 | 
			
		||||
              <div class="field-help">Internal CC24 server URL (if hosted)</div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
          <!-- Categories -->
 | 
			
		||||
@ -143,7 +133,7 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
            <!-- Domains -->
 | 
			
		||||
            <div>
 | 
			
		||||
              <label for="tool-domains" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">
 | 
			
		||||
                Forensic Domains
 | 
			
		||||
                Forensische Domänen
 | 
			
		||||
              </label>
 | 
			
		||||
              <select id="tool-domains" name="domains" multiple size="4">
 | 
			
		||||
                {domains.map(domain => (
 | 
			
		||||
@ -153,13 +143,13 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
                  </option>
 | 
			
		||||
                ))}
 | 
			
		||||
              </select>
 | 
			
		||||
              <div class="field-help">Hold Ctrl/Cmd to select multiple. Leave empty for domain-agnostic.</div>
 | 
			
		||||
              <div class="field-help">Strg gedrückt halten, um mehrere zu selektieren. Freilassen, wenn es zu keiner Domäne passt.</div>
 | 
			
		||||
            </div>
 | 
			
		||||
 | 
			
		||||
            <!-- Phases -->
 | 
			
		||||
            <div>
 | 
			
		||||
              <label for="tool-phases" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">
 | 
			
		||||
                Investigation Phases
 | 
			
		||||
                Ermittlungsphasen
 | 
			
		||||
              </label>
 | 
			
		||||
              <select id="tool-phases" name="phases" multiple size="4">
 | 
			
		||||
                {phases.map(phase => (
 | 
			
		||||
@ -175,7 +165,7 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
                  </option>
 | 
			
		||||
                ))}
 | 
			
		||||
              </select>
 | 
			
		||||
              <div class="field-help">Select applicable investigation phases</div>
 | 
			
		||||
              <div class="field-help">Zutreffende auswählen</div>
 | 
			
		||||
            </div>
 | 
			
		||||
          </div>
 | 
			
		||||
 | 
			
		||||
@ -185,7 +175,7 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
              <!-- Platforms -->
 | 
			
		||||
              <div>
 | 
			
		||||
                <label for="tool-platforms" style="display: block; margin-bottom: 0.5rem; font-weight: 600;">
 | 
			
		||||
                  Platforms <span id="platforms-required" style="color: var(--color-error);">*</span>
 | 
			
		||||
                  Plattformen <span id="platforms-required" style="color: var(--color-error);">*</span>
 | 
			
		||||
                </label>
 | 
			
		||||
                <div id="platforms-checkboxes" style="display: grid; gap: 0.25rem; font-size: 0.875rem;">
 | 
			
		||||
                  {['Windows', 'macOS', 'Linux', 'Web', 'Mobile', 'Cross-platform'].map(platform => (
 | 
			
		||||
@ -415,7 +405,6 @@ const title = isEdit ? `Edit ${editTool?.name}` : 'Contribute New Tool';
 | 
			
		||||
  domainAgnosticSoftware,
 | 
			
		||||
  existingConcepts: existingTools.filter(t => t.type === 'concept')
 | 
			
		||||
}}>
 | 
			
		||||
// REPLACE the JavaScript section at the bottom of tool.astro with this:
 | 
			
		||||
 | 
			
		||||
document.addEventListener('DOMContentLoaded', () => {
 | 
			
		||||
  const form = document.getElementById('contribution-form');
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user