1jQuery.fn.explorerTree = function(opts){ 2 var $ = jQuery; 3 $(this).each(function(){ 4 var tree_opts = $.extend({onselect:null},opts||{}), $tree_root = $(this), tree_selected = opts.current||':', selected_class = tree_opts.classname+"_selecter", dbcl = {id: null, TO: null, clicks: 0}, 5 setselected = function(){ 6 if ($(this).data('itemid') != tree_selected){ 7 var $elem = $(this), 8 is_ns = $elem.is('.folder>.li>a'), 9 ajax_call = (is_ns && tree_opts.onselectns === true) || (!is_ns && tree_opts.onselectpage === true), 10 function_call = (is_ns && typeof tree_opts.onselectnsjs === 'function' ? tree_opts.onselectnsjs : undefined) || (!is_ns && typeof tree_opts.onselectpagejs === 'function' ? tree_opts.onselectpagejs : undefined) || null; 11 $tree_root.find('.'+selected_class).removeClass(selected_class); 12 $elem.addClass(selected_class); 13 tree_selected = $elem.data('itemid'); 14 $tree_root.trigger('tree_selected',[$elem.data('itemid'),$elem,$tree_root]); 15 if (ajax_call){ 16 $.post(DOKU_BASE + 'lib/exe/ajax.php', 17 { call:'plugin_explorertree', operation: 'callback', event: is_ns ? 'ns_selected_cb':'page_selected_cb', loader: tree_opts.loader, route: tree_opts.route, sectok: tree_opts.token,itemid:$elem.data('itemid') }, 18 function(r){ 19 if (r.token) tree_opts.token = r.token; 20 if (r.error) alert(r.msg); 21 if (r.func){ 22 try{ 23 var f = window[r.func]; 24 if (typeof f === 'function') 25 f.apply(null,r.args||[]); 26 }catch(e){ 27 alert(e); 28 } 29 }else if (r.msg){ 30 alert(r.msg); 31 } 32 } 33 ); 34 } 35 if (function_call){ 36 function_call.apply(null,[$elem.data('itemid'),$elem,$tree_root]); 37 } 38 $tree_root.trigger('tree_selected_'+(is_ns?'ns':'page'),[$elem.data('itemid'),$elem,$tree_root]); 39 } 40 return true; 41 }, 42 setselectednodblclick = function(e){ 43 var id = $(this).data('itemid'), $elem = this; 44 if (dbcl.id != id){ 45 dbcl.clicks = 0; 46 dbcl.id = id; 47 dbcl.TO = null; 48 } 49 dbcl.clicks++; 50 if(dbcl.clicks == 1) { 51 dbcl.TO = setTimeout(function(){ 52 if (dbcl.id == id){ 53 var c = dbcl.clicks; 54 dbcl.clicks = 0; 55 if(c == 1){ 56 setselected.call($elem); // on singleclick 57 } 58 } 59 },500); 60 } 61 if (dbcl.clicks == 2){ 62 clearTimeout(dbcl.TO); 63 dbcl.clicks = 0; 64 } 65 }, 66 foldinghandler = function(e){ 67 if (!$(e.target).is($('>.li',this)) && !$(e.target).is($('>.li>a',this))) return true; 68 var $elem = $(this); 69 if ($(this).hasClass('open')){ 70 $(this).removeClass('open loading').addClass('closed'); return false; 71 $tree_root.trigger('tree_folder_closed',[$elem.data('itemid'),$elem,$tree_root]); 72 } 73 $(this).removeClass('closed').addClass('open'); 74 $tree_root.trigger('tree_folder_open',[$elem.data('itemid'),$elem,$tree_root]); 75 if (!$elem.has('>ul.'+tree_opts.classname).length){ 76 $(this).addClass('loading'); 77 $.post(DOKU_BASE + 'lib/exe/ajax.php', 78 {call: 'plugin_explorertree',operation:'explorertree_branch',itemid:$elem.data('itemid'), loader: tree_opts.loader, route: tree_opts.route, sectok: tree_opts.token}, 79 function(r){ 80 if (r.token) tree_opts.token = r.token; 81 if (r.error) {alert(r.msg); return;} 82 $elem.append(r.html).removeClass('loading'); 83 $tree_root.trigger('tree_folder_open_ready',[$elem.data('itemid'),$elem,$tree_root]); 84 } 85 ); 86 }else{ 87 $tree_root.trigger('tree_folder_open_ready',[$elem.data('itemid'),$elem,$tree_root]); 88 } 89 return false; 90 }; 91 $(this).on('click','.li>a',setselectednodblclick); 92 $(this).on('dblclick','.folder',foldinghandler); 93 }); 94 95}; 96 97