Opened 16 years ago
Closed 13 years ago
#10625 closed Bug (fixed)
Ewkt regexp incorrectly escaped in GeoDjango admin javascript
Reported by: | timlinux | Owned by: | springmeyer |
---|---|---|---|
Component: | GIS | Version: | dev |
Severity: | Normal | Keywords: | regexp ewkt |
Cc: | chris.chamberlin@… | Triage Stage: | Accepted |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Hi
in http://code.djangoproject.com/browser/django/trunk/django/contrib/gis/templates/gis/admin/openlayers.js the regexp on line 3 is incorrectly escaped, causing conversion from ewkt to wkt to fail for me. I fixed it by changing:
new RegExp("^SRID=\d+;(.+)", "i");
to
new RegExp("^SRID=\\d+;(.+)", "i");
After which it correctly works for me. Would be great if you can apply this fix.
Thanks
Tim
Attachments (1)
Change History (10)
comment:1 by , 16 years ago
milestone: | 1.1 beta → 1.1 |
---|
comment:2 by , 16 years ago
comment:3 by , 16 years ago
I wasn't able to reproduce this. I tried:
- Linux:
- FF 3.0.9
- Opera 9.6
- Win XP:
- FF 3.0.10
- Opera 9.64
- IE 6.0.x
Suggest this be punted to 1.2 since we don't have a user-agent yet of the reported bug.
comment:4 by , 16 years ago
Resolution: | → worksforme |
---|---|
Status: | new → closed |
Paul tried half a dozen browsers and we have no new information from the reported, marking as worksforme.
comment:6 by , 13 years ago
Cc: | added |
---|---|
Easy pickings: | unset |
Resolution: | worksforme |
Severity: | → Normal |
Status: | closed → reopened |
Summary: | Ewkt regexp incorrectly escaped → Ewkt regexp incorrectly escaped in GeoDjango admin javascript |
Type: | → Bug |
UI/UX: | set |
I'm seeing this bug in Chrome 17.0.963.56; it's fairly simple to verify that the regexp does not match as designed, using a Javascript console:
> var brokenre = new RegExp("^SRID=\d+;(.+)", "i"); undefined > brokenre.exec('SRID=4326;POINT(1 1)') null > var fixedre = new RegExp("^SRID=\\d+;(.+)", "i"); undefined > fixedre.exec('SRID=4326;POINT(1 1)') ["SRID=4326;POINT(1 1)", "POINT(1 1)"]
It does not usually appear because the read_wkt() function is generally only called on startup, when the WKT textarea does not contain the EWKT format (with the SRID=4326; string that we're trying to strip).
It does appear, however, if read_wkt() is called again later; I wanted to be able to edit geometries by using either the map or the WKT textbox, so I added a JQuery change handler in an template as follows, mostly using code adapted from the openlayers.js file. In my GeoModelAdmin, I set map_template = "/path/to/my/template" and display_wkt=True.
{% extends "gis/admin/openlayers.html" %} {% block init_function %} {{ block.super }} (function($) { $('.vWKTField').height('3em').change(function(e) { var wkt = e.target.value if (wkt){ // After reading into geometry, immediately write back to // WKT <textarea> as EWKT (so that SRID is included). var admin_geom = {{ module }}.read_wkt(wkt); {{ module }}.deleteFeatures(); {{ module }}.write_wkt(admin_geom); if ({{ module }}.is_collection){ // If geometry collection, add each component individually so they may be // edited individually. for (var i = 0; i < {{ module }}.num_geom; i++){ {{ module }}.layers.vector.addFeatures([new OpenLayers.Feature.Vector(admin_geom.geometry.components[i].clone())]); } } else { {{ module }}.layers.vector.addFeatures([admin_geom]); } // Zooming to the bounds. {{ module }}.map.zoomToExtent(admin_geom.geometry.getBounds()); if ({{ module }}.is_point){ {{ module }}.map.zoomTo({{ point_zoom }}); } } }); })(django.jQuery); {% endblock init_function %}
comment:7 by , 13 years ago
Triage Stage: | Unreviewed → Accepted |
---|---|
UI/UX: | unset |
From code inspection, I'm convinced that the bug report is correct. All other JavaScript regexps use double backslashes.
by , 13 years ago
Attachment: | 10625.patch added |
---|
What browser version, please?