programing

텍스트 영역을 ACE 편집기로 만들려면 어떻게합니까?

nasanasas 2020. 9. 9. 08:07
반응형

텍스트 영역을 ACE 편집기로 만들려면 어떻게합니까?


페이지의 특정 텍스트 영역을 ACE 편집자로 변환하고 싶습니다.

누구든지 포인터가 있습니까?

편집하다:

하나의 텍스트 영역에서 작동하는 editor.html 파일이 있지만 두 번째 텍스트를 추가하자마자 두 번째 파일이 편집기로 변환되지 않습니다.

편집 2 :

나는 여러 개를 갖는 아이디어를 폐기하고 대신 새 창에서 하나를 열기로 결정했습니다. 내 새로운 곤경은 텍스트 영역을 숨기고 () 표시 ()하면 표시가 잘못된다는 것입니다. 어떤 아이디어?


내가 Ace에 대한 아이디어를 이해하는 한, 텍스트 영역 을 Ace 편집기 자체로 만들면 안됩니다 . 추가 div를 만들고 대신 .getSession () 함수를 사용하여 텍스트 영역을 업데이트해야 합니다.

HTML

<textarea name="description"/>
<div id="description"/>

js

var editor = ace.edit("description");
var textarea = $('textarea[name="description"]').hide();
editor.getSession().setValue(textarea.val());
editor.getSession().on('change', function(){
  textarea.val(editor.getSession().getValue());
});

아니면 그냥 전화

textarea.val(editor.getSession().getValue());

주어진 텍스트 영역으로 양식을 제출할 때만. 이것이 Ace를 사용하는 올바른 방법인지 확실하지 않지만 GitHub에서 사용되는 방법 입니다.


Duncansmart는 ACE 편집기를 페이지에 연결하는 한 가지 간단한 방법을 보여주는 Progress-ace 라는 github 페이지에 꽤 멋진 솔루션 을 제공합니다.

기본적으로 속성 이있는 모든 <textarea>요소를 가져와 data-editor각각 ACE 편집기로 변환합니다. 이 예제는 또한 원하는대로 사용자 정의해야하는 몇 가지 속성을 설정하고 속성을 사용 data하여 여백 표시 및 숨기기와 같은 요소별로 속성을 설정 하는 방법을 보여줍니다 data-gutter.

// Hook up ACE editor to all textareas with data-editor attribute
$(function() {
  $('textarea[data-editor]').each(function() {
    var textarea = $(this);
    var mode = textarea.data('editor');
    var editDiv = $('<div>', {
      position: 'absolute',
      width: textarea.width(),
      height: textarea.height(),
      'class': textarea.attr('class')
    }).insertBefore(textarea);
    textarea.css('display', 'none');
    var editor = ace.edit(editDiv[0]);
    editor.renderer.setShowGutter(textarea.data('gutter'));
    editor.getSession().setValue(textarea.val());
    editor.getSession().setMode("ace/mode/" + mode);
    editor.setTheme("ace/theme/idle_fingers");

    // copy back to textarea on form submit...
    textarea.closest('form').submit(function() {
      textarea.val(editor.getSession().getValue());
    })
  });
});
textarea {
  width: 100%;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.2.9/ace.js"></script>
<textarea name="my-xml-editor" data-editor="xml" data-gutter="1" rows="15"></textarea>
<br>
<textarea name="my-markdown-editor" data-editor="markdown" data-gutter="0" rows="15"></textarea>


여러 Ace 편집기를 가질 수 있습니다. 각 텍스트 영역에 ID를 부여하고 다음과 같이 두 IDS에 대한 Ace 편집기를 만드십시오.

<style>
#editor, #editor2 {
    position: absolute;
    width: 600px;
    height: 400px;
}
</style>
<div style="position:relative; height: 450px; " >
&nbsp;
<div id="editor">some text</div>
</div>
<div style="position:relative; height: 450px; " >
&nbsp;
<div id="editor2">some text</div>
</div>
<script src="ace.js" type="text/javascript" charset="utf-8"></script>
<script src="theme-twilight.js" type="text/javascript" charset="utf-8"></script>
<script src="mode-xml.js" type="text/javascript" charset="utf-8"></script>
<script>
window.onload = function() {
    var editor = ace.edit("editor");
    editor.setTheme("ace/theme/twilight");
    var XmlMode = require("ace/mode/xml").Mode;
    editor.getSession().setMode(new XmlMode());

    var editor2 = ace.edit("editor2");
    editor2.setTheme("ace/theme/twilight");
    editor2.getSession().setMode(new XmlMode());

};
</script>

편집기를 만들려면 다음을 수행하십시오.

HTML :

<textarea id="code1"></textarea>
<textarea id="code2"></textarea>

JS :

var editor1 = ace.edit('code1');
var editor2 = ace.edit('code2');
editor1.getSession().setValue("this text will be in the first editor");
editor2.getSession().setValue("and this in the second");

CSS:

#code1, code2 { 
  position: absolute;
  width: 400px;
  height: 50px;
}

They must be explicitly positioned and sized. By show() and hide() I believe you are referring to the jQuery functions. I'm not sure exactly how they do it, but it cannot modify the space it takes up in the DOM. I hide and show using:

$('#code1').css('visibility', 'visible');
$('#code2').css('visibility', 'hidden');

If you use the css property 'display' it will not work.

Check out the wiki here for how to add themes, modes, etc... https://github.com/ajaxorg/ace/wiki/Embedding---API

Note: they do not have to be textareas, they can be whatever element you want.


For anyone like me that was routed to this page and just wants a minimal, copy-pasteable working example of using Ace using the library from CDN:

<!DOCTYPE html>
<html lang="en">
  <body>
    <div id="editor">function(){}</div>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/ace/1.1.01/ace.js" type="text/javascript" charset="utf-8"></script>
    <script>
      var editor = ace.edit("editor");
      editor.setTheme("ace/theme/monokai");
      editor.getSession().setMode("ace/mode/javascript");
      document.getElementById("editor").style.height = "300px";
    </script>
  </body>
</html>

Yields: enter image description here

참고URL : https://stackoverflow.com/questions/6440439/how-do-i-make-a-textarea-an-ace-editor

반응형