2013-05-29 5 views
1

CodeMirror를 사용하여 HTML5 기반 프리젠 테이션에서 편집기를 만듭니다. 가장 간단한 형식의 html은 다음과 같습니다. codemirror 3.0 형식 사전로드 된 텍스트 영역 코드

<section class="pattern"> 
     <textarea id='pattern-view' class='codemirror' data-mode='javascript'> 
      var myModule = function(){ 
       //code goes here 
      } 
     </textarea> 
</section> 

및 문서의 아래

준비 나는 예상대로 이것은, 텍스트 영역 편집기로 대체 작동하는 코드

$(function(){ 
    var tAreas = document.querySelectorAll('.codemirror'); 
     for (var i = 0; i < tAreas.length; i++) { 
      CodeMirror.fromTextArea(tAreas[i], { theme: 'monokai', mode: tAreas[i].dataset.mode }); 
     } 
}); 

에게 있습니다. 문제는 들여 쓰기가 유지되고 올바르게 포맷되지 않았다는 것입니다. 코드 만 강조 표시하고 내용의 서식을 다시 지정하지 않습니다.

내가 여기에 추가해야 할 것이 있습니까? formatting.js addon에 대한 코드를 찾았습니다.이 코드는 더 이상 codemirror 3.0의 일부가 아닙니다.

텍스트 영역 내에 자동 포맷 코드가 있습니까?

답변

2

내 질문에 답하십시오. 이것에 기회가 될 사람들을 위해. 이전 codemirror에서 formatting.js를 가져 와서 원하는 위치에 놓습니다. 이 준비를 귀하의 DOM 준비 기능에 추가하십시오.

var tAreas = document.querySelectorAll('.codemirror'); //assuming all textareas have the class codemirror 

     for (var i = 0; i < tAreas.length; i++) { 
      var editor = CodeMirror.fromTextArea(tAreas[i], {theme: 'monokai',mode: tAreas[i].dataset.mode, tabMode: 'indent' }); 
      CodeMirror.commands["selectAll"](editor); 
      autoFormatSelection(editor); 
      $(tAreas[i]).trigger({type: 'keypress', which: 13}); 
     } 

     function getSelectedRange(editor) { 
      return { from: editor.getCursor(true), to: editor.getCursor(false) }; 
     } 

     function autoFormatSelection(editor) { 
      var range = getSelectedRange(editor); 
      editor.autoFormatRange(range.from, range.to); 
      CodeMirror.commands['goPageUp'](editor); 

     } 
+0

불행히도,이 접근법을 시도하면 실제로 25 % CPU (탭 프로세스 당 마개)로 내 페이지가 하드락됩니다. –

+0

문제가되는 텍스트 영역이 너무 길어서 화면이 잠길 것입니다. 적어도 나에게는 새로운 것을 시도하지 않은 다른 해결책은 없다. 이것을 장기 실행 프로세스로 설정하고 약속을 되돌려도 (또는 설정된 시간 초과시에도) 오랜 시간이 걸리는 문제가 계속 실행됩니다. –

+0

불행히도, 나는 단지 하나의 텍스트 영역을 가지고있었습니다. 왜 잠긴 지 잘 모르겠지만 터미널이 꽤 빠르며 빨리 끝냈습니다. –