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
101
102
103
104
105
106
107
108
109
110
111
112
113
|
function dragTarget (target, callbacks) {
if (! target) return;
var base = this;
base.target = target;
base.callbacks = callbacks;
base.init = function(){
base.bind();
}
base.bind = function(){
base.target.addEventListener('dragenter', base.enter, false);
base.target.addEventListener('dragover', base.over, false);
base.target.addEventListener('dragleave', base.leave, false);
base.target.addEventListener('dragend', base.end, false);
base.target.addEventListener('drop', base.drop, false);
}
base.enter = function(e){
base.target.classList.add('over');
if ('enter' in callbacks) {
callbacks.enter(Drag.url);
}
return false;
}
base.over = function(e){
if (e.preventDefault) {
e.preventDefault(); // Necessary. Allows us to drop.
}
if ('over' in callbacks) {
callbacks.over(Drag.url);
}
return false;
}
base.leave = function(e){
base.target.classList.remove('over');
if ('leave' in callbacks) {
callbacks.leave(Drag.url);
}
return false;
}
base.end = function(e){
base.target.classList.remove('over');
if ('leave' in callbacks) {
callbacks.leave(Drag.url);
}
return false;
}
base.drop = function(e){
base.target.classList.remove('over');
e.stopPropagation(); // stops the browser from redirecting.
e.preventDefault();
if ('drop' in callbacks) {
if (e.dataTransfer) {
var url = e.dataTransfer.getData("url");
if (url) {
callbacks.drop(url);
}
} else {
callbacks.drop(Drag.url);
}
}
return false;
}
base.init();
};
window.Drag = {
'url': "",
'bindImages': function (){
$('img.unbound').each(function(img){
this.addEventListener('dragstart', Drag.start, false);
$(this).removeClass('unbound');
});
},
'start': function(e){
if (this.src) {
Drag.url = this.src;
}
}
}
$(function(){
// dragging images into the manual fave palette
var palette = document.getElementById("manual-palette");
var paletteButton = document.getElementById("manual-palette-button");
var paletteTimeout = null;
var paletteCallbacks = {
'enter': function() {
if (paletteTimeout) clearTimeout(paletteTimeout);
manPaletteShow();
},
'leave': function() {
if (paletteTimeout) clearTimeout(paletteTimeout);
paletteTimeout = setTimeout(manPaletteHideUnlessLocked, 500);
},
'drop': function (url) {
if (paletteTimeout) clearTimeout(paletteTimeout);
addManualFav(url);
}
};
Drag.manualPalette = new dragTarget (palette, paletteCallbacks);
Drag.manualPaletteButton = new dragTarget (paletteButton, paletteCallbacks);
// dragging images directly into the chatbox (fixes chrome and safari)
if ($.browser.mozilla) return;
var msgInput = document.getElementById("msgInput");
Drag.chatbox = new dragTarget (msgInput, {
"drop": function(url) {
msgInput.value += " " + url;
msgInput.value += " ";
msgInput.focus();
}
});
});
|