var multitooltip = function() { var popped = false, animate = false, t = {}, tooltips = [], _currentContent, transitionEvent, tooltipContainer, parent; if (document.body.style['-webkit-transition'] !== undefined) { transitionEvent = 'webkitTransitionEnd'; } else if (document.body.style.MozTransition !== undefined) { transitionEvent = 'transitionend'; } // Get the active tooltip for a layer or create a new one if no tooltip exists. // Hide any tooltips on layers underneath this one. function getTooltip(feature) { var tooltip = document.createElement('div'); tooltip.className = 'map-tooltip'; tooltip.innerHTML = feature; return tooltip; } function remove() { if (this.parentNode) this.parentNode.removeChild(this); } // Hide a given tooltip. function hide(tt) { if (animate && transitionEvent) { // This code assumes that transform-supporting browsers // also support proper events. IE9 does both. bean.add(tt, transitionEvent, remove); tt.className += ' map-fade'; } else { if (tt.parentNode) tt.parentNode.removeChild(tt); } } function on(o) { var content; if (o.e.type === 'mousemove' || !o.e.type) { content = o.content || o.formatter({ format: 'teaser' }, o.data); if (!content || content == _currentContent) return; parent.style.cursor = 'pointer'; _currentContent = content; } else { if (o.e.type === 'click') return; content = o.content || o.formatter({ format: 'full' }, o.data); if (!content) { if (o.e.type && o.e.type.match(/touch/)) { // fallback possible content = o.content || o.formatter({ format: 'teaser' }, o.data); } // but if that fails, return just the same. if (!content) return; } parent.style.cursor = 'pointer'; var tt = tooltipContainer.appendChild(getTooltip(content)); tt.className += ' map-add-popup wax-add-popup'; var close = tt.appendChild(document.createElement('a')); close.href = '#close'; close.className = 'close'; close.innerHTML = 'Close'; popped = true; tooltips.push(tt); bean.add(close, 'touchstart mousedown', function(e) { e.stop(); }); bean.add(close, 'click touchend', (function(tt) { return function(e) { e.stop(); hide(tt); }; })(tt)); } } function off() { parent.style.cursor = 'default'; _currentContent = null; // if (!popped) hide(); } t.parent = function(x) { if (!arguments.length) return parent; parent = x; tooltipContainer = parent.appendChild(document.createElement('div')); tooltipContainer.className = 'tooltip-container'; return t; }; t.animate = function(x) { if (!arguments.length) return animate; animate = x; return t; }; t.events = function() { return { on: on, off: off }; }; return t; };