<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dataTransfer.setData/getData 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', 'PASS', '<result>PASS</result>', '<html xmlns="http://www.w3.org/1999/xhtml"><head><title>Data store item</title></head><body><p>PASS</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">PASS</text></svg>', '<!DOCTYPE html><html><head><title>Data store item</title></head><body><p>PASS</p></body></html>', 'PASS'];
function start(event)
	{event.dataTransfer.effectAllowed = 'copy';
	for(var i = 0; i != dataTypes.length; i++)
		{event.dataTransfer.setData(dataTypes[i], data[i]);}
	say('items.length (dragstart) : ' + ((event.dataTransfer.items.length >= dataTypes.length)?'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 < dataTypes.length)
		{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 >= dataTypes.length)?'PASS':'FAIL'));}
function dataDrop(event)
	{say('items.length (drop) : ' + ((event.dataTransfer.items.length >= dataTypes.length)?'PASS':'FAIL'));
	for(var i = 0; i != dataTypes.length; i++)
		{say('getData(' + dataTypes[i] + ') : ' + ((event.dataTransfer.getData(dataTypes[i]) == data[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>