feat: FASE 4 - Editor Maker (Fabric.js) con annotazioni, task editor, preview e storico versioni

- recipe_list.html: lista ricette con filtri, paginazione, cards Alpine.js
- recipe_editor.html: form metadati, upload drag-and-drop, canvas Fabric.js per annotazioni
- annotation-editor.js: editor annotazioni Fabric.js (marker, frecce, rettangoli, zoom, pan)
- task_editor.html: editor task/subtask inline con drag-and-drop reorder e tolleranze
- recipe_preview.html: anteprima ricetta come MeasurementTec
- version_history.html: timeline versioni con conteggio misurazioni AJAX
- maker.py: 6 route pagina + 13 proxy AJAX, gestione sicura risposte lista API
- i18n: 170+ stringhe tradotte IT/EN per tutti i template Maker

Architect review: 3 CRITICO + 5 MEDIO + 3 NEW risolti, 2 BASSO differiti

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Adriano
2026-02-07 13:15:24 +01:00
parent a386986c17
commit e1f4ee73d0
11 changed files with 5915 additions and 19 deletions
@@ -502,3 +502,450 @@ msgstr "Browser non supporta Web Serial API"
# Recipe Selection Additional
msgid "Errore di connessione"
msgstr "Errore di connessione"
# Maker - Recipe List
msgid "Gestione Ricette"
msgstr "Gestione Ricette"
msgid "Crea e gestisci le ricette di misura"
msgstr "Crea e gestisci le ricette di misura"
msgid "Nuova Ricetta"
msgstr "Nuova Ricetta"
msgid "Cerca per nome, codice o descrizione..."
msgstr "Cerca per nome, codice o descrizione..."
msgid "Tutti"
msgstr "Tutti"
msgid "Attive"
msgstr "Attive"
msgid "Disattivate"
msgstr "Disattivate"
msgid "ricetta trovata"
msgstr "ricetta trovata"
msgid "Attiva"
msgstr "Attiva"
msgid "Disattivata"
msgstr "Disattivata"
msgid "task"
msgstr "task"
msgid "Aggiornata"
msgstr "Aggiornata"
msgid "Versioni"
msgstr "Versioni"
msgid "Nessuna ricetta disponibile"
msgstr "Nessuna ricetta disponibile"
msgid "Prova a modificare i filtri di ricerca"
msgstr "Prova a modificare i filtri di ricerca"
msgid "Inizia creando la tua prima ricetta di misura"
msgstr "Inizia creando la tua prima ricetta di misura"
msgid "Crea Prima Ricetta"
msgstr "Crea Prima Ricetta"
msgid "Conferma Eliminazione"
msgstr "Conferma Eliminazione"
msgid "Sei sicuro di voler disattivare la ricetta"
msgstr "Sei sicuro di voler disattivare la ricetta"
msgid "Le misure esistenti non verranno eliminate"
msgstr "Le misure esistenti non verranno eliminate"
msgid "Errore durante eliminazione"
msgstr "Errore durante eliminazione"
msgid "Dashboard"
msgstr "Dashboard"
# Maker - Recipe Editor
msgid "Modifica Ricetta"
msgstr "Modifica Ricetta"
msgid "Compila i dati della ricetta e carica il disegno tecnico"
msgstr "Compila i dati della ricetta e carica il disegno tecnico"
msgid "Ricetta salvata con successo"
msgstr "Ricetta salvata con successo"
msgid "Metadati Ricetta"
msgstr "Metadati Ricetta"
msgid "Es. COUPLING-256"
msgstr "Es. COUPLING-256"
msgid "Es. Coupling Assembly 256"
msgstr "Es. Coupling Assembly 256"
msgid "Descrizione opzionale della ricetta..."
msgstr "Descrizione opzionale della ricetta..."
msgid "Il codice non puo essere modificato dopo la creazione"
msgstr "Il codice non puo essere modificato dopo la creazione"
msgid "Disegno Tecnico e Annotazioni"
msgstr "Disegno Tecnico e Annotazioni"
msgid "Immagine caricata"
msgstr "Immagine caricata"
msgid "Marker numerato"
msgstr "Marker numerato"
msgid "Marker"
msgstr "Marker"
msgid "Freccia"
msgstr "Freccia"
msgid "Rettangolo"
msgstr "Rettangolo"
msgid "Elimina selezionato"
msgstr "Elimina selezionato"
msgid "Zoom"
msgstr "Zoom"
msgid "Zoom indietro"
msgstr "Zoom indietro"
msgid "Zoom avanti"
msgstr "Zoom avanti"
msgid "Reset zoom"
msgstr "Reset zoom"
msgid "Trascina"
msgstr "Trascina"
msgid "Pan"
msgstr "Pan"
msgid "Caricamento in corso..."
msgstr "Caricamento in corso..."
msgid "Trascina qui il disegno tecnico oppure clicca per selezionare"
msgstr "Trascina qui il disegno tecnico oppure clicca per selezionare"
msgid "Trascina qui per sostituire il disegno tecnico"
msgstr "Trascina qui per sostituire il disegno tecnico"
msgid "Formati supportati: PNG, JPG, PDF"
msgstr "Formati supportati: PNG, JPG, PDF"
msgid "Versioning"
msgstr "Versioning"
msgid "Versione corrente:"
msgstr "Versione corrente:"
msgid "Vedi cronologia"
msgstr "Vedi cronologia"
msgid "versioni"
msgstr "versioni"
msgid "Se modifichi questa ricetta verra creata automaticamente la versione"
msgstr "Se modifichi questa ricetta verra creata automaticamente la versione"
msgid "Le misure esistenti resteranno associate alla versione corrente."
msgstr "Le misure esistenti resteranno associate alla versione corrente."
msgid "Motivo della modifica"
msgstr "Motivo della modifica"
msgid "Es. Aggiornate tolleranze foro centrale..."
msgstr "Es. Aggiornate tolleranze foro centrale..."
msgid "Opzionale. Verra registrato nella cronologia versioni."
msgstr "Opzionale. Verra registrato nella cronologia versioni."
msgid "Salva Ricetta"
msgstr "Salva Ricetta"
msgid "Formato file non supportato. Usa PNG, JPG o PDF."
msgstr "Formato file non supportato. Usa PNG, JPG o PDF."
msgid "File troppo grande. Dimensione massima: 20MB."
msgstr "File troppo grande. Dimensione massima: 20MB."
msgid "Errore durante il caricamento del file"
msgstr "Errore durante il caricamento del file"
msgid "Errore di connessione durante il caricamento"
msgstr "Errore di connessione durante il caricamento"
msgid "Nessun file caricato"
msgstr "Nessun file caricato"
msgid "Nome file vuoto"
msgstr "Nome file vuoto"
# Maker - Task Editor
msgid "Editor Task"
msgstr "Editor Task"
msgid "Task e Misurazioni"
msgstr "Task e Misurazioni"
msgid "Torna a Ricetta"
msgstr "Torna a Ricetta"
msgid "Aggiungi Task"
msgstr "Aggiungi Task"
msgid "Nuovo Task"
msgstr "Nuovo Task"
msgid "Titolo"
msgstr "Titolo"
msgid "Direttiva"
msgstr "Direttiva"
msgid "Es. Controllo dimensionale flangia"
msgstr "Es. Controllo dimensionale flangia"
msgid "Es. Seguire procedura ISO 2768"
msgstr "Es. Seguire procedura ISO 2768"
msgid "Descrizione opzionale..."
msgstr "Descrizione opzionale..."
msgid "Crea Task"
msgstr "Crea Task"
msgid "Trascina per riordinare"
msgstr "Trascina per riordinare"
msgid "Modifica task"
msgstr "Modifica task"
msgid "Espandi/Comprimi"
msgstr "Espandi/Comprimi"
msgid "Elimina task"
msgstr "Elimina task"
msgid "UTL"
msgstr "UTL"
msgid "UWL"
msgstr "UWL"
msgid "LWL"
msgstr "LWL"
msgid "LTL"
msgstr "LTL"
msgid "Unita"
msgstr "Unita"
msgid "Tolleranze"
msgstr "Tolleranze"
msgid "Azioni"
msgstr "Azioni"
msgid "#"
msgstr "#"
msgid "Tipo"
msgstr "Tipo"
msgid "Lineare"
msgstr "Lineare"
msgid "Diametro"
msgstr "Diametro"
msgid "Raggio"
msgstr "Raggio"
msgid "Angolo"
msgstr "Angolo"
msgid "Rugosita"
msgstr "Rugosita"
msgid "Coppia"
msgstr "Coppia"
msgid "Forza"
msgstr "Forza"
msgid "Peso"
msgstr "Peso"
msgid "Altro"
msgstr "Altro"
msgid "Nessuna misurazione definita"
msgstr "Nessuna misurazione definita"
msgid "Aggiungi la prima misurazione per questo task"
msgstr "Aggiungi la prima misurazione per questo task"
msgid "Nuova Misurazione"
msgstr "Nuova Misurazione"
msgid "Marker #"
msgstr "Marker #"
msgid "Es. Diametro foro principale"
msgstr "Es. Diametro foro principale"
msgid "Lim. Tol. Inf."
msgstr "Lim. Tol. Inf."
msgid "Lim. Warn. Inf."
msgstr "Lim. Warn. Inf."
msgid "Lim. Warn. Sup."
msgstr "Lim. Warn. Sup."
msgid "Lim. Tol. Sup."
msgstr "Lim. Tol. Sup."
msgid "Aggiungi Misurazione"
msgstr "Aggiungi Misurazione"
msgid "Nessun task definito"
msgstr "Nessun task definito"
msgid "Inizia aggiungendo il primo task di misurazione per questa ricetta"
msgstr "Inizia aggiungendo il primo task di misurazione per questa ricetta"
msgid "Aggiungi Primo Task"
msgstr "Aggiungi Primo Task"
msgid "Conferma Eliminazione Task"
msgstr "Conferma Eliminazione Task"
msgid "Sei sicuro di voler eliminare il task"
msgstr "Sei sicuro di voler eliminare il task"
msgid "Verranno eliminate anche"
msgstr "Verranno eliminate anche"
msgid "misurazioni associate."
msgstr "misurazioni associate."
msgid "Elimina Task"
msgstr "Elimina Task"
msgid "Conferma Eliminazione Misurazione"
msgstr "Conferma Eliminazione Misurazione"
msgid "Sei sicuro di voler eliminare la misurazione"
msgstr "Sei sicuro di voler eliminare la misurazione"
msgid "Elimina Misurazione"
msgstr "Elimina Misurazione"
msgid "Errore nella creazione del task"
msgstr "Errore nella creazione del task"
msgid "Task creato con successo"
msgstr "Task creato con successo"
msgid "Errore nel salvataggio del task"
msgstr "Errore nel salvataggio del task"
msgid "Task aggiornato"
msgstr "Task aggiornato"
msgid "Task eliminato"
msgstr "Task eliminato"
msgid "Errore nell'eliminazione del task"
msgstr "Errore nell'eliminazione del task"
msgid "Errore nel riordinamento"
msgstr "Errore nel riordinamento"
msgid "Errore nella creazione della misurazione"
msgstr "Errore nella creazione della misurazione"
msgid "Misurazione aggiunta"
msgstr "Misurazione aggiunta"
msgid "Misurazione aggiornata"
msgstr "Misurazione aggiornata"
msgid "Misurazione eliminata"
msgstr "Misurazione eliminata"
msgid "Errore nell'eliminazione della misurazione"
msgstr "Errore nell'eliminazione della misurazione"
msgid "Direttiva opzionale..."
msgstr "Direttiva opzionale..."
# Maker - Recipe Preview
msgid "Anteprima Ricetta"
msgstr "Anteprima Ricetta"
msgid "Modalita Anteprima"
msgstr "Modalita Anteprima"
msgid "Stai vedendo la ricetta come la vedra il Tecnico di Misura. Tutti i campi sono in sola lettura."
msgstr "Stai vedendo la ricetta come la vedra il Tecnico di Misura. Tutti i campi sono in sola lettura."
msgid "misure"
msgstr "misure"
msgid "Documento PDF allegato"
msgstr "Documento PDF allegato"
msgid "Punti di Misura"
msgstr "Punti di Misura"
msgid "Nessun punto di misura definito per questo task"
msgstr "Nessun punto di misura definito per questo task"
msgid "Questa ricetta non contiene ancora task di misurazione."
msgstr "Questa ricetta non contiene ancora task di misurazione."
msgid "Modifica Task"
msgstr "Modifica Task"
# Maker - Version History
msgid "Storico Versioni"
msgstr "Storico Versioni"
msgid "Corrente:"
msgstr "Corrente:"
msgid "Corrente"
msgstr "Corrente"
msgid "Visualizza"
msgstr "Visualizza"
msgid "Nessuna versione trovata"
msgstr "Nessuna versione trovata"
msgid "Questa ricetta non ha ancora versioni registrate. La prima versione verra creata automaticamente al salvataggio."
msgstr "Questa ricetta non ha ancora versioni registrate. La prima versione verra creata automaticamente al salvataggio."
# Maker - API Errors
msgid "Errore nel caricamento della ricetta: %(error)s"
msgstr "Errore nel caricamento della ricetta: %(error)s"
msgid "Errore nel caricamento delle versioni: %(error)s"
msgstr "Errore nel caricamento delle versioni: %(error)s"