mirror of
https://github.com/flynx/ImageGrid.git
synced 2025-10-29 10:20:08 +00:00
fixed a bug in progress + working on .linked...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
parent
d74486f95c
commit
e04e050f18
@ -1989,6 +1989,7 @@ progress:not(value)::-webkit-progress-bar {
|
|||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.progress-bar {
|
.progress-bar {
|
||||||
|
position: relative;
|
||||||
color: silver;
|
color: silver;
|
||||||
font-size: 10px;
|
font-size: 10px;
|
||||||
margin: 10px;
|
margin: 10px;
|
||||||
@ -1996,8 +1997,8 @@ progress:not(value)::-webkit-progress-bar {
|
|||||||
.progress-bar .close {
|
.progress-bar .close {
|
||||||
display: none;
|
display: none;
|
||||||
position: absolute;
|
position: absolute;
|
||||||
top: 0px;
|
top: -10px;
|
||||||
right: 7px;
|
right: 0px;
|
||||||
width: 20px;
|
width: 20px;
|
||||||
font-size: 20px;
|
font-size: 20px;
|
||||||
text-align: center;
|
text-align: center;
|
||||||
|
|||||||
@ -2978,8 +2978,102 @@ var TaskActions = actions.Actions({
|
|||||||
// XXX is context manager a special case of task manager???
|
// XXX is context manager a special case of task manager???
|
||||||
// XXX move to a separate feature...
|
// XXX move to a separate feature...
|
||||||
|
|
||||||
|
__contexts: null,
|
||||||
get contexts(){},
|
get contexts(){},
|
||||||
|
|
||||||
|
// Links...
|
||||||
|
//
|
||||||
|
__links: null,
|
||||||
|
get links(){
|
||||||
|
var links = this.__linked = this.__linked || {}
|
||||||
|
// remove 'current' if it does not match the current index...
|
||||||
|
// XXX revise the test...
|
||||||
|
var c = links.current
|
||||||
|
if(c && (c.data !== this.data || c.images !== this.images)){
|
||||||
|
links.previous = c
|
||||||
|
delete links.current }
|
||||||
|
return links },
|
||||||
|
get linked(){
|
||||||
|
return this.link() },
|
||||||
|
link: ['- System/',
|
||||||
|
doc`Get/create links...
|
||||||
|
|
||||||
|
Get/create link to current state...
|
||||||
|
.link()
|
||||||
|
.link('current')
|
||||||
|
-> current-link
|
||||||
|
|
||||||
|
Get link to previous state if present...
|
||||||
|
.link('previous')
|
||||||
|
-> previous-link
|
||||||
|
-> undefined
|
||||||
|
|
||||||
|
Get/create a titled link...
|
||||||
|
.link(title)
|
||||||
|
-> link
|
||||||
|
|
||||||
|
A link is a separate ImageGrid instance that links to the parent's
|
||||||
|
state and explicitly disabled ui features.
|
||||||
|
|
||||||
|
A link will reflect the data changes but when the main index is
|
||||||
|
cleared or reloaded it will retain the old data.
|
||||||
|
Care must be taken as this is true in both directions and changes
|
||||||
|
to link state are reflected on the link .parent, this is useful
|
||||||
|
when updating state in the background but can bite the user if not
|
||||||
|
used carefully.
|
||||||
|
|
||||||
|
This effectively enables us to isolate a context for long running
|
||||||
|
actions/tasks and make them independent of the main state.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
ig.linked.readAllMetadata()
|
||||||
|
|
||||||
|
|
||||||
|
NOTE: links are relatively cheap as almost no data is copied but
|
||||||
|
they can be a source of a memory "leak" if not cleaned out
|
||||||
|
as they prevent data from being garbage collected...
|
||||||
|
NOTE: 'current' and 'previous' links are reserved.
|
||||||
|
NOTE: 'previous' are a special case as they can not be created
|
||||||
|
via .link(..).
|
||||||
|
`,
|
||||||
|
function(title='current'){
|
||||||
|
var that = this
|
||||||
|
var links = this.links
|
||||||
|
// get link already created...
|
||||||
|
// NOTE: 'current' and 'previous' links are handled by the
|
||||||
|
// .links prop...
|
||||||
|
var link = links[title]
|
||||||
|
if(link){
|
||||||
|
return link }
|
||||||
|
// prevent creating previous links...
|
||||||
|
if(title == 'previous'){
|
||||||
|
return actions.UNDEFINED }
|
||||||
|
// create a link...
|
||||||
|
// NOTE: we intentionally disable ui here and do not trigger .start()...
|
||||||
|
return (links[title] =
|
||||||
|
Object.assign(
|
||||||
|
// XXX add a 'link' feature...
|
||||||
|
ImageGridFeatures.setup([
|
||||||
|
...this.features.input,
|
||||||
|
'-ui',
|
||||||
|
]),
|
||||||
|
this,
|
||||||
|
{
|
||||||
|
// link metadata...
|
||||||
|
parent: this,
|
||||||
|
title: title,
|
||||||
|
// XXX change this when data/images changes...
|
||||||
|
// ...a prop in the link feature...
|
||||||
|
type: 'link',
|
||||||
|
// link configuration...
|
||||||
|
logger: that.logger
|
||||||
|
.push(`Linked ${ Object.keys(links).length }`),
|
||||||
|
})) }],
|
||||||
|
// XXX this should delete the clone when done...
|
||||||
|
LinkedTask: ['- System/',
|
||||||
|
function(){}],
|
||||||
|
|
||||||
|
|
||||||
// XXX would be nice to have an ability to partially clone the instance...
|
// XXX would be nice to have an ability to partially clone the instance...
|
||||||
// ...currently we can do a full clone and remove things we do
|
// ...currently we can do a full clone and remove things we do
|
||||||
// not want but that still takes time and memory...
|
// not want but that still takes time and memory...
|
||||||
@ -3024,52 +3118,6 @@ var TaskActions = actions.Actions({
|
|||||||
undefined
|
undefined
|
||||||
: res }],
|
: res }],
|
||||||
|
|
||||||
// Create a new ig instance with the same data...
|
|
||||||
//
|
|
||||||
// This will reflect the data changes while when the main index is
|
|
||||||
// cleared or reloaded this will retain the old data...
|
|
||||||
//
|
|
||||||
// XXX should this be a prop -- .linked???
|
|
||||||
// XXX would be a good idea to store all the links in once place...
|
|
||||||
__linked: null,
|
|
||||||
get linked(){
|
|
||||||
return (this.__linked = this.__linked || []) },
|
|
||||||
link: ['- System/',
|
|
||||||
function(title){
|
|
||||||
var that = this
|
|
||||||
var links = this.linked
|
|
||||||
|
|
||||||
// get link already created...
|
|
||||||
var link = this.linked
|
|
||||||
.filter(function(l){
|
|
||||||
return title ?
|
|
||||||
l.title == title
|
|
||||||
: (l.data === that.data
|
|
||||||
&& l.images === that.images) })
|
|
||||||
.last()
|
|
||||||
if(link){
|
|
||||||
return link }
|
|
||||||
|
|
||||||
// create a link...
|
|
||||||
// NOTE: we intentionally disable ui here and do not trigger .start()...
|
|
||||||
link = ImageGridFeatures.setup([...this.features.input, '-ui'])
|
|
||||||
return Object.assign(
|
|
||||||
link,
|
|
||||||
this,
|
|
||||||
{
|
|
||||||
// XXX revise...
|
|
||||||
parent: this,
|
|
||||||
title: title,
|
|
||||||
// XXX change this when data/images changes...
|
|
||||||
type: 'link',
|
|
||||||
})
|
|
||||||
.run(function(){
|
|
||||||
this.logger = that.logger.push(['Task', links.length].join(' '))
|
|
||||||
this.context_id = links.push(this) }) }],
|
|
||||||
// XXX this should delete the clone when done...
|
|
||||||
LinkedTask: ['- System/',
|
|
||||||
function(){}],
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
var Tasks =
|
var Tasks =
|
||||||
|
|||||||
@ -141,8 +141,15 @@ var ProgressActions = actions.Actions({
|
|||||||
var forceShow = !!(attrs || {}).forceShow
|
var forceShow = !!(attrs || {}).forceShow
|
||||||
;[text, value, max] = args
|
;[text, value, max] = args
|
||||||
|
|
||||||
var msg = text instanceof Array ? text.slice(1).join(': ') : null
|
// XXX revise...
|
||||||
text = text instanceof Array ? text[0] : text
|
var msg =
|
||||||
|
(text instanceof Array
|
||||||
|
&& text.length > 1) ?
|
||||||
|
text.slice(1).join(': ')
|
||||||
|
: null
|
||||||
|
text = text instanceof Array ?
|
||||||
|
text[0]
|
||||||
|
: text
|
||||||
|
|
||||||
// reset -- clear cache and set everything to 0...
|
// reset -- clear cache and set everything to 0...
|
||||||
// NOTE: we will later draw the progress bar full...
|
// NOTE: we will later draw the progress bar full...
|
||||||
@ -157,8 +164,11 @@ var ProgressActions = actions.Actions({
|
|||||||
var cache = (this.__progress_cache = this.__progress_cache || {})
|
var cache = (this.__progress_cache = this.__progress_cache || {})
|
||||||
cache = cache[text] =
|
cache = cache[text] =
|
||||||
Object.assign(
|
Object.assign(
|
||||||
cache[text] || {},
|
{msg},
|
||||||
|
cache[text] || {msg},
|
||||||
attrs || {})
|
attrs || {})
|
||||||
|
// restore cached message if none given...
|
||||||
|
msg = cache.msg = msg || cache.msg
|
||||||
|
|
||||||
var updateValue = function(name, value){
|
var updateValue = function(name, value){
|
||||||
var v = cache[name] || 0
|
var v = cache[name] || 0
|
||||||
@ -284,7 +294,9 @@ var ProgressActions = actions.Actions({
|
|||||||
.replace(/^00:(00:)?/, '') }s`
|
.replace(/^00:(00:)?/, '') }s`
|
||||||
: ''
|
: ''
|
||||||
// format the message...
|
// format the message...
|
||||||
msg = msg ? ': '+msg : ''
|
msg = msg ?
|
||||||
|
': '+msg
|
||||||
|
: ''
|
||||||
msg = ' '+ msg
|
msg = ' '+ msg
|
||||||
+ (value && value >= (max || 0) ?
|
+ (value && value >= (max || 0) ?
|
||||||
' (done)'
|
' (done)'
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user