Já falei aqui no blog que sempre gostei do MoneyLog, mas a coisa só ficou boa mesmo recentemente com a nova versão com suporte a widgets. Isso, é claro, porque agora eu poderia fazer as coisas do meu jeito (e para mim as coisas só são boas quando posso fazer alguma nerdice com elas). Já contei como fiz widgets para anotar valores e a soma desses valores. Mas não estava satisfeito, porque toda vez eu precisava editar dois arquivos: config.js
e o arquivo de lançamentos (no meu caso, moneylog.txt
).
Tarefas repetitivas tendem a serem enfadonhas e acabamos desistindo delas (quando isso é possível). Então, quanto mais simples, melhor. E foi o que fiz, agora tudo é feito no arquivo de lançamentos (o meu moneylog.txt
), e você só precisa editar o config.js
uma única vez. É claro que não vou simplesmente colocar o código aqui para você copiar e colar, mas também contar como essa ideia insana surgiu no meu emaranhado de neurônios (dizem que tenho).
Comecei bisbilhotando o moneylog.js
para descobrir como o Aurelio fazia para ler o arquivo de lançamentos (o arquivo .txt
). E não foi fácil encontrar, não tinha um open nem nada parecido e, para complicar, devido às diversas versões com métodos diferentes para ler os lançamentos, tinham tantos ifs que dificultava entender a lógica do negócio todo. Pois bem, fui insistindo até que percebi que, no caso dos lançamentos em arquivo de texto, os dados eram inseridos no html dentro de um frame.
Entendido isso, não importava muito saber exatamente como isso funcionava, só precisei dar uma olhada na função parseData
e dar uma plagiada básica. Então o esquema é um parse que considera apenas as linhas iniciadas por #=
(comentário mais um caractere arbitrário). Essas linhas deve ter três campos separados por espaços em branco ou tabulação, sendo o primeiro o nome do widget, o segundo o nome do valor, e por último o valor. Por exemplo:
Então o parse verifica se já existe um widget com esse nome (primeiro campo), se não existir cria ele. Depois é só colocar o valor no widget (segundo e terceiro campo). Fácil né? Nem tanto, precisei dar outra plagiada no código do Aurélio para interpretar a pontuação dos números do mesmo jeito que ele faz no restante do arquivo de lançamentos.
Para que eu possa ler os dados do arquivo de lançamentos, preciso fazer isso depois da função init()
do moneylog.js
. Mas é no init()
que os widgets são inseridos no html, então preciso fazer isso novamente no meu código. Então meu widget dá uma mexida no código de inicialização do MoneyLog. Só não entendi ainda como funciona aquele botãozinho de recarregar os dados, então se você clicar lá os widgets não serão atualizados, só dando F5 mesmo. Isso é tudo, lá vai código:
Então, para dar o mesmo exemplo da outra postagem. Depois de ter o código acima no seu config.js
, coloque o seguinte no seu arquivo de lançamentos:
E ai, legal né? Qualquer dado inválido nas linhas começadas por #=
será silenciosamente ignorado, então se fizer caca podem aparecer resultados inesperados. O código não é maduro nem livre de bugs. Como pode ver, o código não é um Widget em si, mas funções que geram o Widget que você precisa. Por isso afirmei que são seus widgets para MoneyLog.
br_lemes, o Elfo insano (Hipossônia)
Theme by Breno Ramalho Lemes under Creative Commons Attribution, based on Jekyll Clean by Scott Emmons and icons by FatCow.