カスタムツリーv2 jQueryプラグイン

先日、古いオープンソースプロジェクトの1つを再ソーイングすることに戻りました。
思考の過程で、現在の形式のツリー持つ以前のコンポーネントはもはや私に合わないと判断しました。

明確でシンプルなAPIを備えた、もっとイベントドリブンなものが欲しかった。

今、私はすでに公開の準備ができていると決めました。

取って、使ってください
またはGH-pagesのフレームワークの例を見てください。

catの下で、短いAPIドキュメントの短い翻訳。

UPD :コメントで、 ドラッグアンドドロップコード。


jQueryプラグインとして実行されます。

構成の例、つまり ツリーを「作成」するときに送信されるもの:

$('#tree_content').customTree({ root : 'top', init : { callback : function (controller, tree) { info('Init callback.'); } }, // for leaf callbacks handlers : { added : function (leaf, controller, tree) { }, loaded : function (leaf, controller, tree) { }, parsed : function (leaf, controller, tree) { }, open : function (leaf, controller, tree) { }, close : function (leaf, controller, tree) { }, hover : function (leaf, controller, tree) { }, unhover : function (leaf, controller, tree) { }, focus : function (leaf, controller, tree) { }, beforeblur : function (callback, leaf, controller, tree) { }, blur : function (leaf, controller, tree) { }, deleted : function (leaf, controller, tree) { }, dblclick : function (leaf, controller, tree) { } }, listeners : { // click, dblclick, contextmenu up the element Label contextmenu : function (leaf, controller, tree, event) { }, dblclick : function (leaf, controller, tree, event) { } }, storeLoaded : false, focusParentOnClose : true, // focusByDblClick: true, // blurFromContainerClick : false, // blurFromContainerDblClick : false, labelsBreak : { by : 50, expandOnHover : false, expandOnSelect : true }, loader : function (path, callback) { // ... your code for nodes loading } }); 


このコードは、Parsing \ Renderingに送られるノードのパラメーターについて厳密な合意を使用しているため、単一ノード(リーフ)の例を示します。

 { // –       , 'unique_naming_string' : { // – ,   , text : 'string', // – ,   ,    leaf , folder : [true || false], // – ,   ,   ""  open : [true || false] //       ,     } } 


説明{



 // ,      root init : { //     null delay : null, //     root     //    ,  preloader    preloader : 'preloader', // function (controller, tree)     callback : null, // jQuery ,     "" root method : 'fadeIn', //  true (default),      delay auto : true, //  ,   focus   focus : null } 


ハンドラー(リーフ、コントローラー、ツリー) -定義済みのイベントハンドラー。

全員が現在のノード、コントローラー、およびツリーオブジェクトを受け入れます。

ただし、 beforeblurは最初のパラメーターとしてコールバック受け入れます。

たとえば、現在のノードをぼかすことができるかどうかを確認する必要がある場合。
はいの場合、このコールバックを呼び出す必要があります。
それ以外の場合は、それを呼び出さないでください。そうしないと、ブラーが発生しません。

別のノードにフォーカスを合わせる必要があるためにぼかしを行う必要がある場合、このコールバックを呼び出さないと、現在のぼかしも目的のノードのフォーカスも作成されません。

当然、これらのbeforeblurのコールバック操作は、設定にhandler.beforeblurを渡す場合にのみ可能です。

ローダー(パス、コールバック) -コントローラーがリーフをロードするためにアクセスするもの。

['tree.root'、 'leaf.name']をパスとして使用します。

JSオブジェクトを返す必要があります!

リスナーはjQuery .on標準ではありません(ノードのテキスト要素のコールバック。
つまり、たとえば、コンテキストメニューまたはカスタムクリックが必要な場合は、リスナーを使用する必要があります。

テーマ -レンダリング時のクラスのCSS PREFIX_

cls-レンダリング時のCSSクラスのセット:

 cls : { //  root root : 'tree_root', //  ,     control : 'tree_control', //  ,   ,  "" status : 'tree_leaf_status', //    text : 'tree_leaf_text', //  "" folder : 'folder', //    focus() selected : 'selected', //     hover : 'hover', //     loader : 'loader', //    open : 'open', //    container : 'container', //       supressLabelTextSelection : 'unselectable', supressTreeTextSelection : 'unselectable' } 


html-レンダリング用のHTMLタグ:

 html : { // root container tree : '<UL>', // leaf container leaf : '<LI>', // ,   children  children : '<UL>', //      +\- status heading : '<DIV>', //   +\- control : '<SPAN>', // ,   status : '<SPAN>', // ,   text : '<SPAN>', //   container : '<DIV>' } 


control- + \-に使用される行:

 control : { close : '+', open : '–' }, 


storeLoaded:true || false- 「折りたたみ」ノードを保存するか、毎回再起動します

focusParentOnClose:true || false-子孫にフォーカスがある場合、親を選択します

focusByDblClick:true || false-ダブルクリック

blurFromContainerClick:true || false-ルートがクリックされたときにぼかし

blurFromContainerDblClick:true || false-ルートをダブルクリックしたときにぼかし

labelsBreak: -ノードのテキストキャプションは長くなる可能性があり、必要に応じて「トリミング」のオプション:

 labelsBreak : { //        by : 0, //   str : '\n', //      expandAlways : false, //  ,  hover expandOnHover : false, //  ,  focused expandOnSelect : true } 


コントローラーAPI




これが誰かに役立つことを願っています。

Source: https://habr.com/ru/post/J188778/


All Articles