diff --git a/main.py b/main.py index 6028185cd62e35e30d2da4104abef65a9f07b6ea..defbe3eafe70db305d12900dd90653cd834132f4 100644 --- a/main.py +++ b/main.py @@ -21,7 +21,7 @@ import bokehCssPTB from urllib.parse import quote from dsiUnits import dsiUnit from bokeh.plotting import curdoc, figure -from bokeh.layouts import column, row +from bokeh.layouts import column, row, GridBox from bokeh.models import FileInput, Div, CustomJS, Button, TabPanel, Tabs, TextInput, Label, Arrow, NormalHead, CheckboxGroup from bokeh.palettes import Category10 from bokeh.events import ValueSubmit @@ -267,13 +267,14 @@ class page(): tab1 = TabPanel(child=tab1_layout, title="DSI Parser and Comparator") # Tab 2: XML Unit Validator + self.title = Div(text="<h4>Please upload DCC or other XML containing D-SI Unit Strings here</h4>") self.upload_widget = FileInput(accept=".xml") self.upload_widget.on_change('value', self.process_xml) self.valid_units_message = Div(text="Upload an XML file to validate units", css_classes=["msg-neutral"]) - self.invalid_units_message = Div(text="", css_classes=["msg-neutral"]) - self.invalid_units_column = column() + self.invalid_units_message = Div(text="") + self.invalid_units_list = GridBox() - tab2_layout = column(self.upload_widget, self.valid_units_message, self.invalid_units_message, self.invalid_units_column) + tab2_layout = column(self.title, self.upload_widget, self.valid_units_message, self.invalid_units_message, self.invalid_units_list) tab2 = TabPanel(child=tab2_layout, title="XML Unit Validator") tabs = Tabs(tabs=[tab1, tab2]) @@ -299,19 +300,20 @@ class page(): self.invalid_units_message.css_classes = ["msg-negative"] else: self.invalid_units_message.text = "" - self.invalid_units_message.css_classes = ["msg-neutral"] - - # Update invalid units column - self.invalid_units_column.children = [] - for line_num, details in invalid_units.items(): - warnings_div = column([Div(text=warning, css_classes=["msg-warning"]) for warning in details.get("warnings", [])]) - unit_div = row([ - Div(text=str(line_num), css_classes=["msg-neutral"]), - Div(text=f"{dsiUnit(details['unit']).toLatex()}"), - Div(text=details["unit"], css_classes=["msg-raw"]), - warnings_div - ]) - self.invalid_units_column.children.append(unit_div) + self.invalid_units_message.css_classes = [""] + + # Update invalid units content + self.invalid_units_list.children = [] + for row_num, (line_num, details) in enumerate(invalid_units.items()): + warnings_div = column([Div(text=warning, css_classes=["msg-negative"]) for warning in details.get("warnings", [])]) + unit_row = [ + (Div(text=str(line_num), height_policy="min", css_classes=["msg-neutral"]), 2*row_num, 0), + (Div(text=details["unit"], css_classes=["msg-raw"]), 2*row_num, 1), + (Div(text=f"{dsiUnit(details['unit']).toLatex()}", width=150), 2*row_num, 2), + (warnings_div, 2*row_num, 3), + (Div(text="", height=20), 2*row_num+1, 0, 1, 4) + ] + self.invalid_units_list.children += unit_row def compare(self): self.dsiInput1.parseInput()