f77e6d93ac
Former-commit-id: 42bd774df3
366 lines
7.8 KiB
JavaScript
366 lines
7.8 KiB
JavaScript
/**
|
|
* Copyright (c) 2006-2017, JGraph Ltd
|
|
* Copyright (c) 2006-2017, Gaudenz Alder
|
|
*/
|
|
DriveFile = function(ui, data, desc, doc)
|
|
{
|
|
DrawioFile.call(this, ui, data);
|
|
|
|
this.desc = desc;
|
|
|
|
if (doc != null && doc.getModel() != null && doc.getModel().getRoot() != null)
|
|
{
|
|
this.realtime = new DriveRealtime(this, doc);
|
|
}
|
|
};
|
|
|
|
//Extends mxEventSource
|
|
mxUtils.extend(DriveFile, DrawioFile);
|
|
|
|
/**
|
|
* Returns true if copy, export and print are not allowed for this file.
|
|
*/
|
|
DriveFile.prototype.isRestricted = function()
|
|
{
|
|
return this.desc.userPermission != null && this.desc.labels != null &&
|
|
this.desc.userPermission.role == 'reader' && this.desc.labels.restricted;
|
|
};
|
|
|
|
/**
|
|
* Delay for last save in ms.
|
|
*/
|
|
DriveFile.prototype.saveDelay = 0;
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.getMode = function()
|
|
{
|
|
return App.MODE_GOOGLE;
|
|
};
|
|
|
|
/**
|
|
* Returns true if copy, export and print are not allowed for this file.
|
|
*/
|
|
DriveFile.prototype.getPublicUrl = function(fn)
|
|
{
|
|
gapi.client.drive.permissions.list(
|
|
{
|
|
'fileId': this.desc.id
|
|
}).execute(mxUtils.bind(this, function(resp)
|
|
{
|
|
if (resp != null)
|
|
{
|
|
for (var i = 0; i < resp.items.length; i++)
|
|
{
|
|
if (resp.items[i].id === 'anyoneWithLink' ||
|
|
resp.items[i].id === 'anyone')
|
|
{
|
|
fn(this.desc.webContentLink);
|
|
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
fn(null);
|
|
}));
|
|
};
|
|
|
|
/**
|
|
* Overridden to enable the autosave option in the document properties dialog
|
|
* if realtime is not used.
|
|
*/
|
|
DriveFile.prototype.isAutosaveOptional = function()
|
|
{
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.isAutosave = function()
|
|
{
|
|
return this.ui.editor.autosave || this.isAutosaveRevision();
|
|
};
|
|
|
|
/**
|
|
* Returns true if an autosave is required at the time of execution.
|
|
* This implementation returns true.
|
|
*/
|
|
DriveFile.prototype.isAutosaveNow = function()
|
|
{
|
|
if (this.realtime != null && this.realtime.root != null)
|
|
{
|
|
var backup = parseInt(this.realtime.root.get('backupDate'));
|
|
var modified = parseInt(this.realtime.root.get('modifiedDate'));
|
|
|
|
return isNaN(backup) || isNaN(modified) || backup < modified;
|
|
}
|
|
|
|
return true;
|
|
};
|
|
|
|
/**
|
|
* Hooks for subclassers after the autosave has completed.
|
|
*/
|
|
DriveFile.prototype.autosaveCompleted = function()
|
|
{
|
|
if (this.realtime != null && this.realtime.root != null)
|
|
{
|
|
this.realtime.root.set('backupDate', new Date().getTime());
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.isRenamable = function()
|
|
{
|
|
return this.isEditable() && DrawioFile.prototype.isEditable.apply(this, arguments);
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.isMovable = function()
|
|
{
|
|
return this.isEditable();
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.save = function(revision, success, error, unloading)
|
|
{
|
|
DrawioFile.prototype.save.apply(this, arguments);
|
|
|
|
this.saveFile(null, revision, success, error, unloading);
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.saveFile = function(title, revision, success, error, unloading)
|
|
{
|
|
if (!this.isEditable())
|
|
{
|
|
if (success != null)
|
|
{
|
|
success();
|
|
}
|
|
}
|
|
else if (!this.savingFile)
|
|
{
|
|
this.savingFile = true;
|
|
|
|
// Makes sure no changes get lost while the file is saved
|
|
var prevModified = this.isModified;
|
|
var modified = this.isModified();
|
|
this.setModified(false);
|
|
|
|
this.ui.drive.saveFile(this, revision, mxUtils.bind(this, function(resp)
|
|
{
|
|
this.savingFile = false;
|
|
this.isModified = prevModified;
|
|
|
|
// Handles special case where resp is false eg
|
|
// if the old file was converted to realtime
|
|
if (resp != false)
|
|
{
|
|
if (revision)
|
|
{
|
|
this.lastAutosaveRevision = new Date().getTime();
|
|
}
|
|
|
|
this.desc = resp;
|
|
this.contentChanged();
|
|
|
|
if (success != null)
|
|
{
|
|
success(resp);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
this.setModified(modified || this.isModified());
|
|
|
|
if (error != null)
|
|
{
|
|
error();
|
|
}
|
|
}
|
|
}), mxUtils.bind(this, function(resp)
|
|
{
|
|
this.savingFile = false;
|
|
this.isModified = prevModified;
|
|
this.setModified(modified || this.isModified());
|
|
|
|
if (error != null)
|
|
{
|
|
error(resp);
|
|
}
|
|
}), unloading, unloading);
|
|
}
|
|
};
|
|
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.saveAs = function(filename, success, error)
|
|
{
|
|
this.ui.drive.copyFile(this.getId(), filename, 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.
|
|
*/
|
|
DriveFile.prototype.rename = function(title, success, error)
|
|
{
|
|
this.ui.drive.renameFile(this.getId(), title, mxUtils.bind(this, function(resp)
|
|
{
|
|
if (!this.hasSameExtension(title, this.getTitle()))
|
|
{
|
|
this.desc = resp;
|
|
this.save(true, success, error);
|
|
}
|
|
else
|
|
{
|
|
this.desc = resp;
|
|
this.descriptorChanged();
|
|
|
|
if (success != null)
|
|
{
|
|
success(resp);
|
|
}
|
|
}
|
|
}), error);
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.move = function(folderId, success, error)
|
|
{
|
|
this.ui.drive.moveFile(this.getId(), folderId, mxUtils.bind(this, function(resp)
|
|
{
|
|
this.desc = resp;
|
|
this.descriptorChanged();
|
|
|
|
if (success != null)
|
|
{
|
|
success(resp);
|
|
}
|
|
}), error);
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.getTitle = function()
|
|
{
|
|
return this.desc.title;
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.getHash = function()
|
|
{
|
|
return 'G' + this.getId();
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.getId = function()
|
|
{
|
|
return this.desc.id;
|
|
};
|
|
|
|
/**
|
|
* Translates this point by the given vector.
|
|
*
|
|
* @param {number} dx X-coordinate of the translation.
|
|
* @param {number} dy Y-coordinate of the translation.
|
|
*/
|
|
DriveFile.prototype.isEditable = function()
|
|
{
|
|
var editable = DrawioFile.prototype.isEditable.apply(this, arguments);
|
|
|
|
if (this.realtime != null)
|
|
{
|
|
return editable && !this.realtime.rtModel.isReadOnly;
|
|
}
|
|
else
|
|
{
|
|
return editable && this.desc.editable;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the location as a new object.
|
|
*/
|
|
DriveFile.prototype.open = function()
|
|
{
|
|
if (this.realtime != null)
|
|
{
|
|
this.realtime.start();
|
|
}
|
|
else
|
|
{
|
|
DrawioFile.prototype.open.apply(this, arguments);
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the location as a new object.
|
|
*/
|
|
DriveFile.prototype.close = function(unloading)
|
|
{
|
|
unloading = (unloading != null) ? unloading : false;
|
|
DrawioFile.prototype.close.apply(this, arguments);
|
|
|
|
if (this.realtime != null)
|
|
{
|
|
this.realtime.destroy(unloading);
|
|
this.realtime = null;
|
|
}
|
|
};
|