Release v2.0: URL upload, BBCode sharing, QR codes
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1,6 +1,9 @@
|
||||
{% if photos %}
|
||||
<div class="gallery">
|
||||
{% for photo in photos %}
|
||||
{% set share_url = request.url_root.rstrip('/') ~ photo.url %}
|
||||
{% set share_bbcode = '[img]' ~ share_url ~ '[/img]' %}
|
||||
{% set share_html = '<img src="' ~ share_url ~ '" alt="' ~ photo.original_name ~ '">' %}
|
||||
<article class="photo-card" data-id="{{ photo.id }}">
|
||||
<div class="photo-card__image-wrap">
|
||||
<img
|
||||
@@ -10,8 +13,22 @@
|
||||
loading="lazy"
|
||||
>
|
||||
<div class="photo-card__overlay">
|
||||
<button type="button" class="btn btn--ghost btn--sm copy-btn" data-url="{{ request.url_root.rstrip('/') }}{{ photo.url }}">
|
||||
Копировать ссылку
|
||||
<button type="button" class="btn btn--ghost btn--sm copy-btn" data-url="{{ share_url }}">
|
||||
Ссылка
|
||||
</button>
|
||||
<button type="button" class="btn btn--ghost btn--sm copy-btn" data-url="{{ share_bbcode }}">
|
||||
BBCode
|
||||
</button>
|
||||
<button
|
||||
type="button"
|
||||
class="btn btn--ghost btn--sm share-qr-btn"
|
||||
data-url="{{ share_url }}"
|
||||
data-bbcode="{{ share_bbcode }}"
|
||||
data-html="{{ share_html }}"
|
||||
data-qr="{{ url_for('main.photo_qr', photo_id=photo.id) }}"
|
||||
data-name="{{ photo.original_name }}"
|
||||
>
|
||||
QR
|
||||
</button>
|
||||
<a href="{{ photo.url }}" target="_blank" class="btn btn--ghost btn--sm">Открыть</a>
|
||||
</div>
|
||||
|
||||
@@ -0,0 +1,36 @@
|
||||
<div class="share-modal" id="shareModal" hidden>
|
||||
<div class="share-modal__backdrop" data-close-share></div>
|
||||
<div class="share-modal__dialog" role="dialog" aria-labelledby="shareModalTitle">
|
||||
<button type="button" class="share-modal__close" data-close-share aria-label="Закрыть">×</button>
|
||||
<h3 class="share-modal__title" id="shareModalTitle">Поделиться</h3>
|
||||
<p class="share-modal__name" id="shareModalName"></p>
|
||||
|
||||
<div class="share-modal__qr-wrap">
|
||||
<img id="shareModalQr" class="share-modal__qr" alt="QR-код">
|
||||
</div>
|
||||
|
||||
<div class="share-field">
|
||||
<label for="shareModalUrl">Прямая ссылка</label>
|
||||
<div class="share-field__row">
|
||||
<input id="shareModalUrl" type="text" readonly>
|
||||
<button type="button" class="btn btn--ghost btn--sm copy-btn" data-target="shareModalUrl">Копировать</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="share-field">
|
||||
<label for="shareModalBbcode">BBCode для форумов</label>
|
||||
<div class="share-field__row">
|
||||
<input id="shareModalBbcode" type="text" readonly>
|
||||
<button type="button" class="btn btn--ghost btn--sm copy-btn" data-target="shareModalBbcode">Копировать</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div class="share-field">
|
||||
<label for="shareModalHtml">HTML для сайтов</label>
|
||||
<div class="share-field__row">
|
||||
<input id="shareModalHtml" type="text" readonly>
|
||||
<button type="button" class="btn btn--ghost btn--sm copy-btn" data-target="shareModalHtml">Копировать</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
@@ -1,22 +1,47 @@
|
||||
<form action="{{ url_for('main.upload') }}" method="post" enctype="multipart/form-data" class="upload-form" id="uploadForm">
|
||||
{% if folder_id %}<input type="hidden" name="folder_id" value="{{ folder_id }}">{% endif %}
|
||||
<div class="dropzone" id="dropzone">
|
||||
<input type="file" name="photos" id="photoInput" accept="image/png,image/jpeg,image/gif,image/webp,image/bmp" multiple data-max="{{ max_bulk_upload|default(100) }}" hidden>
|
||||
<div class="dropzone__icon">
|
||||
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
|
||||
<path d="M12 16V4m0 0L8 8m4-4l4 4"/>
|
||||
<path d="M20 16.5v1a2.5 2.5 0 01-2.5 2.5h-11A2.5 2.5 0 014 17.5v-1"/>
|
||||
</svg>
|
||||
</div>
|
||||
<p class="dropzone__title">Перетащите фото сюда</p>
|
||||
<p class="dropzone__hint">или выберите до {{ max_bulk_upload|default(100) }} файлов</p>
|
||||
<p class="dropzone__formats">PNG · JPG · GIF · WEBP · BMP</p>
|
||||
<div class="dropzone__preview" id="preview" hidden>
|
||||
<img id="previewImg" alt="Предпросмотр">
|
||||
<span id="previewName"></span>
|
||||
</div>
|
||||
|
||||
<div class="upload-tabs">
|
||||
<button type="button" class="upload-tabs__btn upload-tabs__btn--active" data-tab="files">Файлы</button>
|
||||
<button type="button" class="upload-tabs__btn" data-tab="urls">Ссылки</button>
|
||||
</div>
|
||||
|
||||
<div class="upload-panel upload-panel--active" data-panel="files">
|
||||
<div class="dropzone" id="dropzone">
|
||||
<input type="file" name="photos" id="photoInput" accept="image/png,image/jpeg,image/gif,image/webp,image/bmp" multiple data-max="{{ max_bulk_upload|default(100) }}" hidden>
|
||||
<div class="dropzone__icon">
|
||||
<svg width="48" height="48" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.5">
|
||||
<path d="M12 16V4m0 0L8 8m4-4l4 4"/>
|
||||
<path d="M20 16.5v1a2.5 2.5 0 01-2.5 2.5h-11A2.5 2.5 0 014 17.5v-1"/>
|
||||
</svg>
|
||||
</div>
|
||||
<p class="dropzone__title">Перетащите фото сюда</p>
|
||||
<p class="dropzone__hint">или выберите до {{ max_bulk_upload|default(100) }} файлов</p>
|
||||
<p class="dropzone__formats">PNG · JPG · GIF · WEBP · BMP</p>
|
||||
<div class="dropzone__preview" id="preview" hidden>
|
||||
<img id="previewImg" alt="Предпросмотр">
|
||||
<span id="previewName"></span>
|
||||
</div>
|
||||
</div>
|
||||
<button type="submit" class="btn btn--primary" id="submitBtn" disabled>
|
||||
<span>Загрузить файлы</span>
|
||||
</button>
|
||||
</div>
|
||||
|
||||
<div class="upload-panel" data-panel="urls">
|
||||
<div class="url-upload">
|
||||
<label for="imageUrls" class="url-upload__label">Прямые ссылки на изображения</label>
|
||||
<textarea
|
||||
id="imageUrls"
|
||||
name="image_urls"
|
||||
class="url-upload__input"
|
||||
rows="5"
|
||||
placeholder="https://example.com/photo.jpg https://example.com/image.png"
|
||||
></textarea>
|
||||
<p class="url-upload__hint">По одной ссылке в строке. Поддерживаются HTTP и HTTPS.</p>
|
||||
</div>
|
||||
<button type="submit" class="btn btn--primary" id="submitUrlBtn">
|
||||
<span>Загрузить по ссылкам</span>
|
||||
</button>
|
||||
</div>
|
||||
<button type="submit" class="btn btn--primary" id="submitBtn" disabled>
|
||||
<span>Загрузить</span>
|
||||
</button>
|
||||
</form>
|
||||
|
||||
Reference in New Issue
Block a user