import ast import json from itertools import chain from django import forms from django.utils.safestring import mark_safe from django.utils.encoding import force_unicode from django.utils.html import conditional_escape class KmUnitWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): if isinstance(value, (int, float)): unit = int(value*attrs['km2unit']) elif isinstance(value, basestring): units = [] values = [s for s in value.split(',') if s] for val in values: units.append('{0:.0f}'.format(float(val)*attrs['km2unit'])) unit = ','.join(units) disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if attrs['id'] in ('id_delays',): input_type = 'text' else: input_type = 'number' if 'line' in attrs: label += '_{0}_{1}'.format(attrs['line'].pk, name.split('|')[0]) html = '''
Km
Units

'''.format(input_type, disabled, label, name, value, unit) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class UnitKmWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): if isinstance(value, (int, float)): km = value/attrs['km2unit'] elif isinstance(value, basestring): kms = [] values = [s for s in value.split(',') if s] for val in values: kms.append('{0:.0f}'.format(float(val)/attrs['km2unit'])) km = ','.join(kms) disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if 'line' in attrs: label += '_{0}_{1}'.format(attrs['line'].pk, name.split('|')[0]) html = '''
Units
Km
'''.format(disabled, label, name, value, disabled, label, km) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class KmUnitHzWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): unit = float(value)*attrs['km2unit'] if unit%10==0: unit = int(unit) hz = 150000*float(value)**-1 disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if 'line' in attrs: label += '_{0}'.format(attrs['line'].pk) html = '''
Km
Units
Hz
'''.format(disabled, label, name, value, disabled, unit, hz) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class KmUnitDcWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): unit = int(float(value)*attrs['km2unit']) disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) label += '_{0}'.format(attrs['line'].pk) dc = float(json.loads(attrs['line'].params)['pulse_width'])*100/attrs['line'].rc_configuration.ipp html = '''
Km
Units
DC[%]
'''.format(disabled, label, name, value, disabled, unit, dc) script = ''''''.format(label=label) if disabled: return mark_safe(html) else: return mark_safe(html+script) class DefaultWidget(forms.widgets.TextInput): def render(self, label, value, attrs=None): disabled = 'disabled' if attrs.get('disabled', False) else '' itype = 'number' if label in ('number_of_samples', 'last_height') else 'text' name = attrs.get('name', label) if 'line' in attrs: label += '_{0}_{1}'.format(attrs['line'].pk, name.split('|')[0]) html = '
'.format(disabled, itype, label, name, value) if 'last_height' in label or 'number_of_samples' in label: script = ''''''.format(label=label) else: script = '' if disabled: return mark_safe(html) else: return mark_safe(html+script) return mark_safe(html) class HiddenWidget(forms.widgets.HiddenInput): def render(self, label, value, attrs=None): disabled = 'disabled' if attrs.get('disabled', False) else '' name = self.attrs.get('name', label) html = ''.format(disabled, label, name, value) return mark_safe(html) class CodesWidget(forms.widgets.Textarea): def render(self, label, value, attrs=None): disabled = 'disabled' if attrs.get('disabled', False) else '' name = attrs.get('name', label) if '[' in value: value = ast.literal_eval(value) if isinstance(value, list): codes = '\r\n'.join(value) else: codes = value html = ''.format(disabled, label, name, codes) return mark_safe(html) class HCheckboxSelectMultiple(forms.CheckboxSelectMultiple): def render(self, name, value, attrs=None, choices=()): if value is None: value = [] has_id = attrs and 'id' in attrs final_attrs = self.build_attrs(attrs, name=name) output = [u'