034.xhtml (6086B)
1 <?xml version="1.0" encoding="utf-8"?> 2 <html xmlns="http://www.w3.org/1999/xhtml"> 3 <head> 4 <title>dataTransfer.items 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 = 0; i != dataTypes.length; i++) 21 {event.dataTransfer.setData(dataTypes[i], data[i]);} 22 for(var i = event.dataTransfer.items.length; i != 0; i--) 23 {if(dataTypes.indexOf(event.dataTransfer.items[i-1].type) == -1) 24 {delete event.dataTransfer.items[i-1]} 25 } 26 if(event.dataTransfer.items.length != dataTypes.length) 27 {say('items.length (ondragstart) : FAIL (items.length should be' + dataTypes.length + ')')} 28 for(var i = 0; i != event.dataTransfer.items.length; i++) 29 {if(event.dataTransfer.items[i].kind != 'string') 30 {say('Item kind (ondragstart): FAIL (items[' + i + '].kind should be string)')} 31 if(event.dataTransfer.items[i].type != dataTypes[i]) 32 {say('Item type (ondragstart): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 33 event.dataTransfer.items[i].getAsString( 34 function () 35 {if(arguments[0] != data[e++]) 36 {say('getAsString : FAIL (items[' + i + '].getAsString should pass' + data[e] + ')')} 37 } 38 ); 39 } 40 } 41 function dragElement(event) 42 {event.dataTransfer.items.clear(); 43 if(event.dataTransfer.items.length != dataTypes.length) 44 {say('items.length (ondrag) : FAIL (items.length should be' + dataTypes.length + ')')} 45 for(var i = 0; i != event.dataTransfer.items.length; i++) 46 {if(event.dataTransfer.items[i].kind != 'string') 47 {say('Item kind (ondrag): FAIL (items[' + i + '].kind should be string)')} 48 if(event.dataTransfer.items[i].type != dataTypes[i]) 49 {say('Item type (ondrag): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 50 event.dataTransfer.items[i].getAsString( 51 function () 52 {if(arguments[0]) 53 {say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to drag event handler)')} 54 } 55 ); 56 } 57 } 58 function enterElement(event) 59 {event.preventDefault(); 60 event.dataTransfer.items.clear(); 61 if(event.dataTransfer.items.length != dataTypes.length) 62 {say('items.length (ondragenter) : FAIL (items.length should be' + dataTypes.length + ')')} 63 for(var i = 0; i != event.dataTransfer.items.length; i++) 64 {delete event.dataTransfer.items[i]; 65 if(event.dataTransfer.items[i].kind != 'string') 66 {say('Item kind (ondragenter): FAIL (items[' + i + '].kind should be string)')} 67 if(event.dataTransfer.items[i].type != dataTypes[i]) 68 {say('Item type (ondragenter): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 69 event.dataTransfer.items[i].getAsString( 70 function () 71 {if(arguments[0]) 72 {say('getAsString : FAIL (items[' + i + '].getAsString should not reveal data to drag event handler)')} 73 } 74 ); 75 } 76 } 77 function overElement(event) 78 {event.preventDefault(); 79 event.dataTransfer.items.clear(); 80 if(event.dataTransfer.items.length != dataTypes.length) 81 {say('items.length (ondragover) : FAIL (items.length should be' + dataTypes.length + ')')} 82 for(var i = 0; i != event.dataTransfer.items.length; i++) 83 {if(event.dataTransfer.items[i].kind != 'string') 84 {say('Item kind (ondragover): FAIL (items[' + i + '].kind should be string)')} 85 if(event.dataTransfer.items[i].type != dataTypes[i]) 86 {say('Item type (ondragover): 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 dragover event handler)')} 91 } 92 ); 93 } 94 } 95 function dataDrop(event) 96 {e = 0; 97 event.dataTransfer.items.clear(); 98 if(event.dataTransfer.items.length != dataTypes.length) 99 {say('items.length (ondrop) : FAIL (items.length should be' + dataTypes.length + ')')} 100 for(var i = 0; i != event.dataTransfer.items.length; i++) 101 {delete event.dataTransfer.items[i]; 102 if(event.dataTransfer.items[i].kind != 'string') 103 {say('Item kind (ondrop): FAIL (items[' + i + '].kind should be string)')} 104 if(event.dataTransfer.items[i].type != dataTypes[i]) 105 {say('Item type (ondrop): FAIL (items[' + i + '].type should be' + dataTypes[i] + ')')} 106 event.dataTransfer.items[i].getAsString( 107 function () 108 {if(arguments[0] != data[e++]) 109 {say('getAsString : FAIL (items[' + i + '].getAsString should pass' + data[e] + ')')} 110 } 111 ); 112 } 113 document.querySelector('div').setAttribute('style','background-color:' + (result?'green':'red'));} 114 function say(it) 115 {result = false; 116 document.querySelector('pre').appendChild(document.createTextNode(it + '\n'));} 117 ]]> 118 </script> 119 </head> 120 <body onload="document.querySelector('input').select()"> 121 <p><input value="Drag me" ondragstart="start(event)" ondrag="dragElement(event)"/></p> 122 <p>Drag selection above to the navy box below and drop it. Navy box should turn green.</p> 123 <div ondragenter="enterElement(event)" ondragover="overElement(event)" ondrop="dataDrop(event)"/> 124 <pre/> 125 </body> 126 </html>