widgets.py
163 lines
| 6.5 KiB
| text/x-python
|
PythonLexer
|
r128 | |||
import ast | ||||
import json | ||||
from itertools import chain | ||||
from django import forms | ||||
from django.utils.safestring import mark_safe | ||||
from django.utils.html import conditional_escape | ||||
|
r172 | |||
|
r128 | |||
class SpectralWidget(forms.widgets.TextInput): | ||||
|
r172 | |||
|
r128 | def render(self, label, value, attrs=None): | ||
|
r172 | |||
|
r128 | disabled = 'disabled' if attrs.get('disabled', False) else '' | ||
name = attrs.get('name', label) | ||||
if '[' in value: | ||||
|
r130 | if value[len(value)-1] == ",": | ||
value = ast.literal_eval(value) | ||||
else: | ||||
value = value + "," | ||||
value = ast.literal_eval(value) | ||||
|
r172 | |||
|
r128 | codes = value | ||
if not isinstance(value, list): | ||||
|
r130 | text='' | ||
#lista = [] | ||||
#if len(value) > 1: | ||||
for val in value: | ||||
text = text+str(val)+',' | ||||
#lista.append(val) | ||||
|
r128 | codes=text | ||
else: | ||||
|
r130 | codes='' | ||
|
r172 | |||
|
r128 | html = '''<textarea rows="5" {0} class="form-control" id="id_{1}" name="{2}" style="white-space:nowrap; overflow:scroll;">{3}</textarea> | ||
<input type="text" class="col-md-1 col-no-padding" id="num1" value=0> | ||||
<input type="text" class="col-md-1 col-no-padding" id="num2" value=0> | ||||
<button type="button" class="button" id="add_spectral_button"> Add </button> | ||||
<button type="button" class="button" id="delete_spectral_button"> Delete </button> | ||||
|
r130 | <button type="button" class="button pull-right" id="cross_spectral_button"> Cross </button> | ||
<button type="button" class="button pull-right" id="self_spectral_button"> Self </button> | ||||
<button type="button" class="button pull-right" id="all_spectral_button"> All </button> | ||||
|
r128 | '''.format(disabled, label, name, codes) | ||
|
r172 | |||
|
r128 | script = ''' | ||
|
r172 | <script type="text/javascript"> | ||
|
r128 | $(document).ready(function () {{ | ||
|
r172 | |||
|
r128 | var spectral_number1 = $("#num1").val(); | ||
var spectral_number2 = $("#num2").val(); | ||||
|
r172 | |||
|
r128 | $("#all_spectral_button").click(function(){{ | ||
|
r130 | var sequence1 = selfSpectral() | ||
var sequence2 = crossSpectral() | ||||
$("#id_spectral").val(sequence1+sequence2) | ||||
updateSpectralNumber() | ||||
|
r128 | }}); | ||
|
r172 | |||
|
r128 | $("#add_spectral_button").click(function(){{ | ||
var spectral_comb = $("#id_spectral").val(); | ||||
var spectral_number1 = $("#num1").val(); | ||||
var spectral_number2 = $("#num2").val(); | ||||
var str = spectral_number1+", "+spectral_number2; | ||||
//not to duplicate | ||||
var n = spectral_comb.search(str); | ||||
if (n==-1){ | ||||
|
r172 | $("#id_spectral").val(spectral_comb+"["+$("#num1").val()+", "+$("#num2").val()+"],") | ||
|
r130 | } | ||
|
r172 | updateSpectralNumber() | ||
|
r130 | }}); | ||
|
r172 | |||
|
r130 | $("#self_spectral_button").click(function(){{ | ||
var sequence = selfSpectral() | ||||
$("#id_spectral").val(sequence) | ||||
|
r172 | |||
|
r130 | updateSpectralNumber() | ||
|
r128 | }}); | ||
|
r172 | |||
|
r130 | $("#cross_spectral_button").click(function(){{ | ||
var sequence = crossSpectral() | ||||
$("#id_spectral").val(sequence) | ||||
|
r172 | |||
|
r130 | updateSpectralNumber() | ||
}}); | ||||
|
r172 | |||
|
r130 | function selfSpectral() { | ||
var channels = $("#id_channels").val(); | ||||
var n = (channels.length)-1; | ||||
var num = parseInt(channels[n]); | ||||
sequence = "" | ||||
for (i = 0; i < num; i++) { | ||||
sequence = sequence + "[" + i.toString() + ", " + i.toString() + "]," | ||||
} | ||||
return sequence | ||||
} | ||||
|
r172 | |||
|
r130 | function crossSpectral() { | ||
var channels = $("#id_channels").val(); | ||||
var n = (channels.length)-1; | ||||
var num = parseInt(channels[n]); | ||||
sequence = "" | ||||
for (i = 0; i < num; i++) { | ||||
for (j = i+1; j < num; j++) { | ||||
sequence = sequence + "[" + i.toString() + ", " + j.toString() + "]," | ||||
} | ||||
} | ||||
return sequence | ||||
} | ||||
|
r172 | |||
|
r130 | function updateSpectralNumber(){ | ||
var spectral_comb = $("#id_spectral").val(); | ||||
var num = spectral_comb.length; | ||||
var cont = 0 | ||||
for (i = 0; i < num; i++) { | ||||
if (spectral_comb[i] == "]"){ | ||||
cont = cont + 1 | ||||
} | ||||
} | ||||
$("#id_spectral_number").val(cont) | ||||
} | ||||
|
r172 | |||
|
r128 | $("#delete_spectral_button").click(function(){{ | ||
var spectral_comb = $("#id_spectral").val(); | ||||
var spectral_number1 = $("#num1").val(); | ||||
var spectral_number2 = $("#num2").val(); | ||||
var str = spectral_number1+", "+spectral_number2; | ||||
var n = spectral_comb.search(str); | ||||
if (n==-1){ | ||||
|
r172 | |||
|
r128 | } | ||
else { | ||||
n= spectral_comb.length; | ||||
if (n<8){ | ||||
var tuple = "["+$("#num1").val()+", "+$("#num2").val()+"]," | ||||
var txt = spectral_comb.replace(tuple,''); | ||||
} | ||||
else { | ||||
var tuple = ",["+$("#num1").val()+", "+$("#num2").val()+"]" | ||||
var txt = spectral_comb.replace(tuple,''); | ||||
} | ||||
$("#id_spectral").val(txt) | ||||
|
r172 | |||
|
r128 | var tuple = "["+$("#num1").val()+", "+$("#num2").val()+"]," | ||
var txt = spectral_comb.replace(tuple,''); | ||||
$("#id_spectral").val(txt) | ||||
|
r130 | } | ||
|
r172 | updateSpectralNumber() | ||
|
r128 | }}); | ||
|
r172 | |||
|
r128 | }}); | ||
</script> | ||||
''' | ||||
|
r172 | |||
return mark_safe(html+script) | ||||