diff options
author | Struan Donald <struan@exo.org.uk> | 2011-10-20 18:53:32 +0100 |
---|---|---|
committer | Struan Donald <struan@exo.org.uk> | 2011-10-20 18:53:32 +0100 |
commit | 64cc9b22581f24acffbdae19ef6f06b96334135f (patch) | |
tree | 8a7e80a48a0dd6a9b2ecfd8d1b3f3b53f25ba81c | |
parent | 284b74472e30db0f1b1e82a4538f4bebfc0b67a5 (diff) |
remove javascript eval and send down html instead
-rw-r--r-- | perllib/FixMyStreet/App/Controller/Report/New.pm | 31 | ||||
-rw-r--r-- | templates/web/default/report/new/category_extras.html | 26 | ||||
-rw-r--r-- | templates/web/default/report/new/fill_in_details_form.html | 27 | ||||
-rw-r--r-- | web/js/fixmystreet.js | 39 | ||||
-rw-r--r-- | web/js/map-OpenLayers.js | 1 |
5 files changed, 69 insertions, 55 deletions
diff --git a/perllib/FixMyStreet/App/Controller/Report/New.pm b/perllib/FixMyStreet/App/Controller/Report/New.pm index 239fa7a1a..551e9b719 100644 --- a/perllib/FixMyStreet/App/Controller/Report/New.pm +++ b/perllib/FixMyStreet/App/Controller/Report/New.pm @@ -119,7 +119,36 @@ sub report_form_ajax : Path('ajax') : Args(0) { { councils_text => $councils_text, category => $category, - category_extras => $c->stash->{category_extras_json}, + } + ); + + $c->res->content_type('application/json; charset=utf-8'); + $c->res->body($body); +} + +sub category_extras_ajax : Path('category_extras') : Args(0) { + my ( $self, $c ) = @_; + + my $contacts + = $c + ->model('DB::Contact') + ->not_deleted + ->search( { area_id => $c->req->param('area_id'), category => $c->req->param('category') } ); + + my $category_extra = ''; + if ( my $contact = $contacts->first ) { + if ( $contact->extra ) { + $c->stash->{report_meta} = {}; + $c->stash->{report} = { category => $c->req->param('category') }; + $c->stash->{category_extras} = { $c->req->param('category' ) => $contact->extra }; + + $category_extra= $c->view('Web')->render( $c, 'report/new/category_extras.html'); + } + } + + my $body = JSON->new->utf8(1)->encode( + { + category_extra => $category_extra, } ); diff --git a/templates/web/default/report/new/category_extras.html b/templates/web/default/report/new/category_extras.html new file mode 100644 index 000000000..479b9f46c --- /dev/null +++ b/templates/web/default/report/new/category_extras.html @@ -0,0 +1,26 @@ +<div id="category_meta"> + [%- IF report_meta %] + [%- category = report.category %] + <h4>Additional Information</h4> + [%- FOR meta IN category_extras.$category %] + [%- meta_name = meta.code -%] + +[% IF field_errors.$meta_name %] + <div class='form-error'>[% field_errors.$meta_name %]</div> +[% END -%] + + <div class="form-field"> + <label for="form_[% meta_name %]">[% meta.description _ ':' %]</label> + [% IF meta.exists('values') %] + <select name="[% meta_name %]" id="form_[% meta_name %]"> + [% FOR option IN meta.values.value.keys %] + <option value="[% meta.values.value.$option.key %]">[% option %]</option> + [% END %] + </select> + [% ELSE %] + <input type="text" value="[% report_meta.$meta_name | html %]" name="[% meta_name %]" id="form_[% meta_name %]"> + [% END %] + </div> + [%- END %] + [%- END %] +</div> diff --git a/templates/web/default/report/new/fill_in_details_form.html b/templates/web/default/report/new/fill_in_details_form.html index 617bb0fa6..e2d8cb3ec 100644 --- a/templates/web/default/report/new/fill_in_details_form.html +++ b/templates/web/default/report/new/fill_in_details_form.html @@ -80,32 +80,7 @@ [% END %] [%- IF category_extras %] -<div id="category_meta"> - [%- IF report_meta %] - [%- category = report.category %] - <h4>Additional Information</h4> - [%- FOR meta IN category_extras.$category %] - [%- meta_name = meta.code -%] - -[% IF field_errors.$meta_name %] - <div class='form-error'>[% field_errors.$meta_name %]</div> -[% END -%] - - <div class="form-field"> - <label for="form_[% meta_name %]">[% meta.description _ ':' %]</label> - [% IF meta.exists('values') %] - <select name="[% meta_name %]" id="form_[% meta_name %]"> - [% FOR option IN meta.values.value.keys %] - <option value="[% meta.values.value.$option.key %]">[% option %]</option> - [% END %] - </select> - [% ELSE %] - <input type="text" value="[% report_meta.$meta_name | html %]" name="[% meta_name %]" id="form_[% meta_name %]"> - [% END %] - </div> - [%- END %] - [%- END %] -</div> +[% PROCESS "report/new/category_extras.html" %] [%- END %] [% IF c.cobrand.allow_photo_upload %] diff --git a/web/js/fixmystreet.js b/web/js/fixmystreet.js index a0ea02437..dc180151c 100644 --- a/web/js/fixmystreet.js +++ b/web/js/fixmystreet.js @@ -4,35 +4,20 @@ */ function form_category_onchange() { - if ( category_extras ) { - if ( $('#category_meta').size() ) { - $('#category_meta').empty(); - } else { - $('#form_category_row').after( - '<div id="category_meta"></div>' - ); - } - if ( category_extras[this.options[ this.selectedIndex ].text] ) { - var fields = category_extras[this.options[ this.selectedIndex ].text]; - $('<h4>Additional information</h4>').appendTo('#category_meta'); - for ( var i in fields) { - var meta = fields[i]; - var field = '<div class="form-field">'; - field += '<label for="form_' + meta.code + '">' + meta.description + ':</label>'; - if ( meta.values ) { - field += '<select name="' + meta.code + '" id="form_' + meta.code + '">'; - for ( var j in meta.values.value ) { - field += '<option value="' + meta.values.value[j].key + '">' + j + '</option>'; - } - field += '</select>'; - } else { - field += '<input type="text" value="" name="' + meta.code + '" id="form_' + meta.code + '">'; - } - field += '</div>'; - $( field ).appendTo('#category_meta'); + $.getJSON('/report/new/category_extras', { + area_id: 2649, + category: this.options[ this.selectedIndex ].text, + }, function(data) { + if ( data.category_extra ) { + if ( $('#category_meta').size() ) { + $('#category_meta').html( data.category_extra); + } else { + $('#form_category_row').after( data.category_extra ); } + } else { + $('#category_meta').empty(); } - } + }); } $(function(){ diff --git a/web/js/map-OpenLayers.js b/web/js/map-OpenLayers.js index d754248f4..dda50b1b9 100644 --- a/web/js/map-OpenLayers.js +++ b/web/js/map-OpenLayers.js @@ -315,7 +315,6 @@ OpenLayers.Control.Click = OpenLayers.Class(OpenLayers.Control, { }, function(data) { $('#councils_text').html(data.councils_text); $('#form_category_row').html(data.category); - eval( 'category_extras = ' + data.category_extras + ';'); /* Need to reset this here as it gets removed when we replace the HTML for the dropdown */ $('#form_category').change( form_category_onchange ); |