CDN の使い方

パッケージをインストールしにくい静的ページでは、CDN からブラウザー版と CSS を読み込みます。下のデモはサイトのビルド時にパッケージバージョンを読み取り、グローバルな NabiNote オブジェクトからエディターを作ります。

以下のコードを として保存し、ブラウザで開けばすぐに確認できます。

<!doctype html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <title>NABI NOTE</title>
  <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/nabi-note@1.0.0/dist/nabi.css">
  <style>
    html, body { height: 100%; margin: 0; }
    /* 編集エリアの最小高さ — 開いた直後に一行だけの箱に見えないようにします。値は自由に変更できます。 */
    #app { height: 100vh; }
    #editor { flex: 1; min-height: 0; overflow-y: auto; }
  </style>
</head>
<body>

<div id="app" class="nabi">
  <div id="chrome" class="nabi-toolbar">
    <div class="nabi-toolbar-row">
      <span id="tools"></span>
      <div id="toolbar"></div>
    </div>
    <div id="context"></div>
  </div>
  <div id="editor" class="nabi-content"></div>
</div>

<script src="https://cdn.jsdelivr.net/npm/nabi-note@1.0.0/dist/browser/nabi-note.min.js"></script>
<script>
  var N = NabiNote
  var app = document.querySelector('#app')
  var surface = document.querySelector('#editor')

  // アップロードを除くすべての翼を含みます。
  // 書体はサンセリフとセリフの二つだけ残します。
  // システムごとに対応する書体が違うため、等幅・筆記体は別途 import しないとどの環境でも認識されません。
  // 詳しくは「書体」ドキュメントを確認してください。
  var wings = N.wings().allBasic().use('save').use('open').use('tf', { values: ['sans', 'serif'] })

  var made = N.createNabiWith(wings, {
    locale: 'ja',
    ask: {
      message: function (text) { window.alert(text) },
      confirm: function (text) { return window.confirm(text) }
    }
  })
  var nabi = made.nabi
  var registry = made.registry

  N.mountSurface({ nabi: nabi, registry: registry, root: surface, locale: 'ja' })
  N.mountPickedMark({ nabi: nabi, surface: surface })

  var settle = N.watchSettle(document, { surface: surface })
  var shared = { nabi: nabi, registry: registry, surface: surface, settle: settle, locale: 'ja' }

  var history = N.mountLocalHistory({ nabi: nabi, storage: N.browserHistoryStorage(window) })
  var file = N.mountFile({
    nabi: nabi, registry: registry, store: N.browserFileStore(document),
    name: function () { return 'note' }, locale: 'ja'
  })

  var toolbar = N.mountToolbar(Object.assign({}, shared, {
    root: document.querySelector('#toolbar'),
    file: file,
    onHost: function (w) {
      if (w !== 'localHistory') return
      N.openHistoryPanel({
        history: history, surface: surface, locale: 'ja', sessionId: history.sessionId,
        render: function (record) {
          return N.renderStoredHtml(JSON.parse(record.body), registry) || ''
        }
      })
    }
  }))
  var context = N.mountContextToolbar(Object.assign({}, shared, { root: document.querySelector('#context') }))

  N.mountHints({ toolbar: toolbar, context: context, root: document.querySelector('#chrome'), surface: surface })
  N.mountViewTools({ nabi: nabi, surface: surface, root: app, container: document.querySelector('#tools'), locale: 'ja' })

  nabi.setHtml('')

  // 値が変わったときのコールバック例
  // nabi.onChange(function () { user_callback(nabi.getJson()) })
</script>

</body>
</html>

NABI NOTE での注意点

  • 配布するコードでは、CSS とブラウザー JavaScript を同じバージョンに固定してください。latest のようにバージョンのない URL は、新しいリリースが出たときに動作が変わることがあります。
  • ブラウザーバンドルはルート API を window.NabiNote として公開します。nabi-note/ssrnabi-note/viewernabi-note/diff は別々のグローバルバンドルとしては提供されません。
  • このデモのファイル保存とローカル履歴は、ユーザーのブラウザー内で動作します。サーバー保存やアカウント同期には、getJson() の出力をアプリケーション API へ送ってください。
  • アップロードには upload wing、実際のアップロード関数、そして必要な画像 wing またはリンク wing が必要です。ファイル検証はアップロードサーバー側の責任です。
  • ブラウザー版は HTML パーサーを内部で接続しています。setHtml()、HTML ファイルを開く操作、HTML の貼り付けには、パーサーオプションや非公開 API は不要です。

CDN 読み込みで変わるのはライブラリーの読み込み方だけです。保存形式と入力検証は npm パッケージと同じなので、基本的な使い方 も参照してください。