Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
88 changes: 88 additions & 0 deletions html/editing/dnd/layoutshift/001.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
<!DOCTYPE html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="../resources/test-helper.js"></script>
<head>
<title>Causing a layout shift on the canvas element during drag and drop
should not prevent the drag</title>
<style>
p {
width: 220px;
margin: 0;
white-space: nowrap;
}

canvas {
display: inline-block;
vertical-align: top;
}

div {
height: 100px;
width: 100px;
padding: 20px;
background-color: silver;
}
</style>
<script>
function sourceDragStart(event) {
event.dataTransfer.effectAllowed = 'copy';
event.dataTransfer.setData('text/uri-list', event.target.toDataURL(
'image/png'));

var insertedCanvas = document.createElement('canvas');
insertedCanvas.width = event.target.width;
insertedCanvas.height = event.target.height;
var insertedContext = insertedCanvas.getContext('2d');
insertedContext.fillStyle = 'lime';
insertedContext.fillRect(0, 0, insertedCanvas.width,
insertedCanvas.height);
event.target.parentElement.insertBefore(insertedCanvas, event.target);
}
function addImage(event) {
var c = document.createElement('img');
c.setAttribute('src', event.dataTransfer.getData('text/uri-list').replace(
/\r\n$/, ''));
document.querySelector('div').appendChild(c);
}
</script>
</head>
<body>
<p>
<canvas id="source" width="100" height="100" draggable="true"
ondragstart="sourceDragStart(event)">Canvas</canvas>
</p>
<div ondragenter="event.preventDefault()" ondragover="event.preventDefault()"
ondrop="addImage(event)"></div>
<script>
var canvas = document.querySelector('#source');
var 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();
}
async function test() {
const canvas = document.querySelector('#source');
const div = document.querySelector('div');
function onDropCallBack(event) {
const img = document.querySelector('img');
assert_equals(img.src, canvas.toDataURL('image/png'));
return true;
}
dragDropTestWithLayoutShift(canvas, div, onDropCallBack,
'Dragging and dropping an element that gets shifted right by a different canvas on dragStart should be possible'
);
}
test();
</script>
</body>
</html>
69 changes: 69 additions & 0 deletions html/editing/dnd/remove/001.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
<!doctype html>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script src="/resources/testdriver.js"></script>
<script src="/resources/testdriver-vendor.js"></script>
<script src="/resources/testdriver-actions.js"></script>
<script src="../resources/test-helper.js"></script>
<head>
<title>Removing canvas element during drag and drop</title>
<style>
div {
height: 100px;
width: 100px;
padding: 20px;
background-color: silver;
}
</style>
<script>
function sourceDragStart(event) {
event.dataTransfer.effectAllowed = 'copy';
event.dataTransfer.setData('text/uri-list', document.querySelector(
'canvas').toDataURL('image/png'));
event.target.remove();
}

function addImage(event) {
var c = document.createElement('img');
c.setAttribute('src', event.dataTransfer.getData('text/uri-list').replace(
/\r\n$/, ''));
document.querySelector('div').appendChild(c);
}
</script>
</head>
<body>
<p>
<canvas width="100" height="100" draggable="true"
ondragstart="sourceDragStart(event)">Canvas</canvas>
</p>
<div ondragenter="event.preventDefault()" ondragover="event.preventDefault()"
ondrop="addImage(event)"></div>
<script>
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();
}
async function test() {
const canvas = document.querySelector('canvas');
const div = document.querySelector('div');

function onDropCallBack(event) {
const img = document.querySelector('img');
assert_equals(img.src, canvas.toDataURL('image/png'));
return true;
}
dragDropTestWithLayoutShift(canvas, div, onDropCallBack,
'Dragging and dropping an element that gets removed on dragStart should be possible');
}
test();
</script>
</body>
</html>
43 changes: 0 additions & 43 deletions html/editing/dnd/remove/001.xhtml

This file was deleted.

57 changes: 57 additions & 0 deletions html/editing/dnd/remove/023-manual.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
<!doctype html>
<html>
<head>
<title>Remove canvas and set different drag image during dragstart</title>
<style>
canvas {
border: 2px solid black;
}
div {
height: 100px;
width: 100px;
padding: 20px;
background-color: silver;
}
</style>
<script>
function sourceDragStart(event) {
event.dataTransfer.effectAllowed = 'copy';
var img = new Image();
// Base64 encoding of a green circle.
img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAGQAAABkCAYAAABw4pVUAAAEq0lEQVR42u1dvU4bQRAeR0RCCilSp0peIoKGB4DSXYRDlcZlFClKBI4bB/kV/AymIDwCTahiicaioEOxhCsjWVTJziyKMfYZn+9ud3bvG2mEZB13u9+nndmf2Rki7fKFXtEBbVKD9o22jB4bPaND6hm9Mjo0enevw/vfevKMfbYl/8vv4HdBUkvFALhltG2A7dN3+pur8jv53fwN/hZkjjRo3eiuAatjdJA7CcnkDOSb/G1uQ6mFzUeDagaQrvl764yEJOU22LbUymXaGrRhOt40OvJOQvLIGUkbP9GLeIn4SM9NJ+tOTVI+Jq0ubY9sVFRNxy6DIWKWmEvpQ/ByQNumI+fBEjHrZ86lT8HJV3ptGn8aDRGzxJxKHwMZFe9Mg6+jJWNCyrX0VbUc0nuj4+jJmPiWsfRZodN+ZvSoNETMjpYjwUCFfKaXpjEnpSVjQsqJYOF5ZLw1elF6MiakXAgmnpw378DegIgZUm4EGw8jA2QsIuUbvXHpM2CmljFfhfsUO5uCA0/j6AudfZV5arv6WuVHcYs+ALwqKTkvHnmLoEwr8CJW9Llts9iNwvj3plzsfeWyIRnzrq37kfIzq6naBpA5a6bzlJgOl/SMkl+rklEFgIX5k5THwTYgIdwzcP2jhM/o19KsOeoArnBS6suaqo2gQnXCJWSwXNwXB4gBMFekNBeTwSGUmiMK4yNktDhsleNaAZRrUvYWmasuQHJOSDdpdKyriEIvo9maexWC70gAIF/bKTvzzFUH4HgbJZ3HdFSw9vC6lfKHpq7X8X07AOOblK2HhLQBindC2g/9Rx+gePcj/cnqHIDoUFm1c9gjwNAy/d0kyXIAMLSYrQ8kqScAhhbH3iLJBwIwtBByTJKkBWBoIeSMJHMOwNBCyG+SdEYAQ4tTvyLJMQUwtBAyJEn8BTC0EHIHQhQSApOlzGTBqaty6jzVAhhaCOlhYahuYYitE02EHGNzURchLZItX4ChhZB9HFBpUjmgwhGuHv0feI0gBw1T3j7CgHT5jzYC5XQRsjUdSsrhjADGl7ka0EylBgRb+ySkMy9rww7A8Waududf2MH9Qh9k3CbXLsGVNh/mqrvojuEeQHI+Qmq4Fq1ndIyeruaDxAEuCWk+ncmB0z3gepubtQenMUHyGTWELJl8xk6B15CeqVAyLtPXtUICsyJnVivWs+J0dAAwbzLOkQRTk2YuKsapTQFkXqPjlDILEinnRcZ1fpXdkGo866xqnH9FNyTjz0JIQZXcuPQCAE5rqo6oMEFBl7RknBRfTg8lj5Yl48JdGT0ueIWiYIvIuHFfPg9l85LJcF42b+JTUFjysZnyVlhy2qfA0asovTo9+0JxYnWC8t0KBQXuFYrdkIy3mBj3LbeNQrejZTuqOlbcl8znGTqcfjXoM3pboqgaPhEPxda1qgcVYsRt5TanDkgISWzcV1N1hCS3jdu4dNxUDMIhlBzXysHGGspkcBtsW2pPh3fGLrZ2ya5cXHFp0qxJ6si3E68EQCpy344vQRZxO5jfye+2d/oqgHsV02Z3lvcl9QTnA+EkLZw5h9MZcY4pTvxldXj/W0+esc+25H/5HQGYon+Q5f+MwFz+8QAAAABJRU5ErkJggg==";
event.dataTransfer.setDragImage(img, 50, 50);
event.target.remove();
}

function addImage(event) {
var img = document.createElement('img');
img.setAttribute('src', event.dataTransfer.getData('text/uri-list').replace(
/\r\n$/, ''));
document.querySelector('div').appendChild(img);
}
</script>
</head>
<body>
<p>Drag the canvas (navy/white pattern). During the drag, you should see a green circle drag image
(not the original navy/white pattern).</p>
<p>
<canvas id="dragSource" width="100" height="100" draggable="true"
ondragstart="sourceDragStart(event)">Canvas</canvas>
</p>
<script>
// Draw navy/white concentric squares on the original canvas
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();
}
</script>
</body>
</html>
Loading
Loading