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 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(); } }); });