/********************************************************************** * * * **********************************************************************/ //var DEBUG = DEBUG != null ? DEBUG : true /*********************************************************************/ var BASE_URL_HISTORY = [] var BASE_URL_LIMIT = 10 /********************************************************************** * 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 // 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(){ 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){ a = a < 0 ? BASE_URL_HISTORY + 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 = 'Recently opened:' 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 : */