Popup via iframe¶
Lo scopo è far aprire un popup, in jquery-ui chiamata dialog o modale al click di un link, con un iframe con sorgente il link stesso. Si può attivare su qualsiasi link della change_list aggiungendo la classe iframe. Il sistema aggiunge automaticamente il parametro _popup=1 la dimenensione della finestra per default è 1000x500. questi parametri sono configurabili mettendoli come attributo del link
classi¶
Nel creare il link possiamo usare le seguenti classi:
iframe: | forza il rendering in una modale, il sistema aggiunge
|
---|---|
hjson: | forza l’output come json. Viene aggiunto |
refresh: | forza l’utilizzo del In questo caso deve essere implementato a mano il redirect
all’interno della if request.GET.get("_refresh"):
return HttpResponseRedirect(
reverse('admin:ticket_ticket_json', args=[obj.ticket.pk])+"?_refresh=1")
|
La modifica del link viene fatta da jQuery all’interno della funzione
jmb.core.js
da iframe_hjson_link
con on("click")
in modo da
garantire che non sino applicati se decidiamo di aprire il link in una
finestra separata.
Ogni ModelAdmin che erediti da
AjaxParentModelAdmin
ha
automaticamente definita una vista con name <app_label>_<model_name>_json
che crea una ChildrenChangeList
composta di un solo oggetto e la renderizza
come un normale elemento della change_list e poi la ritorna in un json
così composto:
data_json = [{
"pk": 9134,
"model": "Ticket",
"fields": "<tr class=\"row1\">...</tr>\n\n"
} ]
data_json[0].method = ""
action = ''
message = ''
Vedi libreria jmb completa javascript
chiamata singola¶
Nel caso si voglia utilizzare la funzione singolarmente si può utilizzare:
jmb.show_in_popup(src, title, width=1000, height=500, callback = function(){})
- src -> sorgente dell iframe
- title -> titolo della modale
- width e height -> altezza e larghezza della modale
- callback -> funzione triggerata alla chiusura della modale
- ritorna l’apertura dell iframe nella modale (true)
esempio¶
in admin.py:
def get_add_assistance(self, obj):
return """
<a class='iframe hjson refresh' href='%(reverse_url)s?_popup=1&ticket=%(ticket_id)s'
</a>""" % {
'reverse_url': reverse('admin:ticket_ticketassistance_add'),
'ticket_id': obj.id
}
get_add_assistance_.allow_tags = True
aggiungere nella change_list.html:
<script>
// classe predefinita a.iframe
jmb.auto_popup(classe, callback)
</script>
dipendenze¶
- jQuery e jQuery ui
- popup.js e jmb.core.js