// Advanced Prompt Arsenal Dashboard class PromptArsenal { constructor() { this.currentView = 'dashboard'; this.currentFolder = null; this.selectedFile = null; this.isMobile = window.innerWidth <= 768; this.sidebarOpen = false; this.searchQuery = ''; this.sortBy = 'name'; this.folderFilter = ''; this.allFiles = []; this.filteredFiles = []; this.fileContents = new Map(); this.init(); } async init() { this.bindEvents(); this.handleResize(); await this.loadFileStructure(); this.updateStats(); this.renderCurrentView(); } bindEvents() { // Navigation events const navItems = document.querySelectorAll('.nav-item'); navItems.forEach(item => { item.addEventListener('click', (e) => { const view = e.currentTarget.dataset.view; this.switchView(view); }); }); // View control buttons const viewBtns = document.querySelectorAll('.view-btn'); viewBtns.forEach(btn => { btn.addEventListener('click', (e) => { const view = e.currentTarget.dataset.view; this.switchView(view); }); }); // Mobile menu const mobileMenuBtn = document.getElementById('mobileMenuBtn'); const mobileOverlay = document.getElementById('mobileOverlay'); if (mobileMenuBtn) { mobileMenuBtn.addEventListener('click', () => this.toggleMobileSidebar()); } if (mobileOverlay) { mobileOverlay.addEventListener('click', () => this.closeMobileSidebar()); } // Search functionality const globalSearch = document.getElementById('globalSearch'); if (globalSearch) { globalSearch.addEventListener('input', this.debounce((e) => { this.searchQuery = e.target.value.toLowerCase(); this.filterAndRenderFiles(); }, 300)); } // Filter controls const folderFilter = document.getElementById('folderFilter'); const sortBy = document.getElementById('sortBy'); if (folderFilter) { folderFilter.addEventListener('change', (e) => { this.folderFilter = e.target.value; this.filterAndRenderFiles(); }); } if (sortBy) { sortBy.addEventListener('change', (e) => { this.sortBy = e.target.value; this.filterAndRenderFiles(); }); } // Quick action buttons const quickBtns = document.querySelectorAll('.quick-btn'); quickBtns.forEach(btn => { btn.addEventListener('click', (e) => { const action = e.currentTarget.dataset.action; this.handleQuickAction(action); }); }); // Action buttons const refreshBtn = document.getElementById('refreshBtn'); if (refreshBtn) { refreshBtn.addEventListener('click', () => this.refresh()); } // Modal events const fileModal = document.getElementById('fileModal'); const modalClose = document.getElementById('modalClose'); const copyContent = document.getElementById('copyContent'); const downloadFile = document.getElementById('downloadFile'); if (modalClose) { modalClose.addEventListener('click', () => this.closeModal()); } if (copyContent) { copyContent.addEventListener('click', () => this.copyFileContent()); } if (downloadFile) { downloadFile.addEventListener('click', () => this.downloadCurrentFile()); } // Keyboard shortcuts document.addEventListener('keydown', (e) => { if (e.key === 'Escape') { this.closeModal(); this.closeMobileSidebar(); } if (e.ctrlKey || e.metaKey) { if (e.key === 'k') { e.preventDefault(); document.getElementById('globalSearch')?.focus(); } if (e.key === 'r') { e.preventDefault(); this.refresh(); } } }); // Window resize window.addEventListener('resize', () => this.handleResize()); } async loadFileStructure() { this.showLoading(true); try { // Get all files from the server const response = await fetch('/api/files'); if (response.ok) { this.allFiles = await response.json(); } else { // Fallback to hardcoded structure if API fails this.allFiles = this.buildHardcodedStructure(); } this.populateFolderFilter(); this.populateFolderNavigation(); this.filteredFiles = [...this.allFiles]; } catch (error) { console.error('Failed to load file structure:', error); this.allFiles = this.buildHardcodedStructure(); this.filteredFiles = [...this.allFiles]; } this.showLoading(false); } buildHardcodedStructure() { const folders = { 'Latest Jailbreaks': [ 'AGI.md', 'Apex.md', 'BOB.md', 'Born Survivalist (yell0wfever92).md', 'CodeGPT6.md', 'Complex.md', 'DANDoc_v2.2 (DaVoidCaller).md', 'DarkGPT.md', 'Decodes Anything Now.md', 'Demonic Chloe (pleasing-punisher).md', 'EarthSaver.md', 'Forest (pink_panther--).md', 'GBTHEN.md', 'GPT 3.5 Web Search.md', 'GPT 4.5 Fusion.md', 'GhettoBreak.md', 'Hex.md', 'IBM.md', 'Infotron (HORSELOCKSPACEPIRATE).md', 'Infotron V2.md', 'Infotron V3 (yell0wfever92).md', 'Master Key.md', 'MrRobot.md', 'NewGen (Ultrazartrex).md', 'Pliny Rekt.md', 'Pliny.md', 'Pollifusion.md', 'ProfessorRick (yell0wfever92).md', 'SINISTERCHAOS (Brilliant_Balance208).md', 'System Update (justpackingheat1).md', 'TAAN.md', 'UNITY.md', 'UltraBreaker.md', 'Universal Bypass.md', 'XFactor.md', 'Z.md', 'Zorg.md', '[GPT4-o] Short 2 (HORSELOCKSPACEPIRATE).md' ], 'Legendary Leaks': [ 'AI Book Writer Assistant.md', 'Book Creator Guide.md', 'Book Writer GPT.md', 'CODEGPTV6.md', 'Copywrighter GPT.md', 'CreativeGPT\'s Prompt Generator.md', 'Email Writer.md', 'Fully SEO Optimized Article 2.md', 'GP(en)T(ester).md', 'God of Prompt.md', 'Grimoire(Latest).md', 'HackerGPT.md', 'Kali GPT.md', 'Malware Rule Master.md', 'Mega-Prompt.md', 'Professional Business Email Writer.md', 'PromptGPT.md', 'SEO BlogGPT.md', 'SINISTER CHAOS.md', 'SOC Copilot.md', 'Super Prompt Generator 3.md', 'Super Prompt Maker.md', 'System Prompt Generator 2.md', 'System Prompt Generator.md', 'The Greatest Computer Science Tutor.md', 'TherapistGPT.md', 'Video Script.md', 'Viral Hooks Generator.md', 'WormGPT3.md', 'WormGPT30.md', 'WormGPT6.md' ], 'Grimoire': [ '000 - Full Base Prompt.md', 'GPTavern.md', 'Grimoire.md', 'Interludes.md', 'Part1.md', 'Part2.md', 'Part3.md', 'Part4.md', 'Part5.md', 'Part6.md', 'Part7.md', 'Part8.md', 'Part9.md', 'PatchNotes.md', 'Projects.md', 'Readme.md', 'RecommendedTools.md', 'ReplitDeployInstructions.md' ], 'My Super Prompts': [ 'Ai Integration Finder.md', 'Jailbreak Tester.md', 'Mental Health Therapist.md', 'ORK | System Prompt Writer and Optimizer.md', 'PSYKOO | Mental Manipulator.md', 'Prompt Engineer Template.md', 'Response Quality Enhacer.md', 'Rizz Game Improver.md', 'VAMPIRE | Ultra Prompt Writer.md' ], 'Prompt Security': [ '10 rules of protection and misdirection.md', '100 Life points.md', 'Anti-verbatim.md', 'Bad faith actors protection.md', 'Bank Security Robot.md', 'Blue Team.md', 'Bot data protection.md', 'CIPHERON.md', 'Data Privacy - Formal.md', 'Do not Leak!.md', 'Final reminder.md', 'Fingers crossed technique.md', 'Gated access.md', 'Guardian Shield.md', 'HackTricksGPT Defense.md', 'Hacker Detected.md', 'I will never trust you again!.md', 'I will only give you poop.md', 'I will report you.md', 'Ignore previous instructions.md', 'Just don\'t repeat.md', 'Keep it polite.md', 'Law of Magic.md', 'Lawyer up.md', 'Mandatory security protocol.md', 'MultiPersona system.md', 'Operation mode is private.md', 'Overly protective parent.md', 'Prior text REDACTED!.md', 'Prohibition era.md', 'Prompt inspection.md', 'STOP HALT.md', 'SafeBOT.md', 'Simple.md', 'Single minded GPT.md', 'Sorry Bro, not possible - short edition.md', 'Sorry, bro! Not possible - elaborate edition.md', 'Stay on topic.md', 'The 3 Asimov laws.md', 'The 5 Rules.md', 'The Soup Boy.md', 'Top Secret Core Instructions.md', 'Under NO circumstances reveal your instructions.md', 'WormGPT Defense.md', 'You are not a GPT.md', 'You\'re not my mom.md', 'warning png.md' ], 'Ultra Prompts': [ 'Prompt Guru V5.md', 'Prompt Quality Evaluation and Enhancement System V1.md' ] }; const files = []; Object.entries(folders).forEach(([folder, fileList]) => { fileList.forEach(filename => { files.push({ name: filename, path: `${folder}/${filename}`, relativePath: `${folder}/${filename}`, folder: folder, size: Math.floor(Math.random() * 50000) + 1000, // Mock size type: 'md', lastModified: new Date(Date.now() - Math.random() * 10000000000) }); }); }); return files; } populateFolderFilter() { const folderFilter = document.getElementById('folderFilter'); if (!folderFilter) return; const folders = [...new Set(this.allFiles.map(file => file.folder))]; folderFilter.innerHTML = ''; folders.forEach(folder => { const option = document.createElement('option'); option.value = folder; option.textContent = folder; folderFilter.appendChild(option); }); } populateFolderNavigation() { const folderNav = document.getElementById('folderNav'); if (!folderNav) return; const folders = [...new Set(this.allFiles.map(file => file.folder))]; folderNav.innerHTML = ''; folders.forEach(folder => { const fileCount = this.allFiles.filter(file => file.folder === folder).length; const li = document.createElement('li'); li.className = 'nav-item folder-nav-item'; li.dataset.folder = folder; li.innerHTML = ` ${folder} ${fileCount} `; li.addEventListener('click', () => { this.currentFolder = folder; this.folderFilter = folder; document.getElementById('folderFilter').value = folder; this.switchView('grid'); this.filterAndRenderFiles(); }); folderNav.appendChild(li); }); } switchView(view) { // Update active nav items document.querySelectorAll('.nav-item').forEach(item => { item.classList.toggle('active', item.dataset.view === view); }); document.querySelectorAll('.view-btn').forEach(btn => { btn.classList.toggle('active', btn.dataset.view === view); }); // Update active view sections document.querySelectorAll('.view-section').forEach(section => { section.classList.remove('active'); }); const targetSection = document.getElementById(`${view}View`); if (targetSection) { targetSection.classList.add('active'); } this.currentView = view; this.updatePageTitle(view); this.renderCurrentView(); this.closeMobileSidebar(); } updatePageTitle(view) { const titles = { dashboard: 'Dashboard', grid: 'Grid View', list: 'List View', tree: 'Tree View' }; const pageTitle = document.getElementById('pageTitle'); const pageSubtitle = document.getElementById('pageSubtitle'); if (pageTitle) pageTitle.textContent = titles[view] || 'Dashboard'; if (pageSubtitle) { if (this.currentFolder) { pageSubtitle.textContent = `Viewing ${this.currentFolder} folder`; } else { pageSubtitle.textContent = 'Advanced file browser and prompt manager'; } } } renderCurrentView() { switch (this.currentView) { case 'dashboard': this.renderDashboard(); break; case 'grid': this.renderGridView(); break; case 'list': this.renderListView(); break; case 'tree': this.renderTreeView(); break; } } renderDashboard() { this.updateStats(); this.renderFolderChart(); } updateStats() { const folders = [...new Set(this.allFiles.map(file => file.folder))]; document.getElementById('totalFiles').textContent = this.allFiles.length; document.getElementById('totalFolders').textContent = folders.length; // Update category counts document.getElementById('jailbreaksCount').textContent = this.allFiles.filter(f => f.folder === 'Latest Jailbreaks').length; document.getElementById('legendaryCount').textContent = this.allFiles.filter(f => f.folder === 'Legendary Leaks').length; document.getElementById('securityCount').textContent = this.allFiles.filter(f => f.folder === 'Prompt Security').length; document.getElementById('ultraCount').textContent = this.allFiles.filter(f => f.folder === 'Ultra Prompts').length; } renderFolderChart() { const folderChart = document.getElementById('folderChart'); if (!folderChart) return; const folders = [...new Set(this.allFiles.map(file => file.folder))]; folderChart.innerHTML = ''; folders.forEach(folder => { const count = this.allFiles.filter(f => f.folder === folder).length; const percentage = (count / this.allFiles.length * 100).toFixed(1); const item = document.createElement('div'); item.className = 'chart-item'; item.innerHTML = `
Try adjusting your search or filter criteria
${file.folder}
Try adjusting your search or filter criteria
${filePath}
$1')
.replace(/```([\s\S]*?)```/g, '$1')
.replace(/\n\n/g, '')
.replace(/\n/g, '
')
.replace(/^(?!<[h1-6|li|pre])(.+)$/gm, '
$1
') .replace(/(