Changeset 96536 in spip-zone


Ignore:
Timestamp:
Apr 8, 2016, 9:41:00 AM (4 years ago)
Author:
kent1@…
Message:

Permettre d'utiliser cette saisie plusieurs fois dans le même formulaire

On fait en sorte que le js utilisé soit limité à la saisie en cours

Du coup on permet d'avoir une fonction de callback différente en fonction du nom :

  • Si callback_form_map_[(#ENV{nom})]() est une fonction, c'est elle qui sera utilisée comme callback
  • Sinon la fonction actuelle callback_form_map() sera utilisée
File:
1 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/gis_geometries/saisies/carte.html

    r96532 r96536  
    3838<[(#VAL{li}|saisie_balise_structure_formulaire)] class="pleine_largeur editer editer_[(#ENV{nom})][ (#ENV{li_class})][ saisie_(#ENV{type_saisie})]"[ data-id="(#ENV{id_saisie})"]>
    3939#ENV*{inserer_debut}
    40 <div id="map_[(#ENV{nom})]" name="formMap" class="formMap" style="width: #ENV{largeur,100%}; height: #ENV{hauteur,350px}"></div>
     40<div id="map_[(#ENV{nom})]" name="formMap_[(#ENV{nom})]" class="formMap" style="width: #ENV{largeur,100%}; height: #ENV{hauteur,350px}"></div>
    4141<script type="text/javascript">
    4242/*<![CDATA[*/
    43 var form_map,
    44         editableLayers,
    45         annuler_geocoder = 0;
     43var form_map_[(#ENV{nom})],
     44        editableLayers_[(#ENV{nom})],
     45        annuler_geocoder_[(#ENV{nom})] = 0;
    4646[(#ENV{recherche}|!={non}|oui|et{#CONFIG{gis/geocoder}|oui})
    4747[(#SET{geocoder,oui})]
     
    6565                        $('#champ_#ENV{champ_lat,lat}').val(data.lat);
    6666                        $('#champ_#ENV{champ_lon,lon}').val(data.lng);]
    67                         annuler_geocoder = 1;
     67                        annuler_geocoder_[(#ENV{nom})] = 1;
    6868                        map.panTo(data);
    6969                        marker.setLatLng(data);
    7070                }
    71                 else if(annuler_geocoder != 1){
     71                else if(annuler_geocoder_[(#ENV{nom})] != 1){
    7272                        if(data.point == 'undefined'){
    7373                                [(#ENV{nomajinputs,non}|=={oui}|non)
     
    101101                        $('#champ_#ENV{champ_pays,pays}').val(query.country);
    102102                        $('#champ_#ENV{champ_code_pays,code_pays}').val(query.country_code);]
    103                         maj_inputs(form_map,editableLayers,query,'geocoding');
     103                        maj_inputs(form_map_[(#ENV{nom})],editableLayers_[(#ENV{nom})],query,'geocoding');
    104104                }else{
    105105                        if(query.search == 'undefined'){
     
    120120                        }
    121121                        $('#champ_#ENV{champ_geojson,geojson}').val(JSON.stringify(layer.toGeoJSON()));
    122                         maj_inputs(form_map,editableLayers,layer._latlng,'click');
     122                        maj_inputs(form_map_[(#ENV{nom})],editableLayers_[(#ENV{nom})],layer._latlng,'click');
    123123                }
    124124                var layer_edit = function(e){
     
    134134                }
    135135                var gisdraw_change_controls = function(options){
    136                         form_map.removeControl(drawControl);
     136                        form_map_[(#ENV{nom})].removeControl(drawControl);
    137137                        drawControl = new L.Control.Draw(options)
    138                         form_map.addControl(drawControl);
    139                         form_map.drawControl = drawControl;
     138                        form_map_[(#ENV{nom})].addControl(drawControl);
     139                        form_map_[(#ENV{nom})].drawControl = drawControl;
    140140                }
    141141                // creer la carte
    142142                var map_container = 'map_[(#ENV{nom})]';
    143                 form_map = new L.Map(map_container);
     143                form_map_[(#ENV{nom})] = new L.Map(map_container);
    144144               
    145145                // affecter sur l'objet du DOM
    146                 jQuery("#"+map_container).get(0).map=form_map;
     146                jQuery("#"+map_container).get(0).map=form_map_[(#ENV{nom})];
    147147
    148148                // appeler l'éventuelle fonction de callback
    149149                if (callback && typeof(callback) === "function") {
    150                         form_map.on('load',function(e){
     150                        form_map_[(#ENV{nom})].on('load',function(e){
    151151                                callback(e.target);
    152152                        });
    153153                }
    154154               
    155                 form_map.attributionControl.setPrefix('');
     155                form_map_[(#ENV{nom})].attributionControl.setPrefix('');
    156156               
    157157                marker = new L.Marker(new L.LatLng(#ENV{lat,0}, #ENV{lon,0}), {draggable: [(#ENV{nodraw}|?{true,false})]});
     
    160160                #SET{layer_defaut,#REM|gis_layer_defaut} #SET{layers,#EVAL{$GLOBALS['gis_layers']}}
    161161                var [(#GET{layer_defaut})] = [new (#GET{layers}|table_valeur{#GET{layer_defaut}/layer})];
    162                 form_map.addLayer([(#GET{layer_defaut})]);
     162                form_map_[(#ENV{nom})].addLayer([(#GET{layer_defaut})]);
    163163               
    164164                <B_layers>
     
    169169                layers_control.addBaseLayer([new (#VALEUR|table_valeur{layer})],"[(#VALEUR|table_valeur{nom})]");]
    170170                </BOUCLE_layers>
    171                 form_map.addControl(layers_control);
     171                form_map_[(#ENV{nom})].addControl(layers_control);
    172172                // ajouter l'objet du controle de layers à la carte pour permettre d'y accéder depuis le callback
    173                 form_map.layersControl = layers_control;
     173                form_map_[(#ENV{nom})].layersControl = layers_control;
    174174                // classe noajax sur le layer_control pour éviter l'ajout de hidden par SPIP
    175175                $(layers_control._form).addClass('noajax');
     
    177177               
    178178                [(#GET{utiliser_bb}|non)
    179                 form_map.setView(new L.LatLng([(#GET{init_lat})], [(#GET{init_lon})]), [(#GET{init_zoom})]);]
     179                form_map_[(#ENV{nom})].setView(new L.LatLng([(#GET{init_lat})], [(#GET{init_lon})]), [(#GET{init_zoom})]);]
    180180
    181181                [(#GET{utiliser_bb}|oui)
    182                 form_map.fitBounds(
     182                form_map_[(#ENV{nom})].fitBounds(
    183183                        new L.LatLngBounds(
    184184                                new L.LatLng([(#GET{init_sw_lat})], [(#GET{init_sw_lon})]),
     
    189189                // a voir si on le fait dans tous les cas, pas seulement pour la boundingbox, comme pour le zoom
    190190                [(#ENV{nomajinputs,non}|=={oui}|non)
    191                 form_map.on('load', function(e) {
     191                form_map_[(#ENV{nom})].on('load', function(e) {
    192192                        $('#champ_#ENV{champ_lat,lat}').val(e.latlng.lat);
    193193                        $('#champ_#ENV{champ_lon,lon}').val(e.latlng.lon);
     
    198198                        On ajoute notre point (ou tout autre élément) dans un FeatureGroup
    199199                       
    200                 ]editableLayers = new L.FeatureGroup();
    201                 form_map.addLayer(editableLayers);
     200                ]editableLayers_[(#ENV{nom})] = new L.FeatureGroup();
     201                form_map_[(#ENV{nom})].addLayer(editableLayers_[(#ENV{nom})]);
    202202
    203203                [(#GET{geocoder}|oui)
     
    221221                        style: (#ENV*{path_styles}|?{[(#ENV*{path_styles}|json_encode)],[(#GEOMETRY_STYLES|appliquer_filtre{geometry_styles_to_json})]}),
    222222                        ]onEachFeature: function (feature, layer) {
    223                                 editableLayers.addLayer(layer);
     223                                editableLayers_[(#ENV{nom})].addLayer(layer);
    224224                                if (feature.geometry.type == 'Polygon' || feature.geometry.type == 'LineString') {
    225225                                        // centrer la carte sur les bounds de l'objet
    226                                         form_map.fitBounds(layer.getBounds());
     226                                        form_map_[(#ENV{nom})].fitBounds(layer.getBounds());
    227227                                        // surveiller les changements sur les points de l'objet
    228228                                        layer.on("edit", function(e){
     
    250250                                }
    251251                        }
    252                 }).addTo(form_map);
     252                }).addTo(form_map_[(#ENV{nom})]);
    253253                geojson.addData(data);
    254254                </BOUCLE_gis>
     
    258258                        style: (#ENV*{path_styles}|json_encode),
    259259                        ]onEachFeature: function (feature, layer) {
    260                                 editableLayers.addLayer(layer);
    261                                 form_map.removeLayer(layer);
     260                                editableLayers_[(#ENV{nom})].addLayer(layer);
     261                                form_map_[(#ENV{nom})].removeLayer(layer);
    262262                                if (feature.type == 'Polygon' || feature.type == 'MultiPolygon' || feature.type == 'LineString') {
    263263                                        // centrer la carte sur les bounds de l'objet
    264                                         form_map.fitBounds(layer.getBounds());
     264                                        form_map_[(#ENV{nom})].fitBounds(layer.getBounds());
    265265                                        // surveiller les changements sur les points de l'objet
    266266                                        layer.on("edit", function(e){
     
    288288                                }
    289289                        }
    290                 }).addTo(form_map);
     290                }).addTo(form_map_[(#ENV{nom})]);
    291291                geojson.addData([(#ENV**{geojson}|html_entity_decode)]);
    292292               
     
    348348                        },
    349349                        edit: {
    350                                 featureGroup: editableLayers
     350                                featureGroup: editableLayers_[(#ENV{nom})]
    351351                        }
    352352                }, drawOptionsBlocked = {
     
    354354                        draw: false,
    355355                        edit: {
    356                                 featureGroup: editableLayers
     356                                featureGroup: editableLayers_[(#ENV{nom})]
    357357                        }
    358358                }, edited = false;
     
    363363                        sinon on a accès aux outils de dessin
    364364                ]
    365                 if(Object.keys(editableLayers._layers).length >= 1){
     365                if(Object.keys(editableLayers_[(#ENV{nom})]._layers).length >= 1){
    366366                        var drawControl = new L.Control.Draw(drawOptionsBlocked);
    367367                }
     
    369369                        var drawControl = new L.Control.Draw(drawOptions);
    370370                }
    371                 form_map.addControl(drawControl);
    372                 form_map.drawControl = drawControl;
    373                 form_map.on('draw:created', function(e) {
     371                form_map_[(#ENV{nom})].addControl(drawControl);
     372                form_map_[(#ENV{nom})].drawControl = drawControl;
     373                form_map_[(#ENV{nom})].on('draw:created', function(e) {
    374374                        var type = e.layerType,
    375375                                layer = e.layer;
    376376                        if (type === 'marker') {
    377377                                marker.setLatLng(layer._latlng);
    378                                 form_map.removeLayer(marker);
    379                                 editableLayers.addLayer(marker);
     378                                form_map_[(#ENV{nom})].removeLayer(marker);
     379                                editableLayers_[(#ENV{nom})].addLayer(marker);
    380380                                $('#champ_#ENV{champ_type,type}').val('Point');
    381381                                marker_dragend(layer);
     
    384384                                });
    385385                        } else {
    386                                 editableLayers.addLayer(layer);
     386                                editableLayers_[(#ENV{nom})].addLayer(layer);
    387387                                if (type === 'polygon' || type === 'rectangle'){
    388388                                        $('#champ_#ENV{champ_type,type}').val('Polygon');
     
    397397                        gisdraw_change_controls(drawOptionsBlocked);
    398398                });
    399                 form_map.on('draw:deleted', function(e) {
     399                form_map_[(#ENV{nom})].on('draw:deleted', function(e) {
    400400                        if(Object.keys(e.layers._layers).length >= 1){
    401401                                [(#REM)
     
    419419                 * Au editstart, on met la variable edited à false
    420420                 */
    421                 form_map.on('draw:editstart', function(e) {
     421                form_map_[(#ENV{nom})].on('draw:editstart', function(e) {
    422422                        edited = false;
    423423                });
     
    425425                 * Au edited, on met la variable edited à true (il y a eu edition)
    426426                 */
    427                 form_map.on('draw:edited', function(e) {
     427                form_map_[(#ENV{nom})].on('draw:edited', function(e) {
    428428                        edited = true;
    429429                });
     
    432432                 * si false, on remet les valeurs par défaut avant édition (bouton annuler)
    433433                 */
    434                 form_map.on('draw:editstop', function(e) {
     434                form_map_[(#ENV{nom})].on('draw:editstop', function(e) {
    435435                        if(!edited){
    436436                                var type = $('#champ_#ENV{champ_type,type}').val();
    437                                 editableLayers.eachLayer(function (layer) {
     437                                editableLayers_[(#ENV{nom})].eachLayer(function (layer) {
    438438                                        if (type === 'Point') {
    439439                                                marker_dragend(layer);
     
    450450                $('#champ_#ENV{champ_type,type}').val('Point');
    451451                // mettre a jour les coordonnees quand on clique la carte
    452                 form_map.on('click', function(e) {
    453                         marker_dragend(marker);
     452                form_map_[(#ENV{nom})].on('click', function(e) {
     453                        annuler_geocoder_[(#ENV{nom})] = 0;
     454                        maj_inputs(form_map_[(#ENV{nom})],editableLayers_[(#ENV{nom})],e.latlng,'click');
    454455                });
    455456                // mettre à jour le champ geosjon et le marker quand on change les valeur de lat ou lon
     
    460461                        var new_center = new L.LatLng(new_lat, new_lon);
    461462                        marker.setLatLng(new_center);
    462                         form_map.panTo(new_center);
     463                        form_map_[(#ENV{nom})].panTo(new_center);
    463464                        $('#champ_#ENV{champ_geojson,geojson}').val('{"type":"Point","coordinates":\['+ new_lon +','+ new_lat +'\]}');
    464465                });]]
     
    472473                // mettre à jour le zoom quand on le modifie
    473474                [(#ENV{nomajinputs,non}|=={oui}|non)
    474                 form_map.on('zoomend', function(e) {
     475                form_map_[(#ENV{nom})].on('zoomend', function(e) {
    475476                        $('#champ_#ENV{champ_zoom,zoom}').val(e.target._zoom);
    476477                });]
     
    480481                $('a##ENV{nom}_rechercher_geocodage').css("cursor","pointer").click(function(){
    481482                        var address = $("#champ_#ENV{nom}_geocoder").val();
    482                         annuler_geocoder = 0;
     483                        annuler_geocoder_[(#ENV{nom})] = 0;
    483484                        geocoder.geocode(address);
    484485                });
     
    493494               
    494495                [(#ENV{id_gis}|non|ou{#ENV{id_gis}|=={oui}}|et{#CONFIG{gis/geolocaliser_user_html5}|=={on}}|oui)
    495                 form_map.locate({setView: true, maxZoom: [(#GET{init_zoom})]});]
     496                form_map_[(#ENV{nom})].locate({setView: true, maxZoom: [(#GET{init_zoom})]});]
    496497               
    497498        };
     
    499500        $(function(){
    500501                jQuery.getScript('[(#PRODUIRE{fond=javascript/gis.js}|compacte)]',function(){
    501                         if (typeof(callback_form_map) === "function") {
     502                        if(typeof(callback_form_map_[(#ENV{nom})]) === "function"){
     503                                init_map(callback_form_map_[(#ENV{nom})]);
     504                        }
     505                        else if (typeof(callback_form_map) === "function") {
    502506                                init_map(callback_form_map);
    503507                        } else {
Note: See TracChangeset for help on using the changeset viewer.