summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--chimere/static/chimere/css/styles.css7
-rw-r--r--chimere/static/chimere/js/base.js4
-rw-r--r--chimere/static/chimere/js/jquery.chimere.js114
-rw-r--r--chimere/templates/chimere/blocks/actions.html2
-rw-r--r--chimere/templates/chimere/blocks/map.html8
-rw-r--r--chimere/templates/chimere/blocks/share_bar.html4
-rw-r--r--chimere/urls.py3
-rw-r--r--chimere/views.py6
8 files changed, 118 insertions, 30 deletions
diff --git a/chimere/static/chimere/css/styles.css b/chimere/static/chimere/css/styles.css
index 0539a67..c0c3cdc 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 64ad2b1..b42ec33 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(){
@@ -2360,8 +2442,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(){
@@ -2397,8 +2478,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 54accc4..6cfc622 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 9e91a3a..435f59a 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 d5a31c0..7004f75 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 a1f4485..594f8a8 100644
--- a/chimere/views.py
+++ b/chimere/views.py
@@ -118,11 +118,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'],
@@ -934,7 +934,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