CodeMirror๋ก ์๋ฆ๋ค์ด editor ๋ง๋ค๊ธฐ
syntax highlight๊ฐ ๋๋ markdown editor๋ฅผ ๋ง๋ค์ด๋ณด๊ณ ์๋ค. ๊ทธ๋ฌ๋ค๊ฐ ๋ฌธ๋ '์ด๋ฏธ ์ด๋ฐ๊ฑธ ๋ง๋ค์ด๋ ์ฌ๋๋ค์ด ์์ง ์๋?' ํ๋ ์๊ฐ์ด ๋ค์๋ค. ์ฐพ์๋ดค๋ค. ์ญ์ ์ฌ๋ฌ๊ฐ์ง๊ฐ ๋์๋๋ฐ CodeMirror๊ฐ ๋ง์ด ๋ณด์ธ๋ค. ์๊ฐ๋ณด๋ค ์ฌ์ฉ๋ฒ๋ ๊ฐ๋จํ๊ณ ๊ฒฐ๊ณผ๋ฌผ๋ ์๋นํ ๊ด์ฐฎ๋ค. ํ์ง๋ง ์ ๋ง ๋ฏฟ์๋งํ๊ฑด์ง ํ์ ์ด ์์๊ธด๋ค.
์ข ๋ ์ฐพ์๋ณด๊ธฐ๋ก ํ๊ณ ํ
๋ธ๋ฌ ํ
๋ง ์๋ํฐ ์์ค์ฝ๋๋ฅผ ์ด์ด๋ณด์๋ค. tiny-mce์ ํ์ ์ด ๋ณด์ธ๋ค. ์ค๋ง tiny-mce๋ฅผ ์ด๊ฑด๊ฐ ํ๊ณ ์ ์ ๋ ๋ณด๊ณ ์๋๋ฐ Tumblr.init() ๋ด๋ถ์์ ์๋ํฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ ๋ฏ ๋ฌด์จ ์๋ํฐ๋ฅผ ์ฐ๋์ง ์ ๋๋ฌ๋์ง ์๋๋ค.
๊ฒ์์ ๋ ํด๋ณธ ๊ฒฐ๊ณผ Ace๋ฅผ ๋ฐ๊ฒฌํ๋ค. ์ด๊ฒ๋ CodeMirror์ ๋น์ทํ ์์ค์ ๊ฒฐ๊ณผ๋ฌผ์ ๋ณด์ฌ์ค๋ค. ๊ฒ๋ค๊ฐ Cloud9 ๋ฑ์ ์ ๋ช
ํ ๊ฐ๋ฐ๊ด๋ จ ์๋น์ค๋ค์์ ์ด๊ฑธ ์ฌ์ฉํ๋ค๊ณ ํ๋ค. ๋์ธ๋ฅผ ๋ฐ๋ผ๊ฐ๋๊ฒ ์์ ํด๋ณด์ฌ์ Ace๋ฅผ ์ ์ฉํด๋ณด์๋ค. ์ญ์ ์๋นํ ๊ด์ฐฎ๋ค. ํ
๋ง๋ ๋ค์ํ๊ฒ ์ง์ํ๊ณ ์ธ์ด๋ ๋ค์ํ๊ฒ ์ง์ํ๋ค.
'๊ทธ๋ ์ด๊ฑธ๋ก ๊ฒฐ์ !' ์ด๋ผ๊ณ ์๊ฐํ๋ ์๊ฐ ์ปค๋ค๋ ๋จ์ ์ด ๋์ ๋ณด์ธ๋ค. ํ์ด์ดํญ์ค์์ ํ๊ธ์ ์ ๋๋ก ์ธ ์๊ฐ ์๋ค. ์๋ฌด๋๋ keydown ์ด๋ฒคํธ์์ ์ด๋ฒคํธ๋ฅผ ์กฐ์ํ๋ ๊ฒ ๊ฐ๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ ํ๊ธ์ด ์ ๋๋ก ์
๋ ฅ์ด ์๋๊ธฐ ๋๋ฌธ์ด๋ค. ๊ฐ๋ง๋ณด๋ ๋ญ๊ฐ ํ
๋ธ๋ฌ์์ ๊ฒช๋ ๋ฌธ์ ์ ๋น์ทํด๋ณด์๋ค.
ํ
๋ธ๋ฌ ์์ค๋ฅผ ๋ค์ ๊น๋ณด์๋ค. ace-editor ๊ฐ ๋์ ๋ค์ด์จ๋ค. ์ด์ ์ ๋ดค์๋ ์ ๋ชป๋ดค์๊น? ํ๊ธ์์ ๋ํ๋๋ ํ์์ด ๋ฑ Ace์ ๊ฐ๋ค. ์๋ง๋ ํ
๋ธ๋ฌ์ ๋งํฌ๋ค์ด ํธ์ง๊ธฐ๋ ์ด๊ฑธ ์ฐ๋ ๊ฒ ๊ฐ๋ค.
๋๋ฌผ์ ์ ์ ํ์น๊ณ ๋ค์ CodeMirror๋ก ๋์์ ๋ฏฟ์๋งํ์ง ๊ฒ์์ ์์ํ๋ค. (์! CodeMirror๋ ํ๊ธ๋ฌธ์ ๊ฐ ์๋ค) ์๊ฐํ๋ ๊ฒ๋ณด๋ค ์๋นํ ๋ง์ ๊ณณ์์ ์ฌ์ฉ ์ค์ด๋ค. ์ด์ ์ ์ด๊ฑธ ๋ณด์ง ๋ชปํ๋ ๊ฑด ์๋ง๋ Ace์ ํ๋ คํ ์น์ฌ์ดํธ์ ๋์กฐ์ ์ธ ํ
์คํธ๋ฟ์ธ ์น์ฌ์ดํธ๋๋ฌธ์ด์๋ ๊ฒ ๊ฐ๋ค. ๋ฌธ๋ '๋ฌด์กฐ๊ฑด ์ด๋ป์ผ ๋ผ' ๋ผ๋ ๊ด๊ณ ์นดํผ๊ฐ ์๊ฐ๋๋ฉฐ ๋ถ๋๋ฌ์์ง๋ค.
์ ์ฉ๋ฐฉ๋ฒ์ ์ญ์ ๊ฐ๋จํ๋ค. js, css๋ฅผ ๋ฃ์ ํ์ ์๋๋ฅผ ์ฌ์ฉํ๋ฉด ๋๋ค.
var textarea = document.getElementById('editor'); var editor = CodeMirror.fromTextArea(textarea, { lineNumbers: true, lineWrapping: true, theme: "eclipse", val: textarea.value });
addon๋ค์ด ๋ช๊ฐ ์๋๋ฐ js ํ์ผ์ ๋ก๋ํ๋ ๊ฒ๋ง์ผ๋ก ์ ์ฉ๋๋ ํ์ํ ๊ฒ๋ง ๋ก๋ํ๋ฉด ๋๋ค. ์ค์ ์๋น์ค์ ๋ฃ์๋๋ ํ์ํ ๊ฒ๋ง mergeํด์ ์ฌ์ฉํ๋ฉด ๋ ๊ฒ ๊ฐ๋ค. ํ
๋ง๋ ๋ฐ๋ชจ ์ฌ์ดํธ์์ ๋ณด๊ณ ๋ง์ ๋๋ ๊ฑธ๋ก ์ ํ๋ฉด ๋๊ฒ ๋ค. ๋ช๋ช ๋ฌธ๋ฒ์ ์ถ๊ฐํ ์๋ ์๋๋ฐ ๊ทธ๊ฑด ์ฐจ๊ทผ์ฐจ๊ทผ ์์๊ฐ๋ฉด์ ํด๋ด์ผ๊ฒ ๋ค.