diff --git a/src/Layer.js b/src/Layer.js index 503fc4c..0ba13cf 100644 --- a/src/Layer.js +++ b/src/Layer.js @@ -248,6 +248,8 @@ ms.layer = function(load, unload) { // flush the cache, clearing no-longer-needed tiles cache.flush(); + checkIsLoading(); + // dispatch the move event layer.dispatch({type: "move"}); } @@ -265,6 +267,17 @@ ms.layer = function(load, unload) { } } + var checkIsLoading = (function() { + var wasLoading; + return function() { + var isLoading = layer.isLoading(); + if (isLoading !== wasLoading) { + wasLoading = isLoading; + layer.dispatch({type: "loading", loading: isLoading}); + } + }; + })(); + layer.map = function(x) { if (!arguments.length) return map; if (map) { @@ -308,6 +321,16 @@ ms.layer = function(load, unload) { return layer; }; + layer.isLoading = function() { + var tiles = cache.locks(); + for (key in tiles) { + var tile = tiles[key]; + if (!tile.ready) + return true; + } + return false; + }; + layer.transform = function(x) { if (!arguments.length) return transform; transform = x; @@ -336,7 +359,7 @@ ms.layer = function(load, unload) { }; layer.dispatch = ms.dispatch(layer); - layer.on("load", cleanup); + layer.on("load", cleanup).on("load", checkIsLoading); return layer; };