def gera():
    linhas = [].copy()

    ht_rotulo = html_label.gera("E-mail", ": ")
    ht_campo = html_input.gera(None, "text", "email", None, None, True, True,
                               "nome@provedor", None)
    linhas.append((
        ht_rotulo,
        ht_campo,
    ))

    ht_rotulo = html_label.gera("Senha", ": ")
    ht_campo = html_input.gera(None, "password", "senha", None, None, True,
                               True, None, None)
    linhas.append((
        ht_rotulo,
        ht_campo,
    ))

    # Monta a tabela com os fragmentos HTML:
    ht_table = html_table.gera(linhas, None)

    ht_bt_login = html_botao_submit.gera("Entrar", 'fazer_login', None,
                                         '#55ee55')

    ht_campos = \
      ht_table + \
      ht_bt_login

    ht = html_form.gera(ht_campos)
    return ht
예제 #2
0
def gera(dados_linhas, atrs):
    # sys.stderr.write("{html_form_table_IMP.gera}: atrs = %s\n" %str(atrs))

    # Converte os dados brutos das linhas para fragmentos HTML:
    ht_linhas_vis = [].copy(
    )  # Lista de pares {(ht_rotulo,ht_input)} dos campos visíveis.
    ht_campos_hid = [].copy()  # Lista de {ht_input}s dos campos invisívels.
    for rotulo, tipo, chave, dica, visivel, editavel, obrigatorio in dados_linhas:
        val = (atrs[chave] if chave in atrs else None)
        if visivel:
            # Pega o valor mínimo, se houver:
            chmin = chave + "_min"
            vmin = atrs[chmin] if (tipo == "number") and (chmin
                                                          in atrs) else None
            # Gera o <input>:
            ht_rotulo = html_label.gera(rotulo, None)
            ht_input = gera_input(tipo, chave, val, vmin, dica, editavel,
                                  obrigatorio)
            ht_linhas_vis.append((
                ht_rotulo,
                ht_input,
            ))
        else:
            ht_input = gera_input("hidden", chave, val, None, None, False,
                                  False)
            ht_campos_hid.append(ht_input)

    # Monta a tabela com os fragmentos HTML:
    ht_table = html_table.gera(ht_linhas_vis, None)
    ht_res = ht_table + ("\n".join(ht_campos_hid))
    return ht_res
예제 #3
0
def gera():
  linhas = [].copy()

  ht_rotulo = html_label.gera("Origem", ": ")
  ht_campo = html_input.gera(None, "text", "origem", None, None, True, True, "VCP", None)
  linhas.append((ht_rotulo, ht_campo,))

  ht_rotulo = html_label.gera("Data mínima de partida", ": ")
  ht_campo = html_input.gera(None, "text", "dia_min", None, None, True, True, "aaaa-mm-dd", None)
  ht_campo2 = html_input.gera(None, "text", "hora_min", None, None, True, True, "HH:MM", None)
  ht_rotulo2 = html_label.gera("UTC", "")
  linhas.append((ht_rotulo, ht_campo, ht_campo2, ht_rotulo2))

  ht_rotulo = html_label.gera("Destino", ": ")
  ht_campo = html_input.gera(None, "text", "destino", None, None, True, True, "SDU", None)
  linhas.append((ht_rotulo, ht_campo,))

  ht_rotulo = html_label.gera("Data máxima de chegada", ": ")
  ht_campo = html_input.gera(None, "text", "dia_max", None, None, True, True, "aaaa-mm-dd", None) 
  ht_campo2 = html_input.gera(None, "text", "hora_max", None, None, True, True, "HH:MM", None)
  ht_rotulo2 = html_label.gera("UTC", "")
  linhas.append((ht_rotulo, ht_campo, ht_campo2, ht_rotulo2))

  # Monta a tabela com os fragmentos HTML:
  ht_table = html_table.gera(linhas, None)

  ht_bt_buscar = html_botao_submit.gera("Buscar", 'sugerir_roteiros', None, '#55ee55')

  ht_campos = \
    ht_table + \
    ht_bt_buscar

  ht = html_form.gera(ht_campos)
  return ht
def gera(ses, bt_ver, bt_fechar):
    sessao_id = sessao.obtem_identificador(ses)
    # Pega/monta atributos a mostrar:
    sessao_usuario = sessao.obtem_atributo(ses, 'usr')
    sessao_aberta = sessao.obtem_atributo(ses, 'abrt')
    sessao_cookie = sessao.obtem_atributo(ses, 'cookie')
    sessao_carrinho = sessao.obtem_atributo(ses, 'carrinho')
    sessao_data = sessao.obtem_atributo(ses, 'criacao')

    # Formata informações em HTML:
    ht_sessao_id = formata_texto(sessao_id)
    ht_codigo_usuario = formata_texto(
        usuario.obtem_identificador(sessao_usuario))
    ht_estado = formata_texto(sessao_esta_aberta(sessao_aberta))
    ht_cookie = formata_texto(sessao_cookie)
    ht_data = formata_texto(sessao_data)
    if sessao_carrinho == None:
        tx_carrinho = ""
    else:
        tx_carrinho = compra.obtem_identificador(sessao_carrinho)
    ht_carrinho = formata_texto(tx_carrinho)

    ht_campos = [
        ht_sessao_id, ht_codigo_usuario, ht_estado, ht_cookie, ht_carrinho,
        ht_data
    ]

    args_bt = {'id_sessao': sessao_id}  # Argumentos para os botões.
    cor_bt_admin = '#FFA700'  # Cor para botões de adminstrador.

    # O comando para tratar a url "ver_detalhes_sessao" ainda não existe, e deverá ser implementado
    # no futuro.
    if bt_ver:
        ht_bt_fechar = html_botao_simples.gera("Ver", 'ver_sessao', args_bt,
                                               cor_bt_admin)
        ht_campos.append(ht_bt_fechar)

    if bt_fechar and sessao_aberta:
        ht_bt_fechar = html_botao_simples.gera("Fechar", 'fechar_sessao',
                                               args_bt, cor_bt_admin)
        ht_campos.append(ht_bt_fechar)

    if sessao_carrinho != None:
        tx_carrinho = compra.obtem_identificador(sessao_carrinho)
        if tx_carrinho[-1] == "1":
            ht_bt_fechar = html_label.gera("Sessão Atual", None)
            ht_campos.append(ht_bt_fechar)

    return ht_campos
예제 #5
0
def html_cpr_campo(rotulo, nome, valores, tipo, dica, editavel):
    """Função auxiliar para formatar a tabela de campos.

  Devolve um par {(ht_lab, ht_val)} onde {ht_lab} é um elemento <label>...</label>,
  e {ht_val} é um elemento <input ... /> ou um <div>...</div> com o formato apropriado.  
  
  O string {rotulo} é o nome do campo visível para o usuário, como
  "Nome do passageiro". Será o conteúdo do {ht_lab}.
  
  O string {nome} é o nome interno do atributo da compra, como 'id_usuario',
  'preco_tot', 'saida', 'chegada', etc.
  
  O parâmetro {valores} é um dicionário Python que pode definir ou não um
  valor {val} para a chave {nome}.  Se não definir, o valor {val} será tomado como {None}.
  Se o {tipo} for "number", o dicionário pode também definir um valor {vmin}
  para a chave "{nome}_min"; caso contrário {vmin} será tomado como {None}.
  
  Se o parâmetro {tipo} for {None}, o resultado {ht_val} será o valor
  {val} formatado como um <div>...</div> de estilo adequado.
  
  Se o parâmetro {tipo} não for {None}, deve ser um string que especifica
  um tipo de elemento <input.../> que será devolvido em {ht_val},
  Por exemplo "text", "number", "readonly". Nesse caso {ht_val} será 
  
    "<input type='{tipo}' name='{nome}' value='{val}'
    min='{vmin}' placeholder='{dica}'/>"
  
  O parâmetro {dica} só é usado se {tipo} não for {None} mas {val} for {None};
  será a dica de preenchimento do camo. Por exemplo, para
  um campo de data, a dica pode ser "AAAA-MM-DD"."""
    ht_lab = html_label.gera(rotulo, ": ")
    val = (valores[nome] if nome in valores else None)
    if tipo == None:
        estilo = "font-family:Courier;font-size:18"
        ht_val = html_div.gera(estilo, val)
    else:
        nmin = nome + "_min"
        vmin = (valores[nmin] if nmin in valores else None)
        if val != None: dica = None
        ht_val = html_input.gera(None, tipo, nome, val, vmin, editavel, False,
                                 dica, None)

    return (ht_lab, ht_val)
def gera(cpr):
    id_compra = compra.obtem_identificador(cpr)
    ht_titulo = html_label.gera("Selecione o método de pagamento", ": ")
    ht_opcoes = \
      html_botao_radio.gera("metodo", "paypau",   "PayPau")      + "<br/>" + \
      html_botao_radio.gera("metodo", "mrcard",   "MonsterCard") + "<br/>" + \
      html_botao_radio.gera("metodo", "boleto",   "Boleto")      + "<br/>" + \
      html_botao_radio.gera("metodo", "deposito", "Depósito")    + "<br/>" + \
      html_botao_radio.gera("metodo", "bois",     "Bois gordos") + "<br/>" + \
      html_botao_radio.gera("metodo", "balas",    "Balinhas")

    ht_submit = html_botao_submit.gera("Alterar", "alterar_pagamento",
                                       {'id_compra': id_compra}, '#55ee55')

    ht_campos = \
      ht_titulo + "<br/>" + \
      "" + "<br/>" + \
      ht_opcoes + "<br/>" + \
      "" + "<br/>" + \
      ht_submit
    return html_form.gera(ht_campos)
def gera(rotulo, nome, val_ini, editavel, obrigatorio, dica, cmd):
    ht_rotulo = html_label.gera(rotulo, ": ")
    ht_linhas = " rows=\"" + "10" + "\""
    ht_colunas = " cols=\"" + "60" + "\""
    ht_tamanho = " maxlength=\"" + "6000" + "\""
    ht_nome = " name=\"" + nome + "\""
    ht_id = " id=\"" + nome + "\""

    if val_ini != None and dica != None:
        erro_prog("{val_ini} e {dica} são mutuamente exclusivos")

    ht_obrigatorio = (" required" if obrigatorio else "")
    if not editavel:
        ht_readonly = " readonly"
        ht_estilo = "style=\"background-color:#bcbcbc;\""
    else:
        ht_readonly = ""
        ht_estilo = " style=\"background-color:#ffffff\""

    ht_dica = (" placeholder=\"" + dica + "\"" if dica != None else "")
    ht_cmd = (" onchange=\"window.location.href=" + cmd +
              "\"" if cmd != None else "")
    ht_textarea = ht_rotulo + \
      "<textarea" + \
        ht_linhas + \
        ht_colunas + \
        ht_tamanho + \
        ht_nome + \
        ht_id + \
        ht_readonly + \
        ht_dica + \
        ht_cmd + \
        ht_obrigatorio + \
        ht_estilo + \
      ">" + (val_ini if val_ini != None else "") + "</textarea>"
    return ht_textarea
def cria_form_completo():
    linhas = [].copy()

    # cria campo de texto com valor inicial
    ht_rotulo = html_label.gera("campo de texto", ": ")
    ht_campo = html_input.gera(None, "text", "texto1", "blabla", None, True,
                               True, None, None)
    linhas.append((
        ht_rotulo,
        ht_campo,
    ))

    # cria campo de texto sem valor inicial, com dica
    ht_rotulo = html_label.gera("campo de texto", ": ")
    ht_campo = html_input.gera(None, "text", "texto2", None, None, True, False,
                               "Lorem ipusm", None)
    linhas.append((
        ht_rotulo,
        ht_campo,
    ))

    # cria campo de senha
    ht_rotulo = html_label.gera("campo de senha", ": ")
    ht_campo = html_input.gera(None, "password", "senha", None, None, True,
                               True, None, None)
    linhas.append((
        ht_rotulo,
        ht_campo,
    ))

    # cria campo numerico
    ht_rotulo = html_label.gera("campo numerico", ": ")
    ht_campo = html_input.gera(None, "number", "pernas", "17", "5", True,
                               False, None, None)
    linhas.append((
        ht_rotulo,
        ht_campo,
    ))

    # cria campo escondido
    ht_rotulo = html_label.gera("campo escondido", ": ")
    ht_campo = html_input.gera(None, "hidden", "segredo", "boo", None, True,
                               False, None, None)
    linhas.append((
        ht_rotulo,
        ht_campo,
    ))

    # Monta a tabela com os fragmentos HTML:
    ht_table = html_table.gera(linhas, ["TIPO", "ELEMENTO"])

    # cria botao de interacao com o formulario
    ht_botao = html_botao_submit.gera("Botao", 'url test', None, '#55ee55')

    # counteudo do formulario
    ht_campos = \
      ht_table + \
      ht_botao

    # cria formulario de teste
    formulario = html_form.gera(ht_campos)
    return formulario
예제 #9
0
import utils_testes


def testa(rotulo, *args):
    """Testa {funcao(*args)}, grava resultado
    em "testes/saida/{modulo}.{funcao}.{rotulo}.html"."""

    modulo = html_table
    funcao = modulo.gera
    frag = True  # {True} se for apenas um fragmento HTML, {False} se for página completa.
    pretty = False  # Se {True}, formata HTML para legibilidate (mas introduz brancos nos textos).
    utils_testes.testa_gera_html(modulo, funcao, rotulo, frag, pretty, *args)


linhas = [].copy()

label_de_teste_input = html_label.gera("Teste das funcionalidades de html_table, coloque um input aqui embaixo", ":")
input_de_teste = html_input.gera(None, "text", "input", None, None, True, False, "Me edite!", None)

label_de_teste_botao = html_label.gera("Aperte o botão para ser redirecionado à URL principal", "!")
botao_de_teste = html_botao_simples.gera("OK", 'principal', None, '#55ee55')

erro_de_teste_html = html_erro.gera("Houston, we've got a problem. Nevermind, this is just a Test!")

cabecalho=("Coluna 1", "Coluna 2")
linhas.append((label_de_teste_input, input_de_teste))
linhas.append((label_de_teste_botao, botao_de_teste))
linhas.append((erro_de_teste_html, botao_de_teste))

testa("Teste", linhas, cabecalho)
def gera(rotulo, tipo, nome, val_ini, val_min, editavel, obrigatorio, dica,
         cmd):
    assert type(tipo) is str
    assert type(nome) is str
    assert val_ini == None or type(val_ini) is str
    assert val_min == None or type(val_min) is str
    assert type(editavel) is bool
    assert type(obrigatorio) is bool

    # Parâmetros ignorados para campos não visíveis ou não editáveis:
    if tipo == "hidden":
        editavel = False
        rotulo = None
    if not editavel:
        obrigatorio = False
        dica = None
        val_min = None

    ht_tipo = " type =\"" + tipo + "\""
    ht_nome = " name=\"" + nome + "\""

    # Inputs de tipo "radio" precisam de "id" diferenciado pelo valor:
    if (tipo == "radio") and (val_ini != None):
        ht_id = " id=\"" + nome + "." + val_ini + "\""
    else:
        ht_id = " id=\"" + nome + "\""
    ht_rotulo = html_label.gera(rotulo, ": ")

    if val_ini != None and dica != None:
        erro_prog("{val_ini} e {dica} são mutuamente exclusivos")

    ht_val_ini = (" value =\"" + str(val_ini) +
                  "\"" if val_ini != None else "")
    if val_ini == 'on' and tipo == 'checkbox':
        ht_val_ini += ' checked '

    if tipo == "number" and val_min != None:
        ht_val_min = " min=\"" + val_min + "\""
    else:
        ht_val_min = ""

    ht_obrigatorio = (" required" if obrigatorio else "")
    if not editavel:
        ht_readonly = " readonly"
        if tipo == "checkbox":
            # Checkbox precisa de "disabled" também?  Não basta "readonly"?
            ht_readonly += " disabled"
        ht_estilo = " style=\"border-style:none;background:none;\""
    else:
        ht_readonly = ""
        ht_estilo = " style=\"background-color:#ffffff\""
    ht_dica = (" placeholder=\"" + dica + "\"" if dica != None else "")
    ht_cmd = (" onchange=\"window.location.href=" + cmd +
              "\"" if cmd != None else "")
    ht_input = ht_rotulo + \
      "<input" + \
        ht_tipo + \
        ht_nome + \
        ht_id + \
        ht_val_ini + \
        ht_val_min + \
        ht_readonly + \
        ht_dica + \
        ht_cmd + \
        ht_obrigatorio + \
        ht_estilo + \
      "/>"
    return ht_input
def gera(ses, usr, atrs, erros):

    # Obtem usuário da sessão, determina privilégios:
    usr_ses = None if ses == None else sessao.obtem_usuario(ses)
    if usr_ses == None:
        # Usuário que pediu não está logado:
        admin = False
        mesmo = False
    else:
        assert type(usr_ses) is usuario.Objeto_Usuario
        admin = usuario.obtem_atributo(usr_ses, "administrador")
        mesmo = (usr_ses == usr)

    if atrs == None: atrs = {}.copy()  # Por via das dúvidas.

    ht_submit = ""
    ht_bt_cancel = ""
    if usr == None:
        # Cadastramento de novo usuário:
        id_usr = None
        ht_submit += html_botao_submit.gera("Cadastrar", "cadastrar_usuario",
                                            None, "#ff0000")
        titulo = "Novo usuário"
    else:
        # Visualização/alteração de usuário existente:
        assert usr_ses != None, "operação não autorizada sem login"
        assert admin or mesmo, "usuário não está autorizado a efetuar esta operação"
        assert type(usr) is usuario.Objeto_Usuario
        id_usr = usuario.obtem_identificador(usr)
        assert id_usr != None  # Paranóia.

        if mesmo:
            titulo = f"Sua conta"
        else:
            titulo = f"Usuário {id_usr}"

        # Completa {atrs} com atributos de {usr}:
        atrs_usr = usuario.obtem_atributos(usr)
        assert atrs_usr != None  # Paranóia
        for ch, val in atrs_usr.items():
            if not ch in atrs: atrs[ch] = val

        # Botoes de ação:
        ht_submit += html_botao_submit.gera("Alterar", "alterar_usuario", None,
                                            "#ff0000")

    ht_bt_cancel = html_botao_simples.gera("Voltar", 'principal', None,
                                           "#ff2200")

    ht_titulo = "<h2>" + titulo + "</h2>"

    # Cria formulário:
    ht_form = html_form_dados_de_usuario.gera(id_usr, atrs, admin, ht_submit)

    # Botoes adicionais:
    ht_bt_linhas = [].copy()
    if usr != None and not mesmo:
        # Botões para administrador ver objetos associados a usuário:
        args_bt = {'id': id_usr}
        estilo_n = "font-family:\"Courier\";font-size:20;"

        n_compras = len(usuario.compras_abertas(usr))
        ht_n_compras = html_span.gera(estilo_n, str(n_compras))
        ht_bt_compras = html_botao_simples.gera("Ver compras",
                                                "ver_compras_de_usuario",
                                                args_bt, '#eeee55')
        ht_bt_linhas.append((
            html_label.gera("Compras abertas", ":"),
            ht_n_compras,
            ht_bt_compras,
        ))

        n_sessoes = len(usuario.sessoes_abertas(usr))
        ht_n_sessoes = html_span.gera(estilo_n, str(n_sessoes))
        ht_bt_sessoes = html_botao_simples.gera("Ver sessões",
                                                "ver_sessoes_de_usuario",
                                                args_bt, '#eeee55')
        ht_bt_linhas.append((
            html_label.gera("Sessoes abertas", ":"),
            ht_n_sessoes,
            ht_bt_sessoes,
        ))

        n_poltronas = len(usuario.poltronas_abertas(usr))
        ht_n_poltronas = html_span.gera(estilo_n, str(n_poltronas))
        ht_bt_poltronas = html_botao_simples.gera("Ver poltronas",
                                                  "ver_poltronas_de_usuario",
                                                  args_bt, '#eeee55')
        ht_bt_linhas.append((
            html_label.gera("Poltronas abertas", ":"),
            ht_n_poltronas,
            ht_bt_poltronas,
        ))

    ht_bts_ver_coisas = html_table.gera(ht_bt_linhas, (
        "",
        "",
    ))

    ht_conteudo = \
      ht_titulo + \
      ht_form + "<br/>\n" + \
      ht_bts_ver_coisas + "<br/>" + \
      ht_bt_cancel

    pag = html_pag_generica.gera(ses, ht_conteudo, erros)
    return pag