diff --git a/machines/templates/machines/machine.html b/machines/templates/machines/machine.html
index 6982ae1a..4b308a11 100644
--- a/machines/templates/machines/machine.html
+++ b/machines/templates/machines/machine.html
@@ -48,19 +48,11 @@ with this program; if not, write to the Free Software Foundation, Inc.,
{% endif %}
{% if interfaceform %}
Interface
- {% if i_choices %}
- {% if i_match_func %}
- {% bootstrap_form_typeahead interfaceform 'ipv4' choices=i_choices match_func=i_match_func %}
- {% else %}
- {% bootstrap_form_typeahead interfaceform 'ipv4' choices=i_choices %}
- {% endif %}
- {% else %}
- {% if i_match_func %}
- {% bootstrap_form_typeahead interfaceform 'ipv4' match_func=i_match_func %}
- {% else %}
+ {% if i_bft_param %}
+ {% bootstrap_form_typeahead interfaceform 'ipv4' bft_param=i_bft_param %}
+ {% else %}
{% bootstrap_form_typeahead interfaceform 'ipv4' %}
- {% endif %}
- {% endif %}
+ {% endif %}
{% endif %}
{% if domainform %}
Domaine
diff --git a/machines/templatetags/bootstrap_form_typeahead.py b/machines/templatetags/bootstrap_form_typeahead.py
index 8a929fbf..45680fa1 100644
--- a/machines/templatetags/bootstrap_form_typeahead.py
+++ b/machines/templatetags/bootstrap_form_typeahead.py
@@ -84,12 +84,14 @@ def bootstrap_form_typeahead(django_form, typeahead_fields, *args, **kwargs):
{% bootstrap_form_typeahead form 'ipv4' choices='[...]' %}
"""
-
t_fields = typeahead_fields.split(',')
- exclude = kwargs.get('exclude', None)
+ params = kwargs.get('bft_param', {})
+ exclude = params.get('exclude', None)
exclude = exclude.split(',') if exclude else []
- t_choices = kwargs.get('choices', {})
- t_match_func = kwargs.get('match_func', {})
+ t_choices = params.get('choices', {})
+ t_engine = params.get('engine', {})
+ t_match_func = params.get('match_func', {})
+ t_update_on = params.get('update_on', {})
hidden = [h.name for h in django_form.hidden_fields()]
form = ''
@@ -116,7 +118,9 @@ def bootstrap_form_typeahead(django_form, typeahead_fields, *args, **kwargs):
f_name,
f_value,
t_choices,
- t_match_func
+ t_engine,
+ t_match_func,
+ t_update_on
)
)
else:
@@ -145,19 +149,25 @@ def hidden_tag( f_bound, f_name ):
}
)
-def typeahead_js( f_name, f_value, t_choices, t_match_func ) :
+def typeahead_js( f_name, f_value,
+ t_choices, t_engine, t_match_func, t_update_on ) :
choices = mark_safe(t_choices[f_name]) if f_name in t_choices.keys() \
else default_choices( f_value )
+ engine = mark_safe(t_engine[f_name]) if f_name in t_engine.keys() \
+ else default_engine ( f_name )
+
match_func = mark_safe(t_match_func[f_name]) \
if f_name in t_match_func.keys() \
else default_match_func( f_name )
+ update_on = t_update_on[f_name] if f_name in t_update_on.keys() else []
+
js_content = \
'var choices_'+f_name+' = ' + choices + ';\n' + \
'var setup_'+f_name+' = function() {\n' + \
- 'var engine_'+f_name+' = ' + default_engine() + ';\n' + \
+ 'var engine_'+f_name+' = ' + engine + ';\n' + \
'$("#'+input_id(f_name) + '").typeahead("destroy");\n' + \
'$("#'+input_id(f_name) + '").typeahead(\n' + \
default_datasets( f_name, match_func ) + '\n' + \
@@ -171,6 +181,8 @@ def typeahead_js( f_name, f_value, t_choices, t_match_func ) :
'"typeahead:change", ' + \
typeahead_change( f_name ) + '\n' + \
');\n'
+ for u_id in update_on :
+ js_content += '$("#'+u_id+'").change( setup_'+f_name+' );\n'
js_content += '$("#'+input_id(f_name)+'").ready( setup_'+f_name+' );\n'
return render_tag( 'script', content=mark_safe( js_content ) )
diff --git a/machines/views.py b/machines/views.py
index 1aceda3f..ddc5b18f 100644
--- a/machines/views.py
+++ b/machines/views.py
@@ -159,7 +159,7 @@ def new_machine(request, userid):
return redirect("/users/profil/" + str(user.id))
i_choices = { 'ipv4': generate_ipv4_choices( interface.fields['ipv4'] ) }
i_match_func = { 'ipv4': generate_ipv4_match_func() }
- return form({'machineform': machine, 'interfaceform': interface, 'domainform': domain, 'i_choices': i_choices, 'i_match_func': i_match_func}, 'machines/machine.html', request)
+ return form({'machineform': machine, 'interfaceform': interface, 'domainform': domain, 'i_bft_param': {'choices': i_choices, 'match_func': i_match_func}}, 'machines/machine.html', request)
@login_required
def edit_interface(request, interfaceid):
@@ -198,7 +198,7 @@ def edit_interface(request, interfaceid):
return redirect("/users/profil/" + str(interface.machine.user.id))
i_choices = { 'ipv4': generate_ipv4_choices( interface_form.fields['ipv4'] ) }
i_match_func = { 'ipv4': generate_ipv4_match_func() }
- return form({'machineform': machine_form, 'interfaceform': interface_form, 'domainform': domain_form, 'i_choices': i_choices, 'i_match_func': i_match_func}, 'machines/machine.html', request)
+ return form({'machineform': machine_form, 'interfaceform': interface_form, 'domainform': domain_form, 'i_bft_param': {'choices': i_choices, 'match_func': i_match_func}}, 'machines/machine.html', request)
@login_required
def del_machine(request, machineid):
@@ -256,7 +256,7 @@ def new_interface(request, machineid):
return redirect("/users/profil/" + str(machine.user.id))
i_choices = { 'ipv4': generate_ipv4_choices( interface_form.fields['ipv4'] ) }
i_match_func = { 'ipv4': generate_ipv4_match_func() }
- return form({'interfaceform': interface_form, 'domainform': domain_form, 'i_choices': i_choices, 'i_match_func': i_match_func}, 'machines/machine.html', request)
+ return form({'interfaceform': interface_form, 'domainform': domain_form, 'i_bft_param': { 'choices': i_choices, 'match_func': i_match_func }}, 'machines/machine.html', request)
@login_required
def del_interface(request, interfaceid):