jsPlumb (1)

コミュニティバージョンと有償バージョンあり。コミュニティバージョンのドキュメントは https://docs.jsplumbtoolkit.com/community 。サンプルの一枚HTMLは:

パッケージと機能:

  • core : コネクション、エンドポイントの実現。DOMに依存しない。
  • brawser-ui : レンダラー。HTML要素にSVG要素を対応させて描画可能物を作る。
  • util : ユーティリティ関数
  • common : 有償とコミュニティに共通なインターフェイス定義など
  • 他に、ベズー曲線、フローチャートサポートがある。

使い方:

  1. jsPlumbインスタンス(通常、大域空間に居るシングルトンオブジェクト)は instance と書く習慣。
  2. const instance = jsPlumbBrowserUI.newInstance({ 初期化データ }) としてインスタンスを作る。
  3. "the DOM has fully loaded" の後でないと何もできない。
  4. DOM loaded のときの初期化処理は、instance.bind("ready", ()=>{...}) で行う。
  5. コンテナ要素という概念がある。それはDOMの要素ノードだが、jsPlumbにとっての役割を持つ。
  6. コンテナ要素は、newInstance呼び出しの引数(初期化データ)として指定する。const instance = jsPlumbBrowserUI.newInstance({ container: someDOMElementNode })
  7. したがって、jsPlumbインスタンスは、生まれた瞬間から唯一のコンテナ要素を持つことになる。
  8. コンテナ要素は、CSSプロパティ position:relative でなくてはならない(要件、条件)。
  9. コンテナ要素のposition CSSプロパティは、ハマリ所になるようだ。忘れてしまうとトラブル。
  10. jsPlumbインスタンスは、管理対象要素〈"managed" elements〉を持つ。管理対象リスト達は、インスタンスの the "managed" list で保存管理される。
  11. 管理対象リストへの追加は、instance.addEndpoint(someElement, { endpoint:'Dot' })
  12. HTMLマークアップに data-jtk-* という data-属性を使う。jtk は ToolKit からだろう。Jsplumb ToolKit
  13. <div id="myElm" data-jtk-managed="foobarbaz"> ... </div> と書くと、managed element の管理名として"foobarbaz" が認識される。つまり、jsPlumbインスタンスは、管理対象要素のmanaged固有属性を見る、ということ。「固有属性」とは data-jtk-でプリフィックスされた属性。
  14. instance.connectメソッドも、両端の要素を管理対象リストに追加する。Graphvizで言うと、addEndPoint が node選言、connect が -> を書くことになる。
  15. 「管理対象」「エンドポイント」「コネクト」がテクニカルタームになる。
  16. すべての管理対象がエンドポイントなわけではない。管理対象としての追加には、instance.manage(someElement, "the internal id to use") を使う。
  17. 要素のzインデックスの注意する必要がある。
  18. CSS class とは、CSSから使えるクラスの意味か? ともかく、jtk-endpoint, jtk-connector, jtk-overlay というCSSクラスを使うらしい。名前からして、これらは「クラスの値=分類」だろう。jtk-hoverもあるということなので、動的に変わるクラスもありか。
  19. バルク操作には instance.setSuspendDrawing(true); ... ; instance.setSuspendDrawing(false, true); を使うとよい。パフォーマンスを上げることができる。
  20. instance.batch() というのもある。