File upload dialog.

This commit is contained in:
Michael Jumper
2013-10-15 12:39:43 -07:00
parent 3925eedc53
commit 76049fbc38
3 changed files with 92 additions and 2 deletions

View File

@@ -1086,6 +1086,12 @@ GuacUI.Client.attach = function(guac) {
var reader = new FileReader(); var reader = new FileReader();
reader.onloadend = function() { reader.onloadend = function() {
// Add upload notification
var upload = new GuacUI.Upload(file.name);
upload.updateProgress(getSizeString(0));
GuacUI.Client.notification_area.appendChild(upload.getElement());
// Open file for writing // Open file for writing
var stream = GuacUI.Client.attachedClient.createFileStream(file.type, file.name); var stream = GuacUI.Client.attachedClient.createFileStream(file.type, file.name);
@@ -1096,6 +1102,7 @@ GuacUI.Client.attach = function(guac) {
// Invalidate stream on all errors // Invalidate stream on all errors
stream.onerror = function() { stream.onerror = function() {
valid = false; valid = false;
// TODO: Update notification with error status
}; };
// Continue upload when acknowledged // Continue upload when acknowledged
@@ -1115,8 +1122,14 @@ GuacUI.Client.attach = function(guac) {
offset += 4096; offset += 4096;
// If at end, stop upload // If at end, stop upload
if (offset >= bytes.length) if (offset >= bytes.length) {
stream.close(); stream.close();
GuacUI.Client.notification_area.removeChild(upload.getElement());
}
// Otherwise, update progress
else
upload.updateProgress(getSizeString(offset));
}; };

View File

@@ -788,6 +788,78 @@ GuacUI.Download = function(filename) {
}; };
/**
* Interface object which displays the progress of a upload.
*
* @constructor
* @param {String} filename The name the file will have once complete.
*/
GuacUI.Upload = function(filename) {
/**
* Reference to this GuacUI.Upload.
* @private
*/
var guac_upload = this;
/**
* The outer div representing the notification.
* @private
*/
var element = GuacUI.createElement("div", "upload notification");
/**
* Title bar describing the notification.
* @private
*/
var title = GuacUI.createChildElement(element, "div", "title-bar");
/**
* Close button for removing the notification.
* @private
*/
var close_button = GuacUI.createChildElement(title, "div", "close");
close_button.onclick = function() {
if (guac_upload.onclose)
guac_upload.onclose();
};
GuacUI.createChildElement(title, "div", "title").textContent =
"File Transfer";
GuacUI.createChildElement(element, "div", "caption").textContent =
filename + " ";
/**
* Progress bar and status.
* @private
*/
var progress = GuacUI.createChildElement(element, "div", "progress");
/**
* Updates the content of the progress indicator with the given text.
*
* @param {String} text The text to assign to the progress indicator.
*/
this.updateProgress = function(text) {
progress.textContent = text;
};
/**
* Returns the element representing this notification.
*/
this.getElement = function() {
return element;
};
/**
* Called when the close button of this notification is clicked.
* @event
*/
this.onclose = null;
};
/** /**
* A grouping component. Child elements can be added via the addElement() * A grouping component. Child elements can be added via the addElement()
* function. By default, groups display as collapsed. * function. By default, groups display as collapsed.

View File

@@ -361,6 +361,7 @@ p.hint {
to {background-position: 64px 0px;} to {background-position: 64px 0px;}
} }
.upload.notification .caption,
.download.notification .caption { .download.notification .caption {
width: 100%; width: 100%;
white-space: nowrap; white-space: nowrap;
@@ -369,7 +370,9 @@ p.hint {
} }
.download.notification .progress, .download.notification .progress,
.download.notification .download { .upload.notification .progress,
.download.notification .download,
.upload.notification .upload {
margin-top: 1em; margin-top: 1em;
margin-left: 0.75em; margin-left: 0.75em;
@@ -384,6 +387,7 @@ p.hint {
} }
.upload.notification .progress,
.download.notification .progress { .download.notification .progress {
background: #444 url('../images/progress.png'); background: #444 url('../images/progress.png');
@@ -404,6 +408,7 @@ p.hint {
} }
.upload.notification .upload,
.download.notification .download { .download.notification .download {
background: rgb(16, 87, 153); background: rgb(16, 87, 153);
cursor: pointer; cursor: pointer;