summaryrefslogtreecommitdiff
path: root/static/js/src/drag.js
blob: e5196706237656e106a7ad04e5c0ad788506bfd0 (plain)
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
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.imgSrc);
		}
		return false;
	}
	base.over = function(e){
		if (e.preventDefault) {
			e.preventDefault(); // Necessary. Allows us to drop.
		}
		if ('over' in callbacks) {
			callbacks.over(Drag.imgSrc);
		}
		return false;
	}
	base.leave = function(e){
		base.target.classList.remove('over');
		if ('leave' in callbacks) {
			callbacks.leave(Drag.imgSrc);
		}
		return false;
	}
	base.end = function(e){
		base.target.classList.remove('over');
		if ('leave' in callbacks) {
			callbacks.leave(Drag.imgSrc);
		}
		return false;
	}
	base.drop = function(e){
		base.target.classList.remove('over');
		if (e.stopPropagation) {
			e.stopPropagation(); // stops the browser from redirecting.
		}
		if (e.preventDefault) {
			e.preventDefault();
		}
		if ('drop' in callbacks) {
			callbacks.drop(Drag.imgSrc);
		}
		return false;
	}
	base.init();
};

window.Drag = {
	'imgSrc': "",
	'bindImages': function (){
		$('.unbound').each(function(index,img){
			img.addEventListener('dragstart', Drag.start, false);
			$(this).removeClass('unbound');
		});
	},
	'start': function(e){
		if (this.src) {
			Drag.imgSrc = this.src;
		}
	}
}

$(function(){
	// dragging images into the manual fave palette
	var palette = document.getElementById("manual-palette");
	var paletteButton = document.getElementById("manual-palette-button");
	var paletteCallbacks = {
		'enter': function() {
			manPaletteShow();
		},
		'leave': function() {
			manPaletteHide();
		},
		'drop': function (url) {
			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();
		}
	});
});