Skip to content

brunoporto/page_stack

Repository files navigation

PageStack

Code Climate

Essa GEM fornece a possibilidade de navegação de paǵinas sobrepostas, facilitando assim a abertura de novas páginas em perder o conteúdo anterior.

Requisitos

  • Rails 4.2+
  • jQuery 2+
  • Remotipart (Envio de formulário por Ajax)

Instalação

Adicione essa linha no Gemfile do projeto:

gem 'page_stack'

Instale a gem utilizando o comando abaixo no diretório raiz da aplicação:

$ bundle install

Adicione no seu arquivo application_controller.rb a seguinte configuração:

class ApplicationController < ActionController::Base
  include PageStack
  layout :pagestack_layout 
end

Adicione a seguinte linha no seu arquivo application.css:

*= require pagestack

Adicione a seguinte linha no seu arquivo application.js:

//= require pagestack
//= require jquery.remotipart

Para inicializar o plugin você utilizará o código abaixo:

var pagestack = new PageStack().init();

Seus eventos são baseados em delegator do jQuery e estão vinculados ao document.

Configuração

Você possui três parâmetros de configuração para o pagestack:

  • form : (padrão: 'form') Informe o elemento form que ele deverá o recurso "submit" via AJAX.
  • loading : (padrão: true) Informa se o ícone de carregando será exibido para informar ao usuário o progresso de ações AJAX.
  • closeOnEsc : (padrão: false) Permite fechar o pagestack ativo com a tecla ESC
  • debug : (padrão: false) Exibe as mensagens de testes no console.log
var pagestack = new PageStack({
    form: 'form',
    loading: true,
    closeOnEsc: false,
    debug: false
}).init();

Utilização

Você pode abrir multiplas páginas sobrepostas apenas configurando os links em cada página.

Para indicar que um link abrirá uma pagestack adicione a classe pagestack ao seu elemento:

    = link_to "Abrir Página", root_path, class: 'pagestack'

Para indicar o título da nova página utilize o atributo data pagestack-title:

    = link_to "Abrir Página", root_path, class: 'pagestack', data: {'pagestack-title' => 'Título da minha página sobreposta'}

Caso você abra uma sub-página sobreposta e precise que ao fechar essa página você recarregue o conteúdo da página origem você precisa indicar o atributo data pagestack-refresh-parent-onclose:

    = link_to "Abrir Página", root_path, class: 'pagestack', data: {'pagestack-refresh-parent-onclose' => true}

Caso você precise alterar o conteúdo da própria pagestack (self) ao invés de abrir uma nova você pode informar o atributo data-pagestack-replace-content:

    = link_to "Abrir Página", root_path, class: 'pagestack', data: {'pagestack-refresh-replace-content' => true}

Para ativar/desativar o fechamento do pagestack ativo através da tecla ESC utilize o atributo data-pagestack-close-esc. O padrão é false:

    = link_to "Abrir Página", root_path, class: 'pagestack', data: {'pagestack-esc-close' => 'true'}
    = link_to "Abrir Página", root_path, class: 'pagestack', data: {'pagestack-esc-close' => 'false'}

Eventos Javascript

Ao iniciar o plugin você recebe o retorno e pode atribuir a uma variável (Ex: var pagestack no código de instalação):

var pagestack = PageStack().init();
var current_page = pagestack.getItem(elemento_dentro_do_pagestack);
pagestack.close(elemento_dentro_do_pagestack);
  • init: Método que inicia o pagestack e atriu os eventos
  • close(elemento): Fecha o pagestack de um elemento indicado (pode ser qualquer elemento dentro daquele pagestack, inclusive o próprio elemento pagestack).
  • getItem(elemento): Retorna o elemento "container" do pagestack a partir de um elemento interno indicado.

Comportamento

Formulário

  • Receberá por padrão o atributo data-pagestack-replace-content para carregar o conteúdo de retorno na própria página do formulário.
  • Receberá por padrão o atributo rails data-remote para processamento o "submit" por AJAX através do plugin jquery.remotipart.

Links

  • Os links com method=delete (Links de exclusão) receberão por padrão o atributo rails data-remote para processamento via AJAX.

Referências