added slideshow pause + soem tweaks...

Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
Alex A. Naanou 2017-11-26 07:56:26 +03:00
parent abd8ce9c23
commit 904abeed68
4 changed files with 285 additions and 20 deletions

View File

@ -71,6 +71,7 @@ APP_DATE=$(BUILD_DIR)/DATE
APP_NODE=$(BUILD_DIR)/NODE
APP_ZIP=$(BUILD_DIR)/package.nw
APP_ASAR=$(BUILD_DIR)/app.asar
@ -130,6 +131,16 @@ $(APP_ZIP): $(CSS_FILES) $(BUILD_DIR) $(NODE_DIR) $(NW_PROJECT_FILE) \
zip: $(APP_ZIP)
# XXX add a asar build rool -- see electron docs...
# asar pack ...
# ...this will also need an appropriate loader or config as I see
# no way to make this transparent...
$(APP_ASAR): $(CSS_FILES) $(BUILD_DIR) $(NODE_DIR) $(NW_PROJECT_FILE) \
$(JS_FILES) $(CSS_FILES) $(HTML_FILES) $(APP_DATE) $(APP_NODE)
asar: $(APP_ASAR)
#**********************************************************************
# dev env...

View File

@ -34,13 +34,14 @@ module.GLOBAL_KEYBOARD = {
'Slideshow': {
pattern: '.slideshow-running',
drop: [
'Space', 'Backspace',
'Esc',
'Up', 'Down', 'Enter',
'R', 'L', 'G', 'T',
],
Esc: 'toggleSlideshow: "off" -- Exit slideshow',
Space: 'Esc',
Space: 'toggleSlideshowTimer',
Enter: 'slideshowDialog',
Left: 'resetSlideshowTimer',

View File

@ -57,10 +57,10 @@ var SlideshowActions = actions.Actions({
// reset the timer...
// NOTE: this means we were in a slideshow mode so we do not
// need to prepare...
if(this.__slideshouw_timer){
this.__slideshouw_timer != 'suspended'
&& clearInterval(this.__slideshouw_timer)
delete this.__slideshouw_timer
if(this.__slideshow_timer){
this.__slideshow_timer != 'suspended'
&& clearInterval(this.__slideshow_timer)
delete this.__slideshow_timer
// prepare for the slideshow...
} else {
@ -90,7 +90,7 @@ var SlideshowActions = actions.Actions({
}
// start the timer...
this.__slideshouw_timer = setInterval(function(){
this.__slideshow_timer = setInterval(function(){
var cur = that.current
// next step...
@ -116,9 +116,9 @@ var SlideshowActions = actions.Actions({
// stop...
} else {
// stop timer...
this.__slideshouw_timer
&& clearInterval(this.__slideshouw_timer)
delete this.__slideshouw_timer
this.__slideshow_timer
&& clearInterval(this.__slideshow_timer)
delete this.__slideshow_timer
// restore the original workspace...
this.popWorkspace()
@ -130,7 +130,7 @@ var SlideshowActions = actions.Actions({
var that = this
// suspend the timer if it's not suspended outside...
var suspended_timer = this.__slideshouw_timer == 'suspended'
var suspended_timer = this.__slideshow_timer == 'suspended'
suspended_timer || this.suspendSlideshowTimer()
// XXX might be a good idea to make this generic...
@ -196,12 +196,12 @@ var SlideshowActions = actions.Actions({
})
.on('start', function(){
// suspend the timer if it's not suspended outside...
this.__slideshouw_timer == 'suspended'
this.__slideshow_timer == 'suspended'
|| this.suspendSlideshowTimer()
})
.on('close', function(){
// reset the timer if it was not suspended outside...
this.__slideshouw_timer == 'suspended'
this.__slideshow_timer == 'suspended'
|| that.resetSlideshowTimer()
if(parent){
@ -224,15 +224,48 @@ var SlideshowActions = actions.Actions({
// NOTE: these can be used as pause and resume...
resetSlideshowTimer: ['- Slideshow/Reset slideshow timer',
function(){
this.__slideshouw_timer && this.toggleSlideshow('on')
this.__slideshow_timer && this.toggleSlideshow('on')
}],
suspendSlideshowTimer: ['- Slideshow/Suspend slideshow timer',
function(){
if(this.__slideshouw_timer){
clearInterval(this.__slideshouw_timer)
this.__slideshouw_timer = 'suspended'
if(this.__slideshow_timer){
clearInterval(this.__slideshow_timer)
this.__slideshow_timer = 'suspended'
}
}],
toggleSlideshowTimer:['Slideshow/Pause or resume running slideshow',
core.doc`
NOTE: this will have no effect if the slideshow is not running...
`,
{browseMode: function(){ return this.toggleSlideshow('?') == 'off' && 'disabled' }},
toggler.Toggler(null,
function(_, state){
if(state == null){
return this.__slideshow_timer == 'suspended' ? 'paused'
: !!this.__slideshow_timer ? 'running'
: 'off'
}
if(this.toggleSlideshow('?') != 'on'){
return
}
// handle state changing...
if(state == 'paused' || state == 'off'){
this.suspendSlideshowTimer()
return 'paused'
} else {
this.resetSlideshowTimer()
return 'running'
}
},
// XXX should we return different sets of states when
// slideshow is running and when not?
// ...the problem is what to return when slideshow is
// not running???
['paused', 'running', 'off'])],
resetSlideshowWorkspace: ['Slideshow/Reset workspace',
function(){ delete this.workspaces['slideshow'] }],

View File

@ -145,7 +145,7 @@
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
"dev": true,
"requires": {
"brace-expansion": "1.1.8"
@ -200,7 +200,7 @@
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
"dev": true,
"requires": {
"brace-expansion": "1.1.8"
@ -2377,7 +2377,7 @@
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
"dev": true,
"requires": {
"brace-expansion": "1.1.8"
@ -2548,6 +2548,13 @@
"resolved": "https://registry.npmjs.org/ig-object/-/ig-object-1.0.2.tgz",
"integrity": "sha512-odO47fivzFu9cwJIDEm4dH2KTC9YiBKIl+iQWht5IkOFw5bqO+q0kFO9lFBGYUGSraJFV4RCxV+vnWGiMsX4HA=="
},
"image-size": {
"version": "0.5.5",
"resolved": "https://registry.npmjs.org/image-size/-/image-size-0.5.5.tgz",
"integrity": "sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=",
"dev": true,
"optional": true
},
"indexof": {
"version": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
"integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=",
@ -2847,6 +2854,219 @@
"invert-kv": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz"
}
},
"less": {
"version": "2.7.3",
"resolved": "https://registry.npmjs.org/less/-/less-2.7.3.tgz",
"integrity": "sha512-KPdIJKWcEAb02TuJtaLrhue0krtRLoRoo7x6BNJIBelO00t/CCdJQUnHW5V34OnHMWzIktSalJxRO+FvytQlCQ==",
"dev": true,
"requires": {
"errno": "https://registry.npmjs.org/errno/-/errno-0.1.4.tgz",
"graceful-fs": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.11.tgz",
"image-size": "0.5.5",
"mime": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz",
"mkdirp": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
"promise": "https://registry.npmjs.org/promise/-/promise-7.1.1.tgz",
"request": "2.81.0",
"source-map": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz"
},
"dependencies": {
"assert-plus": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz",
"integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=",
"dev": true,
"optional": true
},
"aws-sign2": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz",
"integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=",
"dev": true,
"optional": true
},
"boom": {
"version": "2.10.1",
"resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz",
"integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=",
"dev": true,
"requires": {
"hoek": "2.16.3"
}
},
"combined-stream": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.5.tgz",
"integrity": "sha1-k4NwpXtKUd6ix3wV1cX9+JUWQAk=",
"dev": true,
"requires": {
"delayed-stream": "1.0.0"
}
},
"cryptiles": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz",
"integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.10.1"
}
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
"integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=",
"dev": true
},
"forever-agent": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz",
"integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=",
"dev": true,
"optional": true
},
"form-data": {
"version": "2.1.4",
"resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz",
"integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=",
"dev": true,
"optional": true,
"requires": {
"asynckit": "0.4.0",
"combined-stream": "1.0.5",
"mime-types": "2.1.17"
}
},
"har-schema": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz",
"integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=",
"dev": true,
"optional": true
},
"har-validator": {
"version": "4.2.1",
"resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz",
"integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=",
"dev": true,
"optional": true,
"requires": {
"ajv": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz",
"har-schema": "1.0.5"
}
},
"hawk": {
"version": "3.1.3",
"resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz",
"integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=",
"dev": true,
"optional": true,
"requires": {
"boom": "2.10.1",
"cryptiles": "2.0.5",
"hoek": "2.16.3",
"sntp": "1.0.9"
}
},
"hoek": {
"version": "2.16.3",
"resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz",
"integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=",
"dev": true
},
"http-signature": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz",
"integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=",
"dev": true,
"optional": true,
"requires": {
"assert-plus": "0.2.0",
"jsprim": "1.4.1",
"sshpk": "1.13.1"
}
},
"oauth-sign": {
"version": "0.8.2",
"resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz",
"integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=",
"dev": true,
"optional": true
},
"performance-now": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz",
"integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=",
"dev": true,
"optional": true
},
"qs": {
"version": "6.4.0",
"resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz",
"integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=",
"dev": true,
"optional": true
},
"request": {
"version": "2.81.0",
"resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz",
"integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=",
"dev": true,
"optional": true,
"requires": {
"aws-sign2": "0.6.0",
"aws4": "1.6.0",
"caseless": "0.12.0",
"combined-stream": "1.0.5",
"extend": "3.0.1",
"forever-agent": "0.6.1",
"form-data": "2.1.4",
"har-validator": "4.2.1",
"hawk": "3.1.3",
"http-signature": "1.1.1",
"is-typedarray": "1.0.0",
"isstream": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz",
"json-stringify-safe": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
"mime-types": "2.1.17",
"oauth-sign": "0.8.2",
"performance-now": "0.2.0",
"qs": "6.4.0",
"safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz",
"stringstream": "0.0.5",
"tough-cookie": "2.3.3",
"tunnel-agent": "0.6.0",
"uuid": "3.1.0"
}
},
"sntp": {
"version": "1.0.9",
"resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz",
"integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=",
"dev": true,
"optional": true,
"requires": {
"hoek": "2.16.3"
}
},
"tunnel-agent": {
"version": "0.6.0",
"resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
"integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=",
"dev": true,
"optional": true,
"requires": {
"safe-buffer": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.0.1.tgz"
}
},
"uuid": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/uuid/-/uuid-3.1.0.tgz",
"integrity": "sha512-DIWtzUkw04M4k3bf1IcpS2tngXEL26YUD2M0tMDUpnUrz2hgzUBlD55a4FjdLGPvfHxS6uluGWvaVEqgBcVa+g==",
"dev": true,
"optional": true
}
}
},
"load-json-file": {
"version": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=",
@ -6096,7 +6316,7 @@
"minimatch": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz",
"integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==",
"integrity": "sha1-UWbihkV/AzBgZL5Ul+jbsMPTIIM=",
"dev": true,
"requires": {
"brace-expansion": "1.1.8"