<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dataTransfer.clearData during SVG image drag and drop</title>
<style type="text/css">
div
	{height:100px;
	width:100px;
	padding:20px;
	background-color:silver;}
</style>
<script type="application/ecmascript">
<![CDATA[
var dataTypes = ['text/uri-list', 'text/plain', 'application/xml', 'application/xhtml+xml', 'application/mathml+xml', 'image/svg+xml', 'text/html', 'text/x-example'],
data = ['data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20version%3D%221.1%22%20width%3D%22100px%22%20height%3D%22100px%22%20viewBox%3D%220%200%20100%20100%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22green%22/%3E%3C/svg%3E', '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'],
l = 0;
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]);}
	for(var i = 0; i != dataTypes.length; i++)
		{event.dataTransfer.clearData(dataTypes[i]);}
	say('items.length (dragstart) : ' + ((event.dataTransfer.items.length < l)?'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 > l)
		{say('items.length (dragover) : FAIL' + event.dataTransfer.items.length)}
	}
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 < l)?'PASS':'FAIL'));}
function dataDrop(event)
	{say('items.length (drop) : ' + ((event.dataTransfer.items.length < l)?'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>
<p><img ondragstart="start(event)" ondrag="dragElement(event)" src="data:image/svg+xml,%3Csvg%20xmlns%3D%22http%3A//www.w3.org/2000/svg%22%20version%3D%221.1%22%20width%3D%22100px%22%20height%3D%22100px%22%20viewBox%3D%220%200%20100%20100%22%3E%3Ccircle%20cx%3D%2250%22%20cy%3D%2250%22%20r%3D%2250%22%20fill%3D%22green%22/%3E%3C/svg%3E" alt="SVG circle"/></p>
<p>Drag circle above to the silver box below and drop it. Silver box should turn green and test results should appear below.</p>
<div ondragenter="enterElement(event)" ondragover="return false;" ondrop="dataDrop(event)"/>
<pre/>
</body>
</html>