jqueryFileTree.js 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  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. $.extend($.fn, {
  35. fileTree: function(o, h, hd) { // CHANGE DOL_LDR add hd param
  36. // Defaults
  37. if( !o ) var o = {};
  38. if( o.root == undefined ) o.root = '/';
  39. if( o.script == undefined ) o.script = 'jqueryFileTree.php';
  40. if( o.folderEvent == undefined ) o.folderEvent = 'click';
  41. if( o.expandSpeed == undefined ) o.expandSpeed= 500;
  42. if( o.collapseSpeed == undefined ) o.collapseSpeed= 500;
  43. if( o.expandEasing == undefined ) o.expandEasing = null;
  44. if( o.collapseEasing == undefined ) o.collapseEasing = null;
  45. if( o.multiFolder == undefined ) o.multiFolder = true;
  46. if( o.loadMessage == undefined ) o.loadMessage = 'Loading...';
  47. $(this).each( function() {
  48. function showTree(c, t) {
  49. $(c).addClass('wait');
  50. $(".jqueryFileTree.start").remove();
  51. $.post(o.script, { dir: t }, function(data) {
  52. $(c).find('.start').html('');
  53. $(c).removeClass('wait').append(data);
  54. if( o.root == t ) $(c).find('UL:hidden').show(); else $(c).find('UL:hidden').slideDown({ duration: o.expandSpeed, easing: o.expandEasing });
  55. bindTree(c);
  56. });
  57. }
  58. function bindTree(t) {
  59. /* @CHANGE Replace LI A by LI A.jqft */
  60. $(t).find('LI A.jqft').bind(o.folderEvent, function() {
  61. if( $(this).parent().hasClass('directory') ) {
  62. if( $(this).parent().hasClass('collapsed') ) {
  63. // Expand
  64. if( !o.multiFolder ) {
  65. $(this).parent().parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
  66. $(this).parent().parent().find('LI.directory').removeClass('expanded').addClass('collapsed');
  67. }
  68. $(this).parent().find('UL').remove(); // cleanup
  69. showTree( $(this).parent(), escape($(this).attr('rel').match( /.*\// )) );
  70. $(this).parent().removeClass('collapsed').addClass('expanded');
  71. } else {
  72. // Collapse
  73. $(this).parent().find('UL').slideUp({ duration: o.collapseSpeed, easing: o.collapseEasing });
  74. $(this).parent().removeClass('expanded').addClass('collapsed');
  75. }
  76. // CHANGE DOL_LDR use hd function provided in param
  77. if (hd != null) hd($(this));
  78. } else {
  79. h($(this).attr('rel'));
  80. }
  81. return false;
  82. });
  83. // Prevent A from triggering the # on non-click events
  84. /* @CHANGE Replace LI A by LI A.jqft */
  85. if( o.folderEvent.toLowerCase != 'click' ) $(t).find('LI A.jqft').bind('click', function() { return false; });
  86. }
  87. // Loading message
  88. $(this).html('<ul class="jqueryFileTree start"><li class="wait">' + o.loadMessage + '<li></ul>');
  89. // Get the initial file list
  90. showTree( $(this), escape(o.root) );
  91. });
  92. }
  93. });
  94. })(jQuery);