def home():
    wp = jp.QuasarPage(tailwind=True)

    page = jp.Div(a=wp, classes="bg-gray-200 h-screen")

    # jp.Div(a=page, classes="bg-gray-300")
    con = jp.Div(a=page, classes="bg-purple-300 m-24 p-10 rounded")

    line = jp.Div(a=con, classes="grid grid-cols-3 gap-4")
    in_1 = jp.Input(a=line,
                    placeholder="Enter the first value",
                    classes="form-input")
    in_2 = jp.Input(a=line,
                    placeholder="Enter the second value",
                    classes="form-input")
    result = jp.Div(a=line, text="Result goes here....")
    jp.QBtn(
        a=con,
        label="Calculate",
        color='purple',
        icon="calculator",
        click=sum_up,
        in1=in_1,
        in2=in_2,
        total=result,
        classes=
        "bg-purple-600 m-2 py-1 px-4 text-gray-800 rounded hover:bg-purple-800"
    )
    jp.Div(a=con,
           text="interactive div",
           mouseenter=mouse_enter,
           mouseleave=mouse_leave)

    return wp
Пример #2
0
 def __init__(self, **kwargs):
     super().__init__(**kwargs)
     self.in1 = jp.Input(a=self, placeholder='type me',
             input = self.input_handler)
     self.in2 = jp.Input(a=self, placeholder='type me2',
             input = self.input_handler)
     self.in2.div = jp.Div(text='What do you type?', a=self)
def check_test():
    wp = jp.WebPage(data={'checked': True})
    label = jp.Label(a=wp, classes='m-2 p-2 inline-block')
    c = jp.Input(type='checkbox', classes='m-2 p-2 form-checkbox', a=label, model=[wp, 'checked'])
    caption = jp.Span(text='Click to get stuff', a=label)

    in1 = jp.Input(model=[wp, 'checked'], a=wp, classes='border block m-2 p-2')
    return wp
Пример #4
0
async def square_input(request):
    wp = jp.WebPage(data={'result': ''})
    result_div = jp.Div(text='Result will show up here',
                        classes=p_classes,
                        model=[wp, 'result'])
    in1 = jp.Input(type='number', a=wp)
    in2 = jp.Input(type='number', a=wp)
    wp.data['result'] = in1 * in2
    wp.add(reuslt_div)
    return wp
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
    def serve(cls, req):
        wp = jp.QuasarPage(tailwind=True)
        div = jp.Div(a=wp, classes="bg-gray-200 h-screen")
        jp.Div(a=div,
               text="Instant English Dictionary",
               classes="text-4xl m-2")
        jp.Div(a=div,
               text="Get the definition of any English word as you type.",
               classes="text-lg")

        input_div = jp.Div(a=div, classes="grid grid-cols-2")

        output_div = jp.Div(a=div, classes="m-2 p-2 text-lg border-2 h-40")

        input_box = jp.Input(
            a=input_div,
            placeholder="Type in a word here...",
            outputdiv=output_div,
            classes=
            "m-2 bg-gray-100 border-2 border-gray-200 rounded w-64 focus:bg-white "
            "focus:outline-none focus:border-purple-500")
        input_box.on("input", cls.get_definition)

        # jp.Button(a=input_div, text="Get definition",
        #           classes="border-2 border-purple-500 rounded focus:outline-none "
        #                   "focus:border-red-500", click=cls.get_definition, outputdiv=output_div, inputbox=input_box)

        return wp
Пример #7
0
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 serve(cls, req):
        wp = jp.QuasarPage(tailwind=True)

        lay = layout.DefaultLayout(a=wp)
        container = jp.QPageContainer(a=lay)

        div = jp.Div(a=container, classes="bg-gray-200 h-screen")
        jp.Div(a=div,
               text="Instant English Dictionary",
               classes="text-4xl m-2")
        jp.Div(
            a=div,
            text="Get the definition of any English word instantly as you type."
        )

        input_div = jp.Div(a=div, classes="grid grid-cols-2")

        output_div = jp.Div(a=div, classes="m-2 p-2 text-lg border-2 h-40")
        input_box = jp.Input(
            a=input_div,
            placeholder="Type in a word...",
            outputdiv=output_div,
            classes=
            "m-2 bg-gray-100 border-2 border-gray2 rounded w-64 focus:outline-none "
            "focus:border-purple-500 focus:bg-white py-2 px-4")
        input_box.on('input', cls.get_definition)
        return wp
Пример #9
0
async def index(request):
    wp = jp.WebPage(data={'symbols': ','.join(symbols), 'q': None})
    in1 = jp.Input(a=wp,
                   classes=input_classes,
                   placeholder='Please type here',
                   model=[wp, 'symbols'])
    b = jp.Button(text='Read', click=read, a=wp, classes=button_classes)
    return wp
Пример #10
0
def form_test():
    wp = jp.WebPage()
    wp.display_url = '/fill_form'

    form1 = jp.Form(a=wp, classes='border m-1 p-1 w-64')

    user_label = jp.Label(
        text='User Name',
        classes=
        'block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2',
        a=form1)
    in1 = jp.Input(placeholder='User Name', a=form1, classes='form-input')
    user_label.for_component = in1

    password_label = jp.Label(
        classes=
        'block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2 mt-2',
        a=form1)
    jp.Div(
        text='Password',
        classes=
        'block uppercase tracking-wide text-gray-700 text-xs font-bold mb-2',
        a=password_label)
    jp.Input(placeholder='Password',
             a=password_label,
             classes='form-input',
             type='password')

    check_label = jp.Label(classes='text-sm block', a=form1)
    jp.Input(type='checkbox',
             a=check_label,
             classes='form-checkbox text-blue-500')
    jp.Span(text='Send me stuff', a=check_label, classes='ml-2')
    submit_button = jp.Input(value='Submit Form',
                             type='submit',
                             a=form1,
                             classes=button_classes)

    def submit_form(self, msg):
        print(msg)
        msg.page.redirect = '/form_submitted'
        session_data[msg.session_id] = msg.form_data

    form1.on('submit', submit_form)

    return wp
Пример #11
0
def home():
    wp = jp.QuasarPage(tailwind=True)
    div = jp.Div(a=wp, classes="bg-gray-200 h-screen")

    div1 = jp.Div(a=div, classes="grid grid-cols-3 gap-4 p-4")
    in_1 = jp.Input(a=div1, placeholder="Enter first value", classes="form-input")
    in_2 = jp.Input(a=div1, placeholder="Enter second value", classes="form-input")
    d_output = jp.Div(a=div1, text="Result", classes="text-gray-600")
    jp.Div(a=div1, text="Just another Div", classes="text-gray-600")
    jp.Div(a=div1, text="Yet another Div", classes="text-gray-600")

    div2 = jp.Div(a=div, classes="grid grid-cols-2 gap-4")
    jp.QBtn(a=div2, text="Calculate", click=sum_up, in1=in_1, in2=in_2, d=d_output,
            classes="border border-blue-500 m-2 py-1 px-4 rounded "
                    "text-blue-600 hover:bg-red-500 hover:text-white")
    jp.Div(a=div2, text="I'm an interactive div", mouseenter=mouse_enter, mouseleave=mouse_leave,
           classes="hover:bg-red-500")
    return wp
Пример #12
0
async def input_demo(request):
    wp = jp.WebPage(data={'text': '', 'result': ''})
    input_classes = "m-2 bg-gray-200 border-2"
    jp.Input(a=wp,
             classes=input_classes,
             placeholder='please type',
             model=[wp, 'text'])
    jp.Div(model=[wp, 'text'], a=wp)
    return wp
Пример #13
0
async def square_input(request):
    wp = jp.WebPage()
    wp.result_div = jp.Div(text='Result will show up here',
                           classes='text-xl border m-2 p-2 w-1/3',
                           a=wp)
    wp.in1 = jp.Input(type='number',
                      a=wp,
                      placeholder='First number',
                      input=num_changes,
                      value=0,
                      classes=jp.Styles.input_classes)
    wp.in2 = jp.Input(type='number',
                      a=wp,
                      placeholder='Second number',
                      input=num_changes,
                      value=0,
                      classes=jp.Styles.input_classes)
    return wp
Пример #14
0
 def __init__(self, **kwargs):
     super().__init__(**kwargs)
     self.value = 0
     self.tape = jp.Input(
         classes='block p-2 m-2  border text-right text-sm bg-gray-200',
         a=self,
         readonly=True,
         value=' ',
         style='width: 90%')
     self.result = jp.Input(
         classes='block p-2 m-2 border text-2xl text-right',
         a=self,
         readonly=True,
         value='0',
         style='width: 90%')
     d = jp.Div(classes='flex w-auto m-2', a=self)
     b = jp.Input(text='type', a=d)
     b1 = jp.Button(text='cal!', a=d, click=self.cal_click)
     b1.calc = self
Пример #15
0
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

        self.in1 = jp.Input(a=self,
                            classes=self.input_classes,
                            placeholder='Please type here',
                            input=self.input_handler)
        self.in1.div = jp.Div(text='What you type will show up here',
                              classes='m-2 p-2 h-32 text-xl border-2',
                              a=self)
Пример #16
0
def grid_test():
    """Grid test app.
    """
    headings = list(string.ascii_uppercase)
    index = np.arange(START_INDEX, END_INDEX)

    data_frame = pd.DataFrame(index=index, columns=headings)
    data_frame = data_frame.fillna('')

    # data = np.array([np.arange(10)]*3).T

    # css_values = """
    # .ag-theme-alpine .ag-ltr .ag-cell {
    #     border-right: 1px solid #aaa;
    # }
    # .ag-theme-balham .ag-ltr .ag-cell {
    #     border-right: 1px solid #aaa;
    # }
    # """

    web_page = jp.WebPage()

    root_div = jp.Div(classes='q-pa-md', a=web_page)
    in_root_div = jp.Div(classes='q-gutter-md', a=root_div)
    cell_label = jp.Input(
        a=in_root_div, style='width: 32px; margin-left: 16px', disabled=True)
    input_field = jp.Input(classes=jp.Styles.input_classes,
                           a=in_root_div, width='32px')
    input_field.on("input", on_input_key)
    input_field.last_cell = None

    grid = jp.AgGrid(a=web_page, options=GRID_OPTIONS)
    grid.load_pandas_frame(data_frame)
    grid.options.pagination = True
    grid.options.paginationAutoPageSize = True
    grid.cell_label = cell_label
    grid.input_field = input_field
    grid.on('cellClicked', on_cell_clicked)
    grid.on('cellValueChanged', on_cell_value_changed)

    input_field.grid = grid

    return web_page
Пример #17
0
def tab_comp_test():
    wp = jp.WebPage(data={'tab': 'id2556'})

    t = Tabs(a=wp,
             classes='w-3/4 m-4',
             style='',
             animation=True,
             content_height=550)
    for chart_type in ['bar', 'column', 'line', 'spline']:
        d = jp.Div(style=Tabs.wrapper_style, delete_flag=True)
        my_chart = jp.HighCharts(a=d,
                                 classes='m-2 p-2 border',
                                 style='width: 1000px;',
                                 options=my_chart_def,
                                 use_cache=False)
        my_chart.options.chart.type = chart_type
        my_chart.options.title.text = f'Chart of Type {chart_type.capitalize()}'
        my_chart.options.subtitle.text = f'Subtitle {chart_type.capitalize()}'
        t.add_tab(f'id{chart_type}', f'{chart_type}', d)

    d_flex = Div(classes='flex',
                 a=wp)  # Container for the two dog pictures tabs

    t = Tabs(a=d_flex,
             classes=' w-1/2 m-4',
             animation=True,
             content_height=550,
             model=[wp, 'tab'],
             change=tab_change)
    for pic_id in pics_papillons:
        d = jp.Div(style=Tabs.wrapper_style)
        jp.Img(
            src=
            f'https://images.dog.ceo/breeds/papillon/n02086910_{pic_id}.jpg',
            a=d)
        t.add_tab(f'id{pic_id}', f'Pic {pic_id}', d)

    t = TabsPills(a=d_flex,
                  classes='w-1/2 m-4',
                  animation=True,
                  content_height=550,
                  change=tab_change)
    for pic_id in pics_french_bulldogs:
        d = jp.Div(style=Tabs.wrapper_style)
        jp.Img(
            src=
            f'https://images.dog.ceo/breeds/bulldog-french/n02108915_{pic_id}.jpg',
            a=d)
        t.add_tab(f'id{pic_id}', f'Pic {pic_id}', d)

    input_classes = "w-1/3 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"

    in1 = jp.Input(classes=input_classes, model=[wp, 'tab'], a=wp)

    return wp
Пример #18
0
async def input_demo(request):
    wp = jp.WebPage()
    wp.title = 'input demo'
    wp.favicon = './favicon.ico'
    wp.debug = True
    in2 = jp.Input(a=wp, classes=input_classes, placeholder='Please type here')
    in2.div = jp.Div(text='What you type will show, 입력하는 것이 보여집니다.',
                     classes=p_classes,
                     a=wp)
    in2.on('input', my_input)
    return wp
Пример #19
0
async def input_demo(request):
    wp = jp.WebPage()
    in1 = jp.Input(type='number',
                   a=wp,
                   classes=input_classes,
                   placeholder='Please type here')
    in1.div = jp.Div(text='What you type will show up here',
                     classes=p_classes,
                     a=wp)
    in1.on('input', my_input)
    return wp
Пример #20
0
async def input_demo(request):
    wp = jp.WebPage(data={'text':'Initial text'})
    button_classes = 'w-32 m-2 bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded'
    b = jp.Button(text='Reset', click=reset_all, a=wp, classes=button_classes)
    jp.Hr(a=wp)
    input_classes = "m-2 bg-gray-200 appearance-none border-2 border-gray-200 rounded xtw-64 py-2 px-4 text-gray-700 focus:outline-none focus:bg-white focus:border-purple-500"
    for _ in range(5):
        jp.Input(a=wp, classes=input_classes, placeholder='Please type here', model=[wp, 'text'])
    for _ in range(3):
        jp.Div(model=[wp, 'text'], classes='m-2 p-2 h-32 text-xl border-2 overflow-auto', a=wp)
    return wp
Пример #21
0
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)
    def serve(cls, req):
        # Build the web page add layout and place this page in container
        wp = jp.QuasarPage(tailwind=True)
        lay = layout.DefaultLayout(a=wp)
        container = jp.QPageContainer(a=lay)

        # classes for input boxes and labels
        input_class = "m-2 bg-gray-200 border-2 border-gray-200 rounded py-2 px-4 " \
                      "focus:outline-none focus:border-purple-500 focus:bg-white"
        label_class = "m-2 py-2 px-4"

        # create container box for the app
        con = jp.Div(a=container, classes="bg-purple-300 p-10 m-10 rounded")


        # two lines of titles
        jp.Div(a=con, text="Flatmates Bill", classes="text-4xl m-2")
        jp.Div(a=con, text="Get the amount of a bill two flatmates owe based on days in the house", classes="text-lg")

        # four lines for the input boxes and button
        l_fm1 = jp.Div(a=con, classes="grid grid-cols-4")
        l_fm2 = jp.Div(a=con, classes="grid grid-cols-4")
        l_bill = jp.Div(a=con, classes="grid grid-cols-4")
        # div for output
        output_div = jp.Div(a=con, classes="m-2 p-2 text-lg border-2 h-10")
        l_btn = jp.Div(a=con, classes="grid grid-cols-2")



        # boxes where input is typed
        jp.Div(a=l_fm1, text="1st Flatmate's name", classes=label_class)
        i_fm1_name = jp.Input(a=l_fm1, value="Martin", classes=input_class)
        jp.Div(a=l_fm1, text="days in the house", classes=label_class)
        i_fm1_days = jp.Input(a=l_fm1, value="28", classes=input_class)

        jp.Div(a=l_fm2, text="2nd Flatmate's name", classes=label_class)
        i_fm2_name = jp.Input(a=l_fm2, value="Will", classes=input_class)
        jp.Div(a=l_fm2, text="days in the house", classes=label_class)
        i_fm2_days = jp.Input(a=l_fm2, value="25", classes=input_class)

        jp.Div(a=l_bill, text="Bill amount", classes=label_class)
        i_bill_amt = jp.Input(a=l_bill, value="120", classes=input_class)
        jp.Div(a=l_bill, text="Bill period", classes=label_class)
        i_bill_period = jp.Input(a=l_bill, placeholder="e.g.: February 2021", classes=input_class)

        jp.Button(a=l_btn, text="calculate", click=cls.get_results, classes="bg-purple-700 rounded p-2 m-2",
                  fm1_name=i_fm1_name, fm2_name=i_fm2_name,
                  fm1_days=i_fm1_days, fm2_days=i_fm2_days,
                  bill_amt=i_bill_amt, bill_period=i_bill_period,
                  outputdiv=output_div)
        jp.Button(a=l_btn, text="generate PDF", click=cls.get_results, classes="bg-purple-700 rounded p-2 m-2",
                  fm1_name=i_fm1_name, fm2_name=i_fm2_name,
                  fm1_days=i_fm1_days, fm2_days=i_fm2_days,
                  bill_amt=i_bill_amt, bill_period=i_bill_period,
                  outputdiv=output_div)

        return wp
def focus_test():
    wp = jp.WebPage()
    d = jp.Div(classes = 'flex flex-col m-2', a=wp, style='width: 600 px')
    input_list = []
    number_of_fields = 5
    for i in range(1, number_of_fields + 1):
        label = jp.Label(a=d, classes = 'm-2 p-2')
        jp.Span(text=f'Field {i}', a=label)
        in1 = jp.Input(classes = jp.Styles.input_classes, placeholder=f'{i} Type here', a=label, keydown=key_down, spellcheck='false')
        in1.on('blur', my_blur)
        in1.input_list = input_list
        in1.num = i-1
        input_list.append(in1)
    print(input_list)
    return wp
Пример #24
0
def model_demo():
    wp = jp.WebPage()
    d = jp.Div(a=wp, data={'text': ''})
    repeat = 2
    output = jp.Div(a=d)
    jp.Div(text=f'output', a=output)
    MyDiv(text=f'typing will go here',
          a=output,
          model=[d, 'text'],
          repeat=repeat,
          initial_text='Yada Yada')
    middle_input = jp.Input(text='',
                            placeholder='Type here',
                            model=[d, 'text'],
                            a=d)
    return wp
def color_demo(request):
    wp = jp.WebPage()
    in1 = jp.Input(
        type="color",
        a=wp,
        classes="m-2 p-2",
        style="width: 100px; height: 100px",
        input=color_change,
        debounce=30,
    )
    in1.d = jp.Div(
        text="Click box above to change color of this text",
        a=wp,
        classes="border m-2 p-2 text-2x1 font-bold",
    )
    return wp
Пример #26
0
    def serve(cls, req):
        # Build the web page
        wp = jp.QuasarPage(tailwind=True)

        lay = layout.DefaultLayout(a=wp)
        container = jp.QPageContainer(a=lay)

        con = jp.Div(a=container, classes="bg-purple-300 p-10 rounded")
        # two lines of titles
        jp.Div(a=con, text="Instant English Dictionary", classes="text-4xl m-2")
        jp.Div(a=con, text="Get the definition of any word instantly as you type", classes="text-lg")
        # line div creates a holder to put input box in so it can be declared after output div
        line = jp.Div(a=con, classes="grid grid-cols-2")
        # box where output is displayed listed before input box so input box can reference it
        output_div = jp.Div(a=con, classes="m-2 p-2 text-lg border-2 h-40")
        # box where input is typed
        input_box = jp.Input(a=line, placeholder="Type in a word here...", outputdiv=output_div,
                             classes="m-2 bg-gray-200 border-2 border-gray-200 rounded w-64 py-2 px-4 "
                                     "focus:outline-none focus:border-purple-500 focus:bg-white")
        # dynamic method which calls get_definition as text is typed
        input_box.on('input', cls.get_definition)

        return wp
Пример #27
0
def color_demo(request):
    wp = jp.WebPage()
    in1 = jp.Input(type='color', a=wp, input=color_change, debounce=30)
    in1.d = jp.Div(text='click box above to change color', a=wp)
    return wp
Пример #28
0
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
Пример #29
0
    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)  #
fee_label = jp.Label(text='Valor de la jornada regular =',
                     classes=label_item_clas)
factor_mult_extras_inbox = jp.Input(
    type='number',
    title='porcentaje de incremento por hora extra.\nUsualmente es 50%',
    value=50,
    tabindex=2,
    classes=inbox_style,
    delete_flag=False)
factor_mult_extras_label = jp.Label(text='Porcentaje por hora extra =',
                                    classes=label_item_clas)
Пример #30
0
def home():
    in1 = jp.Input(a=wp, classes=input_classes, placeholder="Target Temperature")
    in2 = jp.Input(a=wp, classes=input_classes, placeholder="Current Temperature")
    d.on("click", my_click)
    return wp