/** * indexes.js * Get the filelist with Apache "mod_autoindex" Module and jQuery(or Prototype or No libs). * * Version 0.1 * * Copyright (c) 2009 tnantoka(http://blog.bornneet.com/) * The MIT License(http://indexes.bornneet.com/license.txt) */ var Indexes = function() { this.init.apply(this, arguments); }; Indexes.prototype = { lib: null, xmlHttp: null, init: function() { if(window.jQuery) { this.lib = this.j; } else if(window.Prototype) { this.lib = this.p; } else { try { this.xmlHttp = new XMLHttpRequest(); } catch(e) { try { this.xmlHttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { try { this.xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch(e) { } } } this.lib = this.t; } }, checkPath: function(path) { return /\/$/.test(path) ? path : path + '/'; }, getIndex: function(path, parent) { if(typeof path == 'object') { parent = path.parent; path = path.path; } path = this.checkPath(path); return this.lib.index.apply(this, [path, false, false, parent]); }, index: function(path, func, async, parent) { if(typeof path == 'object') { func = path.func; async = path.async; parent = path.parent; path = path.path; } if(typeof func == 'undefined') { return this.getIndex(path, parent); } if(typeof async == 'undefined') { async = true; } path = this.checkPath(path); this.lib.index.apply(this, [path, func, async, parent]); }, makeIndex: function(data, parent) { var a = []; var files = data.match(/
/i, '')[0].match(//ig);
for(var i = parent ? 4 : 5; i < files.length; i++) {
files[i].match(/href[\s\S]*=[\s\S]*"([\s\S]+)"/i);
var file = RegExp.$1;
a.push(file);
}
return a;
},
j: {
index: function(path, func, async, parent) {
var a = [];
var self = this;
jQuery.ajax({
url: path,
async: async,
success: function(data) {
a = self.makeIndex(data, parent);
if(func) func(a);
}
});
if(!func) return a;
}
},
p: {
index: function(path, func, async, parent) {
var a = [];
var self = this;
new Ajax.Request(path, {
method: 'GET',
asynchronous: async,
onSuccess: function(data, parent) {
a = self.makeIndex(data.responseText);
if(func) func(a);
}
});
if(!func) return a;
}
},
t: {
index: function(path, func, async, parent) {
var a = [];
var self = this;
this.xmlHttp.open('GET', path, async);
if(async) {
this.xmlHttp.onreadystatechange = function() {
if(self.xmlHttp.readyState == 4 && self.xmlHttp.status == 200) {
a = self.makeIndex(self.xmlHttp.responseText, parent);
if(func) func(a);
}
};
}
this.xmlHttp.send(null);
if(!async) {
a = this.makeIndex(this.xmlHttp.responseText);
if(func) func(a);
}
if(!func) return a;
}
},
isDir: function(path) {
return /\/$/.test(path);
},
getFileName: function(path) {
return path.match(/^(\.?[^\.\/]+)/) ? RegExp.$1 || RegExp.$2 : '';
},
getExt: function(path) {
return path.match(/\.(.+)$|(\/)$/) ? RegExp.$1 || RegExp.$2 : '';
}
};