| 1 |
// jQuery File Tree Plugin |
| 2 |
// |
| 3 |
// Version 1.01 |
| 4 |
// |
| 5 |
// Cory S.N. LaViska |
| 6 |
// A Beautiful Site (http://abeautifulsite.net/) |
| 7 |
// 24 March 2008 |
| 8 |
// |
| 9 |
// Visit http://abeautifulsite.net/notebook.php?article=58 for more information |
| 10 |
// |
| 11 |
// Usage: $('.fileTreeDemo').fileTree( options, callback ) |
| 12 |
// |
| 13 |
// Options: root - root folder to display; default = / |
| 14 |
// script - location of the serverside AJAX file to use; default = jqueryFileTree.php |
| 15 |
// folderEvent - event to trigger expand/collapse; default = click |
| 16 |
// expandSpeed - default = 500 (ms); use -1 for no animation |
| 17 |
// collapseSpeed - default = 500 (ms); use -1 for no animation |
| 18 |
// expandEasing - easing function to use on expand (optional) |
| 19 |
// collapseEasing - easing function to use on collapse (optional) |
| 20 |
// multiFolder - whether or not to limit the browser to one subfolder at a time |
| 21 |
// loadMessage - Message to display while initial tree loads (can be HTML) |
| 22 |
// |
| 23 |
// History: |
| 24 |
// |
| 25 |
// 1.01 - updated to work with foreign characters in directory/file names (12 April 2008) |
| 26 |
// 1.00 - released (24 March 2008) |
| 27 |
// |
| 28 |
// TERMS OF USE |
| 29 |
// |
| 30 |
// This plugin is dual-licensed under the GNU General Public License and the MIT License and |
| 31 |
// is copyright 2008 A Beautiful Site, LLC. |
| 32 |
// |
| 33 |
if(jQuery) (function($){ |
| 34 |
|
| 35 |
$.extend($.fn, { |
| 36 |
fileTree: function(o, h) { |
| 37 |
// Defaults |
| 38 |
if( !o ) var o = {}; |
| 39 |
if( o.root == undefined ) o.root = '/'; |
| 40 |
if( o.script == undefined ) o.script = 'jqueryFileTree.php'; |
| 41 |
if( o.folderEvent == undefined ) o.folderEvent = 'click'; |
| 42 |
if( o.expandSpeed == undefined ) o.expandSpeed= 500; |
| 43 |
if( o.collapseSpeed == undefined ) o.collapseSpeed= 500; |
| 44 |
if( o.expandEasing == undefined ) o.expandEasing = null; |
| 45 |
if( o.collapseEasing == undefined ) o.collapseEasing = null; |
| 46 |
if( o.multiFolder == undefined ) o.multiFolder = true; |
| 47 |
if( o.loadMessage == undefined ) o.loadMessage = 'Loading...'; |
| 48 |
|
| 49 |
$(this).each( function() { |
| 50 |
|
| 51 |
function showTree(c, t) { |
| 52 |
$(c).addClass('wait'); |
| 53 |
$(".jqueryFileTree.start").remove(); |
| 54 |
$.post(o.script, { dir: t, action: 'jqueryFileTree', _wpnonce: $('#_wpnonce').val(), _wp_http_referer: $('#_wp_http_referer').val() }, function(data) { |
| 55 |
$(c).find('.start').html(''); |
| 56 |
$(c).removeClass('wait').append(data); |
| 57 |
if( o.root == t ) $(c).find('UL:hidden').show(); else $(c).find('UL:hidden').slideDown({ duration: o.expandSpeed, easing: o.expandEasing }); |
| 58 |
bindTree(c); |
| 59 |
}); |
| 60 |
} |
| 61 |
|
| 62 |
function bindTree(t) { |
| 63 |
$(t).find('LI A').bind(o.folderEvent, function() { |
| 64 |
if( $(this).parent().hasClass('directory') ) { |
| 65 |
if( $(this).parent().hasClass('collapsed') ) { |
| 66 |
// Expand |
| 67 |
if( !o.multiFolder ) { |
| 68 |
$(this).parent().parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing }); |
| 69 |
$(this).parent().parent().find('LI.directory').removeClass('expanded').addClass('collapsed'); |
| 70 |
} |
| 71 |
$(this).parent().find('UL').remove(); // cleanup |
| 72 |
showTree( $(this).parent(), escape($(this).attr('rel').match( /.*\// )) ); |
| 73 |
$(this).parent().removeClass('collapsed').addClass('expanded'); |
| 74 |
} else { |
| 75 |
// Collapse |
| 76 |
$(this).parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing }); |
| 77 |
$(this).parent().removeClass('expanded').addClass('collapsed'); |
| 78 |
} |
| 79 |
} else { |
| 80 |
h($(this).parent(), $(this).attr('rel')); |
| 81 |
} |
| 82 |
|
| 83 |
|
| 84 |
|
| 85 |
return false; |
| 86 |
}); |
| 87 |
// Prevent A from triggering the # on non-click events |
| 88 |
if( o.folderEvent.toLowerCase != 'click' ) $(t).find('LI A').bind('click', function() { return false; }); |
| 89 |
} |
| 90 |
// Loading message |
| 91 |
$(this).html('<ul class="jqueryFileTree start"><li class="wait">' + o.loadMessage + '<li></ul>'); |
| 92 |
// Get the initial file list |
| 93 |
jQuery.ajaxSetup({async:false}); //we need to wait until we get the response |
| 94 |
showTree( $(this), escape(o.root) ); |
| 95 |
jQuery.ajaxSetup({async:true}); //enable async again |
| 96 |
|
| 97 |
|
| 98 |
|
| 99 |
//if nothing returned then let user know something wrong with permissions |
| 100 |
if ( $(this).children('.jqueryFileTree').length==0 ){ |
| 101 |
alert('WPide is having trouble accessing your files.'); |
| 102 |
} |
| 103 |
}); |
| 104 |
} |
| 105 |
}); |
| 106 |
|
| 107 |
})(jQuery); |