Commit 0ead6c57 authored by Benoit Lavenier's avatar Benoit Lavenier
Browse files

[enh] Home: add map, using GeoJson loaded from the Pod

[enh] Admin: admin can edit and post GeoJson regions
parent 5dea96a4
Pipeline #9609 failed
......@@ -130,14 +130,16 @@ angular.module('cesium.directives', [])
})
.catch(UIUtils.onError('ERROR.COPY_CLIPBOARD'));
}
else if (value) {
else {
var rows = value && value.indexOf('\n') >= 0 ? value.split('\n').length : 1;
UIUtils.popover.show(event, {
scope: scope,
templateUrl: 'templates/common/popover_copy.html',
bindings: {
value: attrs.copyOnClick,
rows: rows
rows: rows,
copied: false
},
autoselect: '.popover-copy ' + (rows <= 1 ? 'input' : 'textarea'),
......@@ -152,6 +154,7 @@ angular.module('cesium.directives', [])
} : undefined
});
}
};
element.bind('click', showCopyPopover);
element.bind('hold', showCopyPopover);
......
......@@ -157,20 +157,22 @@ function ESCommentsController($scope, $filter, $state, $focus, $timeout, $anchor
$scope.anchor = state && state.stateParams.anchor;
}
// second call (when using cached view)
else if (!$scope.loading && $scope.id) {
else if ($scope.id) {
$scope.load($scope.id, {animate: false});
}
});
$scope.$on('$recordView.load', function(event, id, service) {
$scope.id = id || $scope.id;
$scope.service = service || $scope.service;
console.debug("[ES] [comment] Will use {" + service.index + "} service");
$scope.service = service.comment || $scope.service;
console.debug("[ES] [comment] Will use {" + $scope.service.index + "} service");
if ($scope.id) {
$scope.load($scope.id)
.then(function() {
// Scroll to anchor
$scope.scrollToAnchor();
return $timeout(function() {
// Scroll to anchor
$scope.scrollToAnchor();
}, 500);
});
}
});
......@@ -410,6 +412,7 @@ function ESSocialsViewController($scope) {
'ngInject';
$scope.openSocial = function(event, social) {
event.stopPropagation();
return $scope.openLink(event, social.url, {
type: social.type
});
......@@ -512,7 +515,7 @@ function ESPositionEditController($scope, csConfig, esGeo, ModalUtils) {
$scope.formPosition.loading = true;
return esGeo.point.searchByAddress(searchText)
.then(function(res) {
if (res && res.length == 1) {
if (res && res.length === 1) {
return $scope.updateGeoPoint(res[0]);
}
return $scope.openSearchLocationModal({
......@@ -531,15 +534,15 @@ function ESPositionEditController($scope, csConfig, esGeo, ModalUtils) {
};
$scope.onCityChanged = function() {
if ($scope.loading) return;
if ($scope.formPosition.enable) {
if ($scope.formData.geoPoint) {
// Invalidate the position
$scope.formData.geoPoint.lat = undefined;
$scope.formData.geoPoint.lon = undefined;
}
return $scope.tryToLocalize();
if ($scope.loading) return;
if ($scope.formPosition.enable) {
if ($scope.formData.geoPoint) {
// Invalidate the position
$scope.formData.geoPoint.lat = undefined;
$scope.formData.geoPoint.lon = undefined;
}
return $scope.tryToLocalize();
}
};
$scope.onUseGeopointChanged = function() {
......@@ -566,7 +569,7 @@ function ESPositionEditController($scope, csConfig, esGeo, ModalUtils) {
$scope.getAddressToSearch = function() {
return $scope.formData.address && $scope.formData.city ?
[$scope.formData.address.trim(), $scope.formData.city.trim()].join(', ') :
$scope.formData.city || $scope.formData.address || $scope.formData.location ;
$scope.formData.city || $scope.formData.address || $scope.formData.location ;
};
$scope.updateGeoPoint = function(res) {
......@@ -586,7 +589,7 @@ function ESPositionEditController($scope, csConfig, esGeo, ModalUtils) {
if (res.address.postcode) {
cityParts.push(res.address.postcode);
}
if (res.address.country != defaultCountry) {
if (res.address.country !== defaultCountry) {
cityParts.push(res.address.country);
}
$scope.formData.city = cityParts.join(', ');
......@@ -654,31 +657,31 @@ function ESLookupPositionController($scope, $q, csConfig, esGeo, ModalUtils) {
var promise = !searchText ?
esGeo.point.current() :
esGeo.point.searchByAddress(searchText)
.then(function(res) {
if (res && res.length == 1) {
res[0].exact = true;
return res[0];
}
return $scope.openSearchLocationModal({
text: searchText,
results: res||[],
forceFallback: !res || !res.length // force fallback search first
})
.then(function(res) {
// Compute point name
if (res && res.address && res.address.city) {
var cityParts = [res.address.city];
if (res.address.postcode) {
cityParts.push(res.address.postcode);
}
if (res.address.country != defaultCountry) {
cityParts.push(res.address.country);
.then(function(res) {
if (res && res.length === 1) {
res[0].exact = true;
return res[0];
}
return $scope.openSearchLocationModal({
text: searchText,
results: res||[],
forceFallback: !res || !res.length // force fallback search first
})
.then(function(res) {
// Compute point name
if (res && res.address && res.address.city) {
var cityParts = [res.address.city];
if (res.address.postcode) {
cityParts.push(res.address.postcode);
}
if (res.address.country !== defaultCountry) {
cityParts.push(res.address.country);
}
res.shortName = cityParts.join(', ');
}
res.shortName = cityParts.join(', ');
}
return res;
});
});
return res;
});
});
promise
.then(function(res) {
......@@ -730,7 +733,7 @@ function ESLookupPositionController($scope, $q, csConfig, esGeo, ModalUtils) {
};
}
function ESSearchPositionItemController($scope, $timeout, ModalUtils, csConfig, esGeo) {
function ESSearchPositionItemController($scope, $timeout, UIUtils, ModalUtils, csConfig, esGeo) {
'ngInject';
// The default country used for address localisation
......@@ -813,7 +816,7 @@ function ESSearchPositionItemController($scope, $timeout, ModalUtils, csConfig,
$scope.showDropdown = function() {
var text = $scope.search.location && $scope.search.location.trim();
if (!text || text.length < minLength) {
return $scope.hideDropdown(true/*force, if still loading*/);
return $scope.hideDropdown(true/*force, if still loading*/);
}
// Compute a request id, to apply response only if current request
......@@ -873,7 +876,7 @@ function ESSearchPositionItemController($scope, $timeout, ModalUtils, csConfig,
if (res.address.postcode) {
cityParts.push(res.address.postcode);
}
if (res.address.country != defaultCountry) {
if (res.address.country !== defaultCountry) {
cityParts.push(res.address.country);
}
$scope.search.location = cityParts.join(', ');
......@@ -897,16 +900,35 @@ function ESSearchPositionItemController($scope, $timeout, ModalUtils, csConfig,
};
return ModalUtils.show(
'plugins/es/templates/common/modal_location.html',
'ESSearchPositionModalCtrl',
parameters,
{
focusFirstInput: true
}
)
'plugins/es/templates/common/modal_location.html',
'ESSearchPositionModalCtrl',
parameters,
{
focusFirstInput: true
})
.then($scope.selectLocation);
};
/* -- popover -- */
$scope.showDistancePopover = function(event) {
UIUtils.popover.show(event, {
templateUrl: 'plugins/es/templates/common/popover_distances.html',
scope: $scope,
autoremove: true,
afterShow: function(popover) {
$scope.actionsPopover = popover;
}
});
};
$scope.selectDistance = function(value) {
$scope.search.geoDistance = value;
if ($scope.actionsPopover) {
$scope.actionsPopover.hide();
}
};
}
function ESSearchPositionModalController($scope, $q, $translate, esGeo, parameters) {
......@@ -936,13 +958,13 @@ function ESSearchPositionModalController($scope, $q, $translate, esGeo, paramete
// Compute alternative query text
var fallbackText = firstSearch && $scope.search.fallbackText && $scope.search.fallbackText.trim();
fallbackText = fallbackText && fallbackText != text ? fallbackText : undefined;
fallbackText = fallbackText && fallbackText !== text ? fallbackText : undefined;
// Execute the given query
return ((firstSearch && $scope.search.forceFallback && $scope.search.results) ?
$q.when($scope.search.results) :
esGeo.point.searchByAddress(text)
)
)
.then(function(res) {
if (res && res.length || !fallbackText) return res;
......
......@@ -238,8 +238,8 @@ function MapWotViewController($scope, $filter, $templateCache, $interpolate, $ti
maxClusterRadius: 65,
showCoverageOnHover: false,
iconCreateFunction: function (cluster) {
//var countByLayer = _.countBy(cluster.getAllChildMarkers(), extractMarkerLayer);
var markerColor = 'blue'; //countByLayer.member ? 'blue' : (countByLayer.pending ? 'lightgreen' : 'lightgray');
var countByLayer = _.countBy(cluster.getAllChildMarkers(), extractMarkerLayer);
var markerColor = countByLayer.member ? 'blue' : (countByLayer.pending ? 'lightgreen' : 'lightgray');
var childCount = cluster.getChildCount();
var className = 'marker-cluster ' + markerColor + ' marker-cluster-';
if (childCount < 10) {
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment