텍스트 영역을 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; " >
<div id="editor">some text</div>
</div>
<div style="position:relative; height: 450px; " >
<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>
참고URL : https://stackoverflow.com/questions/6440439/how-do-i-make-a-textarea-an-ace-editor
'programing' 카테고리의 다른 글
M2E 및 maven에서 소스 폴더를 Eclipse 소스 폴더로 생성 (0) | 2020.09.09 |
---|---|
CDN을 통해 전달 된 JavaScript 파일이 변경되지 않도록하려면 어떻게해야합니까? (0) | 2020.09.09 |
Ruby Metaprogramming : 동적 인스턴스 변수 이름 (0) | 2020.09.09 |
Seaborn Barplot의 레이블 축 (0) | 2020.09.09 |
선택한 경우 ListBox 항목에 대한 WPF DataTemplate 변경 (0) | 2020.09.09 |