HtmlEditor
이 컨트롤은 무엇인가요?
HtmlEditor는 TinyMCE를 감싼 syn.uicontrols 컨트롤로, 게시판 본문이나 공지사항처럼 "서식 있는 문서(WYSIWYG)"를 편집할 때 사용합니다. 화면에 <syn_htmleditor> 태그를 배치하면 컨트롤이 초기화되면서 다음과 같은 일이 일어납니다.
- 원래 배치했던 엘리먼트는
id="<원래id>_hidden"으로 이름이 바뀌고 화면에서 숨겨집니다(display: none). 이 엘리먼트에는 옵션 값(JSON)만 보관됩니다. 이때 원래 엘리먼트 안에 적어둔 HTML(태그 내부 콘텐츠)이 에디터의 초기 값으로 사용됩니다. - 같은 부모 아래 원래
id를 그대로 물려받은 새<div>가 만들어지고, 그 안에 TinyMCE 에디터(tinymce.init(setting))가 렌더링됩니다. - TinyMCE 엔진 자체(
/lib/tinymce/tinymce.min.js)는syn.$w.loadScriptAsync로 페이지에서 최초 1회만 로드되며(로드 Promise는$htmleditor.tinymceReady에 보관), 로드가 끝나기 전에 여러 개의<syn_htmleditor>가 있으면 내부 대기열(editorPendings)에 쌓였다가 로드 완료 Promise가 resolve되면 순서대로 초기화됩니다(이전의 25mssetInterval폴링은 제거됨). syn-options에repositoryID를 지정하면, 에디터에 이미지를 붙여넣거나 드래그&드롭할 때 자동으로 파일 서버(fileManagerServer)에 업로드하고, 업로드된 이미지의 실제 경로로<img>태그를 교체해 줍니다.
SourceEditor(코드 편집)와의 차이
| 구분 | HtmlEditor ($htmleditor) | SourceEditor ($sourceeditor) |
|---|---|---|
| 기반 엔진 | TinyMCE | Monaco Editor (VS Code 편집 엔진) |
| 편집 대상 | 서식 있는 문서(HTML 리치 텍스트) — 굵게, 표, 이 미지 삽입 등 | 소스 코드/구조화된 텍스트 — JavaScript, JSON, SQL, HTML 등 |
| 결과물 | HTML 마크업 문자열 | 언어 문법에 맞는 순수 텍스트(소스 코드) 문자열 |
| 대표 기능 | 툴바(굵게/이미지/표), 이미지 업로드(repositoryID + fileManagerServer) | 문법 강조(syntax highlight), 줄 번호, 미니맵, 코드 접기 |
| 용도 예 | 게시판 본문, 이메일 템플릿, 공지사항 | 스크립트/쿼리 편집, 설정 JSON 편집, 로그/코드 뷰어 |
즉, "사람이 읽는 문서를 예쁘게 꾸미고 이미지를 첨부하는 것"이 목적이면 HtmlEditor를, "코드나 JSON처럼 문법이 있는 텍스트를 정확하게 편집하는 것"이 목적이면 SourceEditor를 사용합니다.
언제 사용하나요?
- 게시판/공지사항 본문, 이메일 템플릿처럼 굵게/색상/표/이미지 등 서식이 필요한 긴 문서를 사용자가 직접 작성하게 할 때
- 문서 안에 이미지를 붙여넣거나 드래그&드롭으로 첨부해야 하고, 그 이미지를 파일 저장소(리포지토리)에 실제로 업로드해야 할 때
- 단순한 여러 줄 텍스트(메모 등)만 필요하다면
TextArea를, 소스 코드/JSON처럼 문법이 있는 텍스트를 편집해야 한다면SourceEditor를 대신 검토하세요.