01_Markdown Editor
- VueJS – :value, @input, v-html
- marked.js – 마크다운 문법을 HTML로 컴파일
- lodash.js – 자바스크립트 함수형 라이브러리
Result
HTML
<script src="https://unpkg.com/marked@0.3.6"></script>
<script src="https://unpkg.com/lodash@4.16.0"></script>
<div id="editor">
// textarea의 기본값으로 input 변수값 사용
// 텍스트가 입력될 때마다 update 함수 실행
<textarea :value="input" @input="update"></textarea>
<div v-html="compiledMarkdown"></div>
</div>
- v-html – compliledMarkdown 함수의 리턴값을 HTML으로 출력
JavaScript
new Vue({
el: '#editor',
data: {
input: '# hello'
},
computed: {
// input 값이 바뀔 때마다 실행
compiledMarkdown: function () {
return marked(this.input, { sanitize: true })
}
},
methods: {
// textarea 값이 바뀔 때마다 실행
update: _.debounce(function (e) {
this.input = e.target.value
console.log(e.target.value);
}, 300)
}
})
- _.dobounce – lodashJS 함수 (지정한 시간에 한번만 실행)
- indexOf() – 문자열 값과 일치하는 첫번째 위치 반환. 값이 없으면 -1 반환
- slice() – 문자열을 잘라서 새로운 문자열로 반환
CSS
html, body, #editor {
margin: 0;
height: 100%;
font-family: 'Helvetica Neue', Arial, sans-serif;
color: #333;
}
textarea, #editor div {
display: inline-block;
width: 49%;
height: 100%;
vertical-align: top;
box-sizing: border-box;
padding: 0 20px;
}
textarea {
border: none;
border-right: 1px solid #ccc;
resize: none;
outline: none;
background-color: #f6f6f6;
font-size: 14px;
font-family: 'Monaco', courier, monospace;
padding: 20px;
}
code {
color: #f66;
}