docs: function(e, ui) {
  			var dst     = $(this),
  				targets = $.grep(ui.helper.data('files')||[], function(h) { return h? true : false; }),
  				result  = [],
  				dups    = [],
  				faults  = [],
  				isCopy  = ui.helper.hasClass('elfinder-drag-helper-plus'),
  				c       = 'class',
  				cnt, hash, i, h;
  			
  			if (typeof e.button === 'undefined' || ui.helper.data('namespace') !== namespace || ! self.insideWorkzone(e.pageX, e.pageY)) {
  				return false;
  			}
  			if (dst.hasClass(self.res(c, 'cwdfile'))) {
  				hash = self.cwdId2Hash(dst.attr('id'));
  			} else if (dst.hasClass(self.res(c, 'navdir'))) {
  				hash = self.navId2Hash(dst.attr('id'));
  			} else {
  				hash = cwd;
  			}
  
  			cnt = targets.length;
  			
  			while (cnt--) {
  				h = targets[cnt];
  				// ignore drop into itself or in own location
  				if (h != hash && files[h].phash != hash) {
  					result.push(h);
  				} else {
  					((isCopy && h !== hash && files[hash].write)? dups : faults).push(h);
  				}
  			}
  			
  			if (faults.length) {
  				return false;
  			}
  			
  			ui.helper.data('droped', true);
  			
  			if (dups.length) {
  				ui.helper.hide();
  				self.exec('duplicate', dups, {_userAction: true});
  			}
  			
  			if (result.length) {
  				ui.helper.hide();
  				self.clipboard(result, !isCopy);
  				self.exec('paste', hash, {_userAction: true}, hash).always(function(){
  					self.clipboard([]);
  					self.trigger('unlockfiles', {files : targets});
  				});
  				self.trigger('drop', {files : targets});
  			}
  		}