Skip to content

Instantly share code, notes, and snippets.

@sooop
Created March 6, 2013 09:49
Show Gist options
  • Save sooop/5098150 to your computer and use it in GitHub Desktop.
Save sooop/5098150 to your computer and use it in GitHub Desktop.
function FileManager()
{
var _self = this;
this.$defaultFilename = "default-ace-file";
this.files = {};
this.currentFile = null;
this.new = _newFile;
this.save = _saveSessions;
this.load = _loadFile;
this.roll = _loadFiles;
this.setFile = _setCurrentFile;
this.getFiles = _getFiles;
this.delete = _deleteFile;
this.rename = _renameFile;
// functions for file save, load...
function _loadFiles()
{
if(_chkStorage())
{
var estr = localStorage.getItem(_self.$defaultFilename);
if(estr === null) {
_initFiles();
_loadFileStorageEvent.detail.msg = "Files Load";
_loadFileStorageEvent.detail.userObj = _getFiles();
document.dispatchEvent(_loadFileStorageEvent);
return false;}
else{
_self.files = JSON.parse(estr);
// _self.currentFile = _self.files[_self.$defaultFilename];
_setCurrentFile(_self.files[_self.$defaultFilename]);
_loadFileStorageEvent.detail.msg = "Files Load";
_loadFileStorageEvent.detail.userObj = _getFiles();
document.dispatchEvent(_loadFileStorageEvent);
return true;
}
}
return false;
}
function _initFiles()
{
var defaultFile = _self.files[_self.$defaultFilename] ={};
defaultFile.filename = _self.$defaultFilename;
defaultFile.theme = 0;
defaultFile.mode = 'javascipt';
defaultFile.contents = "//Start coding...\n";
// _self.$defaultFile = defaultFile;
_setCurrentFile(defaultFile);
}
function _newFile()
{
var now = new Date();
var newFilename = prompt('Enter new FileName', String(now.getTime()));
var nameDuplicateCheck = _getFiles().indexOf(newFilename);
if(nameDuplicateCheck < 0)
{
// new file
_self.files[newFilename] = {};
var newFile = _self.files[newFilename];
newFile.filename = newFilename;
newFile.theme = 0;
newFile.mode = 'javascript';
newFile.contents = '//Start coding...\n';
_saveSessions();
_setCurrentFile(newFile);
_newFileEvent.detail.fileObj = newFile;
document.dispatchEvent(_newFileEvent);
}
}
function _loadFile(filename)
{
var files = _self.files;
if(files.hasOwnProperty(filename))
{
_saveSessions();
_setCurrentFile(files[filename]);
}
}
function _deleteFile(filename)
{
var f = filename || _self.currentFile.filename;
if(_self.files.hasOwnProperty(f))
{
if(f === _self.$defaultFilename) {
alert('Can\'t Delete Default File.');
return false;
}
var s = confirm('Delete this file?');
if(s)
{
var delFile = _self.files[f];
_self.files[f] = null;
_updateFiles();
_setCurrentFile(_self.files[_self.$defaultFilename]);
_saveSessions();
_deleteFileEvent.detail.fileObj = delFile;
document.dispatchEvent(_deleteFileEvent);
return true;
}
return false;
}
return false
}
function _renameFile(filename)
{
var f = filename || _self.currentFile.filename;
if(!_self.files.hasOwnProperty(f)){return false;}
var n = prompt('Enter new Name', f);
if(f === n) {return false;}
else {
var newFile = _self.files[n] = {};
var oldFile = _self.files[f];
for(i in oldFile) {newFile[i] = oldFile[i]; }
newFile.filename = n;
_self.files[oldFile.filename] = null;
_updateFiles();
if(!filename){_setCurrentFile(newFile);}
return true;
}
}
function _saveSessions()
{
var files = _self.files;
files[_self.currentFile.filename] = _self.currentFile;
var estr = JSON.stringify(_self.files);
if(_chkStorage())
{
localStorage.setItem(_self.$defaultFilename, estr);
_saveFileEvent.detail.time = new Date();
document.dispatchEvent(_saveFileEvent);
return true;
}
return false;
}
function _setCurrentFile(fileObj)
{
var aFile = fileObj || _self.files[_self.$defaultFilename];
var oldFile = _self.currentFile;
_self.currentFile = aFile;
_changeFileEvent.detail.newFileObj = aFile;
_changeFileEvent.detail.oldFileObj = oldFile;
document.dispatchEvent(_changeFileEvent);
}
function _getFiles()
{
var a = new Array();
for(i in _self.files) {a.push(i); }
return a;
}
function _updateFiles()
{
var newFiles = {};
for(i in _self.files)
{
if(_self.files[i] != null){newFiles[i] = _self.files[i];}
}
_self.files = newFiles;
}
function _chkStorage()
{
if(window.localStorage){return true;}
return false;
}
// class custom event
var _loadFileStorageEvent = new CustomEvent('loadFromStorage', {bubbles:true, cancelBubble:true, detail:{msg:"", userObj:null}});
var _loadFileEvent = new CustomEvent('loadFile', {bubbles:true, cancelBubble:true, detail:{msg:"", fileObj:null}});
var _changeFileEvent = new CustomEvent('changeFile', {bubbles:true, cancelBubble:true, detail:{msg:"", newFileObj:null, oldFileObj:null}});
var _saveFileEvent = new CustomEvent('saveFile', {bubbles:true, cancelBubble:true, detail:{msg:"", time:null}});
var _newFileEvent = new CustomEvent('newFile', {bubbles:true, cancelBubble:true, detail:{msg:"", fileObj:null}});
var _deleteFileEvent = new CustomEvent('deleteFile', {bubbles:true, cancelBubble:true, detail:{msg:"", fileObj:null}});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment