initial
This commit is contained in:
@@ -0,0 +1,122 @@
|
||||
/**
|
||||
* @class elFinder.history
|
||||
* Store visited folders
|
||||
* and provide "back" and "forward" methods
|
||||
*
|
||||
* @author Dmitry (dio) Levashov
|
||||
*/
|
||||
elFinder.prototype.history = function(fm) {
|
||||
"use strict";
|
||||
var self = this,
|
||||
/**
|
||||
* Update history on "open" event?
|
||||
*
|
||||
* @type Boolean
|
||||
*/
|
||||
update = true,
|
||||
/**
|
||||
* Directories hashes storage
|
||||
*
|
||||
* @type Array
|
||||
*/
|
||||
history = [],
|
||||
/**
|
||||
* Current directory index in history
|
||||
*
|
||||
* @type Number
|
||||
*/
|
||||
current,
|
||||
/**
|
||||
* Clear history
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
reset = function() {
|
||||
history = [fm.cwd().hash];
|
||||
current = 0;
|
||||
update = true;
|
||||
},
|
||||
/**
|
||||
* Browser native history object
|
||||
*/
|
||||
nativeHistory = (fm.options.useBrowserHistory && window.history && window.history.pushState)? window.history : null,
|
||||
/**
|
||||
* Open prev/next folder
|
||||
*
|
||||
* @Boolen open next folder?
|
||||
* @return jQuery.Deferred
|
||||
*/
|
||||
go = function(fwd) {
|
||||
if ((fwd && self.canForward()) || (!fwd && self.canBack())) {
|
||||
update = false;
|
||||
return fm.exec('open', history[fwd ? ++current : --current]).fail(reset);
|
||||
}
|
||||
return $.Deferred().reject();
|
||||
},
|
||||
/**
|
||||
* Sets the native history.
|
||||
*
|
||||
* @param String thash target hash
|
||||
*/
|
||||
setNativeHistory = function(thash) {
|
||||
if (nativeHistory && (! nativeHistory.state || nativeHistory.state.thash !== thash)) {
|
||||
nativeHistory.pushState({thash: thash}, null, location.pathname + location.search + (thash? '#elf_' + thash : ''));
|
||||
}
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if there is previous visited directories
|
||||
*
|
||||
* @return Boolen
|
||||
*/
|
||||
this.canBack = function() {
|
||||
return current > 0;
|
||||
};
|
||||
|
||||
/**
|
||||
* Return true if can go forward
|
||||
*
|
||||
* @return Boolen
|
||||
*/
|
||||
this.canForward = function() {
|
||||
return current < history.length - 1;
|
||||
};
|
||||
|
||||
/**
|
||||
* Go back
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
this.back = go;
|
||||
|
||||
/**
|
||||
* Go forward
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
this.forward = function() {
|
||||
return go(true);
|
||||
};
|
||||
|
||||
// bind to elfinder events
|
||||
fm.bind('init', function() {
|
||||
if (nativeHistory && !nativeHistory.state) {
|
||||
setNativeHistory(fm.startDir());
|
||||
}
|
||||
})
|
||||
.open(function() {
|
||||
var l = history.length,
|
||||
cwd = fm.cwd().hash;
|
||||
|
||||
if (update) {
|
||||
current >= 0 && l > current + 1 && history.splice(current+1);
|
||||
history[history.length-1] != cwd && history.push(cwd);
|
||||
current = history.length - 1;
|
||||
}
|
||||
update = true;
|
||||
|
||||
setNativeHistory(cwd);
|
||||
})
|
||||
.reload(fm.options.reloadClearHistory && reset);
|
||||
|
||||
};
|
||||
Reference in New Issue
Block a user