docs: function(root, progressMessage, postLoad) {
  			var parent = lib.node(this.parentId);
  
  			// Progress indicator
  			var progress = lib.node("progress"); //$NON-NLS-0$
  			if (!progress) {
  				progress = document.createElement("div");
  				progress.id = "progress"; //$NON-NLS-0$
  				progress.classList.add("fileExplorerProgressDiv"); //$NON-NLS-0$
  				lib.empty(parent);
  				parent.appendChild(progress);
  			}
  			lib.empty(progress);
  
  			var progressTimeout = setTimeout(function() {
  				lib.empty(progress);
  				progress.appendChild(document.createTextNode(progressMessage));
  			}, 500); // wait 500ms before displaying
  
  			var self = this;
  			return Deferred.when(root,
  				function(root) {
  					clearTimeout(progressTimeout);
  					if (self.destroyed) {
  						return;
  					}
  					self.treeRoot = {};
  					// copy properties from root json to our object
  					for (var property in root) {
  						self.treeRoot[property] = root[property];
  					}
  					self.model = self.createModel();
  					if (self.dragAndDrop) {
  						if (self._hookedDrag) {
  							// rehook on the parent to indicate the new root location
  							self._makeDropTarget(self.treeRoot, parent, true);
  						} else {
  							// uses two different techniques from Modernizr
  							// first ascertain that drag and drop in general is supported
  							var supportsDragAndDrop = parent && ('draggable' in parent || 'ondragstart' in parent && 'ondrop' in parent);
  							// then check that file transfer is actually supported, since this is what we will be doing.
  							// For example IE9 has drag and drop but not file transfer
  							supportsDragAndDrop = supportsDragAndDrop && !!(window.File && window.FileList && window.FileReader);
  							self._hookedDrag = true;
  							if (supportsDragAndDrop) {
  								self._makeDropTarget(self.treeRoot, parent, true);
  							} else {
  								self.dragAndDrop = null;
  								window.console.log("Local file drag and drop is not supported in this browser."); //$NON-NLS-0$
  							}
  						}
  					}
  
  					var deferred = new Deferred();
  					self.createTree(self.parentId, self.model, {
  						role: self.role,
  						name: self.name,
  						onComplete: function(tree) {
  							deferred.resolve(tree);
  						},
  						navHandlerFactory: self.navHandlerFactory,
  						showRoot: self.showRoot,
  						setFocus: typeof self.setFocus === "undefined" ? true : self.setFocus,
  						selectionPolicy: self.renderer.selectionPolicy
  					});
  
  					return deferred.then(function() {
  						if (typeof postLoad === "function") {
  							try {
  								postLoad();
  							} catch (e) {
  								if (self.registry) {
  									self.registry.getService("orion.page.message").setErrorMessage(e); //$NON-NLS-0$
  								}
  							}
  						}
  						if (typeof self.onchange === "function") {
  							self.onchange(self.treeRoot);
  						}
  						self.dispatchEvent({
  							type: "rootChanged",
  							root: self.treeRoot
  						});
  						return self.treeRoot;
  					});
  				},
  				function(error) {
  					clearTimeout(progressTimeout);
  					// Show an error message when a problem happens during getting the workspace
  					if (self.registry) {
  						self.registry.getService("orion.page.message").setProgressResult(error); //$NON-NLS-0$
  					}
  					self.dispatchEvent({
  						type: "rootChanged",
  						root: self.treeRoot
  					});
  					return new Deferred().reject(error);
  				}
  			);
  		}