Gallery-Archivist/archivist/apps/templates/sites/submission.html

227 lines
10 KiB
HTML

{% extends "layouts/base-electric.html" %}
{% load static %}
{% load media_filters %}
{% load string_helper %}
{% block title %}
{% if submission.content_object.title %}
{{ submission.content_object.title }}
{% else %}
{% if submission.content_object.description|length > 16 %}
{{ submission.content_object.description|slice:"0:16"|add:"..." }}
{% else %}
{{ submission.content_object.description }}
{% endif %}
{% endif %}
by {{ submission.content_object.author.artist }}
{% if submission.category.name == "twitter" %}
(@{{ submission.content_object.author.artist_url }}) from Twitter
{% elif submission.category.name == "furaffinity" %}
{{ submission.content_object.artist }} from FurAffinity
{% endif %}
{% endblock title %}
{% block content %}
{% include "includes/navigation-transparent.html" %}
<div class="container-fluid">
<div class="row row-gap-3 column-gap-0">
<div class="col-xl-9 col-lg-8 pe-lg-0">
<div class="e-container-border e-container-radius">
<div id="submission_container" class="e-container e-container-radius bg-black d-flex justify-content-center align-items-center overflow-hidden">
{% if submission.content_object.files.exists %}
{% if submission.content_object.files.all|length == 1 %}
{% if submission.content_object.files.first.file_mime|is_flash %}
<div id="flash_embed"></div>
{% elif submission.content_object.files.first.file_mime|is_image %}
<img class="img-fluid" width="100%" height="auto"
src="{% url 'files:serve_content_file' 'submission' submission.content_object.files.first.file_hash %}"
alt="{{ submission.content_object.title }}"/>
{% elif submission.content_object.files.first.file_mime|is_pdf %}
<!-- Embed the full PDF.js viewer here -->
<iframe id="pdf-js-viewer"
src="{% static 'libs/pdfjs-4.7.76-dist/web/viewer.html' %}?file={% url 'files:serve_content_file' 'submission' submission.content_object.files.first.file_hash %}"
width="100%" height="100%"
class="border-0 m-auto flex-grow-1 p-0">
</iframe>
<!-- Scripts required for PDF.js -->
<script src="{% static 'libs/pdfjs-4.7.76-dist/build/pdf.js' %}"></script>
<script src="{% static 'libs/pdfjs-4.7.76-dist/web/viewer.js' %}"></script>
{% endif %}
{% endif %}
{% else %}
<div class="m-auto center-block bg-body-secondary p-4 rounded-2 border border-3">
<h3 class="text-center"><i class="nf nf-md-image_broken p-2 me-2 mb-1"></i>No content</h3>
<hr>
<p class="text-center">This submission has no media or is missing media.</p>
</div>
{% endif %}
</div>
</div>
</div>
<div class="col-xl-3 col-lg-4">
<div class="d-none d-sm-none d-md-none d-lg-block e-container-border e-container-radius">
<div class="e-container e-container-radius p-2">
{% include "sites/partials/post-info.html" with submission=submission %}
</div>
</div>
</div>
</div>
<div class="e-container-border e-container-radius row my-3 mt-lg-3 mt-0" tabindex="1">
<div class="e-container e-container-radius p-4">
{% if submission.content_object.title %}
<h3 class="bg-body-tertiary p-2 rounded">{{ submission.content_object.title }}</h3>
<hr>
{% endif %}
<div class="d-flex flex-wrap justify-content-center gap-2">
{% if next_submission %}
<a class="btn btn-primary" href="{% url 'sites:submission' next_submission %}">Next</a>
{% else %}
<span class="btn btn-outline-primary disabled text-decoration-line-through">Next</span>
{% endif %}
<a class="btn btn-secondary" href="{% url 'sites:artist_profile' submission.author.user_hash %}">View Artist</a>
{% if prev_submission %}
<a class="btn btn-primary" href="{% url 'sites:submission' prev_submission %}">Prev</a>
{% else %}
<span class="btn btn-outline-primary disabled text-decoration-line-through">Prev</span>
{% endif %}
{% if submission.category.name == "twitter" %}
<a class="btn btn-outline-secondary ms-auto"
href="https://twitter.com/{{ submission.content_object.author.artist_url }}/status/{{submission.content_object.submission_id}}"
target="_blank">
View Source
</a>
{% elif submission.category.name == "furaffinity" %}
<a class="btn btn-outline-secondary ms-auto"
href="https://www.furaffinity.net/view/{{submission.content_object.submission_id}}"
target="_blank">
View Source
</a>
{% endif %}
{% if request.user.is_staff or request.user.is_superuser %}
<button type="button" class="btn btn-danger"
hx-delete="{% url 'sites:submission' submission.submission_hash %}"
hx-confirm="Are you sure you want to delete this post?"
hx-headers='{"X-CSRFToken": "{{ csrf_token }}"}'>
Delete Post
</button>
{% endif %}
</div>
<hr>
{% if submission.content_object.description %}
{% if submission.category.name == "twitter" %}
<p class="lg-px-12">{{ submission.content_object.description|clickable_urls|get_twitter_username_from_str|get_tags_from_str|safe }}</p>
{% else %}
<p>{{ submission.content_object.description|stylizeDescription|clickable_urls|safe }}</p>
{% endif %}
{% else %}
<p>No description</p>
{% endif %}
<hr>
</div>
</div>
<div class="d-md-block d-lg-none e-container-border e-container-radius row my-3" tabindex="1">
<div class="e-container e-container-radius p-4">
{% include "sites/partials/post-info.html" with submission=submission %}
</div>
</div>
</div>
{% endblock content %}
{% block scripts %}
{% if submission.content_object.files.first.file_mime|is_flash or submission.content_object.file != None %}
<script>
var flash_embed = document.getElementById('flash_embed');
if (flash_embed) {
window.RufflePlayer = window.RufflePlayer || {};
window.RufflePlayer.config = {
"wmode": "direct",
"quality": "high",
};
window.addEventListener("load", (event) => {
const submission_container = document.getElementById("submission_container");
const ruffle = window.RufflePlayer.newest();
const player = ruffle.createPlayer();
const container = document.getElementById("flash_embed");
container.appendChild(player);
// Set initial dimensions
const flash_width = parseInt("{{ submission.content_object.image_width }}");
const flash_height = parseInt("{{ submission.content_object.image_height }}");
const aspectRatio = flash_width / flash_height;
resizeFlashEmbed();
player.load("{% url 'files:serve_content_file' 'submission' submission.content_object.files.first.file_hash %}")
.then(() => {
console.info("Ruffle successfully loaded the file");
})
.catch((e) => {
console.error(`Ruffle failed to load the file: ${e}`);
});
function resizeFlashEmbed() {
const flash_embed_player = flash_embed.firstChild;
const container_width = submission_container.offsetWidth;
const container_height = submission_container.offsetHeight;
// Adjust width and height based on container while keeping aspect ratio
let new_width = container_width;
let new_height = new_width / aspectRatio;
// If the height exceeds the container's height, adjust using height
if (new_height > container_height) {
new_height = container_height;
new_width = new_height * aspectRatio;
}
flash_embed_player.style.width = new_width + 'px';
flash_embed_player.style.height = new_height + 'px';
}
// Call the function on window resize as well
window.addEventListener('resize', resizeFlashEmbed);
window.addEventListener('load', resizeFlashEmbed);
});
}
</script>
{% endif %}
<script src="{% static 'libs/ruffle-nightly-2023_05_04-web-selfhosted/ruffle.js' %}"></script>
{% endblock scripts %}