1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
<?xml version="1.0" encoding="utf-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>dataTransfer.types during 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 = ['Drag me', '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.effectAllowed = 'copy';
for(var i = event.dataTransfer.items.length; i != 0; i--)
{delete event.dataTransfer.items[i-1]}
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 onload="window.getSelection().selectAllChildren(document.querySelector('span'))">
<p><span ondragstart="start(event)" ondrag="dragElement(event)">Drag me</span></p>
<p>Drag selection above to the navy box below and drop it. Navy box should turn green.</p>
<div ondragenter="enterElement(event)" ondragover="overElement(event)" ondrop="dataDrop(event)"/>
<pre/>
</body>
</html>
|