<!DOCTYPE html>
<title>drag &amp; drop - microdata for selection surrounding nested non-property items</title>
<style>
  body > div {
    height: 100px;
    width: 200px;
    background-color: fuchsia;
    position: absolute;
    top: 8px;
    left: 8px;
  }
  span * {
    display: none;
  }
  body > div + div {
    background-color: navy;
    top: 116px;
  }
  body > div + div + div {
    background-color: orange;
    top: 224px;
  }
  p:first-of-type {
    margin-top: 350px;
  }
</style>

<script>

function makeEl(eltype,props,contents) {
	var elem = document.createElement(eltype);
	for( var i in props ) {
		if( props.hasOwnProperty(i) ) {
			elem.setAttribute(i,props[i]);
		}
	}
	if( contents ) {
		elem.innerHTML = contents;
	}
	return elem;
}

var orange, fails = [], doneonce = false;
window.onload = function() {
  orange = document.getElementsByTagName('div')[2];
	orange.childNodes[1].appendChild( makeEl('span',{itemscope:'itemscope'},'test') );
	orange.childNodes[1].lastChild.appendChild( makeEl('span',{itemprop:'bar'},'test') );
  orange.ondragstart = function(e) {
		e.dataTransfer.effectAllowed = 'copy';
    e.dataTransfer.setData('Text', 'dummy text');
  	var err;
		if( err = checkprops(e.dataTransfer.getData('application/microdata+json')) ) {
			fails[fails.length] = e.type + ' ' + err;
	  }
  };
  orange.previousSibling.ondragenter = orange.previousSibling.ondragleave = orange.previousSibling.ondragover =
  orange.ondrag = orange.ondragend = function(e) {
    if( e.type == 'dragover' || e.type == 'dragenter' ) {
    	e.preventDefault();
	    e.dataTransfer.dropEffect = 'copy';
    }
    if( e.dataTransfer.getData('application/microdata+json') ) {
			fails[fails.length] = e.type + ' unexpectedly had microdata (security restriction)';
    }
  };
	orange.previousSibling.ondrop = function(e) {
  	var err;
		if( err = checkprops(e.dataTransfer.getData('application/microdata+json')) ) {
			fails[fails.length] = e.type + ' ' + err;
	  }
	  if( e.type != 'drop' ) { return; }
  	if( doneonce ) { return; }
  	doneonce = true;
    setTimeout(function () {
    	document.getElementsByTagName('p')[0].innerHTML = fails.length ? ( 'FAIL: ' + fails.join('<br>') ) : 'PASS';
    	fails = [];
    }, 200 );
  };

};
function checkprops(md) {
	//*all* items should be represented at the top level, even if they are nested
	var i;
	if( !md ) { return 'no microdata'; }
	md = JSON.parse(md);
	if( !md.items ) { return 'no items'; }
	if( md.items.length != 2 ) { return md.items.length+' items instead of 2'; }
	if( !md.items[0].properties ) { return 'no items[0].properties'; }
	if( md.items[0].properties.bar ) { return 'unexpected items[0].properties.bar'; }

	if( !md.items[1].properties ) { return 'no items[1].properties'; }
	if( !md.items[1].properties.bar ) { return 'no items[1].properties.bar'; }
	if( md.items[1].properties.bar.length != 1 ) { return 'items[1].properties.bar length '+md.items[1].properties.bar.length+' instead of 1'; }
	if( md.items[1].properties.bar[0] != 'test' ) { return 'items[1].properties.bar[0] <i>'+md.items[1].properties.bar[0]+'</i> instead of <i>test</i>'; }
	return '';
}

</script>

<div></div><div></div><div>01<span itemscope>23</span>45<span>67</span>89</div>

<p>Use your pointing device to select the text substring "12345678" above, drag the selection upwards to the pink box,
then back to the blue box, and release it.</p>
<noscript><p>Enable JavaScript and reload</p></noscript>
