UNPKG

geoportal-extensions-openlayers

Version:

![GitHub package.json version](https://img.shields.io/github/package-json/v/IGNF/geoportal-extensions?filename=build%2Fscripts%2Frelease%2Fpackage-openlayers.json)

458 lines (402 loc) 16.7 kB
var ReverseGeocodingDOM = { /** * Add uuid to the tag ID * @param {String} id - id selector * @returns {String} uid - id selector with an unique id */ _addUID : function (id) { var uid = (this._uid) ? id + "-" + this._uid : id; return uid; }, /** * Main container (DOM) * * @returns {DOMElement} DOM element */ _createMainContainerElement : function () { var container = document.createElement("div"); container.id = this._addUID("GPreverseGeocoding"); container.className = "GPwidget"; return container; }, // ################################################################### // // ################### Methods of main container ##################### // // ################################################################### // /** * Hidden checkbox for minimizing/maximizing * * @returns {DOMElement} DOM element */ _createShowReverseGeocodingElement : function () { var input = document.createElement("input"); input.id = this._addUID("GPshowReverseGeocoding"); input.type = "checkbox"; return input; }, /** * Show ReverseGeocoding * * @returns {DOMElement} DOM element */ _createShowReverseGeocodingPictoElement : function () { // contexte d'execution var self = this; var label = document.createElement("label"); label.id = this._addUID("GPshowReverseGeocodingPicto"); label.className = "GPshowAdvancedToolPicto"; label.htmlFor = this._addUID("GPshowReverseGeocoding"); label.title = "Ouvrir la recherche inverse"; // Close all results and panels when minimizing the widget if (label.addEventListener) { label.addEventListener("click", function () { self.onShowReverseGeocodingClick(); }); } else if (label.attachEvent) { label.attachEvent("onclick", function () { self.onShowReverseGeocodingClick(); }); } var spanOpen = document.createElement("span"); spanOpen.id = this._addUID("GPshowReverseGeocodingOpen"); spanOpen.className = "GPshowAdvancedToolOpen"; label.appendChild(spanOpen); return label; }, /** * Create Waiting Panel * * @returns {DOMElement} DOM element */ _createReverseGeocodingWaitingElement : function () { var div = document.createElement("div"); div.id = this._addUID("GPreverseGeocodingCalcWaitingContainer"); div.className = "GPreverseGeocodingCalcWaitingContainerHidden"; var p = document.createElement("p"); p.className = "GPreverseGeocodingCalcWaiting"; p.innerHTML = "Recherche en cours..."; div.appendChild(p); return div; }, /** * Reverse geocoding results panel element. * * @returns {DOMElement} DOM element */ _createReverseGeocodingResultsPanelElement : function () { var resultsPanelDiv = document.createElement("div"); resultsPanelDiv.id = this._addUID("GPreverseGeocodingResultsPanel"); resultsPanelDiv.className = "GPpanel GPreverseGeocodingComponentHidden"; return resultsPanelDiv; }, /** * Reverse geocoding results list. * * @returns {DOMElement} DOM element */ _createReverseGeocodingResultsListElement : function () { var container = document.createElement("div"); container.id = this._addUID("GPreverseGeocodingResultsList"); // Results are dynamically filled in Javascript by reverse geocoding service return container; }, /** * Add Result * (results dynamically generate !) * * @param {String} locationDescription - reverse geocoded location results * @param {Number} id - ID */ _createReverseGeocodingResultElement : function (locationDescription, id) { // contexte var context = this; var container = document.getElementById(this._addUID("GPreverseGeocodingResultsList")); var div = document.createElement("div"); div.id = this._addUID("ReverseGeocodedLocation_" + id); div.className = "GPautoCompleteProposal"; div.innerHTML = locationDescription; div.title = locationDescription; if (div.addEventListener) { div.addEventListener("mouseover", function (e) { context.onReverseGeocodingResultMouseOver(e); }); div.addEventListener("mouseout", function (e) { context.onReverseGeocodingResultMouseOut(e); }); div.addEventListener("click", function (e) { if (typeof context.onReverseGeocodingResultClick === "function") { context.onReverseGeocodingResultClick(e); } }); } else if (div.attachEvent) { div.attachEvent("onmouseover", function (e) { context.onReverseGeocodingResultMouseOver(e); }); div.attachEvent("onmouseout", function (e) { context.onReverseGeocodingResultMouseOut(e); }); div.attachEvent("onclick", function (e) { if (typeof context.onReverseGeocodingResultClick === "function") { context.onReverseGeocodingResultClick(e); } }); } container.appendChild(div); }, // ################################################################### // // ######################### Inputs panel ############################ // // ################################################################### // /** * Create Container Panel * * @returns {DOMElement} DOM element */ _createReverseGeocodingPanelElement : function () { var div = document.createElement("div"); div.id = this._addUID("GPreverseGeocodingPanel"); div.className = "GPpanel"; return div; }, /** * Create Header Panel * * @returns {DOMElement} DOM element */ _createReverseGeocodingPanelHeaderElement : function () { var container = document.createElement("div"); container.className = "GPpanelHeader"; // info: on sépare les appels pour la création du picto de retour, // du titre et de la croix de fermeture pour les récupérer dans le composant return container; }, /** * Create return picto in panel header * * @returns {DOMElement} DOM element */ _createReverseGeocodingPanelReturnPictoElement : function () { // contexte var self = this; var divNew = document.createElement("div"); divNew.id = this._addUID("GPreverseGeocodingReturnPicto"); divNew.title = "Nouvelle recherche"; divNew.className = "GPreverseGeocodingReturnPictoHidden"; if (divNew.addEventListener) { divNew.addEventListener("click", function (e) { document.getElementById(self._addUID("GPreverseGeocodingResultsPanel")).className = "GProuteComponentHidden"; document.getElementById(self._addUID("GPreverseGeocodingForm")).className = ""; document.getElementById(self._addUID("GPreverseGeocodingHeaderTitle")).innerHTML = "Recherche inverse"; document.getElementById(self._addUID("GPreverseGeocodingReturnPicto")).className = "GPreverseGeocodingReturnPictoHidden"; self.onGPreverseGeocodingReturnPictoClick(e); }); } else if (divNew.attachEvent) { divNew.attachEvent("onclick", function (e) { document.getElementById(self._addUID("GPreverseGeocodingResultsPanel")).className = "GProuteComponentHidden"; document.getElementById(self._addUID("GPreverseGeocodingForm")).className = ""; document.getElementById(self._addUID("GPreverseGeocodingHeaderTitle")).innerHTML = "Recherche inverse"; document.getElementById(self._addUID("GPreverseGeocodingReturnPicto")).className = "GPreverseGeocodingReturnPictoHidden"; self.onGPreverseGeocodingReturnPictoClick(e); }); } return divNew; }, /** * Create Header Title Panel * * @returns {DOMElement} DOM element */ _createReverseGeocodingPanelTitleElement : function () { var div = document.createElement("div"); div.className = "GPpanelTitle"; div.id = this._addUID("GPreverseGeocodingHeaderTitle"); div.innerHTML = "Recherche inverse"; return div; }, /** * Create Header close div * * @returns {DOMElement} DOM element */ _createReverseGeocodingPanelCloseElement : function () { // contexte var self = this; var divClose = document.createElement("div"); divClose.id = this._addUID("GPreverseGeocodingPanelClose"); divClose.className = "GPpanelClose"; divClose.title = "Fermer le panneau"; // Link panel close / visibility checkbox if (divClose.addEventListener) { divClose.addEventListener("click", function () { document.getElementById(self._addUID("GPshowReverseGeocodingPicto")).click(); }, false); } else if (divClose.attachEvent) { divClose.attachEvent("onclick", function () { document.getElementById(self._addUID("GPshowReverseGeocodingPicto")).click(); }); } return divClose; }, /** * Create Form * see event ! * * @returns {DOMElement} DOM element */ _createReverseGeocodingPanelFormElement : function () { // contexte d'execution var self = this; var form = document.createElement("form"); form.id = this._addUID("GPreverseGeocodingForm"); if (form.addEventListener) { form.addEventListener("submit", function (e) { e.preventDefault(); self.onReverseGeocodingSubmit(); }); } else if (form.attachEvent) { form.attachEvent("onsubmit", function (e) { e.preventDefault(); self.onReverseGeocodingSubmit(); }); } return form; }, // ################################################################### // // ####################### Choice mode into form ##################### // // ################################################################### // /** * Create Container to Mode choice geocoding type * * @param {Array} resources - geocoding resources to be displayed (and used) * @returns {DOMElement} DOM element */ _createReverseGeocodingFormModeChoiceGeocodingTypeElement : function (resources) { // contexte d'execution var context = this; var div = document.createElement("div"); div.className = "GPflexInput"; var label = document.createElement("label"); label.className = "GPreverseGeocodingCodeLabel"; label.innerHTML = "Recherche par"; label.title = "Recherche par"; div.appendChild(label); var select = document.createElement("select"); select.className = "GPreverseGeocodingCode"; // gestionnaire d'evenement : on stocke la valeur du type de geocodage, // utilisé dans la requête de géocodage inverse if (select.addEventListener) { select.addEventListener("change", function (e) { context.onReverseGeocodingTypeChange(e); }); } else if (select.attachEvent) { select.attachEvent("onchange", function (e) { context.onReverseGeocodingTypeChange(e); }); } // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut if (!resources || !Array.isArray(resources)) { resources = ["StreetAddress", "PositionOfInterest", "CadastralParcel"]; } for (var i = 0; i < resources.length; i++) { switch (resources[i]) { case "PositionOfInterest": var POIOption = document.createElement("option"); POIOption.value = "PositionOfInterest"; POIOption.text = "Lieux/toponymes"; select.appendChild(POIOption); break; case "StreetAddress": var SAOption = document.createElement("option"); SAOption.value = "StreetAddress"; SAOption.text = "Adresses"; select.appendChild(SAOption); break; case "CadastralParcel": var CPOption = document.createElement("option"); CPOption.value = "CadastralParcel"; CPOption.text = "Parcelles cadastrales"; select.appendChild(CPOption); break; default: break; } } div.appendChild(select); return div; }, /** * Create Container to Mode choice geocoding delimitation * * @param {Array} delimitations - geocoding delimitations to be displayed (and used) * @returns {DOMElement} DOM element */ _createReverseGeocodingFormModeChoiceGeocodingDelimitationElement : function (delimitations) { // contexte d'execution var context = this; var div = document.createElement("div"); div.className = "GPflexInput"; var label = document.createElement("label"); label.className = "GPreverseGeocodingCodeLabel"; label.innerHTML = "Délimitation"; label.title = "Délimitation"; div.appendChild(label); var select = document.createElement("select"); select.className = "GPreverseGeocodingCode"; // gestionnaire d'evenement : on stocke la valeur du type de délimitation, // et on modifie l'événement de pointage sur la carte en fonction if (select.addEventListener) { select.addEventListener("change", function (e) { context.onReverseGeocodingDelimitationChange(e); }); } else if (select.attachEvent) { select.attachEvent("onchange", function (e) { context.onReverseGeocodingDelimitationChange(e); }); } // on prend soit les valeurs passées par l'utilisateur, soit des valeurs par défaut if (!delimitations || !Array.isArray(delimitations)) { delimitations = ["Point", "Circle", "Extent"]; } for (var i = 0; i < delimitations.length; i++) { switch (delimitations[i].toLowerCase()) { case "point": var pointOption = document.createElement("option"); pointOption.value = "point"; pointOption.text = "Pointer un lieu"; select.appendChild(pointOption); break; case "circle": var circleOption = document.createElement("option"); circleOption.value = "circle"; circleOption.text = "Dessiner un cercle"; select.appendChild(circleOption); break; case "extent": var extentOption = document.createElement("option"); extentOption.value = "extent"; extentOption.text = "Dessiner une emprise"; select.appendChild(extentOption); break; default: break; } } div.appendChild(select); return div; }, // ################################################################### // // ########################### Submit Form ########################### // // ################################################################### // /** * Create Submit Form Element * * @returns {DOMElement} DOM element */ _createReverseGeocodingSubmitFormElement : function () { var input = document.createElement("input"); input.id = this._addUID("GPreverseGeocodingSubmit"); input.className = "GPinputSubmit"; input.type = "submit"; input.value = "Rechercher"; return input; } }; export default ReverseGeocodingDOM;