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(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
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
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
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