liquido
Version:
Conjunto de ferramentas para desenvolvimento de aplicações para a internet 100% em português
214 lines • 14.4 kB
JavaScript
;
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