mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-03 04:40:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			258 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			258 lines
		
	
	
		
			6.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
/**********************************************************************
 | 
						|
* 
 | 
						|
*
 | 
						|
*
 | 
						|
**********************************************************************/
 | 
						|
 | 
						|
//var DEBUG = DEBUG != null ? DEBUG : true
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************/
 | 
						|
 | 
						|
var BASE_URL_HISTORY = []
 | 
						|
var BASE_URL_HISTORY_LIMIT = 50
 | 
						|
var BASE_URL_HISTORY_DIALOG_LIMIT = 20
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**********************************************************************
 | 
						|
* 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
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
function getNonExistingBaseURLs(){
 | 
						|
	if(window.fs == null){
 | 
						|
		return BASE_URL_HISTORY
 | 
						|
	}
 | 
						|
	return BASE_URL_HISTORY.filter(function(e){
 | 
						|
		return !fs.existsSync(osPath(e))
 | 
						|
	})
 | 
						|
}
 | 
						|
 | 
						|
 | 
						|
// 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_HISTORY_LIMIT){
 | 
						|
				BASE_URL_HISTORY.splice(BASE_URL_HISTORY_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 
 | 
						|
// 		of the same 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...
 | 
						|
//
 | 
						|
// NOTE: these will skip non-existing urls...
 | 
						|
function getURLHistoryNext(){
 | 
						|
	var non_existing = getNonExistingBaseURLs()
 | 
						|
	var i = getURLHistoryPosition() + 1 
 | 
						|
	var res = BASE_URL_HISTORY[i]
 | 
						|
	while(non_existing.indexOf(res) >= 0){
 | 
						|
		i += 1
 | 
						|
		var res = BASE_URL_HISTORY[i]
 | 
						|
	}
 | 
						|
	return res == null ? BASE_URL : res
 | 
						|
}
 | 
						|
function getURLHistoryPrev(){
 | 
						|
	var non_existing = getNonExistingBaseURLs()
 | 
						|
	var i = getURLHistoryPosition() - 1 
 | 
						|
	var res = BASE_URL_HISTORY[i]
 | 
						|
	while(non_existing.indexOf(res) >= 0){
 | 
						|
		i -= 1
 | 
						|
		var res = BASE_URL_HISTORY[i]
 | 
						|
	}
 | 
						|
	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(){
 | 
						|
		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...
 | 
						|
//
 | 
						|
// XXX need to somehow skip unavailable urls...
 | 
						|
function loadURLHistoryAt(a){
 | 
						|
	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 not_available = getNonExistingBaseURLs()
 | 
						|
 | 
						|
	var cfg = {}
 | 
						|
	var c = 0
 | 
						|
	cfg[title] = $.map(BASE_URL_HISTORY, function(e){
 | 
						|
		c += 1
 | 
						|
		if(c > BASE_URL_HISTORY_DIALOG_LIMIT){
 | 
						|
			return
 | 
						|
		}
 | 
						|
		// cleanup the urls...
 | 
						|
		var ee = e.replace('file:///', '')
 | 
						|
		var disabled = not_available.indexOf(e) >= 0
 | 
						|
 | 
						|
		// mark disabled...
 | 
						|
		if(disabled){
 | 
						|
			ee = '<span class="disabled-text">'+ee+'</span>'
 | 
						|
			if(e == BASE_URL){
 | 
						|
				dict[ee] = e
 | 
						|
				return ee + ' | disabled | Currently loaded, path not available.'
 | 
						|
 | 
						|
			} else {
 | 
						|
				dict[ee] = e
 | 
						|
				return ee + ' | disabled | Not available.'
 | 
						|
			}
 | 
						|
 | 
						|
		// mark the current path...
 | 
						|
		} else if(e == BASE_URL){
 | 
						|
			ee = ee.italics()
 | 
						|
			dict[ee] = e
 | 
						|
			return ee + ' | default | Currently loaded data.'
 | 
						|
		}
 | 
						|
 | 
						|
		dict[ee] = e
 | 
						|
		return ee
 | 
						|
	})
 | 
						|
 | 
						|
	if(not_available.length > 0){
 | 
						|
		cfg['spacer'] = '---'
 | 
						|
		cfg[''] = {
 | 
						|
			text: 'Clear unavailable paths',
 | 
						|
			button: function(){
 | 
						|
				pruneBaseURLHistory()
 | 
						|
				saveLocalStorageBaseURLHistory()
 | 
						|
				$('.recentlyOpenedDialog')
 | 
						|
					.find('.item.disabled')
 | 
						|
						.remove()
 | 
						|
			},
 | 
						|
		}
 | 
						|
	}
 | 
						|
 | 
						|
	var dialog = 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 :                                                */
 |