diff options
author | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-11-14 12:02:24 +0100 |
---|---|---|
committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2016-11-14 12:02:24 +0100 |
commit | abcc53d4e630878a9f46d412916b2a056deb0e3c (patch) | |
tree | 743c43c52cbfebb8febf9188b936e36c219184e2 | |
parent | 2a3031028cbf1213b0b7e131be19073129f36dcb (diff) | |
download | Chimère-abcc53d4e630878a9f46d412916b2a056deb0e3c.tar.bz2 Chimère-abcc53d4e630878a9f46d412916b2a056deb0e3c.zip |
OL3: manage permalink loading
-rw-r--r-- | chimere/static/chimere/js/base.js | 3 | ||||
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 193 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/map.html | 2 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/share_bar.html | 1 |
4 files changed, 112 insertions, 87 deletions
diff --git a/chimere/static/chimere/js/base.js b/chimere/static/chimere/js/base.js index 0085cd7..facaf23 100644 --- a/chimere/static/chimere/js/base.js +++ b/chimere/static/chimere/js/base.js @@ -125,7 +125,8 @@ function share_link_update(){ share_id = share_id.split('_')[0]; } } - var params = $('#permalink').attr('href').split('/'); + $('#main-map').chimere('update_permalink'); + var params = $('#permalink').attr('href').split('#'); url += share_id + params[params.length-1]; $.ajax({url: url, dataType: "html", diff --git a/chimere/static/chimere/js/jquery.chimere.js b/chimere/static/chimere/js/jquery.chimere.js index b42ec33..a2d2d5e 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -627,20 +627,16 @@ function transformCoordToLonLat(coord) { settings.view.setZoom(DEFAULT_ZOOM); } } - /// OL3-TODO + var post_load_helper; if (!settings.edition){ - if (settings.enable_clustering){ - /// OL3-TODO cluster - // settings.map.events.register('zoomend', null, - // methods.cleanCluster); - } - methods.loadCategories(); - methods.loadGeoObjects(); - /// OL3-TODO - // methods.activateContextMenu() + methods.loadCategories(function(){ + if (settings.permalink) { + post_load_helper = methods._param_map_from_permalink(); + } + methods.loadGeoObjects(post_load_helper); + }); } else { - /// OL3-TODO if (settings.edition_type == 'route'){ methods.activateRouteEdit(); } else if (settings.edition_type == 'polygon'){ @@ -663,10 +659,10 @@ function transformCoordToLonLat(coord) { settings._map_loaded = true; if (settings._load_geoobjects_requested){ - methods.loadGeoObjects(); + methods.loadGeoObjects(post_load_helper); } }); - if (settings.permalink) methods._param_map_from_permalink(); + $("#permalink").click(methods.update_permalink); return; @@ -744,9 +740,8 @@ function transformCoordToLonLat(coord) { }, _move_end: function(e){ settings._reload_on_move(e); - methods._get_permalink(); }, - _get_permalink: function(e){ + update_permalink: function(e){ var view = settings.map.getView(); var center = ol.proj.transform( view.getCenter(), @@ -755,7 +750,9 @@ function transformCoordToLonLat(coord) { var layers = ''; $.each(settings.map.getLayers().getArray(), function(i, l){ var idx = l.getProperties()['base-layer-idx']; - if (typeof idx != 'undefined' && l.getVisible()){ + if (typeof idx != 'undefined' && String(idx) != '0' && + l.getVisible()){ + alert(idx); if (layers != '') layers += ':'; layers += idx; } @@ -816,83 +813,100 @@ function transformCoordToLonLat(coord) { _param_map_from_permalink: function(){ var items = settings.permalink.split(';'); - var zoom = items[0]; + var view = settings.map.getView(); + /* zoom & center */ + var zoom = items[0]; var center = items[1].split(':'); center = [Math.round(center[0] * 1000) / 1000, Math.round(center[1] * 1000) / 1000]; - var center = ol.proj.transform( + center = ol.proj.transform( center, EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); - var layers = items[2]; - var checked_categories = items[3].split('-'); - var current_feature = items[4]; - var routing_speed = items[5]; - var routing_transport = items[6]; - var routing_start = items[7]; - var routing_end = items[8]; - var steps = items[9]; - - var view = settings.map.getView(); - methods._set_animation(); + //methods._set_animation(); view.setZoom(zoom); view.setCenter(center); - /* - var center = ol.proj.transform( - view.getCenter(), - EPSG_PROJECTION, - EPSG_DISPLAY_PROJECTION); - var layers = ''; + + /* layers */ + var layers = items[2].split(':'); $.each(settings.map.getLayers().getArray(), function(i, l){ var idx = l.getProperties()['base-layer-idx']; - if (typeof idx != 'undefined' && l.getVisible()){ - if (layers != '') layers += ':'; - layers += idx; + if (typeof idx != 'undefined' && String(idx) != '0'){ + if (layers.indexOf(String(idx)) != -1){ + if (!l.getVisible()) l.setVisible(true); + } else { + if (l.getVisible()) l.setVisible(false); + } } }); - var current_feature = ''; - if (settings.current_feature) - current_feature = settings.current_feature.getId(); - var routing_speed = ''; - if (settings.routing_speed) - routing_speed = settings.routing_speed; - var routing_transport = ''; - if (settings.routing_transport) - routing_transport = settings.routing_transport; - var routing_start = ''; - if (settings.routing_start){ + /* categories */ + var checked_categories = items[3].split('-'); + $('#frm_categories .subcategories input:checkbox').each( + function(index){ + var cat_id = $(this).attr('id').split('_').pop(); + if (checked_categories.indexOf(cat_id) != -1){ + $(this).click(); + } else { + $(this).attr('checked', ''); + } + }); + + var routing_speed = items[5]; + if (routing_speed) + settings.routing_speed = routing_speed; + var routing_transport = items[6]; + if (routing_transport) + settings.routing_transport = routing_transport; + + var steps = items[9]; + if (steps){ + for (var step_i = 9 ; step_i < items.length ; step_i++){ + var coords = items[step_i].split(':'); + coords = [Math.round(coords[0] * 1000) / 1000, + Math.round(coords[1] * 1000) / 1000]; + var geom = ol.proj.transform(coords, + EPSG_DISPLAY_PROJECTION, EPSG_PROJECTION); + methods.routingAddStep(geom); + } + } + + var routing_start = items[7]; + if (routing_start){ + var coords = routing_start.split(':'); var geom = ol.proj.transform( - settings.routing_start.getGeometry().getCoordinates(), - EPSG_PROJECTION, - EPSG_DISPLAY_PROJECTION); - routing_start = geom[0].toFixed(5) + ':' + geom[1].toFixed(5); + [Math.round(coords[0] * 1000) / 1000, + Math.round(coords[1] * 1000) / 1000], + EPSG_DISPLAY_PROJECTION, + EPSG_PROJECTION); + methods.routingFrom(geom); } - var routing_end = ''; - if (settings.routing_end){ + + var routing_end = items[8]; + if (routing_end){ + var coords = routing_end.split(':'); var geom = ol.proj.transform( - settings.routing_end.getGeometry().getCoordinates(), - EPSG_PROJECTION, - EPSG_DISPLAY_PROJECTION); - routing_end = geom[0].toFixed(5) + ':' + geom[1].toFixed(5); + [Math.round(coords[0] * 1000) / 1000, + Math.round(coords[1] * 1000) / 1000], + EPSG_DISPLAY_PROJECTION, + EPSG_PROJECTION + ); + methods.routingTo(geom); } - var steps = ''; - if (settings.routing_steps){ - for (var i = 0; i < settings.routing_steps.length; i++){ - var geom = ol.proj.transform( - settings.routing_steps[i].getGeometry().getCoordinates(), - EPSG_PROJECTION, - EPSG_DISPLAY_PROJECTION); - if (i > 0) steps += ';'; - steps += geom[0].toFixed(5) + ':' + geom[1].toFixed(5); + + var current_feature = items[4]; + var post_load_helper = function(){ + if (current_feature){ + methods.showPopup(current_feature); } } - var uri = extra_url - if (settings.area_id) uri += settings.area_id + "/"; - $("#permalink").attr('href', uri + "#" + settings.permalink); - return settings.permalink - */ + + if (current_feature != "" || routing_start != "" + || routing_end != "" || steps != ""){ + $(".welcome-dialog").hide(); + } + return post_load_helper; }, _register_popuphovering: function(){ $(document).on({ @@ -1443,7 +1457,7 @@ function transformCoordToLonLat(coord) { /* * Load markers and route from DB */ - loadGeoObjects: function () { + loadGeoObjects: function (post_load_helper) { if($('#waiting').length){$('#waiting').show();} if (!settings._map_loaded){ settings._load_geoobjects_requested = true; @@ -1496,6 +1510,8 @@ function transformCoordToLonLat(coord) { //OL3 methods.addMultiLine(feature); } } + if (typeof post_load_helper != 'undefined') + post_load_helper(); // var extent = settings.sourceDbFeatures.getExtent(); // settings.map.getView().fit(extent, settings.map.getSize()); // settings.map.resetLayersZIndex(); @@ -1530,7 +1546,7 @@ function transformCoordToLonLat(coord) { /* * Update the categories div in ajax */ - loadCategories: function () { + loadCategories: function (helper) { var current_extent = settings.view.calculateExtent( settings.map.getSize()); current_extent = ol.proj.transformExtent( @@ -1558,6 +1574,7 @@ function transformCoordToLonLat(coord) { // (in case the category is yet visible in HTML...) methods.toggle_category(); } + if (helper) helper(); } }); var _toggle_subcategories = function (category_element) { @@ -1599,7 +1616,6 @@ function transformCoordToLonLat(coord) { methods.hidePopup(e); _toggle_subcategories($(this)); methods.loadGeoObjects(); - methods._get_permalink(); }); $('.subcategories li input').bind("click", function (e) { $('#search-result').html(''); @@ -1616,7 +1632,6 @@ function transformCoordToLonLat(coord) { } methods.loadGeoObjects(); _toggle_categories($(this)); - methods._get_permalink(); if ($('#layer_cat_'+c_name).length){ $('#layer_cat_'+c_name).prop("checked", this.checked); @@ -1625,7 +1640,6 @@ function transformCoordToLonLat(coord) { }); $('#display_submited_check').bind("click", function () { methods.loadGeoObjects(); - methods._get_permalink(); }); // Zoom to category $(".zoom_to_category").bind("click", function (e) { @@ -1822,7 +1836,6 @@ function transformCoordToLonLat(coord) { if (!settings.explicit_popup_hide){ settings.current_popup.groupDiv.onclick = methods.hidePopup; } - methods._get_permalink(); methods.update_permalink_activation(); } var _repan_popup = function(){ @@ -2140,7 +2153,11 @@ function transformCoordToLonLat(coord) { if (typeof obj == 'undefined') { coordinates = settings.popup.getPosition(); } else { - coordinates = obj.coordinate; + if (typeof obj.coordinate != 'undefined') { + coordinates = obj.coordinate; + } else { + coordinates = obj; + } } if (typeof coordinates == 'undefined') return; @@ -2247,7 +2264,11 @@ function transformCoordToLonLat(coord) { if (typeof obj == 'undefined') { coordinates = settings.popup.getPosition(); } else { - coordinates = obj.coordinate; + if (typeof obj.coordinate != 'undefined') { + coordinates = obj.coordinate; + } else { + coordinates = obj; + } } if (typeof coordinates == 'undefined') return; @@ -2332,7 +2353,11 @@ function transformCoordToLonLat(coord) { if (typeof obj == 'undefined') { coordinates = settings.popup.getPosition(); } else { - coordinates = obj.coordinate; + if (typeof obj.coordinate != 'undefined') { + coordinates = obj.coordinate; + } else { + coordinates = obj; + } } if (typeof coordinates == 'undefined') return; @@ -2442,7 +2467,6 @@ function transformCoordToLonLat(coord) { settings.current_itinerary_number = 0; settings.current_routes_features = []; settings.routingFeatures.clear(); - methods._get_permalink(); }, // display a route route: function(){ @@ -2478,7 +2502,6 @@ function transformCoordToLonLat(coord) { } uri += step[0] + '_' + step[1]; } - methods._get_permalink(); $.ajax({url: uri, dataType: "json", success: function (data) { @@ -2980,7 +3003,7 @@ function transformCoordToLonLat(coord) { var feats = settings.dbFeatures.getArray(); for (j in feats){ var c_marker = feats[j]; - if (c_marker.getProperties()['pk'] == feature_pk){ + if (c_marker.getProperties()['key'] == feature_pk){ //for (j in c_marker) console.log(j + ": "+ c_marker[j]); //c_marker.events.triggerEvent('click'); methods.openPopup(c_marker); diff --git a/chimere/templates/chimere/blocks/map.html b/chimere/templates/chimere/blocks/map.html index 7c1fa7b..3b75646 100644 --- a/chimere/templates/chimere/blocks/map.html +++ b/chimere/templates/chimere/blocks/map.html @@ -80,7 +80,7 @@ $("#{{map_id}}").show(); $("#main-map").chimere(chimere_init_options); {% if zoom %} - if (!permalink) $('#maps').chimere('zoom', {'area':{{zoom}} }); + if (!permalink) $('#main-map').chimere('zoom', {'area':{{zoom}} }); {% endif %} {{extra_map_def|safe}} diff --git a/chimere/templates/chimere/blocks/share_bar.html b/chimere/templates/chimere/blocks/share_bar.html index 435f59a..1c02ce3 100644 --- a/chimere/templates/chimere/blocks/share_bar.html +++ b/chimere/templates/chimere/blocks/share_bar.html @@ -10,6 +10,7 @@ <script language='text/javascript'> $(function(){ $('.share_link').click(function(){ + $('#main-map').chimere('update_permalink'); var href = $(this).attr('href'); var url = '{% url 'chimere:get-share-url' %}'; var classes = $(this).attr('class').split(' '); |