mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-30 02:40:08 +00:00
168 lines
4.0 KiB
JavaScript
168 lines
4.0 KiB
JavaScript
|
|
/**********************************************************************
|
||
|
|
*
|
||
|
|
*
|
||
|
|
*
|
||
|
|
**********************************************************************/
|
||
|
|
|
||
|
|
var fs = require('fs')
|
||
|
|
var path = require('path')
|
||
|
|
var walk = require('glob')
|
||
|
|
var guaranteeEvents = require('guarantee-events')
|
||
|
|
|
||
|
|
define(function(require){ var module = {}
|
||
|
|
console.log('>>> browse-walk')
|
||
|
|
|
||
|
|
//var DEBUG = DEBUG != null ? DEBUG : true
|
||
|
|
|
||
|
|
var object = require('../../object')
|
||
|
|
var browse = require('./browse')
|
||
|
|
|
||
|
|
|
||
|
|
/*********************************************************************/
|
||
|
|
// XXX need a root management to do OS-specific root dir management...
|
||
|
|
// e.g. X:/.. and /Volume/..
|
||
|
|
|
||
|
|
// XXX does not list drive letter root dirs, deeper paths work...
|
||
|
|
var listDirGlob =
|
||
|
|
module.listDirGlob =
|
||
|
|
function(path, make){
|
||
|
|
path = path.constructor == Array ? path.join('/') : path
|
||
|
|
path = /^[a-zA-Z]:/.test(path.trim()) ? path : '/'+path
|
||
|
|
|
||
|
|
// if not a glob then just list contents...
|
||
|
|
var fullpath = path.indexOf('*') >= 0
|
||
|
|
path = path.indexOf('*') < 0 ? path + '/*' : path
|
||
|
|
|
||
|
|
guaranteeEvents([
|
||
|
|
'match',
|
||
|
|
'error',
|
||
|
|
],
|
||
|
|
glob.glob(path))
|
||
|
|
.on('match', function(path){
|
||
|
|
fs.stat(path, function(err, stat){
|
||
|
|
if(err){
|
||
|
|
make(fullpath ? path : path.split(/[\\\/]/).pop(), null, true)
|
||
|
|
} else {
|
||
|
|
make(fullpath ? path : path.split(/[\\\/]/).pop()
|
||
|
|
+ (stat.isDirectory() ? '/' : ''))
|
||
|
|
}
|
||
|
|
})
|
||
|
|
})
|
||
|
|
// XXX finalize...
|
||
|
|
// ...and do this after all the stats are done...
|
||
|
|
.on('end', function(){
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
// XXX this has trouble with drives...
|
||
|
|
var listDirfs =
|
||
|
|
module.listDirfs =
|
||
|
|
function(path, make){
|
||
|
|
path = path.constructor == Array ? path.join('/') : path
|
||
|
|
path = /^[a-zA-Z]:/.test(path.trim()) ? path : '/'+path
|
||
|
|
|
||
|
|
var fullpath = false
|
||
|
|
|
||
|
|
fs.readdir(path, function(err, files){
|
||
|
|
// XXX
|
||
|
|
if(err){
|
||
|
|
return
|
||
|
|
}
|
||
|
|
|
||
|
|
files.forEach(function(file){
|
||
|
|
fs.stat(path +'/'+ file, function(err, stat){
|
||
|
|
if(err){
|
||
|
|
make(fullpath
|
||
|
|
? path +'/'+ file
|
||
|
|
: file, null, true)
|
||
|
|
} else {
|
||
|
|
make(fullpath
|
||
|
|
? path +'/'+ file
|
||
|
|
: file + (stat.isDirectory() ? '/' : ''))
|
||
|
|
}
|
||
|
|
})
|
||
|
|
})
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
// XXX for some reason this breaks with a 404...
|
||
|
|
var listDirBrowser =
|
||
|
|
module.listDirBrowser =
|
||
|
|
function(path, make){
|
||
|
|
path = path.constructor == Array ? path.join('/') : path
|
||
|
|
path = /^[a-zA-Z]:/.test(path.trim()) ? path : '/'+path
|
||
|
|
path = /^file:\/\//.test(path.trim()) ? path : 'file://'+path
|
||
|
|
|
||
|
|
var fullpath = false
|
||
|
|
|
||
|
|
$.get(path)
|
||
|
|
// XXX
|
||
|
|
.fail(function(err){
|
||
|
|
})
|
||
|
|
.done(function(data){
|
||
|
|
|
||
|
|
// XXX this is chrome specific...
|
||
|
|
// look for: addRow(name, url, isdir, size, date_modified)
|
||
|
|
data
|
||
|
|
.split(/.*addRow\(([^)]+)\)/g)
|
||
|
|
// skip odd sections...
|
||
|
|
.filter(function(e, i){ return i % 2 })
|
||
|
|
// skip the columns...
|
||
|
|
.slice(1)
|
||
|
|
.forEach(function(elem){
|
||
|
|
// get the data...
|
||
|
|
elem = elem.split(',')
|
||
|
|
var file = elem[0]
|
||
|
|
// remove quotes...
|
||
|
|
.replace(/.*(['"])([^\1]*)\1.*/, '$2')
|
||
|
|
//.replace(/"([^"]+)"/, '$1')
|
||
|
|
|
||
|
|
// do the build...
|
||
|
|
make(fullpath
|
||
|
|
? path +'/'+ file
|
||
|
|
: file + (elem[2]*1 ? '/' : ''))
|
||
|
|
})
|
||
|
|
})
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
//var listDir = module.listDir = listDirBrowser
|
||
|
|
var listDir = module.listDir = listDirfs
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/*********************************************************************/
|
||
|
|
|
||
|
|
var WalkPrototype = Object.create(browse.Browser.prototype)
|
||
|
|
WalkPrototype.options = {
|
||
|
|
|
||
|
|
fullPathEdit: true,
|
||
|
|
traversable: true,
|
||
|
|
flat: false,
|
||
|
|
|
||
|
|
list: listDir,
|
||
|
|
}
|
||
|
|
WalkPrototype.options.__proto__ = browse.Browser.prototype.options
|
||
|
|
|
||
|
|
|
||
|
|
var Walk =
|
||
|
|
module.Walk =
|
||
|
|
object.makeConstructor('Walk',
|
||
|
|
browse.Browser.__proto__,
|
||
|
|
WalkPrototype)
|
||
|
|
|
||
|
|
|
||
|
|
var makeWalk =
|
||
|
|
module.makeWalk = function(elem, path){
|
||
|
|
//return Walk(elem, { path: path })
|
||
|
|
var w = Walk(elem, { path: path })
|
||
|
|
console.log(w)
|
||
|
|
return w
|
||
|
|
}
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
/**********************************************************************
|
||
|
|
* vim:set ts=4 sw=4 : */
|
||
|
|
return module })
|