Skip to content

Commit

Permalink
Merge pull request #329 from IGNF/feature/right-click-menu
Browse files Browse the repository at this point in the history
menu contextuel clic droit
  • Loading branch information
IGNFhc authored Jan 21, 2025
2 parents 750b292 + 3f42e79 commit 5e51951
Show file tree
Hide file tree
Showing 16 changed files with 1,280 additions and 13 deletions.
1 change: 1 addition & 0 deletions DRAFT_CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Mise à jour de la dépendance à Openlayers dans sa version 10.3.1

- ajout du widget ControlList en mode classique (#300)
- ajout d'une option unit au widget de mesure de distance (#317)
- ajout du menu contextuel en mode DSFR et classique (#329)
- ajout de documentation de contribution (#327)

* 🔨 [Changed]
Expand Down
3 changes: 3 additions & 0 deletions build/webpack/controls.webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,9 @@ module.exports = (env, argv) => {
case "ControlList":
// ras
break;
case "ContextMenu":
// ras
break;
case "Editor":
// ras
break;
Expand Down
2 changes: 2 additions & 0 deletions build/webpack/extend.themes.webpack.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,7 @@ module.exports = (env, argv) => {
path.join(rootdir, "src", "packages", "CSS", "Controls/Catalog", "GPFcatalogStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/Territories", "GPFterritoriesStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/ControlList", "GPFcontrolListStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/ContextMenu", "GPFcontextMenuStyle.css"),
],
// CSS themes dsfr
"Dsfr" : [
Expand Down Expand Up @@ -67,6 +68,7 @@ module.exports = (env, argv) => {
path.join(rootdir, "src", "packages", "CSS", "Controls/Catalog", "DSFRcatalogStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/Territories", "DSFRterritoriesStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/ControlList", "DSFRcontrolListStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/ContextMenu", "DSFRcontextMenuStyle.css"),
],
}
};
Expand Down
1 change: 1 addition & 0 deletions build/webpack/modules.webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,7 @@ module.exports = (env, argv) => {
"GpfExtOlCatalog" : path.join(rootdir, "src", "packages", "Controls/Catalog", "Catalog.js"),
"GpfExtOlTerritories" : path.join(rootdir, "src", "packages", "Controls/Territories", "Territories.js"),
"GpfExtOlControlList" : path.join(rootdir, "src", "packages", "Controls/ControlList", "ControlList.js"),
"GpfExtOlContextMenu" : path.join(rootdir, "src", "packages", "Controls/ContextMenu", "ContextMenu.js"),
// Formats étendus
"GpfExtOlFormats" : [
path.join(rootdir, "src", "packages", "Formats", "GeoJSON.js"),
Expand Down
5 changes: 4 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
"setup": "npm install",
"clean": "npx rimraf dist/ jsdoc/ samples/",
"eslint": "eslint src/",
"lintfix": "eslint --fix src/",
"test": "npm run test:serve",
"test:serve": "echo \"Warning: target not yet implemented!\" && exit 0",
"sample:bundle": "webpack serve --config build/webpack/bundle.webpack.config --mode development",
Expand Down Expand Up @@ -49,11 +50,13 @@
"loglevel": "^1.9.1",
"markdown-toc": "^1.2.0",
"ol": "10.3.1",
"ol-contextmenu": "^5.5.0",
"ol-mapbox-style": "12.4.0",
"proj4": "2.15.0",
"sortablejs": "1.15.3",
"typescript": "^5.3.3",
"whatwg-fetch": "3.6.20"
"whatwg-fetch": "3.6.20",
"yargs": "^17.7.2"
},
"devDependencies": {
"@babel/core": "^7.23.9",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
{{#extend "ol-sample-modules-dsfr-layout"}}
{{#content "vendor"}}
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlLayerSwitcher.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlLayerSwitcher.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlIsocurve.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlIsocurve.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlLayerImport.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlLayerImport.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlRoute.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlRoute.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlCatalog.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlCatalog.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlLegends.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlLegends.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlContextMenu.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlContextMenu.js"></script>
{{/content}}
{{#content "head"}}
<title>Sample openlayers ContextMenu dsfr</title>
{{/content}}
{{#content "style"}}
<style>
div#map {
width: 100%;
height: 700px;
}
</style>
{{/content}}
{{#content "body"}}
<h2>Ajout de tous les widgets</h2>
<!-- map -->
<div id="map">
</div>
{{/content}}

{{#content "js"}}
<script>
var map;
var createMap = function () {
document.getElementById('map').style.backgroundImage = 'none';

// 1. Création de la map
map = new ol.Map({
target : "map",
view : new ol.View({
center : [288074.8449901076, 6247982.515792289],
zoom : 6
})
});

// 2. Ajout de plusieurs couches différentes.
var gpMaps = new ol.layer.Tile({
source : new ol.source.GeoportalWMTS({
layer: "GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2"
})
});
map.addLayer(gpMaps);

// 3. Ajout du context menu
var itemsOpt = [ {
text : "Imprimer la carte",
classname : "ol-context-menu-custom fr-text--md",
callback : function() {alert("fonction à ajouter IMPRESSION!!")},
}]

var contextMenu = new ol.control.ContextMenu({
contextMenuItemsOptions : itemsOpt
});
map.addControl(contextMenu);


// 5. Ajout du contrôle de gestion de l'empilement des couches (layerSwitcher)
var layerSwitcher = new ol.control.LayerSwitcher({
options : {
collapsed: false
}
});
map.addControl(layerSwitcher);

var iso = new ol.control.Isocurve({
draggable: true,
position : "bottom-left"
});
map.addControl(iso);

var layerImport = new ol.control.LayerImport({
draggable: true,
position : "bottom-left"
});
map.addControl(layerImport);

var route = new ol.control.Route({
draggable: true,
position : "bottom-right",
listable: true,
description: "Calculez un itinéraire véhicule ou piéton entre deux ou plusieurs points",
});
map.addControl(route);

var legends = new ol.control.Legends({
draggable: true,
position: "bottom-left",
panel: true,
auto: true
});
map.addControl(legends);
var catalog = new ol.control.Catalog({
draggable: true,
position: "top-left",
panel: true,
auto: true
});
map.addControl(catalog);
};
Gp.Services.getConfig({
customConfigFile : "https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/layers.json",
callbackSuffix : "",
// apiKey: "essentiels,cartes,adresse,lambert93",
timeOut : 20000,
onSuccess : createMap,
onFailure : (e) => {
console.error(e);
}
});
</script>
{{/content}}
{{/extend}}

128 changes: 128 additions & 0 deletions samples-src/pages/tests/ContextMenu/pages-ol-modules-contextmenu.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,128 @@
{{#extend "ol-sample-modules-layout"}}
{{#content "vendor"}}
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlLayerSwitcher.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlLayerSwitcher.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlIsocurve.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlIsocurve.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlLayerImport.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlLayerImport.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlRoute.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlRoute.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlCatalog.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlCatalog.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlLegends.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlLegends.js"></script>
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlContextMenu.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlContextMenu.js"></script>
{{/content}}
{{#content "head"}}
<title>Sample openlayers ContextMenu dsfr</title>
{{/content}}
{{#content "style"}}
<style>
div#map {
width: 100%;
height: 700px;
}
</style>
{{/content}}
{{#content "body"}}
<h2>Ajout de tous les widgets</h2>
<!-- map -->
<div id="map">
</div>
{{/content}}

{{#content "js"}}
<script>
var map;
var createMap = function () {
document.getElementById('map').style.backgroundImage = 'none';

// 1. Création de la map
map = new ol.Map({
target : "map",
view : new ol.View({
center : [288074.8449901076, 6247982.515792289],
zoom : 6
})
});

// 2. Ajout de plusieurs couches différentes.
var gpMaps = new ol.layer.Tile({
source : new ol.source.GeoportalWMTS({
layer: "GEOGRAPHICALGRIDSYSTEMS.PLANIGNV2"
})
});
map.addLayer(gpMaps);

// 3. Ajout du context menu
var itemsOpt = [ {
text : "Imprimer la carte",
classname : "ol-context-menu-custom fr-text--md",
callback : function() {alert("fonction à ajouter IMPRESSION!!")},
}]

var contextMenu = new ol.control.ContextMenu({
contextMenuItemsOptions : itemsOpt
});
map.addControl(contextMenu);


// 5. Ajout du contrôle de gestion de l'empilement des couches (layerSwitcher)
var layerSwitcher = new ol.control.LayerSwitcher({
options : {
collapsed: false
}
});
map.addControl(layerSwitcher);

var iso = new ol.control.Isocurve({
draggable: true,
position : "bottom-left"
});
map.addControl(iso);

var layerImport = new ol.control.LayerImport({
draggable: true,
position : "bottom-left"
});
map.addControl(layerImport);

var route = new ol.control.Route({
draggable: true,
position : "bottom-right",
listable: true,
description: "Calculez un itinéraire véhicule ou piéton entre deux ou plusieurs points",
});
map.addControl(route);

var legends = new ol.control.Legends({
draggable: true,
position: "bottom-left",
panel: true,
auto: true
});
map.addControl(legends);
var catalog = new ol.control.Catalog({
draggable: true,
position: "top-left",
panel: true,
auto: true
});
map.addControl(catalog);
};
Gp.Services.getConfig({
customConfigFile : "https://data.geopf.fr/annexes/cartes.gouv.fr-config/public/layers.json",
callbackSuffix : "",
// apiKey: "essentiels,cartes,adresse,lambert93",
timeOut : 20000,
onSuccess : createMap,
onFailure : (e) => {
console.error(e);
}
});
</script>
{{/content}}
{{/extend}}

1 change: 1 addition & 0 deletions src/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,7 @@ export { default as Legends } from "./packages/Controls/Legends/Legends";
export { default as Catalog } from "./packages/Controls/Catalog/Catalog";
export { default as Territories } from "./packages/Controls/Territories/Territories";
export { default as ControlList } from "./packages/Controls/ControlList/ControlList";
export { default as ContextMenu } from "./packages/Controls/ContextMenu/ContextMenu";

// proj4
export { default as Proj4 } from "proj4";
Expand Down
Loading

0 comments on commit 5e51951

Please sign in to comment.