mirror of
https://github.com/Hopiu/django-select2.git
synced 2026-05-02 19:04:50 +00:00
Merge pull request #168 from bcail/master
Fixed HeavySelect2Widget (incl automated test)
This commit is contained in:
commit
6092d96aea
5 changed files with 51 additions and 5 deletions
|
|
@ -507,6 +507,22 @@ class HeavySelect2Widget(HeavySelect2Mixin, forms.TextInput):
|
|||
# and we want label and other layout elements.
|
||||
return False
|
||||
|
||||
def render_inner_js_code(self, id_, *args):
|
||||
field_id = self.field_id if hasattr(self, 'field_id') else id_
|
||||
fieldset_id = re.sub(r'-\d+-', '_', id_).replace('-', '_')
|
||||
if '__prefix__' in id_:
|
||||
return ''
|
||||
else:
|
||||
js = '''
|
||||
window.django_select2.%s = function (selector, fieldID) {
|
||||
var hashedSelector = "#" + selector;
|
||||
$(hashedSelector).data("field_id", fieldID);
|
||||
''' % (fieldset_id)
|
||||
js += super(HeavySelect2Widget, self).render_inner_js_code(id_, *args)
|
||||
js += '};'
|
||||
js += 'django_select2.%s("%s", "%s");' % (fieldset_id, id_, field_id)
|
||||
return js
|
||||
|
||||
|
||||
class HeavySelect2MultipleWidget(HeavySelect2Mixin, MultipleSelect2HiddenInput):
|
||||
"""
|
||||
|
|
|
|||
|
|
@ -33,3 +33,18 @@ class TestSelect2Widget(object):
|
|||
with pytest.raises(NoSuchElementException):
|
||||
error = driver.find_element_by_xpath('//body[@JSError]')
|
||||
pytest.fail(error.get_attribute('JSError'))
|
||||
|
||||
|
||||
class TestHeavySelect2Widget(object):
|
||||
url = reverse('heavy_select2_widget')
|
||||
|
||||
def test_heavy_select(self, db, client, live_server, driver):
|
||||
driver.get(live_server + self.url)
|
||||
dropdown = driver.find_element_by_css_selector('.select2-results')
|
||||
assert dropdown.is_displayed() is False
|
||||
elem = driver.find_element_by_css_selector('.select2-choice')
|
||||
elem.click()
|
||||
assert dropdown.is_displayed() is True
|
||||
with pytest.raises(NoSuchElementException):
|
||||
error = driver.find_element_by_xpath('//body[@JSError]')
|
||||
pytest.fail(error.get_attribute('JSError'))
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ from __future__ import absolute_import, unicode_literals
|
|||
from django import forms
|
||||
|
||||
from django_select2.fields import Select2MultipleWidget
|
||||
from django_select2.widgets import Select2Widget
|
||||
from django_select2.widgets import Select2Widget, HeavySelect2Widget
|
||||
|
||||
from tests.testapp import models
|
||||
from . import fields
|
||||
|
|
@ -60,3 +60,6 @@ class Select2WidgetForm(forms.Form):
|
|||
(3, 'Three'),
|
||||
(4, 'Four') ]
|
||||
number = forms.ChoiceField(widget=Select2Widget(), choices=NUMBER_CHOICES)
|
||||
|
||||
class HeavySelect2WidgetForm(forms.Form):
|
||||
heavy_number = forms.ChoiceField(widget=HeavySelect2Widget(data_view='heavy_data'))
|
||||
|
|
|
|||
|
|
@ -3,15 +3,19 @@ from __future__ import absolute_import, unicode_literals
|
|||
|
||||
from django.conf.urls import include, patterns, url
|
||||
|
||||
from .forms import ArtistForm, Select2WidgetForm
|
||||
from .views import TemplateFormView
|
||||
from .forms import ArtistForm, Select2WidgetForm, HeavySelect2WidgetForm
|
||||
from .views import TemplateFormView, heavy_data
|
||||
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'select2_widget',
|
||||
url(r'^select2_widget/$',
|
||||
TemplateFormView.as_view(form_class=Select2WidgetForm), name='select2_widget'),
|
||||
url(r'single_value_model_field',
|
||||
url(r'^heavy_select2_widget/$',
|
||||
TemplateFormView.as_view(form_class=HeavySelect2WidgetForm), name='heavy_select2_widget'),
|
||||
url(r'^single_value_model_field/$',
|
||||
TemplateFormView.as_view(form_class=ArtistForm), name='single_value_model_field'),
|
||||
url(r'^heavy_data/$',
|
||||
heavy_data, name='heavy_data'),
|
||||
|
||||
url(r'^select2/', include('django_select2.urls')),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -1,8 +1,16 @@
|
|||
# -*- coding: utf-8 -*-
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import json
|
||||
from django.views.generic import FormView
|
||||
from django.http import HttpResponse
|
||||
|
||||
|
||||
class TemplateFormView(FormView):
|
||||
template_name = 'form.html'
|
||||
|
||||
|
||||
def heavy_data(request):
|
||||
numbers = ['Zero', 'One', 'Two', 'Three', 'Four', 'Five']
|
||||
results = [{'id': index, 'text': value} for (index, value) in enumerate(numbers)]
|
||||
return HttpResponse(json.dumps({'err': 'nil', 'results': results}), content_type='application/json')
|
||||
|
|
|
|||
Loading…
Reference in a new issue