Executando verificação de segurança...
4

Pitch: Jevity - um framework javascript 👨‍💻

Logo

Introdução

Um framework Javascript simples para construir layouts simples, facilitar as requisições e também servir como um utility tool para operações repetitivas. Este projeto surgiu com o intuito de ser um laboratório de ideias e conceitos.

Minha ideia é tentar desenvolver itens que julgo necessários e interessantes de outros frameworks aqui nesse. Um dos maiores exemplos é fazer uma requisição ao clicar num botão e já retornar o conteúdo direto numa div especificada pelo seu ID por exemplo.

Um pouco do uso

Para criar um componente basta adicionar o atributo jevity ao elemento HTML. Exemplo de um botão:

<button jevity>Clique aqui</button>

Após isso, para dar dinamismo a esse botão basta adicionar mais alguns atributos. Para um melhor exemplo, vamos ao clicar no botão, fazer uma requisição GET e injetar o conteúdo do retorno em uma div:

<div class="card">
    <div class="card-body" id="content">
        Nenhum conteúdo.
    </div>
    <div class="card-footer">
        <button 
            class="btn btn-primary" 
            jevity
            j-event-type="click"
            j-url="https://dummyjson.com/products/2"
            j-method="GET"
            j-target="#content"
            j-template="t1">
            Carregar
        </button>
    </div>
</div>

Sobre cada atributo:

  • j-event-type se refere a qualquer tipo válido de evento (click, mouseover, blur, focus, etc);
  • j-url se refere a URL em si que você pretende fazer a requisição;
  • j-method é onde é definido o verbo HTTP (POST, GET, PUT, PATCH, etc);
  • j-target é definido o selector para onde o retorno vai ser injetado, exatamente como funciona a função nativa 'querySelector' do Javascript;
  • j-template é o ID atribuído na função addTemplate que nesse exemplo foi 't1' como pode ser mostrado abaixo:
function testTemplate(props){
    console.log(props);
    return `
        <p class="fw-bold">#${props.id} - ${props.title}</p>
        <p>${props.description}</p>
    `;
}

(async () => {
    const jevity = new Jevity();   
    
    jevity.addTemplate('t1', testTemplate);
    
    jevity.start();
})();

A função addTemplate é pertencente ao framework e o primeiro parâmetro se refere ao ID, que pode ser tanto um número quanto um texto que faça você se lembrar rapidamente. Ao fazer a requisição e definir esse template, será enviado como parâmetro o objeto de resposta, como podemos ver no parâmetro props que recebe todo o retorno da API definida nesse exemplo.

Uma ideia que estou testando no momento

Na questão de templating estou testando no momento apenas a utilização da tag template e seu conteúdo ter propriedades dentro de chaves para fazer o bind direto com o retorno dos dados de uma API.

<div class="card">
    <div class="card-body" id="content">
        Nenhum conteúdo
        <template>
            <p class="fw-bold">#{id} - {title}</p>
            <p>{description}</p>
            <p class="text-muted">R$ {price}</p>
        </template>
    </div>
    <div class="card-footer">
        <button 
            class="btn btn-primary" 
            jevity
            j-event-type="click"
            j-url="https://dummyjson.com/products/2"
            j-method="GET"
            j-target="#content"
        >
            Carregar
        </button>
    </div>
</div>

Série de vídeos sobre o desenvolvimento

Criei um primeiro vídeo falando sobre o framework: https://www.youtube.com/watch?v=UiwY6JKIcZk

Minha ideia é desenvolver uma série de vídeos conforme vou evoluindo a ideia e conceitos. Inclusive se tiver discussões aqui com a comunidade pretendo linkar os assuntos aos vídeos. Pretendo com esse projeto evoluir meu conhecimento, trocar conhecimentos em si e desenvolver algo colaborativo e útil.

Repositório do projeto

Coloquei como fonte, mas o link pode ser acessado por aqui também: https://github.com/rodrigocborges/jevity

Observação: muita coisa pode mudar, muitas ideias e lógicas estão sendo testadas, principalmente na parte de templating, se uso por funções Javascript e/ou diretamente no HTML através da tag template por exemplo.

Inclusive, até o presente momento não surgiu uma versão "usável" oficial, onde o código estará otimizado e pronto para um único import e já funcionar perfeitamente!

Carregando publicação patrocinada...
2

Achei a ideia dos métodos via botão promissora para pequenos projetos e testes rápidos.

A ideia é ser uma lib ou crescer e se tornar um framework?

1

Com certeza, bem isso mesmo para pequenos projetos e testes de ideias rápido!

A ideia é começar como uma lib e ver o limite e as funcionalidades para chegar a um ponto de ser um framework. Mas claro, isso com o tempo e os devidos ajustes e necessidades.