editor.js 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. define('editor', function (_require, exports, _module) {
  2. function addScripts(data) {
  3. function add(data) {
  4. var s = document.createElement('script');
  5. if (data.innerHTML) s.innerHTML = data.innerHTML;
  6. else if (data.src) s.src = data.src;
  7. return new Promise(function (resolve, reject) {
  8. s.onload = function () {
  9. resolve();
  10. };
  11. s.onerror = function () {
  12. reject();
  13. };
  14. document.body.appendChild(s);
  15. });
  16. }
  17. if (!data.map) data = [data];
  18. return Promise.all(data.map(add));
  19. }
  20. function addCSS(data) {
  21. function add(data) {
  22. var s;
  23. if (data.html) {
  24. s = document.createElement('style');
  25. s.innerHTML = data.html;
  26. } else if (data.href) {
  27. s = document.createElement('link');
  28. s.rel = 'stylesheet';
  29. s.href = data.href;
  30. }
  31. if (s) document.body.appendChild(s);
  32. }
  33. if (!data.forEach) data = [data];
  34. data.forEach(add);
  35. }
  36. function initCodeMirror() {
  37. addCSS([
  38. {href: '/lib/CodeMirror/lib/codemirror.css'},
  39. {href: '/mylib/CodeMirror/fold.css'},
  40. {href: '/mylib/CodeMirror/search.css'},
  41. ]);
  42. return addScripts(
  43. {src: '/lib/CodeMirror/lib/codemirror.js'}
  44. ).then(function () {
  45. return addScripts([
  46. {src: '/lib/CodeMirror/mode/javascript/javascript.js'},
  47. {src: '/lib/CodeMirror/addon/comment/continuecomment.js'},
  48. {src: '/lib/CodeMirror/addon/edit/matchbrackets.js'},
  49. {src: '/lib/CodeMirror/addon/edit/closebrackets.js'},
  50. {src: '/lib/CodeMirror/addon/fold/foldcode.js'},
  51. {src: '/lib/CodeMirror/addon/fold/foldgutter.js'},
  52. {src: '/lib/CodeMirror/addon/fold/brace-fold.js'},
  53. {src: '/lib/CodeMirror/addon/fold/comment-fold.js'},
  54. {src: '/lib/CodeMirror/addon/search/match-highlighter.js'},
  55. {src: '/lib/CodeMirror/addon/search/searchcursor.js'},
  56. {src: '/lib/CodeMirror/addon/selection/active-line.js'},
  57. {src: '/mylib/CodeMirror/search.js'},
  58. ]);
  59. });
  60. }
  61. var readyCodeMirror;
  62. exports.init = function (options) {
  63. options = options || {};
  64. readyCodeMirror = readyCodeMirror || initCodeMirror();
  65. return readyCodeMirror.then(function(){
  66. var editor = CodeMirror(options.container, {
  67. continueComments: true,
  68. matchBrackets: true,
  69. autoCloseBrackets: true,
  70. highlightSelectionMatches: true,
  71. lineNumbers: true,
  72. mode: 'javascript',
  73. lineWrapping: true,
  74. styleActiveLine: true,
  75. foldGutter: true,
  76. gutters: ['CodeMirror-linenumbers', 'CodeMirror-foldgutter'],
  77. });
  78. editor.clearHistory = function() {
  79. this.getDoc().clearHistory();
  80. };
  81. editor.setValueAndFocus = function(value) {
  82. this.setValue(value);
  83. this.focus();
  84. };
  85. options.readonly && editor.setOption('readOnly', options.readonly);
  86. options.onchange && editor.on('change', options.onchange);
  87. var extraKeys = {};
  88. options.onexit && (extraKeys.Esc = options.onexit);
  89. options.onsave && (extraKeys['Ctrl-S'] = extraKeys['Cmd-S'] = options.onsave);
  90. editor.setOption('extraKeys', extraKeys);
  91. return editor;
  92. });
  93. };
  94. });