185 lines
10 KiB
HTML
185 lines
10 KiB
HTML
<div id="info-modal" class="modal-overlay" style="display: none;">
|
||
<div class="modal-content infobox-modal-content">
|
||
<!-- Header -->
|
||
<div class="infobox-modal-header">
|
||
<div class="infobox-header-title">
|
||
<div class="infobox-header-text">
|
||
<h3>{{ t('info_modal.title') || 'Post & File Details' }}</h3>
|
||
<span class="infobox-sub-heading">ID: <code>{{ item.id }}</code></span>
|
||
</div>
|
||
</div>
|
||
<button type="button" class="infobox-close-icon-btn" id="info-modal-close-icon" title="{{ t('common.close') || 'Close' }}">
|
||
<i class="fa-solid fa-xmark"></i>
|
||
</button>
|
||
</div>
|
||
|
||
<!-- Body -->
|
||
<div class="infobox-modal-body">
|
||
|
||
<!-- Section 1: Post Details -->
|
||
<div class="infobox-section">
|
||
<div class="infobox-section-header">
|
||
<i class="fa-solid fa-sliders"></i>
|
||
<span>Post Configuration</span>
|
||
</div>
|
||
|
||
<div class="infobox-cards-grid">
|
||
@if(enable_item_title)
|
||
<div class="infobox-card full-width">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-heading"></i> Title</label>
|
||
@if(can_manage_item)
|
||
<div class="info-title-edit-wrap">
|
||
<input type="text" id="info-title-input" class="info-title-input" value="{!! item.title || '' !!}" placeholder="Add a title…" maxlength="500" data-item-id="{{ item.id }}" />
|
||
<button type="button" id="info-title-save" class="info-title-save-btn" title="Save Title"><i class="fa-solid fa-check"></i></button>
|
||
</div>
|
||
<span id="info-title-status" class="info-title-status" style="display:none"></span>
|
||
@else
|
||
<div class="infobox-card-value">{!! item.title || '<span class="text-muted">No title set</span>' !!}</div>
|
||
@endif
|
||
</div>
|
||
@endif
|
||
|
||
<div class="infobox-card">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-eye"></i> Visibility</label>
|
||
<div class="infobox-card-value-row">
|
||
<span id="info-visibility-label" class="visibility-badge vis-{{ item.visibility || 0 }}">
|
||
@if(item.visibility === 2)
|
||
<i class="fa-solid fa-lock" style="color: var(--color-danger, #ff4444);"></i> Private
|
||
@elseif(item.visibility === 1)
|
||
<i class="fa-solid fa-link" style="color: var(--color-warning, #ffbb33);"></i> Unlisted
|
||
@else
|
||
<i class="fa-solid fa-globe" style="color: var(--color-success, #00C851);"></i> Public
|
||
@endif
|
||
</span>
|
||
@if(can_manage_item)
|
||
<button type="button" id="info-visibility-edit-btn" class="infobox-action-btn" data-item-id="{{ item.id }}" data-visibility="{{ item.visibility || 0 }}">
|
||
<i class="fa-solid fa-pen"></i> Edit
|
||
</button>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
|
||
@if(enable_expiring_uploads !== false)
|
||
<div class="infobox-card">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-hourglass-half"></i> Expiration</label>
|
||
<div class="infobox-expiry-content">
|
||
<span id="info-expiry-label" class="expiry-status-label" title="{{ item.expires_at ? new Date(item.expires_at * 1000).toLocaleString() : '' }}">
|
||
@if(item.expires_at)
|
||
<i class="fa-solid fa-clock" style="color: #ffaa00;"></i> {{ item.expires_in || ('in ' + new Date(item.expires_at * 1000).toLocaleString()) }}
|
||
@else
|
||
<i class="fa-solid fa-clock-slash" style="color: var(--text-muted, #888);"></i> Permanent
|
||
@endif
|
||
</span>
|
||
@if(can_manage_item)
|
||
<div class="info-expiry-edit-controls">
|
||
<select id="info-expiry-select" class="infobox-select" data-item-id="{{ item.id }}">
|
||
<option value="permanent" {{ !item.expires_at ? 'selected' : '' }}>Permanent</option>
|
||
<option value="30minutes">30 Minutes</option>
|
||
<option value="1hour">1 Hour</option>
|
||
<option value="24hours">24 Hours</option>
|
||
<option value="1week">1 Week</option>
|
||
<option value="1month">1 Month</option>
|
||
</select>
|
||
<button type="button" id="info-set-expiry-btn" class="infobox-action-btn" data-item-id="{{ item.id }}" title="Save Expiration">
|
||
<i class="fa-solid fa-check"></i>
|
||
</button>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Section 2: Technical File Specifications -->
|
||
<div class="infobox-section">
|
||
<div class="infobox-section-header">
|
||
<i class="fa-solid fa-file-code"></i>
|
||
<span>Technical Specifications</span>
|
||
</div>
|
||
|
||
<div class="infobox-cards-grid">
|
||
<div class="infobox-card">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-hard-drive"></i> File Size</label>
|
||
<div class="infobox-card-value font-mono">{{ item.size }}</div>
|
||
</div>
|
||
|
||
@if(item_has_dimensions)
|
||
<div class="infobox-card">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-ruler-combined"></i> Dimensions</label>
|
||
<div class="infobox-card-value font-mono">{{ item.width }} × {{ item.height }} px</div>
|
||
</div>
|
||
@endif
|
||
|
||
<div class="infobox-card">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-file-lines"></i> MIME Type</label>
|
||
<div class="infobox-card-value"><code class="mime-pill">{{ item.mime }}</code></div>
|
||
</div>
|
||
|
||
<div class="infobox-card">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-arrow-up-right-from-square"></i> Direct Link</label>
|
||
<div class="infobox-card-value">
|
||
<a href="{{ item.mime === 'video/youtube' ? 'https://www.youtube.com/watch?v=' + item.dest.replace('yt:', '') : item.dest }}" target="_blank" class="infobox-link-pill">
|
||
<i class="fa-solid fa-up-right-from-square"></i> {{ t('info_modal.view_file') || 'Open File' }}
|
||
</a>
|
||
</div>
|
||
</div>
|
||
|
||
@if(item.src && item.src.short)
|
||
<div class="infobox-card full-width">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-link"></i> Source URL</label>
|
||
<div class="infobox-card-value">
|
||
<a href="{{ item.src.long }}" target="_blank" class="infobox-source-link">
|
||
<i class="fa-solid fa-globe"></i> {{ item.src.short }}
|
||
</a>
|
||
</div>
|
||
</div>
|
||
@endif
|
||
|
||
@if(item.checksum)
|
||
<div class="infobox-card full-width">
|
||
<div class="infobox-card-label-row">
|
||
<label class="infobox-card-label"><i class="fa-solid fa-fingerprint"></i> SHA-256 Hash</label>
|
||
<button type="button" class="copy-hash-btn" id="info-copy-hash-btn" data-hash="{{ item.checksum.split('_bypass_')[0] }}" title="Copy SHA-256 Hash">
|
||
<i class="fa-solid fa-copy"></i> Copy
|
||
</button>
|
||
</div>
|
||
<div class="info-hash-codeblock font-mono"><code>{{ item.checksum.split('_bypass_')[0] }}</code></div>
|
||
|
||
</div>
|
||
@endif
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Section 3: Reposts & Duplicates (if present) -->
|
||
@if(item.show_repost_row)
|
||
<div class="infobox-section">
|
||
<div class="infobox-section-header">
|
||
<i class="fa-solid fa-copy"></i>
|
||
<span>Similar & Duplicate Uploads</span>
|
||
</div>
|
||
<div class="infobox-reposts-list">
|
||
@each(item.reposts as rp)
|
||
<a href="/{{ rp.slug || rp.id }}" class="repost-pill {{ rp.match_type === 'phash' ? 'phash' : 'exact' }}" tooltip="{{ rp.match_type === 'phash' ? 'Visually similar (perceptual hash)' : 'Exact duplicate (checksum)' }}" flow="up">
|
||
<i class="fa-solid {{ rp.match_type === 'phash' ? 'fa-clone' : 'fa-copy' }}"></i>
|
||
<span>{{ rp.match_type === 'phash' ? '~#' : '#' }}{{ rp.slug || rp.id }}</span>
|
||
</a>
|
||
@endeach
|
||
</div>
|
||
</div>
|
||
@endif
|
||
|
||
</div>
|
||
|
||
<!-- Footer -->
|
||
<div class="infobox-modal-footer">
|
||
@if(can_manage_item)
|
||
<button type="button" class="btn-infobox-action" id="info-rethumb-btn" data-item-id="{{ item.id }}">
|
||
<i class="fa-solid fa-arrows-rotate"></i> Regenerate Thumbnail
|
||
</button>
|
||
@endif
|
||
<button type="button" class="btn-infobox-close" id="info-modal-close">{{ t('common.close') || 'Close' }}</button>
|
||
</div>
|
||
</div>
|
||
</div>
|