diff --git a/finance.b64 b/finance.b64 new file mode 100644 index 0000000..f96f3b3 --- /dev/null +++ b/finance.b64 @@ -0,0 +1 @@ +d2luZG93LmluaXRGaW5hbmNlQXBwID0gZnVuY3Rpb24oKSB7CiAgd2luZG93LmZpbmFuY2VBcHAgPSB7CiAgICBkYXRhOiBudWxsLAogICAgY2hhcnRzOiB7fSwKICAgIGFzeW5jIGxvYWQoKSB7CiAgICAgIHRyeSB7CiAgICAgICAgbGV0IHJlcyA9IGF3YWl0IGZldGNoKCcvYXBpL2ZpbmFuY2UnKTsKICAgICAgICBsZXQganNvbiA9IGF3YWl0IHJlcy5qc29uKCk7CiAgICAgICAgdGhpcy5kYXRhID0ganNvbjsKICAgICAgICBpZiAoIXRoaXMuZGF0YS5tb250aGx5IHx8ICF0aGlzLmRhdGEubW9udGhseS5sYWJlbHMpIHsKICAgICAgICAgICB0aGlzLmRhdGEubW9udGhseSA9IHtsYWJlbHM6WydKYW4nXSwgaW5jb21lOlswXSwgZXhwZW5zZXM6WzBdLCBzcGVuZDpbMF19OwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMuZGF0YS5hY2NvdW50cykgdGhpcy5kYXRhLmFjY291bnRzID0gW107CiAgICAgICAgdGhpcy5yZW5kZXJDaGFydHMoKTsKICAgICAgICB0aGlzLnJlbmRlclRhYmxlKCk7CiAgICAgIH0gY2F0Y2ggKGUpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGaW5hbmNlIEFwcCBMb2FkIEVycm9yOiIsIGUpOwogICAgICB9CiAgICB9LAogICAgYXN5bmMgc2F2ZSgpIHsKICAgICAgYXdhaXQgZmV0Y2goJy9hcGkvZmluYW5jZScsIHsgbWV0aG9kOiAnUE9TVCcsIGJvZHk6IEpTT04uc3RyaW5naWZ5KHRoaXMuZGF0YSksIGhlYWRlcnM6IHsnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nfSB9KTsKICAgIH0sCiAgICByZW5kZXJDaGFydHMoKSB7CiAgICAgIGNvbnN0IHJlc29sdmVDb2xvciA9IChjc3NWYXIsIGZhbGxiYWNrKSA9PiB7CiAgICAgICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7CiAgICAgICAgZGl2LnN0eWxlLmNvbG9yID0gZmFsbGJhY2s7CiAgICAgICAgZGl2LnN0eWxlLmNvbG9yID0gYHZhcigke2Nzc1Zhcn0pYDsKICAgICAgICBkaXYuc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGRpdik7CiAgICAgICAgY29uc3QgY29sb3IgPSBnZXRDb21wdXRlZFN0eWxlKGRpdikuY29sb3I7CiAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChkaXYpOwogICAgICAgIHJldHVybiBjb2xvcjsKICAgICAgfTsKCiAgICAgIGNvbnN0IGNQb3MgPSByZXNvbHZlQ29sb3IoJy0tY29sb3ItcG9zaXRpdmUnLCAnaHNsKDE1MCwgNjAlLCA1MCUpJyk7CiAgICAgIGNvbnN0IGNOZWcgPSByZXNvbHZlQ29sb3IoJy0tY29sb3ItbmVnYXRpdmUnLCAnaHNsKDAsIDcwJSwgNjUlKScpOwogICAgICBjb25zdCBjUHJpID0gcmVzb2x2ZUNvbG9yKCctLWNvbG9yLXByaW1hcnknLCAnaHNsKDEyLCA3MCUsIDYwJSknKTsKICAgICAgY29uc3QgY1RleHQgPSByZXNvbHZlQ29sb3IoJy0tY29sb3ItdGV4dC1zdWJkdWUnLCAncmdiYSgyNTUsMjU1LDI1NSwwLjYpJyk7CiAgICAgIAogICAgICBjb25zdCByZXNvbHZlR3JpZENvbG9yID0gKCkgPT4gewogICAgICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICAgIGRpdi5zdHlsZS5ib3JkZXJDb2xvciA9ICdyZ2JhKDI1NSwyNTUsMjU1LDAuMDUpJzsKICAgICAgICBkaXYuc3R5bGUuYm9yZGVyQ29sb3IgPSAndmFyKC0tY29sb3Itd2lkZ2V0LWNvbnRlbnQtYm9yZGVyKSc7CiAgICAgICAgZGl2LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChkaXYpOwogICAgICAgIGNvbnN0IGNvbG9yID0gZ2V0Q29tcHV0ZWRTdHlsZShkaXYpLmJvcmRlckNvbG9yOwogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZGl2KTsKICAgICAgICByZXR1cm4gY29sb3I7CiAgICAgIH07CiAgICAgIGNvbnN0IGNHcmlkID0gcmVzb2x2ZUdyaWRDb2xvcigpOwogICAgICAKICAgICAgY29uc3QgYWRkQWxwaGEgPSAocmdiU3RyLCBhbHBoYSkgPT4gewogICAgICAgIGxldCBtID0gcmdiU3RyLm1hdGNoKC9ecmdiYT9cKChcZCspLFxzKihcZCspLFxzKihcZCspLyk7CiAgICAgICAgaWYgKG0pIHsKICAgICAgICAgIHJldHVybiBgcmdiYSgke21bMV19LCAke21bMl19LCAke21bM119LCAke2FscGhhfSlgOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmdiU3RyOwogICAgICB9OwoKICAgICAgY29uc3QgY1Bvc0FscGhhID0gYWRkQWxwaGEoY1BvcywgMC42KTsKICAgICAgY29uc3QgY05lZ0FscGhhID0gYWRkQWxwaGEoY05lZywgMC42KTsKICAgICAgY29uc3QgY1ByaUFscGhhID0gYWRkQWxwaGEoY1ByaSwgMC4yKTsKCiAgICAgIENoYXJ0LmRlZmF1bHRzLmNvbG9yID0gY1RleHQ7CiAgICAgIENoYXJ0LmRlZmF1bHRzLmZvbnQuZmFtaWx5ID0gJ091dGZpdCwgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZic7CiAgICAgIAogICAgICBjb25zdCBjMSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdpbmNvbWVFeHBlbnNlQ2hhcnQnKTsKICAgICAgaWYoYzEpIHsKICAgICAgICBpZih0aGlzLmNoYXJ0cy5pbmNvbWVFeHBlbnNlKSB0aGlzLmNoYXJ0cy5pbmNvbWVFeHBlbnNlLmRlc3Ryb3koKTsKICAgICAgICB0aGlzLmNoYXJ0cy5pbmNvbWVFeHBlbnNlID0gbmV3IENoYXJ0KGMxLmdldENvbnRleHQoJzJkJyksIHsKICAgICAgICAgIHR5cGU6ICdiYXInLAogICAgICAgICAgZGF0YTogewogICAgICAgICAgICBsYWJlbHM6IHRoaXMuZGF0YS5tb250aGx5LmxhYmVscywKICAgICAgICAgICAgZGF0YXNldHM6IFsKICAgICAgICAgICAgICB7IGxhYmVsOiAnSW5jb21lJywgZGF0YTogdGhpcy5kYXRhLm1vbnRobHkuaW5jb21lLCBiYWNrZ3JvdW5kQ29sb3I6IGNQb3NBbHBoYSwgYm9yZGVyQ29sb3I6IGNQb3MsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJSYWRpdXM6IDMsIGJhclBlcmNlbnRhZ2U6IDAuNiB9LAogICAgICAgICAgICAgIHsgbGFiZWw6ICdFeHBlbnNlcycsIGRhdGE6IHRoaXMuZGF0YS5tb250aGx5LmV4cGVuc2VzLCBiYWNrZ3JvdW5kQ29sb3I6IGNOZWdBbHBoYSwgYm9yZGVyQ29sb3I6IGNOZWcsIGJvcmRlcldpZHRoOiAxLCBib3JkZXJSYWRpdXM6IDMsIGJhclBlcmNlbnRhZ2U6IDAuNiB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICBvcHRpb25zOiB7IAogICAgICAgICAgICByZXNwb25zaXZlOiB0cnVlLCAKICAgICAgICAgICAgbWFpbnRhaW5Bc3BlY3RSYXRpbzogZmFsc2UsIAogICAgICAgICAgICBwbHVnaW5zOiB7IGxlZ2VuZDogeyBkaXNwbGF5OiBmYWxzZSB9IH0sCiAgICAgICAgICAgIGxheW91dDogeyBwYWRkaW5nOiAxMCB9LAogICAgICAgICAgICBzY2FsZXM6IHsgCiAgICAgICAgICAgICAgICB5OiB7IGRpc3BsYXk6IGZhbHNlLCBiZWdpbkF0WmVybzogdHJ1ZSB9LCAKICAgICAgICAgICAgICAgIHg6IHsgZGlzcGxheTogZmFsc2UgfSAKICAgICAgICAgICAgfSAKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQoKICAgICAgY29uc3QgYzIgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3BlbmRDaGFydCcpOwogICAgICBpZihjMikgewogICAgICAgIGlmKHRoaXMuY2hhcnRzLnNwZW5kKSB0aGlzLmNoYXJ0cy5zcGVuZC5kZXN0cm95KCk7CiAgICAgICAgdGhpcy5jaGFydHMuc3BlbmQgPSBuZXcgQ2hhcnQoYzIuZ2V0Q29udGV4dCgnMmQnKSwgewogICAgICAgICAgdHlwZTogJ2xpbmUnLAogICAgICAgICAgZGF0YTogewogICAgICAgICAgICBsYWJlbHM6IHRoaXMuZGF0YS5tb250aGx5LmxhYmVscywKICAgICAgICAgICAgZGF0YXNldHM6IFt7IAogICAgICAgICAgICAgICAgbGFiZWw6ICdTcGVuZCcsIAogICAgICAgICAgICAgICAgZGF0YTogdGhpcy5kYXRhLm1vbnRobHkuc3BlbmQsIAogICAgICAgICAgICAgICAgYm9yZGVyQ29sb3I6IGNQcmksIAogICAgICAgICAgICAgICAgYm9yZGVyV2lkdGg6IDIsCiAgICAgICAgICAgICAgICB0ZW5zaW9uOiAwLjQsIAogICAgICAgICAgICAgICAgZmlsbDogZmFsc2UsIAogICAgICAgICAgICAgICAgcG9pbnRSYWRpdXM6IDAsCiAgICAgICAgICAgICAgICBwb2ludEhvdmVyUmFkaXVzOiA1CiAgICAgICAgICAgIH1dCiAgICAgICAgICB9LAogICAgICAgICAgb3B0aW9uczogeyAKICAgICAgICAgICAgcmVzcG9uc2l2ZTogdHJ1ZSwgCiAgICAgICAgICAgIG1haW50YWluQXNwZWN0UmF0aW86IGZhbHNlLCAKICAgICAgICAgICAgcGx1Z2luczogeyBsZWdlbmQ6IHsgZGlzcGxheTogZmFsc2UgfSB9LAogICAgICAgICAgICBsYXlvdXQ6IHsgcGFkZGluZzogMTAgfSwKICAgICAgICAgICAgc2NhbGVzOiB7IAogICAgICAgICAgICAgICAgeTogeyBkaXNwbGF5OiBmYWxzZSwgYmVnaW5BdFplcm86IHRydWUgfSwgCiAgICAgICAgICAgICAgICB4OiB7IGRpc3BsYXk6IGZhbHNlIH0gCiAgICAgICAgICAgIH0gCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0sCiAgICByZW5kZXJUYWJsZSgpIHsKICAgICAgY29uc3QgdCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmaW5hbmNlLXRib2R5Jyk7CiAgICAgIGlmKCF0KSByZXR1cm47CiAgICAgIHQuaW5uZXJIVE1MID0gJyc7CiAgICAgIGlmKCF0aGlzLmRhdGEuYWNjb3VudHMgfHwgdGhpcy5kYXRhLmFjY291bnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHQuaW5uZXJIVE1MID0gYDx0cj48dGQgY29sc3Bhbj0nNCcgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyBwYWRkaW5nOiAycmVtOycgY2xhc3M9J2NvbG9yLXN1YmR1ZSc+Tm8gYWNjb3VudHMuPC90ZD48L3RyPmA7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuZGF0YS5hY2NvdW50cy5mb3JFYWNoKChhY2MsIGkpID0+IHsKICAgICAgICBjb25zdCB0ciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CiAgICAgICAgdHIuc3R5bGUuYm9yZGVyQm90dG9tID0gJzFweCBzb2xpZCB2YXIoLS1jb2xvci13aWRnZXQtY29udGVudC1ib3JkZXIpJzsKICAgICAgICBjb25zdCBpblN0eWxlID0gYHdpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsgYm9yZGVyOiBub25lOyBjb2xvcjogdmFyKC0tY29sb3ItdGV4dC1oaWdobGlnaHQpOyBwYWRkaW5nOiAxcmVtOyBmb250LWZhbWlseTogaW5oZXJpdDsgZm9udC1zaXplOiAxLjE1cmVtOyBvdXRsaW5lOiBub25lOyB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7YDsKICAgICAgICAKICAgICAgICBjb25zdCB0ZDEgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwogICAgICAgIHRkMS5zdHlsZS5wYWRkaW5nID0gJzAnOwogICAgICAgIHRkMS5pbm5lckhUTUwgPSBgPGlucHV0IHN0eWxlPSIke2luU3R5bGV9IiB2YWx1ZT0iJHthY2MubmFtZX0iIG9uZm9jdXM9InRoaXMuc3R5bGUuYmFja2dyb3VuZD0ndmFyKC0tY29sb3Itd2lkZ2V0LWJhY2tncm91bmQtaGlnaGxpZ2h0KSciIG9uYmx1cj0idGhpcy5zdHlsZS5iYWNrZ3JvdW5kPSd0cmFuc3BhcmVudCciIG9uY2hhbmdlPSJmaW5hbmNlQXBwLnVwZGF0ZSgke2l9LCduYW1lJyx0aGlzLnZhbHVlKSI+YDsKICAgICAgICAKICAgICAgICBjb25zdCB0ZDIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwogICAgICAgIHRkMi5zdHlsZS5wYWRkaW5nID0gJzAnOwogICAgICAgIGxldCBhbW91bnRDb2wgPSBhY2MuYmFsYW5jZSA8IDAgPyAnY29sb3ItbmVnYXRpdmUnIDogJ2NvbG9yLXBvc2l0aXZlJzsKICAgICAgICB0ZDIuaW5uZXJIVE1MID0gYDxpbnB1dCB0eXBlPSJudW1iZXIiIHN0ZXA9IjAuMDEiIHN0eWxlPSIke2luU3R5bGV9IiBjbGFzcz0iJHthbW91bnRDb2x9IiB2YWx1ZT0iJHthY2MuYmFsYW5jZX0iIG9uZm9jdXM9InRoaXMuc3R5bGUuYmFja2dyb3VuZD0ndmFyKC0tY29sb3Itd2lkZ2V0LWJhY2tncm91bmQtaGlnaGxpZ2h0KSciIG9uYmx1cj0idGhpcy5zdHlsZS5iYWNrZ3JvdW5kPSd0cmFuc3BhcmVudCciIG9uY2hhbmdlPSJmaW5hbmNlQXBwLnVwZGF0ZSgke2l9LCdiYWxhbmNlJyxwYXJzZUZsb2F0KHRoaXMudmFsdWUpKSI+YDsKICAgICAgICAKICAgICAgICBjb25zdCB0ZDMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwogICAgICAgIHRkMy5zdHlsZS5wYWRkaW5nID0gJzAnOwogICAgICAgIHRkMy5pbm5lckhUTUwgPSBgPGlucHV0IHN0eWxlPSIke2luU3R5bGV9IiB2YWx1ZT0iJHthY2MuY3VycmVuY3l9IiBvbmZvY3VzPSJ0aGlzLnN0eWxlLmJhY2tncm91bmQ9J3ZhcigtLWNvbG9yLXdpZGdldC1iYWNrZ3JvdW5kLWhpZ2hsaWdodCknIiBvbmJsdXI9InRoaXMuc3R5bGUuYmFja2dyb3VuZD0ndHJhbnNwYXJlbnQnIiBvbmNoYW5nZT0iZmluYW5jZUFwcC51cGRhdGUoJHtpfSwnY3VycmVuY3knLHRoaXMudmFsdWUpIj5gOwogICAgICAgIAogICAgICAgIGNvbnN0IHRkNCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CiAgICAgICAgdGQ0LnN0eWxlLnRleHRBbGlnbiA9ICdyaWdodCc7CiAgICAgICAgdGQ0LnN0eWxlLnBhZGRpbmcgPSAnMXJlbSc7CiAgICAgICAgdGQ0LmlubmVySFRNTCA9IGA8YnV0dG9uIG9uY2xpY2s9ImZpbmFuY2VBcHAuZGVsZXRlKCR7aX0pIiBzdHlsZT0icGFkZGluZzogMC40cmVtIDAuOHJlbTsgYm9yZGVyLXJhZGl1czogNnB4OyBib3JkZXI6IG5vbmU7IGJhY2tncm91bmQ6IHJnYmEoMjU1LCA1MCwgNTAsIDAuMTUpOyBjb2xvcjogdmFyKC0tY29sb3ItbmVnYXRpdmUpOyBmb250LXdlaWdodDogNjAwOyBjdXJzb3I6IHBvaW50ZXI7Ij5EZWxldGU8L2J1dHRvbj5gOwogICAgICAgIAogICAgICAgIHRyLmFwcGVuZENoaWxkKHRkMSk7CiAgICAgICAgdHIuYXBwZW5kQ2hpbGQodGQyKTsKICAgICAgICB0ci5hcHBlbmRDaGlsZCh0ZDMpOwogICAgICAgIHRyLmFwcGVuZENoaWxkKHRkNCk7CiAgICAgICAgdC5hcHBlbmRDaGlsZCh0cik7CiAgICAgIH0pOwogICAgfSwKICAgIHVwZGF0ZShpLCBrZXksIHZhbCkgeyB0aGlzLmRhdGEuYWNjb3VudHNbaV1ba2V5XSA9IHZhbDsgdGhpcy5yZW5kZXJUYWJsZSgpOyB0aGlzLnNhdmUoKTsgfSwKICAgIGFkZEFjY291bnQoKSB7IHRoaXMuZGF0YS5hY2NvdW50cy5wdXNoKHtuYW1lOidOZXcgQWNjb3VudCcsYmFsYW5jZTowLGN1cnJlbmN5OidVU0QnfSk7IHRoaXMucmVuZGVyVGFibGUoKTsgdGhpcy5zYXZlKCk7IH0sCiAgICBkZWxldGUoaSkgeyB0aGlzLmRhdGEuYWNjb3VudHMuc3BsaWNlKGksIDEpOyB0aGlzLnJlbmRlclRhYmxlKCk7IHRoaXMuc2F2ZSgpOyB9CiAgfTsKICB3aW5kb3cuZmluYW5jZUFwcC5sb2FkKCk7Cn07CgppZiAoIXdpbmRvdy5maW5hbmNlQXBwTG9hZGVkKSB7CiAgd2luZG93LmZpbmFuY2VBcHBMb2FkZWQgPSB0cnVlOwogIGlmICghd2luZG93LkNoYXJ0KSB7CiAgICBsZXQgc2NyaXB0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2NyaXB0Jyk7CiAgICBzY3JpcHQuc3JjID0gJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vY2hhcnQuanMnOwogICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHdpbmRvdy5pbml0RmluYW5jZUFwcCgpOwogICAgZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChzY3JpcHQpOwogIH0gZWxzZSB7CiAgICB3aW5kb3cuaW5pdEZpbmFuY2VBcHAoKTsKICB9Cn0K \ No newline at end of file diff --git a/finance.csv b/finance.csv new file mode 100644 index 0000000..6cb55f9 --- /dev/null +++ b/finance.csv @@ -0,0 +1,5 @@ +Account,Balance,Currency +Checking,4250.00,USD +Savings,12400.00,USD +Credit Card,-850.50,USD +Investments,34800.00,USD diff --git a/finance.html b/finance.html new file mode 100644 index 0000000..5dc5f85 --- /dev/null +++ b/finance.html @@ -0,0 +1,16 @@ +{{ template "widget-base.html" . }} + +{{- define "widget-content" }} +