diff options
-rw-r--r-- | chimere/static/chimere/css/styles.css | 7 | ||||
-rw-r--r-- | chimere/static/chimere/js/base.js | 4 | ||||
-rw-r--r-- | chimere/static/chimere/js/jquery.chimere.js | 114 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/actions.html | 2 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/map.html | 8 | ||||
-rw-r--r-- | chimere/templates/chimere/blocks/share_bar.html | 4 | ||||
-rw-r--r-- | chimere/urls.py | 3 | ||||
-rw-r--r-- | chimere/views.py | 6 |
8 files changed, 118 insertions, 30 deletions
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css index 6d9787d..2c777d8 100644 --- a/chimere/static/chimere/css/styles.css +++ b/chimere/static/chimere/css/styles.css @@ -1682,14 +1682,19 @@ span#permalink, .navbar-nav .lbl, #areas-div label, #permalink, #simple_button, padding: 0px 0px 0px 0.5em; } -#permalink, #simple_button-lnk lbl{ +#simple_button-lnk lbl{ padding: 0 0.8em; } +#permalink{ + padding: 10px 0.8em; +} + #areas-div{ line-height:42px; } +.nav-pills > li#permalink-lnk > a > .fa, .nav-pills > li#simple_button-lnk > a > .fa{ color:#777; } diff --git a/chimere/static/chimere/js/base.js b/chimere/static/chimere/js/base.js index d7a9695..0085cd7 100644 --- a/chimere/static/chimere/js/base.js +++ b/chimere/static/chimere/js/base.js @@ -1,5 +1,5 @@ /* base function shared by some pages */ -/* Copyright (C) 2009-2014 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> +/* Copyright (C) 2009-2016 Étienne Loks <etienne.loks_AT_peacefrogsDOTnet> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as @@ -125,7 +125,7 @@ function share_link_update(){ share_id = share_id.split('_')[0]; } } - var params = $('#permalink a').attr('href').split('/'); + 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 6fd0e36..7c2b59a 100644 --- a/chimere/static/chimere/js/jquery.chimere.js +++ b/chimere/static/chimere/js/jquery.chimere.js @@ -193,9 +193,7 @@ function transformCoordToLonLat(coord) { */ var defaults = { restricted_extent: false, - permalink_label: null, - permalink_div: null, - permalink: null, // OL Control, could be overrided + permalink: null, // permalink initialization map_layers: null, selected_map_layer: null, dynamic_categories: false, @@ -668,7 +666,7 @@ function transformCoordToLonLat(coord) { methods.loadGeoObjects(); } }); - + if (settings.permalink) methods._param_map_from_permalink(); return; @@ -746,7 +744,7 @@ function transformCoordToLonLat(coord) { }, _move_end: function(e){ settings._reload_on_move(e); - console.log(methods._get_permalink()); + methods._get_permalink(); }, _get_permalink: function(e){ var view = settings.map.getView(); @@ -799,7 +797,7 @@ function transformCoordToLonLat(coord) { steps += geom[0].toFixed(5) + ':' + geom[1].toFixed(5); } } - return view.getZoom() + ';' + settings.permalink = view.getZoom() + ';' + center[0].toFixed(5) + ':' + center[1].toFixed(5) + ';' + layers + ';' @@ -810,6 +808,91 @@ function transformCoordToLonLat(coord) { + routing_start + ';' + routing_end + ';' + steps; + var uri = extra_url + if (settings.area_id) uri += settings.area_id + "/"; + $("#permalink").attr('href', uri + "#" + settings.permalink); + return settings.permalink + }, + _param_map_from_permalink: function(){ + var items = settings.permalink.split(';'); + + 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, + 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(); + view.setZoom(zoom); + view.setCenter(center); + /* + var center = ol.proj.transform( + view.getCenter(), + EPSG_PROJECTION, + EPSG_DISPLAY_PROJECTION); + var layers = ''; + $.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; + } + }); + + 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){ + 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); + } + var routing_end = ''; + if (settings.routing_end){ + 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); + } + 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 uri = extra_url + if (settings.area_id) uri += settings.area_id + "/"; + $("#permalink").attr('href', uri + "#" + settings.permalink); + return settings.permalink + */ }, _register_popuphovering: function(){ $(document).on({ @@ -1183,9 +1266,9 @@ function transformCoordToLonLat(coord) { settings.routing_transport || settings.routing_start || settings.routing_end){ - $("#permalink a").removeAttr("disabled"); + $("#permalink").removeAttr("disabled"); } else { - $("#permalink a").attr("disabled", "disabled"); + $("#permalink").attr("disabled", "disabled"); } }, /* Preload icons */ @@ -1516,7 +1599,7 @@ function transformCoordToLonLat(coord) { methods.hidePopup(e); _toggle_subcategories($(this)); methods.loadGeoObjects(); - settings.permalink.updateLink(); + methods._get_permalink(); }); $('.subcategories li input').bind("click", function (e) { $('#search-result').html(''); @@ -1533,8 +1616,7 @@ function transformCoordToLonLat(coord) { } methods.loadGeoObjects(); _toggle_categories($(this)); - // OL-3 permalink - // settings.permalink.updateLink(); + methods._get_permalink(); if ($('#layer_cat_'+c_name).length){ $('#layer_cat_'+c_name).prop("checked", this.checked); @@ -1543,7 +1625,7 @@ function transformCoordToLonLat(coord) { }); $('#display_submited_check').bind("click", function () { methods.loadGeoObjects(); - settings.permalink.updateLink(); + methods._get_permalink(); }); // Zoom to category $(".zoom_to_category").bind("click", function (e) { @@ -1740,7 +1822,7 @@ function transformCoordToLonLat(coord) { if (!settings.explicit_popup_hide){ settings.current_popup.groupDiv.onclick = methods.hidePopup; } - settings.permalink.updateLink(); + methods._get_permalink(); methods.update_permalink_activation(); } var _repan_popup = function(){ @@ -2356,8 +2438,7 @@ function transformCoordToLonLat(coord) { settings.current_itinerary_number = 0; settings.current_routes_features = []; settings.routingFeatures.clear(); - // TODO ol3 - // settings.permalink.updateLink(); + methods._get_permalink(); }, // display a route route: function(){ @@ -2393,8 +2474,7 @@ function transformCoordToLonLat(coord) { } uri += step[0] + '_' + step[1]; } - // TODO ol3 - // settings.permalink.updateLink(); + methods._get_permalink(); $.ajax({url: uri, dataType: "json", success: function (data) { diff --git a/chimere/templates/chimere/blocks/actions.html b/chimere/templates/chimere/blocks/actions.html index e31e1cc..05c05b4 100644 --- a/chimere/templates/chimere/blocks/actions.html +++ b/chimere/templates/chimere/blocks/actions.html @@ -28,7 +28,7 @@ {% if areas_visible %} <li id='maps-lnk'><span class='fa fa-chimere-action fa-chimere-maps'></span>{% display_areas %}</li> {% endif %} - {% comment %}OL3-TODO<li id='permalink-lnk'><span class='fa fa-chimere-action fa-bookmark'></span><span id='permalink'></span></li>{% endcomment %} + <li id='permalink-lnk'><a href='#' id='permalink'><span class='fa fa-chimere-action fa-bookmark'></span></a></li> <li>{% routing %}</li> <li id='news-lnk'> <a data-toggle='modal' data-target="#news" href='#' id='news_button'><span class='fa fa-chimere-action fa-newspaper-o'></span><span class='lbl'>{% trans "News"%}</span></a> diff --git a/chimere/templates/chimere/blocks/map.html b/chimere/templates/chimere/blocks/map.html index 4ee9613..7c1fa7b 100644 --- a/chimere/templates/chimere/blocks/map.html +++ b/chimere/templates/chimere/blocks/map.html @@ -36,6 +36,7 @@ $("#{{map_id}}").show(); $("#categories-lnk").hide(); });{% endif %} {{extra_js|safe}} + var permalink = window.location.hash.substr(1); var chimere_init_options = { {% if MOBILE %}"mobile": true,{% endif %} {% if enable_clustering %}"enable_clustering": true,{% endif %} @@ -66,19 +67,20 @@ $("#{{map_id}}").show(); $('#category_description-content').html(content); $('#category_description-label').html(title); $('#category_description').modal('show');}, - 'permalink_element': document.getElementById('permalink'), "default_icon": '{{STATIC_URL}}img/marker-green.png', 'routing': {{routing}}, - 'permalink_label': '{%trans "Permalink"%}' + "permalink": permalink }; + {% if restricted_extent %}{{ restricted_extent }} chimere_init_options["restricted_extent"] = bounds; {% endif %} $('#category_description').modal({show:false}); $("#main-map").chimere(chimere_init_options); + {% if zoom %} - $('#maps').chimere('zoom', {'area':{{zoom}} }); + if (!permalink) $('#maps').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 5367628..147a2b7 100644 --- a/chimere/templates/chimere/blocks/share_bar.html +++ b/chimere/templates/chimere/blocks/share_bar.html @@ -20,8 +20,8 @@ var share_id = classes[idx].substring(prefix.length); } } - var params = $('#permalink a').attr('href').split('/'); - url += share_id + params[params.length-1]; + var params = $('#permalink').attr('href').split('#'); + url += share_id + "/" + params[params.length-1] + "/"; $.ajax({url: url, dataType: "html", success: function (url) { diff --git a/chimere/urls.py b/chimere/urls.py index 824c7ed..74fe238 100644 --- a/chimere/urls.py +++ b/chimere/urls.py @@ -135,7 +135,8 @@ urlpatterns += patterns( 'get_all_categories', name="get_all_categories"), url(r'^(?P<area_name>[a-zA-Z0-9_-]+/)?getCategory/(?P<category_id>\d+)/?$', 'getCategory', name="get_category"), - url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?get-share-url/(?P<network>\w+)?$', + url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?get-share-url/(?:(?P<network>\w+)/' + r'(?:(?P<attrs>[a-zA-Z0-9_;.:-]+)/)?)?$', 'getShareUrl', name="get-share-url"), url(r'^(?P<area_name>[a-zA-Z0-9_-]*/)?ty/(?P<tiny_urn>\w+)$', 'redirectFromTinyURN', name="tiny"), diff --git a/chimere/views.py b/chimere/views.py index d4fa0bb..520cfee 100644 --- a/chimere/views.py +++ b/chimere/views.py @@ -116,11 +116,11 @@ def get_base_response(request, area_name=""): return base_response_dct, None -def getShareUrl(request, area_name='', network=''): +def getShareUrl(request, area_name='', network='', attrs=''): """ Get a share url """ - data = getTinyfiedUrl(request, request.GET.urlencode(), area_name) + data = getTinyfiedUrl(request, attrs, area_name) for name, url, img in settings.CHIMERE_SHARE_NETWORKS: if defaultfilters.slugify(name) == network: return HttpResponse(url % {'text': data['text'], @@ -932,7 +932,7 @@ def redirectFromTinyURN(request, area_name='', tiny_urn=''): """ Redirect from a tiny Urn """ - parameters = '?' + TinyUrl.getParametersByUrn(tiny_urn) + parameters = '#' + TinyUrl.getParametersByUrn(tiny_urn) response_dct, redir = get_base_response(request, area_name) if redir: return redir |