[Gastosabertos-dev] ao
Luiz Armesto
luiz.armesto em gmail.com
Segunda Março 9 23:47:04 UTC 2015
JFYI tive erro 500 no servidor no endpoint api/v1/receita/info também.
[]'s
2015-03-06 23:51 GMT-03:00 Andres MRM <andres em inventati.org>:
>
> Agora está funcionando a paginação e aumentar o número de páginas.
> Não sei se eu que fiz confusão ou se mexi em algo que arrumou isso sem
> querer...
>
>
> Quoting Andres MRM (2015-03-06 18:29:47)
> > Quoting Luiz Armesto (2015-03-06 18:09:47)
> > > Eu troquei a implementação antiga do pubsub pelo PubSubJS[1], daí
> mudou o
> > > formato das mensagens. No lugar de dois pontos agora é um ponto,
> ficando "
> > > pubsub.publish('years.changed', {value: [2012]})"
> >
> > Ah, deu certo! Que legal! =P
> > Consigo alterar o ano dos dados na tabela usando esse comando no console.
> >
> > > A implementação da manipulação da url só trabalha com o fragmento do
> hash, o
> > > que vem depois do #. Então ele simula uma string de query colocando
> "?param=
> > > value" depois do #. Isso por que manipular o conteúdo do hash não faz
> com que a
> > > página seja recarregada, já manipular o a string real de query,
> o "?param=
> > > value" logo após o endereço, antes do #, faz com que o navegador faça
> uma nova
> > > requisição.
> > >
> > >
> > > Quando navega nas páginas ou altera a quantidade de itens não está
> alterando a
> > > parte da URL depois do #? Qual navegador está usando para eu testar
> aqui? Não
> > > está usando alguma versão antiga do js salva no cache?
> >
> > Agora vi que muda a URL sim. Mas não altera a tabela...
> > Uso FF. Testei agora no Chromium e deu na mesma...
> >
> > >
> > > Vou instalar localmente com o mysql e dar uma pesquisada para ver o
> erro da
> > > conexão, mas acho que não tem tantos registros para dar pau numa
> contagem...
> > > sei lá.
> >
> > Concordo...
> > >
> > >
> > >
> > > [1] https://github.com/mroderick/PubSubJS
> > >
> > > 2015-03-06 16:16 GMT-03:00 Andres MRM <andres em inventati.org>:
> > >
> > >
> > > Tive o mesmo tipo de erro (a tabela não abriu).
> > > Pelo que vi nos logs está dando: 'Lost connection to MySQL server
> during
> > > query'
> > > https://gist.github.com/andresmrm/3e2ac724d5c491607f09
> > > Tem vários parecidos com esses lá.
> > > Aparentemente o pau é na hora de 'X-Total-Count':
> revenue_data.count()
> > > Será que é dado demais para ele contar? =P
> > >
> > > Outra coisa, Luiz, o pubsub é para estar funcionado?
> > > Estou abrindo, por exemplo:
> > >
> http://site.gastosabertos.org/receitas/?year=2014&level=2.3#2014/1?page=3&
> > > year=2012&level=2.3
> > > Indo no console e dando:
> > > pubsub.publish('years:changed', {value: [2012]})
> > > Mas ele está retornando 'false'
> > > Apertar os botões da tabela, apesar de fazer duas requisições que
> retornam
> > > 200
> > > OK, não está tendo efeito...
> > > Aumentar o número de páginas da tabela também faz as requisições,
> mas não
> > > altera nada na página...
> > >
> > >
> > > Quoting Luiz Armesto (2015-03-04 13:43:11)
> > > > Aconteceu aqui o problema de não carregar a tabela direito mas
> com uma
> > > causa
> > > > diferente das possibilidades levantadas. No caso o servidor da
> api deu
> > > erro
> > > > 500.
> > > >
> > > > Não consegui reproduzir o erro nem localmente nem no próprio
> servidor
> > > (dando
> > > > reload ou abrindo em outra aba o mesmo endereço da api, com os
> mesmos
> > > > parâmetros. funcionou).
> > > > Precisaria ter acesso ao log do servidor para ver o que houve.
> > > >
> > > >
> > > > []'s
> > > >
> > > > 2015-03-02 23:05 GMT-03:00 Luiz Armesto <luiz.armesto em gmail.com
> >:
> > > >
> > > > 2015-03-02 22:04 GMT-03:00 Edgar Zanella Alvarenga <e em vaz.io
> >:
> > > >
> > > > Ok, vi com mais calma o código agora e seu email
> esclareceu
> > > melhor
> > > > alguns pontos. Estava confuso com os eventos 'page.dt' e
> > > 'length.dt',
> > > > não sabia que eram eventos do próprio DataTables e
> pensei que os
> > > > tinha criado também.
> > > >
> > > >
> > > > É, isso não estava claro mesmo.
> > > >
> > > >
> > > >
> > > > Gostei de como fez, só acho que da linha 85 a 114 ficou
> um pouco
> > > > obfuscated, apesar de entender a razão de querer ter
> feito um
> > > código
> > > > genéricopra lista de parâmetros em 'param'. Acho que
> seria melhor
> > > > ter um subscribe explícito por parâmetro e separar em
> funções
> > > distintas
> > > > cada uma das cláusulas condicionais entre 103 e 107,
> entende, ao
> > > > invése de um setParam genérico.
> > > >
> > > >
> > > > Sobre as clausulas no setParam eu cheguei a fazer separado,
> mas
> > > acabei
> > > > juntando justamente para aprovitar o código de "subscribe"
> genérico
> > > (linhas
> > > > 85-114).
> > > >
> > > > Acho que separar os "subscribe" em dois explícitos para
> "page" e
> > > > "per_page_num" e um genérico (o atual) não teria problema,
> apesar de
> > > > introduzir código parcialmente repetido, mas se melhora a
> leitura e
> > > > compreensão vale a pena.
> > > > O que não dá é para remover completamente o código genérico
> que itera
> > > nas
> > > > chaves dos parâmetros definidos na inicialização do objeto
> senão ele
> > > deixa
> > > > de ser reaproveitável. Ficou um tanto obscuro mesmo, mas
> posso
> > > melhorar com
> > > > um comentário explicando o que o trecho faz e o porquê.
> > > >
> > > >
> > > > Isso deixaria mais claro o código e mais separado a
> lógica a ser
> > > > realizada a cada mudança de parâmetro.
> > > >
> > > > Tirando isso, maravilha, acho legal irmos por esse
> direção, me
> > > parece
> > > > uma solução simples e elegante.
> > > >
> > > > Quanto a dependência com o jquery, sim, devemos colocar
> isso via
> > > > require,
> > > > a idéia é que todo gerenciamento de dependência deja
> feito por
> > > ele,
> > > > então considere esses imports via script como algo que
> vamos ter
> > > > que resolver.
> > > >
> > > >
> > > > blz
> > > >
> > > >
> > > >
> > > > Ah sim, o parâmetro code pro endpoint listrevenue já está
> > > funcionando:
> > > >
> > > >
> http://demo.gastosabertos.org/api/v1/receita/list?code=1.1.2&page
> > > =0&
> > > > per_page_num=10&years=2014
> > > >
> > > > Basta adicionar o code com parte do nível superior cujo
> subníveis
> > > quer
> > > > consultar.
> > > >
> > > >
> > > > Boa, já inclui na tabela.
> > > >
> > > >
> > > >
> > > > E pra finalizar, sobre o Riot, eu só tinha visto o
> observer dele,
> > > mas
> > > > nunca usei e não faço idéia se na prática ele iria nos
> ajudar ou
> > > > complicar
> > > > mais no nosso caso de uso, pelo menos no problema de
> > > sincronização de
> > > > eventos. Eu só fiquei pensando se não era algo já
> resolvido por
> > > um
> > > > desses frameworks da modinha ou libs simples como:
> > > >
> > > > https://github.com/mroderick/PubSubJS
> > > > https://github.com/uxder/Radio
> > > >
> > > > Que talvez evitem que tenhamos muito trabalho em resolver
> > > problemas que
> > > > não são nossa prioridade no momento. Novamente, não
> conheço a
> > > fundo
> > > > nenhuma dessa libs que citei e a única vantagem que vejo
> nelas é
> > > > estarem
> > > > desacopladas do JQuery, caso fossemos pra uma solução
> JQuery
> > > free.
> > > >
> > > >
> > > > Vou ver essas libs, mas de qualquer modo estou usando o
> jQuery para
> > > pub/sub
> > > > com facade, entre outras coisas, para usar uma interface com
> nomes de
> > > > métodos comuns a implementações de pub/sub, então se
> quisermos chutar
> > > o
> > > > jQuery e usar uma lib dedicada será bem tranquilo. Ou
> adaptamos a
> > > facade
> > > > para a nova lib ou, se a interface for a mesma que fiz,
> tiramos a
> > > facade e
> > > > usamos direto a lib.
> > > >
> > > >
> > > >
> > > > Mas entendo o ponto de que estamos tentando sincronizar
> > > componentes de
> > > > libs diferentes, com arquiteturas diferentes e no final
> se
> > > fossemos pra
> > > > uma solução "mágica" acabaríamos tendo que fazer vários
> códigos
> > > ao
> > > > redor
> > > > dessas bibliotecas pra conversarem entre si. E fiquei
> pensando na
> > > parte
> > > > pra sincronizar as mudanças nas variáveis com alterações
> no URL,
> > > > leitura
> > > > do URL pros parâmetros nas diferentes visualizações e me
> > > perguntei se
> > > > não tinha uma solução onde ganharíamos tudo isso pronto
> de
> > > lambuja (a
> > > > man
> > > > can dream!).
> > > >
> > > >
> > > > Já enviei o código que estava fazendo em relação a URL
> usando hash e
> > > o pub/
> > > > sub. Se tudo deu certo ao acessar
> http://site.gastosabertos.org/
> > > receitas/#
> > > > 2014/1.1.1?page=7 (e não estiver usando o js velho salvo no
> cache do
> > > > navegador) verá a lista exibindo a página 8 dos impostos de
> 2014. Se
> > > > navegar pelas páginas da tabela a URL deve ser atualizada e
> se usar
> > > os
> > > > botões de back/forward do navegador a tabela deve se
> atualizar junto
> > > com a
> > > > URL. Editar manualmente o ano (para periodo use hifen para
> separar o
> > > ano de
> > > > inicio e de fim) e o código na URL também funciona.
> > > >
> > > >
> > > >
> > > > Enfim, acho uma boa irmos pela direção que tomou, só
> talvez
> > > tornar isso
> > > > mais independente para que seja replicado nas outras
> páginas,
> > > > provavelmente
> > > > fazendo uma biblioteca, RSpubsub (Really Simple PubSub),
> mas esse
> > > não
> > > > precisa
> > > > ser nossa prioridade agora.
> > > >
> > > > Abs,
> > > > E.
> > > >
> > > >
> > > > []'s
> > > >
> > > >
> > > >
> > > > On 02/03/2015 19:27, Luiz Armesto wrote:
> > > >
> > > > 2015-03-02 17:30 GMT-03:00 Edgar Zanella Alvarenga <
> e em vaz.io
> > > [39]>:
> > > >
> > > >
> > > > Oi Luiz, ótimo! Dei uma olhada rápida no seu
> código e fiz
> > > > alguns
> > > > testes.
> > > > Está legal, mas ocorreu mais de uma vez ao
> visitar o
> > > > http://site.gastosabertos.org/receita [1]
> > > >
> > > > que o gráfico drilldown carregou, mas a tabela
> não. Uma
> > > vez
> > > > consegui identificar
> > > > o erro, que foi não conseguir importar o
> Datatables,
> > > talvez o
> > > > servidor deles
> > > > estava fora do ar.
> > > >
> > > >
> > > > Vou verificar isso. Além de problema no servidor
> deles pode
> > > ter
> > > > sido
> > > > timeout do requirejs ou talvez tentou carregar o
> datatables
> > > antes
> > > > do
> > > > jquery (atualmente o jquery está sendo carregado
> direto no
> > > html,
> > > > com
> > > > tag script, mas o datatables via requirejs. Isso
> porque o
> > > jquery já
> > > > estava sendo usado direto sem o requirejs e o
> datatables
> > > identifica
> > > > se
> > > > tem alguma lib de AMD, no caso o requirejs, e se
> registra
> > > direto
> > > > nela,
> > > > não deixando carregar colocando direto uma tag
> script com
> > > ele,
> > > > então
> > > > tive que carregar usando o requirejs. Precisamos
> arrumar
> > > isso, ou
> > > > usar
> > > > requirejs ou não usar, misturar é pedir problemas).
> > > >
> > > >
> > > >
> > > >
> > > > Mas olhando seu código, fiquei encafifado com a
> > > quantidade de
> > > > código
> > > > que escreveu pra registrar os eventos e não
> ficou claro
> > > pra mim
> > > > o
> > > > quão
> > > > fácil será fazer isso sincronizado com o gráfico
> de
> > > barras. Se
> > > > tivermos
> > > > uma forma fácil de utilizar o modelo pusub que
> está
> > > usando
> > > > legal
> > > > sem muito
> > > > biolerplate code, ótimo. Mas fico em dúvida se
> > > utilizarmos uma
> > > > solução
> > > > como o Riot js não seja melhor, pra não termos
> que
> > > resolver
> > > > novamente
> > > > certos problemas.
> > > >
> > > >
> > > > O que você acha? Por mim sem problemas
> > > >
> > > >
> > > > s em uma mesma página. O quanto
> > > > de código precisará ser replicado? Se conseguir
> fazer um
> > > resumo
> > > > bem breve
> > > > do que tem em mente pra anotar os eventos e
> criar as
> > > funções
> > > > pra
> > > > respondê-los
> > > > seria legal.
> > > >
> > > > Pelo que olhei no riotjs não enxerguei uma
> solução mais
> > > simples
> > > > usando ele do que a que pensei. Nós temos que
> integrar
> > > > componentes
> > > > que são feitos com lib
> > > >
> > > > s, então para sincronizar temos que escutar os
> eventos que
> > > essas
> > > > libs
> > > > emitem quando o usuário interage com elas e chamar
> métodos
> > > que elas
> > > > definem na API para alterar seus valores na hora de
> > > sincronizar.
> > > > Não
> > > > vejo como as funcionalidades do riotjs de virtual
> DOM com
> > > > interpolação (o DOM que exibem os gráficos e as
> tabelas são
> > > > criadas pelas próprias libs externas, não temos
> controle
> > > sobre
> > > > isso)
> > > > podem ajudar.
> > > >
> > > > O que poderiamos usar do riotjs é a API de Observer
> deles,
> > > mas o
> > > > jQuery já implementa isso (é o que estou usando) e
> já o temos
> > > como
> > > > dependência.
> > > >
> > > > Vocês chegaram a pensar em como sincronizar os vários
> > > componentes
> > > > usando o riotjs e viram usos dele que eu não
> enxerguei?
> > > >
> > > > Sobre a implementação do Sub/Pub, na verdade é
> apenas uma
> > > facade
> > > > para a implementação de eventos do jQuery, são 7
> linhas [0]
> > > que
> > > > definem um objeto e redirecionam 3 métodos para o
> jQuery:
> > > >
> > > > subscribe --> on
> > > > unsubscribe --> off
> > > > publish -- trigger
> > > >
> > > > Para usar é simplesmente criar uma instância e se
> registrar
> > > com o
> > > > "subscribe" para receber as notificações de uma
> determinada
> > > > mensagem
> > > > e mandar notificações com o "publish":
> > > >
> > > > // Cria o objeto
> > > > var pubSub = new PubSub();
> > > >
> > > > // Registra para receber notificações
> > > > pubSub.subscribe(nome_da_mensagem, function(evt,
> content) {
> > > > console.log(Mensagem recebida com o seguinte
> conteúdo: ,
> > > > content);
> > > > });
> > > >
> > > > // Publica notificação
> > > > pubSub.publish(nome_da_mensagem, este é o conteúdo);
> > > >
> > > >
> > > > // Neste ponto foi exibido "Mensagem recebida com o
> seguinte
> > > > conteúdo: este é o conteúdo"
> > > >
> > > > Então para usar o pub/sub é bem fácil e com muito
> pouco
> > > código,
> > > > só precisa que todos os envolvidos na sincronização
> tenham
> > > acesso
> > > > ao mesmo objeto de pub/sub e compartilhem de uma
> padronização
> > > nos
> > > > nomes e formatos das mensagens enviadas, sem ter
> conhecimento
> > > de
> > > > quem
> > > > são os demais participantes (desacoplados). Então
> se, por
> > > exemplo,
> > > > a
> > > > tabela registrou para receber uma mensagem quando o
> código é
> > > > alterado, ela tera o mesmo comportamento
> independente se a
> > > > alteração
> > > > é proveniente de uma mudança na url, um clique no
> gráfico ou
> > > uma
> > > > seleção num menu, só precisa que a mensagem seja
> publicada no
> > > > objeto pub/sub seguindo o padrão definido.
> > > >
> > > > O que acontece, em relação a quantidade de código que
> > > escrevi, para
> > > > ter mais linhas [1] do que 3 simples
> "pubSub.subscribe(...)"
> > > (que
> > > > seria um para "page", um para "per_page_num" e um
> para
> > > "years", que
> > > > são as três coisas que atualmente importam para a
> tabela) é
> > > porque
> > > > eu fiz de um modo que o mesmo objeto pode ser
> reutilizado
> > > para
> > > > tabelas
> > > > diferentes, que buscam os dados em outros endpoints
> que
> > > tenham
> > > > parâmetros diferentes (ou mesmo para estender o
> funcionamento
> > > da
> > > > tabela atual quando os outros parâmetros forem
> implementados,
> > > como
> > > > o
> > > > "codes", sem precisar alterar o código).
> > > >
> > > > Eu defino na criação do objeto quais são os
> parâmetros do
> > > endpoint
> > > > que importam para a tabela, ou que poderão ser
> alterados
> > > > externamente
> > > > por outro componente, podendo definir um valor
> inicial [2],
> > > então
> > > > eu
> > > > itero sobre os parâmetros registrando
> automaticamente [3].
> > > >
> > > > Assim, se eu criar um objeto DataTable passando nas
> opções
> > > "params:
> > > > { years: 2014, page: 0, per_page_num: 10 }" ele vai
> se
> > > registrar
> > > > para as mensagens "years:changed", "page:changed" e
> > > > "per_page_num:changed" e quando qualquer um publicar
> uma
> > > dessas
> > > > mensagens ele vai se atualizar. Quando tivermos
> implementado
> > > o
> > > > parâmetro "codes" na endpoint "List revenues" basta
> alterar
> > > na
> > > > criação do objetos incluindo esse parâmetro nas
> opções
> > > (passando
> > > > a ser "params: { years: 2014, page: 0, per_page_num:
> 10 ,
> > > codes:
> > > > null
> > > > }") que a tabela passará a responder também a
> mensagem
> > > > "codes:changed", armazenando internamente o valor
> (método
> > > > "setParam"
> > > > chamado pelo callback do "pubSub.subscribe"), que
> será
> > > enviado na
> > > > requisição AJAX (no método "_ajaxRequest", que é
> usado pela
> > > lib
> > > > DataTables, e é responsável por enviar todos os
> parâmetros
> > > > registrados).
> > > >
> > > > Então para criar tabelas com dados diferentes,
> endpoint
> > > diferente e
> > > > parâmetros diferentes, mas também facilmente
> sincronizável e
> > > com
> > > > paginação via ajax, basta criar um objeto DataTable
> > > informando qual
> > > > a url do endpoint, quais são os parametros e quais
> são os
> > > campos do
> > > > json de cada coluna e pronto. Fazer o que está entre
> as
> > > linhas 199
> > > > e
> > > > 222 [4] com as devidas alterações, em especial em
> "columns" e
> > > > "params", sem precisar nem criar mais funções nem
> definir
> > > outros
> > > > tipos de objetos.
> > > >
> > > > TL; DR;
> > > >
> > > > Para sincronizar, o componente com o qual o usuário
> está
> > > > interagindo, por exemplo no caso do ano ser
> alterado, só terá
> > > que
> > > > chamar "pubSub.publish(years:changed, {value:
> [anoMin,
> > > anoMax]})" e
> > > > os
> > > > demais terem se registrado com "pubSub.subscribe
> > > (years:changed,
> > > > callback)", e implementado a logica necessária no
> callback,
> > > para
> > > > serem notificados e se manterem sincronizados.
> > > >
> > > > O DataTable é mais complicado do que isso pois foi
> feito de
> > > modo
> > > > genérico para ser reutilizado em outras páginas,
> pecisando
> > > apenas
> > > > configurar algumas coisas na criação do objeto.
> > > >
> > > >
> > > > [0]
> https://github.com/okfn-brasil/gastos_abertos_website/
> > > blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L188
> > > > [40]
> > > >
> > > > [1]
> https://github.com/okfn-brasil/gastos_abertos_website/
> > > blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L71
> > > > [41]
> > > >
> > > > [2]
> https://github.com/okfn-brasil/gastos_abertos_website/
> > > blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L211
> > > > [42]
> > > >
> > > > [3]
> https://github.com/okfn-brasil/gastos_abertos_website/
> > > blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L86
> > > > [43]
> > > >
> > > > [4]
> https://github.com/okfn-brasil/gastos_abertos_website/
> > > blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L199
> > > > [44]
> > > >
> > > > []s
> > > >
> > > >
> > > > Abs,
> > > > E.
> > > >
> > > > On 02/03/2015 14:07, Luiz Armesto wrote:
> > > >
> > > >
> > > > Links:
> > > > ------
> > > > [1] http://site.gastosabertos.org/receita
> > > > [2]
> https://github.com/okfn-brasil/gastos_abertos/pull/134
> > > > [3]
> https://github.com/okfn-brasil/gastos_abertos/issues/121
> > > > [4]
> https://github.com/okfn-brasil/gastos_abertos/issues/132
> > > > [5] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [6]
> https://lists.okfn.org/mailman/listinfo/gastosabertos-dev
> > > > [7] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [8]
> https://lists.okfn.org/mailman/listinfo/gastosabertos-dev
> > > > [9] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [10] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [11] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [12] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [13] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [14] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [15] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [16] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [17]
> > > >
> > > > http://demo.gastosabertos.org/receita/static/
> > > total_by_year_by_code/
> > > > 2014.json
> > > > [18] mailto:e em vaz.io
> > > > [19]
> > > >
> > > > http://demo.gastosabertos.org/receita/static/
> > > total_by_year_by_code/
> > > > 2014.json
> > > > [20] http://demo.gastosabertos.org/api/v1/receita/
> > > totaldrilldown?
> > > > year=2014
> > > > [21] http://demo.gastosabertos.org/api/v1/receita/
> > > totaldrilldown?
> > > > year=2014
> > > > [22] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [23] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [24] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [25] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [26] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [27] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [28] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [29] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [30]
> https://github.com/okfn-brasil/gastos_abertos/pull/134
> > > > [31]
> https://github.com/okfn-brasil/gastos_abertos/issues/121
> > > > [32] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [33] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [34] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [35] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [36] mailto:e em vaz.io
> > > > [37] mailto:Gastosabertos-dev em lists.okfn.org
> > > > [38] https://lists.okfn.org/mailman/listinfo/
> > > gastosabertos-dev
> > > > [39] mailto:e em vaz.io
> > > > [40]
> > > >
> > > >
> https://github.com/okfn-brasil/gastos_abertos_website/blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L188
> > > > [41]
> > > >
> > > >
> https://github.com/okfn-brasil/gastos_abertos_website/blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L71
> > > > [42]
> > > >
> > > >
> https://github.com/okfn-brasil/gastos_abertos_website/blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L211
> > > > [43]
> > > >
> > > >
> https://github.com/okfn-brasil/gastos_abertos_website/blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L86
> > > > [44]
> > > >
> > > >
> https://github.com/okfn-brasil/gastos_abertos_website/blob/
> > > >
> cd83cc446e6953b2281c7cebbdabc8f7d5e79772/frontend/src/
> > > javascripts/
> > > > receitas/main.js#L199
> > > >
> > > >
> > > > _______________________________________________
> > > > Gastosabertos-dev mailing list
> > > > Gastosabertos-dev em lists.okfn.org
> > > >
> https://lists.okfn.org/mailman/listinfo/gastosabertos-dev
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Luiz Armesto
> > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Luiz Armesto
> > > _______________________________________________
> > > Gastosabertos-dev mailing list
> > > Gastosabertos-dev em lists.okfn.org
> > > https://lists.okfn.org/mailman/listinfo/gastosabertos-dev
> > >
> > >
> > >
> > >
> > > --
> > > Luiz Armesto
> _______________________________________________
> Gastosabertos-dev mailing list
> Gastosabertos-dev em lists.okfn.org
> https://lists.okfn.org/mailman/listinfo/gastosabertos-dev
>
--
Luiz Armesto
-------------- Próxima Parte ----------
Um anexo em HTML foi limpo...
URL: <http://lists.okfn.org/pipermail/gastosabertos-dev/attachments/20150309/6c06406d/attachment-0003.html>
Mais detalhes sobre a lista de discussão Gastosabertos-dev