mirror of
https://github.com/nikdoof/vapemap.git
synced 2025-12-14 06:42:17 +00:00
Rework the Add Store to use clientside geocoding.
This commit is contained in:
@@ -48,7 +48,11 @@ class AddressForm(BootstrapModelForm):
|
||||
|
||||
class Meta:
|
||||
model = Address
|
||||
exclude = ('name', 'geo_latitude', 'geo_longitude')
|
||||
exclude = ('name',)
|
||||
widgets = {
|
||||
'geo_latitude': forms.widgets.HiddenInput(),
|
||||
'geo_longitude': forms.widgets.HiddenInput(),
|
||||
}
|
||||
|
||||
|
||||
class AddressInline(InlineFormSet):
|
||||
|
||||
30
app/stores/static/js/geocoder.js
Normal file
30
app/stores/static/js/geocoder.js
Normal file
@@ -0,0 +1,30 @@
|
||||
|
||||
function get_form_latlng() {
|
||||
var addr = $('[id$=address1]').val() + ', ' + $('[id$=city]').val() + ', ' + $('[id$=postcode]').val();
|
||||
console.log('Inputted address: ' + addr);
|
||||
var gc = new google.maps.Geocoder();
|
||||
gc.geocode({'address': addr },update_form_latlng);
|
||||
return false
|
||||
}
|
||||
|
||||
function update_form_latlng(res, status) {
|
||||
if (status == google.maps.GeocoderStatus.OK) {
|
||||
if (res.length > 0) {
|
||||
res = res[0];
|
||||
console.log('Found location: ' + res.formatted_address);
|
||||
$('[id$=geo_latitude]').val(res.geometry.location.lat());
|
||||
$('[id$=geo_longitude]').val(res.geometry.location.lng());
|
||||
}
|
||||
$('.form').submit();
|
||||
} else {
|
||||
alert('Unable to lookup the location for the address provided. Please check and resubmit.');
|
||||
}
|
||||
}
|
||||
|
||||
$(document).ready(function(){
|
||||
if ($('[id$=geo_latitude]') && $('[id$=geo_latitude]').val() == "" ) {
|
||||
$('.form').submit(function(){
|
||||
get_form_latlng();
|
||||
})
|
||||
}
|
||||
});
|
||||
@@ -1,10 +1,16 @@
|
||||
{% extends "base.html" %}
|
||||
{% load bootstrap %}
|
||||
{% load staticfiles %}
|
||||
|
||||
{% block style %}
|
||||
{{ form.media }}
|
||||
{% endblock %}
|
||||
|
||||
{% block scripts %}
|
||||
<script type="text/javascript" src="https://maps.google.com/maps/api/js?sensor=false"></script>
|
||||
<script type="text/javascript" src="{% static "js/geocoder.js" %}"></script>
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
<div class="page-header">
|
||||
<h1>Add Store ({{ wizard.steps.step1 }} of {{ wizard.steps.count }})</h1>
|
||||
@@ -18,6 +24,6 @@
|
||||
<button name="wizard_goto_step" class="btn" type="submit" value="{{ wizard.steps.first }}">First Step</button>
|
||||
<button name="wizard_goto_step" class="btn" type="submit" value="{{ wizard.steps.prev }}">Previous Step</button>
|
||||
{% endif %}
|
||||
<button name="wizard_goto_step" class="btn" type="submit" value="{{ wizard.steps.next }}">Next Step</button>
|
||||
<button class="btn" type="submit">Next Step</button>
|
||||
</form>
|
||||
{% endblock %}
|
||||
@@ -18,8 +18,9 @@ class DistanceSearchView(ListView):
|
||||
if location:
|
||||
name, geo = caching_geo_lookup(location)
|
||||
elif lat and lng:
|
||||
name, geo = caching_geo_lookup('%s,%s' % (lat, lng))
|
||||
print name
|
||||
geo = (lat, lng)
|
||||
else:
|
||||
geo = None
|
||||
self.location_geo = geo
|
||||
|
||||
return Point(geo[1], geo[0])
|
||||
@@ -29,6 +30,8 @@ class DistanceSearchView(ListView):
|
||||
|
||||
def get_queryset(self):
|
||||
location = self.get_location()
|
||||
if not location:
|
||||
return SearchQuerySet.none
|
||||
distance = self.get_distance()
|
||||
print location, distance
|
||||
return SearchQuerySet().dwithin('location', location, distance).distance('location', location).order_by('-distance')
|
||||
|
||||
@@ -62,7 +62,7 @@ class StoreCreateView(SessionWizardView):
|
||||
|
||||
messages.success(self.request, "%s has been sumbitted for moderation and should be visible within the next 24 hours." % store_obj)
|
||||
|
||||
return HttpResponseRedirect(reverse('store-map'))
|
||||
return HttpResponseRedirect(reverse('stores-map'))
|
||||
|
||||
def get_template_names(self):
|
||||
return 'stores/wizard/store_wizard.html'
|
||||
Reference in New Issue
Block a user