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
def gera_botoes_linha_2(): """Gera uma lista de fragmentos de HTML com os botões da linha 2 do menu geral. Estes botões são mostrados apenas se o usuário está logado e é um administrador.""" ht_input = html_input.gera(None, "text", "id", None, None, True, True, "Id do objeto", None) ht_bt_submit = html_botao_submit.gera("Checar Objeto", "ver_objeto", None, '#ffdd22') form_content = \ ht_input + \ ht_bt_submit ht_input2 = html_input.gera(None, "text", "passageiro", None, None, True, True, "Nome ou documento", None) ht_bt_submit2 = html_botao_submit.gera("Buscar passageiro", "buscar_compras", None, '#ffdd22') form_content2 = \ ht_input2 + \ ht_bt_submit2 botoes = ( html_botao_simples.gera("Acrescentar trecho", "solicitar_pag_acrescentar_trecho", None, '#ffdd22'), html_botao_simples.gera("Trafego", "comando_relatorio_de_trafego", None, '#FF00FF'), html_form.gera(form_content), html_form.gera(form_content2) # html_botao_simples.gera("Alterar trecho", "solicitar_pag_alterar_trecho", None, '#ffdd22'), # html_form_passageiros.gera(), # html_form_buscar_objeto.gera(), ) return botoes
def gera_input(tipo, chave, val, vmin, dica, editavel, obrigatorio): """Retorna o HTML de um elemento <input> ou <textarea>...</textarea>. O elemento terá o dado {tipo} ("text", "password", etc.), nome {chave}, valor inicial {val}, valor mínimo {vmin}, e a {dica} especificada (se {val} for {None}). Se {tipo} for "textarea", gera um <textarea> em vez de <input>. O valor inicial {val} é convertido para string de maneira adequada ao seu tipo python. Em particular, valor {float} é formatado com 2 casas depois do ponto decimal. Se a chave for 'senha', não mostra o {val}. Se {tipo} não for "number", ignora {vmin}. """ if chave == 'senha': val = None if chave == 'conf_senha': val = None # Converte val para HTML: if val == None: ht_valor = None elif type(val) is str: ht_valor = val elif type(val) is bool: ht_valor = ('on' if val else 'off') elif type(val) is float: ht_valor = ("%.2f" % val) elif type(val) is int: ht_valor = ("%d" % val) else: erro_prog("valor inválido = \"" + str(val) + "\"") # Converte o valor mínimo para HTML: if tipo == 'number': ht_vmin = str(vmin) else: ht_vmin = None # Dica e valor inicial são mutuamente exclusivos: if ht_valor == None: ht_dica = dica else: ht_dica = None # Cozinhada: tipo "textarea" é um elemento diferente. if tipo != "textarea": ht_campo = html_input.gera(None, tipo, chave, ht_valor, ht_vmin, editavel, obrigatorio, ht_dica, None) else: ht_campo = html_textarea.gera(None, chave, ht_valor, editavel, obrigatorio, ht_dica, None) return ht_campo
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(texto, URL, args, cor_fundo): args_html = "" if args != None: # Acrescenta argumentos ao {args_html}: for key, val in args.items(): kv_html = html_input.gera(None, 'hidden', key, val, None, False, False, None, None) args_html += kv_html # O botão propriamente dito: estilo = html_estilo_de_botao.gera(cor_fundo) html = args_html + \ "<input" + \ " type=\"submit\"" + \ " style=\"" + estilo + "\n\"" + \ " formaction=\"" + URL + "\"" + \ " value=\"" + texto + "\"" + \ "/>" return html
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 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
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)