Skip to content

Commit 77dc754

Browse files
committed
Fix-bug: if orgchart has been transformed, the ghost image is out of shape when drag&drop
1 parent b5ae4db commit 77dc754

File tree

4 files changed

+50
-4
lines changed

4 files changed

+50
-4
lines changed

bower.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "orgchart",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"homepage": "https://github.com/dabeng/OrgChart",
55
"authors": [
66
"dabeng <dabeng413@gmail.com>"

dist/css/jquery.orgchart.css

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,17 @@
159159
background-color: rgba(238, 217, 54, 0.5);
160160
}
161161

162+
.orgchart .ghost-node {
163+
position: fixed;
164+
left: -10000px;
165+
top: -10000px;
166+
}
167+
168+
.orgchart .ghost-node>* {
169+
fill: #ffffff;
170+
stroke: #bf0000;
171+
}
172+
162173
.orgchart .node.allowedDrop {
163174
border-color: rgba(68, 157, 68, 0.9);
164175
}

dist/js/jquery.orgchart.js

Lines changed: 37 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -714,8 +714,43 @@
714714
});
715715
if (opts.draggable) {
716716
$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+
}
719754
}
720755
var $dragged = $(this);
721756
var $dragZone = $dragged.closest('.nodes').siblings().eq(0).find('.node:first');

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "orgchart",
3-
"version": "1.2.0",
3+
"version": "1.2.1",
44
"description": "Simple and direct organization chart(tree-like hierarchy) plugin based on pure DOM and jQuery.",
55
"main": "./dist/js/jquery.orgchart.js",
66
"style": [

0 commit comments

Comments
 (0)