comic-frame-factory / editor.html
VAADIC's picture
Создать аи приложение для создания комикс кадров из готовых картинок
7d44b67 verified
Raw
History Blame Contribute Delete
5.72 kB
<!DOCTYPE html>
<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>