def make_numbers(): t = html.TABLE() tb = html.TBODY() t <= tb i = 1 val = "" for row in range(5): line = html.TR() tb <= line for column in range(10): b = html.BUTTON(str(i), id="x%s" % i, Class="nobutton") cell = html.TD(b) b.bind("click", on_number_button_pressed) line <= cell i += 1 return t
def setup_top_panel(): top_panel = document["about_panel"] table = html.TABLE() tableBody = html.TBODY() row = html.TR() # html style properties: # http://www.w3schools.com/jsref/dom_obj_style.asp global buttonHome buttonHome = html.BUTTON('Data Analysis') button_style_default(buttonHome) buttonHome.bind('click', click_home) buttonHome.bind('mouseout', mouse_out_home) buttonHome.bind('mouseover', mouse_over_home) global buttonAbout buttonAbout = html.BUTTON('About') button_style_default(buttonAbout) buttonAbout.bind('click', click_about) buttonAbout.bind('mouseout', mouse_out_about) buttonAbout.bind('mouseover', mouse_over_about) global buttonGuide buttonGuide = html.BUTTON('User Guide') button_style_default(buttonGuide) buttonGuide.bind('click', click_guide) buttonGuide.bind('mouseout', mouse_out_guide) buttonGuide.bind('mouseover', mouse_over_guide) global buttonContact buttonContact = html.BUTTON('Contact') button_style_default(buttonContact) buttonContact.bind('click', click_contact) buttonContact.bind('mouseout', mouse_out_contact) buttonContact.bind('mouseover', mouse_over_contact) row <= html.IMG(src="genexpresso.png", width="100") row <= buttonHome row <= buttonGuide row <= buttonAbout row <= buttonContact tableBody <= row table <= tableBody top_panel <= table
def make_grid(grid): # returns an HTML table with 9 rows and 9 columns global current_cell, gridDict t = html.TABLE(Class="grid") for i in range(grid_step): cg = html.COLGROUP() for j in range(grid_step): cg <= html.COL() t <= cg srow = -1 # for i,val in enumerate(grid): # row, column = divmod(i, boardSize) val = " " for row in range(board_size): for column in range(board_size): if row > srow: if row % grid_step == 0: tb = html.TBODY() t <= tb line = html.TR() tb <= line srow = row id = initCell(row + 1, column + 1) cell = html.DIV(val, id=id, Class="unused") cell.bind("mouseenter", on_mouse_enter) cell.bind("mouseleave", on_mouse_leave) cell.bind("click", on_grid_button_pressed) cell.style.contentEditable = True td = html.TD(id="td"+id) td <= cell if column % grid_step == 0: td.style.borderLeftWidth = "1px" if column == board_size - 1: td.style.borderRightWidth = "1px" line <= td current_cell = None print(t) return t
def process_inventory(event): global inventory try: inventory = JSON.parse(event.target.result) fusedict = {} mooglelist = [u['tmrId'] for u in inventory if u['id'] == moogleid] containerlist = [u['tmrId'] for u in inventory if u['id'] == containerid if u['tmr'] <1000] ownedunits = [u['id'][:-1] for u in inventory if u['id'][0] != '9' if u['tmr'] <1000 ] for tmrId in mooglelist: tmrName = weapondict[tmrId]['name'] tmrUnit = weapondict[tmrId]['tmrUnit'] unitName = unitdict[tmrUnit]['name'] if tmrUnit[:-1] in ownedunits: if tmrId in fusedict.keys(): fusedict[tmrId]['count'] += 1 else: fusedict.update({tmrId:{'tmr':tmrName, 'unit':unitName, 'count':1, 'unitid':tmrUnit}}) if tmrId in containerlist: if tmrId in fusedict.keys(): fusedict[tmrId]['count'] += 1 else: fusedict.update({tmrId:{'tmr':tmrName, 'unit':containername[code], 'count':1, 'unitid':containerid}}) fusesort = sorted(fusedict.items(), key = lambda item: item[1]['tmr']) document['results'].clear() table = html.TABLE(Class='table table-hover') tbody = html.TBODY() table <= tbody for l in fusesort: tbody <= html.TR([html.TD(l[1]['tmr']), html.TD('\tx' + str(l[1]['count']) + '\t'), html.TD(l[1]['unit']), html.TD(html.IMG(src='https://ffbeequip.com/img/units/unit_icon_' + l[1]['unitid'] + '.png' ) )] ) document['results'] <= table except: alert('Error: Invalid file!') if 'ion-md-checkmark-circle' in filestatus.classList: filestatus.classList.remove('ion-md-checkmark-circle') filestatus.classList.add('ion-md-close-circle') elif 'ion-md-hourglass' in filestatus.classList: filestatus.classList.remove('ion-md-hourglass') filestatus.classList.add('ion-md-close-circle')
def make_grid(w, grid_size): t = html.TABLE(Class="ws") tb = html.TBODY() t <= tb for row in range(grid_size): wordline = w.grid[row] line = html.TR() tb <= line for column in range(grid_size): val = wordline[column] id = initCell(row + 1, column + 1) cell = html.TD(val, id=id, Class="ws") line <= cell cell.bind("mouseenter", on_mouse_enter) cell.bind("mouseleave", on_mouse_leave) cell.bind("click", on_grid_button_pressed) cell.bind("dblclick", dblclick) cell.style.contentEditable = True return t
def setup_pvalue_list_table(dataPairs, output_file): aRight = document["aRight"] aRight.href = output_file pvaluesTable = document["pvalue_list_table"] for child in pvaluesTable: pvaluesTable.remove(child) pvaluesTableBody = html.TBODY() pvaluesTableHeaders = html.TR() pvaluesTableBody.style.border = "thin solid lightgray" # to clear list, do this: del left_table_rows [:] pvaluesTableRows = [] pvaluesLink = html.A('\u2191\u2193', href="#", Class="sort_link") pvaluesLink.bind( 'click', lambda ev: sort_by_col(ev, pvaluesTableHeaders, pvaluesTableRows, pvaluesTableBody, False)) pvaluesLinkNum = html.A('\u2191\u2193', href="#", Class="sort_link") pvaluesLinkNum.bind( 'click', lambda ev: sort_by_col( ev, pvaluesTableHeaders, pvaluesTableRows, pvaluesTableBody, True)) h1 = html.TH('Dataset ID' + pvaluesLink) h2 = html.TH('Sample1' + pvaluesLink.clone()) h3 = html.TH('Size1' + pvaluesLinkNum) h4 = html.TH('Sample2' + pvaluesLink.clone()) h5 = html.TH('Size2' + pvaluesLinkNum.clone()) h6 = html.TH('Gene' + pvaluesLink.clone()) h7 = html.TH('Probe' + pvaluesLink.clone()) h8 = html.TH('P-value x1E6' + pvaluesLinkNum.clone()) h9 = html.TH('T-stat' + pvaluesLinkNum.clone()) pvaluesHeadersList = [h1, h2, h3, h4, h5, h6, h7, h8, h9] for h in pvaluesHeadersList: h.style.background = "#E0E0E0" h.style.font = "16px verdana" pvaluesTableHeaders <= pvaluesHeadersList for i in range(len(dataPairs)): pair = dataPairs[i] td1 = html.TD(pair["dataset_id"]) td2 = html.TD(pair["sample_1"]) td3 = html.TD(pair["sample_1_size"]) td4 = html.TD(pair["sample_2"]) td5 = html.TD(pair["sample_2_size"]) td6 = html.TD(pair["gene"]) td7 = html.TD(pair["probe"]) td8 = html.TD(str(round(float(pair["pvalue"]), 2))) td9 = html.TD(str(round(float(pair["tstat"]), 2))) tdList = [td1, td2, td3, td4, td5, td6, td7, td8, td9] if (i % 2 == 1): for td in tdList: td.style.background = "#F7F7F7" row = html.TR() row <= tdList pvaluesTableRows.append(row) pvaluesTableBody <= pvaluesTableHeaders pvaluesTableBody <= pvaluesTableRows pvaluesTable <= pvaluesTableBody
def setup_dataset_list_table(dataPairs, output_file): aLeft = document["aLeft"] aLeft.href = output_file table = document["dataset_list_table"] for child in table: table.remove(child) tableBody = html.TBODY() headers = html.TR() tableBody.style.border = "thin solid lightgray" # to clear list, do this: del left_table_rows [:] dataset_list_table_rows = [] link = html.A('\u2191\u2193', href="#", Class="sort_link") link.bind( 'click', lambda ev: sort_by_col(ev, headers, dataset_list_table_rows, tableBody, False)) link_num = html.A('\u2191\u2193', href="#", Class="sort_link") link_num.bind( 'click', lambda ev: sort_by_col(ev, headers, dataset_list_table_rows, tableBody, True)) hD = html.TH('Dataset ID' + link) hP = html.TH('PubMed ID' + link.clone()) hList = [hD, hP] for h in hList: h.style.background = "#E0E0E0" h.style.font = "16px verdana" h = None headers <= hList for i in range(len(dataPairs)): pair = dataPairs[i] datasetId = pair['dataset_id'] pubmedId = pair['pubmed_id'] row = html.TR() button = html.BUTTON(datasetId, gds=datasetId) button.style.font = "16px verdana" button.value = datasetId button.bind('mouseout', mouse_out_button) button.bind('mouseover', mouse_over_button) button.bind('click', click_dataset_id_button) button.style.border = "thin solid gray" button.style.background = "#EEEEEE" button.style.color = "#505050" td1 = html.TD(button) td1.style.textAlign = "center" button.style.width = "100px" td2 = html.TD( html.A(pubmedId, href="http://www.ncbi.nlm.nih.gov/pubmed/?term=" + pubmedId, target="_blank")) td2.style.textAlign = "center" tdList = [td1, td2] if (i % 2 == 1): for td in tdList: td.style.background = "#F7F7F7" row <= tdList dataset_list_table_rows.append(row) tableBody <= headers tableBody <= dataset_list_table_rows table <= tableBody
def draw_home2(): panel = document["main_panel"] table21 = html.TABLE() table21.style.fontSize = "large" table21.style.font = "16px verdana" tableBody21 = html.TBODY() #table22 = html.TABLE() #tableBody22 = html.TBODY() row21_1 = html.TR() #row21_2 = html.TR() table21.style.background = "#F7F7F7" table21.style.padding = "10px 25px 10px 10px" #table22.style.background = "#F7F7F7" #table22.style.padding = "10px 15px 10px 10px" label21 = html.LABEL("Search gene expressions by:") label21.style.verticalAlign = "center" label21.style.marginRight = "10px" td_1 = html.TD() td_1 <= label21 row21_1 <= td_1 op1 = html.OPTION("probe name") op2 = html.OPTION("gene name") sel2 = html.SELECT([op2, op1], id="select_probe_or_gene", font_size=16) sel2.style.fontSize = "large" sel2.style.verticalAlign = "center" sel2.style.marginRight = "20px" td_2 = html.TD() td_2 <= sel2 row21_1 <= td_2 inp21 = html.INPUT(id="input_probe_or_gene") inp21.style.verticalAlign = "center" inp21.style.marginRight = "0px" td_3 = html.TD() td_3 <= inp21 row21_1 <= td_3 global bSearch2 bSearch2 = html.BUTTON('Search') button_style_default(bSearch2) bSearch2.bind('click', click_search2) bSearch2.bind('mouseout', mouse_out_search2) bSearch2.bind('mouseover', mouse_over_search2) bSearch2.style.verticalAlign = "center" td_4 = html.TD() td_4 <= bSearch2 row21_1 <= td_4 #label22 = html.LABEL("Search gene expressions by gene name:") #label22.style.verticalAlign = "bottom" #label22.style.marginRight = "10px" #row21_2 <= label22 #inp22 = html.INPUT() #inp22.style.verticalAlign = "bottom" #inp22.style.marginRight = "0px" #row21_2 <= inp22 #global bSearch3 #bSearch3 = html.BUTTON('Search') #button_style_default(bSearch3) #bSearch3.bind('click', click_search3) #bSearch3.bind('mouseout', mouse_out_search3) #bSearch3.bind('mouseover', mouse_over_search3) #bSearch3.style.verticalAlign = "top" #row21_2 <= bSearch3 tableBody21 <= row21_1 #tableBody22 <= row21_2 table21 <= tableBody21 #table22 <= tableBody22 panel <= table21 panel <= html.BR() #panel <= table22 ############################################# table23 = html.TABLE() table23.style.font = "16px verdana" table23.style.background = "#F7F7F7" table23.style.padding = "20px 25px 20px 10px" tableBody23 = html.TBODY() row23_1 = html.TR() row23_2 = html.TR() row23_3 = html.TR() label23_1 = html.LABEL("Min sample size:") #label23_1.style.verticalAlign = "bottom" label23_1.style.marginRight = "10px" row23_1 <= label23_1 op21 = html.OPTION("5") op22 = html.OPTION("10") op23 = html.OPTION("15") op24 = html.OPTION("20") op25 = html.OPTION("25") sel23_1 = html.SELECT([op21, op22, op23, op24, op25], id="selector_min_sample_size", font_size=16) sel23_1.style.fontSize = "large" #sel23_1.style.verticalAlign = "bottom" sel23_1.style.marginRight = "50px" row23_1 <= sel23_1 #inp23_1 = html.INPUT() #inp23_1.style.verticalAlign = "bottom" #inp23_1.style.marginRight = "0px" #row23_1 <= inp23_1 label23_2 = html.LABEL("Max p-value:") label23_2.style.verticalAlign = "bottom" label23_2.style.marginRight = "10px" row23_1 <= label23_2 op31 = html.OPTION("1E-6") op32 = html.OPTION("1E-5") op33 = html.OPTION("1E-4") op34 = html.OPTION("1E-3") op35 = html.OPTION("0.005") op36 = html.OPTION("0.01") op37 = html.OPTION("0.02") op38 = html.OPTION("0.05") sel23_2 = html.SELECT([op38, op37, op36, op35, op34, op33, op32, op31], id="selector_max_pvalue", font_size=16) sel23_2.style.fontSize = "large" #sel23_1.style.verticalAlign = "bottom" sel23_2.style.marginRight = "50px" row23_1 <= sel23_2 #inp23_2 = html.INPUT() #inp23_2.style.verticalAlign = "bottom" #inp23_2.style.marginRight = "0px" #row23_1 <= inp23_2 label23_3 = html.LABEL("Max # results:") label23_3.style.verticalAlign = "bottom" label23_3.style.marginRight = "10px" row23_1 <= label23_3 op44 = html.OPTION("1000") op45 = html.OPTION("500") op46 = html.OPTION("300") op47 = html.OPTION("200") op48 = html.OPTION("100") sel23_3 = html.SELECT([op48, op47, op46, op45, op44], id="selector_max_num_results", font_size=16) sel23_3.style.fontSize = "large" #sel23_3.style.verticalAlign = "bottom" sel23_3.style.marginRight = "0px" row23_1 <= sel23_3 #inp23_3 = html.INPUT() #inp23_3.style.verticalAlign = "bottom" #inp23_3.style.marginRight = "0px" #row23_1 <= inp23_3 tableBody23 <= row23_1 #tableBody23 <= row23_2 #tableBody23 <= row23_3 table23 <= tableBody23 panel <= table23 panel <= html.BR()
def draw_home1(): panel = document["main_panel"] table0 = html.TABLE() tableBody0 = html.TBODY() row0 = html.TR() b21 = html.P(id="status_indicator") #b21.text = "READY" #b21.style.verticalAlign = "bottom" #b21.style.marginRight = "40px" #g21.style.background = "#3366FF" #g21.style.color = "#FFEE00" #b21.style.background = "#55FF55" #b21.style.width = "120px" #b21.style.textAlign = "center" #b21.style.padding = "10px 0px 10px 0px" #b21.style.font = "16px verdana" #b21.style.border = "thin solid green" td01 = html.TD() td01 <= b21 row0 <= td01 head = html.LABEL("GeneXpresso - analyze DNA microarray datasets") head.style.font = "30px verdana" head.style.textAlign = "center" td02 = html.TD() td02 <= head row0 <= td02 tableBody0 <= row0 table0 <= tableBody0 panel <= table0 panel <= html.BR() status_indicator_ready(0) table1 = html.TABLE() table1.style.border = "none" table1.style.fontSize = "large" table1.style.background = "#F7F7F7" #table1.style.marginLeft = "50px" #b.style.marginTop = "30px" # table1.style.padding = "10px 20px 10px 10px" table1.style.font = "16px verdana" tableBody1 = html.TBODY() g1 = html.TR() g11 = html.LABEL("Search datasets by keyword:") g11.style.verticalAlign = "bottom" g11.style.marginRight = "10px" td_1 = html.TD() td_1 <= g11 g1 <= td_1 g12 = html.INPUT(id="g12") g12.style.verticalAlign = "bottom" g12.style.marginRight = "20px" td_2 = html.TD() td_2 <= g12 g1 <= td_2 g13 = html.LABEL("Search in:") g13.style.verticalAlign = "bottom" g13.style.marginRight = "10px" td_3 = html.TD() td_3 <= g13 g1 <= td_3 op1 = html.OPTION("title") op2 = html.OPTION("description") op3 = html.OPTION("dataset ID") op4 = html.OPTION("pubmed ID") op5 = html.OPTION("gene") op6 = html.OPTION("probe") sel1 = html.SELECT([op1, op2, op3, op4, op5, op6], id="selector1", font_size=12) sel1.style.fontSize = "large" sel1.style.verticalAlign = "bottom" td_4 = html.TD() td_4 <= sel1 g1 <= td_4 global bSearch1 bSearch1 = html.BUTTON('Search') button_style_default(bSearch1) #bSearch1.bind('click', click_search1) bSearch1.bind('mouseout', mouse_out_search1) bSearch1.bind('mouseover', mouse_over_search1) bSearch1.style.verticalAlign = "top" bSearch1.bind('click', datasets_by_keyword_search) td_5 = html.TD() td_5 <= bSearch1 g1 <= td_5 tableBody1 <= g1 table1 <= tableBody1 panel <= table1 panel <= html.BR()
def draw_home_title_description(): panel = document["main_panel"] table = html.TABLE() table.style.fontSize = "large" table.style.font = "16px verdana" tableBody = html.TBODY() row = html.TR() tableBody.style.verticalAlign = "center" row.style.verticalAlign = "center" table.style.background = "#F7F7F7" table.style.padding = "10px 10px 10px 10px" label = html.LABEL("Details for dataset:", id="label_details_for_dataset") label.style.verticalAlign = "center" label.style.marginRight = "10px" td1 = html.TD() td1 <= label td1.style.width = "200px" row <= td1 div2 = html.DIV() div2.style.overflow = "scroll" div2.height = 100 div2.width = 250 title_text_area = html.TEXTAREA("Title:", id="dataset_title") title_text_area.readOnly = True #title_text_area.disabled = True title_text_area.style.font = "14px verdana" title_text_area.rows = 10 title_text_area.cols = 26 div2 <= title_text_area td2 = html.TD() td2 <= div2 row <= td2 div3 = html.DIV() div3.style.overflow = "scroll" div3.height = 100 div3.width = 450 description_text_area = html.TEXTAREA("Description:", id="dataset_description") description_text_area.readOnly = True #description_text_area.disabled = True description_text_area.style.font = "14px verdana" description_text_area.rows = 10 description_text_area.cols = 51 div3 <= description_text_area td3 = html.TD() td3 <= div3 row <= td3 tableBody <= row table <= tableBody panel <= table panel <= html.BR()
def draw_home_samples(sample1, sample2): panel = document["main_panel"] table = html.TABLE() table.style.fontSize = "large" table.style.font = "16px verdana" tableBody = html.TBODY() row = html.TR() tableBody.style.verticalAlign = "center" row.style.verticalAlign = "center" table.style.background = "#F7F7F7" table.style.padding = "10px 25px 10px 10px" label = html.LABEL("Select samples to search:") label.style.verticalAlign = "center" label.style.marginRight = "10px" td1 = html.TD() td1 <= label row <= td1 #op11 = html.OPTION(sample1) #op12 = html.OPTION(sample2) #op21 = html.OPTION(sample1) #op22 = html.OPTION(sample2) sel1 = html.SELECT([], id="selector_samples_1", font_size=16) sel1.style.fontSize = "large" sel1.style.verticalAlign = "center" sel1.style.marginRight = "20px" sel1.style.width = "300px" td2 = html.TD() td2 <= sel1 row <= td2 sel2 = html.SELECT([], id="selector_samples_2", font_size=16) sel2.style.fontSize = "large" sel2.style.verticalAlign = "center" sel2.style.marginRight = "0px" sel2.style.width = "300px" td3 = html.TD() td3 <= sel2 row <= td3 b = html.BUTTON('Search', id="search_subsets") button_style_default(b) b.bind('click', click_search_subsets) b.bind('mouseout', mouse_out_search_subsets) b.bind('mouseover', mouse_over_search_subsets) b.style.verticalAlign = "center" b.style.marginTop = "0px" b.style.marginBottom = "0px" td4 = html.TD() td4.style.verticalAlign = "center" td4 <= b row <= td4 tableBody <= row table <= tableBody panel <= table panel <= html.BR()
def draw_home3(): dataset_list_table = html.TABLE(cellspacing=0, border=1, bordercolor="lightgray", id="dataset_list_table") tableBody = html.TBODY() headers = html.TR() tableBody.style.border = "thin solid lightgray" # to clear list, do this: del left_table_rows [:] dataset_list_table_rows = [] link = html.A('\u2191\u2193', href="#", Class="sort_link") link.bind( 'click', lambda ev: sort_by_col(ev, headers, dataset_list_table_rows, tableBody, False)) link_num = html.A('\u2191\u2193', href="#", Class="sort_link") link_num.bind( 'click', lambda ev: sort_by_col(ev, headers, dataset_list_table_rows, tableBody, True)) hD = html.TH('Dataset ID' + link) hP = html.TH('PubMed ID' + link.clone()) hList = [hD, hP] for h in hList: h.style.background = "#E0E0E0" h.style.font = "16px verdana" h = None headers <= hList for i in range(0): row = html.TR() button = html.BUTTON("GDS123" + str(i), row=str(i), gds="GDS123") button.style.font = "16px verdana" #button.style.textAlign = "center" button.value = "GDS123" + str(i) button.bind('mouseout', mouse_out_button) button.bind('mouseover', mouse_over_button) button.bind('click', click_dataset_id_button) button.style.border = "thin solid gray" button.style.background = "#EEEEEE" button.style.color = "#505050" td1 = html.TD(button) td1.style.textAlign = "center" td2 = html.TD( html.A("7896544" + str(10 - i), href="http://www.ncbi.nlm.nih.gov/pubmed/?term=17262812", target="_blank")) td2.style.textAlign = "center" tdList = [td1, td2] if (i % 2 == 1): for td in tdList: td.style.background = "#F7F7F7" row <= tdList dataset_list_table_rows.append(row) tableBody <= headers tableBody <= dataset_list_table_rows dataset_list_table <= tableBody dataset_list_table.style.font = "16px verdana" dataset_list_table.style.color = "#303030" panel = document["main_panel"] #panel <= dataset_list_table ################################### pvaluesTable = html.TABLE(cellspacing=0, border=1, bordercolor="lightgray", id="pvalue_list_table") pvaluesTable.width = 985 pvaluesTableBody = html.TBODY() pvaluesTableHeaders = html.TR() pvaluesTableBody.style.border = "thin solid lightgray" # to clear list, do this: del left_table_rows [:] pvaluesTableRows = [] pvaluesLink = html.A('\u2191\u2193', href="#", Class="sort_link") pvaluesLink.bind( 'click', lambda ev: sort_by_col(ev, pvaluesTableHeaders, pvaluesTableRows, pvaluesTableBody, False)) pvaluesLinkNum = html.A('\u2191\u2193', href="#", Class="sort_link") pvaluesLinkNum.bind( 'click', lambda ev: sort_by_col( ev, pvaluesTableHeaders, pvaluesTableRows, pvaluesTableBody, True)) h1 = html.TH('Dataset ID' + pvaluesLink) h2 = html.TH('Sample1' + pvaluesLink.clone()) h3 = html.TH('Size1' + pvaluesLinkNum) h4 = html.TH('Sample2' + pvaluesLink.clone()) h5 = html.TH('Size2' + pvaluesLinkNum.clone()) h6 = html.TH('Gene' + pvaluesLink.clone()) h7 = html.TH('Probe' + pvaluesLink.clone()) h8 = html.TH('P-value x1E6' + pvaluesLinkNum.clone()) h9 = html.TH('T-stat' + pvaluesLinkNum.clone()) pvaluesHeadersList = [h1, h2, h3, h4, h5, h6, h7, h8, h9] for h in pvaluesHeadersList: h.style.background = "#E0E0E0" h.style.font = "16px verdana" pvaluesTableHeaders <= pvaluesHeadersList pvaluesTableBody <= pvaluesTableHeaders pvaluesTableBody <= pvaluesTableRows pvaluesTable <= pvaluesTableBody pvaluesTable.style.font = "16px verdana" pvaluesTable.style.color = "#303030" div1 = html.DIV() div1.style.overflow = "scroll" div1.height = 300 div1.width = 250 div1 <= dataset_list_table div2 = html.DIV() div2.style.overflow = "scroll" div2.height = 300 div2.width = 1000 div2 <= pvaluesTable doubleTable = html.TABLE() doubleTableBody = html.TBODY() downloadFilesRow = html.TR() doubleTableRow = html.TR() tdLeft = html.TD() tdLeft <= div1 tdLeft.style.padding = "0px 20px 0px 0px" tdRight = html.TD() tdRight <= div2 tdDownloadLeft = html.TD() tdDownloadRight = html.TD() aLeft = html.A('<img src="download_icon.jpg" height=20 width=20> Download', id='aLeft') aLeft.style.font = "16px verdana" aLeft.style.color = "#303030" tdDownloadLeft <= aLeft aRight = html.A( '<img src="download_icon.jpg" height=20 width=20> Download', id='aRight') aRight.style.font = "16px verdana" aRight.style.color = "#303030" tdDownloadRight <= aRight downloadFilesRow <= [tdDownloadLeft, tdDownloadRight] doubleTableRow <= [tdLeft, tdRight] doubleTableBody <= downloadFilesRow doubleTableBody <= doubleTableRow doubleTable <= doubleTableBody panel <= doubleTable