editor-codeblock.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. let codeEditor = ace.edit("codeblock-editor");
  2. codeEditor.setTheme("ace/theme/tomorrow_night");
  3. codeEditor.getSession().setMode("ace/mode/markdown");
  4. codeEditor.setOption('fontSize', '14px');
  5. codeEditor.setOption('hScrollBarAlwaysVisible', false);
  6. codeEditor.setOption('wrap', true);
  7. let modelist = ace.require("ace/ext/modelist");
  8. let vueCodeBlock = new Vue({
  9. el: '#modal-editor-codeblock',
  10. data: {
  11. modes: modelist.modesByName,
  12. modeSelected: 'text'
  13. },
  14. watch: {
  15. modeSelected: (val, oldVal) => {
  16. loadAceMode(val).done(() => {
  17. ace.require("ace/mode/" + val);
  18. codeEditor.getSession().setMode("ace/mode/" + val);
  19. });
  20. }
  21. },
  22. methods: {
  23. cancel: (ev) => {
  24. mdeModalOpenState = false;
  25. $('#modal-editor-codeblock').slideUp();
  26. },
  27. insertCode: (ev) => {
  28. if(mde.codemirror.doc.somethingSelected()) {
  29. mde.codemirror.execCommand('singleSelection');
  30. }
  31. let codeBlockText = '```' + vueCodeBlock.modeSelected + '\n' + codeEditor.getValue() + '\n```';
  32. mde.codemirror.doc.replaceSelection(codeBlockText);
  33. vueCodeBlock.cancel();
  34. }
  35. }
  36. });
  37. // ACE - Mode Loader
  38. let modelistLoaded = [];
  39. let loadAceMode = (m) => {
  40. return $.ajax({
  41. url: '/js/ace/mode-' + m + '.js',
  42. dataType: "script",
  43. cache: true,
  44. beforeSend: () => {
  45. if(_.includes(modelistLoaded, m)) {
  46. return false;
  47. }
  48. },
  49. success: () => {
  50. modelistLoaded.push(m);
  51. }
  52. });
  53. }