docs: function() {
  				if (bufferExt.rendering || (bufferExt.renderd && ! buffer.length)) {
  					return;
  				}
  				var place = (list ? cwd.children('table').children('tbody') : cwd),
  					phash,
  					chk,
  					// created document fragment for jQuery >= 1.12, 2.2, 3.0
  					// see Studio-42/elFinder#1544 @ github
  					docFlag = $.htmlPrefilter? true : false,
  					tempDom = docFlag? $(document.createDocumentFragment()) : $('<div/>'),
  					go      = function(o){
  						var over  = o || null,
  							html  = [],
  							dirs  = false,
  							atmb  = {},
  							stmb  = (fm.option('tmbUrl') === 'self'),
  							init  = bufferExt.renderd? false : true,
  							files, locks, selected;
  						
  						files = buffer.splice(0, showFiles + (over || 0) / (bufferExt.hpi || 1));
  						bufferExt.renderd += files.length;
  						if (! buffer.length) {
  							bottomMarker.hide();
  							wrapper.off(scrollEvent, render);
  						}
  						
  						locks = [];
  						html = $.map(files, function(f) {
  							if (f.hash && f.name) {
  								if (f.mime == 'directory') {
  									dirs = true;
  								}
  								if (f.tmb || (stmb && f.mime.indexOf('image/') === 0)) {
  									atmb[f.hash] = f.tmb || 'self';
  								}
  								clipCuts[f.hash] && locks.push(f.hash);
  								return itemhtml(f);
  							}
  							return null;
  						});
  
  						// html into temp node
  						tempDom.empty().append(html.join(''));
  						
  						// make directory droppable
  						dirs && !mobile && makeDroppable(tempDom);
  						
  						// check selected items
  						selected = [];
  						if (Object.keys(selectedFiles).length) {
  							tempDom.find('[id]:not(.'+clSelected+'):not(.elfinder-cwd-parent)').each(function() {
  								selectedFiles[fm.cwdId2Hash(this.id)] && selected.push($(this));
  							});
  						}
  						
  						// append to cwd
  						place.append(docFlag? tempDom : tempDom.children());
  						
  						// trigger select
  						if (selected.length) {
  							$.each(selected, function(i, n) { n.trigger(evtSelect); });
  							trigger();
  						}
  						
  						locks.length && fm.trigger('lockfiles', {files: locks});
  						!bufferExt.hpi && bottomMarkerShow(place, files.length);
  						
  						if (list) {
  							// show thead
  							cwd.find('thead').show();
  							// fixed table header
  							fixTableHeader({fitWidth: ! colWidth});
  						}
  						
  						if (Object.keys(atmb).length) {
  							Object.assign(bufferExt.attachTmbs, atmb);
  						}
  						
  						if (init) {
  							if (! mobile && ! cwd.data('selectable')) {
  								// make files selectable
  								cwd.selectable(selectableOption).data('selectable', true);
  							}
  							wrapperRepaint(true);
  						}
  
  						! scrolling && wrapper.trigger(scrollEvent);
  					};
  				
  				if (! bufferExt.renderd) {
  					// first time to go()
  					bufferExt.rendering = true;
  					// scroll top on dir load to avoid scroll after page reload
  					wrapper.scrollTop(0);
  					phash = fm.cwd().phash;
  					go();
  					if (options.oldSchool && phash && !query) {
  						oldSchool(phash);
  					}
  					if (list) {
  						colWidth && setColwidth();
  						fixTableHeader({fitWidth: true});
  					}
  					bufferExt.itemH = (list? place.find('tr:first') : place.find('[id]:first')).outerHeight(true);
  					fm.trigger('cwdrender');
  					bufferExt.rendering = false;
  				}
  				if (! bufferExt.rendering && buffer.length) {
  					// next go()
  					if ((chk = (wrapper.height() + wrapper.scrollTop() + fm.options.showThreshold + bufferExt.row) - (bufferExt.renderd * bufferExt.hpi)) > 0) {
  						bufferExt.rendering = true;
  						fm.lazy(function() {
  							go(chk);
  							bufferExt.rendering = false;
  						});
  					} else {
  						!fm.enabled() && resize();
  					}
  				} else {
  					resize();
  				}
  			}