ImageGrid/ui (gen4)/lib/widget/browse-walk.js

168 lines
4.0 KiB
JavaScript
Raw Normal View History

/**********************************************************************
*
*
*
**********************************************************************/
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 })