123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494 |
- /* eslint-disable */
- /* global $, describe, it, xit, xdescribe, after, afterEach, expect*/
- describe("flot navigate plugin interactions", function () {
- 'use strict';
- var placeholder, plot, eventHolder;
- var options = {
- xaxes: [{
- autoScale: 'exact'
- }],
- yaxes: [{
- autoScale: 'exact'
- }],
- zoom: {
- interactive: true,
- active: true,
- amount: 10
- },
- pan: {
- interactive: true,
- active: true
- }
- };
- beforeEach(function () {
- placeholder = setFixtures('<div id="test-container" style="width: 600px;height: 400px">')
- .find('#test-container');
- jasmine.clock().install();
- });
- afterEach(function () {
- jasmine.clock().uninstall();
- });
- it('do smart pans on mouse drag by default', function () {
- var oldFrameRate = options.pan.frameRate;
- options.pan.frameRate = -1;
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- eventHolder = plot.getEventHolder();
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- // drag almost horizontally snap to x direction
- simulate.mouseDown(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50 + plot.width(), 80);
- expect(xaxis.min).toBe(-10);
- expect(xaxis.max).toBe(0);
- expect(yaxis.min).toBe(0);
- expect(yaxis.max).toBe(10);
- simulate.mouseUp(eventHolder, 50 + plot.width(), 80);
- expect(xaxis.min).toBe(-10);
- expect(xaxis.max).toBe(0);
- expect(yaxis.min).toBe(0);
- expect(yaxis.max).toBe(10);
- // drag almost vertically snap to y direction
- simulate.mouseDown(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 60, 70 + plot.height());
- expect(xaxis.min).toBe(-10);
- expect(xaxis.max).toBe(0);
- expect(yaxis.min).toBe(10);
- expect(yaxis.max).toBe(20);
- simulate.mouseUp(eventHolder, 60, 70 + plot.height());
- expect(xaxis.min).toBe(-10);
- expect(xaxis.max).toBe(0);
- expect(yaxis.min).toBe(10);
- expect(yaxis.max).toBe(20);
- // cover finite frame rate case
- plot.destroy();
- options.pan.frameRate = 10;
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- eventHolder = plot.getEventHolder();
- xaxis = plot.getXAxes()[0];
- yaxis = plot.getYAxes()[0];
- // drag diagonally do not snap
- simulate.mouseDown(eventHolder, plot.width() - 50, plot.height() - 70);
- simulate.mouseMove(eventHolder, plot.width() - 50, plot.height() - 70);
- jasmine.clock().tick(100);
- simulate.mouseMove(eventHolder, -50, -70);
- jasmine.clock().tick(100);
- expect(xaxis.min).toBe(10);
- expect(xaxis.max).toBe(20);
- expect(yaxis.min).toBe(-10);
- expect(yaxis.max).toBe(0);
- simulate.mouseUp(eventHolder, -50, -70);
- expect(xaxis.min).toBe(10);
- expect(xaxis.max).toBe(20);
- expect(yaxis.min).toBe(-10);
- expect(yaxis.max).toBe(0);
- options.pan.frameRate = oldFrameRate;
- });
- it('do non-smart pans on mouse drag in non-smart pan mode', function () {
- var oldPanMode = options.pan.mode;
- options.pan.mode = 'manual';
- var oldFrameRate = options.pan.frameRate;
- options.pan.frameRate = -1;
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- eventHolder = plot.getEventHolder();
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- // drag almost horizontally do not snap
- var movement = { x: [50, 50 + plot.width()], y: [70, 80] };
- simulate.mouseDown(eventHolder, movement.x[0], movement.y[0]);
- simulate.mouseMove(eventHolder, movement.x[0], movement.y[0]);
- simulate.mouseMove(eventHolder, movement.x[1], movement.y[1]);
- expect(xaxis.min).toBe(-10);
- expect(xaxis.max).toBe(0);
- expect(yaxis.min).toBeGreaterThan(0);
- expect(yaxis.max).toBeGreaterThan(10);
- simulate.mouseUp(eventHolder, movement.x[1], movement.y[1]);
- // cover finite frame rate case
- plot.destroy();
- options.pan.frameRate = 10;
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- eventHolder = plot.getEventHolder();
- xaxis = plot.getXAxes()[0];
- yaxis = plot.getYAxes()[0];
- // drag almost vertically do not snap
- movement = { x: [50, 60], y: [70, 70 + plot.height()] };
- simulate.mouseDown(eventHolder, movement.x[0], movement.y[0]);
- simulate.mouseMove(eventHolder, movement.x[0], movement.y[0]);
- jasmine.clock().tick(100);
- simulate.mouseMove(eventHolder, movement.x[1], movement.y[1]);
- jasmine.clock().tick(100);
- expect(xaxis.min).toBeLessThan(0);
- expect(xaxis.max).toBeLessThan(10);
- expect(yaxis.min).toBe(10);
- expect(yaxis.max).toBe(20);
- simulate.mouseUp(eventHolder, movement.x[1], movement.y[1]);
- options.pan.mode = oldPanMode;
- options.pan.frameRate = oldFrameRate;
- });
- it('lock smart pan snap direction on mouse drag in smart-lock pan mode', function () {
- var oldPanMode = options.pan.mode;
- options.pan.mode = 'smartLock';
- var oldFrameRate = options.pan.frameRate;
- options.pan.frameRate = -1;
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- eventHolder = plot.getEventHolder();
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- var initialXmin = xaxis.min,
- initialXmax = xaxis.max,
- initialYmin = yaxis.min,
- initialYmax = yaxis.max;
- // drag almost horizontally then vertically snap to x direction
- simulate.mouseDown(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50 + plot.width() / 2, 80);
- simulate.mouseMove(eventHolder, 50 + plot.width(), 70 + plot.height());
- simulate.mouseUp(eventHolder, 50 + plot.width(), 70 + plot.height());
- expect(xaxis.min).toBeLessThan(initialXmin);
- expect(xaxis.max).toBeLessThan(initialXmax);
- expect(yaxis.min).toBe(initialYmin);
- expect(yaxis.max).toBe(initialYmax);
- // drag almost vertically then horizontally snap to y direction
- plot.recenter({});
- simulate.mouseDown(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 60, 70 + plot.height());
- simulate.mouseMove(eventHolder, 50 + plot.width(), 70 + plot.height());
- simulate.mouseUp(eventHolder, 50 + plot.width(), 70 + plot.height());
- expect(xaxis.min).toBe(initialXmin);
- expect(xaxis.max).toBe(initialXmax);
- expect(yaxis.min).toBeGreaterThan(initialYmin);
- expect(yaxis.max).toBeGreaterThan(initialYmax);
- options.pan.mode = oldPanMode;
- options.pan.frameRate = oldFrameRate;
- });
- it('do not move graph on mouse drag if pan mode is invalid', function () {
- var oldPanMode = options.pan.mode;
- options.pan.mode = '';
- var oldFrameRate = options.pan.frameRate;
- options.pan.frameRate = -1;
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- eventHolder = plot.getEventHolder();
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- var initialXmin = xaxis.min,
- initialXmax = xaxis.max,
- initialYmin = yaxis.min,
- initialYmax = yaxis.max;
- // do not drag in all cases
- simulate.mouseDown(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50 + plot.width() / 2, 70);
- simulate.mouseUp(eventHolder, 50 + plot.width(), 70);
- expect(xaxis.min).toBe(initialXmin);
- expect(xaxis.max).toBe(initialXmax);
- expect(yaxis.min).toBe(initialYmin);
- expect(yaxis.max).toBe(initialYmax);
-
- simulate.mouseDown(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50, 70);
- simulate.mouseMove(eventHolder, 50, 70 + plot.height());
- simulate.mouseUp(eventHolder, 50, 70 + plot.height());
-
- expect(xaxis.min).toBe(initialXmin);
- expect(xaxis.max).toBe(initialXmax);
- expect(yaxis.min).toBe(initialYmin);
- expect(yaxis.max).toBe(initialYmax);
- options.pan.mode = oldPanMode;
- options.pan.frameRate = oldFrameRate;
- });
- it('zooms out on mouse scroll down', function () {
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- var clientX = plot.getPlotOffset().left + xaxis.p2c(0);
- var clientY = plot.getPlotOffset().top + yaxis.p2c(0);
- eventHolder = plot.getEventHolder();
- simulate.mouseWheel(eventHolder, clientX, clientY, 0, 100);
- /*
- I would really like better precission but:
- * the browsers may place the graph to fractional pixel coordinates
- * we can only deliver mouse events at integer coordinates
- * so we can't align precisely our mouse clicks with a point specified in plot coordinates
- hence our precission sucks.
- But this test isn't about precission, so we are fine
- */
- expect(xaxis.min).toBeCloseTo(0, 0);
- expect(xaxis.max).toBeCloseTo(100, 0);
- expect(yaxis.min).toBeCloseTo(0, 0);
- expect(yaxis.max).toBeCloseTo(100, 0);
- });
- it('zooms in on mouse scroll up', function () {
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- var clientX = plot.getPlotOffset().left + xaxis.p2c(0);
- var clientY = plot.getPlotOffset().top + yaxis.p2c(0);
- eventHolder = plot.getEventHolder();
- simulate.mouseWheel(eventHolder, clientX, clientY, 0, -100);
- /*
- I would really like better precission but:
- * the browsers may place the graph to fractional pixel coordinates
- * we can only deliver mouse events at integer coordinates
- * so we can't align precisely our mouse clicks with a point specified in plot coordinates
- hence our precission sucks.
- But this test isn't about precission, so we are fine
- */
- expect(xaxis.min).toBeCloseTo(0, 1);
- expect(xaxis.max).toBeCloseTo(1, 1);
- expect(yaxis.min).toBeCloseTo(0, 1);
- expect(yaxis.max).toBeCloseTo(1, 1);
- });
- it('constrains the mouse scroll zoom to the hovered axis ', function () {
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- var clientX = plot.getPlotOffset().left + xaxis.p2c(0);
- var clientY = xaxis.box.top + xaxis.box.height/2;
- eventHolder = plot.getEventHolder();
- simulate.mouseWheel(eventHolder, clientX, clientY, 0, -100);
- expect(xaxis.min).toBeCloseTo(0, 1);
- expect(xaxis.max).toBeCloseTo(1, 1);
- expect(yaxis.min).toBeCloseTo(0, 1);
- expect(yaxis.max).toBeCloseTo(10, 1);
- });
- it('zooms out proportional with the deltaY on Mac platforms', function () {
- var smallAmount = 0.4,
- largerAmount = 0.8,
- plot1Ranges = plotAndScroll(smallAmount),
- plot2Ranges = plotAndScroll(largerAmount);
- expect(plot1Ranges.xaxisMin).toBeLessThan(plot2Ranges.xaxisMin);
- expect(plot1Ranges.xaxisMax).toBeGreaterThan(plot2Ranges.xaxisMax);
- expect(plot1Ranges.yaxisMin).toBeLessThan(plot2Ranges.yaxisMin);
- expect(plot1Ranges.yaxisMax).toBeGreaterThan(plot2Ranges.yaxisMax);
- });
- it('zooms out regardless the deltaY value on non Mac platforms', function () {
- var smallAmount = 40,
- largerAmount = 80,
- plot1Ranges = plotAndScroll(smallAmount),
- plot2Ranges = plotAndScroll(largerAmount);
- expect(plot2Ranges.xaxisMin).toBeCloseTo(plot1Ranges.xaxisMin);
- expect(plot2Ranges.xaxisMax).toBeCloseTo(plot1Ranges.xaxisMax);
- expect(plot2Ranges.yaxisMin).toBeCloseTo(plot1Ranges.yaxisMin);
- expect(plot2Ranges.yaxisMax).toBeCloseTo(plot1Ranges.yaxisMax);
- });
- function plotAndScroll(amount) {
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], options);
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- var clientX = plot.getPlotOffset().left + xaxis.p2c(5);
- var clientY = plot.getPlotOffset().top + yaxis.p2c(5);
- eventHolder = plot.getEventHolder();
- simulate.mouseWheel(eventHolder, clientX, clientY, 0, amount);
- return {
- xaxisMin: xaxis.min,
- xaxisMax: xaxis.max,
- yaxisMin: yaxis.min,
- yaxisMax: yaxis.max
- };
- }
- it('zooms mode handles event on mouse dblclick', function () {
- plot = $.plot(placeholder, [
- [[0, 0],
- [10, 10]]
- ], {
- xaxes: [{
- autoScale: 'exact'
- }],
- yaxes: [{
- autoScale: 'exact'
- }],
- zoom: {
- interactive: false,
- highlighted: true
- },
- pan: {
- interactive: true,
- highlighted: true
- },
- selection: {
- mode: 'smart',
- }});
- var xaxis = plot.getXAxes()[0];
- var yaxis = plot.getYAxes()[0];
- var clientX = plot.getPlotOffset().left + xaxis.p2c(0);
- var clientY = plot.getPlotOffset().top + yaxis.p2c(0);
- eventHolder = plot.getEventHolder();
- var spy = spyOn(eventHolder, 'ondblclick').and.callThrough();
- var spyRecenter = jasmine.createSpy('spy');
- $(plot.getPlaceholder()).on('re-center', spyRecenter);
- simulate.dblclick(eventHolder, 10, 20);
- expect(spy).toHaveBeenCalled();
- expect(spyRecenter).toHaveBeenCalled();
- });
- it('shows that the eventHolder is cleared through shutdown when the plot is replaced', function() {
- plot = $.plot(placeholder, [[]], options);
- var eventHolder = plot.getEventHolder(),
- spy = spyOn(eventHolder, 'removeEventListener').and.callThrough();
- plot = $.plot(placeholder, [[]], options);
- expect(spy).toHaveBeenCalledWith('mousewheel', jasmine.any(Function), jasmine.any(Boolean))
- expect(spy).toHaveBeenCalledWith('dblclick', jasmine.any(Function), jasmine.any(Boolean));
- });
- it('do recenter for double click by default', () => {
- plot = $.plot(placeholder, [
- [[0, 0], [10, 10]]
- ], {
- xaxes: [{ autoScale: 'exact' }],
- yaxes: [{ autoScale: 'exact' }],
- });
- var eventHolder = plot.getEventHolder(),
- xaxis = plot.getXAxes()[0],
- yaxis = plot.getYAxes()[0],
- spyRecenter = jasmine.createSpy('spy');
- $(plot.getPlaceholder()).on('re-center', spyRecenter);
- plot.pan({ left: 10, top: 10});
- simulate.dblclick(eventHolder, 200, 150);
- expect(xaxis.options.offset).toEqual({ below: 0, above: 0 });
- expect(yaxis.options.offset).toEqual({ below: 0, above: 0 });
- expect(spyRecenter).toHaveBeenCalled();
- });
- it('do not recenter for double click if recenter is disabled', () => {
- plot = $.plot(placeholder, [
- [[0, 0], [10, 10]]
- ], {
- xaxes: [{ autoScale: 'exact' }],
- yaxes: [{ autoScale: 'exact' }],
- pan: { interactive: true },
- zoom: { interactive: true },
- recenter: { interactive: false },
- });
- var eventHolder = plot.getEventHolder(),
- xaxis = plot.getXAxes()[0],
- yaxis = plot.getYAxes()[0],
- spyRecenter = jasmine.createSpy('spy');
- $(plot.getPlaceholder()).on('re-center', spyRecenter);
- plot.pan({ left: 10, top: 10});
- simulate.dblclick(eventHolder, 200, 150);
- expect(xaxis.options.offset).not.toEqual({ below: 0, above: 0 });
- expect(yaxis.options.offset).not.toEqual({ below: 0, above: 0 });
- expect(spyRecenter).not.toHaveBeenCalled();
- });
- });
|