Ссылка
Выделите текст и привяжите к нему адрес. Если ввести адрес без выделения текста, сам адрес вставляется как текст ссылки. Ввод адреса http:// или https:// с последующим нажатием Space или Enter тоже превращает его в ссылку.
Ссылки хранят только http:, https: и пути того же сайта, начинающиеся с . или /. Адреса, происхождение которых нельзя ясно определить, например javascript: или //example.com, отклоняются. Ссылки-вложения, созданные загрузками, также хранят сведения о файле и не могут быть созданы вручную как обычные ссылки.
npm install nabi-noteimport {
createLocale, createNabiWith, mountSurface, mountToolbar,
mountContextToolbar, mountHints, watchSettle, subscriptWing, linkWing,
footnoteWing, mountViewTools,
} from 'nabi-note'
const selected = [
subscriptWing,
linkWing,
footnoteWing,
]
const locale = createLocale('ru')
const { nabi, registry } = createNabiWith(selected, { locale })
const root = document.querySelector('.nabi')!
const content = document.querySelector('.nabi-content')!
// The locale also sets the direction — Arabic and Urdu run right to left
mountSurface({ nabi, registry, root: content, locale })
const settle = watchSettle(document, { surface: content })
const shared = { nabi, registry, surface: content, settle, locale }
const toolbar = mountToolbar({ ...shared, root: document.querySelector('#toolbar')! })
const context = mountContextToolbar({ ...shared, root: document.querySelector('#context')! })
mountHints({ toolbar, context, root, surface: content })
// The preview and fullscreen buttons — they stand their own box at the end of the row
mountViewTools({ ...shared, root, container: document.querySelector('#toolbar')! })
// on every change — hook up your own code here
// nabi.onChange(() => user_callback(nabi.getHtml()))
// Call from your language selector. Content and editing history stay intact.
// locale.setLocale('ko')const selected = wings().use('a').build()Вставка URL
Если всё вставляемое содержимое, без пробельных символов по краям, представляет собой допустимый URL http:// или https://, оно сразу вставляется как ссылка. URL внутри предложений, текст с несколькими URL и относительные пути обрабатываются по прежним правилам вставки. В блоках кода и редакторах без wing ссылок содержимое остаётся текстом. Допустимые внутренние данные буфера обмена, скопированные из редактора, имеют приоритет, чтобы сохранить исходное форматирование.
Используйте callback onPasteUrl в mountSurface(), чтобы задать отображаемый текст ссылки.
| Аргумент | Значение |
|---|---|
url | Полный URL без пробельных символов по краям |
isSameOrigin | Совпадают ли протокол, хост и порт URL с источником документа, содержащего редактор |
path | Путь, начинающийся с /, включая строку запроса и фрагмент. Пример: /posts/1?a=2#top |
const surface = mountSurface({
nabi,
registry,
root: document.querySelector<HTMLElement>('#editor')!,
onPasteUrl(url, isSameOrigin, path) {
if (isSameOrigin && path === '/guide') return 'NABI NOTE'
return url
},
})Возвращённая строка, содержащая не только пробельные символы, становится отображаемым текстом. Если callback отсутствует, возвращает пустое значение или значение другого типа либо завершается с ошибкой, отображаемым текстом остаётся вставленный URL. Возвращённые строки никогда не интерпретируются как HTML и не меняют адрес ссылки.
Callback также поддерживает функции async и промисы. Пока ожидается ответ, ссылка с URL вставляется сразу; допустимый результат, полученный позже, меняет только отображаемый текст этой ссылки. Поздний результат игнорируется, если ссылка была изменена или удалена, был загружен новый документ или поверхность редактора была размонтирована.
CSS-стили
Стилизуйте обычные ссылки через .nabi-content a, а ссылки-вложения отдельно через .nabi-content a[data-nabi-file].
.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.