Advertisement
DolphinX

Monaco

Feb 3rd, 2020
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.57 KB | None | 0 0
  1. <!DOCTYPE html>
  2.  
  3. <html lang="en" xmlns="http://www.w3.org/1999/xhtml">
  4. <head>
  5. <style type="text/css">
  6. html,
  7. body {
  8. width: 100%;
  9. height: 100%;
  10. margin: 0;
  11. padding: 0;
  12. overflow: hidden;
  13. }
  14. </style>
  15. <meta charset="utf-8" />
  16. <title></title>
  17. </head>
  18. <body>
  19. <div id="container" style="width:100%;height:100%;"></div>
  20. <script src="vs/loader.js"></script>
  21. <script type="text/javascript">
  22. require.config({ paths: { 'vs': 'vs' } });
  23. // API
  24. var GetText;
  25. var SetText;
  26. var SetTheme;
  27. var SetScroll;
  28. var ShowErr;
  29. var Refresh;
  30.  
  31. // Enablers
  32. var SwitchMinimap;
  33. var SwitchRenderWhitespace;
  34. var SwitchLinks;
  35. var SwitchLineHeight;
  36. var SwitchFontSize;
  37. var SwitchFolding;
  38. var SwitchAutoIndent;
  39. var SwitchFontFamily;
  40. var SwitchFontLigatures;
  41. var AddIntellisense;
  42.  
  43. // Variables
  44. var editor;
  45. var Proposals = [];
  46.  
  47. require(['vs/editor/editor.main'], function () {
  48. function getDependencyProposals() {
  49. return Proposals;
  50. }
  51.  
  52. monaco.languages.registerCompletionItemProvider('lua', {
  53. provideCompletionItems: function(model, position) {
  54. return getDependencyProposals();
  55. }
  56. });
  57.  
  58. monaco.editor.defineTheme('net-theme-light', {
  59. base: 'vs',
  60. inherit: true,
  61. rules: [
  62. { token: 'global', foreground: '000000' },
  63. { token: 'keyword', foreground: 'ff6a00' },
  64. { token: 'comment', foreground: '666666' },
  65. { token: 'number', foreground: 'ffc600' },
  66. { token: 'string', foreground: 'ff8c3a' },
  67. ]
  68. });
  69.  
  70. monaco.editor.defineTheme('net-theme-dark', {
  71. base: 'vs-dark',
  72. inherit: true,
  73. rules: [
  74. { token: 'global', foreground: 'FFFFFF', fontStyle: "bold" },
  75. { token: 'keyword', foreground: 'ff6a00', fontStyle: "bold" },
  76. { token: 'comment', foreground: '666666' },
  77. { token: 'number', foreground: 'ffc600' },
  78. { token: 'string', foreground: 'ff8c3a' },
  79. ]
  80. });
  81.  
  82. editor = monaco.editor.create(document.getElementById('container'), {
  83. value: [
  84. "--[[",
  85. " Starsmasher",
  86. "--]]",
  87. ].join('\n'),
  88. language: 'lua',
  89. theme: "net-theme-dark",
  90. folding: true,
  91. scrollbar: {
  92. verticalHasArrows: true,
  93. },
  94. dragAndDrop: true,
  95. links: false,
  96. minimap: {
  97. enabled: false,
  98. },
  99. showFoldingControls: "always",
  100. smoothScrolling: true,
  101. });
  102.  
  103. window.onresize = function() {
  104. editor.layout();
  105. };
  106.  
  107. GetText = function() {
  108. return editor.getValue();
  109. }
  110.  
  111. SetText = function(x) {
  112. editor.setValue(x);
  113. }
  114.  
  115. SetTheme = function(themeName) {
  116. if (themeName == "Dark") {
  117. monaco.editor.setTheme("net-theme-dark");
  118. }
  119.  
  120. }
  121.  
  122. SwitchMinimap = function(flag) {
  123. editor.updateOptions({
  124. minimap: {
  125. enabled: flag,
  126. }
  127. });
  128. }
  129.  
  130.  
  131. SwitchRenderWhitespace = function(op) {
  132. editor.updateOptions({
  133. renderWhitespace: op,
  134. });
  135. }
  136.  
  137. SwitchLinks = function(flag) {
  138. editor.updateOptions({
  139. links: flag,
  140. });
  141. }
  142.  
  143. SwitchLineHeight = function(num) {
  144. editor.updateOptions({
  145. lineHeight: num,
  146. });
  147. }
  148.  
  149. SwitchFontSize = function(num) {
  150. editor.updateOptions({
  151. fontSize: num,
  152. });
  153. }
  154.  
  155. SwitchFolding = function(flag) {
  156. editor.updateOptions({
  157. folding: flag,
  158. });
  159. }
  160.  
  161. SwitchAutoIndent = function(flag) {
  162. editor.updateOptions({
  163. autoIndent: flag,
  164. });
  165. }
  166.  
  167. SwitchFontFamily = function(name) {
  168. editor.updateOptions({
  169. fontFamily: name,
  170. });
  171. }
  172.  
  173. SwitchFontLigatures = function(flag) {
  174. editor.updateOptions({
  175. fontLigatures: flag,
  176. });
  177. }
  178.  
  179.  
  180. ShowErr = function(line, column, endline, endcolumn, errMessage) {
  181. editor.revealPositionInCenter({ lineNumber: line, column: column});
  182. editor.deltaDecorations([], [
  183. {
  184. range: new monaco.Range(line, column, endline, endcolumn),
  185. options: {
  186. inlineClassName: 'squiggly-error',
  187. hoverMessage: {
  188. value: errMessage,
  189. }
  190. },
  191. },
  192. ]);
  193. }
  194.  
  195. AddIntellisense = function(l, k, d, i) {
  196. var t;
  197. switch(k)
  198. {
  199. case "Class":
  200. t = monaco.languages.CompletionItemKind.Class;
  201. break;
  202. case "Color":
  203. t = monaco.languages.CompletionItemKind.Color;
  204. break;
  205. case "Constructor":
  206. t = monaco.languages.CompletionItemKind.Constructor;
  207. break;
  208. case "Enum":
  209. t = monaco.languages.CompletionItemKind.Enum;
  210. break;
  211. case "Field":
  212. t = monaco.languages.CompletionItemKind.Field;
  213. break;
  214. case "File":
  215. t = monaco.languages.CompletionItemKind.File;
  216. break;
  217. case "Folder":
  218. t = monaco.languages.CompletionItemKind.Folder;
  219. break;
  220. case "Function":
  221. t = monaco.languages.CompletionItemKind.Function;
  222. break;
  223. case "Interface":
  224. t = monaco.languages.CompletionItemKind.Interface;
  225. break;
  226. case "Keyword":
  227. t = monaco.languages.CompletionItemKind.Keyword;
  228. break;
  229. case "Method":
  230. t = monaco.languages.CompletionItemKind.Method;
  231. break;
  232. case "Module":
  233. t = monaco.languages.CompletionItemKind.Module;
  234. break;
  235. case "Property":
  236. t = monaco.languages.CompletionItemKind.Property;
  237. break;
  238. case "Reference":
  239. t = monaco.languages.CompletionItemKind.Reference;
  240. break;
  241. case "Snippet":
  242. t = monaco.languages.CompletionItemKind.Snippet;
  243. break;
  244. case "Text":
  245. t = monaco.languages.CompletionItemKind.Text;
  246. break;
  247. case "Unit":
  248. t = monaco.languages.CompletionItemKind.Unit;
  249. break;
  250. case "Value":
  251. t = monaco.languages.CompletionItemKind.Value;
  252. break;
  253. case "Variable":
  254. t = monaco.languages.CompletionItemKind.Variable;
  255. break;
  256. }
  257.  
  258. Proposals.push({
  259. label: l,
  260. kind: t,
  261. detail: d,
  262. insertText: i
  263. });
  264. }
  265.  
  266. SetScroll = function(line) {
  267. editor.revealLineInCenter({ lineNumber: line});
  268. }
  269.  
  270. Refresh = function() {
  271. var text = getText();
  272. setText("");
  273. editor.trigger('keyboard', 'type', {text: text});
  274. }
  275. });
  276. </script>
  277. </body>
  278. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement