You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

169 lines
4.0KB

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
  6. <title>Editor</title>
  7. <style type="text/css" media="screen">
  8. .ace_editor {
  9. position: relative !important;
  10. border: 1px solid lightgray;
  11. margin: auto;
  12. height: 200px;
  13. width: 80%;
  14. }
  15. .ace_editor.fullScreen {
  16. height: auto;
  17. width: auto;
  18. border: 0;
  19. margin: 0;
  20. position: fixed !important;
  21. top: 0;
  22. bottom: 0;
  23. left: 0;
  24. right: 0;
  25. z-index: 10;
  26. }
  27. body.fullScreen {
  28. overflow: hidden;
  29. /*transform breaks position fixed*/
  30. transform: none!important;
  31. }
  32. .scrollmargin {
  33. height: 500px;
  34. text-align: center;
  35. }
  36. .large-button {
  37. color: lightblue;
  38. cursor: pointer;
  39. font: 30px arial;
  40. padding: 20px;
  41. text-align: center;
  42. border: medium solid transparent;
  43. display: inline-block;
  44. }
  45. .large-button:hover {
  46. border: medium solid lightgray;
  47. border-radius: 10px 10px 10px 10px;
  48. box-shadow: 0 0 12px 0 lightblue;
  49. }
  50. body {
  51. transform: translateZ(0);
  52. }
  53. </style>
  54. </head>
  55. <body>
  56. <div class="scrollmargin">
  57. <span onclick="scroll()" class="large-button">
  58. scroll down &dArr;
  59. </span>
  60. </div>
  61. <pre id="editor">function foo(items) {
  62. var i;
  63. for (i = 0; i &lt; items.length; i++) {
  64. alert("Ace Rocks " + items[i]);
  65. }
  66. }</pre>
  67. <div class="scrollmargin">
  68. <div style="padding:20px">
  69. press F11 to switch to fullscreen mode
  70. </div>
  71. <span onclick="add()" class="large-button">
  72. +
  73. </span>
  74. </div>
  75. <!-- load ace -->
  76. <script src="../src/ace.js"></script>
  77. <!-- load ace themelist extension -->
  78. <script src="../src/ext-themelist.js"></script>
  79. <!-- load ace language_tools extension -->
  80. <script src="../src/ext-language_tools.js"></script>
  81. <script>
  82. var $ = document.getElementById.bind(document);
  83. var dom = require("ace/lib/dom");
  84. ace.config.set("enableBasicAutocompletion", true);
  85. //add command to all new editor instances
  86. require("ace/commands/default_commands").commands.push({
  87. name: "Toggle Fullscreen",
  88. bindKey: "F11",
  89. exec: function(editor) {
  90. var fullScreen = dom.toggleCssClass(document.body, "fullScreen")
  91. dom.setCssClass(editor.container, "fullScreen", fullScreen)
  92. editor.setAutoScrollEditorIntoView(!fullScreen)
  93. editor.resize()
  94. }
  95. })
  96. // create first editor
  97. var editor = ace.edit("editor");
  98. editor.setTheme("ace/theme/twilight");
  99. editor.session.setMode("ace/mode/javascript");
  100. editor.renderer.setScrollMargin(10, 10);
  101. editor.setOptions({
  102. // "scrollPastEnd": 0.8,
  103. autoScrollEditorIntoView: true
  104. });
  105. var count = 1;
  106. function add() {
  107. var oldEl = editor.container
  108. var pad = document.createElement("div")
  109. pad.style.padding = "40px"
  110. oldEl.parentNode.insertBefore(pad, oldEl.nextSibling)
  111. var el = document.createElement("div")
  112. oldEl.parentNode.insertBefore(el, pad.nextSibling)
  113. count++
  114. var theme = themes[Math.floor(themes.length * Math.random() - 1e-5)]
  115. editor = ace.edit(el)
  116. editor.setOptions({
  117. mode: "ace/mode/javascript",
  118. theme: theme,
  119. showPrintMargin: false,
  120. wrap: true,
  121. indentedSoftWrap: true,
  122. showFoldWidgets: true,
  123. showLineNumbers: true,
  124. autoScrollEditorIntoView: true
  125. })
  126. editor.setValue([
  127. "this is editor number: ", count, "\n",
  128. "using theme \"", theme, "\"\n",
  129. ":)"
  130. ].join(""), -1)
  131. scroll()
  132. }
  133. function scroll(speed) {
  134. var top = editor.container.getBoundingClientRect().top
  135. speed = speed || 10
  136. if (top > 60 && speed < 500) {
  137. if (speed > top - speed - 50)
  138. speed = top - speed - 50
  139. else
  140. setTimeout(scroll, 10, speed + 10)
  141. window.scrollBy(0, speed)
  142. }
  143. }
  144. var themes = require("ace/ext/themelist").themes.map(function(t){return t.theme});
  145. window.add = add;
  146. window.scroll = scroll;
  147. </script>
  148. </body>
  149. </html>