72 lines
2.2 KiB
HTML
72 lines
2.2 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8" />
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
<title>Immich Asset Manager</title>
|
|
<script
|
|
defer
|
|
src="https://cdnjs.cloudflare.com/ajax/libs/alpinejs/3.13.3/cdn.min.js"
|
|
></script>
|
|
<link rel="stylesheet" href="styles.css" />
|
|
</head>
|
|
<body x-data="photoManager()">
|
|
<div class="header">
|
|
<h1>📸 Immich Asset Manager</h1>
|
|
<div class="controls">
|
|
<button
|
|
class="control-btn"
|
|
:class="{ 'active': isPlaying }"
|
|
@click="togglePlayback()"
|
|
:title="isPlaying ? 'Pause slideshow' : 'Play slideshow'"
|
|
>
|
|
<span x-show="!isPlaying">▶️</span>
|
|
<span x-show="isPlaying">⏸️</span>
|
|
</button>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="photo-grid">
|
|
<template x-if="photos.length === 0">
|
|
<div class="empty-state">
|
|
<h2>No photos yet</h2>
|
|
<p>Photos will appear here when displayed on your Immich Frame</p>
|
|
</div>
|
|
</template>
|
|
|
|
<template x-for="photo in getVisiblePhotos()" :key="photo.id">
|
|
<div class="photo-card">
|
|
<div class="photo-container">
|
|
<img
|
|
:src="photo.url"
|
|
:alt="'Photo from ' + photo.displayDate"
|
|
@error="handleImageError($event)"
|
|
/>
|
|
<div class="photo-overlay">
|
|
<div class="photo-actions">
|
|
<button
|
|
class="action-btn"
|
|
@click="openInImmich(photo.immichUrl)"
|
|
>
|
|
📱 Open in Immich
|
|
</button>
|
|
<button
|
|
class="action-btn delete-btn"
|
|
@click="deletePhoto(photo.id)"
|
|
>
|
|
🗑️ Delete
|
|
</button>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
<div class="photo-info">
|
|
<div class="photo-date">
|
|
<span>🖼️ Displayed on</span> <span x-text="photo.date"></span>
|
|
</div>
|
|
</div>
|
|
</div>
|
|
</template>
|
|
</div>
|
|
<script src="main.js"></script>
|
|
</body>
|
|
</html>
|