Skip to content
This repository was archived by the owner on Sep 20, 2019. It is now read-only.

Angular.copy removed from geojson and markers #197

Merged
merged 2 commits into from
Nov 19, 2015
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,11 @@ module.exports = (grunt) => {
grunt.registerTask('karma', 'karma runner', function() {
return karmaRunner('../../test/karma.conf.js', grunt)(this.async());
});
grunt.registerTask("force", function(set) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

turn on --force without the arg passed so a task does not bomb

if (set === "on") {
grunt.option("force", true);
} else if (set === "off") {
grunt.option("force", false);
}
});
};
139 changes: 78 additions & 61 deletions dist/ui-leaflet.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/*!
* ui-leaflet 1.0.0 2015-11-16
* ui-leaflet 1.0.0 2015-11-18
* ui-leaflet - An AngularJS directive to easily interact with Leaflet maps
* git: https://github.com/angular-ui/ui-leaflet
*/
Expand Down Expand Up @@ -578,7 +578,7 @@ angular.module('ui-leaflet').service('leafletGeoJsonHelpers', ["leafletHelpers",

'use strict';

angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function ($q, $log) {
angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", "$timeout", function ($q, $log, $timeout) {
var _errorHeader = '[ui-leaflet] ';
var _copy = angular.copy;
var _clone = _copy;
Expand Down Expand Up @@ -710,10 +710,25 @@ angular.module('ui-leaflet').service('leafletHelpers', ["$q", "$log", function (
var directiveNormalize = function directiveNormalize(name) {
return camelCase(name.replace(PREFIX_REGEXP, ""));
};

// END AngularJS port

var _watchTrapDelayMilliSec = 10;

var _modelChangeInDirective = function _modelChangeInDirective(trapObj, trapField, cbToExec) {
if (!trapObj) throw new Error(_errorHeader + 'trapObj is undefined');
if (!trapField) throw new Error(_errorHeader + 'trapField is undefined');

trapObj[trapField] = true;
var ret = cbToExec();
$timeout(function () {
trapObj[trapField] = false;
}, _watchTrapDelayMilliSec);
return ret;
};

return {
watchTrapDelayMilliSec: _watchTrapDelayMilliSec,
modelChangeInDirective: _modelChangeInDirective,
camelCase: camelCase,
directiveNormalize: directiveNormalize,
copy: _copy,
Expand Down Expand Up @@ -3451,12 +3466,13 @@ angular.module('ui-leaflet').directive('eventBroadcast', ["leafletLogger", "$roo

'use strict';

angular.module('ui-leaflet').directive('geojson', ["leafletLogger", "$rootScope", "leafletData", "leafletHelpers", "leafletWatchHelpers", "leafletDirectiveControlsHelpers", "leafletIterators", "leafletGeoJsonEvents", function (leafletLogger, $rootScope, leafletData, leafletHelpers, leafletWatchHelpers, leafletDirectiveControlsHelpers, leafletIterators, leafletGeoJsonEvents) {
angular.module('ui-leaflet').directive('geojson', ["$timeout", "leafletLogger", "leafletData", "leafletHelpers", "leafletWatchHelpers", "leafletDirectiveControlsHelpers", "leafletIterators", "leafletGeoJsonEvents", function ($timeout, leafletLogger, leafletData, leafletHelpers, leafletWatchHelpers, leafletDirectiveControlsHelpers, leafletIterators, leafletGeoJsonEvents) {
var _maybeWatch = leafletWatchHelpers.maybeWatch,
_defaultWatchOptions = leafletHelpers.watchOptions,
_extendDirectiveControls = leafletDirectiveControlsHelpers.extend,
hlp = leafletHelpers,
$it = leafletIterators;
$it = leafletIterators,
watchTrap = { changeFromDirective: false };
// $log = leafletLogger;

return {
Expand Down Expand Up @@ -3515,23 +3531,22 @@ angular.module('ui-leaflet').directive('geojson', ["leafletLogger", "$rootScope"
_remove(leafletGeoJSON);
};

var _addGeojson = function _addGeojson(model, maybeName) {
var geojson = angular.copy(model);
var _addGeojson = function _addGeojson(geojson, maybeName) {

if (!(isDefined(geojson) && isDefined(geojson.data))) {
return;
}
var onEachFeature = _hookUpEvents(geojson, maybeName);

if (!isDefined(geojson.options)) {
//right here is why we use a clone / copy (we modify and thus)
//would kick of a watcher.. we need to be more careful everywhere
//for stuff like this
geojson.options = {
style: geojson.style,
filter: geojson.filter,
onEachFeature: onEachFeature,
pointToLayer: geojson.pointToLayer
};
hlp.modelChangeInDirective(watchTrap, "changeFromDirective", function () {
geojson.options = {
style: geojson.style,
filter: geojson.filter,
onEachFeature: onEachFeature,
pointToLayer: geojson.pointToLayer
};
});
}

var lObject = L.geoJson(geojson.data, geojson.options);
Expand Down Expand Up @@ -3568,6 +3583,7 @@ angular.module('ui-leaflet').directive('geojson', ["leafletLogger", "$rootScope"
_extendDirectiveControls(attrs.id, 'geojson', _create, _clean);

_maybeWatch(leafletScope, 'geojson', watchOptions, function (geojson) {
if (watchTrap.changeFromDirective) return;
_create(geojson);
});
});
Expand Down Expand Up @@ -4178,7 +4194,8 @@ angular.module('ui-leaflet').directive('markers', ["leafletLogger", "$rootScope"
_defaultWatchOptions = leafletHelpers.watchOptions,
maybeWatch = leafletWatchHelpers.maybeWatch,
extendDirectiveControls = leafletDirectiveControlsHelpers.extend,
$log = leafletLogger;
$log = leafletLogger,
watchTrap = { changeFromDirective: false };

var _getLMarker = function _getLMarker(leafletMarkers, name, maybeLayerName) {
if (!Object.keys(leafletMarkers).length) return;
Expand Down Expand Up @@ -4239,61 +4256,60 @@ angular.module('ui-leaflet').directive('markers', ["leafletLogger", "$rootScope"
continue;
}

var model = Helpers.copy(markersToRender[newName]);
var model = markersToRender[newName];
var pathToMarker = Helpers.getObjectDotPath(maybeLayerName ? [maybeLayerName, newName] : [newName]);
var maybeLMarker = _getLMarker(leafletMarkers, newName, maybeLayerName);
if (!isDefined(maybeLMarker)) {
//(nmccready) very important to not have model changes when lObject is changed
//this might be desirable in some cases but it causes two-way binding to lObject which is not ideal
//if it is left as the reference then all changes from oldModel vs newModel are ignored
//see _destroy (where modelDiff becomes meaningless if we do not copy here)
var marker = createMarker(model);
var layerName = (model ? model.layer : undefined) || maybeLayerName; //original way takes pref
if (!isDefined(marker)) {
$log.error(errorHeader + ' Received invalid data on the marker ' + newName + '.');
continue;
}
_setLMarker(marker, leafletMarkers, newName, maybeLayerName);
Helpers.modelChangeInDirective(watchTrap, "changeFromDirective", function () {
if (!isDefined(maybeLMarker)) {

// Bind message
if (isDefined(model.message)) {
marker.bindPopup(model.message, model.popupOptions);
}
var marker = createMarker(model);
var layerName = (model ? model.layer : undefined) || maybeLayerName; //original way takes pref
if (!isDefined(marker)) {
$log.error(errorHeader + ' Received invalid data on the marker ' + newName + '.');
return;
}
_setLMarker(marker, leafletMarkers, newName, maybeLayerName);

// Add the marker to a cluster group if needed
if (isDefined(model.group)) {
var groupOptions = isDefined(model.groupOption) ? model.groupOption : null;
addMarkerToGroup(marker, model.group, groupOptions, map);
}
// Bind message
if (isDefined(model.message)) {
marker.bindPopup(model.message, model.popupOptions);
}

// Show label if defined
if (Helpers.LabelPlugin.isLoaded() && isDefined(model.label) && isDefined(model.label.message)) {
marker.bindLabel(model.label.message, model.label.options);
}
// Add the marker to a cluster group if needed
if (isDefined(model.group)) {
var groupOptions = isDefined(model.groupOption) ? model.groupOption : null;
addMarkerToGroup(marker, model.group, groupOptions, map);
}

// Show label if defined
if (Helpers.LabelPlugin.isLoaded() && isDefined(model.label) && isDefined(model.label.message)) {
marker.bindLabel(model.label.message, model.label.options);
}

// Check if the marker should be added to a layer
if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))) {
// Check if the marker should be added to a layer
if (isDefined(model) && (isDefined(model.layer) || isDefined(maybeLayerName))) {

var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker, watchOptions.individual.type, map);
if (!pass) continue; //something went wrong move on in the loop
} else if (!isDefined(model.group)) {
// We do not have a layer attr, so the marker goes to the map layer
map.addLayer(marker);
if (watchOptions.individual.type === null && model.focus === true) {
marker.openPopup();
var pass = _maybeAddMarkerToLayer(layerName, layers, model, marker, watchOptions.individual.type, map);
if (!pass) return; //something went wrong move on in the loop
} else if (!isDefined(model.group)) {
// We do not have a layer attr, so the marker goes to the map layer
map.addLayer(marker);
if (watchOptions.individual.type === null && model.focus === true) {
marker.openPopup();
}
}

if (watchOptions.individual.type !== null) {
addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map, watchOptions.individual);
}

if (watchOptions.individual.type !== null) {
addMarkerWatcher(marker, pathToMarker, leafletScope, layers, map, watchOptions.individual);
listenMarkerEvents(marker, model, leafletScope, watchOptions.individual.type, map);
leafletMarkerEvents.bindEvents(mapId, marker, pathToMarker, model, leafletScope, layerName);
} else {
var oldModel = getModelFromModels(oldModels, newName, maybeLayerName);
updateMarker(model, oldModel, maybeLMarker, pathToMarker, leafletScope, layers, map);
}

listenMarkerEvents(marker, model, leafletScope, watchOptions.individual.type, map);
leafletMarkerEvents.bindEvents(mapId, marker, pathToMarker, model, leafletScope, layerName);
} else {
var oldModel = getModelFromModels(oldModels, newName, maybeLayerName);
updateMarker(model, oldModel, maybeLMarker, pathToMarker, leafletScope, layers, map);
}
});
}
};
var _seeWhatWeAlreadyHave = function _seeWhatWeAlreadyHave(markerModels, oldMarkerModels, lMarkers, isEqual, cb) {
Expand Down Expand Up @@ -4403,6 +4419,7 @@ angular.module('ui-leaflet').directive('markers', ["leafletLogger", "$rootScope"
leafletData.setMarkers(leafletMarkers, attrs.id);

maybeWatch(leafletScope, 'markers', watchOptions, function (newMarkers, oldMarkers) {
if (watchTrap.changeFromDirective) return;
_create(newMarkers, oldMarkers);
});
});
Expand Down
39 changes: 39 additions & 0 deletions dist/ui-leaflet.min.js

Large diffs are not rendered by default.

8 changes: 4 additions & 4 deletions dist/ui-leaflet.min.no-header.js

Large diffs are not rendered by default.

Loading