Board posts
Wrap the textarea you already have. Form posting, edit screens and validation stay as they are.
Editor82.createEditor('#content', {
toolbar: 'board',
uploadUrl: '/upload',
});People used to SmartEditor start writing without a manual. No license key, no usage limits, no paid tier: 100% free.
Wrap the textarea you already have. Form posting, edit screens and validation stay as they are.
Editor82.createEditor('#content', {
toolbar: 'board',
uploadUrl: '/upload',
});Wide images, centered text and spec tables, with the editing area sized like your product page.
createEditor('#detail', {
contentStyle: 'body { max-width: 860px; margin: auto }',
uploadImage: uploadToS3,
});Headings, quotes, code blocks and video. Markdown habits like ## and ``` just work.
createEditor('#post', {
toolbar: 'basic',
height: 'auto',
autosave: true,
});Keep recurring notices, terms and FAQs as templates. Sizes and line heights use pt and %.
createEditor('#notice', {
templates: [{ title: 'Maintenance', html }],
fontSizeUnit: 'pt',
});<p class=MsoNormal style='line-height:150%'>
<b><span style='font-size:14.0pt;font-family:"맑은 고딕";
mso-bidi-font-family:"Times New Roman"'>3분기 보고서</span></b>
<o:p></o:p></p>
<p class=MsoListParagraph style='mso-list:l0 level1 lfo1'>
span>1.<span> </span></span>
o:p></o:p></p><p style="line-height: 150%">
<strong><span style="font-size: 14pt">3분기 보고서</span></strong>
</p>
<ol>
<li>매출 12% 증가</li>
</ol>Same textarea, same field name. Swap a few script lines and leave the server alone; existing posts open unchanged.
<textarea name="ir1" id="ir1"></textarea>
<script src="/se2/js/service/HuskyEZCreator.js"></script>
<script>
var oEditors = [];
nhn.husky.EZCreator.createInIFrame({
oAppRef: oEditors, elPlaceHolder: 'ir1',
sSkinURI: '/se2/SmartEditor2Skin.html',
});
function submitContents() {
oEditors.getById['ir1'].exec('UPDATE_CONTENTS_FIELD', []);
document.forms[0].submit();
}
</script><textarea name="ir1" id="ir1"></textarea>
<link rel="stylesheet" href="https://82editor.com/cdn/v1.0.0/82editor.css">
<script src="https://82editor.com/cdn/v1.0.0/82editor.min.js"></script>
<script>
Editor82.createEditor('#ir1', { toolbar: 'board', uploadUrl: '/upload.php' });
// textarea is kept in sync automatically: no UPDATE_CONTENTS_FIELD
function submitContents() { document.forms[0].submit(); }
</script><script src="https://code.jquery.com/jquery-3.7.1.min.js"></script>
<link href="summernote-lite.min.css" rel="stylesheet">
<script src="summernote-lite.min.js"></script>
<textarea id="summernote" name="content"></textarea>
<script>
$('#summernote').summernote({
height: 400,
callbacks: { onImageUpload: (files) => upload(files[0]) },
});
const html = $('#summernote').summernote('code');
</script><link rel="stylesheet" href="https://82editor.com/cdn/v1.0.0/82editor.css">
<script src="https://82editor.com/cdn/v1.0.0/82editor.min.js"></script>
<textarea id="summernote" name="content"></textarea>
<script>
const editor = Editor82.createEditor('#summernote', {
height: 400,
uploadImage: (file) => upload(file), // return the image URL
});
const html = editor.getHTML();
</script>SmartEditor 2 guideSummernote guideToast UI Editor alternativeCKEditor 4 alternative
<link rel="stylesheet" href="https://82editor.com/cdn/v1.0.0/82editor.css">
<script src="https://82editor.com/cdn/v1.0.0/82editor.min.js"></script>
<textarea id="content" name="content"></textarea>
<script>
Editor82.createEditor('#content', { toolbar: 'board', height: 400 });
</script>import { createEditor } from '@82editor/core';
import '@82editor/core/styles.css';
const editor = createEditor('#editor', {
placeholder: 'Write something',
toolbar: 'board',
height: 400,
});
editor.on('change', (html) => console.log(html));import { useState } from 'react';
import { Editor82 } from '@82editor/react';
import '@82editor/core/styles.css';
export function WriteForm() {
const [html, setHtml] = useState('');
return <Editor82 value={html} onChange={setHtml} options={{ toolbar: 'board', height: 400 }} />;
}<script setup>
import { ref } from 'vue';
import { Editor82 } from '@82editor/vue';
import '@82editor/core/styles.css';
const html = ref('');
</script>
<template>
<Editor82 v-model="html" :options="{ toolbar: 'board', height: 400 }" />
</template><script>
import { Editor82 } from '@82editor/svelte';
import '@82editor/core/styles.css';
let html = $state('');
</script>
<Editor82 bind:value={html} options={{ toolbar: 'board', height: 400 }} />import { Component } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { Editor82Component } from '@82editor/angular';
@Component({
selector: 'app-write',
standalone: true,
imports: [FormsModule, Editor82Component],
template: `<editor-82 [(ngModel)]="html" [options]="{ toolbar: 'board', height: 400 }"></editor-82>`,
})
export class WriteComponent {
html = '';
}
// angular.json → "styles": ["node_modules/@82editor/core/dist/styles.css"]No sign-up, no key. Free for company sites too.
Get started