Last update: March 15, 2023
<aside> <img src="/icons/list_gray.svg" alt="/icons/list_gray.svg" width="40px" /> 목차
</aside>
<!DOCTYPE html>
<html>
<head xmlns:th="<http://www.thymeleaf.org>">
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<!-- TOAST UI Editor CSS -->
<link rel="stylesheet" href="<https://uicdn.toast.com/editor/latest/toastui-editor.min.css>" />
</head>
<body>
<!-- 글 등록 -->
<div class="container">
<form th:action="@{/posts}" method="post">
<!-- 제목 -->
<div class="input-group mb-3">
<span class="input-group-text" id="inputGroup-sizing-default">제목</span>
<input name="title" type="text" class="form-control" aria-label="title input"/>
</div>
<!-- 본문 -->
<div id="editor"></div>
<!-- 버튼 -->
<div class="d-flex">
<button type="button" class="btn btn-md btn-primary ms-auto my-3" onclick="submitPost(this)">글 등록
</button>
<a class="btn btn-md btn-outline-secondary ms-2 my-3" href="/posts" value="취소">취소</a>
</div>
<input type="hidden" name="content">
<input type="hidden" name="userId" id="userId" th:value="${user.id}"/>
</form>
</div>
<!-- TOAST UI Editor CDN -->
<script src="<https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js>"></script>
<!-- 한국어 패치 -->
<script src="<https://uicdn.toast.com/editor/latest/i18n/ko-kr.min.js>"></script>
<script>
const Editor = toastui.Editor;
const editor = new Editor({
el: document.querySelector('#editor'),
height: '500px',
initialEditType: 'wysiwyg',
previewStyle: 'vertical',
language: "ko-KR"
});
function submitPost(button) {
console.log("submit");
let form = button.closest('form');
let inputs = form.getElementsByTagName('input');
for (let input of inputs) {
if(input.name === 'content') {
input.value = editor.getHTML();
}
}
form.submit();
}
</script>
</body>
</html>
CSS부분 - head 태그에 넣어줌
<!-- TOAST UI Editor CSS -->
<link rel="stylesheet" href="<https://uicdn.toast.com/editor/latest/toastui-editor.min.css>" />
에디터 부분 - 에디터가 들어갈 자리에 넣어줌
<div id="editor"></div>
라이브러리 import 부분(CDN) - 한국어 패치 포함
<!-- TOAST UI Editor CDN -->
<script src="<https://uicdn.toast.com/editor/latest/toastui-editor-all.min.js>"></script>
<!-- 한국어 패치 -->
<script src="<https://uicdn.toast.com/editor/latest/i18n/ko-kr.min.js>"></script>
latest
대신 버전 입력적용 코드
const Editor = toastui.Editor;
const editor = new Editor({
el: document.querySelector('#editor'),
height: '500px',
initialEditType: 'wysiwyg',
previewStyle: 'vertical',
language: 'ko-KR'
});
HTML form으로 전송
<button type="button" class="btn btn-md btn-primary ms-auto my-3" onclick="submitPost(this)">글 등록</button>
<input type="hidden" name="content">
submitPost(this)
함수를 걸어두고, form 태그 안에 컨텐츠를 담을 hidden input 태그를 하나 둠
type=”button”
을 넣지 않으면 HTML5부터는 button을 누를 때 submit이 되니 주의해야 함function submitPost(button) {
let form = button.closest('form');
let contentInput = form.querySelector('input[name=content]');
contentInput.value = editor.getHTML();
if (validatePost(form)) {
form.submit();
}
}
editor.getHTML()
통해 에디터 내부에 작성한 HTML을 받아서 hidden input에 넣은 후 submit()
하는 방식으로 구현
getHTML()
getHtml()