drawio/war/js/diagramly/GitHubFile.js
Gaudenz Alder ab43eee501 6.3.0 release
Former-commit-id: 4ba5d56940
2017-03-11 15:01:55 +01:00

243 lines
5.2 KiB
JavaScript

/**
* Copyright (c) 2006-2017, JGraph Ltd
* Copyright (c) 2006-2017, Gaudenz Alder
*/
GitHubFile = function(ui, data, meta)
{
DrawioFile.call(this, ui, data);
this.meta = meta;
};
//Extends mxEventSource
mxUtils.extend(GitHubFile, DrawioFile);
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.prototype.getHash = function()
{
return encodeURIComponent('H' + encodeURIComponent(this.meta.org) + '/' +
((this.meta.repo != null) ?
encodeURIComponent(this.meta.repo) + '/' +
((this.meta.ref != null) ?
this.meta.ref + ((this.meta.path != null) ?
'/' + this.meta.path : '') : '') : ''));
};
/**
* Returns true if copy, export and print are not allowed for this file.
*/
GitHubFile.prototype.getPublicUrl = function(fn)
{
// LATER: Check if download_url is always null for private repos
if (this.meta.download_url != null)
{
mxUtils.get(this.meta.download_url, mxUtils.bind(this, function(req)
{
fn((req.getStatus() >= 200 && req.getStatus() <= 299) ? this.meta.download_url : null);
}), mxUtils.bind(this, function()
{
fn(null);
}));
}
else
{
fn(null);
}
};
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.prototype.getMode = function()
{
return App.MODE_GITHUB;
};
/**
* Overridden to enable the autosave option in the document properties dialog.
*/
GitHubFile.prototype.isAutosave = function()
{
return false;
};
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.prototype.getTitle = function()
{
return this.meta.name;
};
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.prototype.isRenamable = function()
{
return false;
};
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.prototype.save = function(revision, success, error)
{
this.doSave(this.getTitle(), success, error);
};
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.prototype.saveAs = function(title, success, error)
{
this.doSave(title, success, error);
};
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.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, arguments);
this.meta.name = prev;
this.saveFile(title, false, success, error);
};
/**
* Translates this point by the given vector.
*
* @param {number} dx X-coordinate of the translation.
* @param {number} dy Y-coordinate of the translation.
*/
GitHubFile.prototype.saveFile = function(title, revision, success, error)
{
if (!this.isEditable())
{
if (success != null)
{
success();
}
}
else if (!this.savingFile)
{
this.savingFile = true;
if (this.getTitle() == title)
{
// Makes sure no changes get lost while the file is saved
var prevModified = this.isModified;
var modified = this.isModified();
var prepare = mxUtils.bind(this, function()
{
this.setModified(false);
this.isModified = function()
{
return modified;
};
});
prepare();
this.ui.gitHub.saveFile(this, mxUtils.bind(this, function(commit)
{
this.savingFile = false;
this.isModified = prevModified;
this.meta.sha = commit.content.sha;
this.meta.html_url = commit.content.html_url;
this.meta.download_url = commit.content.download_url;
this.contentChanged();
if (success != null)
{
success();
}
}),
mxUtils.bind(this, function(err)
{
this.savingFile = false;
this.isModified = prevModified;
this.setModified(modified || this.isModified());
if (this.isModified())
{
this.addUnsavedStatus();
}
if (error != null)
{
// Handles modified state for retries
if (err != null && err.retry != null)
{
var retry = err.retry;
err.retry = function()
{
prepare();
retry();
};
}
error(err);
}
}));
}
else
{
this.ui.pickFolder(App.MODE_GITHUB, mxUtils.bind(this, function(folderId)
{
this.ui.gitHub.insertFile(title, this.getData(), mxUtils.bind(this, function(file)
{
this.savingFile = false;
if (success != null)
{
success();
}
this.ui.fileLoaded(file);
}), mxUtils.bind(this, function()
{
this.savingFile = false;
if (error != null)
{
error();
}
}), false, folderId);
}));
}
}
else if (error != null)
{
error({code: App.ERROR_BUSY});
}
};