Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
79 commits
Select commit Hold shift + click to select a range
19814d6
ADD SearchEngineBase simple search engine + autocomplete
Viglino Oct 6, 2025
da490c9
Add Search service / default base class
Viglino Oct 6, 2025
0482fac
feat(search): Ajout service géocodage IGN + contrôle lié
MatRouillard Oct 8, 2025
bbfa376
fix(search): Gestion raccourcis clavier
MatRouillard Oct 9, 2025
dd29ef3
fix(search): Fix focus élément autocomplete
MatRouillard Oct 9, 2025
1504bd4
UPD Gestion de la croix + enter
Viglino Oct 9, 2025
b16cf43
feat(search): Ajout DSFR et modif icône
MatRouillard Oct 9, 2025
2dceda3
fix(search): Change dispatch event en click()
MatRouillard Oct 10, 2025
0612246
Update searchengine
Viglino Oct 10, 2025
59a5b12
feat(search): Ajout popup recherche
MatRouillard Oct 10, 2025
f53c94b
fix(search): Centre popup sur le point + ajout doc
MatRouillard Oct 10, 2025
3e1346b
ADD advanced search engine
Viglino Oct 13, 2025
28decb1
FIX Me localiser + ajout sur la carte
Viglino Oct 13, 2025
7328006
ADD advanced form list
Viglino Oct 13, 2025
b8b0a8c
feat(advanced-search): Ajout AbstractResearch + ajout dans le build w…
MatRouillard Oct 14, 2025
19a8f72
ADD LocationAdvancedSearch
Viglino Oct 16, 2025
b1cc79e
feat(search): Ajout location avancée code INSEE + merge commits
MatRouillard Oct 16, 2025
fe9f2db
fix(search): Fix type helper
MatRouillard Oct 16, 2025
2cdc7c3
feat(search): Ajout recherche avancée coordonnées
MatRouillard Oct 17, 2025
9982469
FIX input outline
Viglino Oct 20, 2025
3ce5871
fix(search): Fix popup + chgt rech. avancée coordonnées
MatRouillard Oct 21, 2025
2f3f76d
fix(search): Fix historique (mauvaise comparaison)
MatRouillard Oct 21, 2025
cf2c1f6
Merge pull request #454 from IGNF/main
MatRouillard Oct 21, 2025
76de403
fix(search): Fix CSS mobile et éléments DOM
MatRouillard Oct 21, 2025
7932023
feat(search): Ajout search dans index.js + fix css
MatRouillard Oct 21, 2025
00245e8
fix(search): Fix import service
MatRouillard Oct 21, 2025
7a97b2b
fix(search): fix paramètre ReturnTrueGeometry
MatRouillard Oct 21, 2025
e106778
fix(search): Fix icone point sur la carte
MatRouillard Oct 21, 2025
2b4321e
fix(search): Ajout z-index recherche avancée
MatRouillard Oct 21, 2025
09eaa7a
UPD add number of search / getResultFeatures
Viglino Oct 21, 2025
790486d
Merge branch 'feature/search-refonte' of https://github.com/IGNF/geop…
Viglino Oct 21, 2025
949894d
fix(search): fix width DSFR SM
MatRouillard Oct 22, 2025
3fc2e66
ADD multisearch list + format tooltips
Viglino Oct 22, 2025
0240e81
Merge branch 'feature/search-refonte' of https://github.com/IGNF/geop…
Viglino Oct 22, 2025
e8adf0b
ADD dispatch expand event on advanced search elemnts
Viglino Oct 22, 2025
88d2293
fix(search): Ajout layer en layer.setMap (et pas map.addLayer)
MatRouillard Oct 22, 2025
4ccd1ee
FIX accessibility
Viglino Oct 22, 2025
e399ade
fix(search): Fix suppr feature dans le popup
MatRouillard Oct 22, 2025
63b7ed5
fix(search): Gère focus / tab pour btn géoloc (autocomplete)
MatRouillard Oct 23, 2025
7b833ab
fix(search): Modif rech. av. lieux + code insee
MatRouillard Oct 23, 2025
adf2a9a
docs(search): Ajout doc + ajout services dans Services/
MatRouillard Oct 24, 2025
c45f31d
fix(search): Chgt index.js pour ajout services
MatRouillard Oct 24, 2025
68ac9ff
feat(search): Ajout btns custom popup + gere loc avancee + modif rech…
MatRouillard Oct 24, 2025
372a064
RFCT refactoring + gestion des erreurs
Viglino Oct 28, 2025
9ed5b03
RFC refactoring / gestion des erreurs
Viglino Oct 28, 2025
765b2d1
RFC refactoring / gestion des calques /
Viglino Oct 31, 2025
280533c
FIX regexp code
Viglino Oct 31, 2025
381a700
feat(search): Retrait class fr-search-bar + ajout bouton effacer saisie
MatRouillard Nov 6, 2025
ac05a6e
Merge pull request #463 from IGNF/main
MatRouillard Nov 19, 2025
f1a745b
Feat(parcel) add Parcel advanced search
Viglino Nov 19, 2025
91efd32
Feat: advanced search parcel
Viglino Nov 20, 2025
aee763e
feat(search): Ajout types recherche de base + chgt prettify result in…
MatRouillard Nov 20, 2025
7aec5e1
fix(search): Enlève ajout prettify pour la recherche
MatRouillard Nov 20, 2025
00ca1f3
fix(search): Chgt cours d'eau en hydrographie icônes
MatRouillard Nov 20, 2025
cc28320
fix(search): Fix bouton supprimer saisie
MatRouillard Nov 20, 2025
ca437e6
Fix: fetch numero on parcel section search
Viglino Nov 20, 2025
e52ebae
Merge branch 'feature/search-refonte' of https://github.com/IGNF/geop…
Viglino Nov 20, 2025
bb5eab4
feat(search): Gestion conteneur recherche avancée (focus et clic)
MatRouillard Nov 20, 2025
1b07875
fix(search): Fix bouton effacer saisie (click sur item) + focus input
MatRouillard Nov 21, 2025
6f1e279
fix(search-advanced): Ferme modale recherche avancée après une recherche
MatRouillard Nov 21, 2025
5ea0c9c
fix(search): Chgt icône effacer saisie
MatRouillard Nov 21, 2025
76026f1
fix(search): Ouvre popup lors d'une recherche (avancee ou non)
MatRouillard Nov 21, 2025
90f35ad
Fix load numero from section
Viglino Nov 21, 2025
4c0566e
fix(search): Enleve import Coordinate (bug)
MatRouillard Nov 21, 2025
d3dcaac
fix(search): Ajout bordure extent + corrige service ign
MatRouillard Nov 21, 2025
98209dc
feat(search): Ajout icônes pour différents types de recherche sur les…
MatRouillard Nov 21, 2025
01f7b12
Fix: fetch parcel number delay on key down
Viglino Nov 24, 2025
a9809dd
fix(search): Modif focus visible input / btn effacer + corrige rech. …
MatRouillard Nov 25, 2025
693ff9c
fix(search): Ajout msg erreurs rech. av. code INSEE
MatRouillard Nov 26, 2025
1745e07
fix(search): Ferme les accordéons de rech. av. après recherche
MatRouillard Nov 26, 2025
d0209d8
Fix recherche parcelles / arrondissements
Viglino Nov 26, 2025
cc8c9df
Merge branch 'feature/search-refonte' of https://github.com/IGNF/geop…
Viglino Nov 26, 2025
ab1fa7a
Fix: limitation des arrondissements à Paris / Lyon / Marseilles
Viglino Nov 26, 2025
e95571f
Fix: check validity
Viglino Nov 26, 2025
3a610d6
feat(search): Ajout rech. av. INSEE pour arrondissements
MatRouillard Nov 26, 2025
50e8ef0
Fix: arrondissements
Viglino Nov 26, 2025
63c137e
fix(search): Fix code_arr dans requete même sans arrondissement
MatRouillard Nov 26, 2025
8553ea7
ADD: interaction drawing
Viglino Dec 2, 2025
ab940b0
ADD: selecting interaction
Viglino Dec 2, 2025
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
5 changes: 1 addition & 4 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -45,10 +45,7 @@
"no-console": "off",
"no-proto": "off",
"no-prototype-builtins": "off",
"linebreak-style": [
"error",
"unix"
],
"linebreak-style": "off",
"padded-blocks": [
"error",
{
Expand Down
8 changes: 8 additions & 0 deletions build/webpack/controls.webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -74,6 +74,14 @@ module.exports = (env, argv) => {
// formats
break;
case "SearchEngine":
case "SearchEngineBase":
case "SearchEngineGeocodeIGN":
case "SearchEngineAdvanced":
case "LocationAdvancedSearch":
case "ParcelAdvancedSearch":
case "AbstractAdvancedSearch":
case "InseeAdvancedSearch":
case "CoordinateAdancedSearch":
// crs
break;
case "MeasureArea":
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 @@ -28,6 +28,7 @@ module.exports = (env, argv) => {
path.join(rootdir, "src", "packages", "CSS", "Controls/ReverseGeocoding", "GPFreverseGeocodingStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/Route", "GPFrouteStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/SearchEngine", "GPFsearchEngineStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/SearchEngine", "GPFadvancedSearchEngineStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/ToolBoxMeasure", "GPFtoolBoxMeasureStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/Zoom", "GPFzoomStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/FullScreen", "GPFfullScreenStyle.css"),
Expand Down Expand Up @@ -64,6 +65,7 @@ module.exports = (env, argv) => {
path.join(rootdir, "src", "packages", "CSS", "Controls/ReverseGeocoding", "DSFRreverseGeocodingStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/Route", "DSFRrouteStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/SearchEngine", "DSFRsearchEngineStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/SearchEngine", "DSFRadvancedSearchEngineStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/ToolBoxMeasure", "DSFRtoolBoxMeasureStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/Zoom", "DSFRzoomStyle.css"),
path.join(rootdir, "src", "packages", "CSS", "Controls/FullScreen", "DSFRfullScreenStyle.css"),
Expand Down
11 changes: 11 additions & 0 deletions build/webpack/modules.webpack.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@ module.exports = (env, argv) => {
"GpfExtOlReverseGeocode" : path.join(rootdir, "src", "packages", "Controls/ReverseGeocode", "ReverseGeocode.js"),
"GpfExtOlRoute" : path.join(rootdir, "src", "packages", "Controls/Route", "Route.js"),
"GpfExtOlSearchEngine" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "SearchEngine.js"),
"GpfExtOlSearchEngineBase" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "SearchEngineBase.js"),
"GpfExtOlSearchEngineGeocodeIGN" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "SearchEngineGeocodeIGN.js"),
"GpfExtOlSearchEngineAdvanced" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "SearchEngineAdvanced.js"),
"GpfExtOlLocationAdvancedSearch" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "LocationAdvancedSearch.js"),
"GpfExtOlParcelAdvancedSearch" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "ParcelAdvancedSearch.js"),
"GpfExtOlInseeAdvancedSearch" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "InseeAdvancedSearch.js"),
"GpfExtOlAbstractAdvancedSearch" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "AbstractAdvancedSearch.js"),
"GpfExtOlCoordinateAdvancedSearch" : path.join(rootdir, "src", "packages", "Controls/SearchEngine", "CoordinateAdvancedSearch.js"),
"GpfExtOlExport" : path.join(rootdir, "src", "packages", "Controls/Export", "Export.js"),
"GpfExtOlMeasureArea" : path.join(rootdir, "src", "packages", "Controls", "Measures", "MeasureArea.js"),
"GpfExtOlMeasureAzimuth" : path.join(rootdir, "src", "packages", "Controls", "Measures", "MeasureAzimuth.js"),
Expand All @@ -58,6 +66,9 @@ module.exports = (env, argv) => {
"GpfExtOlControlList" : path.join(rootdir, "src", "packages", "Controls/ControlList", "ControlList.js"),
"GpfExtOlContextMenu" : path.join(rootdir, "src", "packages", "Controls/ContextMenu", "ContextMenu.js"),
"GpfExtOlReporting" : path.join(rootdir, "src", "packages", "Controls/Reporting", "Reporting.js"),
// Interactions
"GpfExtOlDrawingInteraction" : path.join(rootdir, "src", "packages", "Interactions/Drawing.js"),
"GpfExtOlSelectingInteraction" : path.join(rootdir, "src", "packages", "Interactions/Selecting.js"),
// Formats étendus
"GpfExtOlFormats" : [
path.join(rootdir, "src", "packages", "Formats", "GeoJSON.js"),
Expand Down
1 change: 1 addition & 0 deletions demos/angular-project/angular.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@
"node_modules/geopf-extensions-openlayers/src/packages/CSS/Controls/MousePosition/GPFmousePosition.css",
"node_modules/geopf-extensions-openlayers/src/packages/CSS/Controls/Export/GPFexport.css",
"node_modules/geopf-extensions-openlayers/src/packages/CSS/Controls/SearchEngine/GPFsearchEngine.css",
"node_modules/geopf-extensions-openlayers/src/packages/CSS/Controls/SearchEngine/GPFadvancedSearchEngine.css",
"node_modules/geopf-extensions-openlayers/src/packages/CSS/Controls/Editor/GPFeditor.css",
"node_modules/geopf-extensions-openlayers/src/packages/CSS/Controls/ReverseGeocoding/GPFreverseGeocoding.css",
"node_modules/geopf-extensions-openlayers/src/packages/CSS/Controls/Drawing/GPFdrawing.css",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,100 @@
{{#extend "ol-sample-modules-dsfr-layout"}}

{{#content "vendor"}}
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlDrawingInteraction.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlDrawingInteraction.js"></script>
<script src="{{ baseurl }}/dist/modules/GpfExtOlSelectingInteraction.js"></script>
{{/content}}

{{#content "head"}}
<title>Sample openlayers Drawing interaction</title>
{{/content}}

{{#content "style"}}
<style>
div#map {
width: 100%;
height: 500px;
}
[id^="GPsearchEngine-"] {
top: 8px;
}
</style>
{{/content}}

{{#content "body"}}
<h2>Outil de dessin avec style</h2>
<!-- map -->
<div id="map">
</div>
<p>Dernière sélection : <span id="selection"></span></p>
<button class="fr-btn fr-btn--secondary" onclick="setType('Point')">Point</button>
<button class="fr-btn fr-btn--secondary" onclick="setType('LineString')">Ligne</button>
<button class="fr-btn fr-btn--secondary" onclick="setType('Polygon')">Surface</button>
{{/content}}

{{#content "js"}}
<script type="text/javascript">
var map;
window.onload = function() {
// on cache l'image de chargement du Géoportail.
document.getElementById('map').style.backgroundImage = 'none';

let source = new ol.source.Vector({})
let layer = new ol.layer.Vector({
source: source
})
// 1. Création de la map
map = new ol.Map({
target : "map",
view : new ol.View({
center : [288074.8449901076, 6247982.515792289],
zoom : 6
}),
layers : [
new ol.layer.Tile({
source: new ol.source.OSM(),
// zIndex : 4,
opacity: 0.5
}),
layer
]
});

// Drawing
const drawing = {};
["Point", "LineString", "Polygon"].forEach(k => {
drawing[k] = new ol.interaction.Drawing({
type : k,
source : source
});
})
layer.setStyle(drawing.Point.getStyle());
Object.keys(drawing).forEach((k, i) => {
drawing[k].setActive(false);
map.addInteraction(drawing[k]);
});

// Activate drawing
window.setType = function (type) {
Object.keys(drawing).forEach(k => {
drawing[k].setActive(type===k);
});
}
// Deactivate drawing on drawend
Object.keys(drawing).forEach((k, i) => {
drawing[k].on("drawend", () => {
setTimeout(() => drawing[k].setActive(false));
});
});

const select = new ol.interaction.Selecting({

});
map.addInteraction(select);
select.on('dblclick', e => console.log(e.feature));
};
</script>
{{/content}}

{{/extend}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,88 @@
{{#extend "ol-sample-modules-layout"}}

{{#content "vendor"}}

<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlSearchEngine.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlSearchEngineBase.js"></script>
{{/content}}

{{#content "head"}}
<title>Sample openlayers SearchEngine</title>
{{/content}}

{{#content "style"}}
<style>
div#map {
width: 100%;
height: 500px;
}
</style>
{{/content}}

{{#content "body"}}
<h2>Ajout du moteur de recherche avec les options par défaut</h2>
<!-- map -->
<div id="map">
</div>
<p>Dernière sélection : <span id="selection"></span></p>
{{/content}}

{{#content "js"}}
<script type="text/javascript">
var map;
window.onload = function() {
// on cache l'image de chargement du Géoportail.
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
}),
layers : [
new ol.layer.Tile({
source: new ol.source.OSM(),
// zIndex : 4,
opacity: 0.5
})
]
});

// 2. Appel du SearchEngine
var search = new ol.control.SearchEngineBase({
searchService: new ol.service.DefaultSearchService({
searchTab : [
"Paris", "Joinville-le-Pont",
"Créteil", "Maisons-Alfort", "Alfortville", "Ivry-sur-Seine", "Charenton-le-Pont",
"Saint-Maurice", "Nogent-sur-Marne", "Le Perreux-sur-Marne", "Neuilly-Plaisance",
"Bry-sur-Marne", "Villiers-sur-Marne", "Champigny-sur-Marne", "Chennevières-sur-Marne",
"Ormesson-sur-Marne", "Santeny", "Limeil-Brévannes", "Valenton", "Villecresnes",
"Marolles-en-Brie", "La Queue-en-Brie", "Boissy-Saint-Léger", "Sucy-en-Brie",
"Bonneuil-sur-Marne", "Crécy-la-Chapelle", "Chelles", "Gournay-sur-Marne",
"Le Raincy", "Clichy-sous-Bois", "Montfermeil", "Vaujours", "Tremblay-en-France",
"Coubron", "Aulnay-sous-Bois", "Sevran", "Livry-Gargan", "Clichy-sous-Bois",
"Montfermeil", "Gagny", "Neuilly-sur-Marne", "Noisy-le-Grand", "Noisy-le-Sec",
"Romainville", "Les Lilas", "Bagnolet", "Montreuil", "Vincennes", "Fontenay-sous-Bois"
]}),
collapsible: true
});

// 3. Ajout du SearchEngine à la carte
map.addControl(search);

// Get search info
search.on('search', e => {
console.log("search", e);
document.getElementById("selection").innerHTML = e.result;
})
// Get search info
search.on('autocomplete', e => {
console.log("autocomplete", e);
})
};
</script>
{{/content}}

{{/extend}}
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
{{#extend "ol-sample-modules-dsfr-layout"}}

{{#content "vendor"}}

<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlSearchEngine.css" />
<link rel="stylesheet" href="{{ baseurl }}/dist/modules/GpfExtOlAbstractAdvancedSearch.css" />
<script src="{{ baseurl }}/dist/modules/GpfExtOlSearchEngineAdvanced.js"></script>
<script src="{{ baseurl }}/dist/modules/GpfExtOlInseeAdvancedSearch.js"></script>
<script src="{{ baseurl }}/dist/modules/GpfExtOlLocationAdvancedSearch.js"></script>
<script src="{{ baseurl }}/dist/modules/GpfExtOlParcelAdvancedSearch.js"></script>
<script src="{{ baseurl }}/dist/modules/GpfExtOlCoordinateAdvancedSearch.js"></script>
{{/content}}

{{#content "head"}}
<title>Sample openlayers SearchEngine</title>
{{/content}}

{{#content "style"}}
<style>
div#map {
width: 100%;
height: 500px;
}
[id^="GPsearchEngine-"] {
top: 8px;
}
</style>
{{/content}}

{{#content "body"}}
<h2>Ajout du moteur de recherche avec les options par défaut</h2>
<!-- map -->
<div id="map">
</div>
<p>Dernière sélection : <span id="selection"></span></p>
<button class="fr-btn fr-btn--secondary">Bouton pour le focus</button>
{{/content}}

{{#content "js"}}
<script type="text/javascript">
var map;
window.onload = function() {
// on cache l'image de chargement du Géoportail.
document.getElementById('map').style.backgroundImage = 'none';

let source = new ol.source.Vector({})
let layer = new ol.layer.Vector({
source: source
})
// 1. Création de la map
map = new ol.Map({
target : "map",
view : new ol.View({
center : [288074.8449901076, 6247982.515792289],
zoom : 6
}),
layers : [
new ol.layer.Tile({
source: new ol.source.OSM(),
// zIndex : 4,
opacity: 0.5
}),
layer
]
});

var insee = new ol.control.InseeAdvancedSearch({
})

var location = new ol.control.LocationAdvancedSearch({
})

var parcel = new ol.control.ParcelAdvancedSearch({
})

var coordinates = new ol.control.CoordinateAdvancedSearch({
})

let addFeatureToLayer = function (feature) {
source.addFeature(feature);
// Feature traitée => supprimer de la recherche
return true;
/*
// Feature non traitée => conserver la recherche
return false;
*/
}

// 2. Appel du SearchEngine
var search = new ol.control.SearchEngineAdvanced({
advancedSearch : [insee, location, coordinates, parcel],
returnTrueGeometry : true,
popupButtons : [{
label : "Ajouter l'objet à la couche",
className : "custom-button",
icon : "fr-icon-map-pin-add-line",
attributes : {
"data-action" : "add-feature",
},
onClick : addFeatureToLayer
}]
});

// 3. Ajout du SearchEngine à la carte
map.addControl(search);

// Get search info
search.on('select', e => {
console.log("Select", e)
document.getElementById("selection").innerHTML = e.title;
})

// Get search info
search.on('search', e => {
console.log("search", e)
})
};
</script>
{{/content}}

{{/extend}}
Loading