2013-05-29 70 views
1

我使用CodeMirror在基於HTML5的演示文稿中創建編輯器。它是最簡單的形式,html看起來像這樣。codemirror 3.0格式預裝了textarea代碼

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

和向下的文件準備好我的這個作品如預期,textarea的被替換爲編輯器的代碼

$(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插件的代碼,它不再是codemirror 3.0的一部分。

有沒有辦法自動格式化textarea內的代碼?

回答

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

不幸的是,我只有一個textarea。不太確定它爲什麼鎖定,但它非常的終端,而且速度非常快。 –