링크

글자를 선택해 주소를 연결합니다. 선택 없이 주소를 입력하면 주소 자체가 링크 글자로 들어가며, http:// 또는 https:// 주소를 입력한 뒤 Space나 Enter를 눌러도 링크로 바뀝니다.

링크에는 http:, https:. 또는 /로 시작하는 같은 사이트 경로만 저장됩니다. javascript://example.com처럼 출처를 분명히 할 수 없는 주소는 거절됩니다. 업로드가 만든 첨부 링크는 파일 정보까지 함께 저장되며, 일반 링크처럼 직접 만들 수는 없습니다.

wing
기본 서체높이
HTML에디터를 불러오는 중…
JSON나비트리에디터를 불러오는 중…
설치
npm install nabi-note
코드
import {
  createNabiWith, mountSurface, mountToolbar, mountContextToolbar,
  mountHints, watchSettle, subscriptWing, highlightWing, linkWing,
  mountViewTools,
} from 'nabi-note'

const selected = [
  subscriptWing,
  highlightWing,
  linkWing,
]
const { nabi, registry } = createNabiWith(selected)

const root = document.querySelector('.nabi')!
const content = document.querySelector('.nabi-content')!

// locale 이 글의 방향도 정한다 — 아랍어·우르두면 오른쪽에서 왼쪽으로 선다
mountSurface({ nabi, registry, root: content, locale: 'ko' })

const settle = watchSettle(document, { surface: content })
const shared = { nabi, registry, surface: content, settle, locale: 'ko' }
const toolbar = mountToolbar({ ...shared, root: document.querySelector('#toolbar')! })
const context = mountContextToolbar({ ...shared, root: document.querySelector('#context')! })
mountHints({ toolbar, context, root, surface: content })
// 미리보기·전체화면 두 단추 — 툴바 줄의 끝에 제 상자를 세워 앉는다
mountViewTools({ ...shared, root, container: document.querySelector('#toolbar')! })

// 값이 바뀔 때마다 — 여기에 당신의 코드를 건다
// nabi.onChange(() => user_callback(nabi.getHtml()))
ts
const selected = wings().use('a').build()

CSS 스타일

일반 링크는 .nabi-content a, 첨부 링크는 .nabi-content a[data-nabi-file]로 따로 꾸밀 수 있습니다.

css
.article-body a:not([data-nabi-file]) {
  color: var(--nabi-accent);
  text-decoration-thickness: .08em;
  text-underline-offset: .16em;
}

.article-body a[data-nabi-file] {
  display: inline-flex;
  gap: .35em;
  padding: .25em .55em;
  background: var(--nabi-soft);
}

첨부 링크의 ::before, ::after는 파일 아이콘과 확장자를 표시하는 데 쓰이므로 content를 바꾸거나 지우지 않는 편이 좋습니다.