<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Clear datastore data during text input selection drag and drop</title>
<style type="text/css">
div
	{min-height:100px;
	width:100px;
	padding:20px;
	color:white;
	background-color:navy;}
</style>
<script type="application/ecmascript">
<![CDATA[
var dataTypes = ['text/plain', 'text/uri-list', 'application/xml', 'application/xhtml+xml', 'application/mathml+xml', 'image/svg+xml', 'text/html', 'text/x-example'],
data = ['FAIL', 'data:text/plain,FAIL', '<result>FAIL</result>', '<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Data store item</title></head><body><p>FAIL</p></body></html>', '<math xmlns="http://www.w3.org/1998/Math/MathML"><mn>1</mn></math>', '<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="100px" height="50px" viewBox="0 0 100 50"><text x="0" y="40" font-size="40" fill="green">FAIL</text></svg>', '<!DOCTYPE html><html><head><title>Data store item</title></head><body><p>FAIL</p></body></html>', 'FAIL'];
function start(event)
	{event.dataTransfer.effectAllowed = 'copy';
	l = event.dataTransfer.items.length;
	for(var i = 0; i != dataTypes.length; i++)
		{event.dataTransfer.setData(dataTypes[i], data[i]);}
	event.dataTransfer.clearData();
	say('items.length (dragstart) : ' + ((event.dataTransfer.items.length == 0)?'PASS':'FAIL'));}
function dragElement(event)
	{for(var i = 0; i != dataTypes.length; i++)
		{event.dataTransfer.setData(dataTypes[i], 'FAIL');
		if(event.dataTransfer.getData(dataTypes[i]))
			{say('getData(' + dataTypes[i] + ') : FAIL (data store should not be readable during drag)')}
		}
	if(event.dataTransfer.items.length != 0)
		{say('items.length (dragover) : FAIL')}
	}
function enterElement(event)
	{event.preventDefault();
	for(var i = 0; i != dataTypes.length; i++)
		{event.dataTransfer.setData(dataTypes[i], 'FAIL');
		if(event.dataTransfer.getData(dataTypes[i]))
			{say('getData(' + dataTypes[i] + ') : FAIL (data store should not be readable during dragenter)')}
		}
	say('items.length (dragenter) : ' + ((event.dataTransfer.items.length == 0)?'PASS':'FAIL'));}
function dataDrop(event)
	{say('items.length (drop) : ' + ((event.dataTransfer.items.length == 0)?'PASS':'FAIL'));
	for(var i = 0; i != dataTypes.length; i++)
		{say('getData(' + dataTypes[i] + ') : ' + ((event.dataTransfer.getData(dataTypes[i]) == '')?'PASS':'FAIL'));}
	document.querySelector('div').setAttribute('style','background-color:green');}
function say(it)
	{document.querySelector('pre').appendChild(document.createTextNode(it + '\n'));}
]]>
</script>
</head>
<body onload="document.querySelector('input').select()">
<p><input value="Drag me" ondragstart="start(event)" ondrag="dragElement(event)"/></p>
<p>Drag selection above to the navy box below and drop it. Navy box should turn green and test results should appear below.</p>
<div ondragenter="enterElement(event)" ondragover="return false;" ondrop="dataDrop(event)"/>
<pre/>
</body>
</html>