Ace: HTML ํ˜•์‹์œผ๋กœ ๊ฒŒ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์—ฌ๋Ÿฌ Ace ํŽธ์ง‘๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2017๋…„ 10์›” 17์ผ  ยท  4์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: ajaxorg/ace

์•ˆ๋…•. ์›น ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์— Ace Editor๋ฅผ ์‚ฌ์šฉํ•  ๊ณ„ํš์ด์ง€๋งŒ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ(Flask)์„ ์ง€์›ํ•˜๋Š” ๋ฐฑ์—”๋“œ ์‹œ์Šคํ…œ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒŒ์‹œํ•˜๋Š” ๋‘ ๊ฐœ์˜ ๊ณ ์œ ํ•œ ํŽธ์ง‘๊ธฐ๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

Ace์—์„œ ๋‘ ๊ฐœ์˜ ํŽธ์ง‘๊ธฐ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•˜์ง€๋งŒ ๋ฌธ์ œ๋Š” ํ…์ŠคํŠธ ์˜์—ญ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด๋ฆ„์ด ๋™์ผํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ด๊ฐ€ ๋ณผ ์ˆ˜ ์žˆ๋Š” ํ•œ ์ด๋Ÿฌํ•œ ๊ฒƒ๋“ค์€ Flask์— ์–‘์‹์œผ๋กœ ๊ฒŒ์‹œํ•  ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ถฉ๋Œ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.

ํ…์ŠคํŠธ ์˜์—ญ์˜ ์ด๋ฆ„์„ ๋ณ€๊ฒฝํ•˜์—ฌ ๋ฌธ์ œ ์—†์ด ๋‘ ๊ฐœ์˜ ๊ฐœ๋ณ„ "์—”ํ‹ฐํ‹ฐ"๋กœ Flask์— ๊ฒŒ์‹œํ•  ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์•„์ด๋””์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ? ์ž…๋ ฅ์€ JSON ๊ฐœ์ฒด์ž…๋‹ˆ๋‹ค.

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ์ถœํ•  ๋•Œ ์›๋ณธ ํ…์ŠคํŠธ ์˜์—ญ์„ ์œ ์ง€ํ•˜๊ณ  ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<form method="get" action="#">
    <div>
        <textarea name=t1></textarea>
    </div>
    <div>
        <textarea name=t2></textarea>
    </div>
    <div>
        <input type=submit>
    </div>
</form>
<div id=log></div>
<script src="http://ajaxorg.github.io/ace-builds/src/ace.js"></script>
<script>
    function createEditor(name) {
        // find the textarea
        var textarea = document.querySelector("form textarea[name=" + name + "]");

        // create ace editor 
        var editor = ace.edit()
        editor.container.style.height = "100px"
        editor.session.setValue(textarea.value)
        // replace textarea with ace
        textarea.parentNode.insertBefore(editor.container, textarea)
        textarea.style.display = "none"
        // find the parent form and add submit event listener
        var form = textarea
        while (form && form.localName != "form") form = form.parentNode
        form.addEventListener("submit", function() {
            // update value of textarea to match value in ace
            textarea.value = editor.getValue()
        }, true)
    }
    createEditor("t1")
    createEditor("t2")
</script>

๋ชจ๋“  4 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š”, textarea names ์€(๋Š”) ๋ฌด์Šจ ๋œป์ธ๊ฐ€์š”? ace๋Š” ์–‘์‹์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํ…์ŠคํŠธ ์˜์—ญ์„ ๋งŒ๋“ค์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

@nightwing ๊ทธ๋Ÿฌ๋ฉด HTML ์–‘์‹์„ ํ†ตํ•ด POST๋กœ ์ œ์ถœ๋œ Ace Editor(์‚ฌ๋žŒ์ด ํŽธ์ง‘ํ•  ์ˆ˜ ์žˆ๊ณ  ํŽธ์ง‘ํ•  ์˜ˆ์ •)์—์„œ ์ฝ˜ํ…์ธ ๋ฅผ ์–ป์œผ๋ ค๋ฉด ์–ด๋–ป๊ฒŒ ํ•ด์•ผ ํ•ฉ๋‹ˆ๊นŒ? "ํ…์ŠคํŠธ ์˜์—ญ ์ด๋ฆ„"์„ ์˜๋ฏธํ•  ๋•Œ ํ…์ŠคํŠธ ์˜์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” html ์†์„ฑ "์ด๋ฆ„"์„ ์ฐธ์กฐํ•ฉ๋‹ˆ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๋ฐฑ์—”๋“œ ์Šคํฌ๋ฆฝํŠธ์˜ ํ…์ŠคํŠธ ์˜์—ญ ๋‚ด๋ถ€์—์„œ ์ž…๋ ฅ์„ ๋ฐ›๊ณ  ์ฟผ๋ฆฌ ๋“ฑ์œผ๋กœ ๋ฐฑ์—”๋“œ ๋ณ€๊ฒฝ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๐Ÿค”

๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ œ์ถœํ•  ๋•Œ ์›๋ณธ ํ…์ŠคํŠธ ์˜์—ญ์„ ์œ ์ง€ํ•˜๊ณ  ๊ฐ’์„ ์—…๋ฐ์ดํŠธํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

<form method="get" action="#">
    <div>
        <textarea name=t1></textarea>
    </div>
    <div>
        <textarea name=t2></textarea>
    </div>
    <div>
        <input type=submit>
    </div>
</form>
<div id=log></div>
<script src="http://ajaxorg.github.io/ace-builds/src/ace.js"></script>
<script>
    function createEditor(name) {
        // find the textarea
        var textarea = document.querySelector("form textarea[name=" + name + "]");

        // create ace editor 
        var editor = ace.edit()
        editor.container.style.height = "100px"
        editor.session.setValue(textarea.value)
        // replace textarea with ace
        textarea.parentNode.insertBefore(editor.container, textarea)
        textarea.style.display = "none"
        // find the parent form and add submit event listener
        var form = textarea
        while (form && form.localName != "form") form = form.parentNode
        form.addEventListener("submit", function() {
            // update value of textarea to match value in ace
            textarea.value = editor.getValue()
        }, true)
    }
    createEditor("t1")
    createEditor("t2")
</script>

์˜ค, ๊ณ ๋งˆ์›Œ์š” ๋‚˜์ดํŠธ์œ™! ๋‚˜์ค‘์— ์‹œ๋„ํ•ด๋ณด๊ณ  ์–ด๋–ป๊ฒŒ ๋˜๋Š”์ง€ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š” :)

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰