Skip to content

Commit

Permalink
feat(build): Added a new service of bounds helpers: leafletBoundsHelpers
Browse files Browse the repository at this point in the history
  • Loading branch information
tombatossals committed Dec 26, 2013
1 parent 4e67f35 commit eac699a
Show file tree
Hide file tree
Showing 7 changed files with 179 additions and 117 deletions.
1 change: 1 addition & 0 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -262,6 +262,7 @@ module.exports = function(grunt) {
'src/services/leafletMapDefaults.js',
'src/services/leafletEvents.js',
'src/services/leafletLayerHelpers.js',
'src/services/leafletBoundsHelpers.js',
'src/services/leafletMarkerHelpers.js',
'src/services/leafletHelpers.js'
],
Expand Down
145 changes: 88 additions & 57 deletions dist/angular-leaflet-directive.js
Original file line number Diff line number Diff line change
Expand Up @@ -551,7 +551,7 @@ angular.module("leaflet-directive").directive('layers', function ($log, $q, leaf
};
});

angular.module("leaflet-directive").directive('bounds', function ($log, leafletHelpers) {
angular.module("leaflet-directive").directive('bounds', function ($log, leafletHelpers, leafletBoundsHelpers) {
return {
restrict: "A",
scope: false,
Expand All @@ -560,50 +560,30 @@ angular.module("leaflet-directive").directive('bounds', function ($log, leafletH

link: function(scope, element, attrs, controller) {
var isDefined = leafletHelpers.isDefined,
createLeafletBounds = leafletHelpers.createLeafletBounds,
createLeafletBounds = leafletBoundsHelpers.createLeafletBounds,
updateBoundsInScope = leafletBoundsHelpers.updateBoundsInScope,
leafletScope = controller.getLeafletScope();

controller.getMap().then(function(map) {

function updateBoundsInScope() {
if(!leafletScope.bounds) { return; }

var mapBounds = map.getBounds();
var newScopeBounds = {
northEast: {
lat: mapBounds.getNorthEast().lat,
lng: mapBounds.getNorthEast().lng
},
southWest: {
lat: mapBounds.getSouthWest().lat,
lng: mapBounds.getSouthWest().lng
map.whenReady(function() {
leafletScope.$watch('bounds', function(newBounds) {
if (!isDefined(newBounds)) {
$log.error('[AngularJS - Leaflet] Invalid bounds');
return;
}
};

if(!angular.equals(leafletScope.bounds, newScopeBounds)) {
leafletScope.bounds = newScopeBounds;
}
}

function boundsListener(newBounds) {
if (!isDefined(newBounds)) {
$log.error('[AngularJS - Leaflet] Invalid bounds');
return;
}

var leafletBounds = createLeafletBounds(newBounds);
if (leafletBounds && !map.getBounds().equals(leafletBounds)) {
map.fitBounds(leafletBounds);
}
}
var leafletBounds = createLeafletBounds(newBounds);
if (leafletBounds && !map.getBounds().equals(leafletBounds)) {
map.fitBounds(leafletBounds);
}
}, true);
});

map.on('moveend', updateBoundsInScope);
map.on('dragend', updateBoundsInScope);
map.on('zoomend', updateBoundsInScope);
map.on('moveend', updateBoundsInScope, leafletScope, map);
map.on('dragend', updateBoundsInScope, leafletScope, map);
map.on('zoomend', updateBoundsInScope, leafletScope, map);

map.whenReady(function() {
leafletScope.$watch('bounds', boundsListener, true);
});
});
}
};
Expand Down Expand Up @@ -967,7 +947,7 @@ angular.module("leaflet-directive").directive('eventBroadcast', function ($log,
};
});

angular.module("leaflet-directive").directive('maxbounds', function ($log, leafletMapDefaults, leafletHelpers) {
angular.module("leaflet-directive").directive('maxbounds', function ($log, leafletMapDefaults, leafletBoundsHelpers) {
return {
restrict: "A",
scope: false,
Expand All @@ -976,7 +956,7 @@ angular.module("leaflet-directive").directive('maxbounds', function ($log, leafl

link: function(scope, element, attrs, controller) {
var leafletScope = controller.getLeafletScope(),
isValidBounds = leafletHelpers.isValidBounds;
isValidBounds = leafletBoundsHelpers.isValidBounds;


controller.getMap().then(function(map) {
Expand Down Expand Up @@ -1492,6 +1472,75 @@ angular.module("leaflet-directive").factory('leafletLayerHelpers', function ($ro
};
});

angular.module("leaflet-directive").factory('leafletBoundsHelpers', function ($log, leafletHelpers) {

var isArray = leafletHelpers.isArray,
isNumber = leafletHelpers.isNumber;

function _isValidBounds(bounds) {
return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) &&
angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) &&
angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) &&
angular.isNumber(bounds.northEast.lng);
}

return {
createLeafletBounds: function(bounds) {
if (_isValidBounds(bounds)) {
return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng],
[bounds.northEast.lat, bounds.northEast.lng ]);
} else {
return false;
}
},

isValidBounds: _isValidBounds,

createBoundsFromArray: function(boundsArray) {
if (!(isArray(boundsArray) && boundsArray.length === 2 &&
isArray(boundsArray[0]) && isArray(boundsArray[1]) &&
boundsArray[0].length === 2 && boundsArray[1].lenth === 2 &&
isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) &&
isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) {
$log.warn("[AngularJS - Leaflet] The bounds array is not valid.");
return;
}

return {
northEast: {
lat: boundsArray[0][0],
lng: boundsArray[0][1]
},
southWest: {
lat: boundsArray[1][0],
lng: boundsArray[1][1]
}
};

},

updateBoundsInScope: function(leafletScope, map) {
if(!leafletScope.bounds) { return; }

var mapBounds = map.getBounds();
var newScopeBounds = {
northEast: {
lat: mapBounds.getNorthEast().lat,
lng: mapBounds.getNorthEast().lng
},
southWest: {
lat: mapBounds.getSouthWest().lat,
lng: mapBounds.getSouthWest().lng
}
};

if(!angular.equals(leafletScope.bounds, newScopeBounds)) {
leafletScope.bounds = newScopeBounds;
}
}
};
});

angular.module("leaflet-directive").factory('leafletMarkerHelpers', function ($rootScope, leafletHelpers, $log, leafletEvents) {

var isDefined = leafletHelpers.isDefined,
Expand Down Expand Up @@ -2133,13 +2182,6 @@ angular.module("leaflet-directive").factory('leafletHelpers', function ($q, $log
return id;
}

function _isValidBounds(bounds) {
return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) &&
angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) &&
angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) &&
angular.isNumber(bounds.northEast.lng);
}

function _getUnresolvedDefer(d, mapId) {
var id = _obtainEffectiveMapId(d, mapId),
defer;
Expand Down Expand Up @@ -2201,17 +2243,6 @@ angular.module("leaflet-directive").factory('leafletHelpers', function ($q, $log
angular.isNumber(center.lng) && angular.isNumber(center.zoom);
},

isValidBounds: _isValidBounds,

createLeafletBounds: function(bounds) {
if (_isValidBounds(bounds)) {
return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng],
[bounds.northEast.lat, bounds.northEast.lng ]);
} else {
return false;
}
},

convertToLeafletLatLngs: _convertToLeafletLatLngs,

convertToLeafletLatLng: function(latlng) {
Expand Down
6 changes: 3 additions & 3 deletions dist/angular-leaflet-directive.min.js

Large diffs are not rendered by default.

54 changes: 17 additions & 37 deletions src/directives/bounds.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
angular.module("leaflet-directive").directive('bounds', function ($log, leafletHelpers) {
angular.module("leaflet-directive").directive('bounds', function ($log, leafletHelpers, leafletBoundsHelpers) {
return {
restrict: "A",
scope: false,
Expand All @@ -7,50 +7,30 @@ angular.module("leaflet-directive").directive('bounds', function ($log, leafletH

link: function(scope, element, attrs, controller) {
var isDefined = leafletHelpers.isDefined,
createLeafletBounds = leafletHelpers.createLeafletBounds,
createLeafletBounds = leafletBoundsHelpers.createLeafletBounds,
updateBoundsInScope = leafletBoundsHelpers.updateBoundsInScope,
leafletScope = controller.getLeafletScope();

controller.getMap().then(function(map) {

function updateBoundsInScope() {
if(!leafletScope.bounds) { return; }

var mapBounds = map.getBounds();
var newScopeBounds = {
northEast: {
lat: mapBounds.getNorthEast().lat,
lng: mapBounds.getNorthEast().lng
},
southWest: {
lat: mapBounds.getSouthWest().lat,
lng: mapBounds.getSouthWest().lng
map.whenReady(function() {
leafletScope.$watch('bounds', function(newBounds) {
if (!isDefined(newBounds)) {
$log.error('[AngularJS - Leaflet] Invalid bounds');
return;
}
};

if(!angular.equals(leafletScope.bounds, newScopeBounds)) {
leafletScope.bounds = newScopeBounds;
}
}

function boundsListener(newBounds) {
if (!isDefined(newBounds)) {
$log.error('[AngularJS - Leaflet] Invalid bounds');
return;
}

var leafletBounds = createLeafletBounds(newBounds);
if (leafletBounds && !map.getBounds().equals(leafletBounds)) {
map.fitBounds(leafletBounds);
}
}
var leafletBounds = createLeafletBounds(newBounds);
if (leafletBounds && !map.getBounds().equals(leafletBounds)) {
map.fitBounds(leafletBounds);
}
}, true);
});

map.on('moveend', updateBoundsInScope);
map.on('dragend', updateBoundsInScope);
map.on('zoomend', updateBoundsInScope);
map.on('moveend', updateBoundsInScope, leafletScope, map);
map.on('dragend', updateBoundsInScope, leafletScope, map);
map.on('zoomend', updateBoundsInScope, leafletScope, map);

map.whenReady(function() {
leafletScope.$watch('bounds', boundsListener, true);
});
});
}
};
Expand Down
4 changes: 2 additions & 2 deletions src/directives/maxBounds.js
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
angular.module("leaflet-directive").directive('maxbounds', function ($log, leafletMapDefaults, leafletHelpers) {
angular.module("leaflet-directive").directive('maxbounds', function ($log, leafletMapDefaults, leafletBoundsHelpers) {
return {
restrict: "A",
scope: false,
Expand All @@ -7,7 +7,7 @@ angular.module("leaflet-directive").directive('maxbounds', function ($log, leafl

link: function(scope, element, attrs, controller) {
var leafletScope = controller.getLeafletScope(),
isValidBounds = leafletHelpers.isValidBounds;
isValidBounds = leafletBoundsHelpers.isValidBounds;


controller.getMap().then(function(map) {
Expand Down
68 changes: 68 additions & 0 deletions src/services/leafletBoundsHelpers.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
angular.module("leaflet-directive").factory('leafletBoundsHelpers', function ($log, leafletHelpers) {

var isArray = leafletHelpers.isArray,
isNumber = leafletHelpers.isNumber;

function _isValidBounds(bounds) {
return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) &&
angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) &&
angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) &&
angular.isNumber(bounds.northEast.lng);
}

return {
createLeafletBounds: function(bounds) {
if (_isValidBounds(bounds)) {
return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng],
[bounds.northEast.lat, bounds.northEast.lng ]);
} else {
return false;
}
},

isValidBounds: _isValidBounds,

createBoundsFromArray: function(boundsArray) {
if (!(isArray(boundsArray) && boundsArray.length === 2 &&
isArray(boundsArray[0]) && isArray(boundsArray[1]) &&
boundsArray[0].length === 2 && boundsArray[1].lenth === 2 &&
isNumber(boundsArray[0][0]) && isNumber(boundsArray[0][1]) &&
isNumber(boundsArray[1][0]) && isNumber(boundsArray[1][1]))) {
$log.warn("[AngularJS - Leaflet] The bounds array is not valid.");
return;
}

return {
northEast: {
lat: boundsArray[0][0],
lng: boundsArray[0][1]
},
southWest: {
lat: boundsArray[1][0],
lng: boundsArray[1][1]
}
};

},

updateBoundsInScope: function(leafletScope, map) {
if(!leafletScope.bounds) { return; }

var mapBounds = map.getBounds();
var newScopeBounds = {
northEast: {
lat: mapBounds.getNorthEast().lat,
lng: mapBounds.getNorthEast().lng
},
southWest: {
lat: mapBounds.getSouthWest().lat,
lng: mapBounds.getSouthWest().lng
}
};

if(!angular.equals(leafletScope.bounds, newScopeBounds)) {
leafletScope.bounds = newScopeBounds;
}
}
};
});
18 changes: 0 additions & 18 deletions src/services/leafletHelpers.js
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,6 @@ angular.module("leaflet-directive").factory('leafletHelpers', function ($q, $log
return id;
}

function _isValidBounds(bounds) {
return angular.isDefined(bounds) && angular.isDefined(bounds.southWest) &&
angular.isDefined(bounds.northEast) && angular.isNumber(bounds.southWest.lat) &&
angular.isNumber(bounds.southWest.lng) && angular.isNumber(bounds.northEast.lat) &&
angular.isNumber(bounds.northEast.lng);
}

function _getUnresolvedDefer(d, mapId) {
var id = _obtainEffectiveMapId(d, mapId),
defer;
Expand Down Expand Up @@ -89,17 +82,6 @@ angular.module("leaflet-directive").factory('leafletHelpers', function ($q, $log
angular.isNumber(center.lng) && angular.isNumber(center.zoom);
},

isValidBounds: _isValidBounds,

createLeafletBounds: function(bounds) {
if (_isValidBounds(bounds)) {
return L.latLngBounds([bounds.southWest.lat, bounds.southWest.lng],
[bounds.northEast.lat, bounds.northEast.lng ]);
} else {
return false;
}
},

convertToLeafletLatLngs: _convertToLeafletLatLngs,

convertToLeafletLatLng: function(latlng) {
Expand Down

0 comments on commit eac699a

Please sign in to comment.