ImageGrid/ui/urlhistory.js

199 lines
4.7 KiB
JavaScript
Raw Normal View History

/**********************************************************************
*
*
*
**********************************************************************/
//var DEBUG = DEBUG != null ? DEBUG : true
/*********************************************************************/
var BASE_URL_HISTORY = []
var BASE_URL_LIMIT = 10
/**********************************************************************
* URL history...
*/
// XXX this depends on fs.existsSync(...)
function pruneBaseURLHistory(){
if(window.fs == null){
return BASE_URL_HISTORY
}
BASE_URL_HISTORY = BASE_URL_HISTORY.filter(function(e){
return fs.existsSync(osPath(e))
})
return BASE_URL_HISTORY
}
// Setup history event handlers...
//
// NOTE: this will save history state to localStorage...
function setupBaseURLHistory(){
$('.viewer')
.on('baseURLChanged', function(evt, old_url, new_url){
var updated = false
pruneBaseURLHistory()
// store the old and new urls in history unless they already
// exist...
if(BASE_URL_HISTORY.indexOf(old_url) < 0){
BASE_URL_HISTORY.splice(0, 0, old_url)
updated = true
}
if(BASE_URL_HISTORY.indexOf(new_url) < 0){
BASE_URL_HISTORY.splice(0, 0, new_url)
updated = true
}
// truncate the history if needed...
if(BASE_URL_HISTORY.length > BASE_URL_LIMIT){
BASE_URL_HISTORY.splice(BASE_URL_LIMIT, BASE_URL_HISTORY.length)
updated = true
}
// XXX is this the right place for this???
if(updated){
saveLocalStorageBaseURLHistory()
}
})
}
// Push a url to top of history...
//
// NOTE: this does not care if a url exists or not, all other instances
// will get removed...
// NOTE: this will not do any loading...
// NOTE: this will save history state to localStorage...
function pushURLHistory(url){
url = url == null ? BASE_URL : url
while(BASE_URL_HISTORY.indexOf(url) >= 0){
BASE_URL_HISTORY.splice(BASE_URL_HISTORY.indexOf(url), 1)
}
BASE_URL_HISTORY.splice(0, 0, url)
// XXX is this the right place for this???
saveLocalStorageBaseURLHistory()
return url
}
// Get current position in history...
//
function getURLHistoryPosition(){
return BASE_URL_HISTORY.indexOf(BASE_URL)
}
// Get next/prev relative position in history...
//
function getURLHistoryNext(){
var res = BASE_URL_HISTORY[ getURLHistoryPosition() - 1]
return res == null ? BASE_URL : res
}
function getURLHistoryPrev(){
var res = BASE_URL_HISTORY[ getURLHistoryPosition() + 1 ]
return res == null ? BASE_URL : res
}
/**********************************************************************
* Actions...
*/
// Make a history load action...
//
// NOTE: this will not affect history url order...
function makeURLHistoryLoader(get, end_msg){
return function(){
pruneBaseURLHistory()
var url = get()
if(url != BASE_URL){
statusNotify(loadDir(url))
} else {
showStatusQ('History: '+ end_msg +'...')
}
return url
}
}
var loadURLHistoryNext = makeURLHistoryLoader(getURLHistoryNext, 'at last URL')
var loadURLHistoryPrev = makeURLHistoryLoader(getURLHistoryPrev, 'at first URL')
// NOTE: this can accept either path or history index...
// NOTE: this will not reload an already loaded url...
function loadURLHistoryAt(a){
pruneBaseURLHistory()
a = a < 0 ? BASE_URL_HISTORY.length + a : a
var url = typeof(a) == typeof(123) ? Math.min(a < 0 ? 0 : a, BASE_URL_HISTORY.length-1) : a
if(url != BASE_URL){
statusNotify(loadDir(url))
}
return url
}
/**********************************************************************
* Dialogs...
*/
function recentlyOpenedDialog(){
updateStatus('Recently opened...').show()
var dict = {}
var title = '<b>Recently opened:</b> | '+
'Shortcuts ctrl-shift-Left and ctrl-shift-Right can be used\n'+
'to move through this list from ribbon view.'
var cfg = {}
cfg[title] = BASE_URL_HISTORY.map(function(e){
// cleanup the urls...
var ee = e.replace('file:///', '')
// mark the current path...
if(e == BASE_URL){
ee = ee.italics()
dict[ee] = e
return ee + ' | default | Currently loaded data.'
}
dict[ee] = e
return ee
})
formDialog(null, '',
cfg,
'OK',
'recentlyOpenedDialog')
.done(function(res){
res = dict[res[title]]
loadURLHistoryAt(res)
if(res == BASE_URL){
showStatusQ('Already at: '+res+'...')
} else {
showStatusQ('Opening: '+res+'...')
}
})
.fail(function(){
showStatusQ('Keeping current...')
})
}
/**********************************************************************
* vim:set ts=4 sw=4 : */