mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-30 02:40:08 +00:00
added basic path normalization (not final) + some work on loadNewImages(..)...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
07ff3f9b38
commit
61eea2938e
@ -291,7 +291,9 @@ module.ImagesClassPrototype = {
|
|||||||
// XXX populate the image doc better...
|
// XXX populate the image doc better...
|
||||||
images[gid] = {
|
images[gid] = {
|
||||||
id: gid,
|
id: gid,
|
||||||
path: base_pattern ? path.replace(base_pattern, './') : path,
|
// XXX need to normalize path...
|
||||||
|
path: (base_pattern ? path.replace(base_pattern, './') : path)
|
||||||
|
.replace(/([\/\\])\1+/g, '/'),
|
||||||
}
|
}
|
||||||
// remove only of base path is given and in path...
|
// remove only of base path is given and in path...
|
||||||
if(base && base_pattern.test(path)){
|
if(base && base_pattern.test(path)){
|
||||||
@ -351,19 +353,6 @@ module.ImagesPrototype = {
|
|||||||
}
|
}
|
||||||
return this
|
return this
|
||||||
},
|
},
|
||||||
map: function(func){
|
|
||||||
var res = this.constructor()
|
|
||||||
var i = 0
|
|
||||||
for(var key in this){
|
|
||||||
// reject non images...
|
|
||||||
// XXX make this cleaner...
|
|
||||||
if(key == 'length' || typeof(this[key]) == typeof(function(){})){
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
res[k] = func.call(this[key], key, this[key], i++, this)
|
|
||||||
}
|
|
||||||
return res
|
|
||||||
},
|
|
||||||
filter: function(func){
|
filter: function(func){
|
||||||
var res = this.constructor()
|
var res = this.constructor()
|
||||||
var i = 0
|
var i = 0
|
||||||
@ -379,6 +368,22 @@ module.ImagesPrototype = {
|
|||||||
}
|
}
|
||||||
return res
|
return res
|
||||||
},
|
},
|
||||||
|
// NOTE: .map(..) and .reduce(..) will not return Images objects...
|
||||||
|
map: function(func){
|
||||||
|
//var res = this.constructor()
|
||||||
|
var res = []
|
||||||
|
var i = 0
|
||||||
|
for(var key in this){
|
||||||
|
// reject non images...
|
||||||
|
// XXX make this cleaner...
|
||||||
|
if(key == 'length' || typeof(this[key]) == typeof(function(){})){
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
//res[key] = func.call(this[key], key, this[key], i++, this)
|
||||||
|
res.push(func.call(this[key], key, this[key], i++, this))
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
},
|
||||||
reduce: function(func, initial){
|
reduce: function(func, initial){
|
||||||
var res = initial
|
var res = initial
|
||||||
for(var key in this){
|
for(var key in this){
|
||||||
|
|||||||
@ -229,6 +229,11 @@ module.GLOBAL_KEYBOARD = {
|
|||||||
},
|
},
|
||||||
C: 'browseActions: "/Crop/"',
|
C: 'browseActions: "/Crop/"',
|
||||||
O: 'browsePath',
|
O: 'browsePath',
|
||||||
|
S: {
|
||||||
|
// XXX need to make this save to base_path if it exists and
|
||||||
|
// ask the user if it does not... now it always asks.
|
||||||
|
ctrl: 'saveIndex',
|
||||||
|
},
|
||||||
|
|
||||||
// XXX for debug...
|
// XXX for debug...
|
||||||
G: function(){ $('.viewer').toggleClass('visible-gid') },
|
G: function(){ $('.viewer').toggleClass('visible-gid') },
|
||||||
|
|||||||
@ -3326,8 +3326,32 @@ module.AppControl = ImageGridFeatures.Feature({
|
|||||||
|
|
||||||
// XXX at this point this is a stub...
|
// XXX at this point this is a stub...
|
||||||
if(window.nodejs != null){
|
if(window.nodejs != null){
|
||||||
var file = requirejs('./file')
|
|
||||||
var glob = requirejs('glob')
|
var glob = requirejs('glob')
|
||||||
|
var file = requirejs('./file')
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// NOTE: we are not using node's path module as we need this to work in
|
||||||
|
// all contexts, not only node... (???)
|
||||||
|
// XXX currently this is only used in node-specific modules and in
|
||||||
|
// images...
|
||||||
|
// XXX make this standard...
|
||||||
|
var normalizePath =
|
||||||
|
module.normalizePath =
|
||||||
|
function(path){
|
||||||
|
return path
|
||||||
|
// normalize the slashes...
|
||||||
|
.replace(/(\/)/g, '/')
|
||||||
|
// remove duplicate '/'
|
||||||
|
.replace(/(\/)\1+/g, '/')
|
||||||
|
// remove trailing '/'
|
||||||
|
.replace(/\/+$/, '')
|
||||||
|
// take care of .
|
||||||
|
.replace(/\/\.\//g, '/')
|
||||||
|
.replace(/\/\.$/, '')
|
||||||
|
// take care of ..
|
||||||
|
.replace(/\/[^\/]+\/\.\.\//g, '/')
|
||||||
|
.replace(/\/[^\/]+\/\.\.$/, '')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -3349,14 +3373,14 @@ var FileSystemLoaderActions = actions.Actions({
|
|||||||
get base_path(){
|
get base_path(){
|
||||||
var b = this._base_path
|
var b = this._base_path
|
||||||
if(b && b != '/' && b != '\\'){
|
if(b && b != '/' && b != '\\'){
|
||||||
b = b.replace(/[\/\\]+$/, '')
|
b = normalizePath(b)
|
||||||
}
|
}
|
||||||
return b
|
return b
|
||||||
},
|
},
|
||||||
// XXX use .loadPath(..)
|
// XXX use .loadPath(..)
|
||||||
set base_path(value){
|
set base_path(value){
|
||||||
if(value != '/' && value != '\\'){
|
if(value != '/' && value != '\\'){
|
||||||
value = value.replace(/[\/\\]+$/, '')
|
value = normalizePath(value)
|
||||||
}
|
}
|
||||||
this._base_path = value
|
this._base_path = value
|
||||||
this.loadIndex(value)
|
this.loadIndex(value)
|
||||||
@ -3483,9 +3507,10 @@ var FileSystemLoaderActions = actions.Actions({
|
|||||||
|
|
||||||
var that = this
|
var that = this
|
||||||
|
|
||||||
return glob(path + '/*+(jpg|png)')
|
glob(path + '/*+(jpg|png)')
|
||||||
.on('end', function(lst){
|
.on('end', function(lst){
|
||||||
that.loadURLs(lst, path)
|
that.loadURLs(lst
|
||||||
|
.map(function(p){ return normalizePath(p) }), path)
|
||||||
|
|
||||||
// XXX not sure if this is the way to go...
|
// XXX not sure if this is the way to go...
|
||||||
that._base_path = path
|
that._base_path = path
|
||||||
@ -3499,11 +3524,68 @@ var FileSystemLoaderActions = actions.Actions({
|
|||||||
// .loadIndex(..) else .loadImages(..)
|
// .loadIndex(..) else .loadImages(..)
|
||||||
}],
|
}],
|
||||||
|
|
||||||
// XXX
|
// XXX merging does not work (something wrong with .data.join(..))
|
||||||
loadNewImages: ['File/Load new and not indexed images',
|
// XXX revise logger...
|
||||||
function(){
|
loadNewImages: ['File/Load new images',
|
||||||
// XXX list images and add ones that are not in .images
|
function(path, logger){
|
||||||
// XXX
|
path = path || this.base_path
|
||||||
|
logger = logger || this.logger
|
||||||
|
|
||||||
|
if(path == null){
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
var that = this
|
||||||
|
|
||||||
|
// cache the loaded images...
|
||||||
|
var loaded = this.images.map(function(gid, img){ return img.path })
|
||||||
|
var base_pattern = RegExp('^'+path)
|
||||||
|
|
||||||
|
// find images...
|
||||||
|
glob(path + '/*+(jpg|png)')
|
||||||
|
.on('end', function(lst){
|
||||||
|
// create a new images chunk...
|
||||||
|
lst = lst
|
||||||
|
// filter out loaded images...
|
||||||
|
.filter(function(p){
|
||||||
|
return loaded.indexOf(
|
||||||
|
normalizePath(p)
|
||||||
|
// remove the base path if it exists...
|
||||||
|
.replace(base_pattern, '')
|
||||||
|
// normalize the leading './'
|
||||||
|
.replace(/^[\/\\]+/, './')) < 0
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
// nothing new...
|
||||||
|
if(lst.length == 0){
|
||||||
|
// XXX
|
||||||
|
logger && logger.emit('loaded', [])
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// XXX
|
||||||
|
logger && logger.emit('queued', lst)
|
||||||
|
|
||||||
|
var new_images = images.Images.fromArray(lst, path)
|
||||||
|
var gids = new_images.keys()
|
||||||
|
var new_data = that.data.constructor.fromArray(gids)
|
||||||
|
|
||||||
|
// merge with index...
|
||||||
|
// NOTE: we are prepending new images to the start...
|
||||||
|
// NOTE: all ribbon gids will change here...
|
||||||
|
var cur = that.data.current
|
||||||
|
// XXX this does not seem to work...
|
||||||
|
that.data = new_data.join(that.data)
|
||||||
|
that.data.current = cur
|
||||||
|
|
||||||
|
that.images.join(new_images)
|
||||||
|
|
||||||
|
that.reload()
|
||||||
|
|
||||||
|
// XXX report that we are done...
|
||||||
|
logger && logger.emit('loaded', lst)
|
||||||
|
})
|
||||||
}],
|
}],
|
||||||
|
|
||||||
clear: [function(){
|
clear: [function(){
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user