mirror of
https://github.com/google/blockly.git
synced 2026-01-08 01:20:12 +01:00
Merge pull request #390 from rachel-fenichel/feature/drag_tests
Add a button to randomly click and drag blocks in the playground.
This commit is contained in:
@@ -63,6 +63,7 @@
|
||||
// Depending on the URL argument, render as LTR or RTL.
|
||||
var rtl = (document.location.search == '?rtl');
|
||||
var workspace = null;
|
||||
var fakeDragStack = [];
|
||||
|
||||
function start() {
|
||||
var toolbox = document.getElementById('toolbox');
|
||||
@@ -178,6 +179,64 @@ function airstrike(n) {
|
||||
}
|
||||
}
|
||||
|
||||
function fakeDrag(id, dx, dy, opt_workspace) {
|
||||
var ws = opt_workspace || Blockly.getMainWorkspace();
|
||||
var blockToDrag = ws.getBlockById(id);
|
||||
|
||||
if (!blockToDrag) {
|
||||
fakeDragWrapper();
|
||||
}
|
||||
var blockTop = blockToDrag.svgGroup_.getBoundingClientRect().top;
|
||||
var blockLeft = blockToDrag.svgGroup_.getBoundingClientRect().left;
|
||||
|
||||
// Click somewhere on the block.
|
||||
var mouseDownEvent = new MouseEvent('mousedown',
|
||||
{clientX: blockLeft + 5, clientY: blockTop + 5});
|
||||
blockToDrag.onMouseDown_(mouseDownEvent);
|
||||
|
||||
// Throw in a move for good measure.
|
||||
setTimeout(
|
||||
function() {
|
||||
var mouseMoveEvent = new MouseEvent('mousemove',
|
||||
{clientX: blockLeft + dx,
|
||||
clientY: blockTop + dy});
|
||||
blockToDrag.onMouseMove_(mouseMoveEvent);
|
||||
|
||||
// Drop at dx, dy.
|
||||
setTimeout(
|
||||
function() {
|
||||
var mouseUpEvent = new MouseEvent('mouseup',
|
||||
{clientX: blockLeft + dx,
|
||||
clientY: blockTop + dy});
|
||||
blockToDrag.onMouseUp_(mouseUpEvent);
|
||||
|
||||
setTimeout(fakeDragWrapper(), 100);
|
||||
}, 30);
|
||||
}, 30);
|
||||
};
|
||||
|
||||
function fakeDragWrapper() {
|
||||
var dragInfo = fakeDragStack.pop();
|
||||
if (dragInfo) {
|
||||
fakeDrag(dragInfo.id, dragInfo.dx, dragInfo.dy, dragInfo.workspace);
|
||||
}
|
||||
}
|
||||
|
||||
function fakeManyDrags() {
|
||||
var blockList = workspace.getAllBlocks();
|
||||
for (var i = 0; i < 2 * blockList.length; i++) {
|
||||
fakeDragStack.push(
|
||||
{
|
||||
id: blockList[Math.round(Math.random() * (blockList.length - 1))].id,
|
||||
// Move some blocks up and to the left, but mostly down and to the right.
|
||||
dx: Math.round((Math.random() - 0.25) * 200),
|
||||
dy: Math.round((Math.random() - 0.25) * 200),
|
||||
workspace: workspace
|
||||
});
|
||||
}
|
||||
fakeDragWrapper();
|
||||
}
|
||||
|
||||
function spaghetti(n) {
|
||||
var xml = spaghettiXml;
|
||||
for(var i = 0; i < n; i++) {
|
||||
@@ -591,6 +650,7 @@ h1 {
|
||||
Stress test:
|
||||
<input type="button" value="Airstrike!" onclick="airstrike(100)">
|
||||
<input type="button" value="Spaghetti!" onclick="spaghetti(8)">
|
||||
<input type="button" value="Fake some drags!" onclick="fakeManyDrags()">
|
||||
</p>
|
||||
<p>
|
||||
Log events:
|
||||
|
||||
Reference in New Issue
Block a user