# -*- coding: utf-8 -*-
from django import VERSION
if VERSION < (1, 11):
from django.forms.widgets import RadioSelect, MultiWidget, RadioFieldRenderer
from django.utils.safestring import mark_safe
from django.template.loader import render_to_string
from radiogrid.compat import widget_render
class RadioChoiceFieldRenderer(RadioFieldRenderer):
outer_html = '{content}'
inner_html = '
{choice_value}{sub_widgets} | '
def __init__(self, name, value, attrs, choices):
attrs['class'] = ''
super(RadioChoiceFieldRenderer, self).__init__(name, value, attrs, choices)
def render(self):
rendered = super(RadioChoiceFieldRenderer, self).render()
return widget_render(rendered)
class RadioRadioSelect(RadioSelect):
renderer = RadioChoiceFieldRenderer
class RadioGridWidget(MultiWidget):
input_type = 'grid'
def __init__(self, rows, values, attrs=None):
self.rows = rows
self.values = values
choices = [(k, '') for k, _ in values]
widgets = [RadioRadioSelect(choices=choices, attrs=attrs) for _ in rows]
super(RadioGridWidget, self).__init__(widgets, attrs)
def decompress(self, value):
if value:
return value.split(',')
return [None for _ in self.rows]
def format_output(self, rendered_widgets):
widgets = {}
for i, v in enumerate(rendered_widgets):
widgets[i] = v
return mark_safe(render_to_string('radiogrid/radiogrid_widget.html', {
'rows': [(v[1], widgets[i]) for i, v in enumerate(self.rows)],
'values': self.values,
'attrs': self.attrs
}))
else:
from django.forms import RadioSelect, MultiWidget
from django.utils.safestring import mark_safe
from django.template.loader import render_to_string
class RadioRadioSelect(RadioSelect):
template_name = 'radiogrid/radiogrid_input.html'
class RadioGridWidget(MultiWidget):
input_type = 'grid'
template_name = 'radiogrid/radiogrid_widget.html'
def __init__(self, rows, values, attrs=None):
self.rows = rows
self.values = values
choices = [(k, '') for k, _ in values]
widgets = [RadioRadioSelect(choices=choices, attrs=attrs) for _ in rows]
super(RadioGridWidget, self).__init__(widgets, attrs)
def get_context(self, name, value, attrs):
context = super(RadioGridWidget, self).get_context(name, value, attrs)
widgets = context['widget']['subwidgets']
return {
'rows': [(v[1], widgets[i]) for i, v in enumerate(self.rows)],
'values': self.values,
'attrs': self.attrs
}
def decompress(self, value):
if value:
return value.split(',')
return [None for _ in self.rows]