Skip to content

villainscode/lite-editor

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

LiteEditor

License

๐Ÿš€ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋ช…๋ น์–ด

# ๊ฐœ๋ฐœ ํ™˜๊ฒฝ (ํƒ€์ž„์Šคํƒฌํ”„ ์บ์‹œ ๋ฒ„์ŠคํŒ…)
npm run dev          # ํฌํŠธ 8080์—์„œ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘
npm start           # ๊ธฐ๋ณธ ๊ฐœ๋ฐœ ์„œ๋ฒ„ ์‹œ์ž‘

# ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ (๋ฒ„์ „ ๊ธฐ๋ฐ˜ ์บ์‹œ ๋ฒ„์ŠคํŒ…)  
npm run serve:prod  # ํฌํŠธ 3000์—์„œ ํ”„๋กœ๋•์…˜ ์„œ๋ฒ„ ์‹œ์ž‘

# ๋นŒ๋“œ
npm run build       # ํ”„๋กœ๋•์…˜ ๋นŒ๋“œ ์‹คํ–‰

ํ™˜๊ฒฝ๋ณ„ ์ ‘์† URL

ํ™˜๊ฒฝ ๊ฐ•์ œ ์„ค์ •

URL ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ํ™˜๊ฒฝ์„ ๊ฐ•์ œ๋กœ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค:

  • http://localhost:8080?env=development
  • http://localhost:8080?env=production

์บ์‹œ ๋ฒ„์ŠคํŒ… ์ „๋žต

  • ๊ฐœ๋ฐœ ํ™˜๊ฒฝ: ํƒ€์ž„์Šคํƒฌํ”„ ๊ธฐ๋ฐ˜ (?t=1234567890)
  • ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ: ๋ฒ„์ „ ๊ธฐ๋ฐ˜ (?v=1.0.05)

๐Ÿ“‹ ๊ฐœ์š”

LiteEditor๋Š” ์›น ํŽ˜์ด์ง€์— ์‰ฝ๊ฒŒ ํ†ตํ•ฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ๋Ÿ‰ ๋ฆฌ์น˜ ํ…์ŠคํŠธ ์—๋””ํ„ฐ์ž…๋‹ˆ๋‹ค. JavaScript์™€ CSS๋งŒ์œผ๋กœ ๊ตฌํ˜„๋˜์–ด ๋†’์€ ํ˜ธํ™˜์„ฑ์„ ์ œ๊ณตํ•˜๋ฉฐ, ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ฐ˜ ๊ตฌ์กฐ๋กœ ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์—๋””ํ„ฐ ์˜์—ญ์˜ ํˆด๋ฐ”์™€ ๋‚ด์šฉ์„ ์ž‘์„ฑํ•˜๋Š” ์ปจํ…์ธ  ์˜์—ญ์„ ํ†ตํ•ฉํ•˜๊ฑฐ๋‚˜, ๋ถ„๋ฆฌํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๐Ÿ› ๏ธ ์„ค์น˜ ๋ฐฉ๋ฒ•

๋ถ„๋ฆฌ ๋ชจ๋“œ (๊ถŒ์žฅ)

<!DOCTYPE html>
<html lang="ko">
<head>
    <link rel="stylesheet" href="css/loader.css">
</head>
<body>
    <div class="lite-editor" id="main-editor">
        <div id="lite-editor-toolbar"></div>
        <div id="lite-editor-content" contenteditable="true">
            <p>๋‚ด์šฉ์„ ์ž…๋ ฅํ•˜์„ธ์š”...</p>
        </div>
    </div>

    <script src="js/loader.js"></script>
    <script>
    document.addEventListener('lite-editor-loaded', function() {
        LiteEditor.init('#lite-editor-content', {
            separatedMode: true,
            toolbarTarget: '#lite-editor-toolbar',
            plugins: ['bold', 'italic', 'underline', 'link', 'reset']
        });
    });
    </script>
</body>
</html>

ํ†ตํ•ฉ ๋ชจ๋“œ

<!DOCTYPE html>
<html lang="ko">
<head>
    <link rel="stylesheet" href="css/loader.css">
</head>
<body>
    <div id="editor">๊ธฐ์กด ๋‚ด์šฉ</div>

    <script src="js/loader.js"></script>
    <script>
    document.addEventListener('lite-editor-loaded', function() {
        LiteEditor.init('#editor', {
            plugins: ['bold', 'italic', 'underline', 'link', 'reset']
        });
    });
    </script>
</body>
</html>

โœจ ์—๋””ํ„ฐ ๊ธฐ๋Šฅ ๋ชฉ๋ก

  • ๊ตต๊ฒŒ - ํ…์ŠคํŠธ๋ฅผ ๊ตต๊ฒŒ ํ‘œ์‹œ
  • ๊ธฐ์šธ์ž„ - ํ…์ŠคํŠธ๋ฅผ ๊ธฐ์šธ์ž„๊ผด๋กœ ํ‘œ์‹œ
  • ๋ฐ‘์ค„ - ํ…์ŠคํŠธ์— ๋ฐ‘์ค„ ์ถ”๊ฐ€
  • ์ทจ์†Œ์„  - ํ…์ŠคํŠธ์— ์ทจ์†Œ์„  ์ถ”๊ฐ€
  • ํฐํŠธ ํŒจ๋ฐ€๋ฆฌ - ๋‹ค์–‘ํ•œ ๊ธ€๊ผด ์„ ํƒ
  • ํฐํŠธ ์ƒ‰์ƒ - ํ…์ŠคํŠธ ์ƒ‰์ƒ ๋ณ€๊ฒฝ
  • ํ•˜์ด๋ผ์ดํŠธ - ํ…์ŠคํŠธ ๋ฐฐ๊ฒฝ์ƒ‰ ๋ณ€๊ฒฝ
  • ์ œ๋ชฉ ์Šคํƒ€์ผ - H1~H6 ์ œ๋ชฉ ํƒœ๊ทธ ์ ์šฉ
  • ํ…์ŠคํŠธ ์ •๋ ฌ - ์ขŒ/์ค‘/์šฐ/์–‘์ชฝ ์ •๋ ฌ
  • ๋“ค์—ฌ์“ฐ๊ธฐ - ๋“ค์—ฌ์“ฐ๊ธฐ ๋ฐ ๋‚ด์–ด์“ฐ๊ธฐ
  • ์ˆœ์„œ ์—†๋Š” ๋ชฉ๋ก - ๋ถˆ๋ฆฟ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ์ˆœ์„œ ์žˆ๋Š” ๋ชฉ๋ก - ๋ฒˆํ˜ธ ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ์ฒดํฌ๋ฆฌ์ŠคํŠธ - ์ฒดํฌ๋ฐ•์Šค ๋ฆฌ์ŠคํŠธ ์ƒ์„ฑ
  • ํ•˜์ดํผ๋งํฌ - ๋งํฌ ์‚ฝ์ž… ๋ฐ ํŽธ์ง‘
  • ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ - ์ด๋ฏธ์ง€ ์‚ฝ์ž… ๋ฐ ๋ฆฌ์‚ฌ์ด์ฆˆ
  • ํ…Œ์ด๋ธ” - ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋ฐ ํŽธ์ง‘
  • ๋™์˜์ƒ - ๋‹ค์ค‘ ํ”Œ๋žซํผ ๋™์˜์ƒ ์‚ฝ์ž…
  • ์ธ์šฉ๊ตฌ - ๋ธ”๋ก์ฟผํŠธ ์ƒ์„ฑ
  • ์ธ๋ผ์ธ ์ฝ”๋“œ - ์ฝ”๋“œ ์„œ์‹ ์ ์šฉ
  • ์ฝ”๋“œ ๋ธ”๋ก - ์ฝ”๋“œ ๋ธ”๋ก ๋ฐ ๊ตฌ๋ฌธ ๊ฐ•์กฐ
  • ์ˆ˜ํ‰์„  - ๊ตฌ๋ถ„์„  ์‚ฝ์ž…
  • ์‹คํ–‰ ์ทจ์†Œ - ์ด์ „ ์ž‘์—…์œผ๋กœ ๋˜๋Œ๋ฆฌ๊ธฐ
  • ๋‹ค์‹œ ์‹คํ–‰ - ์ทจ์†Œํ•œ ์ž‘์—… ๋‹ค์‹œ ์‹คํ–‰
  • ์„œ์‹ ์ œ๊ฑฐ - ๋ชจ๋“  ์„œ์‹ ์ œ๊ฑฐ

๐ŸŽฏ ์ œํ’ˆ ์„ค๋ช… ๋ฐ ํŠน์ง•

์ฃผ์š” ํŠน์ง•

  • ๊ฒฝ๋Ÿ‰ํ™”: ์ตœ์†Œํ•œ์˜ ๋ฆฌ์†Œ์Šค๋กœ ์ตœ๋Œ€ ์„ฑ๋Šฅ ์ œ๊ณต
  • ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ธฐ๋ฐ˜: ํ•„์š”ํ•œ ๊ธฐ๋Šฅ๋งŒ ์„ ํƒํ•˜์—ฌ ์‚ฌ์šฉ
  • ๋†’์€ ํ˜ธํ™˜์„ฑ: ๋ชจ๋“  ๋ชจ๋˜ ๋ธŒ๋ผ์šฐ์ € ์ง€์›
  • ์‰ฌ์šด ํ†ตํ•ฉ: ๊ฐ„๋‹จํ•œ HTML/JS ์ฝ”๋“œ๋กœ ์ฆ‰์‹œ ์‚ฌ์šฉ
  • ๋ถ„๋ฆฌ ๋ชจ๋“œ: ํˆด๋ฐ”์™€ ์ฝ˜ํ…์ธ  ์˜์—ญ์„ ์ž์œ ๋กญ๊ฒŒ ๋ฐฐ์น˜
  • ํ‚ค๋ณด๋“œ ๋‹จ์ถ•ํ‚ค: ์ฃผ์š” ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ๋‹จ์ถ•ํ‚ค ์ง€์›
  • ๋‹ค์ค‘ ํ”Œ๋žซํผ ๋™์˜์ƒ ์ฒจ๋ถ€: YouTube, Vimeo, ์นด์นด์˜คTV ๋“ฑ ๋™์˜์ƒ ์ง€์›
  • ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ: ํฐํŠธ, ์ƒ‰์ƒ ๋“ฑ ์‹ค์‹œ๊ฐ„ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
  • ์ด๋ฏธ์ง€ ๋งํฌ, ํŒŒ์ผ ์ฒจ๋ถ€ ํ˜•ํƒœ ์ง€์›: ์ด๋ฏธ์ง€ ํฌ๊ธฐ ์กฐ์ ˆ, ์œ„์น˜ ์กฐ์ • ์ง€์›

๊ธฐ์ˆ ์  ํŠน์ง•

  • ์ˆœ์ˆ˜ JavaScript: ์™ธ๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ ์˜์กด์„ฑ ์—†์Œ
  • ๋ชจ๋“ˆํ™” ์„ค๊ณ„: ๊ฐ ๊ธฐ๋Šฅ์ด ๋…๋ฆฝ์ ์ธ ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๊ตฌ์„ฑ
  • ์บ์‹œ ๋ฒ„์ŠคํŒ…: ๊ฐœ๋ฐœ/ํ”„๋กœ๋•์…˜ ํ™˜๊ฒฝ๋ณ„ ์บ์‹œ ์ „๋žต
  • ๋ณด์•ˆ ๊ฐ•ํ™”: XSS ๋ฐฉ์ง€ ๋ฐ URL ๊ฒ€์ฆ ์‹œ์Šคํ…œ
  • ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ: ํ†ตํ•ฉ ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ ๋ฐ ๋””๋ฒ„๊น… ์‹œ์Šคํ…œ

๐Ÿš€ ๋กœ๋“œ๋งต

  • HTML/Rich ๋ชจ๋“œ ์ „ํ™˜
  • HTML/Markdown ๊ฐ€์ ธ์˜ค๊ธฐ/๋‚ด๋ณด๋‚ด๊ธฐ
  • ์ˆ˜ํ•™ ์ˆ˜์‹ ํŽธ์ง‘๊ธฐ
  • ์ฐจํŠธ ์ƒ์„ฑ ๋„๊ตฌ
  • ํ…œํ”Œ๋ฆฟ ์–‘์‹ ์ง€์›
  • ์ฝ”๋“œ ํ•˜์ด๋ผ์ดํŒ… ๊ฐœ์„ 
  • ๋ชจ๋ฐ”์ผ ์ตœ์ ํ™”
  • ๋‹ค๊ตญ์–ด ์ง€์› ํ™•์žฅ

๐Ÿค ๊ธฐ์—ฌํ•˜๊ธฐ

LiteEditor ํ”„๋กœ์ ํŠธ์— ๊ธฐ์—ฌํ•˜๋Š” ๋ฐฉ๋ฒ•:

  1. ์ด ์ €์žฅ์†Œ๋ฅผ ํฌํฌํ•˜์„ธ์š”
  2. ์ƒˆ ๊ธฐ๋Šฅ ๋ธŒ๋žœ์น˜๋ฅผ ๋งŒ๋“œ์„ธ์š” (git checkout -b feature/amazing-feature)
  3. ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ์ปค๋ฐ‹ํ•˜์„ธ์š” (git commit -m 'Add some amazing feature')
  4. ๋ธŒ๋žœ์น˜์— ํ‘ธ์‹œํ•˜์„ธ์š” (git push origin feature/amazing-feature)
  5. Pull Request๋ฅผ ์ƒ์„ฑํ•˜์„ธ์š”

๐Ÿ“„ ๋ผ์ด์„ผ์Šค

์ด ํ”„๋กœ์ ํŠธ๋Š” Apache License 2.0 with Commons Clause ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ ๋ฐฐํฌ๋ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ LICENSE ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์„ธ์š”.

๐Ÿ“ž ๋ฌธ์˜


๊ฐœ๋ฐœํŒ€: subnote lite-editor team in korea
๋ฒ„์ „: v1.0.05
์ตœ์ข… ์—…๋ฐ์ดํŠธ: 2025-05-25

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •