Commit bf166071 authored by Priit Laes's avatar Priit Laes

We now use Select2 instead of chosen \o/

parent 86fd561f
...@@ -33,7 +33,7 @@ Flask-Admin is extensively documented, you can find `documentation here <http:// ...@@ -33,7 +33,7 @@ Flask-Admin is extensively documented, you can find `documentation here <http://
3rd Party Stuff 3rd Party Stuff
--------------- ---------------
Flask-Admin is built with help of `Twitter Bootstrap <http://twitter.github.com/bootstrap/>`_ and `Chosen <http://harvesthq.github.com/chosen/>`_. Flask-Admin is built with help of `Twitter Bootstrap <http://twitter.github.com/bootstrap/>`_ and `Select2 <https://github.com/ivaynberg/select2>`_.
Kudos Kudos
----- -----
......
...@@ -70,7 +70,7 @@ class AdminModelConverter(ModelConverterBase): ...@@ -70,7 +70,7 @@ class AdminModelConverter(ModelConverterBase):
kwargs['query_factory'] = lambda: self.session.query(remote_model) kwargs['query_factory'] = lambda: self.session.query(remote_model)
if prop.direction.name == 'MANYTOONE': if prop.direction.name == 'MANYTOONE':
return QuerySelectField(widget=form.ChosenSelectWidget(), return QuerySelectField(widget=form.Select2Widget(),
**kwargs) **kwargs)
elif prop.direction.name == 'ONETOMANY': elif prop.direction.name == 'ONETOMANY':
# Skip backrefs # Skip backrefs
...@@ -78,11 +78,11 @@ class AdminModelConverter(ModelConverterBase): ...@@ -78,11 +78,11 @@ class AdminModelConverter(ModelConverterBase):
return None return None
return QuerySelectMultipleField( return QuerySelectMultipleField(
widget=form.ChosenSelectWidget(multiple=True), widget=form.Select2Widget(multiple=True),
**kwargs) **kwargs)
elif prop.direction.name == 'MANYTOMANY': elif prop.direction.name == 'MANYTOMANY':
return QuerySelectMultipleField( return QuerySelectMultipleField(
widget=form.ChosenSelectWidget(multiple=True), widget=form.Select2Widget(multiple=True),
**kwargs) **kwargs)
else: else:
# Ignore pk/fk # Ignore pk/fk
......
...@@ -83,28 +83,30 @@ class TimeField(fields.Field): ...@@ -83,28 +83,30 @@ class TimeField(fields.Field):
raise ValueError(gettext('Invalid time format')) raise ValueError(gettext('Invalid time format'))
class ChosenSelectWidget(widgets.Select): class Select2Widget(widgets.Select):
""" """
`Chosen <http://harvesthq.github.com/chosen/>`_ styled select widget. `Select2 <https://github.com/ivaynberg/select2>`_ styled select widget.
You must include chosen.js and form.js for styling to work. You must include select2.js, form.js and select2 stylesheet for it to
work.
""" """
def __call__(self, field, **kwargs): def __call__(self, field, **kwargs):
if field.allow_blank and not self.multiple: if field.allow_blank and not self.multiple:
kwargs['data-role'] = u'chosenblank' kwargs['data-role'] = u'select2blank'
else: else:
kwargs['data-role'] = u'chosen' kwargs['data-role'] = u'select2'
return super(ChosenSelectWidget, self).__call__(field, **kwargs) return super(Select2Widget, self).__call__(field, **kwargs)
class ChosenSelectField(fields.SelectField): class Select2Field(fields.SelectField):
""" """
`Chosen <http://harvesthq.github.com/chosen/>`_ styled select field. `Select2 <https://github.com/ivaynberg/select2>`_ styled select widget.
You must include chosen.js and form.js for styling to work. You must include select2.js, form.js and select2 stylesheet for it to
work.
""" """
widget = ChosenSelectWidget widget = Select2Widget
class DatePickerWidget(widgets.TextInput): class DatePickerWidget(widgets.TextInput):
......
...@@ -2,10 +2,10 @@ ...@@ -2,10 +2,10 @@
var AdminForm = function() { var AdminForm = function() {
this.applyStyle = function(el, name) { this.applyStyle = function(el, name) {
switch (name) { switch (name) {
case 'chosen': case 'select2':
$(el).select2(); $(el).select2();
break; break;
case 'chosenblank': case 'select2blank':
$(el).select2({allowClear: true}); $(el).select2({allowClear: true});
break; break;
case 'datepicker': case 'datepicker':
...@@ -49,8 +49,8 @@ ...@@ -49,8 +49,8 @@
}; };
this.applyGlobalStyles = function(parent) { this.applyGlobalStyles = function(parent) {
$('[data-role=chosen]', parent).select2(); $('[data-role=select2]', parent).select2();
$('[data-role=chosenblank]', parent).select2({allowClear: true}); $('[data-role=select2blank]', parent).select2({allowClear: true});
$('[data-role=datepicker]', parent).datepicker(); $('[data-role=datepicker]', parent).datepicker();
$('[data-role=datetimepicker]', parent).datepicker({displayTime: true}); $('[data-role=datetimepicker]', parent).datepicker({displayTime: true});
}; };
......
...@@ -73,14 +73,14 @@ ...@@ -73,14 +73,14 @@
{% set filter = admin_view._filters[flt[0]] %} {% set filter = admin_view._filters[flt[0]] %}
<a href="#" class="btn remove-filter" title="{{ _gettext('Remove Filter') }}"> <a href="#" class="btn remove-filter" title="{{ _gettext('Remove Filter') }}">
<span class="close-icon">&times;</span>&nbsp;{{ filters[flt[0]] }} <span class="close-icon">&times;</span>&nbsp;{{ filters[flt[0]] }}
</a><select class="filter-op" data-role="chosen"> </a><select class="filter-op" data-role="select2">
{% for op in admin_view._filter_dict[filter.name] %} {% for op in admin_view._filter_dict[filter.name] %}
<option value="{{ op[0] }}"{% if flt[0] == op[0] %} selected="selected"{% endif %}>{{ op[1] }}</option> <option value="{{ op[0] }}"{% if flt[0] == op[0] %} selected="selected"{% endif %}>{{ op[1] }}</option>
{% endfor %} {% endfor %}
</select> </select>
{%- set data = filter_data.get(flt[0]) -%} {%- set data = filter_data.get(flt[0]) -%}
{%- if data -%} {%- if data -%}
<select name="flt{{ i }}_{{ flt[0] }}" class="filter-val" data-role="chosen"> <select name="flt{{ i }}_{{ flt[0] }}" class="filter-val" data-role="select2">
{%- for d in data %} {%- for d in data %}
<option value="{{ d[0] }}"{% if flt[1] == d[0] %} selected{% endif %}>{{ d[1] }}</option> <option value="{{ d[0] }}"{% if flt[1] == d[0] %} selected{% endif %}>{{ d[1] }}</option>
{%- endfor %} {%- endfor %}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment