Skip to content

Commit

Permalink
Merge pull request #7128 from tschaub/animate-undef
Browse files Browse the repository at this point in the history
Make view.animate() tolerate undefined views
  • Loading branch information
tschaub committed Aug 15, 2017
2 parents 8292e0e + ae62f5a commit 9bdd643
Show file tree
Hide file tree
Showing 2 changed files with 77 additions and 4 deletions.
25 changes: 21 additions & 4 deletions src/ol/view.js
Original file line number Diff line number Diff line change
Expand Up @@ -255,16 +255,33 @@ ol.View.prototype.getUpdatedOptions_ = function(newOptions) {
* @api
*/
ol.View.prototype.animate = function(var_args) {
var start = Date.now();
var center = this.getCenter().slice();
var resolution = this.getResolution();
var rotation = this.getRotation();
var animationCount = arguments.length;
var callback;
if (animationCount > 1 && typeof arguments[animationCount - 1] === 'function') {
callback = arguments[animationCount - 1];
--animationCount;
}
if (!this.isDef()) {
// if view properties are not yet set, shortcut to the final state
var state = arguments[animationCount - 1];
if (state.center) {
this.setCenter(state.center);
}
if (state.zoom !== undefined) {
this.setZoom(state.zoom);
}
if (state.rotation !== undefined) {
this.setRotation(state.rotation);
}
if (callback) {
callback(true);
}
return;
}
var start = Date.now();
var center = this.getCenter().slice();
var resolution = this.getResolution();
var rotation = this.getRotation();
var series = [];
for (var i = 0; i < animationCount; ++i) {
var options = /** @type {olx.AnimationOptions} */ (arguments[i]);
Expand Down
56 changes: 56 additions & 0 deletions test/spec/ol/view.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,49 @@ describe('ol.View', function() {
expect(view.getAnimating()).to.eql(false);
});

it('immediately completes if view is not defined before', function() {
var view = new ol.View();
var center = [1, 2];
var zoom = 3;
var rotation = 0.4;

view.animate({
zoom: zoom,
center: center,
rotation: rotation,
duration: 25
});
expect(view.getAnimating()).to.eql(false);
expect(view.getCenter()).to.eql(center);
expect(view.getZoom()).to.eql(zoom);
expect(view.getRotation()).to.eql(rotation);
});

it('sets final animation state if view is not defined before', function() {
var view = new ol.View();

var center = [1, 2];
var zoom = 3;
var rotation = 0.4;

view.animate({
zoom: 1
}, {
center: [2, 3]
}, {
rotation: 4
}, {
zoom: zoom,
center: center,
rotation: rotation,
duration: 25
});
expect(view.getAnimating()).to.eql(false);
expect(view.getCenter()).to.eql(center);
expect(view.getZoom()).to.eql(zoom);
expect(view.getRotation()).to.eql(rotation);
});

it('prefers zoom over resolution', function(done) {
var view = new ol.View({
center: [0, 0],
Expand Down Expand Up @@ -585,6 +628,19 @@ describe('ol.View', function() {
});
});

it('calls a callback if view is not defined before', function(done) {
var view = new ol.View();

view.animate({
zoom: 10,
duration: 25
}, function(complete) {
expect(view.getZoom()).to.be(10);
expect(complete).to.be(true);
done();
});
});

it('can run multiple animations in series', function(done) {
var view = new ol.View({
center: [0, 0],
Expand Down

0 comments on commit 9bdd643

Please sign in to comment.