from django.forms import widgets from django.utils.safestring import mark_safe import os class LocationWidget(widgets.TextInput): def __init__(self, attrs=None, based_field=None, zoom=None, width=610, height = 480, **kwargs): self.based_field = based_field self.zoom = zoom self.width = width self.height = height super(LocationWidget, self).__init__(attrs) def render(self, name, value, attrs=None): if value is not None: lat, lng, zoom = value.split(',') value = '%s,%s,%d' % ( float(lat), float(lng), float(zoom) ) else: value = '' based_field = "#id_" + self.based_field.name attrs = attrs or {} attrs['readonly'] = "readonly" attrs['data-location-widget'] = name attrs['data-based-field'] = based_field attrs['data-zoom'] = self.zoom attrs['data-map'] = '#map_' + name attrs['data-dialog-id'] = "#map_dialog_" + name text_input = super(LocationWidget, self).render(name, value, attrs) path = os.path.abspath(os.path.dirname(__file__)) with open( path + "/media/form.html" , 'r') as content_file: html = content_file.read() return mark_safe(text_input + html % {'name': name, 'width': self.width, 'height': self.height }) class Media: css = { 'all' : ('/location_field/media/form.css', ) } # Use schemaless URL so it works with both, http and https websites js = ( '//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js', # jquery '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js', '//maps.google.com/maps/api/js?sensor=false&language=de', '/static/js/bindWithDelay.js', '/location_field/media/form.js', )