forked from Public/pics
		
	Add mockup progress bars to uploads.
This commit is contained in:
		
							parent
							
								
									c13442cac6
								
							
						
					
					
						commit
						77a9cd5d53
					
				| @ -676,10 +676,24 @@ a#previous_photo:hover, a#next_photo:hover { | ||||
| #upload_preview_area { | ||||
| 	margin: 10px 0; | ||||
| } | ||||
| #upload_preview_area img { | ||||
| #upload_preview_area > div { | ||||
| 	display: inline-block; | ||||
| 	margin: 0 5px 0 0; | ||||
| 	line-height: 0; | ||||
| 	position: relative; | ||||
| } | ||||
| #upload_preview_area .progress { | ||||
| 	position: absolute; | ||||
| 	bottom: 0; | ||||
| 	background: rgba(200, 200, 200, 0.5); | ||||
| 	height: 5px; | ||||
| 	width: 100%; | ||||
| } | ||||
| #upload_preview_area .progress > div { | ||||
| 	background: #2b2; | ||||
| 	height: 5px; | ||||
| 	width: 0%; | ||||
| } | ||||
| 
 | ||||
| 
 | ||||
| /* Spinner animation | ||||
| ----------------------*/ | ||||
|  | ||||
| @ -1,6 +1,7 @@ | ||||
| function UploadQueue(options) { | ||||
| 	this.queue = options.queue_element; | ||||
| 	this.previews = options.preview_area; | ||||
| 	this.preview_area = options.preview_area; | ||||
| 	this.upload_progress = []; | ||||
| 	this.submit = options.submit_button; | ||||
| 	this.addEvents(); | ||||
| } | ||||
| @ -24,7 +25,7 @@ UploadQueue.prototype.addEvents = function() { | ||||
| }; | ||||
| 
 | ||||
| UploadQueue.prototype.clearPreviews = function() { | ||||
| 	this.previews.innerHTML = ''; | ||||
| 	this.preview_area.innerHTML = ''; | ||||
| } | ||||
| 
 | ||||
| UploadQueue.prototype.addPreviewForFile = function(file, index, callback) { | ||||
| @ -33,9 +34,13 @@ UploadQueue.prototype.addPreviewForFile = function(file, index, callback) { | ||||
| 	} | ||||
| 
 | ||||
| 	var preview = document.createElement('img'); | ||||
| 	preview.id = 'upload_preview_' + index; | ||||
| 	preview.title = file.name; | ||||
| 	preview.style.maxHeight = '150px'; | ||||
| 
 | ||||
| 	var preview_box = document.createElement('div'); | ||||
| 	preview_box.id = 'upload_preview_' + index; | ||||
| 	preview_box.appendChild(preview); | ||||
| 
 | ||||
| 	var reader = new FileReader(); | ||||
| 	var that = this; | ||||
| 	var appendMe = function() { | ||||
| @ -45,10 +50,10 @@ UploadQueue.prototype.addPreviewForFile = function(file, index, callback) { | ||||
| 				callback(); | ||||
| 			}); | ||||
| 		} | ||||
| 		that.previews.appendChild(preview); | ||||
| 		that.preview_area.appendChild(preview_box); | ||||
| 	}; | ||||
| 	var waitForMe = function() { | ||||
| 		var previews = that.previews.childNodes; | ||||
| 		var previews = that.preview_area.childNodes; | ||||
| 		if (previews.length === 0 || previews[previews.length - 1].id === 'upload_preview_' + (index - 1)) { | ||||
| 			appendMe(); | ||||
| 		} else { | ||||
| @ -60,8 +65,41 @@ UploadQueue.prototype.addPreviewForFile = function(file, index, callback) { | ||||
| }; | ||||
| 
 | ||||
| UploadQueue.prototype.process = function() { | ||||
| 	this.showSpinner(this.submit); | ||||
| 	alert('Should now upload ' + this.queue.files.length + " files"); | ||||
| 	this.showSpinner(this.submit, "Preparing to upload files..."); | ||||
| 	var files = this.queue.files; | ||||
| 	for (var i = 0; i < files.length; i++) { | ||||
| 		this.setSpinnerLabel("Uploading file " + (i + 1) + " out of " + files.length); | ||||
| 		this.updateProgress(i, 0.5); | ||||
| 		var callback = (i !== files.length - 1) ? null : function() { | ||||
| 			this.hideSpinner(); | ||||
| 		}; | ||||
| 	}; | ||||
| }; | ||||
| 
 | ||||
| UploadQueue.prototype.addProgressBar = function(index) { | ||||
| 	if (index in this.upload_progress) { | ||||
| 		return; | ||||
| 	} | ||||
| 
 | ||||
| 	var progress_container = document.createElement('div'); | ||||
| 	progress_container.className = 'progress'; | ||||
| 
 | ||||
| 	var progress = document.createElement('div'); | ||||
| 	progress_container.appendChild(progress); | ||||
| 
 | ||||
| 	var preview_box = document.getElementById('upload_preview_' + index); | ||||
| 	preview_box.appendChild(progress_container); | ||||
| 
 | ||||
| 	this.upload_progress[index]	= progress; | ||||
| }; | ||||
| 
 | ||||
| UploadQueue.prototype.updateProgress = function(index, progress) { | ||||
| 	if (!(index in this.upload_progress)) { | ||||
| 		this.addProgressBar(index); | ||||
| 	} | ||||
| 
 | ||||
| 	var bar = this.upload_progress[index]; | ||||
| 	bar.style.width = Math.ceil(progress * 100) + '%'; | ||||
| }; | ||||
| 
 | ||||
| UploadQueue.prototype.showSpinner = function(sibling, label) { | ||||
| @ -81,6 +119,12 @@ UploadQueue.prototype.showSpinner = function(sibling, label) { | ||||
| 	} | ||||
| }; | ||||
| 
 | ||||
| UploadQueue.prototype.setSpinnerLabel = function(label) { | ||||
| 	if (this.spinner_label) { | ||||
| 		this.spinner_label.innerHTML = label; | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| UploadQueue.prototype.hideSpinner = function() { | ||||
| 	if (this.spinner) { | ||||
| 		this.spinner.parentNode.removeChild(this.spinner); | ||||
|  | ||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user