index.js 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. import { setup_panic_hook, Numbat } from "numbat-wasm";
  2. setup_panic_hook();
  3. var numbat = Numbat.new();
  4. // Load KeyboardEvent polyfill for old browsers
  5. keyboardeventKeyPolyfill.polyfill();
  6. function updateUrlQuery(query) {
  7. let url = new URL(window.location);
  8. if (query == null) {
  9. url.searchParams.delete('q');
  10. } else {
  11. url.searchParams.set('q', query);
  12. }
  13. history.replaceState(null, null, url);
  14. }
  15. function interpret(input) {
  16. // Skip empty lines or comments
  17. var input_trimmed = input.trim();
  18. if (input_trimmed === "" || (input_trimmed[0] === "#" && input_trimmed.indexOf("\n") == -1)) {
  19. return;
  20. }
  21. if (input_trimmed == "clear") {
  22. this.clear();
  23. var output = "";
  24. } else {
  25. var output = numbat.interpret(input);
  26. updateUrlQuery(input);
  27. }
  28. return output;
  29. }
  30. $(document).ready(function() {
  31. var term = $('#terminal').terminal(interpret, {
  32. greetings: false,
  33. name: "terminal",
  34. height: 550,
  35. prompt: "[[;;;prompt]>>> ]",
  36. checkArity: false,
  37. historySize: 200,
  38. historyFilter(line) {
  39. return line.trim() !== "";
  40. },
  41. completion(inp, cb) {
  42. cb(numbat.get_completions_for(inp));
  43. },
  44. onClear() {
  45. updateUrlQuery(null);
  46. }
  47. });
  48. // evaluate expression in query string if supplied (via opensearch)
  49. if (location.search) {
  50. var queryParams = new URLSearchParams(location.search);
  51. if (queryParams.has("q")) {
  52. term.exec(queryParams.get("q"));
  53. }
  54. }
  55. });