UNPKG

spincycle

Version:

A reactive message router and object manager that lets clients subscribe to object property changes on the server

120 lines (106 loc) 4.92 kB
<link rel="import" href="../bower_components/polymer/polymer.html"> <script src="https://npmcdn.com/contentful@latest/browser-dist/contentful.min.js"></script> <dom-module id="canvas-utils"> <template> </template> <script> canvasUtils = { getClickPosition: function ( e ) { function getPosition( element ) { var xPosition = 0; var yPosition = 0; while (element) { xPosition += (element.offsetLeft - element.scrollLeft + element.clientLeft); yPosition += (element.offsetTop - element.scrollTop + element.clientTop); element = element.offsetParent; } return {x: xPosition, y: yPosition}; } var parentPosition = getPosition( e.currentTarget ); var xPosition = e.clientX - parentPosition.x; var yPosition = e.clientY - parentPosition.y; return {x: xPosition, y: yPosition}; }, addEventListener: function ( canvas, event, thing, cb ) { console.log( 'canvasutils adding thing..' ) console.dir( thing ) if (canvas && canvas.id) { if (!window._cevents) { window._cevents = {} } var canvasevents = window._cevents[ canvas.id ] if (!canvasevents) { canvasevents = {} window._cevents[ canvas.id ] = canvasevents canvas.addEventListener( 'mousemove', function ( e ) { this.handleEnterAndExitThings( e, canvasevents ) }.bind( this ) ) } var eventlist = canvasevents[ event ] if (!eventlist) { eventlist = [] canvasevents[ event ] = eventlist canvas.addEventListener( event, function ( e ) { var pos = this.getClickPosition( e ) for (var i = 0; i < eventlist.length; i++) { var t = eventlist[ i ] if (this.isWithin( pos, t )) { cb( e ) break; } } }.bind( this ) ) } thing._cbs = thing._cbs || {} thing._cbs[event] = cb thing._within = false eventlist.push( thing ) } }, isWithin: function ( pos, t ) { var tw = (t.x + t.width) var th = (t.y + t.height) return (t.x < pos.x && t.y < pos.y && tw > pos.x && th > pos.y) }, handleEnterAndExitThings: function ( e, canvasevents ) { var pos = this.getClickPosition( e ) var enters = canvasevents[ 'mouseenter' ] var outs = canvasevents[ 'mouseout' ] for (var i = 0; i < enters.length; i++) { var ething = enters[ i ] if (this.isWithin( pos, ething ) && !ething._within) { ething._within = true console.dir(ething) ething._cbs['mouseenter']( e ) } } for (var j = 0; j < outs.length; j++) { var othing = outs[ j ] if (!this.isWithin( pos, othing ) && othing._within) { othing._within = false othing._cbs['mouseout']( e ) } } } } </script> </dom-module>