drawio-offline
Version:
diagrams.net desktop
185 lines (162 loc) • 3.19 kB
JavaScript
/**
* Copyright (c) 2006-2017, JGraph Ltd
* Copyright (c) 2006-2017, Gaudenz Alder
*/
TrelloFile = function(ui, data, meta)
{
DrawioFile.call(this, ui, data);
this.meta = meta;
this.saveNeededCounter = 0;
};
//Extends mxEventSource
mxUtils.extend(TrelloFile, DrawioFile);
/**
*
*/
TrelloFile.prototype.getHash = function()
{
return 'T' + encodeURIComponent(this.meta.compoundId);
};
/**
*
*/
TrelloFile.prototype.getMode = function()
{
return App.MODE_TRELLO;
};
/**
* Overridden to enable the autosave option in the document properties dialog.
*/
TrelloFile.prototype.isAutosave = function()
{
return true;
};
/**
*
*/
TrelloFile.prototype.getTitle = function()
{
return this.meta.name;
};
/**
*
*/
TrelloFile.prototype.isRenamable = function()
{
return false;
};
/**
* Specifies if notify events should be ignored.
*/
TrelloFile.prototype.getSize = function()
{
return this.meta.bytes;
};
/**
*
*/
TrelloFile.prototype.save = function(revision, success, error)
{
this.doSave(this.getTitle(), success, error);
};
/**
*
*/
TrelloFile.prototype.saveAs = function(title, success, error)
{
this.doSave(title, success, error);
};
/**
*
*/
TrelloFile.prototype.doSave = function(title, success, error)
{
// Forces update of data for new extensions
var prev = this.meta.name;
this.meta.name = title;
DrawioFile.prototype.save.apply(this, [null, mxUtils.bind(this, function()
{
this.meta.name = prev;
this.saveFile(title, false, success, error);
}), error]);
};
/**
*
*/
TrelloFile.prototype.saveFile = function(title, revision, success, error)
{
if (!this.isEditable())
{
if (success != null)
{
success();
}
}
else if (!this.savingFile)
{
// Sets shadow modified state during save
this.savingFileTime = new Date();
this.setShadowModified(false);
this.savingFile = true;
if (this.getTitle() == title)
{
this.ui.trello.saveFile(this, mxUtils.bind(this, function(meta)
{
// Checks for changes during save
this.setModified(this.getShadowModified());
this.savingFile = false;
this.meta = meta;
this.contentChanged();
if (success != null)
{
success();
}
if (this.saveNeededCounter > 0)
{
this.saveNeededCounter--;
this.saveFile(title, revision, success, error);
}
}),
mxUtils.bind(this, function(err)
{
this.savingFile = false;
if (error != null)
{
error(err);
}
}));
}
else
{
this.ui.pickFolder(App.MODE_TRELLO, mxUtils.bind(this, function(cardId)
{
this.ui.trello.insertFile(title, this.getData(), mxUtils.bind(this, function(file)
{
this.savingFile = false;
if (success != null)
{
success();
}
this.ui.fileLoaded(file);
if (this.saveNeededCounter > 0)
{
this.saveNeededCounter--;
this.saveFile(title, revision, success, error);
}
}), mxUtils.bind(this, function()
{
this.savingFile = false;
if (error != null)
{
error();
}
}), false, cardId);
}));
}
}
else if (error != null)
{
this.saveNeededCounter++;
error({code: App.ERROR_BUSY});
}
};