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 | |
---|
50 | $(this).each( function() { |
---|
51 | |
---|
52 | function showTree(c, t) { |
---|
53 | $(c).addClass('wait'); |
---|
54 | $(".jqueryFileTree.start").remove(); |
---|
55 | $.post(o.script, { dir: t }, function(data) { |
---|
56 | $(c).find('.start').html(''); |
---|
57 | $(c).removeClass('wait').append(data); |
---|
58 | if( o.root == t ) $(c).find('UL:hidden').show(); else $(c).find('UL:hidden').slideDown({ duration: o.expandSpeed, easing: o.expandEasing }); |
---|
59 | bindTree(c); |
---|
60 | }); |
---|
61 | } |
---|
62 | |
---|
63 | function bindTree(t) { |
---|
64 | $(t).find('LI A').bind(o.folderEvent, function() { |
---|
65 | if( $(this).parent().hasClass('directory') ) { |
---|
66 | if( $(this).parent().hasClass('collapsed') ) { |
---|
67 | // Expand |
---|
68 | if( !o.multiFolder ) { |
---|
69 | $(this).parent().parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing }); |
---|
70 | $(this).parent().parent().find('LI.directory').removeClass('expanded').addClass('collapsed'); |
---|
71 | } |
---|
72 | $(this).parent().find('UL').remove(); // cleanup |
---|
73 | showTree( $(this).parent(), escape($(this).attr('rel').match( /.*\// )) ); |
---|
74 | $(this).parent().removeClass('collapsed').addClass('expanded'); |
---|
75 | } else { |
---|
76 | // Collapse |
---|
77 | $(this).parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing }); |
---|
78 | $(this).parent().removeClass('expanded').addClass('collapsed'); |
---|
79 | } |
---|
80 | } else { |
---|
81 | h($(this).attr('rel')); |
---|
82 | } |
---|
83 | |
---|
84 | return false; |
---|
85 | }); |
---|
86 | // Prevent A from triggering the # on non-click events |
---|
87 | //if( o.folderEvent.toLowerCase != 'click' ) $(t).find('LI A').bind('click', function() {return false; }); |
---|
88 | } |
---|
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 | showTree( $(this), escape(o.root) ); |
---|
94 | }); |
---|
95 | } |
---|
96 | }); |
---|
97 | |
---|
98 | })(jQuery); |
---|