Commit b6417c79 by Alexander Kryklia

change parsing to support new format of xml

parent 4e78e589
...@@ -70,42 +70,79 @@ class GraphicalSliderToolModule(XModule): ...@@ -70,42 +70,79 @@ class GraphicalSliderToolModule(XModule):
""" """
#substitute plot #substitute plot
plot_div = '<div class="' + self.html_class + '_plot" id="' + self.html_id + '_plot"></div>' plot_div = '<div class="' + self.html_class + '_plot" id="' + self.html_id + '_plot"></div>'
html_string = html_string.replace('$plot$', plot_div) html_string = re.sub(r'\$[^\$]*plot[^\$]*\$',
plot_div, html_string, flags=re.IGNORECASE | re.UNICODE)
# substitute sliders if we have them
if json.loads(self.configuration_json)['root'].get('sliders'): # get variables
sliders = json.loads(self.configuration_json)['root']['sliders']['slider'] if json.loads(self.configuration_json)['root'].get('parameters'):
if type(sliders) == dict: variables = json.loads(self.configuration_json)['root']['parameters']['param']
sliders = [sliders] if type(variables) == dict:
vars = [x['@var'] for x in sliders] variables = [variables]
variables = [x['@var'] for x in variables]
slider_div = '<span class="{element_class}_slider" id="{element_id}_slider_{var}" \ else:
data-var="{var}" data-el_width="120"></span>' return html_string
for var in vars: #substitute sliders
html_string = re.sub(r'\$slider\s+' + var + r'\$', slider_div = '<div class="{element_class}_slider" \
slider_div.format(element_class=self.html_class, id="{element_id}_slider_{var}" \
element_id=self.html_id, data-var="{var}" data-el_width="{width}"\
var=var), </div>'
html_string, flags=re.IGNORECASE | re.UNICODE) for var in variables:
# find $slider var='var' ... $
# substitute numbers if we have them instances = re.findall(r'\$slider\s+(?=.*var\=[\"\']' + var + '[\"\'])' \
if json.loads(self.configuration_json)['root'].get('inputs'): + r'[^\$]*\$', html_string)
inputs = json.loads(self.configuration_json)['root']['inputs']['input'] if instances: # if presented
if type(inputs) == dict: slider_def = instances[0] # get $slider var='var' ... $ string
inputs = [inputs] # get width
vars = [x['@var'] for x in inputs] width = re.search(r'(?=.*width\=[\"\'](\d+)[\"\'])', slider_def)
if width:
input_div = '<span class="{element_class}_input" id="{element_id}_input_{var}" \ width = width.groups()[0]
data-var="{var}" data-el_width="60"></span>' else: # no width parameter
width = ''
for var in vars: # substitue parameters to slider div
html_string = re.sub(r'\$input\s+' + var + r'\$', replacement = slider_div.format(element_class=self.html_class,
input_div.format(element_class=self.html_class, element_id=self.html_id,
element_id=self.html_id, var=var,
var=var), width=width)
html_string, flags=re.IGNORECASE | re.UNICODE) # subsitute $slider var='var' ... $ in html_srting to proper
# import ipdb; ipdb.set_trace() # html div element
html_string = re.sub(r'\$slider\s+(?=.*var\=[\"\'](' + \
var + ')[\"\'])' + r'[^\$]*\$',
replacement, html_string, flags=re.IGNORECASE | re.UNICODE)
# substitute inputs if we have them
input_el = '<input class="{element_class}_input" \
id="{element_id}_input_{var}" \
data-var="{var}" data-el_width="{width}" \
data-el_readonly="{readonly}"> \
</input>'
input_index = 0 # make multiple inputs for same variable have
# different id
for var in variables: # multiple inputs test
input_index = +1
instances = re.findall(r'\$input\s+(?=.*var\=[\"\']' + var + '[\"\'])' \
+ r'[^\$]*\$', html_string)
# import ipdb; ipdb.set_trace()
for input_def in instances:
width = re.search(r'(?=.*width\=[\"\'](\d+)[\"\'])', input_def)
if width:
width = width.groups()[0]
else:
width = ''
readonly = re.search(r'(?=.*readonly\=[\"\'](\w+)[\"\'])', input_def)
if readonly:
readonly = readonly.groups()[0]
else:
readonly = ''
replacement = input_el.format(element_class=self.html_class,
element_id=self.html_id + '_' + str(input_index),
var=var, width=width, readonly=readonly)
html_string = re.sub(r'\$input\s+(?=.*var\=[\"\'](' + \
var + ')[\"\'])' + r'[^\$]*\$',
replacement, html_string, flags=re.IGNORECASE | re.UNICODE)
return html_string return html_string
def get_configuration(self): def get_configuration(self):
......
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