oberonjs.html 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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</input>
  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. </input>
  35. <p/>
  36. <input type="checkbox" id="checkIndexesOption">checked indexes</input>
  37. </form>
  38. </p>
  39. <div class="code">
  40. <textarea id="source" rows="10" cols="80">
  41. MODULE test;
  42. IMPORT JS;
  43. BEGIN
  44. JS.alert("Hello, World!")
  45. END test.
  46. </textarea>
  47. </div>
  48. <p>
  49. <button onclick="compile()">Compile</button>
  50. <button onclick="compile(); run()">Compile &amp; Run</button>
  51. </p>
  52. <p id="compileErrors" style="color:red"></p>
  53. <p id="compileTime"></p>
  54. <div class="code">
  55. <textarea id="result" rows="10" cols="80">
  56. </textarea>
  57. </div>
  58. <p><button onclick="run()">Run</button></p>
  59. <p><button onclick="run_tests()">Run Tests</button></p>
  60. <p id="runErrors" style="color:red"></p>
  61. <p id="runTime"></p>
  62. <p id="testsResult"></p>
  63. <p id="version"></p>
  64. <script src="oc.js"></script>
  65. <script>
  66. var oberonEditor = CodeMirror.fromTextArea(document.getElementById('source'), {
  67. lineNumbers: true,
  68. mode: "text/x-oberon07"
  69. });
  70. var javascriptEditor = CodeMirror.fromTextArea(document.getElementById('result'), {
  71. lineNumbers: true,
  72. mode: "text/javascript"
  73. });
  74. if (typeof buildVersion != "undefined")
  75. document.getElementById("version").textContent = buildVersion;
  76. function compile(){
  77. var src = oberonEditor.getValue();
  78. var result;
  79. var errors = "";
  80. var start = new Date();
  81. try {
  82. var language = require(
  83. document.getElementById("eberon").checked
  84. ? "eberon/eberon_grammar.js"
  85. : "oberon/oberon_grammar.js").language;
  86. var options = {checkIndexes: document.getElementById("checkIndexesOption").checked};
  87. result = require("oc.js").compile(
  88. src,
  89. language,
  90. function(e){errors += e;},
  91. options
  92. );
  93. }
  94. catch (e) {
  95. errors += e;
  96. }
  97. var compileTime = (new Date() - start) / 1000;
  98. if (!result)
  99. result = "";
  100. javascriptEditor.setValue(result);
  101. document.getElementById("compileErrors").textContent = errors;
  102. document.getElementById("compileTime").textContent = "compile time (seconds): " + compileTime;
  103. }
  104. function timed_run(action){
  105. var start = new Date();
  106. var result = action();
  107. var runTime = (new Date() - start) / 1000;
  108. document.getElementById("runTime").textContent = "run time (seconds): " + runTime;
  109. return result;
  110. }
  111. function run(){
  112. var errElement = document.getElementById("runErrors");
  113. errElement.textContent = "";
  114. timed_run(function(){
  115. try{
  116. eval(javascriptEditor.getValue());
  117. }
  118. catch (e){
  119. var errors = "" + e;
  120. errElement.textContent = errors;
  121. }
  122. });
  123. }
  124. function run_tests(){
  125. var resultsElement = document.getElementById("testsResult");
  126. resultsElement.textContent = "running...";
  127. var result = timed_run(function(){
  128. return require("test_unit.js").run();
  129. });
  130. resultsElement.textContent = result ? "Tests OK" : "Tests failed";
  131. }
  132. </script>
  133. </body>
  134. </html>