|
714 | 714 | }); |
715 | 715 | if (opts.draggable) { |
716 | 716 | $nodeDiv.on('dragstart', function(event) { |
717 | | - if (/firefox/.test(window.navigator.userAgent.toLowerCase())) { |
718 | | - event.originalEvent.dataTransfer.setData('text/html', 'hack for firefox'); |
| 717 | + var origEvent = event.originalEvent; |
| 718 | + var isFirefox = /firefox/.test(window.navigator.userAgent.toLowerCase()); |
| 719 | + if (isFirefox) { |
| 720 | + origEvent.dataTransfer.setData('text/html', 'hack for firefox'); |
| 721 | + } |
| 722 | + // if users enable zoom or direction options |
| 723 | + if ($nodeDiv.closest('.orgchart').css('transform') !== 'none') { |
| 724 | + var ghostNode, nodeCover; |
| 725 | + if (!document.querySelector('.ghost-node')) { |
| 726 | + ghostNode = document.createElementNS("http://www.w3.org/2000/svg", "svg"); |
| 727 | + ghostNode.classList.add('ghost-node'); |
| 728 | + nodeCover = document.createElementNS('http://www.w3.org/2000/svg','rect'); |
| 729 | + ghostNode.appendChild(nodeCover); |
| 730 | + $nodeDiv.closest('.orgchart').append(ghostNode); |
| 731 | + } else { |
| 732 | + ghostNode = $nodeDiv.closest('.orgchart').children('.ghost-node').get(0); |
| 733 | + nodeCover = $(ghostNode).children().get(0); |
| 734 | + } |
| 735 | + var scale = $nodeDiv.closest('.orgchart').css('transform').match(/-?[\d\.]+/g)[0]; |
| 736 | + ghostNode.setAttribute('width', $nodeDiv.outerWidth(false)); |
| 737 | + ghostNode.setAttribute('height', $nodeDiv.outerHeight(false)); |
| 738 | + nodeCover.setAttribute('x',5 * scale); |
| 739 | + nodeCover.setAttribute('y',5 * scale); |
| 740 | + nodeCover.setAttribute('width', 120 * scale); |
| 741 | + nodeCover.setAttribute('height', 40 * scale); |
| 742 | + nodeCover.setAttribute('rx', 4 * scale); |
| 743 | + nodeCover.setAttribute('ry', 4 * scale); |
| 744 | + nodeCover.setAttribute('stroke-width', 1 * scale); |
| 745 | + if (isFirefox) { // hack for old version of Firefox(< 48.0) |
| 746 | + nodeCover.setAttribute('fill', 'rgb(255, 255, 255)'); |
| 747 | + nodeCover.setAttribute('stroke', 'rgb(191, 0, 0)'); |
| 748 | + var ghostNodeWrapper = document.createElement('img'); |
| 749 | + ghostNodeWrapper.src = 'data:image/svg+xml;utf8,' + (new XMLSerializer()).serializeToString(ghostNode); |
| 750 | + origEvent.dataTransfer.setDragImage(ghostNodeWrapper, origEvent.offsetX * scale, origEvent.offsetY * scale); |
| 751 | + } else { |
| 752 | + origEvent.dataTransfer.setDragImage(ghostNode, origEvent.offsetX * scale, origEvent.offsetY * scale); |
| 753 | + } |
719 | 754 | } |
720 | 755 | var $dragged = $(this); |
721 | 756 | var $dragZone = $dragged.closest('.nodes').siblings().eq(0).find('.node:first'); |
|
0 commit comments