(id, position, move, end)
| 1113 | })[0]; |
| 1114 | } |
| 1115 | function dragstart(id, position, move, end) { |
| 1116 | return function() { |
| 1117 | var target = this, parent = target.parentNode, event_ = event.of(target, arguments), eventTarget = d3.event.target, eventId = id(), drag = eventId == null ? "drag" : "drag-" + eventId, origin_ = position(parent, eventId), dragged = 0, offset, w = d3.select(d3_window).on(move + "." + drag, moved).on(end + "." + drag, ended), dragRestore = d3_event_dragSuppress(); |
| 1118 | if (origin) { |
| 1119 | offset = origin.apply(target, arguments); |
| 1120 | offset = [ offset.x - origin_[0], offset.y - origin_[1] ]; |
| 1121 | } else { |
| 1122 | offset = [ 0, 0 ]; |
| 1123 | } |
| 1124 | event_({ |
| 1125 | type: "dragstart" |
| 1126 | }); |
| 1127 | function moved() { |
| 1128 | if (!parent) return ended(); |
| 1129 | var p = position(parent, eventId), dx = p[0] - origin_[0], dy = p[1] - origin_[1]; |
| 1130 | dragged |= dx | dy; |
| 1131 | origin_ = p; |
| 1132 | event_({ |
| 1133 | type: "drag", |
| 1134 | x: p[0] + offset[0], |
| 1135 | y: p[1] + offset[1], |
| 1136 | dx: dx, |
| 1137 | dy: dy |
| 1138 | }); |
| 1139 | } |
| 1140 | function ended() { |
| 1141 | w.on(move + "." + drag, null).on(end + "." + drag, null); |
| 1142 | dragRestore(dragged && d3.event.target === eventTarget); |
| 1143 | event_({ |
| 1144 | type: "dragend" |
| 1145 | }); |
| 1146 | } |
| 1147 | }; |
| 1148 | } |
| 1149 | drag.origin = function(x) { |
| 1150 | if (!arguments.length) return origin; |
| 1151 | origin = x; |
no test coverage detected