Chciałbym móc konwertować określone obszary tekstu na stronie do edytorów ACE.
Czy ktoś ma jakieś wskazówki?
EDYTOWAĆ:
Mam plik editor.html działający z jednym obszarem tekstowym, ale jak tylko dodam drugi, drugi nie jest konwertowany na edytor.
EDYCJA 2:
Postanowiłem porzucić pomysł posiadania kilku i zamiast tego otworzyć jeden w nowym oknie. Moim nowym problemem jest to, że kiedy ukrywam () i pokazuję () obszar tekstowy, wyświetlacz działa nieprawidłowo. Jakieś pomysły?
javascript
textarea
ace-editor
Paweł
źródło
źródło
Odpowiedzi:
O ile rozumiałem ideę Asa, nie powinieneś sam tworzyć obszaru tekstowego jako edytora Asa. Zamiast tego należy utworzyć dodatkowy div i zaktualizować textarea za pomocą funkcji .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()); });
lub po prostu zadzwoń
tylko wtedy, gdy wyślesz formularz z podanym obszarem tekstu. Nie jestem pewien, czy jest to właściwy sposób korzystania z Ace, ale tak jest w przypadku GitHub .
źródło
'SELECT 1OR&nbps;2;'
do textarea. Czy ktoś może mi powiedzieć, co robię źle?Duncansmart ma na swojej stronie github całkiem fajne rozwiązanie, progressive-ace, które pokazuje prosty sposób na podłączenie edytora ACE do twojej strony.
Zasadniczo otrzymujemy wszystkie
<textarea>
elementy zdata-editor
atrybutem i konwertujemy każdy na edytor ACE. Przykład ustawia również niektóre właściwości, które należy dostosować do własnych upodobań, i pokazuje, jak można używaćdata
atrybutów do ustawiania właściwości dla poszczególnych elementów, takich jak pokazywanie i ukrywanie rynnydata-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>
źródło
Możesz mieć wielu edytorów asów. Po prostu nadaj każdemu obszarowi tekstów identyfikator i utwórz Edytor asów dla obu IDS w następujący sposób:
<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>
źródło
Aby stworzyć edytor, po prostu wykonaj:
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; }
Muszą być wyraźnie ustawione i dopasowane do rozmiaru. Wydaje mi się, że przez show () i hide () odnosisz się do funkcji jQuery. Nie jestem pewien, jak dokładnie to robią, ale nie może modyfikować miejsca, które zajmuje w DOM. Ukrywam się i pokazuję za pomocą:
$('#code1').css('visibility', 'visible'); $('#code2').css('visibility', 'hidden');
Jeśli użyjesz właściwości css „display”, to nie zadziała.
Sprawdź wiki tutaj, aby dowiedzieć się, jak dodawać motywy, tryby itp ... https://github.com/ajaxorg/ace/wiki/Embedding---API
Uwaga: nie muszą to być pola tekstowe, mogą to być dowolne elementy.
źródło
ace.edit('code1')
, otrzymasz śmieci takie jak:<textarea class="ace_editor ace-twilight ace_focus"><div class="ace_gutter">...</textarea>
Innymi słowy, ace.edit próbuje wepchnąć się do obszaru tekstowego i nie jest to zbyt miłe.Dla każdego takiego jak ja, który chce tylko minimalnego, działającego przykładu użycia Ace z CDN:
<!DOCTYPE html> <html lang="en"> <body style="margin:0"> <div id="editor">function () { console.log('this is a demo, try typing!') } </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 = "120px"; </script> </body> </html>
źródło