def draw_contact_bigButton(): panel = document["main_panel"] p = html.P("Send an email to GeneXpresso:") p.style.textAlign = "center" p.style.fontSize = "large" p.style.font = "20px verdana" p.style.textAlign = "center" panel <= html.BR() panel <= html.BR() panel <= html.BR() panel <= html.BR() #panel <= p form = html.FORM() form.style.fontSize = "large" form.style.font = "20px verdana" form.action = "mailto:[email protected]" form.method = "POST" form.style.textAlign = "center" global buttonSendEmail buttonSendEmail = html.INPUT() buttonSendEmail.type = "submit" buttonSendEmail.value = "Send" button_style_default(buttonSendEmail) buttonSendEmail.bind('mouseout', mouse_out_send_email) buttonSendEmail.bind('mouseover', mouse_over_send_email) form <= buttonSendEmail panel <= form
html.TH('最大CP') + html.TH('屬性')) lines = [ [1, '妙蛙種子', '1115', '草、毒'], [2, '妙蛙草', '1699', '草、毒'], [3, '妙蛙花', '2720', '草、毒'], [4, '小火龍', '980', '火'], ] for line in lines: table <= html.TR( html.TD(line[0]) + html.TD(line[1]) + html.TD(line[2]) + html.TD(line[3])) container <= table # 寶貝圖鑑輸入表 container <= html.DIV(html.H2('寶貝圖鑑輸入表'), Class="w3-container w3-blue w3-margin-top") form = html.FORM(Class="w3-container w3-border") form <= html.DIV( html.LABEL('中文名') + html.INPUT(type="text", name="firstname", value="", Class="w3-input")) form <= html.DIV( html.LABEL('最大CP') + html.INPUT(type="number", name="最大CP", value="", Class="w3-input")) label3 = html.LABEL('屬性') input3 = html.SELECT(Class="w3-select") for option in ['...', '草、毒', '火', '水']: input3 <= html.OPTION(option) form <= html.DIV(label3 + input3) form <= html.P(html.BUTTON("上傳", Class="w3-button w3-red")) container <= form
def submit_model(evt): """ run model """ global results_counter widgets = [ 'population', 'family_income_target_final', 'TSI', 'unemployment_rate', 'workforce_partition_SB', 'workforce_partition_NP', 'workforce_partition_PB', 'earmark_SB_subsidy', 'earmark_PB_subsidy', 'earmark_NP_donation', 'earmark_nurture', 'earmark_SB_subsidy_TS', 'earmark_PB_subsidy_TS', 'earmark_NP_donation_TS', 'earmark_nurture_TS', 'person_member_spending_to_member_SB_pct', 'person_member_spending_to_member_SB_TS', 'person_member_spending_to_member_NP_pct', 'person_member_spending_to_member_NP_TS', 'person_member_spending_to_member_PB_pct', 'person_member_spending_to_member_PB_TS', 'person_member_spending_to_nonmember_SB_pct', 'person_member_spending_to_nonmember_NP_pct', 'person_nonmember_spending_to_member_SB_pct', 'person_nonmember_spending_to_member_NP_pct', 'person_nonmember_spending_to_member_PB_pct', 'person_nonmember_spending_to_nonmember_SB_pct', 'person_nonmember_spending_to_nonmember_NP_pct', 'flexible_earmark_SB_subsidy', 'flexible_earmark_PB_subsidy', 'flexible_earmark_NP_donation', 'flexible_earmark_nurture', 'flexible_earmark_SB_subsidy_TS', 'flexible_earmark_PB_subsidy_TS', 'flexible_earmark_NP_donation_TS', 'flexible_earmark_nurture_TS', 'flexible_person_member_spending_to_member_SB_pct', 'flexible_person_member_spending_to_member_SB_TS', 'flexible_person_member_spending_to_member_NP_pct', 'flexible_person_member_spending_to_member_NP_TS', 'flexible_person_member_spending_to_member_PB_pct', 'flexible_person_member_spending_to_member_PB_TS', 'flexible_person_member_spending_to_nonmember_SB_pct', 'flexible_person_member_spending_to_nonmember_NP_pct', 'flexible_person_nonmember_spending_to_member_SB_pct', 'flexible_person_nonmember_spending_to_member_NP_pct', 'flexible_person_nonmember_spending_to_member_PB_pct', 'flexible_person_nonmember_spending_to_nonmember_SB_pct', 'flexible_person_nonmember_spending_to_nonmember_NP_pct', 'earmarks_TS_lb', 'earmarks_TS_ub', 'spending_TS_lb', 'spending_TS_ub', 'doBFGS', 'doGenetic', 'doRandomStart' ] data = {} # set upper and lower bounds if widgits are empty for w in ['earmarks_TS_lb', 'spending_TS_lb']: if document[w].value.strip() == '': document[w].value = '0' for w in ['earmarks_TS_ub', 'spending_TS_ub']: if document[w].value.strip() == '': document[w].value = '100' # set check boxes to 0/1, and otherwise get values for widgits for w in widgets: if (w[0:9] in ['flexible_' ]) or (w in ['doGenetic', 'doBFGS', 'doRandomStart']): data[w] = document[w].checked else: data[w] = document[w].value # create form to post data document['hidden_form'].html = "" keys = data.keys() method = "post" form = html.FORM(method='post', action='/runModel', target="_blank") for k in keys: ele = html.INPUT(type="hidden", name=k, value=data[k]) form <= ele document['hidden_form'] <= form form.submit()
def show_contact(evt): """ Show the contact form """ if len(document['contact_container'].text) > 0: document['contact_container'].html = "" return form = html.FORM(id="contact_form", method='post', action='/contact_form') div = html.DIV() div <= html.BR() + html.BR() label = html.LABEL() span = html.SPAN() span.text = "Name (required): " widget = html.INPUT(id="name", placeholder="Name", type="text", tabindex="1", required=True, autofocus=True) label <= span + html.BR() + widget div <= label form <= div div = html.DIV() label = html.LABEL() span = html.SPAN() span.text = "Email (required): " widget = html.INPUT(id="email", placeholder="Email address", type="email", tabindex="2", size="30", required=True) label <= span + html.BR() + widget div <= label form <= div div = html.DIV() label = html.LABEL() span = html.SPAN() span.text = "Other (if you type anything in this box your message will be trashed): " widget = html.INPUT(id="other", placeholder="Don't do it.", type="text", tabindex="3", required=True) label <= span + html.BR() + widget div <= label form <= div div = html.DIV() label = html.LABEL() span = html.SPAN() span.text = "Are you a human? If so, how many legs does a dog have? " widget = html.INPUT(id="magic", placeholder="How many?", type="text", tabindex="4", size="9", required=True) label <= span + html.BR() + widget div <= label form <= div div = html.DIV() label = html.LABEL() span = html.SPAN() span.text = "Message: " widget = html.TEXTAREA(id="message", placeholder="Type your message", tabindex="5", cols="60", required=True) label <= span + html.BR() + widget div <= label form <= div div = html.DIV() button = html.BUTTON(type="button", id="contact_submit") button.text = "Submit Message" div <= button form <= div document['contact_container'] <= form document['contact_submit'].bind('click', submit_contact) window.scrollBy(0, 50)
newdiv.style = {"padding": "5px", "backgroundColor": "#ADD8E6"} # Now, lets add a table with a column with numbers and a # column with a word on each cell text = "Brython is really cool" textlist = text.split() table = html.TABLE() for i, word in enumerate(textlist): table <= html.TR(html.TD(i + 1) + html.TD(word)) # Now we add some style to the table table.style = {"padding": "5px", "backgroundColor": "#aaaaaa", "width": "100%"} # Now we add the table to the new div previously created newdiv <= table + html.BR() # a form? why not? form = html.FORM() input1 = html.INPUT(type="text", name="firstname", value="First name") input2 = html.INPUT(type="text", name="lastname", value="Last name") input3 = html.BUTTON("Button with no action!") form <= input1 + html.BR() + input2 + html.BR() + input3 newdiv <= form + html.BR() # Finally, we will add something more 'HTML5istic', a canvas with # a color gradient in the newdiv previously created and below the form canvas = html.CANVAS(width=300, height=300) canvas.style = {"width": "100%"} ctx = canvas.getContext('2d') ctx.rect(0, 0, 300, 300) grd = ctx.createRadialGradient(150, 150, 10, 150, 150, 150) grd.addColorStop(0, '#8ED6FF')
def test_browser_html(): # First of all, the import of some libraries from browser import document from browser import html # All the elements will be inserted in the div with the "container" id container = document['container'] # We create a new div element newdiv = html.DIV(id="new-div") # Now we add some style newdiv.style = {"padding": "5px", "backgroundColor": "#ADD8E6"} # Now, lets add a table with a column with numbers and a # column with a word on each cell text = "Brython is really cool" textlist = text.split() table = html.TABLE() for i, word in enumerate(textlist): table <= html.TR(html.TD(i + 1) + html.TD(word)) # Now we add some style to the table table.style = { "padding": "5px", "backgroundColor": "#aaaaaa", "width": "100%" } # Now we add the table to the new div previously created newdiv <= table + html.BR() # a form? why not? form = html.FORM() input1 = html.INPUT(type="text", name="firstname", value="First name") input2 = html.INPUT(type="text", name="lastname", value="Last name") input3 = html.BUTTON("Button with no action!") form <= input1 + html.BR() + input2 + html.BR() + input3 newdiv <= form + html.BR() # Finally, we will add something more 'HTML5istic', a canvas with # a color gradient in the newdiv previously created and below the form canvas = html.CANVAS(width=300, height=300) canvas.style = {"width": "100%"} ctx = canvas.getContext('2d') ctx.rect(0, 0, 300, 300) grd = ctx.createRadialGradient(150, 150, 10, 150, 150, 150) grd.addColorStop(0, '#8ED6FF') grd.addColorStop(1, '#004CB3') ctx.fillStyle = grd ctx.fill() newdiv <= canvas # And finally we append the newdiv element # to the parent, in this case the div with the "container" id container <= newdiv """ browser.local_storage """ from browser.local_storage import storage storage['foo'] = 'bar' print(storage['foo']) del storage['foo'] with pytest.raises(KeyError): print(storage['foo']) # raises KeyError ## added exception handler
def submit_model(evt): """ run model """ global results_counter elem = document['scenario'] scenario = [opt.value for opt in elem.options if opt.selected == True][0] # from successful fun, fit=60 data_01 = { 'workforce_partition_SB': [33], 'workforce_partition_NP': [34], 'workforce_partition_PB': [33], 'TSI': [35], 'family_income_target_final': [110000], 'population': [10000], 'unemployment_rate': [5], 'earmark_NP_donation': [5.114815312442174], 'earmark_NP_donation_TS': [58.939234386483776], 'earmark_PB_subsidy': [8.899206723284683], 'earmark_PB_subsidy_TS': [53.163211852380456], 'earmark_SB_subsidy': [8.51445110839744], 'earmark_SB_subsidy_TS': [42.10429226478416], 'earmark_nurture': [36.339790526860824], 'earmark_nurture_TS': [36.439476630262504], 'person_member_spending_to_member_NP_TS': [64.42464795292429], 'person_member_spending_to_member_NP_pct': [23.505064474876036], 'person_member_spending_to_member_PB_TS': [30.669838242642715], 'person_member_spending_to_member_PB_pct': [27.55634331961967], 'person_member_spending_to_member_SB_TS': [38.103915020305585], 'person_member_spending_to_member_SB_pct': [32.604851195547866], 'person_member_spending_to_nonmember_NP_pct': [0.5214587471568934], 'person_member_spending_to_nonmember_SB_pct': [15.812282274675196], 'person_nonmember_spending_to_member_NP_pct': [9.31615100786286], 'person_nonmember_spending_to_member_PB_pct': [37.16891914950032], 'person_nonmember_spending_to_member_SB_pct': [20.619519215802725], 'person_nonmember_spending_to_nonmember_NP_pct': [23.946729130924936], 'person_nonmember_spending_to_nonmember_SB_pct': [8.948681495909167], 'CBFS_spending_ratio': [40] } data_02 = { 'workforce_partition_SB': [33], 'workforce_partition_NP': [34], 'workforce_partition_PB': [33], 'TSI': [35], 'family_income_target_final': [110000], 'population': [10000], 'unemployment_rate': [5], 'earmark_NP_donation': [8.644500319160668], 'earmark_NP_donation_TS': [55.88660802799319], 'earmark_PB_subsidy': [11.826420774518366], 'earmark_PB_subsidy_TS': [48.02541415773954], 'earmark_SB_subsidy': [12.696246181318719], 'earmark_SB_subsidy_TS': [38.17651051378081], 'earmark_nurture': [36.740916221721456], 'earmark_nurture_TS': [36.04162220721133], 'person_member_spending_to_member_NP_TS': [63.21892370652468], 'person_member_spending_to_member_NP_pct': [21.87129068105028], 'person_member_spending_to_member_PB_TS': [28.125704507011594], 'person_member_spending_to_member_PB_pct': [28.685788956242465], 'person_member_spending_to_member_SB_TS': [37.72741674077401], 'person_member_spending_to_member_SB_pct': [33.326018279227966], 'person_member_spending_to_nonmember_NP_pct': [0.6742319206138517], 'person_member_spending_to_nonmember_SB_pct': [15.442610131504908], 'person_nonmember_spending_to_member_NP_pct': [9.31615100786286], 'person_nonmember_spending_to_member_PB_pct': [37.16891914950032], 'person_nonmember_spending_to_member_SB_pct': [20.619519215802725], 'person_nonmember_spending_to_nonmember_NP_pct': [23.946729130924936], 'person_nonmember_spending_to_nonmember_SB_pct': [8.948681495909167], 'CBFS_spending_ratio': [60] } data_03 = { 'workforce_partition_SB': [12], 'workforce_partition_NP': [70], 'workforce_partition_PB': [18], 'TSI': [35], 'family_income_target_final': [110000], 'population': [10000], 'unemployment_rate': [5], 'earmark_NP_donation': [31.444121377803235], 'earmark_NP_donation_TS': [36.861424591974824], 'earmark_PB_subsidy': [6.563161196207168], 'earmark_PB_subsidy_TS': [45.794137921181914], 'earmark_SB_subsidy': [2.878362271328804], 'earmark_SB_subsidy_TS': [46.08915867561319], 'earmark_nurture': [37.03198710972938], 'earmark_nurture_TS': [35.758370560381316], 'person_member_spending_to_member_NP_TS': [58.5754588219535], 'person_member_spending_to_member_NP_pct': [41.64559556445119], 'person_member_spending_to_member_PB_TS': [30.49837652360747], 'person_member_spending_to_member_PB_pct': [20.00977132048462], 'person_member_spending_to_member_SB_TS': [37.992360096672066], 'person_member_spending_to_member_SB_pct': [22.651236070566835], 'person_member_spending_to_nonmember_NP_pct': [0.26797928981835045], 'person_member_spending_to_nonmember_SB_pct': [15.425513618400476], 'person_nonmember_spending_to_member_NP_pct': [9.31615100786286], 'person_nonmember_spending_to_member_PB_pct': [37.16891914950032], 'person_nonmember_spending_to_member_SB_pct': [20.619519215802725], 'person_nonmember_spending_to_nonmember_NP_pct': [23.946729130924936], 'person_nonmember_spending_to_nonmember_SB_pct': [8.948681495909167], 'CBFS_spending_ratio': [70] } data_04 = { 'workforce_partition_SB': [12], 'workforce_partition_NP': [70], 'workforce_partition_PB': [18], 'TSI': [35], 'family_income_target_final': [110000], 'population': [100000], 'unemployment_rate': [5], 'earmark_NP_donation': [31.443822806024002], 'earmark_NP_donation_TS': [36.861381377187826], 'earmark_PB_subsidy': [6.564268184025609], 'earmark_PB_subsidy_TS': [45.79425475782429], 'earmark_SB_subsidy': [2.8785491321809564], 'earmark_SB_subsidy_TS': [46.08910397191154], 'earmark_nurture': [37.03037421999677], 'earmark_nurture_TS': [35.75840787354483], 'person_member_spending_to_member_NP_TS': [58.575197309863356], 'person_member_spending_to_member_NP_pct': [41.64537166504013], 'person_member_spending_to_member_PB_TS': [30.498782117143026], 'person_member_spending_to_member_PB_pct': [20.00984497040647], 'person_member_spending_to_member_SB_TS': [37.99227586201974], 'person_member_spending_to_member_SB_pct': [22.65120553757495], 'person_member_spending_to_nonmember_NP_pct': [0.2680566449872311], 'person_member_spending_to_nonmember_SB_pct': [15.42551646292275], 'person_nonmember_spending_to_member_NP_pct': [9.31615100786286], 'person_nonmember_spending_to_member_PB_pct': [37.16891914950032], 'person_nonmember_spending_to_member_SB_pct': [20.619519215802725], 'person_nonmember_spending_to_nonmember_NP_pct': [23.946729130924936], 'person_nonmember_spending_to_nonmember_SB_pct': [8.948681495909167], 'CBFS_spending_ratio': [70] } if scenario == '1': data = data_01 elif scenario == '2': data = data_02 elif scenario == '3': data = data_03 elif scenario == '4': data = data_04 else: raise Exception extra = { 'doBFGS': [''], 'doGenetic': [''], 'doRandomStart': [''], 'earmarks_TS_lb': ['35'], # equal to TSI 'earmarks_TS_ub': ['99'], 'spending_TS_lb': ['20'], 'spending_TS_ub': ['80'], 'spending_pct_lb': ['.1'], 'spending_pct_ub': ['70'], 'flexible_earmark_NP_donation': [''], 'flexible_earmark_NP_donation_TS': [''], 'flexible_earmark_PB_subsidy': [''], 'flexible_earmark_PB_subsidy_TS': [''], 'flexible_earmark_SB_subsidy': [''], 'flexible_earmark_SB_subsidy_TS': [''], 'flexible_earmark_nurture': [''], 'flexible_earmark_nurture_TS': [''], 'flexible_person_member_spending_to_member_NP_TS': [''], 'flexible_person_member_spending_to_member_NP_pct': [''], 'flexible_person_member_spending_to_member_PB_TS': [''], 'flexible_person_member_spending_to_member_PB_pct': [''], 'flexible_person_member_spending_to_member_SB_TS': [''], 'flexible_person_member_spending_to_member_SB_pct': [''], 'flexible_person_member_spending_to_nonmember_NP_pct': [''], 'flexible_person_member_spending_to_nonmember_SB_pct': [''], 'flexible_person_nonmember_spending_to_member_NP_pct': [''], 'flexible_person_nonmember_spending_to_member_PB_pct': [''], 'flexible_person_nonmember_spending_to_member_SB_pct': [''], 'flexible_person_nonmember_spending_to_nonmember_NP_pct': [''], 'flexible_person_nonmember_spending_to_nonmember_SB_pct': [''] } data.update(extra) # create form to post data document['hidden_form'].html = "" keys = data.keys() method = "post" form = html.FORM(method='post', action='/runModel', target="_blank") for k in keys: ele = html.INPUT(type="hidden", name=k, value=data[k]) form <= ele document['hidden_form'] <= form form.submit()