def to_python(self, value): if isinstance(value, dict): return value value = geosgeometry_str_to_struct(value) value = { 'lat': value['y'], 'lng': value['x'], 'srid': value['srid'], } return super(GeoBlock, self).to_python(value)
def to_python(self, value): if isinstance(value, dict): return value value = geosgeometry_str_to_struct(value) value = { "lat": value["y"], "lng": value["x"], "srid": value["srid"], } return super().to_python(value)
def point(self): return geosgeometry_str_to_struct(self.location)
def point(self): return geosgeometry_str_to_struct(self.lat_lng)
def point(self): from wagtailgeowidget.helpers import geosgeometry_str_to_struct return geosgeometry_str_to_struct(self.location)
def test_that_basic_parsing_works(self): struct = geosgeometry_str_to_struct("SRID=5432;POINT(12.0 13.0)") self.assertEqual(struct["srid"], "5432") self.assertEqual(struct["x"], "12.0") self.assertEqual(struct["y"], "13.0")
def test_negative_coords(self): struct = geosgeometry_str_to_struct("SRID=5432;POINT(12.0 -13.0)") self.assertEqual(struct["srid"], "5432") self.assertEqual(struct["x"], "12.0") self.assertEqual(struct["y"], "-13.0")
def test_that_optional_space_between_point_and_data_is_accepted(self): struct = geosgeometry_str_to_struct("SRID=5432;POINT (12.0 13.0)") self.assertEqual(struct["srid"], "5432") self.assertEqual(struct["x"], "12.0") self.assertEqual(struct["y"], "13.0")
def test_none_is_returned_on_invalid_struct(self): struct = geosgeometry_str_to_struct("S=5432_P(12.0 13.0)") self.assertEqual(struct, None)
def render_js_init(self, id_, name, value): address_selector = "#{}{}".format( self.id_prefix, self.address_field, ) zoom_selector = "#{}{}".format( self.id_prefix, self.zoom_field, ) data = { "defaultLocation": GEO_WIDGET_DEFAULT_LOCATION, "addressField": self.address_field, "zoomField": self.zoom_field, "zoom": self.zoom, "srid": self.srid, "showEmptyLocation": GEO_WIDGET_EMPTY_LOCATION, "translations": translations, } if value and isinstance(value, str): result = geosgeometry_str_to_struct(value) if result: data["defaultLocation"] = { "lat": result["y"], "lng": result["x"], } if value and Point and isinstance(value, Point): data["defaultLocation"] = { "lat": value.y, "lng": value.x, } return """ (function() {{ var id = "{id}"; var namespace = "id_"; if (id.indexOf("-") !== -1) {{ var namespace = id.split("-") .slice(0, -1) .join("-"); namespace = namespace + "-"; }} var options = {options}; var addressSelector = options.addressField; if (addressSelector) {{ addressSelector = "#" + namespace + addressSelector; }} var zoomSelector = options.zoomField; if (zoomSelector) {{ zoomSelector = "#" + namespace + zoomSelector; }} options = Object.assign({{}}, options, {{ "id": id, "addressSelector": addressSelector, "zoomSelector": zoomSelector, }}); new GoogleMapsField(options); }})(); """.format( id=id_, options=json.dumps({ **data, }), )
def render(self, name, value, attrs=None): out = super(GeoField, self).render(name, value, attrs) location = format_html( '<div class="input">' '<input id="_id_{}_latlng" class="geo-field-location" maxlength="250" type="text">' # NOQA '</div>', name) if '-' in name: namespace = name.split('-')[:-1] namespace = '-'.join(namespace) namespace = '{}-'.format(namespace) else: namespace = '' source_selector = '#{}{}'.format(self.id_prefix, name) address_selector = '#{}{}{}'.format(self.id_prefix, namespace, self.address_field) data = { 'sourceSelector': source_selector, 'defaultLocation': GEO_WIDGET_DEFAULT_LOCATION, 'addressSelector': address_selector, 'latLngDisplaySelector': '#_id_{}_latlng'.format(name), 'zoom': self.zoom, 'srid': self.srid, } if value and isinstance(value, six.string_types): result = geosgeometry_str_to_struct(value) if result: data['defaultLocation'] = { 'lat': result['y'], 'lng': result['x'], } if value and Point and isinstance(value, Point): data['defaultLocation'] = { 'lat': value.y, 'lng': value.x, } json_data = json.dumps(data) data_id = 'geo_field_{}_data'.format(name) return mark_safe( '<script>window["{}"] = {};</script>'.format(data_id, json_data) + out + location + '<div class="geo-field" data-data-id="{}"></div>'.format(data_id) + """ <script> (function(){ if (document.readyState === 'complete') { return initializeGeoFields(); } $(window).on('load', function() { initializeGeoFields(); }); })(); </script> """)
def test_regular_coords(self): struct = geosgeometry_str_to_struct('SRID=5432;POINT(12.0 13.0)') self.assertEquals(struct['srid'], '5432') self.assertEquals(struct['x'], '12.0') self.assertEquals(struct['y'], '13.0')