Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
 def point(self):
     return geosgeometry_str_to_struct(self.location)
Пример #4
0
 def point(self):
     return geosgeometry_str_to_struct(self.lat_lng)
Пример #5
0
 def point(self):
     from wagtailgeowidget.helpers import geosgeometry_str_to_struct
     return geosgeometry_str_to_struct(self.location)
Пример #6
0
    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")
Пример #7
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")
Пример #8
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")
Пример #9
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)
Пример #10
0
    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,
            }),
        )
Пример #11
0
    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>
            """)
Пример #12
0
 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')