Spaces:
Running
Running
| <html lang="en"> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1.0"> | |
| <title>Comic Editor | Comic Frame Factory</title> | |
| <link rel="stylesheet" href="style.css"> | |
| <script src="https://cdn.tailwindcss.com"></script> | |
| <script src="https://cdn.jsdelivr.net/npm/feather-icons/dist/feather.min.js"></script> | |
| <script src="https://unpkg.com/feather-icons"></script> | |
| <script src="components/navbar.js"></script> | |
| <script src="components/footer.js"></script> | |
| <script src="components/editor-toolbar.js"></script> | |
| </head> | |
| <body class="bg-gray-100"> | |
| <custom-navbar></custom-navbar> | |
| <main class="container mx-auto px-4 py-8"> | |
| <div class="flex justify-between items-center mb-6"> | |
| <h1 class="text-3xl font-bold text-indigo-700">Comic Editor</h1> | |
| <div class="flex space-x-4"> | |
| <button id="saveBtn" class="bg-gray-200 hover:bg-gray-300 text-gray-800 px-4 py-2 rounded-lg flex items-center"> | |
| <i data-feather="save" class="mr-2"></i> Save | |
| </button> | |
| <button id="exportBtn" class="bg-indigo-600 hover:bg-indigo-700 text-white px-4 py-2 rounded-lg flex items-center"> | |
| <i data-feather="download" class="mr-2"></i> Export | |
| </button> | |
| </div> | |
| </div> | |
| <div class="grid grid-cols-1 lg:grid-cols-4 gap-6"> | |
| <div class="lg:col-span-3 bg-white rounded-xl shadow-lg p-6"> | |
| <div id="comicCanvas" class="border-2 border-dashed border-gray-300 rounded-lg min-h-[500px] bg-white"> | |
| <div class="flex items-center justify-center h-full text-gray-500"> | |
| <div class="text-center"> | |
| <i data-feather="image" class="w-12 h-12 mx-auto mb-4"></i> | |
| <p>Upload images or choose from templates to start</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| <div class="bg-white rounded-xl shadow-lg p-6"> | |
| <custom-editor-toolbar></custom-editor-toolbar> | |
| <div class="mt-6"> | |
| <h3 class="text-lg font-semibold mb-3">Elements</h3> | |
| <div class="grid grid-cols-2 gap-3"> | |
| <button class="bg-gray-100 hover:bg-gray-200 p-3 rounded-lg flex flex-col items-center"> | |
| <i data-feather="message-square" class="text-indigo-600 mb-1"></i> | |
| <span class="text-sm">Speech Bubble</span> | |
| </button> | |
| <button class="bg-gray-100 hover:bg-gray-200 p-3 rounded-lg flex flex-col items-center"> | |
| <i data-feather="type" class="text-indigo-600 mb-1"></i> | |
| <span class="text-sm">Text</span> | |
| </button> | |
| <button class="bg-gray-100 hover:bg-gray-200 p-3 rounded-lg flex flex-col items-center"> | |
| <i data-feather="zap" class="text-indigo-600 mb-1"></i> | |
| <span class="text-sm">Effect</span> | |
| </button> | |
| <button class="bg-gray-100 hover:bg-gray-200 p-3 rounded-lg flex flex-col items-center"> | |
| <i data-feather="image" class="text-indigo-600 mb-1"></i> | |
| <span class="text-sm">Image</span> | |
| </button> | |
| </div> | |
| </div> | |
| <div class="mt-6"> | |
| <h3 class="text-lg font-semibold mb-3">Layers</h3> | |
| <div class="bg-gray-50 rounded-lg p-3 min-h-40"> | |
| <p class="text-gray-500 text-center py-8">No layers added yet</p> | |
| </div> | |
| </div> | |
| </div> | |
| </div> | |
| </main> | |
| <custom-footer></custom-footer> | |
| <script> | |
| feather.replace(); | |
| document.addEventListener('DOMContentLoaded', () => { | |
| // Get template from URL | |
| const urlParams = new URLSearchParams(window.location.search); | |
| const templateId = urlParams.get('template'); | |
| if (templateId) { | |
| const template = ComicUtils.getTemplateById(templateId); | |
| if (template) { | |
| // Load template into editor | |
| document.getElementById('comicCanvas').innerHTML = ` | |
| <div class="p-4"> | |
| <h3 class="text-xl font-semibold mb-2">${template.name}</h3> | |
| <img src="${template.thumbnail.replace('320x240', '640x360')}" alt="${template.name}" class="w-full rounded-lg"> | |
| </div> | |
| `; | |
| } | |
| } | |
| // Save button | |
| document.getElementById('saveBtn').addEventListener('click', () => { | |
| const comicData = { | |
| id: Date.now(), | |
| name: `Comic ${new Date().toLocaleDateString()}`, | |
| template: templateId || 'custom', | |
| createdAt: new Date().toISOString() | |
| }; | |
| ComicUtils.saveComic(comicData); | |
| alert('Comic saved successfully!'); | |
| }); | |
| // Export button | |
| document.getElementById('exportBtn').addEventListener('click', () => { | |
| alert('Export functionality would be implemented here'); | |
| }); | |
| }); | |
| </script> | |
| </body> | |
| </html> |