All pastes #767468 Raw Edit

Gimme event capturing

public javascript v1 · immutable
·published 2007-11-09 19:51 UTC
rendered paste body
Gimme.ext.captureMouseEvents = function(){	var elem = this.entities[0];	if (typeof elem.setCapture !== 'undefined')	{		elem.setCapture();	}	else	{		if (g_capturing)		{			this.releaseMouseEvents();		}		g_capturing =		{			elem: elem			,reroute: function(e)			{				e.stopPropagation();								var synthEvent = document.createEvent('MouseEvents');				synthEvent.initMouseEvent(					e.type,					true,					true,					window,					1,					e.pageX,					e.pageY,					e.clientX,					e.clientY,					e.ctrlKey,					e.altKey,					e.shiftKey,					e.metaKey,					e.button,					e.relatedTarget				);								document.removeEventListener(e.type, g_capturing.reroute, true);				syntheticEvent.originalTarget = e.target;				elem.dispatchEvent(syntheticEvent);				document.addEventListener(e.type, g_capturing.reroute, true);				delete syntheticEvent.originalTarget;							}		}				document.addEventListener('mouseover', g_capturing.reroute, true);		document.addEventListener('mouseout', g_capturing.reroute, true);		document.addEventListener('mousemove', g_capturing.reroute, true);		document.addEventListener('mouseup', g_capturing.reroute, true);		document.addEventListener('mousedown', g_capturing.reroute, true);		document.addEventListener('click', g_capturing.reroute, true);		document.addEventListener('dblclick', g_capturing.reroute, true);	}};Gimme.ext.releaseMouseEvents = function(){	var elem;	if (g_capturing !== null)	{		elem = g_capturing.elem;		if (typeof elem.releaseCapture !== 'undefined')		{			elem.releaseCapture();		}		else		{			document.removeEventListener('mouseover', g_capturing.reroute, true);			document.removeEventListener('mouseout', g_capturing.reroute, true);			document.removeEventListener('mousemove', g_capturing.reroute, true);			document.removeEventListener('mouseup', g_capturing.reroute, true);			document.removeEventListener('mousedown', g_capturing.reroute, true);			document.removeEventListener('click', g_capturing.reroute, true);			document.removeEventListener('dblclick', g_capturing.reroute, true);		}				g_capturing.elem = g_capturing.reroute = g_capturing = null;	}};