#10625: Ewkt regexp incorrectly escaped in GeoDjango admin javascript
-----------------------------+---------------------------------------
Reporter: timlinux | Owner: springmeyer
Type: Bug | Status: reopened
Component: GIS | Version: SVN
Severity: Normal | Resolution:
Keywords: regexp ewkt | Triage Stage: Unreviewed
Has patch: 1 | Needs documentation: 0
Needs tests: 0 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 1
-----------------------------+---------------------------------------
Changes (by chris.chamberlin@…):
* status: closed => reopened
* severity: => Normal
* cc: chris.chamberlin@… (added)
* type: => Bug
* easy: => 0
* ui_ux: => 1
* resolution: worksforme =>
Comment:
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 %}
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/10625#comment:6>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en.