049.xhtml (8055B)
1 <?xml version="1.0" encoding="utf-8"?> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <title>dataTransfer.types during text input selection drag and drop</title> 5 <style type="text/css"> 6 div 7 {min-height:100px; 8 width:100px; 9 padding:20px; 10 color:white; 11 background-color:navy;} 12 </style> 13 <script type="application/ecmascript"> 14 <![CDATA[ 15 var dataTypes = ['text/plain', 'text/uri-list', 'application/xml', 'application/xhtml+xml', 'application/mathml+xml', 'image/svg+xml', 'text/html', 'text/x-example'], 16 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']; 17 e = 0, result = true; 18 function start(event) 19 {event.dataTransfer.effectAllowed = 'copy'; 20 for(var i = event.dataTransfer.items.length; i != 0; i--) 21 {delete event.dataTransfer.items[i-1]} 22 for(var i = 0; i != dataTypes.length; i++) 23 {event.dataTransfer.items.add(data[i],dataTypes[i])} 24 if(event.dataTransfer.items.length != dataTypes.length) 25 {say('items.length (ondragstart) : FAIL (items.length should be' + dataTypes.length + ')')} 26 if(event.dataTransfer.types.length != dataTypes.length) 27 {say('types.length (ondragstart) : FAIL (items.length should be' + dataTypes.length + ')')} 28 for(var i = 0; i != dataTypes.length; i++) 29 {if(event.dataTransfer.getData(dataTypes[i]) != data[i]) 30 {say('getData (ondragstart): FAIL (getData(' + dataTypes[i] + ') returns wrong data)')} 31 if(event.dataTransfer.types[i] != dataTypes[i]) 32 {say('Types (ondragstart): FAIL (dataTransfer.types[' + i + '] returns wrong value)')} 33 } 34 for(var i = 0; i != event.dataTransfer.items.length; i++) 35 {if(event.dataTransfer.items[i].kind != 'string') 36 {say('Item kind (ondragstart): FAIL (items[' + i + '].kind should be string)')} 37 if(event.dataTransfer.items[i].type != dataTypes[i]) 38 {say('Item type (ondragstart): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 39 event.dataTransfer.items[i].getAsString( 40 function () 41 {if(arguments[0] != data[e++]) 42 {say('getAsString : FAIL (items[' + i + '].getAsString should pass' + data[e] + ')')} 43 } 44 ); 45 } 46 } 47 function dragElement(event) 48 {event.dataTransfer.items.clear(); 49 if(event.dataTransfer.items.length != dataTypes.length) 50 {say('items.length (ondrag) : FAIL (items.length should be' + dataTypes.length + ')')} 51 if(event.dataTransfer.types.length != dataTypes.length) 52 {say('types.length (ondrag) : FAIL (items.length should be' + dataTypes.length + ')')} 53 for(var i = 0; i != dataTypes.length; i++) 54 {if(event.dataTransfer.types[i] != dataTypes[i]) 55 {say('Types (ondrag): FAIL (dataTransfer.types[' + i + '] returns wrong value)')} 56 } 57 for(var i = 0; i != event.dataTransfer.items.length; i++) 58 {if(event.dataTransfer.items[i].kind != 'string') 59 {say('Item kind (ondrag): FAIL (items[' + i + '].kind should be string)')} 60 if(event.dataTransfer.items[i].type != dataTypes[i]) 61 {say('Item type (ondrag): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 62 event.dataTransfer.items[i].getAsString( 63 function () 64 {if(arguments[0]) 65 {say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to drag event handler)')} 66 } 67 ); 68 } 69 } 70 function enterElement(event) 71 {event.preventDefault(); 72 event.dataTransfer.items.clear(); 73 if(event.dataTransfer.items.length != dataTypes.length) 74 {say('items.length (ondragenter) : FAIL (items.length should be' + dataTypes.length + ')')} 75 if(event.dataTransfer.types.length != dataTypes.length) 76 {say('types.length (ondragenter) : FAIL (items.length should be' + dataTypes.length + ')')} 77 for(var i = 0; i != dataTypes.length; i++) 78 {if(event.dataTransfer.types[i] != dataTypes[i]) 79 {say('Types (ondragenter): FAIL (dataTransfer.types[' + i + '] returns wrong value)')} 80 } 81 for(var i = 0; i != event.dataTransfer.items.length; i++) 82 {delete event.dataTransfer.items[i]; 83 if(event.dataTransfer.items[i].kind != 'string') 84 {say('Item kind (ondragenter): FAIL (items[' + i + '].kind should be string)')} 85 if(event.dataTransfer.items[i].type != dataTypes[i]) 86 {say('Item type (ondragenter): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 87 event.dataTransfer.items[i].getAsString( 88 function () 89 {if(arguments[0]) 90 {say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to drag event handler)')} 91 } 92 ); 93 } 94 } 95 function overElement(event) 96 {event.preventDefault(); 97 event.dataTransfer.items.clear(); 98 if(event.dataTransfer.items.length != dataTypes.length) 99 {say('items.length (ondragover) : FAIL (items.length should be' + dataTypes.length + ')')} 100 if(event.dataTransfer.types.length != dataTypes.length) 101 {say('types.length (ondragover) : FAIL (items.length should be' + dataTypes.length + ')')} 102 for(var i = 0; i != dataTypes.length; i++) 103 {if(event.dataTransfer.types[i] != dataTypes[i]) 104 {say('Types (ondragover): FAIL (dataTransfer.types[' + i + '] returns wrong value)')} 105 } 106 for(var i = 0; i != event.dataTransfer.items.length; i++) 107 {if(event.dataTransfer.items[i].kind != 'string') 108 {say('Item kind (ondragover): FAIL (items[' + i + '].kind should be string)')} 109 if(event.dataTransfer.items[i].type != dataTypes[i]) 110 {say('Item type (ondragover): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 111 event.dataTransfer.items[i].getAsString( 112 function () 113 {if(arguments[0]) 114 {say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to dragover event handler)')} 115 } 116 ); 117 } 118 } 119 function dataDrop(event) 120 {e = 0; 121 event.dataTransfer.items.clear(); 122 if(event.dataTransfer.items.length != dataTypes.length) 123 {say('items.length (ondrop) : FAIL (items.length should be' + dataTypes.length + ')')} 124 if(event.dataTransfer.types.length != dataTypes.length) 125 {say('types.length (ondrop) : FAIL (items.length should be' + dataTypes.length + ')')} 126 for(var i = 0; i != dataTypes.length; i++) 127 {if(event.dataTransfer.types[i] != dataTypes[i]) 128 {say('Types (ondrop): FAIL (dataTransfer.types[' + i + '] returns wrong value)')} 129 if(event.dataTransfer.getData(dataTypes[i]) != data[i]) 130 {say('getData (ondrop): FAIL (getData(' + dataTypes[i] + ') returns wrong data)')} 131 } 132 for(var i = 0; i != event.dataTransfer.items.length; i++) 133 {delete event.dataTransfer.items[i]; 134 if(event.dataTransfer.items[i].kind != 'string') 135 {say('Item kind (ondrop): FAIL (items[' + i + '].kind should be string)')} 136 if(event.dataTransfer.items[i].type != dataTypes[i]) 137 {say('Item type (ondrop): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 138 event.dataTransfer.items[i].getAsString( 139 function () 140 {if(arguments[0] != data[e++]) 141 {say('getAsString : FAIL (items[' + i + '].getAsString should pass' + data[e] + ')')} 142 } 143 ); 144 } 145 document.querySelector('div').setAttribute('style','background-color:' + (result?'green':'red'));} 146 function say(it) 147 {result = false; 148 document.querySelector('pre').appendChild(document.createTextNode(it + '\n'));} 149 ]]> 150 </script> 151 </head> 152 <body onload="document.querySelector('input').select()"> 153 <p><input value="Drag me" ondragstart="start(event)" ondrag="dragElement(event)"/></p> 154 <p>Drag selection above to the navy box below and drop it. Navy box should turn green.</p> 155 <div ondragenter="enterElement(event)" ondragover="overElement(event)" ondrop="dataDrop(event)"/> 156 <pre/> 157 </body> 158 </html>