docs: function ( srcs ) {
  		return [
  			/*
  			 * Distribute foldernames and filenames in hashmaps.
  			 */
  			function step1 ( srcs ) {
  				var map = Object.create ( null );
  				function next ( source, parts, map ) {
  					var part = parts.shift ();
  					if ( !parts.length ) {
  						map [ part ] = source;
  					} else {
  						map [ part ] = map [ part ] || Object.create ( null );
  						next ( source, parts, map [ part ]);
  					}
  				}
  				srcs.forEach ( function ( source ) {
  					next ( source, source.split ( "/" ), map );
  				});
  				return map;
  			},
  			/*
  			 * Transforming hashmaps into objects and arrays.
  			 */
  			function step2 ( map ) {
  				var root = { name : "/", nodes : []};
  				return ( function next ( map, parent, level ) {
  					gui.Object.each ( map, function ( key, val ) {
  						var node = { name : key };
  						if ( typeof ( val ) === "object" ) {
  							node.nodes = [];
  							node.open = level < 1;
  							next ( val, node, level + 1 );
  						} else {
  							node.src = val;
  						}
  						parent.nodes.push ( node );
  					});
  					return parent;
  				}) ( map, root, 0 );
  			},
  			/*
  			 * Split files from folders and sort them alphabetically.
  			 */
  			function step3 ( folder ) {
  				var is, nodes = folder.nodes, alpha = function ( n1, n2 ) {
  					return n1.name < n2.name ? -1 : n1.name > n2.name ? 1 : 0;
  				};
  				folder.nodes = nodes.filter ( function ( node ) {
  					return (( is = node.nodes )) ? step3 ( node ) : false;
  				}).sort ( alpha ).concat ( nodes.filter ( function ( node ) {
  					return !node.nodes;
  				}).sort ( alpha ));
  				return folder;
  			},
  			/**
  			 * Reduce to minimum viable root folder.
  			 */
  			function step4 ( folder ) {
  				while ( folder.nodes.length === 1 && folder.nodes [ 0 ].nodes ) {
  					//folder.hidden = true;
  					folder = folder.nodes [ 0 ];
  				}
  				return folder;
  			},
  			/**
  			 * Preoptimize search by stamping descendant filenames onto folders.
  			 */
  			function step5 ( folder ) {
  				folder.filenames = folder.filenames || folder.nodes.map ( function ( node ) {
  					return node.nodes ? step5 ( node ).filenames : node.name.toLowerCase ();
  				}).join ( " " );
  				return folder;
  			}
  		].reduce ( function ( input, nextstep ) { 
  			return nextstep ( input ); 
  		}, srcs );
  	}