oberonjs.html 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Oberon online compiler</title>
  6. <link rel="stylesheet" href="jslibs/codemirror/codemirror.css">
  7. <!-- <link rel="stylesheet" href="http://codemirror.net/doc/docs.css"> -->
  8. <script src="jslibs/codemirror/codemirror.js"></script>
  9. <script src="jslibs/codemirror/javascript.js"></script>
  10. <script src="jslibs/processing/processing.js"></script>
  11. <script src="codemirror/oberon07.js"></script>
  12. <style type="text/css">
  13. .code {
  14. display: inline-block;
  15. }
  16. #links {
  17. float:right;
  18. }
  19. </style>
  20. </head>
  21. <body>
  22. <div id="links">
  23. <p><a href="http://oberspace.dyndns.org">Home</a></p>
  24. <p><a href="https://github.com/vladfolts/oberonjs">Development</a></p>
  25. </div>
  26. <p>
  27. <form action="">
  28. Oberon module(s):
  29. <input type="radio" name="compiler" value="oberon" checked>Oberon
  30. <input type="radio" name="compiler" value="eberon" id="eberon">
  31. <a href="https://github.com/vladfolts/oberonjs/wiki/Eberon">
  32. Eberon
  33. </a>
  34. </form>
  35. </p>
  36. <div class="code">
  37. <textarea id="source" rows="10" cols="80">
  38. MODULE test;
  39. IMPORT JS;
  40. BEGIN
  41. JS.alert("Hello, World!")
  42. END test.
  43. </textarea>
  44. </div>
  45. <p>
  46. <button onclick="compile()">Compile</button>
  47. <button onclick="compile(); run()">Compile &amp; Run</button>
  48. </p>
  49. <p id="compileErrors" style="color:red"></p>
  50. <p id="compileTime"></p>
  51. <div class="code">
  52. <textarea id="result" rows="10" cols="80">
  53. </textarea>
  54. </div>
  55. <p><button onclick="run()">Run</button></p>
  56. <p><button onclick="run_tests()">Run Tests</button></p>
  57. <p id="runErrors" style="color:red"></p>
  58. <p id="runTime"></p>
  59. <p id="testsResult"></p>
  60. <p id="version"></p>
  61. <script src="oc.js"></script>
  62. <script>
  63. var oberonEditor = CodeMirror.fromTextArea(document.getElementById('source'), {
  64. lineNumbers: true,
  65. mode: "text/x-oberon07"
  66. });
  67. var javascriptEditor = CodeMirror.fromTextArea(document.getElementById('result'), {
  68. lineNumbers: true,
  69. mode: "text/javascript"
  70. });
  71. if (typeof buildVersion != "undefined")
  72. document.getElementById("version").textContent = buildVersion;
  73. function compile(){
  74. var src = oberonEditor.getValue();
  75. var result;
  76. var errors = "";
  77. var start = new Date();
  78. try {
  79. var language = require(
  80. document.getElementById("eberon").checked
  81. ? "eberon/eberon_grammar.js"
  82. : "oberon/oberon_grammar.js").language;
  83. result = require("oc.js").compile(src, language, function(e){
  84. errors += e;
  85. });
  86. }
  87. catch (e) {
  88. errors += e;
  89. }
  90. var compileTime = (new Date() - start) / 1000;
  91. if (!result)
  92. result = "";
  93. javascriptEditor.setValue(result);
  94. document.getElementById("compileErrors").textContent = errors;
  95. document.getElementById("compileTime").textContent = "compile time (seconds): " + compileTime;
  96. }
  97. function timed_run(action){
  98. var start = new Date();
  99. var result = action();
  100. var runTime = (new Date() - start) / 1000;
  101. document.getElementById("runTime").textContent = "run time (seconds): " + runTime;
  102. return result;
  103. }
  104. function run(){
  105. var errElement = document.getElementById("runErrors");
  106. errElement.textContent = "";
  107. timed_run(function(){
  108. try{
  109. eval(javascriptEditor.getValue());
  110. }
  111. catch (e){
  112. var errors = "" + e;
  113. errElement.textContent = errors;
  114. }
  115. });
  116. }
  117. function run_tests(){
  118. var resultsElement = document.getElementById("testsResult");
  119. resultsElement.textContent = "running...";
  120. var result = timed_run(function(){
  121. return require("test_unit.js").run();
  122. });
  123. resultsElement.textContent = result ? "Tests OK" : "Tests failed";
  124. }
  125. </script>
  126. </body>
  127. </html>