@@ -1029,6 +1029,11 module ApplicationHelper | |||
|
1029 | 1029 | content_tag(:a, name, {:href => '#', :onclick => "#{function}; return false;"}.merge(html_options)) |
|
1030 | 1030 | end |
|
1031 | 1031 | |
|
1032 | # Helper to render JSON in views | |
|
1033 | def raw_json(arg) | |
|
1034 | arg.to_json.to_s.gsub('/', '\/').html_safe | |
|
1035 | end | |
|
1036 | ||
|
1032 | 1037 | def back_url |
|
1033 | 1038 | url = params[:back_url] |
|
1034 | 1039 | if url.nil? && referer = request.env['HTTP_REFERER'] |
@@ -1,12 +1,12 | |||
|
1 | 1 | <%= javascript_tag do %> |
|
2 |
var operatorLabels = <%= raw Query.operators_labels |
|
|
3 |
var operatorByType = <%= raw Query.operators_by_filter_type |
|
|
4 |
var availableFilters = <%= raw query.available_filters_as |
|
|
5 |
var labelDayPlural = |
|
|
2 | var operatorLabels = <%= raw_json Query.operators_labels %>; | |
|
3 | var operatorByType = <%= raw_json Query.operators_by_filter_type %>; | |
|
4 | var availableFilters = <%= raw_json query.available_filters_as_json %>; | |
|
5 | var labelDayPlural = <%= raw_json l(:label_day_plural) %>; | |
|
6 | 6 | $(document).ready(function(){ |
|
7 | 7 | initFilters(); |
|
8 | 8 | <% query.filters.each do |field, options| %> |
|
9 |
addFilter("<%= field %>", <%= raw query.operator_for(field) |
|
|
9 | addFilter("<%= field %>", <%= raw_json query.operator_for(field) %>, <%= raw_json query.values_for(field) %>); | |
|
10 | 10 | <% end %> |
|
11 | 11 | }); |
|
12 | 12 | <% end %> |
@@ -163,9 +163,9 function buildFilterRow(field, operator, values) { | |||
|
163 | 163 | case "date": |
|
164 | 164 | case "date_past": |
|
165 | 165 | tr.find('td.values').append( |
|
166 |
'<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="10" class="value date_value" |
|
|
167 |
' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="10" class="value date_value" |
|
|
168 |
' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="3" class="value" |
|
|
166 | '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="10" class="value date_value" /></span>' + | |
|
167 | ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="10" class="value date_value" /></span>' + | |
|
168 | ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="3" class="value" /> '+labelDayPlural+'</span>' | |
|
169 | 169 | ); |
|
170 | 170 | $('#values_'+fieldId+'_1').val(values[0]).datepicker(datepickerOptions); |
|
171 | 171 | $('#values_'+fieldId+'_2').val(values[1]).datepicker(datepickerOptions); |
@@ -174,15 +174,15 function buildFilterRow(field, operator, values) { | |||
|
174 | 174 | case "string": |
|
175 | 175 | case "text": |
|
176 | 176 | tr.find('td.values').append( |
|
177 |
'<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="30" class="value" |
|
|
177 | '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'" size="30" class="value" /></span>' | |
|
178 | 178 | ); |
|
179 | 179 | $('#values_'+fieldId).val(values[0]); |
|
180 | 180 | break; |
|
181 | 181 | case "integer": |
|
182 | 182 | case "float": |
|
183 | 183 | tr.find('td.values').append( |
|
184 |
'<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="6" class="value" |
|
|
185 |
' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="6" class="value" |
|
|
184 | '<span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_1" size="6" class="value" /></span>' + | |
|
185 | ' <span style="display:none;"><input type="text" name="v['+field+'][]" id="values_'+fieldId+'_2" size="6" class="value" /></span>' | |
|
186 | 186 | ); |
|
187 | 187 | $('#values_'+fieldId+'_1').val(values[0]); |
|
188 | 188 | $('#values_'+fieldId+'_2').val(values[1]); |
@@ -273,4 +273,12 class QueriesControllerTest < ActionController::TestCase | |||
|
273 | 273 | assert_redirected_to :controller => 'issues', :action => 'index', :project_id => 'ecookbook', :set_filter => 1, :query_id => nil |
|
274 | 274 | assert_nil Query.find_by_id(1) |
|
275 | 275 | end |
|
276 | ||
|
277 | def test_backslash_should_be_escaped_in_filters | |
|
278 | @request.session[:user_id] = 2 | |
|
279 | get :new, :subject => 'foo/bar' | |
|
280 | assert_response :success | |
|
281 | assert_template 'new' | |
|
282 | assert_include 'addFilter("subject", "=", ["foo\/bar"]);', response.body | |
|
283 | end | |
|
276 | 284 | end |
General Comments 0
You need to be logged in to leave comments.
Login now