module.exports = function ( handlerFunction ){ var viewer = {}, lastSelectedElement; viewer.handle = function ( selectedElement ){ // Don't display details on a drag event, which will be prevented if ( d3.event.defaultPrevented ) { return; } var isSelection = true; // Deselection of the focused element if ( lastSelectedElement === selectedElement ) { isSelection = false; } if ( handlerFunction instanceof Function ) { if ( isSelection ) { handlerFunction(selectedElement); } else { handlerFunction(undefined); } } if ( isSelection ) { lastSelectedElement = selectedElement; } else { lastSelectedElement = undefined; } }; /** * Resets the displayed information to its default. */ viewer.reset = function (){ if ( lastSelectedElement ) { handlerFunction(undefined); lastSelectedElement = undefined; } }; return viewer; };