docs: function(data){
  					var item = forceSingleItem(data.items);
  
  					var fileInput = lib.node("fileSelectorInput"); //$NON-NLS-0$
  					var cloneInput = fileInput.cloneNode(); // clone file input before its value is changed
  
  					var projectNameDialog = new PromptDialog.PromptDialog({
  						title: messages["Create new project"], //$NON-NLS-0$
  						promptMessage: messages["Enter project name:"] //$NON-NLS-0$
  					});
  
  
  					var handleOk = function(event) { //$NON-NLS-0$
  						var projectName = event.value;
  						fileClient.getWorkspace(item.Location).then(function(workspace) {
  							progress.progress(projectClient.createProject(workspace.ChildrenLocation, {Name: projectName}),i18nUtil.formatMessage( messages["Creating project ${0}"], projectName)).then(function(project){
  								dispatchNewProject(workspace, project).then(function(fileMetadata) {
  									for (var i = 0; i < fileInput.files.length; i++) {
  										explorer._uploadFile(fileMetadata, fileInput.files.item(i), false);
  									}
  								});
  							}, function(error) {
  								var response = JSON.parse(error.response);
  								var projectNameDialogRetry = new PromptDialog.PromptDialog({
  									title: response.Message,
  									promptMessage: messages["Enter project name:"] //$NON-NLS-0$
  								});
  								projectNameDialogRetry.addEventListener("ok", handleOk);
  								projectNameDialogRetry.show();
  							});
  						});
  					};
  
  					// add listener which uses project name entered by user to create a new project
  					projectNameDialog.addEventListener("ok", handleOk);
  
  					var changeListener = function(){
  						if (fileInput.files && fileInput.files.length > 0) {
  							var nonZipFiles = [];
  							// Simple check if file is zip format
  							var zipFileTypes = ['application/octet-stream', 'multipart/x-zip', 'application/zip', 'application/zip-compressed', 'application/x-zip-compressed'];
  							for (var i = 0; i < fileInput.files.length; i++) {
  								if(zipFileTypes.indexOf(fileInput.files[i].type) == -1) {
  									nonZipFiles.push('\"' + fileInput.files[i].name + '\"');
  								}
  							}
  							var message;
  							if(nonZipFiles.length > 5) {
  								message = messages["notZipMultiple"];
  							} else if (nonZipFiles.length > 0) {
  								message = i18nUtil.formatMessage(messages["notZip"], nonZipFiles.join(', '));
  							}
  							if(nonZipFiles.length == 0) {
  								projectNameDialog.show();
  								fileInput.removeEventListener("change", changeListener);
  							}else{
  								var dialog = this.serviceRegistry.getService("orion.page.dialog");								
  								dialog.confirm(message, function(result){
  									if(result){
  										projectNameDialog.show(); // ask user for project name
  									}
  									fileInput.removeEventListener("change", changeListener);
  								});	
  							}
  						}else{
  							fileInput.removeEventListener("change", changeListener);
  						}
  					}.bind(this);
  					fileInput.addEventListener("change", changeListener);
  
  					// Launch file picker. Note that at the time when this code was written, web browser
  					// restrictions made it so that fileInput.click() cannot be called asynchronously.
  					// e.g. cannot be called from event handler after the user enters the project name
  					fileInput.click();
  
  					//replace original fileInput so that change event always fires
  					fileInput.parentNode.replaceChild(cloneInput, fileInput);
  				}