Tune editor

This commit is contained in:
marc
2025-03-16 18:45:08 +01:00
parent a85efd0838
commit 6c83d11e5b
33 changed files with 960 additions and 312 deletions

View File

@@ -1,10 +1,10 @@
<li id="tema-link-{{ link.id }}">
<form class="flex flex-row items-start">
<form class="flex flex-row items-start"
hx-encoding='multipart/form-data'>
{% include "fragments/tema/link_icon.html" %}
<div class="grow my-2">
<p class="text-sm text-beige">
<select id="tema-link-{{ link.id }}-content-type"
name="content_type"
<div class="flex flex-col grow my-2">
<div class="text-sm text-beige">
<select name="content_type"
value="{{ link.content_type.value.capitalize() }}"
class="border border-yellow-50 focus:outline-none
rounded
@@ -21,8 +21,8 @@
{% endif %}
{% endfor %}
</select>
</p>
<p>
</div>
<div>
<input name="title"
placeholder="Títol de l'enllaç"
value="{{ link.title }}"
@@ -30,21 +30,8 @@
rounded w-full
bg-brown p-1 my-1"
/>
</p>
<p>
<input name="url"
placeholder="URL de l'enllaç"
value="{{ link.url }}"
class="border border-beige focus:outline-none
rounded w-full
bg-brown p-1 my-1"
hx-get="/api/tema/{{ tema.id }}/link/{{ link_id }}/icon"
hx-trigger="keyup delay:500ms changed"
hx-target="#link-icon-{{ link.id }}"
hx-include="[name='content_type']"
hx-swap="outerHTML"
/>
</p>
</div>
{% include "fragments/tema/editor/link_url.html" %}
</div>
<div class="m-2 text-sm text-beige">
<button title="Desa els canvis"

View File

@@ -0,0 +1,16 @@
<div id="link-editor-{{ link_id }}-file"
class="flex flex-row gap-2">
<input type='file'
class="border border-beige focus:outline-none
rounded grow
bg-brown p-1 my-1"
name='upload_file'>
<button title="Afegeix un enllaç"
class="border border-beige rounded px-2 py-1 my-1"
hx-get="/api/tema/{{ tema.id }}/editor/link/{{ link_id }}/url"
hx-target="#link-editor-{{ link_id }}-file"
hx-swap="outerHTML"
>
<i class="fa fa-link" aria-hidden="true"></i>
</button>
</div>

View File

@@ -0,0 +1,23 @@
<div id="link-editor-{{ link_id }}-url"
class="flex flex-row gap-2">
<input name="url"
placeholder="URL de l'enllaç"
value="{{ link.url }}"
class="border border-beige focus:outline-none
rounded grow
bg-brown p-1 my-1"
hx-get="/api/tema/{{ tema.id }}/link/{{ link_id }}/icon"
hx-trigger="keyup delay:500ms changed"
hx-target="#link-icon-{{ link.id }}"
hx-include="[name='content_type']"
hx-swap="outerHTML"
/>
<button title="Puja un fitxer"
class="border border-beige rounded py-1 px-2 my-1"
hx-get="/api/tema/{{ tema.id }}/editor/link/{{ link_id }}/file"
hx-target="#link-editor-{{ link_id }}-url"
hx-swap="outerHTML"
>
<i class="fa fa-upload" aria-hidden="true"></i>
</button>
</div>

View File

@@ -0,0 +1,45 @@
<form id="tema-property-{{ property.id }}"
class="flex flex-row items-center">
<div class="px-2">
<select name="field"
value="{{ property.field.value.capitalize() }}"
class="border border-yellow-50 focus:outline-none
rounded
text-yellow-50 text-center
bg-brown p-1 m-0">
<option value="{{ property.field.value }}">
{{ property.field.value.capitalize() }}
</option>
{% for pf in PropertyField %}
{% if pf != property.field %}
<option value="{{ pf.value }}">
{{ pf.value.capitalize() }}
</option>
{% endif %}
{% endfor %}
</select>
</div>
<div class="grow mx-2">
<input name="value"
placeholder="Informació"
value="{{ property.value }}"
class="border border-beige focus:outline-none
rounded w-full
bg-brown px-2 py-1"
/>
</div>
<button title="Desa els canvis"
class="text-sm text-beige mx-1"
hx-put="/api/tema/{{ tema.id }}/property/{{ property.id }}"
hx-target="#tema-property-{{ property.id }}"
hx-swap="outerHTML">
<i class="fa fa-check" aria-hidden="true"></i>
</button>
<button title="Descarta els canvis"
class="text-sm text-beige mx-1"
hx-get="/api/tema/{{ tema.id }}/property/{{ property.id }}"
hx-target="#tema-property-{{ property.id }}"
hx-swap="outerHTML">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
</form>

View File

@@ -13,12 +13,14 @@
<div class="grow"></div>
<div class="m-2 text-sm text-beige">
<button title="Modifica l'enllaç"
class="mx-1"
hx-get="/api/tema/{{ tema.id }}/editor/link/{{ link.id }}"
hx-target="#tema-link-{{ link.id }}"
hx-swap="outerHTML">
<i class="fa fa-pencil" aria-hidden="true"></i>
</button>
<button title="Esborra l'enllaç"
class="mx-1"
hx-delete="/api/tema/{{ tema.id }}/link/{{ link.id }}"
hx-target="#tema-link-{{ link.id }}"
hx-swap="outerHTML">

View File

@@ -1,9 +1,6 @@
{% if logged_in or tema.links %}
<h4 class="text-xl text-beige">Enllaços</h4>
<hr class="h-px mt-1 mb-3 bg-beige border-0">
{% endif %}
{% if tema.links %}
<h4 class="text-xl text-beige">Enllaços</h4>
<hr class="h-px mt-1 mb-3 bg-beige border-0">
<ul class="flex flex-col justify-center"
id="new-link-target">
{% for link in tema.links %}

View File

@@ -4,19 +4,17 @@
{% include "fragments/tema/title.html" %}
<div class="text-left">
<div id="tema-{{ tema.id }}-score"
hx-get="/api/tema/{{ tema.id }}/score"
hx-trigger="load, reload-tema-{{ tema.id }}-score from:body"
hx-swap="innerHTML"
>
</div>
{% include "fragments/tema/lyrics.html" %}
{% include "fragments/tema/links.html" %}
{% include "fragments/tema/properties.html" %}
<!-- PROPERTIES -->
{% if tema.properties %}
<h4 class="text-xl mt-3 text-beige">Informació</h4>
<hr class="h-px mt-1 mb-3 bg-beige border-0">
{% for property in tema.properties %}
<p>
<i>{{ property.field.value.capitalize() }}</i>: {{ property.value }}
</p>
{% endfor %}
{% endif %}
</div>
</div>
</div>

View File

@@ -0,0 +1,24 @@
{% if logged_in or tema.properties %}
<h4 class="text-xl mt-3 text-beige">Informació</h4>
<hr class="h-px mt-1 mb-3 bg-beige border-0">
<ul class="flex flex-col"
id="new-property-target">
{% for property in tema.properties %}
{% include "fragments/tema/property.html" %}
{% endfor %}
</ul>
{% endif %}
{% if logged_in %}
<div class="flex flex-row my-2 justify-end">
<button title="Afegeix informació"
class="text-sm text-beige text-right"
hx-post="/api/tema/{{ tema.id }}/property"
hx-target="#new-property-target"
hx-swap="beforeend transition:true">
<i class="fa fa-plus" aria-hidden="true"></i>
Afegeix informació
</button>
</div>
{% endif %}

View File

@@ -0,0 +1,27 @@
<div id="tema-property-{{ property.id }}"
class="flex flex-row">
<div class="px-2">
<i>{{ property.field.value.capitalize() }}:</i>
</div>
<div>
{{ property.value }}
</div>
{% if logged_in %}
<div class="grow"></div>
<button title="Modifica la informació"
class="text-sm text-beige mx-1"
hx-get="/api/tema/{{ tema.id }}/editor/property/{{ property.id }}"
hx-target="#tema-property-{{ property.id }}"
hx-swap="outerHTML">
<i class="fa fa-pencil" aria-hidden="true"></i>
</button>
<button title="Esborra la informació"
class="text-sm text-beige mx-1"
hx-delete="/api/tema/{{ tema.id }}/property/{{ property.id }}"
hx-target="#tema-property-{{ property.id }}"
hx-swap="outerHTML">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
{% endif %}
</div>

View File

@@ -0,0 +1,15 @@
{% set score = tema.score() %}
{% if score %}
<h4 class="text-xl text-beige">Partitura</h4>
<hr class="h-px mt-1 mb-3 bg-beige border-0">
{% if score.link_type == LinkType.PDF %}
{% set pdf_url = score.url %}
{% include "fragments/pdf_viewer.html" %}
{% elif score.link_type == LinkType.IMAGE %}
<div class="flex justify-center">
<img class="m-2"
src="{{ score.url }}"
/>
</div>
{% endif %}
{% endif %}

View File

@@ -3,11 +3,18 @@
<h3 class="text-3xl p-4">{{ tema.title }}</h3>
{% if logged_in %}
<button title="Canvia el títol"
class="text-beige text-2xl"
class="text-beige text-2xl mx-2"
hx-get="/api/tema/{{ tema.id }}/editor/title"
hx-target="#tema-title"
hx-swap="outerHTML">
<i class="fa fa-pencil" aria-hidden="true"></i>
</button>
{% include "fragments/tema/visibility.html" %}
<button title="Canvia el títol"
class="text-beige text-2xl mx-2"
hx-delete="/api/tema/{{ tema.id }}"
hx-swap="outerHTML">
<i class="fa fa-times" aria-hidden="true"></i>
</button>
{% endif %}
</div>

View File

@@ -0,0 +1,15 @@
{% if not tema.hidden %}
<button title="Tema visible (amaga'l)"
class="text-beige text-2xl mx-2"
hx-put="/api/tema/{{ tema.id }}/invisible"
hx-swap="outerHTML">
<i class="fa fa-eye" aria-hidden="true"></i>
</button>
{% else %}
<button title="Tema invisible (mostra'l)"
class="text-beige text-2xl mx-2"
hx-put="/api/tema/{{ tema.id }}/visible"
hx-swap="outerHTML">
<i class="fa fa-eye-slash" aria-hidden="true"></i>
</button>
{% endif %}