<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dataTransfer.types during canvas 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/plain', 'text/uri-list', 'application/xml', 'application/xhtml+xml', 'application/mathml+xml', 'image/svg+xml', 'text/html', 'text/x-example'],
data = ['PASS', 'data:text/plain,1', '<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'],
e = 0, result = true;
function start(event)
	{event.dataTransfer.items.clear();
	event.dataTransfer.effectAllowed = 'copy';
	for(var i = 0; i != dataTypes.length; i++)
		{event.dataTransfer.items.add(data[i],dataTypes[i])}
	if(event.dataTransfer.items.length != dataTypes.length)
			{say('items.length (ondragstart) : FAIL (items.length should be' + dataTypes.length + ')')}
	if(event.dataTransfer.types.length != dataTypes.length)
			{say('types.length (ondragstart) : FAIL (items.length should be' + dataTypes.length + ')')}
	for(var i = 0; i != dataTypes.length; i++)
		{if(event.dataTransfer.getData(dataTypes[i]) != data[i])
			{say('getData (ondragstart): FAIL (getData(' + dataTypes[i] + ') returns wrong data)')}
		if(event.dataTransfer.types[i] != dataTypes[i])
			{say('Types (ondragstart): FAIL (dataTransfer.types[' + i + '] returns wrong value)')}
		}
	for(var i = 0; i != event.dataTransfer.items.length; i++)
		{if(event.dataTransfer.items[i].kind != 'string')
			{say('Item kind (ondragstart): FAIL (items[' + i + '].kind should be string)')}
		if(event.dataTransfer.items[i].type != dataTypes[i])
			{say('Item type (ondragstart): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')}
		event.dataTransfer.items[i].getAsString(
			function ()
				{if(arguments[0] != data[e++])
					{say('getAsString : FAIL (items[' + i + '].getAsString should pass' + data[e] + ')')}
				}
			);
		}
	}
function dragElement(event)
	{event.dataTransfer.items.clear();
	if(event.dataTransfer.items.length != dataTypes.length)
		{say('items.length (ondrag) : FAIL (items.length should be' + dataTypes.length + ')')}
	if(event.dataTransfer.types.length != dataTypes.length)
			{say('types.length (ondrag) : FAIL (items.length should be' + dataTypes.length + ')')}
	for(var i = 0; i != dataTypes.length; i++)
		{if(event.dataTransfer.types[i] != dataTypes[i])
			{say('Types (ondrag): FAIL (dataTransfer.types[' + i + '] returns wrong value)')}
		}
	for(var i = 0; i != event.dataTransfer.items.length; i++)
		{if(event.dataTransfer.items[i].kind != 'string')
			{say('Item kind (ondrag): FAIL (items[' + i + '].kind should be string)')}
		if(event.dataTransfer.items[i].type != dataTypes[i])
			{say('Item type (ondrag): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')}
		event.dataTransfer.items[i].getAsString(
			function ()
				{if(arguments[0])
					{say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to drag event handler)')}
				}
			);
		}
	}
function enterElement(event)
	{event.preventDefault();
	event.dataTransfer.items.clear();
	if(event.dataTransfer.items.length != dataTypes.length)
		{say('items.length (ondragenter) : FAIL (items.length should be' + dataTypes.length + ')')}
	if(event.dataTransfer.types.length != dataTypes.length)
			{say('types.length (ondragenter) : FAIL (items.length should be' + dataTypes.length + ')')}
	for(var i = 0; i != dataTypes.length; i++)
		{if(event.dataTransfer.types[i] != dataTypes[i])
			{say('Types (ondragenter): FAIL (dataTransfer.types[' + i + '] returns wrong value)')}
		}
	for(var i = 0; i != event.dataTransfer.items.length; i++)
		{delete event.dataTransfer.items[i];
		if(event.dataTransfer.items[i].kind != 'string')
			{say('Item kind (ondragenter): FAIL (items[' + i + '].kind should be string)')}
		if(event.dataTransfer.items[i].type != dataTypes[i])
			{say('Item type (ondragenter): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')}
		event.dataTransfer.items[i].getAsString(
			function ()
				{if(arguments[0])
					{say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to drag event handler)')}
				}
			);
		}
	}
function overElement(event)
	{event.preventDefault();
	event.dataTransfer.items.clear();
	if(event.dataTransfer.items.length != dataTypes.length)
		{say('items.length (ondragover) : FAIL (items.length should be' + dataTypes.length + ')')}
	if(event.dataTransfer.types.length != dataTypes.length)
			{say('types.length (ondragover) : FAIL (items.length should be' + dataTypes.length + ')')}
	for(var i = 0; i != dataTypes.length; i++)
		{if(event.dataTransfer.types[i] != dataTypes[i])
			{say('Types (ondragover): FAIL (dataTransfer.types[' + i + '] returns wrong value)')}
		}
	for(var i = 0; i != event.dataTransfer.items.length; i++)
		{if(event.dataTransfer.items[i].kind != 'string')
			{say('Item kind (ondragover): FAIL (items[' + i + '].kind should be string)')}
		if(event.dataTransfer.items[i].type != dataTypes[i])
			{say('Item type (ondragover): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')}
		event.dataTransfer.items[i].getAsString(
			function ()
				{if(arguments[0])
					{say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to dragover event handler)')}
				}
			);
		}
	}
function dataDrop(event)
	{e = 0;
	event.dataTransfer.items.clear();
	if(event.dataTransfer.items.length != dataTypes.length)
			{say('items.length (ondrop) : FAIL (items.length should be' + dataTypes.length + ')')}
	if(event.dataTransfer.types.length != dataTypes.length)
			{say('types.length (ondrop) : FAIL (items.length should be' + dataTypes.length + ')')}
	for(var i = 0; i != dataTypes.length; i++)
		{if(event.dataTransfer.types[i] != dataTypes[i])
			{say('Types (ondrop): FAIL (dataTransfer.types[' + i + '] returns wrong value)')}
		if(event.dataTransfer.getData(dataTypes[i]) != data[i])
			{say('getData (ondrop): FAIL (getData(' + dataTypes[i] + ') returns wrong data)')}
		}
	for(var i = 0; i != event.dataTransfer.items.length; i++)
		{delete event.dataTransfer.items[i];
		if(event.dataTransfer.items[i].kind != 'string')
			{say('Item kind (ondrop): FAIL (items[' + i + '].kind should be string)')}
		if(event.dataTransfer.items[i].type != dataTypes[i])
			{say('Item type (ondrop): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')}
		event.dataTransfer.items[i].getAsString(
			function ()
				{if(arguments[0] != data[e++])
					{say('getAsString : FAIL (items[' + i + '].getAsString should pass' + data[e] + ')')}
				}
			);
		}
	document.querySelector('div').setAttribute('style','background-color:' + (result?'green':'red'));}
function say(it)
	{result = false;
	document.querySelector('pre').appendChild(document.createTextNode(it + '\n'));}
]]>
</script>
</head>
<body>
<p>
	<canvas width="100" height="100" draggable="true" ondragstart="start(event)" ondrag="dragElement(event)">Canvas</canvas>
</p>
<p>Drag canvas pattern to the silver box below and drop it. Silver box should turn green.</p>
<div ondragenter="enterElement(event)" ondragover="overElement(event)" ondrop="dataDrop(event)"/>
<pre/>
<script type="application/ecmascript">
var canvas = document.querySelector('canvas'),
c = canvas.getContext('2d');
for(var x = 0; x != 50; x++)
	{c.fillStyle = (x%2 == 0)?'navy':'white';
	c.beginPath();
	c.moveTo(x,x);
	c.lineTo(100-x,x);
	c.lineTo(100-x,100-x);
	c.lineTo(x,100-x);
	c.closePath();
	c.fill();}
data[1] = canvas.toDataURL('image/png');
</script>
</body>
</html>