[289] | 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); |
---|