-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdnd-factory-4.js
100 lines (89 loc) · 3.04 KB
/
dnd-factory-4.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
window.$dndFactory = (function() {
return {
'create': function() {
var pub = {};
var me = {
dragId: null,
elDragzoneId: null,
};
me.createChild = function(childDragId) {
var childDragId = childDragId;
return {
rawDragStart: function(ev) {
ev.dataTransfer.effectAllowed = "move";
me.onDragStart(childDragId);
},
rawDragEnd: function(ev) {
me.onDragEnd(childDragId);
},
rawDragEnter: function(ev) {
ev.preventDefault();
me.onDragEnter(childDragId);
},
rawDragOver: function(ev) {
ev.preventDefault();
ev.dataTransfer.dropEffect = "move";
},
rawDrop: function(ev) {
ev.preventDefault();
me.onDrop(childDragId);
},
wireDragHandlers: function(el) {
el.addEventListener('dragstart', this.rawDragStart, false);
el.addEventListener('dragend', this.rawDragEnd, false);
el.addEventListener('dragenter', this.rawDragEnter, false);
el.addEventListener('dragover', this.rawDragOver, false);
el.addEventListener('drop', this.rawDrop, false);
},
};
};
me.onDragStart = function(runnerDragId) {
console.log("onDragStart for " + runnerDragId);
};
me.onDragEnter = function(bystanderDragId) {
console.log("onDragEnter on " + bystanderDragId);
};
me.onDrop = function(bystanderDragId) {
console.log("onDrop on " + bystanderDragId);
};
me.onDragEnd = function(runnerDragId) {
console.log("onDragEnd for " + runnerDragId);
};
me.onDragOutside = function() {
console.log("onDragOutside");
};
me.getElDragzone = function() {
return document.getElementById(me.elDragzoneId);
};
me.enableDragzone = function() {
var elDragzone = me.getElDragzone();
elDragzone.classList.remove('dragzone-disabled');
elDragzone.classList.add('dragzone-enabled');
me.dragEnableChangeListener && me.dragEnableChangeListener(true);
}
/*
* Public functions
*/
pub.registerDraggableChild = function(el, childDragId) {
var child = me.createChild(childDragId);
child.wireDragHandlers(el);
};
pub.registerDragZone = function(elDragzoneId) {
me.elDragzoneId = elDragzoneId;
var elDragzone = me.getElDragzone();
elDragzone.classList.add('dragzone');
me.enableDragzone();
elDragzone.addEventListener('dragleave', function(ev) {
var zone = elDragzone.getBoundingClientRect();
if ( ev.clientY < zone.top || ev.clientY > zone.bottom || ev.clientX < zone.left || ev.clientX > zone.right) {
me.onDragOutside();
}
}, false);
};
pub.registerDragIdListener = function(listener) {
me.dragIdChangeListener = listener;
};
return pub;
}
};
})();