async def result(self, msg): if float(fee_inbox.value) == 0: fee_inbox.set_classes('bg-red-700 font-bold text-white') else: fee_inbox.set_classes(inbox_style) result_display.delete_components() dates_non_overlap(self, msg) jor = str(fee_inbox.value) factor_mult_extras = float((factor_mult_extras_inbox.value / 100) + 1) r = jp.P(text=operations_ctotal( jor, factor_mult_extras, operations_tiempos(start_workday_inbox.value, end_workday_inbox.value, hs_por_jornada_inbox.value, night_check.checked)[2], hs_por_jornada_inbox.value)) result.output = r.text result.val_hs_extras = operations_ctotal.__getattribute__("val_hs_extras") result.hs_ext_trabajadas = operations_ctotal.__getattribute__( "hs_ext_trabajadas") result.ganancia_por_hs_extras = operations_ctotal.__getattribute__( "ganancia_por_hs_extras") result_int_part = str(r.text).rsplit(".")[0] result_display_decimal_part = str(r.text).rsplit(".")[1] rd = jp.Div( a=result_display, classes='flex py-2' ) # 'flex-col m-2 flex-shrink-0 flex-row content-start align-top inline-block text-align-right ' rd.add(jp.Div(text=result_int_part, classes='text-2xl'), jp.P(text='.'), jp.Div(text=result_display_decimal_part, classes='text-ms')) info_area_fn(self, msg) await rd.update()
def load_images(mode=1, pattern=''): wp.all_image_containers = [] small_img = '' for i in range(len(wp.small_images)): small_img_container = jp.Div(a=images_container, classes=small_img_container_classes, click=select_default_img, mouseenter=small_container_mouseenter, mouseleave=small_container_mouseleave, ) if mode == 1: small_img = jp.Img(src=f'/static/{wp.small_images[i]}', a=small_img_container, style=small_img_style, ) elif mode == 2: if pattern: filename_text = basename(wp.small_images[i]).replace(pattern, '') filename_text = filename_text.replace(filename_text[filename_text.find('.'):], '') small_img = jp.P(src=f'/static/{wp.small_images[i]}', a=small_img_container, text=filename_text) else: small_img = jp.P(src=f'/static/{wp.small_images[i]}', a=small_img_container, text=basename(wp.small_images[i])) small_img_container.child = small_img wp.all_image_containers.append(small_img_container) wp.main_img.style = main_img_style wp.main_img.style += 'position: absolute;' wp.all_image_containers[0].set_class('bg-red-700') main_img.show = True
def player_div_banner(stat, dict, div, classes): if stat == 'Food': value = len(dict[stat]) else: value = dict[stat] new_div = jp.Div(a=div, classes=classes) new_div.label = jp.P(text=f'{stat}: ', a=new_div, classes=classes + "justify-self-center inline-block ") new_div.value = jp.P(text=f'{value}', a=new_div, classes=classes + "justify-self-center inline-block ") return new_div
def radio_test(): wp = jp.WebPage() genders = ["male", "female", "other"] ages = [(0, 30), (31, 60), (61, 100)] outer_div = jp.Div(classes="border m-2 p-2 w-64", a=wp) # Create div to show radio button selection but don't add yet to page. It will be added at the end # It is created here so that it could be assigned to the radio button attribute result_div result_div = jp.Div( text="Click radio buttons to see results here", classes="m-2 p-2 text-xl" ) jp.P(a=outer_div, text="Please select your gender:") gender_list = [] for gender in genders: label = jp.Label(classes="inline-block mg-1 p-1", a=outer_div) radio_btn = jp.Input( type="radio", name="gender", value=gender, a=label, btn_list=gender_list, result_div=result_div, change=radio_changed, ) gender_list.append(radio_btn) jp.Span(classes="ml-1", a=label, text=gender.capitalize()) jp.Div(a=outer_div, classes="m-2") # Add spacing and line break jp.P(a=outer_div, text="Please select your age:") age_list = [] for age in ages: label = jp.Label(classes="inline-block mb-1 p-1", a=outer_div) radio_btn = jp.Input( type="radio", name="age", value=age[0], a=label, btn_list=age_list, result_div=result_div, change=radio_changed, ) age_list.append(radio_btn) jp.Span(classes="ml-1", a=label, text=f"{age[0]} - {age[1]}") jp.Br(a=outer_div) wp.add(result_div) return wp
async def main_screen(): main = jp.WebPage(websockets=False) main += title main += subtitle def pdf_input(self,msg): print("event") sesspath = msg.session_id print(msg.session_id) if not os.path.isdir(sesspath): os.mkdir(sesspath) print(f"path made for {msg.session_id}") for i,v in enumerate(msg.form_data.files): print("getting file "+str(i)) with open(f'{sesspath}/{v.name}','wb') as f: f.write(base64.b64decode(v.file_content)) file_list = os.listdir(sesspath) print(f"> got {file_list}") if file_list: session_data[msg.session_id] = file_list msg.page.redirect = 'text_confirm' print(f"> got {file_list}") jp.P(text="Upload a pdf to get started",a=main,classes='w-full flex-none text-sm') form = jp.Form(a=main,enctype='multipart/form-data',submit=pdf_input) jp.Input(type='file',classes=jp.Styles.input_classes,a=form,accept='application/pdf',multiple=True) jp.Button(type='submit',text='Upload',classes=jp.Styles.button_simple,a=form) return main
def hello_world(): wp = jp.WebPage() for i in range(1,11): jp.P( text=f'{i}) Hello world!', a =wp, style=f'font-size: {10*i}px') return wp
async def launch(request): wp = jp.WebPage() url = '' print(APP_ID) if len(request.query_params) > 0: login_hint = request.query_params['login_hint'] lti_message_hint = request.query_params['lti_message_hint'] target_link_uri = request.query_params['target_link_uri'] r = requests.get(f"{BACKEND_URL}launch", params=request.query_params) wp.add(jp.P(text=f"{r.text}")) else: wp.add(jp.P(text="NO QUERY PARAMS")) return wp
def foo(self, msg): msg.page.content.delete_components() jp.QBtn(text="back to main", click=index, a=msg.page.content) for n in range(0, 155): msg.page.content.add( jp.P( text="Lorem ipsum dolor sit amet consectetur adipisicing elit. Fugit nihil praesentium molestias a adipisci, dolore vitae odit, quidem consequatur optio voluptates asperiores pariatur eos numquam rerum delectus commodi perferendis voluptate?" ) )
def event_demo(): wp = jp.WebPage() wp.title = 'event demo' wp.favicon = './favicon.ico' d = jp.P(text='Not clicked yet', a=wp, classes='text-xl m-2 p-2 bg-blue-500 text-white') d.on('click', my_click) return wp
def hello_world(): wp = jp.WebPage() for i in range(1, 11): jp.P(text=f'{i}) Hello World!', a=wp, style=f'font-size: {10*i}px') d = jp.Div(text='Hello world!') d.on('click', my_click) wp.add(d) print(1) return wp
def button_click(self, msg): self.num_clicked += 1 # self.message.text = f'{self.text} clicked. Number of clicks: {self.num_clicked}' p = jp.P(text=f'{self.text} clicked. Number of clicks: {self.num_clicked}') self.message.add_component(p, 0) for button in msg.page.button_list: button.set_class('bg-blue-500') button.set_class('bg-blue-700', 'hover') self.set_class('bg-red-500') self.set_class('bg-red-700', 'hover')
async def page(): wp = jp.WebPage() wp.head_html = "<link href='https://afeld.github.io/emoji-css/emoji.css' rel='stylesheet'></link>" root = jp.Div(a=wp) body = jp.Div( classes='bg-gray-400 font-sans leading-normal tracking-normal', a=root) c2 = jp.Nav(classes='bg-gray-800 p-2 mt-0 w-full', a=body) c3 = jp.Div( classes='container mx-auto flex flex-wrap items-center', a=c2) c4 = jp.Div( classes='flex w-full md:w-1/2 justify-center md:justify-start text-white font-extrabold', a=c3) logo_link = jp.A( classes='text-white no-underline hover:text-white hover:no-underline', href='#', a=c4) logo_cont = jp.Span(classes='flex text-2xl pl-2', a=logo_link) logo = jp.I(classes='em em-email my-auto', a=logo_cont) title = jp.Div(classes="p-2", text="Spam Detector", a=logo_cont) cont_main = jp.Div( classes='container mx-auto flex flex-col md:flex-row items-center my-6 md:my-12', a=body) cont_left = jp.Div( classes='flex flex-col w-full lg:w-1/2 justify-center items-start pt-12 pb-24 px-6', a=cont_main) tagline = jp.P(classes='uppercase tracking-loose', a=cont_left, text='Version: 1.0') main_title = jp.H1(classes='font-bold text-3xl my-4', a=cont_left, text='Spam Detector') description = jp.P(classes='leading-normal mb-4', a=cont_left, text='Keep the bad guys out! Enter the text of your email below and the Spam Detector will tell you how likely it\'s contents is spam:') text_in = jp.Textarea(classes='w-full border-2 h-32', placeholder='Please type here', a=cont_left) text_in.div = jp.Div(a=cont_left) text_in.on('input', predict) cont_right = jp.Div( classes='w-full lg:w-1/2 lg:py-6 text-center', a=cont_main) mailbox = jp.I( classes='text-6xl w-3/5 mx-auto em-svg em-mailbox_with_mail', viewBox='0 0 20 20', a=cont_right) footer = jp.Div(classes='bg-white h-1', a=body) footer_cont = jp.Div( classes='container mx-auto pt-12 md:pt-6 px-6', a=footer) footer_text_cont = jp.P(classes='py-4', a=footer_cont) love = jp.I(classes='em em-hearts', a=footer_text_cont) data = jp.I(classes='em em-bar_chart', a=footer_text_cont) science = jp.I(classes='em em-test_tube', a=footer_text_cont) return wp
def html_comps_editable_field(): wp = jp.WebPage() for _ in range(10): p = jp.P( text=f"אני אוהב לתכנת בפייתון", a=wp, contenteditable=True, classes="text-white bg-blue-500 hover:bg-blue-700 ml-1 p-1 w-1/2", ) p.dir = "rtl" p.lang = "he" return wp
async def text_confirm(request): sid = request.session_id sesspath = "/static/"+sid file_list = session_data[sid] texts = [tf.loadtext(f'{sesspath}/{f}',sesspath) for f in file_list] tc = jp.WebPage() tc += title jp.P(text="For each file, pick a version to turn into speech", classes=subtitle_style) form = jp.Form(a=tc,classes='border m-1 p-1 w-64') labels = [[] for txt in texts] for textz,f,ls in zip(texts,file_list,labels): ts = jp.Div(text=f,a=form,classes="grid grid-flow-col auto-cols-max md:auto-cols-min") for txt in textz: if txt is not None: l = jp.Label(a=ts,classes=input_class) jp.P(text=txt,a=l,classes=p_class) jp.Input(a=l,type='radio') ls += l confirm_button = jp.Input(value='Confirm', type='submit',a=form,classes='border m-2 p-2') def confirm(self,msg): print(msg) form.on('submit',confirm)
async def web_ui(self): wp = jp.WebPage() wp.title = 'Calcuador de jornada de Filmación' wp.favicon = "/CucardaVFXsup_fdoNegro.png" main_div = jp.Div( a=wp, classes= 'bg-black py-2 px-2 rounded-lg shadow-xl lg:max-w-3xl sm:max-w-2xl container min-width transform lg:scale-100 sm:scale-150 origin-top-left' ) # overflow-auto flex content-center flex-shrink-0 m-auto max-w-xl text-base sm:text-4xl lg:text-base main_div.add(head_div) app_box = jp.Div( a=main_div, classes='flex-col text-white content-center m-2 flex-grow ' ) # flex-shrink-0 d1_organizer = jp.Div(a=app_box, classes='flex border-gray-900 border-2') labels_for_data = jp.Div(a=d1_organizer, classes='text-align-left ' + cell_style) data_input_column = jp.Div(a=d1_organizer, classes=cell_style) labels_for_data.add(fee_label, factor_mult_extras_label, start_workday_label, end_workday_label, hs_por_jornada_label, night_hs_label) data_input_column.add(fee_inbox, factor_mult_extras_inbox, start_workday_inbox, end_workday_inbox, hs_por_jornada_inbox, night_check) pre_info_area = jp.Div(a=app_box, classes='py-2 flex flex-no-wrap') # result_box = jp.Div(a=app_box, classes='flex content-start') # btn_div = jp.Div(a=result_box) jp.P(text='Cobrarás en Total = ', a=result_box, classes='m-4') result_box.add(jp.Space(num=2), result_display) calc_bton = jp.Button( text='Calcular Total', name='Calcular Total', a=btn_div, click=result, classes=boton_style ) # TO-DO activar la funcionalidad del horario nocturno cuando se checkee. pre_info_area.add(info_area) end_workday_inbox.on('change', dates_non_overlap) fee_inbox.on('change', result) # calc_bton.on('before', info_area_fn) info_link.on('mouseover', change) info_link.on('mouseleave', change) night_check.on('change', result) return wp
def link_demo_bookmark(): wp = jp.WebPage() link = jp.A( text="Scroll to target", a=wp, classes="inline-block m-2 p-2 text-xl text-white bg-blue-500 hover:bg-blue-700", ) # jp.Br(a=wp) for i in range(50): jp.P(text=f"{i+1} Not a target", classes="m-1 p-1 text-white bg-blue-300", a=wp) target = jp.Link( text=f"This is the target - it is linked to first link, click to jump there", classes="inline-block m-1 p-1 text-white bg-red-500", a=wp, ) link.bookmark = target link.scroll = True target.bookmark = link target.scroll = True for i in range(50): jp.P( text=f"{i+50} Not a target", classes="m-1 p-1 text-white bg-blue-300", a=wp ) return wp
def event_demo(): number_of_buttons = 25 wp = jp.WebPage() button_div = jp.Div(classes='flex m-4 flex-wrap', a=wp) button_classes = 'w-32 mr-2 mb-2 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-full' message = jp.Div(classes='text-lg border m-2 p-2 overflow-auto h-64', a=wp) message.add(jp.P(text='No button clicked yet')) button_list = [] for i in range(1, number_of_buttons + 1): b = jp.Button(text=f'Button {i}', a=button_div, classes=button_classes, click=button_click) b.message = message b.num_clicked = 0 button_list.append(b) wp.button_list = button_list # The list will now be referenced by the WebPage instance attribute return wp
delete_flag=False) logolink = jp.A(href='http://vfx-sup.com', target='_blank') # logo = jp.Img(a=logolink, src=logo_url, classes="m-2 box-border object-left object-contain h-10" ) #TO-DO agregar link y un about a la main page . info_link_box = jp.Div(classes='justify-end') info_link = jp.A( a=info_link_box, text='Info adicional', href='http://vfx-sup.com', title='Información del autor y de uso', classes= 'text-gray-800 align-middle text-xs text-right font-style: italic justify-end px-8' ) # , target='_blank' invisible bg-gray-900 border-2 border-gray-700 title_to_show = jp.P(text="Calculador de jornadas de filmación", classes='m-4 text-xl font-bold text-white overflow-auto') result_display = jp.Div( name='result_display', classes='font-bold ' ) # 'flex-col m-2 flex-shrink-0 align-top inline-block text-align-right flex-row' espacios = jp.Space(num=3) ## input elements fee_inbox = jp.Input( name="fee_in", type='number', title= 'Indique el costo por jornada acordado en el convernio colectivo o en el contrato\nNo utilizar decimales ni fracciones!', placeholder='honorarios', tabindex=1, classes=inbox_style, delete_flag=False) #
return Synthesizer(model_path, config_path, vocoder_path, vocoder_config_path, use_cuda) def tts(synth, text, out_name): wav = synth.tts(text) syth.save_wav(wav,out_name+'.wav') AudioSegment.from_wav(out_name+'.wav').export(out_name+'.mp3',format="mp3") os.remove(out_name+'.wav') session_data = {} title_style = "flex-auto text-xl font-semibold items-center" subtitle_style = "w-full flex-none text-sm font-medium items-center" title = jp.H1(text = "PDF to Speech", classes=title_style) subtitle = jp.P(text = "A deep learning powered pipeline", classes=subtitle_style) input_class = "m-2 bg-gray-200 border-2 border-gray-200 rounded w-64 py-2 px-4 text-gray-700 focus:outline-none focus:bg-white focus:border-purple-500" p_class = 'm-2 p-2 h-32 text-xl border-2' async def main_screen(): main = jp.WebPage(websockets=False) main += title main += subtitle def pdf_input(self,msg): print("event") sesspath = msg.session_id print(msg.session_id) if not os.path.isdir(sesspath): os.mkdir(sesspath) print(f"path made for {msg.session_id}") for i,v in enumerate(msg.form_data.files):
chnames = [ 'Slot', 'IB0P', 'IB1P', 'IB2P', 'IB3p', 'IB4P', 'IB5P', 'IB6P', 'IB7P', 'IB0N', 'IB1N', 'IB2N', 'IB3N', 'IB4N', 'IB5N', 'IB6N', 'IB7N' ] wp = jp.WebPage(delete_flag=False) wp.title = 'EMCAL LV' header_div = jp.Div( text='EMCAL LV Burnin', a=wp, classes='text-5xl text-white bg-blue-500 hover:bg-blue-700 m-1') time_div = jp.Div( a=wp, classes='text-1xl text-white bg-blue-500 hover:bg-blue-700 m-1') the_time = jp.P(a=time_div) on_button_div = jp.Div(a=wp) off_button_div = jp.Div(a=wp) button_classes = 'w-32 mr-2 mb-2 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded-full' for i in range(nslots): b = jp.Button(text=f'ON {i+1}', a=on_button_div, classes=button_classes, click=button_click) b.slot = i + 1 b.onoff = 1 for i in range(nslots): b = jp.Button(text=f'OFF {i+1}', a=off_button_div,
def index(): wp = jp.QuasarPage() wp.tailwind = True wp.add(MyToolbar()) wp.add(jp.P(text='Index page', classes='text-5xl m-2')) return wp
def bye_function(): wp = jp.WebPage() wp.add(jp.P(text="Goodbye!", classes="text-5xl m-2")) return wp
def photo_browser(): all_container_classes = 'm-1 p-4' small_img_container_classes = 'm-1 p-1 bg-gray-700' default_combobox_classes = 'block bg-gray-200 border border-gray-200 text-gray-700 ' \ 'py-3 px-4 pr-8 rounded leading-tight focus:outline-none ' \ 'focus:bg-white focus:border-gray-500 w-full' settings_button_classes = 'm-2 p-2' dropdown_menu_classes = 'm-2 p-2 bg-gray-400' settings_div_classes = 'w-full' input_classes = "bg-gray-200 border border-gray-200 rounded py-3 px-4 pr-8 text-gray-700 " \ "focus:outline-none focus:bg-white focus:border-purple-500 w-full" main_container_style = 'position: absolute; top: 500px; width: 100%; margin: 0;' images_container_style = 'display:flex; justify-content:center; flex-wrap: wrap;' main_img_style = 'width: 800px; display: block; margin-left: auto; margin-right: auto;' \ 'z-index: 2; left: 0; right: 0; margin: 2% auto;' small_img_style = 'width: 200px;' settings_button_style = 'position: absolute;' dropdown_menu_style = 'position: absolute; top: 55px; z-index: 3;' settings_div_style = 'position: absolute;' def small_container_mouseenter(self, msg): msg.page.main_img.src = self.child.src self.child.style += ' transform: scale(.85);' def small_container_mouseleave(self, msg): if not isinstance(self.child, jp.P): self.child.style = small_img_style else: self.child.style = '' msg.page.main_img.src = msg.page.main_img_src def select_default_img(self, msg): msg.page.main_img_src = self.child.src for img_cont in msg.page.all_image_containers: img_cont.set_class('bg-gray-700') self.set_class('bg-red-700') def change_images(self, msg): msg.page.images_container.delete_components() msg.page.small_images = glob(self.value + '*.*') msg.page.small_images = natsorted(msg.page.small_images) msg.page.main_img.src = 'static/' + msg.page.small_images[0] msg.page.main_img_src = msg.page.main_img.src msg.page.other_settings_container.show = True if msg.page.small_images_content_display_combobox.value == "text": if msg.page.pattern_recognize_checkbox.checked and msg.page.pattern_recognize_input.value: load_images(mode=2, pattern=msg.page.pattern_recognize_input.value) else: load_images(mode=2) else: load_images() if msg.page.main_img_position_checkbox.checked: msg.page.main_img.style = main_img_style msg.page.main_img.style += ' position: fixed;' def toggle_show(self, msg): self.dropdown_menu.show = not self.dropdown_menu.show def set_main_img_position(self, msg): msg.page.main_img.style = main_img_style if self.checked: msg.page.main_img.style += ' position: fixed;' else: msg.page.main_img.style += ' position: absolute;' def change_small_images_content_display(self, msg): msg.page.images_container.delete_components() if self.value == "photo": load_images(mode=1) elif self.value == "text": load_images(mode=2) def set_pattern_recognize(self, msg): msg.page.pattern_recognize_input.show = not msg.page.pattern_recognize_input.show msg.page.pattern_refresh_button.show = not msg.page.pattern_refresh_button.show msg.page.pattern_recognize_input.value = '' pattern_refresh(self, msg) def pattern_refresh(self, msg): msg.page.images_container.delete_components() if wp.small_images_content_display_combobox.value == "text": load_images(mode=2, pattern=msg.page.pattern_recognize_input.value) else: load_images(mode=1) wp = jp.WebPage() wp.body_classes = 'bg-gray-600' small_images_folders = glob('photos/*/') try: wp.small_images = glob(small_images_folders[0] + '*.*') wp.small_images = natsorted(wp.small_images) main_img_src = 'static/' + wp.small_images[0] except IndexError: jp.P(text='Directory photos/ is empty', a=wp, classes='text-5xl m-2 p-2') return wp main_img = jp.Img(src='', a=wp, style=main_img_style) main_img.show = False main_container = jp.Div(a=wp, style=main_container_style) settings_div = jp.Div(a=wp, style=settings_div_style, classes=settings_div_classes) dropdown_menu = jp.Div(a=settings_div, classes=dropdown_menu_classes, style=dropdown_menu_style) images_dir_location_combobox_container = jp.Div(a=dropdown_menu) jp.Label(a=images_dir_location_combobox_container, text='Dir for image src*') images_dir_location_combobox = jp.Select(a=images_dir_location_combobox_container, classes=default_combobox_classes) other_settings_container = jp.Div(a=dropdown_menu) other_settings_container.show = False jp.Label(a=other_settings_container, text='Main img pos fixed?') main_img_position_checkbox = jp.Input(a=other_settings_container, type='checkbox', classes='m-1 form-checkbox') main_img_position_checkbox.on("change", set_main_img_position) jp.Br(a=other_settings_container) jp.Label(a=other_settings_container, text='Small images content display') small_images_content_display_combobox = jp.Select(a=other_settings_container, classes=default_combobox_classes) jp.Option(a=small_images_content_display_combobox, value="photo", text='Photo') jp.Option(a=small_images_content_display_combobox, value="text", text='Image name') small_images_content_display_combobox.on('change', change_small_images_content_display) small_images_content_display_combobox.value = "photo" jp.Label(a=other_settings_container, text="Pattern recognize?") pattern_recognize_checkbox = jp.Input(a=other_settings_container, type='checkbox', classes='m-1 form-checkbox') pattern_recognize_checkbox.on("change", set_pattern_recognize) pattern_refresh_button = jp.Button(a=other_settings_container) jp.I(a=pattern_refresh_button, classes='fas fa-sync') pattern_refresh_button.on('click', pattern_refresh) pattern_refresh_button.show = False jp.Br(a=other_settings_container) pattern_recognize_input = jp.Input(a=other_settings_container, classes=input_classes, placeholder='Type pattern ' 'here') pattern_recognize_input.show = False pattern_refresh_button.pattern_recognize_input = pattern_recognize_input settings_button = jp.Button(a=settings_div, classes=settings_button_classes, style=settings_button_style) settings_button.dropdown_menu = dropdown_menu jp.I(a=settings_button, classes='fas fa-cogs fa-2x') settings_button.on('click', toggle_show) for image_folder in small_images_folders: jp.Option(value=image_folder, text=image_folder, a=images_dir_location_combobox) images_dir_location_combobox.on('change', change_images) images_container = jp.Div(a=main_container, classes='m-1', style=images_container_style) wp.main_img = main_img wp.main_img_src = main_img_src wp.images_container = images_container wp.pattern_recognize_input = pattern_recognize_input wp.pattern_refresh_button = pattern_refresh_button wp.small_images_content_display_combobox = small_images_content_display_combobox wp.pattern_recognize_checkbox = pattern_recognize_checkbox wp.main_img_position_checkbox = main_img_position_checkbox wp.other_settings_container = other_settings_container def load_images(mode=1, pattern=''): wp.all_image_containers = [] small_img = '' for i in range(len(wp.small_images)): small_img_container = jp.Div(a=images_container, classes=small_img_container_classes, click=select_default_img, mouseenter=small_container_mouseenter, mouseleave=small_container_mouseleave, ) if mode == 1: small_img = jp.Img(src=f'/static/{wp.small_images[i]}', a=small_img_container, style=small_img_style, ) elif mode == 2: if pattern: filename_text = basename(wp.small_images[i]).replace(pattern, '') filename_text = filename_text.replace(filename_text[filename_text.find('.'):], '') small_img = jp.P(src=f'/static/{wp.small_images[i]}', a=small_img_container, text=filename_text) else: small_img = jp.P(src=f'/static/{wp.small_images[i]}', a=small_img_container, text=basename(wp.small_images[i])) small_img_container.child = small_img wp.all_image_containers.append(small_img_container) wp.main_img.style = main_img_style wp.main_img.style += 'position: absolute;' wp.all_image_containers[0].set_class('bg-red-700') main_img.show = True # load_images() # uncomment it if you want to image load automatically return wp
def hello_function(): wp = jp.WebPage() wp.add(jp.P(text='Hello there!', classes='text-5xl m-2')) return wp
def bye_function(): wp = jp.WebPage() wp.add(jp.P(text='Goodbye!', classes='text-5xl m-2')) return wp
def about(): wp = jp.QuasarPage() wp.tailwind = True wp.add(MyToolbar()) wp.add(jp.P(text='Hello there!', classes='text-5xl m-2')) return wp
def list_movies(self): # genera la lista dei film del genere scelto def view_genre(self, msg): conn = sqlite3.connect('movies.db') c = conn.cursor() genre = (self.text,) for row in c.execute('SELECT * FROM films WHERE genre=?', genre): li.text = f'Genere selezionato: {self.text}' body_table = jp.Tbody(style='overflow:auto;', a=movie_table) row_table = jp.Tr(style='') div_table1 = jp.Td(style='width: 447px;', a=row_table) div_title_film = jp.Div(style='cursor: pointer;', text=row[0], a=div_table1, click=open_film) div_table2 = jp.Td(style='width: 183px;', a=row_table) div_director_film = jp.Div(style='cursor: pointer;', text=row[8], a=div_table2, click=open_film) div_table3 = jp.Td(style='width: 100px;', a=row_table) div_date_film = jp.Div(style='cursor: pointer;', text=row[3], a=div_table3, click=open_film) div_title_film.additional_properties = row div_director_film.additional_properties = row div_date_film.additional_properties = row row_table.additional_properties = {'Titolo': row[0], 'Regista': row[8], 'Data di uscita': row[3]} body_table.add(row_table) conn.commit() conn.close() button_sort_director.additional_properties = [self.text, 'Regista'] button_sort_title.additional_properties = [self.text, 'Titolo'] li2.set_classes('block') div1.remove_component(div2) movie_table.add(body_table) div1.add(div_sort_buttons) div1.add(movie_table) #genera la lista ordinata in base al titolo def sort_by_title(self, msg): movie_table.delete_components() body_table_title_sorted = jp.Tbody(style='overflow:auto;') conn = sqlite3.connect('movies.db') c = conn.cursor() for row in c.execute('SELECT * FROM films ORDER BY title'): if row[7] == self.additional_properties[0]: li.text = f'Genere selezionato: {self.additional_properties[0]}' row_table = jp.Tr(style='') div_table1 = jp.Td(style='width: 447px;', a=row_table) div_title_film = jp.Div(style='cursor: pointer;', text=row[0], a=div_table1, click=open_film) div_table2 = jp.Td(style='width: 183px;', a=row_table) div_director_film = jp.Div(style='cursor: pointer;', text=row[8], a=div_table2, click=open_film) div_table3 = jp.Td(style='width: 100px;', a=row_table) div_date_film = jp.Div(style='cursor: pointer;', text=row[3], a=div_table3, click=open_film) div_title_film.additional_properties = row div_director_film.additional_properties = row div_date_film.additional_properties = row body_table_title_sorted.add(row_table) movie_table.add(body_table_title_sorted) #genera la lista ordinata in base al regista def sort_by_director(self, msg): movie_table.delete_components() body_table_sorted = jp.Tbody(style='overflow:auto;') conn = sqlite3.connect('movies.db') c = conn.cursor() for row in c.execute('SELECT * FROM films ORDER BY director'): if row[7] == self.additional_properties[0]: li.text = f'Genere selezionato: {self.additional_properties[0]}' row_table = jp.Tr(style='') div_table1 = jp.Td(style='width: 447px;', a=row_table) div_title_film = jp.Div(style='cursor: pointer;', text=row[0], a=div_table1, click=open_film) div_table2 = jp.Td(style='width: 183px;', a=row_table) div_director_film = jp.Div(style='cursor: pointer;', text=row[8], a=div_table2, click=open_film) div_table3 = jp.Td(style='width: 100px;', a=row_table) div_date_film = jp.Div(style='cursor: pointer;', text=row[3], a=div_table3, click=open_film) div_title_film.additional_properties = row div_director_film.additional_properties = row div_date_film.additional_properties = row body_table_sorted.add(row_table) movie_table.add(body_table_sorted) #dalla visualizzazione del singolo film, torna alla lista def return_to_list(self, msg): div_sort_buttons.set_class('block') p_title.set_classes('hidden') p_director.set_classes('hidden') p_date.set_classes('hidden') p_gross.set_classes('hidden') p_budget.set_classes('hidden') p_rating.set_classes('hidden') p_distributor.set_classes('hidden') p_imdb_rating.set_classes('hidden') p_time.set_classes('hidden') tasto_indietro_lista_film.set_classes('hidden') tasto_indietro.set_classes('block') movie_table.set_classes("block") li.set_classes('block') button_sort_director.on('click', sort_by_director) #apre la pagina di visualizzazione di un singolo film def open_film(self, msg): div_sort_buttons.set_class('hidden') tasto_indietro_lista_film.set_classes('block') tasto_indietro.set_classes('hidden') movie_table.set_classes("hidden") li.set_classes("hidden") p_title.set_classes('block') p_director.set_classes('block') p_date.set_classes('block') p_gross.set_classes('block') p_budget.set_classes('block') p_rating.set_classes('block') p_distributor.set_classes('block') p_imdb_rating.set_classes('block') p_time.set_classes('block') p_title.text = 'Titolo: ' + self.additional_properties[0] p_director.text = 'Regista: ' + self.additional_properties[8] p_date.text = 'Data di uscita: ' + self.additional_properties[3] p_gross.text = 'Incasso totale: ' + str(self.additional_properties[1]) p_budget.text = 'Budget: ' + str(self.additional_properties[2]) p_rating.text = 'Rating: ' + self.additional_properties[4] p_distributor.text = 'Distributore: ' + self.additional_properties[6] p_imdb_rating.text = 'Punteggio su IMDB: ' + str(self.additional_properties[9]) if (self.additional_properties[5] != None): p_time.text = 'Durata: ' + str(self.additional_properties[5]) + ' minuti' # cProfile.run('view_genre') profile.runctx('view_genre', None, locals()) #torna alla selezione del genere def remove_genre(self, msg): li.text='Benvenuto su MovieDatabase, scegli un genere:' div1.add(div2) li2.set_classes('hidden') movie_table.delete_components() div1.remove_component(div_sort_buttons) div1.remove_component(movie_table) button_sort_director.on('click', sort_by_director) body_table.set_classes('block') # istanze di classi di JustPy wp = jp.WebPage() ul = jp.Ul( style='margin-bottom: 0px;overflow: hidden;background-color: #C3C3C3;border-top-right-radius:.225rem;border-top-left-radius:.225rem', a=wp, classes='shadow-md m-2 p-2') li = jp.Li(style='margin-left: 1%;text-decoration: none;float: left;color: black;font-size:20px', text='Benvenuto su MovieDatabase, scegli un genere:', a=ul) div1 = jp.Div( style='overflow:auto;height: 520px;padding:4%;padding-top:0%;margin-top: 0px;background-color: #DCDCDC;border-bottom-right-radius:.225rem;border-bottom-left-radius:.225rem', a=wp, classes='shadow-md m-2') div2 = jp.Div(style='margin-top:46px; position:absolute', a=div1) div_sort_buttons = jp.Div(style='padding-top: 19px;width: 1080px;height: 73px;position:absolute;background-color: #DCDCDC;') button_sort_title = jp.Button(a=div_sort_buttons, style='width: 27rem; border-radius: 2px;', classes='mr-2 mb-2 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4', text='Ordina per titolo', click=sort_by_title) button_sort_director = jp.Button(a=div_sort_buttons, style='width: 11rem; border-radius: 2px;', classes='w-32 mr-2 mb-2 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4', text='Ordina per regista', click=sort_by_director) movie_table = jp.Table(style='margin-top: 95px; color:black;width:59%') p_title = jp.P(a=div1, style='margin-top: 82px;color: black;font-size:20px', classes='hidden') p_director = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') p_date = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') p_gross = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') p_budget = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') p_rating = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') p_distributor = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') p_imdb_rating = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') p_time = jp.P(a=div1, style='color: black;font-size:20px', classes='hidden') body_table = jp.Tbody(style='overflow:auto;', a=movie_table) body_table_sorted = jp.Tbody(style='overflow:auto;') body_table_title_sorted = jp.Tbody(style='overflow:auto;') li2 = jp.Li(style='margin-left: 1%;text-decoration: none;float: left;color: black;font-size:20px', a=ul) li2.set_classes('hidden') tasto_indietro = jp.Button(a=li2,text='Clicca qui per tornare indietro', style='width: 263px;color:red;', click=remove_genre) tasto_indietro_lista_film = jp.Button(a=li2, text='Clicca qui per tornare alla lista',style='width: 265px;color:red;',classes='hidden', click=return_to_list) genres = ['Avventura','Azione','Commedia','Musical','Horror','Romantico','Thriller','Drammatico','Documentario','Altro'] for i in genres: jp.Button(text=i, a=div2,click=view_genre,style=f'border-radius: .125rem;font-weight: 700;height: 12rem;margin: .5rem;margin-right: .5rem;margin-bottom: .5rem;padding-bottom: .5rem;padding-top: .5rem;padding-right: 1rem;padding-left: 1rem;color: #fff;width: 14rem;background-image: url("/static/images/{i}.jpg");') return wp
def hello_function(): wp = jp.WebPage() wp.add(jp.P(text="Hello there!", classes="text-5xl m-2")) return wp
def hello_world(): wp = jp.WebPage() my_paragraph_design = 'w-64 bg-blue-500 m-2 hover:bg-blue-700 text-white font-bold py-2 px-3 rounded' for i in range(1, 11): jp.P(text=f'{i}) Hello World!', a=wp, classes=my_paragraph_design) return wp
def hello_world(): wp = jp.WebPage() p = jp.P(text='Hello World!', a=wp) return wp