.. _show_in_popup: ================ 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 ``_popup=1`` :hjson: forza l'output come json. Viene aggiunto ``_json=1&_popup=1`` all'URL. :refresh: forza l'utilizzo del ``json`` per fare un refresh del dato anche quando si passi da un redirect di un oggetto *diverso*. Ad esempio nella ``changelist`` dei ticket, aggiungiamo un intervento e vogliamo che al salvataggio venga riletta la singola riga *del ticket*. Aggiunge all'url ``_refresh=1`` In questo caso deve essere implementato a mano il redirect all'interno della ``response_add``/``response_change``:: 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 :class:`AjaxParentModelAdmin ` ha automaticamente definita una vista con name ``__json`` che crea una :class:`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": "...\n\n" } ] data_json[0].method = "" action = '' message = '' Vedi libreria jmb completa :ref:`jmb.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 """ """ % { 'reverse_url': reverse('admin:ticket_ticketassistance_add'), 'ticket_id': obj.id } get_add_assistance_.allow_tags = True aggiungere nella change_list.html:: dipendenze ========== * jQuery e jQuery ui * popup.js e jmb.core.js