UNPKG

liquido

Version:

Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português

214 lines 14.4 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || (function () { var ownKeys = function(o) { ownKeys = Object.getOwnPropertyNames || function (o) { var ar = []; for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k; return ar; }; return ownKeys(o); }; return function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]); __setModuleDefault(result, mod); return result; }; })(); Object.defineProperty(exports, "__esModule", { value: true }); exports.GeradorVisoes = void 0; const sistemaArquivos = __importStar(require("fs")); const caminho = __importStar(require("path")); const flexoes_1 = require("@designliquido/flexoes"); class GeradorVisoes { constructor() { this.indentacao = 4; } /** * Cria uma nova visão, de acordo com o nome do controlador e o tipo de visão desejado. * @param {string} nomeControlador O nome do controlador. * @param {TipoVisao} tipoVisao O tipo da visão. * @returns O caminho completo onde a visão foi criada. */ criarNovaVisao(nomeControlador, declaracaoModelo, tipoVisao) { let caminhoVisao; let corpo; let cabecalho; const diretorioVisoes = caminho.join(process.cwd(), 'visoes', nomeControlador); switch (tipoVisao) { case 'selecionarTudo': caminhoVisao = caminho.join(diretorioVisoes, 'inicial.lmht'); cabecalho = " ".repeat(this.indentacao) + `<cabeça><título>Listagem de Entidades ${declaracaoModelo.simbolo.lexema}</título></cabeça>\n`; corpo = `${" ".repeat(this.indentacao)}<corpo>\n${this.corpoInicial(declaracaoModelo)}\n${" ".repeat(this.indentacao)}</corpo>\n`; break; case 'selecionarUm': caminhoVisao = caminho.join(diretorioVisoes, 'detalhes.lmht'); cabecalho = " ".repeat(this.indentacao) + `<cabeça><título>Detalhes de ${declaracaoModelo.simbolo.lexema}</título></cabeça>\n`; corpo = `${" ".repeat(this.indentacao)}<corpo>\n${this.corpoDetalhes(declaracaoModelo)}\n${" ".repeat(this.indentacao)}</corpo>\n`; break; case 'adicionar': caminhoVisao = caminho.join(diretorioVisoes, 'adicionar.lmht'); cabecalho = " ".repeat(this.indentacao) + `<cabeça><título>Adicionar ${declaracaoModelo.simbolo.lexema}</título></cabeça>\n`; corpo = `${" ".repeat(this.indentacao)}<corpo>\n${this.corpoAdicionar(declaracaoModelo)}\n${" ".repeat(this.indentacao)}</corpo>\n`; break; case 'editar': caminhoVisao = caminho.join(diretorioVisoes, 'editar.lmht'); cabecalho = " ".repeat(this.indentacao) + `<cabeça><título>Editar ${declaracaoModelo.simbolo.lexema}</título></cabeça>\n`; corpo = `${" ".repeat(this.indentacao)}<corpo>\n${this.corpoEditar(declaracaoModelo)}\n${" ".repeat(this.indentacao)}</corpo>\n`; break; case 'excluir': caminhoVisao = caminho.join(diretorioVisoes, 'excluir.lmht'); cabecalho = " ".repeat(this.indentacao) + `<cabeça><título>Confirmar Exclusão de ${declaracaoModelo.simbolo.lexema}</título></cabeça>\n`; corpo = `${" ".repeat(this.indentacao)}<corpo>\n${this.corpoConfirmarExclusao(declaracaoModelo)}\n${" ".repeat(this.indentacao)}</corpo>\n`; break; } const conteudoVisao = `<lmht>\n${cabecalho}${corpo}</lmht>`; sistemaArquivos.writeFileSync(caminhoVisao, conteudoVisao); return caminhoVisao; } /** * Função que gera o corpo de `inicial.lmht` de cada visão gerada por linha de comando. * @param {Classe} declaracaoModelo A declaração do modelo de dados, com suas propriedades e definições. * @returns {string} Um trecho em LMHT com a estrutura do corpo da página. */ corpoInicial(declaracaoModelo) { // Colunas de cabeçalho const colunasCabecaTabela = []; for (const propriedade of declaracaoModelo.propriedades) { colunasCabecaTabela.push(" ".repeat(this.indentacao * 5) + `<célula>${propriedade.nome.lexema}</célula>`); } const linhaCabecaTabela = " ".repeat(this.indentacao * 4) + '<linha>\n' + colunasCabecaTabela.reduce((acumulador, elemento) => acumulador + '\n' + elemento) + '\n' + " ".repeat(this.indentacao * 5) + `<célula>Ações</célula>` + '\n' + " ".repeat(this.indentacao * 4) + '</linha>'; const cabecaTabela = `${" ".repeat(this.indentacao * 3)}<cabeça-tabela>\n${linhaCabecaTabela}\n${" ".repeat(this.indentacao * 3)}</cabeça-tabela>`; // Colunas do corpo da tabela const colunasCorpoTabela = []; for (const propriedade of declaracaoModelo.propriedades) { colunasCorpoTabela.push(" ".repeat(this.indentacao * 5) + `<célula>{{${propriedade.nome.lexema}}}</célula>`); } const linhaCorpoTabela = " ".repeat(this.indentacao * 4) + '<linha>\n' + colunasCorpoTabela.reduce((acumulador, elemento) => acumulador + '\n' + elemento) + '\n' + " ".repeat(this.indentacao * 5) + `<célula>` + '\n' + `${" ".repeat(this.indentacao * 6)}<ligação destino="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}/{{id}}">Detalhes</ligação> |` + '\n' + `${" ".repeat(this.indentacao * 6)}<ligação destino="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}/{{id}}/editar">Editar</ligação> |` + '\n' + `${" ".repeat(this.indentacao * 6)}<ligação destino="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}/{{id}}/excluir">Excluir</ligação>` + `\n${" ".repeat(this.indentacao * 5)}</célula>` + '\n' + " ".repeat(this.indentacao * 4) + '</linha>'; const corpoTabela = `${" ".repeat(this.indentacao * 3)}<corpo-tabela>\n` + `${" ".repeat(this.indentacao * 3)}{{#cada linhas}}\n` + `${linhaCorpoTabela}\n` + `${" ".repeat(this.indentacao * 3)}{{/cada}}\n` + `${" ".repeat(this.indentacao * 3)}</corpo-tabela>`; return `${" ".repeat(this.indentacao * 2)}<tabela>\n${cabecaTabela}\n${corpoTabela}\n${" ".repeat(this.indentacao * 2)}</tabela>`; } geracaoComumCamposDetalhes(declaracaoModelo, prefixo = '') { const listaPropriedades = []; for (const propriedade of declaracaoModelo.propriedades) { listaPropriedades.push(" ".repeat(this.indentacao * 3) + `<termo>${propriedade.nome.lexema}</termo>`); listaPropriedades.push(" ".repeat(this.indentacao * 3) + `<definição>{{${prefixo}${propriedade.nome.lexema}}}</definição>`); } return listaPropriedades.reduce((acumulador, elemento) => acumulador + '\n' + elemento); } /** * Função que gera o corpo de `detalhes.lmht` de cada visão gerada por linha de comando. * * As rotas geradas por `GeradorRotas` (ex.: `resposta.lmht("detalhes", {"${nomeSingular}": registro})`) * aninham o registro sob o nome singular do modelo. Os placeholders aqui precisam * do mesmo prefixo (`{{nomeSingular.campo}}`), senão o Handlebars não encontra os valores. * @param {Classe} declaracaoModelo A declaração do modelo de dados, com suas propriedades e definições. * @returns {string} Um trecho em LMHT com a estrutura do corpo da página. */ corpoDetalhes(declaracaoModelo) { const nomeSingular = declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt'); const prefixo = `${nomeSingular}.`; const titulo = `${" ".repeat(this.indentacao * 2)}<titulo1>Detalhes de ${declaracaoModelo.simbolo.lexema}</titulo1>\n`; const relacaoPropriedades = `${" ".repeat(this.indentacao * 2)}<lista-definições>\n` + this.geracaoComumCamposDetalhes(declaracaoModelo, prefixo) + `\n${" ".repeat(this.indentacao * 2)}</lista-definições>\n\n` + `${" ".repeat(this.indentacao * 2)}<ligação destino="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}/{{${prefixo}id}}/editar">Editar</ligação> |\n` + `${" ".repeat(this.indentacao * 2)}<ligação destino="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}/{{${prefixo}id}}/excluir">Excluir</ligação>\n`; return `${titulo}${relacaoPropriedades}`; } geracaoComumCamposFormulario(declaracaoModelo, prefixo = '') { const listaPropriedades = []; for (const propriedade of declaracaoModelo.propriedades) { listaPropriedades.push(" ".repeat(this.indentacao * 4) + `<etiqueta para="${propriedade.nome.lexema}">${propriedade.nome.lexema}</etiqueta>`); listaPropriedades.push(" ".repeat(this.indentacao * 4) + `<campo tipo="texto" id="${propriedade.nome.lexema}" nome="${propriedade.nome.lexema}" valor="{{${prefixo}${propriedade.nome.lexema}}}" />`); } return listaPropriedades.reduce((acumulador, elemento) => acumulador + '\n' + elemento); } /** * Função que gera o corpo de `adicionar.lmht` de cada visão gerada por linha de comando. * @param {Classe} declaracaoModelo A declaração do modelo de dados, com suas propriedades e definições. * @returns {string} Um trecho em LMHT com a estrutura do corpo da página. */ corpoAdicionar(declaracaoModelo) { const titulo = `${" ".repeat(this.indentacao * 2)}<titulo1>Adicionar ${declaracaoModelo.simbolo.lexema}</titulo1>\n`; const relacaoPropriedades = `${" ".repeat(this.indentacao * 3)}<campos>\n` + this.geracaoComumCamposFormulario(declaracaoModelo) + `\n${" ".repeat(this.indentacao * 3)}</campos>\n`; const formulario = `${" ".repeat(this.indentacao * 2)}<formulário método="POST" ação="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}">\n` + `${relacaoPropriedades}` + `\n\n${" ".repeat(this.indentacao * 3)}<campo tipo="enviar" valor="Adicionar" />\n` + `${" ".repeat(this.indentacao * 2)}</formulário>\n`; return `${titulo}${formulario}`; } /** * Função que gera o corpo de `editar.lmht` de cada visão gerada por linha de comando. * @param {Classe} declaracaoModelo A declaração do modelo de dados, com suas propriedades e definições. * @returns {string} Um trecho em LMHT com a estrutura do corpo da página. */ corpoEditar(declaracaoModelo) { const nomeSingular = declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt'); const prefixo = `${nomeSingular}.`; const titulo = `${" ".repeat(this.indentacao * 2)}<titulo1>Editar ${declaracaoModelo.simbolo.lexema}</titulo1>\n`; const relacaoPropriedades = `${" ".repeat(this.indentacao * 3)}<campos>\n` + `${" ".repeat(this.indentacao * 4)}<campo tipo="escondido" id="id" nome="id" valor="{{${prefixo}id}}" />\n` + this.geracaoComumCamposFormulario(declaracaoModelo, prefixo) + `\n\n${" ".repeat(this.indentacao * 4)}<campo tipo="enviar" valor="Atualizar" />\n` + `\n${" ".repeat(this.indentacao * 3)}</campos>\n`; const formulario = `${" ".repeat(this.indentacao * 2)}<formulário método="POST" ação="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}/{{${prefixo}id}}/editar">\n` + `${relacaoPropriedades}` + `${" ".repeat(this.indentacao * 2)}</formulário>\n`; return `${titulo}${formulario}`; } /** * Função que gera o corpo de `excluir.lmht` de cada visão gerada por linha de comando. * @param {Classe} declaracaoModelo A declaração do modelo de dados, com suas propriedades e definições. * @returns {string} Um trecho em LMHT com a estrutura do corpo da página. */ corpoConfirmarExclusao(declaracaoModelo) { const nomeSingular = declaracaoModelo.simbolo.lexema.toLocaleLowerCase('pt'); const prefixo = `${nomeSingular}.`; const titulo = `${" ".repeat(this.indentacao * 2)}<titulo1>Confirmar Exclusão de ${declaracaoModelo.simbolo.lexema}</titulo1>\n`; const mensagemConfirmacaoExclusao = `${" ".repeat(this.indentacao * 2)}<titulo3>Tem certeza de que deseja excluir o registro abaixo?</titulo3>\n`; const relacaoPropriedades = `${" ".repeat(this.indentacao * 2)}<lista-definições>\n` + this.geracaoComumCamposDetalhes(declaracaoModelo, prefixo) + `\n${" ".repeat(this.indentacao * 2)}</lista-definições>\n`; const formulario = `${" ".repeat(this.indentacao * 2)}<formulário método="POST" ação="/${(0, flexoes_1.pluralizar)(declaracaoModelo.simbolo.lexema.toLocaleLowerCase())}/{{${prefixo}id}}/excluir">\n` + `${" ".repeat(this.indentacao * 3)}<campo tipo="escondido" id="id" nome="id" valor="{{${prefixo}id}}" />\n` + `${" ".repeat(this.indentacao * 3)}<campo tipo="enviar" valor="Confirmar Exclusão" />\n` + `${" ".repeat(this.indentacao * 2)}</formulário>\n`; return `${titulo}${mensagemConfirmacaoExclusao}${relacaoPropriedades}${formulario}`; } } exports.GeradorVisoes = GeradorVisoes; //# sourceMappingURL=gerador-visoes.js.map