admin_data 1.1.3 → 1.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. data/Rakefile +1 -1
  2. data/app/controllers/admin_data/public_controller.rb +14 -5
  3. data/lib/admin_data/version.rb +1 -1
  4. data/lib/admin_data.rb +1 -1
  5. metadata +3 -32
  6. data/lib/public/images/add.png +0 -0
  7. data/lib/public/images/no.png +0 -0
  8. data/lib/public/images/site.png +0 -0
  9. data/lib/public/javascripts/advance_search/act_on_result.js +0 -45
  10. data/lib/public/javascripts/advance_search/advance_search.js +0 -83
  11. data/lib/public/javascripts/advance_search/advance_search_structure.js +0 -79
  12. data/lib/public/javascripts/advance_search/ajaxify_advance_search.js +0 -28
  13. data/lib/public/javascripts/advance_search/build_first_row.js +0 -8
  14. data/lib/public/javascripts/advance_search/event_bindings.js +0 -76
  15. data/lib/public/javascripts/advance_search/global_ajax_setting.js +0 -10
  16. data/lib/public/javascripts/advance_search/trigger_submit_on_domready.js +0 -6
  17. data/lib/public/javascripts/misc/drop_down_change.js +0 -8
  18. data/lib/public/javascripts/misc/js_util.js +0 -58
  19. data/lib/public/javascripts/misc/quick_search_input_focus.js +0 -6
  20. data/lib/public/javascripts/test/act_on_result.js +0 -120
  21. data/lib/public/javascripts/test/advance_search.js +0 -80
  22. data/lib/public/javascripts/test/ajaxify_advance_search.js +0 -29
  23. data/lib/public/javascripts/test/build_first_row.js +0 -10
  24. data/lib/public/javascripts/test/event_bindings.js +0 -100
  25. data/lib/public/javascripts/vendor/jack.js +0 -903
  26. data/lib/public/javascripts/vendor/jquery-1.4.2.js +0 -6240
  27. data/lib/public/javascripts/vendor/jquery-ui-1.7.2.custom.min.js +0 -298
  28. data/lib/public/javascripts/vendor/jquery.ba-isjquery.js +0 -21
  29. data/lib/public/javascripts/vendor/jquery_form.js +0 -814
  30. data/lib/public/javascripts/vendor/log.js +0 -9
  31. data/lib/public/javascripts/vendor/qunit.js +0 -1043
  32. data/lib/public/javascripts/vendor/rails.js +0 -132
  33. data/lib/public/stylesheets/base.css +0 -1109
  34. data/lib/public/stylesheets/vendor/jquery-ui-1.7.2.custom.css +0 -406
data/Rakefile CHANGED
@@ -31,7 +31,7 @@ begin
31
31
  s.email = "neerajdotname@gmail.com"
32
32
  s.homepage = "http://github.com/neerajdotname/admin_data"
33
33
  s.authors = ['Neeraj Singh']
34
- s.files = FileList["[A-Z]*", "{app,config,lib,public}/**/*", 'init.rb']
34
+ s.files = FileList["[A-Z]*", "{app,config,lib}/**/*", 'init.rb']
35
35
 
36
36
  s.add_dependency('will_paginate', '>= 3.0.pre2')
37
37
 
@@ -2,15 +2,13 @@ module AdminData
2
2
  class PublicController < ApplicationController
3
3
 
4
4
  def serve
5
- path = File.join(AdminData.public_dir,params[:file])
6
- expanded_path = File.expand_path(path)
7
5
 
8
- # validate that expanded path has admin_data
9
- unless expanded_path =~ /admin_data/
6
+ # validate filename with a white list
7
+ unless self.class.admin_data_assets.include? params[:file]
10
8
  render :nothing => true, :status => 404 and return
11
9
  end
12
10
 
13
- opts = {:text => File.read(path), :cache => true}
11
+ opts = {:text => File.read(File.join(AdminData.public_dir,params[:file])), :cache => true}
14
12
 
15
13
  case params[:file]
16
14
  when /\.css$/i then opts[:content_type] = "text/css"
@@ -23,6 +21,17 @@ module AdminData
23
21
  render opts
24
22
  end
25
23
 
24
+ protected
26
25
 
26
+ # Cached list of all assets provided by admin_data
27
+ # It is used to ensure security in the serve method
28
+ def self.admin_data_assets
29
+ @admin_data_assets ||= (
30
+ Dir.glob(File.join(AdminData.public_dir, '**', '*')).map do |path|
31
+ # we want only relative paths
32
+ path.split(AdminData.public_dir, 2).last
33
+ end
34
+ )
35
+ end
27
36
  end
28
37
  end
@@ -1,3 +1,3 @@
1
1
  module AdminData
2
- VERSION = '1.1.3'
2
+ VERSION = '1.1.4'
3
3
  end
data/lib/admin_data.rb CHANGED
@@ -9,7 +9,7 @@ module AdminData
9
9
  end
10
10
 
11
11
  def self.public_dir
12
- File.expand_path(File.join(LIBPATH, 'public')) + File::SEPARATOR
12
+ File.expand_path(File.join(LIBPATH, '..', 'public')) + File::SEPARATOR
13
13
  end
14
14
 
15
15
  class << self
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: admin_data
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 1
8
8
  - 1
9
- - 3
10
- version: 1.1.3
9
+ - 4
10
+ version: 1.1.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Neeraj Singh
@@ -160,35 +160,6 @@ files:
160
160
  - lib/admin_data/util.rb
161
161
  - lib/admin_data/version.rb
162
162
  - lib/admin_data_date_validation.rb
163
- - lib/public/images/add.png
164
- - lib/public/images/no.png
165
- - lib/public/images/site.png
166
- - lib/public/javascripts/advance_search/act_on_result.js
167
- - lib/public/javascripts/advance_search/advance_search.js
168
- - lib/public/javascripts/advance_search/advance_search_structure.js
169
- - lib/public/javascripts/advance_search/ajaxify_advance_search.js
170
- - lib/public/javascripts/advance_search/build_first_row.js
171
- - lib/public/javascripts/advance_search/event_bindings.js
172
- - lib/public/javascripts/advance_search/global_ajax_setting.js
173
- - lib/public/javascripts/advance_search/trigger_submit_on_domready.js
174
- - lib/public/javascripts/misc/drop_down_change.js
175
- - lib/public/javascripts/misc/js_util.js
176
- - lib/public/javascripts/misc/quick_search_input_focus.js
177
- - lib/public/javascripts/test/act_on_result.js
178
- - lib/public/javascripts/test/advance_search.js
179
- - lib/public/javascripts/test/ajaxify_advance_search.js
180
- - lib/public/javascripts/test/build_first_row.js
181
- - lib/public/javascripts/test/event_bindings.js
182
- - lib/public/javascripts/vendor/jack.js
183
- - lib/public/javascripts/vendor/jquery-1.4.2.js
184
- - lib/public/javascripts/vendor/jquery-ui-1.7.2.custom.min.js
185
- - lib/public/javascripts/vendor/jquery.ba-isjquery.js
186
- - lib/public/javascripts/vendor/jquery_form.js
187
- - lib/public/javascripts/vendor/log.js
188
- - lib/public/javascripts/vendor/qunit.js
189
- - lib/public/javascripts/vendor/rails.js
190
- - lib/public/stylesheets/base.css
191
- - lib/public/stylesheets/vendor/jquery-ui-1.7.2.custom.css
192
163
  - test/rails_root/app/controllers/application_controller.rb
193
164
  - test/rails_root/app/helpers/application_helper.rb
194
165
  - test/rails_root/app/models/city.rb
Binary file
Binary file
Binary file
@@ -1,45 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- AdminData.actOnResult = {
4
-
5
- action: function(action_type) {
6
- var formData = $('#advance_search_form').data('admin_data_form_array'),
7
- parameterizedData;
8
-
9
- formData.push({
10
- 'name': 'admin_data_advance_search_action_type',
11
- 'value': action_type
12
- });
13
-
14
- parameterizedData = $.param(formData);
15
-
16
- $.ajax({
17
- url: $('#advance_search_form').attr('action'),
18
- type: 'post',
19
- dataType: 'json',
20
- data: parameterizedData,
21
- success: function(json) {
22
- AdminData.actOnResult.successCallback(json);
23
- }
24
- });
25
- },
26
-
27
- successCallback: function(json) {
28
- $('#results').text(json.success);
29
- }
30
-
31
- };
32
-
33
- $('#advance_search_delete_all').live('click', function() {
34
- if (window.confirm('Are you sure?')) {
35
- AdminData.actOnResult.action('delete');
36
- }
37
- return false;
38
- });
39
-
40
- $('#advance_search_destroy_all').live('click', function() {
41
- if (window.confirm('Are you sure?')) {
42
- AdminData.actOnResult.action('destroy');
43
- }
44
- return false;
45
- });
@@ -1,83 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- AdminData.advanceSearch = {
4
-
5
- buildFirstRow: function() {
6
-
7
- var img = $('<img />', {
8
- src: '/admin_data/public/images/add.png'
9
- });
10
-
11
- $('#advance_search_table').append(this.buildRow())
12
- .find('tr td:last a')
13
- .attr('id','add_row_link_1')
14
- .removeClass('remove_row')
15
- .addClass('add_row_link')
16
- .html('')
17
- .append(img);
18
- },
19
-
20
- buildCol1: function() {
21
- var i, col = $('<select />', { className: 'col1' }).append($('<option />')),
22
- tableStructure = $('#advance_search_table').data('table_structure');
23
-
24
- for (i in tableStructure) {
25
- $('<option />', {
26
- text: i,
27
- value: i
28
- }).appendTo(col);
29
- }
30
- return $('<td />').append(col);
31
- },
32
-
33
- buildCol2: function() {
34
- var select = $('<select />', { className: 'col2', disabled: 'disabled' });
35
- return $('<td />').append(select);
36
- },
37
-
38
- buildCol3: function() {
39
- var select = $('<input />', { className: 'col3' });
40
- return $('<td />').append($('<input />', { className: 'col3', disabled: 'disabled' }));
41
- },
42
-
43
- buildCol4: function() {
44
- var img = $('<img />', {
45
- src: '/admin_data/public/images/no.png'
46
- });
47
-
48
- return $('<td />').append($('<a />', {
49
- text: '',
50
- href: '#',
51
- className: 'remove_row'
52
- }).append(img));
53
- },
54
-
55
- buildRow: function() {
56
-
57
- var $tr = $('<tr />'),
58
- currentRowNumber = $(document).data('currentRowNumber'),
59
- that = this,
60
- build_array = ['buildCol1', 'buildCol2', 'buildCol3', 'buildCol4'];
61
-
62
- if (currentRowNumber === undefined) {
63
- currentRowNumber = 1;
64
- $(document).data('currentRowNumber', currentRowNumber);
65
- } else {
66
- currentRowNumber = parseInt(currentRowNumber, 10) + 1;
67
- $(document).data('currentRowNumber', currentRowNumber);
68
- }
69
-
70
- $.each(build_array, function(index, value) {
71
- $tr.append(that[value]());
72
- });
73
-
74
- $tr.find('select.col1').attr({ name: 'adv_search[' + currentRowNumber + '_row][col1]' });
75
- $tr.find('select.col2').attr({ name: 'adv_search[' + currentRowNumber + '_row][col2]' });
76
- $tr.find('input.col3').attr({ name: 'adv_search[' + currentRowNumber + '_row][col3]' });
77
-
78
- $tr.find('.remove_row').attr('id', 'remove_row_'+currentRowNumber);
79
-
80
- return $tr;
81
- }
82
-
83
- };
@@ -1,79 +0,0 @@
1
- AdminData = AdminData || {};
2
-
3
- AdminData.mappings = {
4
-
5
- //JSLint complains if a hash has key named boolean. So I am changing the key to booleant
6
- booleant: {
7
- options: [
8
- ["is null", "is_null"],
9
- ["is not null", "is_not_null"],
10
- ["is true", "is_true"],
11
- ["is false", "is_false"]
12
- ]
13
- },
14
-
15
- string: {
16
- options: [
17
- ["is null", "is_null"],
18
- ["is not null", "is_not_null"],
19
- ["contains", "contains"],
20
- ["is exactly", "is_exactly"],
21
- ["doesn't contain", "does_not_contain"]
22
- ]
23
- },
24
-
25
- text: {
26
- options: [
27
- ["is null", "is_null"],
28
- ["is not null", "is_not_null"],
29
- ["Contains", "contains"],
30
- ["Doesn't Contain", "does_not_contain"]
31
- ]
32
- },
33
-
34
- datetime: {
35
- options: [
36
- ["is null", "is_null"],
37
- ["is not null", "is_not_null"],
38
- ['on', "is_on"],
39
- ['on or before', "is_on_or_before_date"],
40
- ['on or after', "is_on_or_after_date"]
41
- ]
42
- },
43
-
44
- date: {
45
- options: [
46
- ["is null", "is_null"],
47
- ["is not null", "is_not_null"],
48
- ['on', "is_on"],
49
- ['on or before', "is_on_or_before_date"],
50
- ['on or after', "is_on_or_after_date"]
51
- ]
52
- },
53
-
54
- time: {
55
- options: [
56
- ["is null", "is_null"],
57
- ["is not null", "is_not_null"],
58
- ["is exactly", "is_exactly"]
59
- ]
60
- },
61
-
62
- decimal: {
63
- options: [
64
- ['is equal to', "is_equal_to"],
65
- ['is less than', "less_than"],
66
- ['is greater than', "greater_than"]
67
- ]
68
- },
69
-
70
- integer: {
71
- options: [
72
- ['is equal to', "is_equal_to"],
73
- ['is less than', "less_than"],
74
- ['is greater than', "greater_than"]
75
- ]
76
- }
77
- };
78
-
79
-
@@ -1,28 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- AdminData.ajaxifyAdvanceSearch = {
4
- successCallback: function(responseText) {
5
- $('#results').html(responseText);
6
- },
7
-
8
- beforeSubmitCallback: function(formArray, jqForm) {
9
- $('#results').html('<span class="searching_message">searching...</span>');
10
- $('#advance_search_form').data('admin_data_form_array', formArray);
11
- }
12
- };
13
-
14
- $(function() {
15
-
16
- var options = {
17
- success: function(responseText) {
18
- AdminData.ajaxifyAdvanceSearch.successCallback(responseText);
19
- },
20
- beforeSubmit: function(formArray, jqForm) {
21
- AdminData.ajaxifyAdvanceSearch.beforeSubmitCallback(formArray, jqForm);
22
- }
23
- };
24
-
25
- $('#advance_search_form').ajaxForm(options);
26
-
27
- });
28
-
@@ -1,8 +0,0 @@
1
- $(function() {
2
-
3
- var json = $.parseJSON( $('#primary_column_type_info').html());
4
- $('#advance_search_table').data('table_structure', json);
5
- AdminData.advanceSearch.buildFirstRow();
6
-
7
- });
8
-
@@ -1,76 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- AdminData.bindings = {
4
-
5
- col2_change: function(e) {
6
- var arrayList = ['is_false', 'is_true', 'is_null', 'is_not_null'],
7
- $col2 = $(e.target).closest('select'),
8
- value = $col2.val(),
9
- tableStructure = $('#advance_search_table').data('table_structure'),
10
- $col3 = $col2.parents('tr').find('td input.col3'),
11
- $col1 = $col2.parents('tr').find('td select.col1'),
12
- col1ColumnType = tableStructure[$col1.val()];
13
-
14
-
15
- if (value.length === 0 || ($.inArray(value, arrayList) > - 1)) {
16
- $col3.val('').attr('disabled','disabled');
17
-
18
- } else {
19
- $col3.removeAttr('disabled');
20
- if (col1ColumnType === 'datetime' || col1ColumnType === 'date') {
21
- $col3.val(AdminData.jsUtil.dateToString(new Date())).addClass('datepicker');
22
-
23
- $('.datepicker').datepicker({ dateFormat: 'dd-MM-yy', changeYear: true, changeMonth: true });
24
-
25
- } else {
26
- $('.datepicker').datepicker('destroy');
27
- $col3.removeClass('datepicker').focus(); // do not create focus for date pickers
28
- }
29
- }
30
- },
31
-
32
- pagination_click: function(e) {
33
- var href = $(e.target).closest('a').attr('href');
34
-
35
- $.ajax({ url: href, dataType: "text", success: function(responseText){
36
- $('#results').html(responseText);
37
- }});
38
-
39
- AdminData.jsUtil.colorizeRows();
40
- },
41
-
42
- col1_change: function(e) {
43
- var col1 = $(e.target).closest('select'),
44
- tableStructure = $('#advance_search_table').data('table_structure'),
45
- columnType = tableStructure[col1.val()],
46
- options = AdminData.mappings[columnType]['options'],
47
- col2 = col1.parents('tr').find('td select.col2');
48
-
49
- col2.html('');
50
- AdminData.jsUtil.buildOptionsFromArray(options, col2);
51
- col2.trigger('change').removeAttr('disabled');
52
- }
53
- };
54
-
55
- $('.pagination a').live('click', function(e) {
56
- AdminData.bindings.pagination_click(e);
57
- return false;
58
- });
59
-
60
- $('#advance_search_table a.add_row_link').live('click', function() {
61
- $('#advance_search_table').append(AdminData.advanceSearch.buildRow());
62
- return false;
63
- });
64
-
65
- $('#advance_search_table a.remove_row').live('click', function(e) {
66
- $(e.target).closest('tr').remove();
67
- return false;
68
- });
69
-
70
- $('#advance_search_table select.col1').live('change', function(e) {
71
- AdminData.bindings.col1_change(e);
72
- });
73
-
74
- $('#advance_search_table select.col2').live('change', function(e) {
75
- AdminData.bindings.col2_change(e);
76
- });
@@ -1,10 +0,0 @@
1
- $(function() {
2
-
3
- $.ajaxSetup({
4
- 'beforeSend': function(xhr) {
5
- xhr.setRequestHeader("Accept", "text/javascript");
6
- }
7
- });
8
-
9
- });
10
-
@@ -1,6 +0,0 @@
1
- $(function() {
2
-
3
- $('#advance_search_form').trigger('submit');
4
-
5
- });
6
-
@@ -1,8 +0,0 @@
1
- $(function() {
2
-
3
- $('.drop_down_value_klass').change(function() {
4
- window.location = $(this).val();
5
- });
6
-
7
- });
8
-
@@ -1,58 +0,0 @@
1
- var AdminData = AdminData || {};
2
-
3
- /**
4
- * A general Utility
5
- * @namespace AdminData
6
- * @class jsUtil
7
- */
8
- AdminData.jsUtil = {
9
-
10
- // TODO since advance search was not working with util confirm , window.confirm is used directly
11
- // fix it later
12
- confirm: function(arg) {
13
- window.confirm(arg);
14
- },
15
-
16
- buildOptionsFromArray: function(array, element) {
17
- element.append($('<option />'));
18
- for (i in array) {
19
- $('<option />').text(array[i][0]).attr('value', array[i][1]).appendTo(element);
20
- }
21
- element.attr('disabled', false);
22
- },
23
-
24
- colorizeRows: function() {
25
- $('.colorize tr:odd').addClass('odd');
26
- $('.colorize tr:even').addClass('even');
27
- },
28
-
29
- /**
30
- * Returns the input date in string format.
31
- *
32
- * @param {date} input date
33
- * @return {string} The string value of input date
34
- */
35
- dateToString: function(date) {
36
- var month = (date.getMonth() + 1).toString();
37
- var day = date.getDate().toString();
38
- //days between 1 and 9 should have 0 before them
39
- if (day.length == 1) day = '0' + day;
40
- var months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'];
41
- return day + "-" + months[month - 1] + "-" + date.getFullYear();
42
- },
43
-
44
- /**
45
- * Generate a random number between 1 and 10000000
46
- *
47
- * @return {Integer} a random Integer
48
- *
49
- */
50
- randomNumber: function() {
51
- var maxVal = 100000000,
52
- minVal = 1;
53
- var randVal = minVal + (Math.random() * (maxVal - minVal));
54
- return Math.round(randVal);
55
- }
56
-
57
- };
58
-
@@ -1,6 +0,0 @@
1
- $(function() {
2
-
3
- $('#quick_search_input').focus();
4
-
5
- });
6
-
@@ -1,120 +0,0 @@
1
- module('act_on_result', {
2
- teardown: function() {
3
- $('#advance_search_delete_all').remove();
4
- $('#advance_search_destroy_all').remove();
5
- $('#results').remove();
6
- $('#advance_search_form').remove();
7
- },
8
- setup: function() {
9
- $(document.body).append($('<a />', {
10
- href: '#',
11
- id: 'advance_search_delete_all'
12
- }));
13
-
14
- $(document.body).append($('<a />', {
15
- href: '#',
16
- id: 'advance_search_destroy_all'
17
- }));
18
-
19
- $(document.body).append($('<div />', {
20
- id: 'results'
21
- }));
22
-
23
- $(document.body).append($('<div />', {
24
- id: 'advance_search_form'
25
- }));
26
- }
27
- });
28
-
29
- test('invoking success callback', function() {
30
- expect(1);
31
- AdminData.actOnResult.successCallback({
32
- success: 'hello world'
33
- });
34
- equals('hello world', $('#results').text(), '#results should have text hello world');
35
- });
36
-
37
- test('live clicking #advance_search_delete_all with cancel action', function() {
38
- expect(0);
39
- jack(function() {
40
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
41
- return false;
42
- });
43
- //TODO ensure that the value passed to action is delete
44
- jack.expect('AdminData.actOnResult.action').exactly('0 time');
45
- $('#advance_search_delete_all').trigger('click');
46
- });
47
- });
48
-
49
- test('live clicking #advance_search_delete_all', function() {
50
- expect(0);
51
- var args;
52
-
53
- jack(function() {
54
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
55
- return true;
56
- });
57
- jack.expect('AdminData.actOnResult.action').once().mock(function(action_type) {
58
- args = action_type;
59
- return {};
60
- });
61
- $('#advance_search_delete_all').trigger('click');
62
- });
63
- equals('delete', args, 'action_type should be delete');
64
-
65
- });
66
-
67
- test('live clicking #advance_search_destroy_all with cancel action', function() {
68
- expect(0);
69
- jack(function() {
70
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
71
- return false;
72
- });
73
- jack.expect('AdminData.actOnResult.action').exactly('0 time');
74
- $('#advance_search_destroy_all').trigger('click');
75
- });
76
- });
77
-
78
- test('live clicking #advance_search_destroy_all', function() {
79
- expect(0);
80
- var args;
81
-
82
- jack(function() {
83
- jack.expect('AdminData.jsUtil.confirm').once().mock(function() {
84
- return true;
85
- });
86
- jack.expect('AdminData.actOnResult.action').once().mock(function(action_type) {
87
- args = action_type;
88
- return {};
89
- });
90
- $('#advance_search_destroy_all').trigger('click');
91
- });
92
- equals('destroy', args, 'action_type should be destroy');
93
- });
94
-
95
- test('actOnResultAJAX', function() {
96
- expect(5);
97
- $('#advance_search_form').attr('action', 'http://localhost:3000');
98
- $('#advance_search_form').data('admin_data_form_array', [{
99
- name: 'foo',
100
- value: 'i_am_foo'
101
- }]);
102
-
103
- var ajaxArgs;
104
-
105
- jack(function() {
106
- jack.expect('$.ajax').once().mock(function(args) {
107
- ajaxArgs = args;
108
- });
109
- AdminData.actOnResult.action('delete');
110
- });
111
-
112
- equals('post', ajaxArgs.type, 'ajax arguments should have type as post');
113
- equals('json', ajaxArgs.dataType, 'ajax arguments should have json as dataType');
114
- equals('http://localhost:3000', ajaxArgs.url, 'ajax arguments should have valid url');
115
- var data = ajaxArgs.data;
116
- ok(data, 'ajax arguments should have value for key data');
117
- equals('foo=i_am_foo&admin_data_advance_search_action_type=delete', data, 'data should have parameterized value');
118
-
119
- });
120
-