#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.

Reply via email to