site: allow setting locations by url
This commit is contained in:
parent
584e99559c
commit
7528686e87
6 changed files with 91 additions and 10 deletions
|
@ -6,6 +6,9 @@ body {
|
|||
.locationselect .input-lg {
|
||||
height: 62px;
|
||||
}
|
||||
.locationselect > div {
|
||||
position:relative;
|
||||
}
|
||||
.locationselect .locationselect-selected {
|
||||
display:none;
|
||||
}
|
||||
|
@ -15,6 +18,21 @@ body {
|
|||
.locationselect.selected .locationselect-input {
|
||||
display:none;
|
||||
}
|
||||
.locationselect .icons {
|
||||
height:48px;
|
||||
position:absolute;
|
||||
right:7px;
|
||||
top:7px;
|
||||
opacity:0.5;
|
||||
}
|
||||
.locationselect .icons a {
|
||||
display:inline-block;
|
||||
width:48px;
|
||||
height:48px;
|
||||
}
|
||||
.locationselect .icons .reset {
|
||||
background-image:url('/static/site/img/icons/cross.svg');
|
||||
}
|
||||
|
||||
|
||||
.location {
|
||||
|
|
|
@ -27,9 +27,19 @@ c3nav = {
|
|||
}
|
||||
};
|
||||
|
||||
c3nav.update_history_state(true);
|
||||
c3nav.init_typeahead($('.locationselect input:text'));
|
||||
|
||||
$('.locationselect:not(.selected) .locationselect-input .tt-input').first().focus();
|
||||
$('.locationselect .icons .reset').click(c3nav._locationselect_reset)
|
||||
},
|
||||
|
||||
_locationselect_reset: function(e) {
|
||||
e.preventDefault();
|
||||
var locationselect = $(this).closest('.locationselect');
|
||||
locationselect.find('.name-field').val('');
|
||||
locationselect.removeClass('selected').find('.tt-input').focus().keyup().removeData('enter_item');
|
||||
c3nav.update_history_state();
|
||||
},
|
||||
|
||||
init_typeahead: function(elem) {
|
||||
|
@ -58,6 +68,7 @@ c3nav = {
|
|||
selected.find('.subtitle').text(item.subtitle);
|
||||
selected.find('.name-field').val(item.name);
|
||||
e.target.blur();
|
||||
c3nav.update_history_state();
|
||||
|
||||
$('.locationselect:not(.selected) .locationselect-input .tt-input').first().focus();
|
||||
},
|
||||
|
@ -66,6 +77,26 @@ c3nav = {
|
|||
},
|
||||
_typeahead_cursorchange: function(e, item) {
|
||||
$(e.target).data('enter_item', item);
|
||||
},
|
||||
|
||||
update_history_state: function(e, replace) {
|
||||
var origin = $(':input[name=origin]').val();
|
||||
var destination = $(':input[name=destination]').val();
|
||||
url = '/';
|
||||
if (origin !== '') {
|
||||
url += origin + '/'
|
||||
if (destination !== '') {
|
||||
url += destination + '/'
|
||||
}
|
||||
} else if (destination !== '') {
|
||||
url += '_/' + destination + '/'
|
||||
}
|
||||
if (replace) {
|
||||
history.replaceState({}, '', url);
|
||||
} else {
|
||||
history.pushState({}, '', url);
|
||||
}
|
||||
|
||||
}
|
||||
};
|
||||
$(document).ready(c3nav.init);
|
||||
|
|
|
@ -10,6 +10,9 @@
|
|||
<span class="title">{{ location.title }}</span>
|
||||
<small class="subtitle">{{ location.subtitle }}</small>
|
||||
</div>
|
||||
<div class="icons">
|
||||
<a href="" class="reset"></a>
|
||||
</div>
|
||||
<input type="hidden" name="{{ name }}" value="{{ location.name }}" class="name-field">
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
from django.conf.urls import url
|
||||
from django.views.generic import TemplateView
|
||||
|
||||
from c3nav.site.views import main
|
||||
|
||||
urlpatterns = [
|
||||
url(r'^$', TemplateView.as_view(template_name='site/index.html'), name='site.index')
|
||||
url(r'^(?P<origin>[a-z0-9-_:]+)/$', main, name='site.main'),
|
||||
url(r'^_/(?P<destination>[a-z0-9-_:]+)/$', main, name='site.main'),
|
||||
url(r'^(?P<origin>[a-z0-9-_:]+)/(?P<destination>[a-z0-9-_:]+)/$', main, name='site.main'),
|
||||
url(r'^$', main, name='site.main')
|
||||
]
|
||||
|
|
|
@ -1,10 +1,35 @@
|
|||
from django.utils.translation import ugettext_lazy as _
|
||||
from django.shortcuts import redirect, render
|
||||
|
||||
from c3nav.mapdata.utils.cache import get_levels_cached
|
||||
from c3nav.mapdata.locations import get_location
|
||||
|
||||
|
||||
def main(request):
|
||||
get_levels_cached()
|
||||
_
|
||||
src = request.POST if request.method == 'POST' else request.GET
|
||||
src == 5
|
||||
def main(request, origin=None, destination=None):
|
||||
do_redirect = False
|
||||
|
||||
if origin:
|
||||
origin_obj = get_location(request, origin)
|
||||
if origin_obj.name != origin:
|
||||
do_redirect = True
|
||||
origin = origin_obj
|
||||
|
||||
if destination:
|
||||
destination_obj = get_location(request, destination)
|
||||
if destination_obj.name != destination:
|
||||
do_redirect = True
|
||||
destination = destination_obj
|
||||
|
||||
if do_redirect:
|
||||
new_url = '/'
|
||||
if origin:
|
||||
new_url += origin.name+'/'
|
||||
if destination:
|
||||
new_url += destination.name + '/'
|
||||
elif destination:
|
||||
new_url += '_/' + destination.name + '/'
|
||||
|
||||
redirect(new_url)
|
||||
|
||||
return render(request, 'site/main.html', {
|
||||
'origin': origin,
|
||||
'destination': destination
|
||||
})
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue