diff -r 318533413200 -r a1707c607eec src/pyams_skin/resources/js/ext/flot/jquery.flot.hover.js --- a/src/pyams_skin/resources/js/ext/flot/jquery.flot.hover.js Sun Jul 19 02:02:20 2020 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,350 +0,0 @@ -/* global jQuery */ - -/** -## jquery.flot.hover.js - -This plugin is used for mouse hover and tap on a point of plot series. -It supports the following options: -```js -grid: { - hoverable: false, //to trigger plothover event on mouse hover or tap on a point - clickable: false //to trigger plotclick event on mouse hover -} -``` - -It listens to native mouse move event or click, as well as artificial generated -tap and touchevent. - -When the mouse is over a point or a tap on a point is performed, that point or -the correscponding bar will be highlighted and a "plothover" event will be generated. - -Custom "touchevent" is triggered when any touch interaction is made. Hover plugin -handles this events by unhighlighting all of the previously highlighted points and generates -"plothovercleanup" event to notify any part that is handling plothover (for exemple to cleanup -the tooltip from webcharts). -*/ - -(function($) { - 'use strict'; - - var options = { - grid: { - hoverable: false, - clickable: false - } - }; - - var browser = $.plot.browser; - - var eventType = { - click: 'click', - hover: 'hover' - } - - function init(plot) { - var lastMouseMoveEvent; - var highlights = []; - - function bindEvents(plot, eventHolder) { - var o = plot.getOptions(); - - if (o.grid.hoverable || o.grid.clickable) { - eventHolder[0].addEventListener('touchevent', triggerCleanupEvent, false); - eventHolder[0].addEventListener('tap', generatePlothoverEvent, false); - } - - if (o.grid.clickable) { - eventHolder.bind("click", onClick); - } - - if (o.grid.hoverable) { - eventHolder.bind("mousemove", onMouseMove); - - // Use bind, rather than .mouseleave, because we officially - // still support jQuery 1.2.6, which doesn't define a shortcut - // for mouseenter or mouseleave. This was a bug/oversight that - // was fixed somewhere around 1.3.x. We can return to using - // .mouseleave when we drop support for 1.2.6. - - eventHolder.bind("mouseleave", onMouseLeave); - } - } - - function shutdown(plot, eventHolder) { - eventHolder[0].removeEventListener('tap', generatePlothoverEvent); - eventHolder[0].removeEventListener('touchevent', triggerCleanupEvent); - eventHolder.unbind("mousemove", onMouseMove); - eventHolder.unbind("mouseleave", onMouseLeave); - eventHolder.unbind("click", onClick); - highlights = []; - } - - - function generatePlothoverEvent(e) { - var o = plot.getOptions(), - newEvent = new CustomEvent('mouseevent'); - - //transform from touch event to mouse event format - newEvent.pageX = e.detail.changedTouches[0].pageX; - newEvent.pageY = e.detail.changedTouches[0].pageY; - newEvent.clientX = e.detail.changedTouches[0].clientX; - newEvent.clientY = e.detail.changedTouches[0].clientY; - - if (o.grid.hoverable) { - doTriggerClickHoverEvent(newEvent, eventType.hover, 30); - } - return false; - } - - function doTriggerClickHoverEvent(event, eventType, searchDistance) { - var series = plot.getData(); - if (event !== undefined - && series.length > 0 - && series[0].xaxis.c2p !== undefined - && series[0].yaxis.c2p !== undefined) { - var eventToTrigger = "plot" + eventType; - var seriesFlag = eventType + "able"; - triggerClickHoverEvent(eventToTrigger, event, - function(i) { - return series[i][seriesFlag] !== false; - }, searchDistance); - } - } - - function onMouseMove(e) { - lastMouseMoveEvent = e; - plot.getPlaceholder()[0].lastMouseMoveEvent = e; - doTriggerClickHoverEvent(e, eventType.hover); - } - - function onMouseLeave(e) { - lastMouseMoveEvent = undefined; - plot.getPlaceholder()[0].lastMouseMoveEvent = undefined; - triggerClickHoverEvent("plothover", e, - function(i) { - return false; - }); - } - - function onClick(e) { - doTriggerClickHoverEvent(e, eventType.click); - } - - function triggerCleanupEvent() { - plot.unhighlight(); - plot.getPlaceholder().trigger('plothovercleanup'); - } - - // trigger click or hover event (they send the same parameters - // so we share their code) - function triggerClickHoverEvent(eventname, event, seriesFilter, searchDistance) { - var options = plot.getOptions(), - offset = plot.offset(), - page = browser.getPageXY(event), - canvasX = page.X - offset.left, - canvasY = page.Y - offset.top, - pos = plot.c2p({ - left: canvasX, - top: canvasY - }), - distance = searchDistance !== undefined ? searchDistance : options.grid.mouseActiveRadius; - - pos.pageX = page.X; - pos.pageY = page.Y; - - var item = plot.findNearbyItem(canvasX, canvasY, seriesFilter, distance); - - if (item) { - // fill in mouse pos for any listeners out there - item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left, 10); - item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top, 10); - } - - if (options.grid.autoHighlight) { - // clear auto-highlights - for (var i = 0; i < highlights.length; ++i) { - var h = highlights[i]; - if ((h.auto === eventname && - !(item && h.series === item.series && - h.point[0] === item.datapoint[0] && - h.point[1] === item.datapoint[1])) || !item) { - unhighlight(h.series, h.point); - } - } - - if (item) { - highlight(item.series, item.datapoint, eventname); - } - } - - plot.getPlaceholder().trigger(eventname, [pos, item]); - } - - function highlight(s, point, auto) { - if (typeof s === "number") { - s = plot.getData()[s]; - } - - if (typeof point === "number") { - var ps = s.datapoints.pointsize; - point = s.datapoints.points.slice(ps * point, ps * (point + 1)); - } - - var i = indexOfHighlight(s, point); - if (i === -1) { - highlights.push({ - series: s, - point: point, - auto: auto - }); - - plot.triggerRedrawOverlay(); - } else if (!auto) { - highlights[i].auto = false; - } - } - - function unhighlight(s, point) { - if (s == null && point == null) { - highlights = []; - plot.triggerRedrawOverlay(); - return; - } - - if (typeof s === "number") { - s = plot.getData()[s]; - } - - if (typeof point === "number") { - var ps = s.datapoints.pointsize; - point = s.datapoints.points.slice(ps * point, ps * (point + 1)); - } - - var i = indexOfHighlight(s, point); - if (i !== -1) { - highlights.splice(i, 1); - - plot.triggerRedrawOverlay(); - } - } - - function indexOfHighlight(s, p) { - for (var i = 0; i < highlights.length; ++i) { - var h = highlights[i]; - if (h.series === s && - h.point[0] === p[0] && - h.point[1] === p[1]) { - return i; - } - } - - return -1; - } - - function processDatapoints() { - triggerCleanupEvent(); - doTriggerClickHoverEvent(lastMouseMoveEvent, eventType.hover); - } - - function setupGrid() { - doTriggerClickHoverEvent(lastMouseMoveEvent, eventType.hover); - } - - function drawOverlay(plot, octx, overlay) { - var plotOffset = plot.getPlotOffset(), - i, hi; - - octx.save(); - octx.translate(plotOffset.left, plotOffset.top); - for (i = 0; i < highlights.length; ++i) { - hi = highlights[i]; - - if (hi.series.bars.show) drawBarHighlight(hi.series, hi.point, octx); - else drawPointHighlight(hi.series, hi.point, octx, plot); - } - octx.restore(); - } - - function drawPointHighlight(series, point, octx, plot) { - var x = point[0], - y = point[1], - axisx = series.xaxis, - axisy = series.yaxis, - highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(); - - if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max) { - return; - } - - var pointRadius = series.points.radius + series.points.lineWidth / 2; - octx.lineWidth = pointRadius; - octx.strokeStyle = highlightColor; - var radius = 1.5 * pointRadius; - x = axisx.p2c(x); - y = axisy.p2c(y); - - octx.beginPath(); - var symbol = series.points.symbol; - if (symbol === 'circle') { - octx.arc(x, y, radius, 0, 2 * Math.PI, false); - } else if (typeof symbol === 'string' && plot.drawSymbol && plot.drawSymbol[symbol]) { - plot.drawSymbol[symbol](octx, x, y, radius, false); - } - - octx.closePath(); - octx.stroke(); - } - - function drawBarHighlight(series, point, octx) { - var highlightColor = (typeof series.highlightColor === "string") ? series.highlightColor : $.color.parse(series.color).scale('a', 0.5).toString(), - fillStyle = highlightColor, - barLeft; - - var barWidth = series.bars.barWidth[0] || series.bars.barWidth; - switch (series.bars.align) { - case "left": - barLeft = 0; - break; - case "right": - barLeft = -barWidth; - break; - default: - barLeft = -barWidth / 2; - } - - octx.lineWidth = series.bars.lineWidth; - octx.strokeStyle = highlightColor; - - var fillTowards = series.bars.fillTowards || 0, - bottom = fillTowards > series.yaxis.min ? Math.min(series.yaxis.max, fillTowards) : series.yaxis.min; - - $.plot.drawSeries.drawBar(point[0], point[1], point[2] || bottom, barLeft, barLeft + barWidth, - function() { - return fillStyle; - }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth); - } - - function initHover(plot, options) { - plot.highlight = highlight; - plot.unhighlight = unhighlight; - if (options.grid.hoverable || options.grid.clickable) { - plot.hooks.drawOverlay.push(drawOverlay); - plot.hooks.processDatapoints.push(processDatapoints); - plot.hooks.setupGrid.push(setupGrid); - } - - lastMouseMoveEvent = plot.getPlaceholder()[0].lastMouseMoveEvent; - } - - plot.hooks.bindEvents.push(bindEvents); - plot.hooks.shutdown.push(shutdown); - plot.hooks.processOptions.push(initHover); - } - - $.plot.plugins.push({ - init: init, - options: options, - name: 'hover', - version: '0.1' - }); -})(jQuery);