(function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module unless amdModuleId is set define(["tooltipster"], function (a0) { return (factory(a0)); }); } else if (typeof exports === 'object') { // Node. Does not work with strict CommonJS, but // only CommonJS-like environments that support module.exports, // like Node. module.exports = factory(require("tooltipster")); } else { factory(jQuery); } }(this, function ($) { (function (root, factory) { if (typeof define === 'function' && define.amd) { // AMD. Register as an anonymous module unless amdModuleId is set define(["jquery"], function (a0) { return (factory(a0)); }); } else if (typeof exports === 'object') { // Node. Does not work with strict CommonJS, but // only CommonJS-like environments that support module.exports, // like Node. module.exports = factory(require("jquery")); } else { factory(jQuery); } }(this, function ($) { var pluginName = 'tooltipster.SVG'; $.tooltipster._plugin({ name: pluginName, core: { __init: function() { $.tooltipster._on('init', function(event) { var win = $.tooltipster._env.window; if ( win.SVGElement && event.origin instanceof win.SVGElement ) { // auto-activation of the plugin on the instance event.instance._plug(pluginName); } }); } }, instance: { __init: function(instance) { var self = this; //list of instance variables self.__hadTitleTag = false; self.__instance = instance; // jQuery < v3.0's addClass and hasClass do not work on SVG elements. // However, $('.tooltipstered') does find elements having the class. if (!self.__instance._$origin.hasClass('tooltipstered')) { var c = self.__instance._$origin.attr('class') || ''; if (c.indexOf('tooltipstered') == -1) { self.__instance._$origin.attr('class', c + ' tooltipstered'); } } // if there is no content yet, let's look for a child element if (self.__instance.content() === null) { // TODO: when there are several <title> tags (not supported in // today's browsers yet though, still an RFC draft), pick the right // one based on its "lang" attribute var $title = self.__instance._$origin.find('>title'); if ($title[0]) { var title = $title.text(); self.__hadTitleTag = true; self.__instance._$origin.data('tooltipster-initialTitle', title); self.__instance.content(title); $title.remove(); } } // rectify the geometry if SVG.js and its screenBBox plugin have been included self.__instance ._on('geometry.'+ self.namespace, function(event) { var win = $.tooltipster._env.window; // SVG coordinates may need fixing but we need svg.screenbox.js // to provide it. SVGElement is IE8+ if (win.SVG.svgjs) { if (!win.SVG.parser) { win.SVG.prepare(); } var svgEl = win.SVG.adopt(event.origin); // not all figures need (and have) screenBBox if (svgEl && svgEl.screenBBox) { var bbox = svgEl.screenBBox(); event.edit({ height: bbox.height, left: bbox.x, top: bbox.y, width: bbox.width }); } } }) // if jQuery < v3.0, we have to remove the class ourselves ._on('destroy.'+ self.namespace, function() { self.__destroy(); }); }, __destroy: function() { var self = this; if (!self.__instance._$origin.hasClass('tooltipstered')) { var c = self.__instance._$origin.attr('class').replace('tooltipstered', ''); self.__instance._$origin.attr('class', c); } self.__instance._off('.'+ self.namespace); // if the content was provided as a title tag, we may need to restore it if (self.__hadTitleTag) { // this must happen after Tooltipster restored (or not) the title attr self.__instance.one('destroyed', function() { // if a title attribute was restored, we just need to replace it with a tag var title = self.__instance._$origin.attr('title'); if (title) { // must be namespaced to work $(document.createElementNS('http://www.w3.org/2000/svg', 'title')) .text(title) .appendTo(self.__instance._$origin); self.__instance._$origin.removeAttr('title'); } }); } } } }); /* a build task will add "return $;" here */ return $; })); }));