• Packages
    • thx-docs
    • thx-core
    • thx-api
    • thx-appy
    • thx-fcm
    • thx-cron
    • thx-cms-box
    • thx-sso-client
    • thx-tests
    • jmb.filters
    • jmb.core
    • jmb.jadmin
    • jmb.async
    • jmb.webposte
    • jmb.newsletter
    • poste-online

Navigation

  • index
  • modules    
  • toc    
  • next    
  • previous    
  • jmb.core 1.5 documentation »
  • Django: aggiunte e standardizzazioni. »
  • Javascript »

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 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

Page contents

  • Popup via iframe
    • classi
    • chiamata singola
    • esempio
    • dipendenze

Previous page

← javascript

Next page

→ picker

This Page

  • Show Source

Quick search

Navigation

  • index
  • modules    
  • toc    
  • next    
  • previous    
  • jmb.core 1.5 documentation »
  • Django: aggiunte e standardizzazioni. »
  • Javascript »
© Copyright 2013, Thunder Systems. Created using Sphinx 2.4.4.