
# ¶óÀ̼¾½º
MIT License (»ó¾÷Àû ÀÌ¿ë °¡´É, ÀÚÀ¯·Î¿î ¼öÁ¤·¹èÆ÷ °¡´É)
# Ư¡ ¹× ¼³¸í
ÅØ½ºÆ® ÆíÁý
- ±½°Ô, ±â¿ïÀÓ, ¹ØÁÙ, Ãë¼Ò¼±, À§Ã·ÀÚ, ¾Æ·¡Ã·ÀÚ
- 6´Ü°è Á¦¸ñ, Àο뱸, ÄÚµåºí·Ï ´Ü¶ô ½ºÅ¸ÀÏ
- 10Á¾ ³»Àå ±Û²Ã(Ä¿½ºÅÒ ±Û²Ã Ãß°¡ °¡´É), ÁÙ°£°Ý Á¶Àý
- ±ÛÀÚ»ö·Çü±¤Ææ Ä÷¯ ÇÈÄ¿, ÁÂ/Áß/¿ì/¾çÂÊ Á¤·Ä
- ¼ø¼/ºñ¼ø¼/üũ¸®½ºÆ® ¸ñ·Ï, µé¿©¾²±â/³»¾î¾²±â
- Undo/Redo È÷½ºÅ丮 (´ÜÃàŰ Áö¿ø)
¹Ìµð¾î »ðÀÔ
- À̹ÌÁö: URL/ÆÄÀÏ ¾÷·Îµå, base64 ÀÓº£µå ¶Ç´Â ¼¹ö ¾÷·Îµå Áö¿ø
- ÀζóÀÎ À̹ÌÁö ÀÚ¸£±â µµ±¸ ³»Àå
- µ¿¿µ»ó: YouTube, Vimeo, MP4/WebM/OGG Á÷Á¢ URLÀ» ¹ÝÀÀÇü ¾ÆÀÌÇÁ·¹ÀÓ·video ű׷Π·»´õ¸µ
- Ç¥: ±×¸®µå ÇÈÄ¿·Î Á÷°üÀû »ðÀÔ
- À̸ðÁö ÇÈÄ¿: 7°³ Ä«Å×°í¸® 380Á¾ + Ű¿öµå °Ë»ö
- FontAwesome ¾ÆÀÌÄÜ ÇÈÄ¿: ½ºÅ¸ÀÏ·Å©±â·»ö»ó ¼³Á¤ °¡´É
ÆíÀÇ ±â´É
- ã±â·¹Ù²Ù±â ´ÙÀ̾ó·Î±× (Ctrl+F / Ctrl+H)
- ¿ìŬ¸¯ ÄÁÅØ½ºÆ® ¸Þ´º
- ½ºÅ©·Ñ ½Ã »ó´Ü °íÁ¤µÇ´Â sticky Åø¹Ù
- ¶óÀÌÆ®/´ÙÅ© Å׸¶
- »óŹÙ: ½Ç½Ã°£ ´Ü¾î/±ÛÀÚ ¼ö Ç¥½Ã + µå·¡±×·Î ³ôÀÌ Á¶Àý
- HTML ¼Ò½º º¸±â ¸ðµå
- localStorage ÀÚµ¿ ÀúÀå (auto-save)
- Àбâ Àü¿ë ¸ðµå
- 8°³ ¾ð¾î ·ÎÄÉÀÏ ³»Àå (Çѱ¹¾î 'ko' Æ÷ÇÔ)
- RTL(¿ì→ÁÂ) ·¹À̾ƿô Áö¿ø
- Űº¸µå ´ÜÃàŰ ´ÙÀ̾ó·Î±× (Shift+?)
°³¹ßÀÚ Ä£È ±â´É
- ´ÙÁß ÀνºÅϽº Áö¿ø (ÆäÀÌÁö´ç ¿©·¯ ¿¡µðÅÍ, °¢°¢ µ¶¸³ »óÅÂ)
- Bootstrap 4/5 Ŭ·¡½º ÀÚµ¿ Àû¿ë ¿É¼Ç
- Prism.js ÀÚµ¿ ¿¬µ¿ ÄÚµå ÇÏÀ̶óÀÌÆ®
- ºÙ¿©³Ö±â »ì±Õ ¹× Markdown ´ÜÃà ÀÔ·Â º¯È¯
- dzºÎÇÑ À̺¥Æ® ½Ã½ºÅÛ (change, paste, selectionChange, charLimitReached µî)
Űº¸µå ´ÜÃàŰ
| ´ÜÃàŰ |
µ¿ÀÛ |
Ctrl + Z |
½ÇÇà Ãë¼Ò(Undo) |
Ctrl + Shift + Z / Ctrl + Y |
´Ù½Ã ½ÇÇà(Redo) |
Ctrl + B |
±½°Ô |
Ctrl + I |
±â¿ïÀÓ |
Ctrl + U |
¹ØÁÙ |
Ctrl + F |
ã±â ´ÙÀ̾ó·Î±× ¿±â |
Ctrl + H |
ã±â·¹Ù²Ù±â ´ÙÀ̾ó·Î±× ¿±â |
Shift + Enter |
ÁÙ¹Ù²Þ »ðÀÔ |
Tab |
°ø¹é »ðÀÔ / ¸ñ·Ï µé¿©¾²±â |
Shift + Tab |
¸ñ·Ï ³»¾î¾²±â |
Shift + ? |
´ÜÃàŰ µµ¿ò¸» ´ÙÀ̾ó·Î±× |
Ãßõ Ȱ¿ëó
CMS °Ô½ÃÆÇ ±Û¾²±â, °ü¸®ÀÚ ÆäÀÌÁö ÄÜÅÙÃ÷ ÀÔ·Â, ¸Å´º¾ó·¹®¼ ÀÛ¼º µµ±¸, ¸ÞÀÏ·´º½º·¹ÅÍ ÀÛ¼º±â, ´ñ±Û·¸®ºä ÀÔ·Ââ µî.
Âü°í ¸µÅ©
# ¼³Ä¡¹æ¹ý
¨ç ÆÐŰÁö ¸Å´ÏÀú ¼³Ä¡
npm install autumnnote # ¶Ç´Â yarn add autumnnote # ¶Ç´Â pnpm install autumnnote
import AutumnNote from 'autumnnote'; import 'autumnnote/dist/autumnnote.css';
¨è CDN ¹æ½Ä
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/autumnnote/dist/autumnnote.css"> <script src="https://cdn.jsdelivr.net/npm/autumnnote"></script>
¨é ±âº» »ç¿ë
const editor = AutumnNote.create('#article-editor', { // ¿É¼Ç ¼³Á¤ });
¨ê ¼¹ö ¾÷·Îµå ó¸® ¿¹½Ã
const editor = AutumnNote.create('#article-editor', { onImageUpload(files) { const payload = new FormData(); payload.append('image', files[0]); fetch('/media/images/upload', { method: 'POST', body: payload }) .then(res => res.json()) .then(({ url }) => editor.insertImage(url, files[0].name)); }, });
¡Ø FontAwesomeÀÌ ÆäÀÌÁö¿¡ ·ÎµåµÇ¾î ÀÖÀ¸¸é ÀÚµ¿ °¨ÁöµÇ¾î FA ¾ÆÀÌÄÜÀ» »ç¿ëÇϰí, ¾øÀ¸¸é ³»Àå SVG ¾ÆÀÌÄÜÀ¸·Î ´ëüµË´Ï´Ù.
Áß¿ä ¿É¼Ç
| ¿É¼Ç¸í |
¼³¸í |
±âº»°ª |
placeholder |
ºó ¿¡µðÅÍ¿¡ Ç¥½ÃÇÒ ¾È³» ¹®±¸ |
- |
height |
Ãʱ⠳ôÀÌ(px) |
200 |
minHeight / maxHeight |
ÃÖ¼Ò/ÃÖ´ë ³ôÀÌ(px), 0Àº ¹«Á¦ÇÑ |
100 / 0 |
toolbar |
Åø¹Ù ¹öư ±×·ì ¹è¿·Î Ä¿½ºÅ͸¶ÀÌ¡ |
Àüü ¹öư |
toolbarOverflow |
Åø¹Ù ³Ñħ ó¸® ('wrap' ¶Ç´Â 'scroll') |
wrap |
theme |
Å׸¶ ('light' ¶Ç´Â 'dark') |
light |
lang |
UI ¾ð¾î ('ko', 'en', 'ja', 'zh', 'vi', 'fr', 'de', 'es') |
en |
direction |
ÅØ½ºÆ® ¹æÇâ ('ltr' ¶Ç´Â 'rtl') |
ltr |
autoSave / autoSaveKey |
localStorage ÀÚµ¿ ÀúÀå Ȱ¼ºÈ ¹× Ű ÁöÁ¤ |
false |
readOnly |
Àбâ Àü¿ë ¸ðµå |
false |
allowImageUpload |
À̹ÌÁö µå·¡±×/ºÙ¿©³Ö±â/¾÷·Îµå Çã¿ë |
true |
maxImageSize |
ÃÖ´ë À̹ÌÁö Å©±â(MB) |
5 |
maxChars / maxWords |
ÃÖ´ë ±ÛÀÚ/´Ü¾î ¼ö Á¦ÇÑ, 0Àº ¹«Á¦ÇÑ |
0 |
pasteAsPlainText |
ºÙ¿©³Ö±â ½Ã ¼½Ä Á¦°Å |
false |
pasteCleanHTML |
ºÙ¿©³Ö±â ½Ã HTML »ì±Õ |
true |
markdownPaste |
Markdown ´ÜÃà ÀÔ·ÂÀ» HTML·Î º¯È¯ |
true |
stickyToolbar / stickyToolbarOffset |
½ºÅ©·Ñ ½Ã Åø¹Ù »ó´Ü °íÁ¤ ¹× ¿ÀÇÁ¼Â(px) |
false |
useBootstrap / bootstrapVersion |
Bootstrap CSS Ŭ·¡½º Àû¿ë (4 ¶Ç´Â 5) |
false / 5 |
codeHighlight |
Prism.js ÀÚµ¿ ·Îµå·Î ÄÚµå ºí·Ï ÇÏÀ̶óÀÌÆ® |
true |
colorSwatches |
»ö»ó ÆÈ·¹Æ® ¾Õ¿¡ Ãß°¡ÇÒ ºê·£µå Ä÷¯ ¹è¿ |
[ ] |
onChange / onFocus / onBlur / onInit |
ÄÜÅÙÃ÷ º¯°æ / Æ÷Ä¿½º / ºí·¯ / ÃʱâÈ Äݹé |
- |
onImageUpload / onImageError |
Ä¿½ºÅÒ ¾÷·Îµå Çڵ鷯 / À̹ÌÁö °ÅºÎ Äݹé |
- |
ÁÖ¿ä API ¸Þ¼µå
| ¸Þ¼µå |
¼³¸í |
editor.getHTML() |
»ì±ÕµÈ HTML ¹Ýȯ (Æû Á¦Ãâ¿ë) |
editor.setHTML(html) |
ÄÜÅÙÃ÷ ¼³Á¤ |
editor.getText() |
Æò¹® ÅØ½ºÆ® ¹Ýȯ |
editor.clear() |
ÄÜÅÙÃ÷ ºñ¿ì±â |
editor.destroy() |
¿¡µðÅÍ Á¦°Å ¹× ¿ø·¡ DOM º¹¿ø |
editor.setDisabled(bool) |
¿¡µðÅÍ·Åø¹Ù Ȱ¼º/ºñȰ¼º Àüȯ |
editor.on(event, handler) / editor.off(event, handler) |
À̺¥Æ® ¸®½º³Ê µî·Ï/ÇØÁ¦ |
|