mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 02:10:08 +00:00
reworked metadata UI...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
6146f41967
commit
dfd96f892b
@ -122,6 +122,7 @@ var ExperimentActions = actions.Actions({
|
||||
function(){
|
||||
}],
|
||||
|
||||
|
||||
})
|
||||
|
||||
var ExperimentFeature =
|
||||
|
||||
@ -341,64 +341,49 @@ var MetadataUIActions = actions.Actions({
|
||||
//
|
||||
// XXX should we replace 'mode' with nested set of metadata???
|
||||
// XXX make this support multiple images...
|
||||
// XXX add support for .metadataSection(make) action to construct a section...
|
||||
showMetadata: ['Image/Metadata...',
|
||||
showMetadata: ['Image/Metadata2...',
|
||||
widgets.makeUIDialog(function(image, mode){
|
||||
//function(image, mode){
|
||||
var that = this
|
||||
image = this.data.getImage(image)
|
||||
mode = mode || 'disabled'
|
||||
data = this.images[image]
|
||||
|
||||
var field_order = this.config['metadata-field-order'] || []
|
||||
var x = field_order.length + 1
|
||||
|
||||
// get image metadata...
|
||||
var metadata = this.getMetadata(image) || {}
|
||||
var img = this.images && this.images[image] || null
|
||||
|
||||
// helpers...
|
||||
var _cmp = function(a, b){
|
||||
a = field_order.indexOf(a[0]
|
||||
.replace(/\$(\w)/g, '$1')
|
||||
.replace(/^- |: $/g, ''))
|
||||
a = a == -1 ? x : a
|
||||
b = field_order.indexOf(b[0]
|
||||
.replace(/\$(\w)/g, '$1')
|
||||
.replace(/^- |: $/g, ''))
|
||||
b = b == -1 ? x : b
|
||||
return a - b
|
||||
return browse.makeLister(null,
|
||||
function(p, make){
|
||||
// helper...
|
||||
// NOTE: we intentionally rewrite this on each update,
|
||||
// this is done to keep the ref to make(..) up-to-date...
|
||||
make.dialog.wait = function(){
|
||||
make.Separator()
|
||||
make.Spinner()
|
||||
}
|
||||
|
||||
var _buildInfoList = function(image, metadata){
|
||||
// XXX move these to an info feature...
|
||||
// base fields...
|
||||
var base = [
|
||||
['$GID: ', image],
|
||||
// essentials...
|
||||
make(['$GID: ', image])
|
||||
// NOTE: these are 1-based and not 0-based...
|
||||
['Index (ribbon): ',
|
||||
make(['Index (ribbon): ',
|
||||
that.data.getImageOrder('ribbon', image) + 1
|
||||
+'/'+
|
||||
that.data.getImages(image).len],
|
||||
that.data.getImages(image).len])
|
||||
// show this only when cropped...
|
||||
['Index (global): ',
|
||||
make(['Index (global): ',
|
||||
that.data.getImageOrder(image) + 1
|
||||
+'/'+
|
||||
that.data.getImages('all').len],
|
||||
]
|
||||
that.data.getImages('all').len])
|
||||
// crop-specific stuff...
|
||||
if(that.crop_stack && that.crop_stack.len > 0){
|
||||
base = base.concat([
|
||||
['Index (crop): ',
|
||||
;(that.crop_stack && that.crop_stack.len > 0)
|
||||
&& make(['Index (crop): ',
|
||||
that.data.getImageOrder('loaded', image) + 1
|
||||
+'/'+
|
||||
that.data.getImages('loaded').len],
|
||||
])
|
||||
}
|
||||
// fields that expect that image data is available...
|
||||
var info = ['---']
|
||||
if(img){
|
||||
that.data.getImages('loaded').len])
|
||||
// ribbons order...
|
||||
make(['Ribbon: ',
|
||||
that.data.getRibbonOrder(image) + 1
|
||||
+'/'+
|
||||
Object.keys(that.data.ribbons).length])
|
||||
|
||||
if(data){
|
||||
// some abstractions...
|
||||
// XXX should these be here???
|
||||
var _normalize = typeof(path) != 'undefined' ?
|
||||
path.normalize
|
||||
: function(e){ return e.replace(/\/\.\//, '') }
|
||||
@ -410,44 +395,94 @@ var MetadataUIActions = actions.Actions({
|
||||
: function(e){
|
||||
return _normalize(e.split(/[\\\/]/g).slice(0, -1).join('/')) }
|
||||
|
||||
make.Separator()
|
||||
// paths...
|
||||
img.path
|
||||
&& base.push(['File $Name: ',
|
||||
_basename(img.path)])
|
||||
&& base.push(['Parent $Directory: ',
|
||||
_dirname((img.base_path || '.') +'/'+ img.path)])
|
||||
&& base.push(['Full $Path: ',
|
||||
_normalize((img.base_path || '.') +'/'+ img.path)])
|
||||
|
||||
data.path
|
||||
&& make(['File $Name: ',
|
||||
_basename(data.path)])
|
||||
&& make(['Parent $Directory: ',
|
||||
_dirname((data.base_path || '.') +'/'+ data.path)])
|
||||
&& make(['Full $Path: ',
|
||||
_normalize((data.base_path || '.') +'/'+ data.path)])
|
||||
// times...
|
||||
img.birthtime
|
||||
&& base.push(['Date created: ',
|
||||
img.birthtime && new Date(img.birthtime).toShortDate()])
|
||||
img.ctime
|
||||
&& base.push(['- ctime: ',
|
||||
img.ctime && new Date(img.ctime).toShortDate()])
|
||||
img.mtime
|
||||
&& base.push(['- mtime: ',
|
||||
img.mtime && new Date(img.mtime).toShortDate()])
|
||||
img.atime
|
||||
&& base.push(['- atime: ',
|
||||
img.atime && new Date(img.atime).toShortDate()])
|
||||
data.birthtime
|
||||
&& make(['Date created: ',
|
||||
data.birthtime && new Date(data.birthtime).toShortDate()])
|
||||
data.ctime
|
||||
&& make(['- ctime: ',
|
||||
data.ctime && new Date(data.ctime).toShortDate()],
|
||||
{disabled: true})
|
||||
data.mtime
|
||||
&& make(['- mtime: ',
|
||||
data.mtime && new Date(data.mtime).toShortDate()],
|
||||
{disabled: true})
|
||||
data.atime
|
||||
&& make(['- atime: ',
|
||||
data.atime && new Date(data.atime).toShortDate()],
|
||||
{disabled: true})
|
||||
}
|
||||
|
||||
// comment and tags...
|
||||
info.push(['$Comment: ',
|
||||
function(){ return img && img.comment || '' }])
|
||||
// comment...
|
||||
make.Editable(['$Comment: ',
|
||||
function(){
|
||||
return data && data.comment || '' }],
|
||||
{
|
||||
start_on: 'open',
|
||||
edit_text: 'last',
|
||||
multiline: true,
|
||||
reset_on_commit: false,
|
||||
editdone: function(evt, value){
|
||||
if(value.trim() == ''){
|
||||
return }
|
||||
data = that.images[image] = that.images[image] || {}
|
||||
data.comment = value
|
||||
},
|
||||
})
|
||||
|
||||
info.push(['$Tags: ',
|
||||
function(){ return that.data.getTags().join(', ') || '' }])
|
||||
// get other sections...
|
||||
that.callSortedAction('metadataSection', make, image, data, mode)
|
||||
}, {
|
||||
cls: 'table-view',
|
||||
showDisabled: false,
|
||||
})
|
||||
// select value of current item...
|
||||
.on('select', function(evt, elem){
|
||||
that.config['metadata-auto-select-mode'] == 'on select'
|
||||
&& $(elem).find('.text').last().selectText() })
|
||||
.close(function(){
|
||||
// XXX handle comment and tag changes...
|
||||
// XXX
|
||||
})
|
||||
})],
|
||||
|
||||
metadataSection: ['- Image/',
|
||||
{ sortedActionPriority: 'normal' },
|
||||
core.notUserCallable(function(make, gid, image, mode){
|
||||
var that = this
|
||||
var metadata = this.getMetadata(gid) || {}
|
||||
var field_order = this.config['metadata-field-order'] || []
|
||||
var x = field_order.length + 1
|
||||
|
||||
make.dialog.updateMetadata =
|
||||
function(metadata){
|
||||
metadata = metadata || that.getMetadata()
|
||||
|
||||
// build new data set and update view...
|
||||
//this.options.data = _buildInfoList(image, metadata)
|
||||
this.update()
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
// build fields...
|
||||
var fields = []
|
||||
Object.keys(metadata).forEach(function(k){
|
||||
Object.keys(metadata)
|
||||
.forEach(function(k){
|
||||
var n = k
|
||||
// convert camel-case to human-case ;)
|
||||
.replace(/([A-Z]+)/g, ' $1')
|
||||
.capitalize()
|
||||
var opts = {}
|
||||
|
||||
// skip metadata stuff in short mode...
|
||||
if(mode != 'full'
|
||||
@ -456,89 +491,34 @@ var MetadataUIActions = actions.Actions({
|
||||
return
|
||||
|
||||
} else if(mode == 'disabled') {
|
||||
n = '- ' + n
|
||||
opts.disabled = true
|
||||
}
|
||||
}
|
||||
|
||||
fields.push([ n + ': ', metadata[k] ])
|
||||
fields.push([
|
||||
[ n + ': ', metadata[k] ],
|
||||
opts,
|
||||
])
|
||||
})
|
||||
|
||||
// sort fields...
|
||||
base.sort(_cmp)
|
||||
fields.sort(_cmp)
|
||||
|
||||
// add separator to base...
|
||||
fields.length > 0 && info.push('---')
|
||||
|
||||
return base
|
||||
.concat(info)
|
||||
.concat(fields)
|
||||
}
|
||||
|
||||
// XXX might be a good idea to directly bind ctrl-c to copy value...
|
||||
var o = browse.makeList(
|
||||
null,
|
||||
_buildInfoList(image, metadata),
|
||||
{
|
||||
showDisabled: false,
|
||||
})
|
||||
// select value of current item...
|
||||
.on('select', function(evt, elem){
|
||||
if(that.config['metadata-auto-select-mode'] == 'on select'){
|
||||
$(elem).find('.text').last().selectText()
|
||||
}
|
||||
})
|
||||
// XXX start editing onkeydown...
|
||||
.on('keydown', function(){
|
||||
// XXX Enter + editable -> edit (only this???)
|
||||
})
|
||||
// path selected...
|
||||
.open(function(evt, path){
|
||||
event.preventDefault()
|
||||
|
||||
var editable = that.config['metadata-editable-fields']
|
||||
|
||||
var text = o.filter(path).find('.text')
|
||||
|
||||
var field = text.first().text()
|
||||
.trim()
|
||||
// remove the trailing ':'
|
||||
.slice(0, -1)
|
||||
var elem = text.last()
|
||||
|
||||
// handle select...
|
||||
if(that.config['metadata-auto-select-mode'] == 'on open'){
|
||||
elem.selectText()
|
||||
}
|
||||
|
||||
// skip non-editable fields...
|
||||
if(editable.indexOf(field) >= 0){
|
||||
elem.makeEditable({
|
||||
activate: true,
|
||||
clear_on_edit: false,
|
||||
//blur_on_abort: false,
|
||||
//blur_on_commit: false,
|
||||
})
|
||||
}
|
||||
})
|
||||
.on('close', function(){
|
||||
// XXX
|
||||
})
|
||||
|
||||
o.dom.addClass('table-view')
|
||||
|
||||
o.updateMetadata = function(metadata){
|
||||
metadata = metadata || that.getMetadata()
|
||||
|
||||
// build new data set and update view...
|
||||
this.options.data = _buildInfoList(image, metadata)
|
||||
this.update()
|
||||
|
||||
return this
|
||||
}
|
||||
|
||||
return o
|
||||
})]
|
||||
// make fields...
|
||||
fields
|
||||
.sort(function(a, b){
|
||||
a = field_order.indexOf(a[0][0]
|
||||
.replace(/\$(\w)/g, '$1')
|
||||
.replace(/^- |: $/g, ''))
|
||||
a = a == -1 ? x : a
|
||||
b = field_order.indexOf(b[0][0]
|
||||
.replace(/\$(\w)/g, '$1')
|
||||
.replace(/^- |: $/g, ''))
|
||||
b = b == -1 ? x : b
|
||||
return a - b })
|
||||
.run(function(){
|
||||
this.length > 0
|
||||
&& make.Separator() })
|
||||
.forEach(function(e){
|
||||
make(...e) })
|
||||
})],
|
||||
})
|
||||
|
||||
var MetadataUI =
|
||||
@ -573,27 +553,23 @@ module.MetadataFSUI = core.ImageGridFeatures.Feature({
|
||||
|
||||
handlers: [
|
||||
// Read metadata and when done update the list...
|
||||
// XXX should we show what we can and wait for metadata load (current
|
||||
// state) or wait and show everything in one go???
|
||||
['showMetadata.pre',
|
||||
function(image){
|
||||
var that = this
|
||||
var reader = this.readMetadata(image)
|
||||
|
||||
return reader && function(client){
|
||||
var data = client.options.data
|
||||
|
||||
return reader
|
||||
&& function(client){
|
||||
// add a loading indicator...
|
||||
// NOTE: this will get overwritten when calling .updateMetadata()
|
||||
data.push('---')
|
||||
data.push('...')
|
||||
client.update()
|
||||
client.wait()
|
||||
|
||||
reader.then(function(data){
|
||||
client.updateMetadata()
|
||||
})
|
||||
}
|
||||
}],
|
||||
reader
|
||||
.then(function(data){
|
||||
client.updateMetadata() })
|
||||
.catch(function(){
|
||||
client.update() })
|
||||
} }],
|
||||
],
|
||||
})
|
||||
|
||||
|
||||
@ -706,6 +706,20 @@ var TagUIActions = actions.Actions({
|
||||
// XXX
|
||||
},
|
||||
|
||||
metadataSection: [
|
||||
{ sortedActionPriority: 80 },
|
||||
function(make, gid, image){
|
||||
var that = this
|
||||
|
||||
make(['Tags:',
|
||||
function(){
|
||||
return that.data.getTags(gid).join(', ') }],
|
||||
{
|
||||
open: function(){
|
||||
that.showTagCloud(gid)
|
||||
.close(function(){
|
||||
make.dialog.update() }) },
|
||||
}) }],
|
||||
})
|
||||
|
||||
|
||||
|
||||
@ -108,10 +108,10 @@ module.VirtualImages = core.ImageGridFeatures.Feature({
|
||||
tag: 'virtual-images',
|
||||
depends: [
|
||||
'edit',
|
||||
// XXX
|
||||
],
|
||||
suggested: [
|
||||
'ui-virtual-images',
|
||||
'ui-virtual-images-edit',
|
||||
],
|
||||
|
||||
actions: VirtualImagesActions,
|
||||
@ -128,7 +128,7 @@ var VirtualImagesUIActions = actions.Actions({
|
||||
},
|
||||
|
||||
__virtual_block_processors__: {
|
||||
// The default handler is designed to process plain or lightly
|
||||
// Text handler is designed to process plain or lightly
|
||||
// formatted text.
|
||||
//
|
||||
// This will:
|
||||
@ -137,9 +137,10 @@ var VirtualImagesUIActions = actions.Actions({
|
||||
//
|
||||
// NOTE: the processor is allowed to only modify image block
|
||||
// content, anything else would require cleanup...
|
||||
//
|
||||
// XXX might be a good idea to add action param to enable
|
||||
// handlers to do things like 'setup', 'cleanup', ...
|
||||
default: function(image, dom){
|
||||
text: function(image, dom){
|
||||
if(!image.text){
|
||||
return dom }
|
||||
|
||||
@ -184,14 +185,33 @@ var VirtualImagesUIActions = actions.Actions({
|
||||
var p = (this.__virtual_block_processors__
|
||||
|| VirtualImagesUIActions.__virtual_block_processors__
|
||||
|| {})
|
||||
p = p[image.format] || p['default']
|
||||
p = p[image.format] || p['text']
|
||||
return p instanceof Function ?
|
||||
p.call(this, image, dom)
|
||||
: dom }],
|
||||
|
||||
// XXX add text format selection...
|
||||
metadataSection: [
|
||||
{ sortedActionPriority: 80 },
|
||||
function(make, gid, image){
|
||||
var that = this
|
||||
if(!image || image.type != 'virtual'){
|
||||
return }
|
||||
|
||||
// XXX virtual block editor UI...
|
||||
// XXX
|
||||
make.Separator()
|
||||
make.Editable(['Te$xt:', image.text], {
|
||||
start_on: 'open',
|
||||
edit_text: 'last',
|
||||
multiline: true,
|
||||
reset_on_commit: false,
|
||||
editdone: function(evt, value){
|
||||
image.text = value
|
||||
that.refresh(gid)
|
||||
},
|
||||
})
|
||||
// XXX add format selection...
|
||||
make(['Format:', image.format || 'text'])
|
||||
}],
|
||||
})
|
||||
|
||||
// NOTE: this is independent of 'virtual-images'...
|
||||
@ -206,6 +226,7 @@ module.VirtualImagesUI = core.ImageGridFeatures.Feature({
|
||||
],
|
||||
suggested: [
|
||||
'virtual-images',
|
||||
'ui-virtual-images-edit',
|
||||
],
|
||||
|
||||
actions: VirtualImagesUIActions,
|
||||
@ -229,6 +250,30 @@ module.VirtualImagesUI = core.ImageGridFeatures.Feature({
|
||||
|
||||
|
||||
|
||||
//---------------------------------------------------------------------
|
||||
|
||||
var VirtualImagesEditUIActions = actions.Actions({
|
||||
// XXX virtual block editor...
|
||||
// XXX
|
||||
})
|
||||
|
||||
// NOTE: this is independent of 'virtual-images'...
|
||||
var VirtualImagesEditUI =
|
||||
module.VirtualImagesEditUI = core.ImageGridFeatures.Feature({
|
||||
title: '',
|
||||
doc: '',
|
||||
|
||||
tag: 'ui-virtual-images-edit',
|
||||
depends: [
|
||||
'ui',
|
||||
'ui-virtual-images',
|
||||
'virtual-images',
|
||||
],
|
||||
|
||||
actions: VirtualImagesEditUIActions,
|
||||
})
|
||||
|
||||
|
||||
|
||||
/**********************************************************************
|
||||
* vim:set ts=4 sw=4 : */ return module })
|
||||
|
||||
@ -281,7 +281,10 @@ if(typeof(jQuery) != typeof(undefined)){
|
||||
} else if(n == 'Enter'
|
||||
&& !options.multiline){
|
||||
evt.preventDefault()
|
||||
that.trigger('edit-commit', that[0].innerText)
|
||||
that.trigger('edit-commit',
|
||||
that.length == 1 ?
|
||||
that[0].innerText
|
||||
: that.toArray().map(function(e){ return e.innerText }))
|
||||
|
||||
// done -- multi-line...
|
||||
} else if(options.multiline
|
||||
@ -290,7 +293,10 @@ if(typeof(jQuery) != typeof(undefined)){
|
||||
!(evt.ctrlKey || evt.shiftKey || evt.metaKey)
|
||||
: (evt.ctrlKey || evt.shiftKey || evt.metaKey)) ){
|
||||
evt.preventDefault()
|
||||
that.trigger('edit-commit', that[0].innerText)
|
||||
that.trigger('edit-commit',
|
||||
that.length == 1 ?
|
||||
that[0].innerText
|
||||
: that.toArray().map(function(e){ return e.innerText }))
|
||||
|
||||
// multi-line keep keys...
|
||||
} else if(options.multiline
|
||||
@ -311,7 +317,10 @@ if(typeof(jQuery) != typeof(undefined)){
|
||||
return
|
||||
} else if(n == 'Up' || n == 'Down'){
|
||||
evt.preventDefault()
|
||||
that.trigger('edit-commit', that[0].innerText)
|
||||
that.trigger('edit-commit',
|
||||
that.length == 1 ?
|
||||
that[0].innerText
|
||||
: that.toArray().map(function(e){ return e.innerText }))
|
||||
|
||||
// continue handling...
|
||||
} else if(options.propagate_unhandled_keys){
|
||||
|
||||
@ -376,6 +376,10 @@ function(text, options){
|
||||
options.abort_on_deselect !== false ? 'edit-abort' : 'edit-commit', editable.text())
|
||||
})
|
||||
|
||||
options.multiline
|
||||
&& getEditable()
|
||||
.css('white-space', 'pre-line')
|
||||
|
||||
stop_propagation
|
||||
&& elem
|
||||
.on(stop_propagation, function(e){ e.stopPropagation() })
|
||||
|
||||
102
ui (gen4)/package-lock.json
generated
102
ui (gen4)/package-lock.json
generated
@ -5,14 +5,14 @@
|
||||
"requires": true,
|
||||
"dependencies": {
|
||||
"@types/node": {
|
||||
"version": "10.14.13",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.13.tgz",
|
||||
"integrity": "sha512-yN/FNNW1UYsRR1wwAoyOwqvDuLDtVXnaJTZ898XIw/Q5cCaeVAlVwvsmXLX5PuiScBYwZsZU4JYSHB3TvfdwvQ=="
|
||||
"version": "10.14.21",
|
||||
"resolved": "https://registry.npmjs.org/@types/node/-/node-10.14.21.tgz",
|
||||
"integrity": "sha512-nuFlRdBiqbF+PJIEVxm2jLFcQWN7q7iWEJGsBV4n7v1dbI9qXB8im2pMMKMCUZe092sQb5SQft2DHfuQGK5hqQ=="
|
||||
},
|
||||
"ajv": {
|
||||
"version": "6.6.1",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.6.1.tgz",
|
||||
"integrity": "sha512-ZoJjft5B+EJBjUyu9C9Hc0OZyPZSSlOF+plzouTrg6UlA8f+e/n8NIgBFG/9tppJtpPWfthHakK7juJdNDODww==",
|
||||
"version": "6.10.2",
|
||||
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz",
|
||||
"integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==",
|
||||
"requires": {
|
||||
"fast-deep-equal": "^2.0.1",
|
||||
"fast-json-stable-stringify": "^2.0.0",
|
||||
@ -214,17 +214,17 @@
|
||||
}
|
||||
},
|
||||
"combined-stream": {
|
||||
"version": "1.0.7",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz",
|
||||
"integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==",
|
||||
"version": "1.0.8",
|
||||
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz",
|
||||
"integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==",
|
||||
"requires": {
|
||||
"delayed-stream": "~1.0.0"
|
||||
}
|
||||
},
|
||||
"commander": {
|
||||
"version": "2.20.0",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz",
|
||||
"integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ=="
|
||||
"version": "2.20.1",
|
||||
"resolved": "https://registry.npmjs.org/commander/-/commander-2.20.1.tgz",
|
||||
"integrity": "sha512-cCuLsMhJeWQ/ZpsFTbE765kvVfoeSddc4nU3up4fV+fDBcfUXnbITJ+JzhkdjzOqhURjZgujxaioam4RM9yGUg=="
|
||||
},
|
||||
"concat-map": {
|
||||
"version": "0.0.1",
|
||||
@ -330,9 +330,9 @@
|
||||
}
|
||||
},
|
||||
"electron": {
|
||||
"version": "5.0.8",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-5.0.8.tgz",
|
||||
"integrity": "sha512-wkUVE2GaYCsqQTsISSHWkIkcdpwLwZ1jhzAXSFFoSzsTgugmzhX60rJjIccotUmZ0iPzw+u4ahfcaJ0eslrPNQ==",
|
||||
"version": "5.0.11",
|
||||
"resolved": "https://registry.npmjs.org/electron/-/electron-5.0.11.tgz",
|
||||
"integrity": "sha512-2QVVycTmvMmKC3S9XV7zSvouYBooHRTOBx1r64nBwtMh44gPydR3HzUbyVYjjxsw+4vIuH6AqNuY48KtWRpajg==",
|
||||
"requires": {
|
||||
"@types/node": "^10.12.18",
|
||||
"electron-download": "^4.1.0",
|
||||
@ -1142,9 +1142,9 @@
|
||||
"integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk="
|
||||
},
|
||||
"hosted-git-info": {
|
||||
"version": "2.7.1",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz",
|
||||
"integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w=="
|
||||
"version": "2.8.5",
|
||||
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz",
|
||||
"integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg=="
|
||||
},
|
||||
"http-signature": {
|
||||
"version": "1.2.0",
|
||||
@ -1162,9 +1162,9 @@
|
||||
"integrity": "sha512-oTZqweIP51xaGPI4uPa56/Pri/480R+mo7SeU+YETByQNhDG55ycFyNLIgta9vXhILrxXDmF7ZGhqZIcuN0gJQ=="
|
||||
},
|
||||
"ig-actions": {
|
||||
"version": "3.23.0",
|
||||
"resolved": "https://registry.npmjs.org/ig-actions/-/ig-actions-3.23.0.tgz",
|
||||
"integrity": "sha512-afgaPVscDe8n1vurzFl2cpwBtulDTCUzP4LKLrr87dN+nZY7zAshxiPeljxfz2pzMcqJMPtDhbWICm2Gpc9VJQ==",
|
||||
"version": "3.24.1",
|
||||
"resolved": "https://registry.npmjs.org/ig-actions/-/ig-actions-3.24.1.tgz",
|
||||
"integrity": "sha512-D3TNcUHTbAdsV91hs+GITIofBP3NJpQ9IEOogEY/eKEm8MYLGin7SgwwrggVvC9cPJTe+VYE9oPS0RP2V7Tj1w==",
|
||||
"requires": {
|
||||
"ig-object": "^2.0.0"
|
||||
}
|
||||
@ -1317,9 +1317,9 @@
|
||||
}
|
||||
},
|
||||
"less": {
|
||||
"version": "3.9.0",
|
||||
"resolved": "https://registry.npmjs.org/less/-/less-3.9.0.tgz",
|
||||
"integrity": "sha512-31CmtPEZraNUtuUREYjSqRkeETFdyEHSEPAGq4erDlUXtda7pzNmctdljdIagSb589d/qXGWiiP31R5JVf+v0w==",
|
||||
"version": "3.10.3",
|
||||
"resolved": "https://registry.npmjs.org/less/-/less-3.10.3.tgz",
|
||||
"integrity": "sha512-vz32vqfgmoxF1h3K4J+yKCtajH0PWmjkIFgbs5d78E/c/e+UQTnI+lWK+1eQRE95PXM2mC3rJlLSSP9VQHnaow==",
|
||||
"dev": true,
|
||||
"requires": {
|
||||
"clone": "^2.1.2",
|
||||
@ -1392,16 +1392,16 @@
|
||||
"optional": true
|
||||
},
|
||||
"mime-db": {
|
||||
"version": "1.37.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz",
|
||||
"integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg=="
|
||||
"version": "1.40.0",
|
||||
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz",
|
||||
"integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA=="
|
||||
},
|
||||
"mime-types": {
|
||||
"version": "2.1.21",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz",
|
||||
"integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==",
|
||||
"version": "2.1.24",
|
||||
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz",
|
||||
"integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==",
|
||||
"requires": {
|
||||
"mime-db": "~1.37.0"
|
||||
"mime-db": "1.40.0"
|
||||
}
|
||||
},
|
||||
"mimic-response": {
|
||||
@ -1755,9 +1755,9 @@
|
||||
"optional": true
|
||||
},
|
||||
"psl": {
|
||||
"version": "1.1.29",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.1.29.tgz",
|
||||
"integrity": "sha512-AeUmQ0oLN02flVHXWh9sSJF7mcdFq0ppid/JkErufc3hGIV/AMa8Fo9VgDo/cT2jFdOWoFvHp90qqBH54W+gjQ=="
|
||||
"version": "1.4.0",
|
||||
"resolved": "https://registry.npmjs.org/psl/-/psl-1.4.0.tgz",
|
||||
"integrity": "sha512-HZzqCGPecFLyoRj5HLfuDSKYTJkAfB5thKBIkRHtGjWwY7p1dAyveIbXIq4tO0KYfDF2tHqPUgY9SDnGm00uFw=="
|
||||
},
|
||||
"pump": {
|
||||
"version": "2.0.1",
|
||||
@ -1892,14 +1892,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"safe-buffer": {
|
||||
"version": "5.1.2",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz",
|
||||
"integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g=="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.3.2",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz",
|
||||
"integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA=="
|
||||
"version": "5.2.0",
|
||||
"resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz",
|
||||
"integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg=="
|
||||
}
|
||||
}
|
||||
},
|
||||
@ -1914,9 +1909,9 @@
|
||||
"integrity": "sha1-aTtVidl/hZhGL8cYJjUyYqr9qDY="
|
||||
},
|
||||
"resolve": {
|
||||
"version": "1.11.1",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.1.tgz",
|
||||
"integrity": "sha512-vIpgF6wfuJOZI7KKKSP+HmiKggadPQAdsp5HiC1mvqnfp0gF1vdwgBWZIdrVft9pgqoMFQN+R7BSWZiBxx+BBw==",
|
||||
"version": "1.12.0",
|
||||
"resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz",
|
||||
"integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==",
|
||||
"requires": {
|
||||
"path-parse": "^1.0.6"
|
||||
}
|
||||
@ -2047,9 +2042,9 @@
|
||||
"integrity": "sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0="
|
||||
},
|
||||
"sshpk": {
|
||||
"version": "1.15.2",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.15.2.tgz",
|
||||
"integrity": "sha512-Ra/OXQtuh0/enyl4ETZAfTaeksa6BXks5ZcjpSUNrjBr0DvrJKX+1fsKDPpT9TBXgHAFsa4510aNVgI8g/+SzA==",
|
||||
"version": "1.16.1",
|
||||
"resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz",
|
||||
"integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==",
|
||||
"requires": {
|
||||
"asn1": "~0.2.3",
|
||||
"assert-plus": "^1.0.0",
|
||||
@ -2300,10 +2295,15 @@
|
||||
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
|
||||
"integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8="
|
||||
},
|
||||
"uuid": {
|
||||
"version": "3.3.3",
|
||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz",
|
||||
"integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ=="
|
||||
},
|
||||
"v8-compile-cache": {
|
||||
"version": "2.0.3",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.0.3.tgz",
|
||||
"integrity": "sha512-CNmdbwQMBjwr9Gsmohvm0pbL954tJrNzf6gWL3K+QMQf00PF7ERGrEiLgjuU3mKreLC2MeGhUsNV9ybTbLgd3w=="
|
||||
"version": "2.1.0",
|
||||
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz",
|
||||
"integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g=="
|
||||
},
|
||||
"validate-npm-package-license": {
|
||||
"version": "3.0.4",
|
||||
|
||||
@ -20,15 +20,15 @@
|
||||
"dependencies": {
|
||||
"app-module-path": "^1.0.6",
|
||||
"async-json": "0.0.2",
|
||||
"commander": "^2.20.0",
|
||||
"electron": "^5.0.8",
|
||||
"commander": "^2.20.1",
|
||||
"electron": "^5.0.11",
|
||||
"exiftool": "^0.0.3",
|
||||
"fs-extra": "^7.0.1",
|
||||
"fs-walk": "^0.0.1",
|
||||
"generic-walk": "^1.4.0",
|
||||
"glob": "^7.1.4",
|
||||
"guarantee-events": "^1.0.0",
|
||||
"ig-actions": "^3.23.0",
|
||||
"ig-actions": "^3.24.1",
|
||||
"ig-features": "^3.4.0",
|
||||
"ig-object": "^2.0.0",
|
||||
"moment": "^2.24.0",
|
||||
@ -37,7 +37,7 @@
|
||||
"requirejs-plugins": "^1.0.2",
|
||||
"sharp": "^0.22.1",
|
||||
"strip-json-comments": "^2.0.1",
|
||||
"v8-compile-cache": "^2.0.3",
|
||||
"v8-compile-cache": "^2.1.0",
|
||||
"wildglob": "^0.1.1"
|
||||
},
|
||||
"optionalDependencies": {
|
||||
@ -48,7 +48,7 @@
|
||||
"react-dom": "^15.6.2"
|
||||
},
|
||||
"devDependencies": {
|
||||
"less": "^3.9.0"
|
||||
"less": "^3.10.3"
|
||||
},
|
||||
"bin": {
|
||||
"ig": "ig.js"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user