index.js 2.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { setup_panic_hook, Numbat } from "numbat-wasm";
  2. async function fetch_exchange_rates() {
  3. try {
  4. const response = await fetch("https://numbat.dev/ecb-exchange-rates.php");
  5. if (!response.ok) {
  6. return;
  7. }
  8. const xml_content = await response.text();
  9. numbat.set_exchange_rates(xml_content);
  10. } catch (error) {
  11. return;
  12. }
  13. }
  14. setup_panic_hook();
  15. var numbat = Numbat.new();
  16. fetch_exchange_rates();
  17. // Load KeyboardEvent polyfill for old browsers
  18. keyboardeventKeyPolyfill.polyfill();
  19. function updateUrlQuery(query) {
  20. let url = new URL(window.location);
  21. if (query == null) {
  22. url.searchParams.delete('q');
  23. } else {
  24. url.searchParams.set('q', query);
  25. }
  26. history.replaceState(null, null, url);
  27. }
  28. function interpret(input) {
  29. // Skip empty lines or comments
  30. var input_trimmed = input.trim();
  31. if (input_trimmed === "" || (input_trimmed[0] === "#" && input_trimmed.indexOf("\n") == -1)) {
  32. return;
  33. }
  34. if (input_trimmed == "clear") {
  35. this.clear();
  36. var output = "";
  37. } else if (input_trimmed == "reset") {
  38. numbat = Numbat.new();
  39. numbat.interpret("use units::currencies");
  40. this.clear();
  41. } else if (input_trimmed == "list" || input_trimmed == "ll" || input_trimmed == "ls") {
  42. output = numbat.print_environment();
  43. } else {
  44. var output = numbat.interpret(input);
  45. updateUrlQuery(input);
  46. }
  47. return output;
  48. }
  49. $(document).ready(function() {
  50. var term = $('#terminal').terminal(interpret, {
  51. greetings: false,
  52. name: "terminal",
  53. height: 550,
  54. prompt: "[[;;;prompt]>>> ]",
  55. checkArity: false,
  56. historySize: 200,
  57. historyFilter(line) {
  58. return line.trim() !== "";
  59. },
  60. completion(inp, cb) {
  61. cb(numbat.get_completions_for(inp));
  62. },
  63. onClear() {
  64. updateUrlQuery(null);
  65. }
  66. });
  67. // evaluate expression in query string if supplied (via opensearch)
  68. if (location.search) {
  69. var queryParams = new URLSearchParams(location.search);
  70. if (queryParams.has("q")) {
  71. term.exec(queryParams.get("q"));
  72. }
  73. }
  74. });