some refactoring...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2016-04-16 01:36:55 +03:00
parent 4063cc4898
commit ef6b88f64f
4 changed files with 72 additions and 41 deletions

View File

@ -50,6 +50,7 @@ module.GLOBAL_KEYBOARD = {
Home: 'resetSlideshowTimer', Home: 'resetSlideshowTimer',
End: 'resetSlideshowTimer', End: 'resetSlideshowTimer',
T: 'slideshowIntervalDialog',
R: 'toggleSlideshowDirection', R: 'toggleSlideshowDirection',
L: 'toggleSlideshowLooping', L: 'toggleSlideshowLooping',
}, },

View File

@ -46,6 +46,55 @@ var SlideshowActions = actions.Actions({
], ],
}, },
slideshowIntervalDialog: ['Slideshow/Slideshow interval',
function(){
var that = this
// suspend the timer if it's not suspended outside...
var suspended_timer = this.__slideshouw_timer == 'suspended'
suspended_timer || this.suspendSlideshowTimer()
var button_text = 'New...'
var o = widgets.makeConfigListEditor(that, 'slideshow-intervals', {
new_button: button_text,
length_limit: that.config['slideshow-interval-max-count'],
check: Date.str2ms,
unique: Date.str2ms,
sort: function(a, b){
return Date.str2ms(a) - Date.str2ms(b) },
// NOTE: this is called when adding a new value and
// list maximum length is reached...
callback: function(value){
that.config['slideshow-interval'] = value
o.close()
},
})
.close(function(){
// reset the timer if it was not suspended outside...
suspended_timer || that.resetSlideshowTimer()
})
o.client
.open(function(evt, time){
// we clicked the 'New' button -- select it...
if(!Date.str2ms(time)){
o.client.select(button_text)
// set value and exit...
} else {
that.config['slideshow-interval'] = time
// XXX this is ugly...
o.close()
}
})
o.client.dom.addClass('tail-action')
o.client.select(that.config['slideshow-interval'])
return o
}],
// XXX BUG: there are still problems with focus... // XXX BUG: there are still problems with focus...
// to reproduce: // to reproduce:
// click on the first option with a mouse... // click on the first option with a mouse...
@ -55,7 +104,9 @@ var SlideshowActions = actions.Actions({
function(){ function(){
var that = this var that = this
this.suspendSlideshowTimer() // suspend the timer if it's not suspended outside...
var suspended_timer = this.__slideshouw_timer == 'suspended'
suspended_timer || this.suspendSlideshowTimer()
// XXX might be a good idea to make this generic... // XXX might be a good idea to make this generic...
var _makeTogglHandler = function(toggler){ var _makeTogglHandler = function(toggler){
@ -76,51 +127,28 @@ var SlideshowActions = actions.Actions({
.on('open', function(){ .on('open', function(){
var txt = $(this).find('.text').first().text() var txt = $(this).find('.text').first().text()
var oo = widgets.makeConfigListEditor(that, 'slideshow-intervals', { var oo = that.slideshowIntervalDialog()
new_button: 'New...',
length_limit: that.config['slideshow-interval-max-count'],
check: Date.str2ms,
unique: Date.str2ms,
sort: function(a, b){
return Date.str2ms(a) - Date.str2ms(b) },
// NOTE: this is called when adding
// a new value and list maximum
// length is reached...
callback: function(value){
that.config['slideshow-interval'] = value
o.client.update()
oo.close()
o.client.select(value)
},
})
.close(function(){ .close(function(){
// XXX this is ugly... // slideshow is running -- close directly...
o.focus() if(that.toggleSlideshow('?') == 'on'){
o.close()
that.toggleSlideshow('?') == 'on'
&& o.close()
})
oo.client
.open(function(evt, time){
if(!Date.str2ms(time)){
oo.client.select('New...')
} else { } else {
that.config['slideshow-interval'] = time o.client.update()
.then(function(){
o.client.select(txt)
// XXX this is ugly... // XXX this is ugly...
oo.close() o.focus()
})
o.client.update()
o.client.select(txt)
} }
}) })
oo.client.dom.addClass('tail-action') // update slideshow menu...
oo.client.select(that.config['slideshow-interval']) oo.client.open(function(){
o.client.update()
o.client.select(txt)
})
}) })
make(['Direction: ', make(['Direction: ',
@ -139,7 +167,8 @@ var SlideshowActions = actions.Actions({
}) })
})) }))
.close(function(){ .close(function(){
that.resetSlideshowTimer() // reset the timer if it was not suspended outside...
suspended_timer || that.resetSlideshowTimer()
}) })
o.client.dom.addClass('metadata-view tail-action') o.client.dom.addClass('metadata-view tail-action')

View File

@ -153,6 +153,7 @@ function(actions, list_key, options){
} }
} }
}], }],
// XXX add shift up/down/top/bottom and other buttons (optional)...
]}) ]})
// select the new_button item... // select the new_button item...
.on('select', function(evt, elem){ .on('select', function(evt, elem){

View File

@ -47,7 +47,7 @@ Array.prototype.compact = function(){
// //
Array.prototype.unique = function(normalize){ Array.prototype.unique = function(normalize){
if(normalize){ if(normalize){
var cache = this.map(normalize) var cache = this.map(function(e){ return normalize(e) })
return this.filter(function(e, i, a){ return cache.indexOf(cache[i]) == i }) return this.filter(function(e, i, a){ return cache.indexOf(cache[i]) == i })
} else { } else {