@@ 1441-1517 (lines=77) @@ | ||
1438 | ||
1439 | }, |
|
1440 | ||
1441 | _generatePosition: function(event) { |
|
1442 | ||
1443 | var containment, co, top, left, |
|
1444 | o = this.options, |
|
1445 | scroll = this.cssPosition === "absolute" && !( this.scrollParent[ 0 ] !== document && $.contains( this.scrollParent[ 0 ], this.offsetParent[ 0 ] ) ) ? this.offsetParent : this.scrollParent, |
|
1446 | pageX = event.pageX, |
|
1447 | pageY = event.pageY; |
|
1448 | ||
1449 | //Cache the scroll |
|
1450 | if (!this.offset.scroll) { |
|
1451 | this.offset.scroll = {top : scroll.scrollTop(), left : scroll.scrollLeft()}; |
|
1452 | } |
|
1453 | ||
1454 | /* |
|
1455 | * - Position constraining - |
|
1456 | * Constrain the position to a mix of grid, containment. |
|
1457 | */ |
|
1458 | ||
1459 | // If we are not dragging yet, we won't check for options |
|
1460 | if ( this.originalPosition ) { |
|
1461 | if ( this.containment ) { |
|
1462 | if ( this.relative_container ){ |
|
1463 | co = this.relative_container.offset(); |
|
1464 | containment = [ |
|
1465 | this.containment[ 0 ] + co.left, |
|
1466 | this.containment[ 1 ] + co.top, |
|
1467 | this.containment[ 2 ] + co.left, |
|
1468 | this.containment[ 3 ] + co.top |
|
1469 | ]; |
|
1470 | } |
|
1471 | else { |
|
1472 | containment = this.containment; |
|
1473 | } |
|
1474 | ||
1475 | if(event.pageX - this.offset.click.left < containment[0]) { |
|
1476 | pageX = containment[0] + this.offset.click.left; |
|
1477 | } |
|
1478 | if(event.pageY - this.offset.click.top < containment[1]) { |
|
1479 | pageY = containment[1] + this.offset.click.top; |
|
1480 | } |
|
1481 | if(event.pageX - this.offset.click.left > containment[2]) { |
|
1482 | pageX = containment[2] + this.offset.click.left; |
|
1483 | } |
|
1484 | if(event.pageY - this.offset.click.top > containment[3]) { |
|
1485 | pageY = containment[3] + this.offset.click.top; |
|
1486 | } |
|
1487 | } |
|
1488 | ||
1489 | if(o.grid) { |
|
1490 | //Check for grid elements set to 0 to prevent divide by 0 error causing invalid argument errors in IE (see ticket #6950) |
|
1491 | top = o.grid[1] ? this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1] : this.originalPageY; |
|
1492 | pageY = containment ? ((top - this.offset.click.top >= containment[1] || top - this.offset.click.top > containment[3]) ? top : ((top - this.offset.click.top >= containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; |
|
1493 | ||
1494 | left = o.grid[0] ? this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0] : this.originalPageX; |
|
1495 | pageX = containment ? ((left - this.offset.click.left >= containment[0] || left - this.offset.click.left > containment[2]) ? left : ((left - this.offset.click.left >= containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; |
|
1496 | } |
|
1497 | ||
1498 | } |
|
1499 | ||
1500 | return { |
|
1501 | top: ( |
|
1502 | pageY - // The absolute mouse position |
|
1503 | this.offset.click.top - // Click offset (relative to the element) |
|
1504 | this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent |
|
1505 | this.offset.parent.top + // The offsetParent's offset without borders (offset + border) |
|
1506 | ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : this.offset.scroll.top ) |
|
1507 | ), |
|
1508 | left: ( |
|
1509 | pageX - // The absolute mouse position |
|
1510 | this.offset.click.left - // Click offset (relative to the element) |
|
1511 | this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent |
|
1512 | this.offset.parent.left + // The offsetParent's offset without borders (offset + border) |
|
1513 | ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : this.offset.scroll.left ) |
|
1514 | ) |
|
1515 | }; |
|
1516 | ||
1517 | }, |
|
1518 | ||
1519 | _clear: function() { |
|
1520 | this.helper.removeClass("ui-draggable-dragging"); |
|
@@ 4559-4624 (lines=66) @@ | ||
4556 | ||
4557 | }, |
|
4558 | ||
4559 | _generatePosition: function(event) { |
|
4560 | ||
4561 | var top, left, |
|
4562 | o = this.options, |
|
4563 | pageX = event.pageX, |
|
4564 | pageY = event.pageY, |
|
4565 | scroll = this.cssPosition === "absolute" && !(this.scrollParent[0] !== document && $.contains(this.scrollParent[0], this.offsetParent[0])) ? this.offsetParent : this.scrollParent, scrollIsRootNode = (/(html|body)/i).test(scroll[0].tagName); |
|
4566 | ||
4567 | // This is another very weird special case that only happens for relative elements: |
|
4568 | // 1. If the css position is relative |
|
4569 | // 2. and the scroll parent is the document or similar to the offset parent |
|
4570 | // we have to refresh the relative offset during the scroll so there are no jumps |
|
4571 | if(this.cssPosition === "relative" && !(this.scrollParent[0] !== document && this.scrollParent[0] !== this.offsetParent[0])) { |
|
4572 | this.offset.relative = this._getRelativeOffset(); |
|
4573 | } |
|
4574 | ||
4575 | /* |
|
4576 | * - Position constraining - |
|
4577 | * Constrain the position to a mix of grid, containment. |
|
4578 | */ |
|
4579 | ||
4580 | if(this.originalPosition) { //If we are not dragging yet, we won't check for options |
|
4581 | ||
4582 | if(this.containment) { |
|
4583 | if(event.pageX - this.offset.click.left < this.containment[0]) { |
|
4584 | pageX = this.containment[0] + this.offset.click.left; |
|
4585 | } |
|
4586 | if(event.pageY - this.offset.click.top < this.containment[1]) { |
|
4587 | pageY = this.containment[1] + this.offset.click.top; |
|
4588 | } |
|
4589 | if(event.pageX - this.offset.click.left > this.containment[2]) { |
|
4590 | pageX = this.containment[2] + this.offset.click.left; |
|
4591 | } |
|
4592 | if(event.pageY - this.offset.click.top > this.containment[3]) { |
|
4593 | pageY = this.containment[3] + this.offset.click.top; |
|
4594 | } |
|
4595 | } |
|
4596 | ||
4597 | if(o.grid) { |
|
4598 | top = this.originalPageY + Math.round((pageY - this.originalPageY) / o.grid[1]) * o.grid[1]; |
|
4599 | pageY = this.containment ? ( (top - this.offset.click.top >= this.containment[1] && top - this.offset.click.top <= this.containment[3]) ? top : ((top - this.offset.click.top >= this.containment[1]) ? top - o.grid[1] : top + o.grid[1])) : top; |
|
4600 | ||
4601 | left = this.originalPageX + Math.round((pageX - this.originalPageX) / o.grid[0]) * o.grid[0]; |
|
4602 | pageX = this.containment ? ( (left - this.offset.click.left >= this.containment[0] && left - this.offset.click.left <= this.containment[2]) ? left : ((left - this.offset.click.left >= this.containment[0]) ? left - o.grid[0] : left + o.grid[0])) : left; |
|
4603 | } |
|
4604 | ||
4605 | } |
|
4606 | ||
4607 | return { |
|
4608 | top: ( |
|
4609 | pageY - // The absolute mouse position |
|
4610 | this.offset.click.top - // Click offset (relative to the element) |
|
4611 | this.offset.relative.top - // Only for relative positioned nodes: Relative offset from element to offset parent |
|
4612 | this.offset.parent.top + // The offsetParent's offset without borders (offset + border) |
|
4613 | ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollTop() : ( scrollIsRootNode ? 0 : scroll.scrollTop() ) )) |
|
4614 | ), |
|
4615 | left: ( |
|
4616 | pageX - // The absolute mouse position |
|
4617 | this.offset.click.left - // Click offset (relative to the element) |
|
4618 | this.offset.relative.left - // Only for relative positioned nodes: Relative offset from element to offset parent |
|
4619 | this.offset.parent.left + // The offsetParent's offset without borders (offset + border) |
|
4620 | ( ( this.cssPosition === "fixed" ? -this.scrollParent.scrollLeft() : scrollIsRootNode ? 0 : scroll.scrollLeft() )) |
|
4621 | ) |
|
4622 | }; |
|
4623 | ||
4624 | }, |
|
4625 | ||
4626 | _rearrange: function(event, i, a, hardRefresh) { |
|
4627 |