|
1116 | 1116 | } |
1117 | 1117 | function dragstart(id, position, subject, move, end) { |
1118 | 1118 | return function() { |
1119 | | - var element = this, parent = element.parentNode, dispatch = event.of(element, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragTarget = d3.event.target, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId); |
| 1119 | + var that = this, target = d3.event.target, parent = that.parentNode, dispatch = event.of(that, arguments), dragged = 0, dragId = id(), dragName = ".drag" + (dragId == null ? "" : "-" + dragId), dragOffset, dragSubject = d3.select(subject()).on(move + dragName, moved).on(end + dragName, ended), dragRestore = d3_event_dragSuppress(), position0 = position(parent, dragId); |
1120 | 1120 | if (origin) { |
1121 | | - dragOffset = origin.apply(element, arguments); |
| 1121 | + dragOffset = origin.apply(that, arguments); |
1122 | 1122 | dragOffset = [ dragOffset.x - position0[0], dragOffset.y - position0[1] ]; |
1123 | 1123 | } else { |
1124 | 1124 | dragOffset = [ 0, 0 ]; |
|
1144 | 1144 | function ended() { |
1145 | 1145 | if (!position(parent, dragId)) return; |
1146 | 1146 | dragSubject.on(move + dragName, null).on(end + dragName, null); |
1147 | | - dragRestore(dragged && d3.event.target === dragTarget); |
| 1147 | + dragRestore(dragged && d3.event.target === target); |
1148 | 1148 | dispatch({ |
1149 | 1149 | type: "dragend" |
1150 | 1150 | }); |
|
1218 | 1218 | } |
1219 | 1219 | zoom.event = function(g) { |
1220 | 1220 | g.each(function() { |
1221 | | - var event_ = event.of(this, arguments), view1 = view; |
| 1221 | + var dispatch = event.of(this, arguments), view1 = view; |
1222 | 1222 | if (d3_transitionInheritId) { |
1223 | 1223 | d3.select(this).transition().each("start.zoom", function() { |
1224 | 1224 | view = this.__chart__ || { |
1225 | 1225 | x: 0, |
1226 | 1226 | y: 0, |
1227 | 1227 | k: 1 |
1228 | 1228 | }; |
1229 | | - zoomstarted(event_); |
| 1229 | + zoomstarted(dispatch); |
1230 | 1230 | }).tween("zoom:zoom", function() { |
1231 | 1231 | var dx = size[0], dy = size[1], cx = dx / 2, cy = dy / 2, i = d3.interpolateZoom([ (cx - view.x) / view.k, (cy - view.y) / view.k, dx / view.k ], [ (cx - view1.x) / view1.k, (cy - view1.y) / view1.k, dx / view1.k ]); |
1232 | 1232 | return function(t) { |
|
1236 | 1236 | y: cy - l[1] * k, |
1237 | 1237 | k: k |
1238 | 1238 | }; |
1239 | | - zoomed(event_); |
| 1239 | + zoomed(dispatch); |
1240 | 1240 | }; |
1241 | 1241 | }).each("end.zoom", function() { |
1242 | | - zoomended(event_); |
| 1242 | + zoomended(dispatch); |
1243 | 1243 | }); |
1244 | 1244 | } else { |
1245 | 1245 | this.__chart__ = view; |
1246 | | - zoomstarted(event_); |
1247 | | - zoomed(event_); |
1248 | | - zoomended(event_); |
| 1246 | + zoomstarted(dispatch); |
| 1247 | + zoomed(dispatch); |
| 1248 | + zoomended(dispatch); |
1249 | 1249 | } |
1250 | 1250 | }); |
1251 | 1251 | }; |
|
1328 | 1328 | return (y - view.y) / view.k; |
1329 | 1329 | }).map(y0.invert)); |
1330 | 1330 | } |
1331 | | - function zoomstarted(event) { |
1332 | | - event({ |
| 1331 | + function zoomstarted(dispatch) { |
| 1332 | + dispatch({ |
1333 | 1333 | type: "zoomstart" |
1334 | 1334 | }); |
1335 | 1335 | } |
1336 | | - function zoomed(event) { |
| 1336 | + function zoomed(dispatch) { |
1337 | 1337 | rescale(); |
1338 | | - event({ |
| 1338 | + dispatch({ |
1339 | 1339 | type: "zoom", |
1340 | 1340 | scale: view.k, |
1341 | 1341 | translate: [ view.x, view.y ] |
1342 | 1342 | }); |
1343 | 1343 | } |
1344 | | - function zoomended(event) { |
1345 | | - event({ |
| 1344 | + function zoomended(dispatch) { |
| 1345 | + dispatch({ |
1346 | 1346 | type: "zoomend" |
1347 | 1347 | }); |
1348 | 1348 | } |
1349 | 1349 | function mousedowned() { |
1350 | | - var target = this, event_ = event.of(target, arguments), eventTarget = d3.event.target, dragged = 0, w = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), l = location(d3.mouse(target)), dragRestore = d3_event_dragSuppress(); |
1351 | | - d3_selection_interrupt.call(target); |
1352 | | - zoomstarted(event_); |
| 1350 | + var that = this, target = d3.event.target, dispatch = event.of(that, arguments), dragged = 0, subject = d3.select(d3_window).on(mousemove, moved).on(mouseup, ended), location0 = location(d3.mouse(that)), dragRestore = d3_event_dragSuppress(); |
| 1351 | + d3_selection_interrupt.call(that); |
| 1352 | + zoomstarted(dispatch); |
1353 | 1353 | function moved() { |
1354 | 1354 | dragged = 1; |
1355 | | - translateTo(d3.mouse(target), l); |
1356 | | - zoomed(event_); |
| 1355 | + translateTo(d3.mouse(that), location0); |
| 1356 | + zoomed(dispatch); |
1357 | 1357 | } |
1358 | 1358 | function ended() { |
1359 | | - w.on(mousemove, d3_window === target ? mousewheelreset : null).on(mouseup, null); |
1360 | | - dragRestore(dragged && d3.event.target === eventTarget); |
1361 | | - zoomended(event_); |
| 1359 | + subject.on(mousemove, d3_window === that ? mousewheelreset : null).on(mouseup, null); |
| 1360 | + dragRestore(dragged && d3.event.target === target); |
| 1361 | + zoomended(dispatch); |
1362 | 1362 | } |
1363 | 1363 | } |
1364 | 1364 | function touchstarted() { |
1365 | | - var target = this, event_ = event.of(target, arguments), locations0 = {}, distance0 = 0, scale0, eventId = d3.event.changedTouches[0].identifier, touchmove = "touchmove.zoom-" + eventId, touchend = "touchend.zoom-" + eventId, w = d3.select(d3_window).on(touchmove, moved).on(touchend, ended), t = d3.select(target).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress(); |
1366 | | - d3_selection_interrupt.call(target); |
| 1365 | + var that = this, dispatch = event.of(that, arguments), locations0 = {}, distance0 = 0, scale0, zoomName = ".zoom-" + d3.event.changedTouches[0].identifier, touchmove = "touchmove" + zoomName, touchend = "touchend" + zoomName, target = d3.select(d3.event.target).on(touchmove, moved).on(touchend, ended), subject = d3.select(that).on(mousedown, null).on(touchstart, started), dragRestore = d3_event_dragSuppress(); |
| 1366 | + d3_selection_interrupt.call(that); |
1367 | 1367 | started(); |
1368 | | - zoomstarted(event_); |
| 1368 | + zoomstarted(dispatch); |
1369 | 1369 | function relocate() { |
1370 | | - var touches = d3.touches(target); |
| 1370 | + var touches = d3.touches(that); |
1371 | 1371 | scale0 = view.k; |
1372 | 1372 | touches.forEach(function(t) { |
1373 | 1373 | if (t.identifier in locations0) locations0[t.identifier] = location(t); |
|
1386 | 1386 | scaleTo(view.k * 2); |
1387 | 1387 | translateTo(p, l); |
1388 | 1388 | d3_eventPreventDefault(); |
1389 | | - zoomed(event_); |
| 1389 | + zoomed(dispatch); |
1390 | 1390 | } |
1391 | 1391 | touchtime = now; |
1392 | 1392 | } else if (touches.length > 1) { |
|
1395 | 1395 | } |
1396 | 1396 | } |
1397 | 1397 | function moved() { |
1398 | | - var touches = d3.touches(target), p0, l0, p1, l1; |
| 1398 | + var touches = d3.touches(that), p0, l0, p1, l1; |
1399 | 1399 | for (var i = 0, n = touches.length; i < n; ++i, l1 = null) { |
1400 | 1400 | p1 = touches[i]; |
1401 | 1401 | if (l1 = locations0[p1.identifier]) { |
|
1411 | 1411 | } |
1412 | 1412 | touchtime = null; |
1413 | 1413 | translateTo(p0, l0); |
1414 | | - zoomed(event_); |
| 1414 | + zoomed(dispatch); |
1415 | 1415 | } |
1416 | 1416 | function ended() { |
1417 | 1417 | if (d3.event.touches.length) { |
|
1423 | 1423 | return void relocate(); |
1424 | 1424 | } |
1425 | 1425 | } |
1426 | | - w.on(touchmove, null).on(touchend, null); |
1427 | | - t.on(mousedown, mousedowned).on(touchstart, touchstarted); |
| 1426 | + target.on(zoomName, null); |
| 1427 | + subject.on(mousedown, mousedowned).on(touchstart, touchstarted); |
1428 | 1428 | dragRestore(); |
1429 | | - zoomended(event_); |
| 1429 | + zoomended(dispatch); |
1430 | 1430 | } |
1431 | 1431 | } |
1432 | 1432 | function mousewheeled() { |
1433 | | - var event_ = event.of(this, arguments); |
| 1433 | + var dispatch = event.of(this, arguments); |
1434 | 1434 | if (mousewheelTimer) clearTimeout(mousewheelTimer); else d3_selection_interrupt.call(this), |
1435 | | - zoomstarted(event_); |
| 1435 | + zoomstarted(dispatch); |
1436 | 1436 | mousewheelTimer = setTimeout(function() { |
1437 | 1437 | mousewheelTimer = null; |
1438 | | - zoomended(event_); |
| 1438 | + zoomended(dispatch); |
1439 | 1439 | }, 50); |
1440 | 1440 | d3_eventPreventDefault(); |
1441 | 1441 | var point = center || d3.mouse(this); |
1442 | 1442 | if (!translate0) translate0 = location(point); |
1443 | 1443 | scaleTo(Math.pow(2, d3_behavior_zoomDelta() * .002) * view.k); |
1444 | 1444 | translateTo(point, translate0); |
1445 | | - zoomed(event_); |
| 1445 | + zoomed(dispatch); |
1446 | 1446 | } |
1447 | 1447 | function mousewheelreset() { |
1448 | 1448 | translate0 = null; |
1449 | 1449 | } |
1450 | 1450 | function dblclicked() { |
1451 | | - var event_ = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2; |
1452 | | - zoomstarted(event_); |
| 1451 | + var dispatch = event.of(this, arguments), p = d3.mouse(this), l = location(p), k = Math.log(view.k) / Math.LN2; |
| 1452 | + zoomstarted(dispatch); |
1453 | 1453 | scaleTo(Math.pow(2, d3.event.shiftKey ? Math.ceil(k) - 1 : Math.floor(k) + 1)); |
1454 | 1454 | translateTo(p, l); |
1455 | | - zoomed(event_); |
1456 | | - zoomended(event_); |
| 1455 | + zoomed(dispatch); |
| 1456 | + zoomended(dispatch); |
1457 | 1457 | } |
1458 | 1458 | return d3.rebind(zoom, event, "on"); |
1459 | 1459 | }; |
|
0 commit comments