diff --git a/core/blockly.js b/core/blockly.js index 427d45199..3aa2cf908 100644 --- a/core/blockly.js +++ b/core/blockly.js @@ -53,6 +53,7 @@ goog.require('Blockly.WorkspaceSvg'); goog.require('Blockly.constants'); goog.require('Blockly.inject'); goog.require('Blockly.utils'); + goog.require('goog.color'); goog.require('goog.userAgent'); @@ -450,10 +451,14 @@ Blockly.bindEventWithChecks_ = function(node, name, thisObject, func, } }; - node.addEventListener(name, wrapFunc, false); - var bindData = [[node, name, wrapFunc]]; + var bindData = []; + // Don't register the mouse event if an equivalent pointer event is supported. + if ((window && !window.PointerEvent) || !(name in Blockly.Touch.TOUCH_MAP)) { + node.addEventListener(name, wrapFunc, false); + bindData.push([node, name, wrapFunc]); + } - // Add equivalent touch event. + // Add equivalent touch or pointer event. if (name in Blockly.Touch.TOUCH_MAP) { var touchWrapFunc = function(e) { wrapFunc(e); @@ -495,10 +500,13 @@ Blockly.bindEvent_ = function(node, name, thisObject, func) { } }; - node.addEventListener(name, wrapFunc, false); - var bindData = [[node, name, wrapFunc]]; - - // Add equivalent touch event. + var bindData = []; + // Don't register the mouse event if an equivalent pointer event is supported. + if ((window && !window.PointerEvent) || !(name in Blockly.Touch.TOUCH_MAP)) { + node.addEventListener(name, wrapFunc, false); + bindData.push([node, name, wrapFunc]); + } + // Add equivalent touch or pointer event. if (name in Blockly.Touch.TOUCH_MAP) { var touchWrapFunc = function(e) { // Punt on multitouch events. diff --git a/core/touch.js b/core/touch.js index 8aad46b08..78e6f5e72 100644 --- a/core/touch.js +++ b/core/touch.js @@ -48,7 +48,7 @@ Blockly.Touch.touchIdentifier_ = null; * @type {Object} */ Blockly.Touch.TOUCH_MAP = {}; -if (window.PointerEvent) { +if (window && window.PointerEvent) { Blockly.Touch.TOUCH_MAP = { 'mousedown': ['pointerdown'], 'mousemove': ['pointermove'],