ask 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -15,6 +15,8 @@ Add to your Gemfile:
15
15
  In your terminal run:
16
16
 
17
17
  bundle
18
+ rake ask_engine:install:migrations
19
+ rake db:migrate
18
20
 
19
21
  Usage
20
22
  -----
@@ -0,0 +1,54 @@
1
+ #= require jquery.handle-nesting
2
+
3
+ $(document).ready ->
4
+ handleChoiceNesting = (container) ->
5
+ $(container).find("ul.choices").handleNesting
6
+ nameMatch: /(.*\[)[0-9]+(\].*)/
7
+ nameReplace: "$1{NEW_ID}$2"
8
+ afterAdd: (added) ->
9
+ insertDeleteButtons added.parent(), ".choice"
10
+
11
+ updateChoiceVisibility = (select) ->
12
+ if select.val() == "ChooseOneQuestion" or select.val() == "ChecklistQuestion"
13
+ select.parents("dl").find("dd.choices:hidden").slideDown "fast"
14
+ else
15
+ select.parents("dl").find("dd.choices:visible").slideUp "fast"
16
+
17
+ bindTypeChange = (select) ->
18
+ select.change ->
19
+ updateChoiceVisibility $(this)
20
+
21
+ insertDeleteButtons = (container, selector) ->
22
+ container.find(selector).each ->
23
+ if $(this).children("button.remove").length == 0
24
+ $("<button type=\"button\" class=\"remove\">Remove</button>").click(->
25
+ $(this).parents(selector).fadeOut "fast", ->
26
+ $(this).remove()
27
+ container.find("button.remove:last").remove() if container.find(selector).length == 1
28
+
29
+ false
30
+ ).appendTo $(this)
31
+
32
+ makeSortable = ->
33
+ questions = $("form ul.ask.questions")
34
+ questions.sortable stop: (event, ui) ->
35
+ order = 1
36
+ questions.find(".position-wrapper").each ->
37
+ $(this).find("input").val order
38
+ order++
39
+
40
+ selects = $("dd.type > select")
41
+ bindTypeChange selects
42
+ selects.each ->
43
+ updateChoiceVisibility $(this)
44
+
45
+ makeSortable()
46
+ if jQuery.fn.handleNesting
47
+ $("form ul.ask.questions").handleNesting afterAdd: (added) ->
48
+ handleChoiceNesting added
49
+ insertDeleteButtons added.parent(), ".question"
50
+ bindTypeChange added.find("dd.type > select")
51
+ makeSortable()
52
+
53
+ $("form ul.ask.questions").children("li").each (i, li) ->
54
+ handleChoiceNesting li
@@ -9,11 +9,9 @@
9
9
  -else
10
10
  =a.hidden_field(:question_id, :value=>question.id)
11
11
  -if question.name != last_question.name
12
- %dt
12
+ %dt{:class => question.required?? 'required' : nil}
13
13
  =question_label(question, a)
14
14
  =question_instructions(question)
15
- -if question.required
16
- %strong{:style=>"color:red;"} *
17
15
  -case(question.type.to_sym)
18
16
 
19
17
  -when :TextQuestion
@@ -1,3 +1,3 @@
1
1
  module Ask
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -0,0 +1,73 @@
1
+ (($) ->
2
+ $.HandleNesting = (el, options) ->
3
+ base = this
4
+ base.$el = $(el)
5
+ base.el = el
6
+ base.items = []
7
+ base.blank = null
8
+ base.$el.data "HandleNesting", base
9
+ base.init = ->
10
+ base.options = $.extend({}, $.HandleNesting.defaultOptions, options)
11
+ base.items = base.$el.children("li")
12
+ base.blank = $(base.items[base.items.length - 1]).clone() if base.items.length
13
+ base.addButtons()
14
+
15
+ base.addButtons = ->
16
+ base.addAddButton()
17
+ base.items.each (i, item) ->
18
+ base.addRemoveButton item
19
+
20
+ base.addAddButton = ->
21
+ addButton = $("<button type=\"button\"/>").addClass("add").text("Add")
22
+ addButton.click ->
23
+ base.add()
24
+
25
+ base.$el.after addButton
26
+
27
+ base.addRemoveButton = (item) ->
28
+ destroys = $(item).find("input[name*=_destroy]")
29
+ destroys.each (i, destroy) ->
30
+ if $(item).find("button.remove").length == 0
31
+ removeButton = $("<button type=\"button\"/>").addClass("remove").text("Remove")
32
+ removeButton.click ->
33
+ base.remove this
34
+
35
+ $(item).append removeButton
36
+ $(destroy).hide()
37
+ $(item).find("label[for=" + $(destroy).attr("id") + "]").hide()
38
+
39
+ base.add = ->
40
+ newId = new Date().getTime()
41
+ match = base.options.nameMatch
42
+ replace = base.options.nameReplace.replace(/{NEW_ID}/g, newId)
43
+ base.options.beforeAdd() if base.options.beforeAdd?
44
+ added = base.blank.clone().hide()
45
+ added.find("*").each (i, el) ->
46
+ $(el).attr "id", null
47
+
48
+ added.find("input, select, textarea").each (i, el) ->
49
+ $(el).val ""
50
+ el.name = el.name.replace(match, replace)
51
+
52
+ base.$el.append added
53
+ base.options.afterAdd added if base.options.afterAdd?
54
+ added.fadeIn "fast"
55
+
56
+ base.remove = (item) ->
57
+ li = $(item).closest("li")
58
+ li.find("input[name*=_destroy]").val 1
59
+ li.find("input:checkbox[name*=_destroy]").attr "checked", "checked"
60
+ li.fadeOut "fast"
61
+
62
+ base.init()
63
+
64
+ $.HandleNesting.defaultOptions =
65
+ nameMatch: /\[[0-9]+\]/
66
+ nameReplace: "[{NEW_ID}]"
67
+ beforeAdd: null
68
+ afterAdd: null
69
+
70
+ $.fn.handleNesting = (options) ->
71
+ @each ->
72
+ new $.HandleNesting(this, options)
73
+ ) jQuery
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ask
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-10-07 00:00:00.000000000 Z
12
+ date: 2011-10-08 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
16
- requirement: &81488530 !ruby/object:Gem::Requirement
16
+ requirement: &83997780 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 3.1.0
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *81488530
24
+ version_requirements: *83997780
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: haml
27
- requirement: &81838450 !ruby/object:Gem::Requirement
27
+ requirement: &83996340 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 3.0.0
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *81838450
35
+ version_requirements: *83996340
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: acts_as_list
38
- requirement: &81838020 !ruby/object:Gem::Requirement
38
+ requirement: &83994780 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 0.1.2
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *81838020
46
+ version_requirements: *83994780
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: rails_autolink
49
- requirement: &81836800 !ruby/object:Gem::Requirement
49
+ requirement: &84345040 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ! '>='
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 1.0.2
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *81836800
57
+ version_requirements: *84345040
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: jquery-rails
60
- requirement: &81835740 !ruby/object:Gem::Requirement
60
+ requirement: &84344500 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - ! '>='
@@ -65,10 +65,10 @@ dependencies:
65
65
  version: '0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *81835740
68
+ version_requirements: *84344500
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: sqlite3
71
- requirement: &81834720 !ruby/object:Gem::Requirement
71
+ requirement: &84342650 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ! '>='
@@ -76,7 +76,7 @@ dependencies:
76
76
  version: '0'
77
77
  type: :development
78
78
  prerelease: false
79
- version_requirements: *81834720
79
+ version_requirements: *84342650
80
80
  description: Allow your site's maintainers to easily create forms.
81
81
  email:
82
82
  - adam@obledesign.com
@@ -84,13 +84,10 @@ executables: []
84
84
  extensions: []
85
85
  extra_rdoc_files: []
86
86
  files:
87
- - app/assets/javascripts/ask/forms.js
88
- - app/assets/javascripts/ask.js
87
+ - app/assets/javascripts/ask.js.coffee
89
88
  - app/assets/images/add.png
90
89
  - app/assets/images/delete.png
91
- - app/assets/stylesheets/ask/submissions.css.sass
92
- - app/assets/stylesheets/ask/forms.css.sass
93
- - app/assets/stylesheets/ask.css
90
+ - app/assets/stylesheets/ask.css.sass
94
91
  - app/models/choose_one_question.rb
95
92
  - app/models/question.rb
96
93
  - app/models/choice.rb
@@ -111,7 +108,7 @@ files:
111
108
  - lib/ask/version.rb
112
109
  - lib/ask/engine.rb
113
110
  - lib/ask/acts_as_asker.rb
114
- - lib/assets/javascripts/jquery.handle-nesting.js
111
+ - lib/assets/javascripts/jquery.handle-nesting.js.coffee
115
112
  - lib/ask.rb
116
113
  - MIT-LICENSE
117
114
  - Rakefile
@@ -1,2 +0,0 @@
1
- //= require jquery.handle-nesting
2
- //= require ask/forms
@@ -1,100 +0,0 @@
1
- $(document).ready(function()
2
- {
3
- var handleChoiceNesting = function(container)
4
- {
5
- $(container).find('ul.choices').handleNesting({
6
- nameMatch: /(.*\[)[0-9]+(\].*)/,
7
- nameReplace: '$1{NEW_ID}$2',
8
- afterAdd: function(added)
9
- {
10
- insertDeleteButtons(added.parent(), ".choice");
11
- }
12
- });
13
- }
14
-
15
- var updateChoiceVisibility = function(select)
16
- {
17
- if (select.val() == "ChooseOneQuestion" || select.val() == "ChecklistQuestion")
18
- select.parents("dl").find("dd.choices:hidden").slideDown("fast");
19
- else
20
- select.parents("dl").find("dd.choices:visible").slideUp("fast");
21
- }
22
-
23
- var bindTypeChange = function(select)
24
- {
25
- select.change(function()
26
- {
27
- updateChoiceVisibility($(this));
28
- });
29
- }
30
-
31
- var insertDeleteButtons = function(container, selector)
32
- {
33
- container.find(selector).each(function()
34
- {
35
- // Add a delete button if there isn't one already
36
- if ($(this).children("button.remove").length == 0)
37
- {
38
- $("<button type=\"button\" class=\"remove\">Remove</button>").click(function()
39
- {
40
- $(this).parents(selector).fadeOut("fast", function()
41
- {
42
- $(this).remove();
43
- // If there's only one option left, remove the delete button
44
- if (container.find(selector).length == 1)
45
- container.find("button.remove:last").remove();
46
- });
47
-
48
- return false;
49
- }).appendTo($(this));
50
- }
51
- });
52
- }
53
-
54
- var makeSortable = function()
55
- {
56
- var questions = $("form ul.ask.questions");
57
- questions.sortable(
58
- {
59
- stop: function(event, ui)
60
- {
61
- var order = 1;
62
- questions.find(".position-wrapper").each(function()
63
- {
64
- $(this).find("input").val(order);
65
- order ++;
66
- });
67
- }
68
- });
69
- }
70
-
71
- var selects = $("dd.type > select");
72
-
73
- bindTypeChange(selects);
74
-
75
- selects.each(function()
76
- {
77
- updateChoiceVisibility($(this));
78
- });
79
-
80
- makeSortable();
81
-
82
- if(jQuery.fn.handleNesting)
83
- {
84
- $('form ul.ask.questions').handleNesting({
85
- afterAdd: function(added)
86
- {
87
- handleChoiceNesting(added);
88
- insertDeleteButtons(added.parent(), ".question");
89
- bindTypeChange(added.find("dd.type > select"));
90
- makeSortable();
91
- }
92
- });
93
- }
94
-
95
- $('form ul.ask.questions').children('li').each(function(i,li)
96
- {
97
- handleChoiceNesting(li);
98
- });
99
-
100
- });
@@ -1,4 +0,0 @@
1
- /*
2
- *= require ask/forms
3
- *= require ask/submissions
4
- */
@@ -1,60 +0,0 @@
1
- #page
2
-
3
- &.submissions.show
4
- dd
5
- padding-left: 10px
6
-
7
- &.application_forms, &.reference_forms, &.interview_forms
8
- &.show
9
- #wrapperContent
10
- #content
11
- background-image: url(../images/preview.png)
12
- background-position: top right
13
- background-repeat: no-repeat
14
-
15
- #content
16
-
17
- h3.section
18
- margin-top: 40px
19
- border-bottom: solid 1px #ccc
20
-
21
- .instructions
22
- display: block
23
- font-style: italic
24
- font-weight: normal
25
-
26
- dt
27
-
28
- .instructions
29
- margin: 5px 0
30
- color: #333
31
- font-size: 10pt
32
-
33
-
34
- input[type=text], textarea
35
- width: 400px
36
-
37
- textarea
38
- height: 100px
39
-
40
- h2
41
- border-bottom: solid 1px #ccc
42
-
43
- dt, dd
44
- font-size: 11pt
45
-
46
- dt
47
- padding-top: 10px
48
- letter-spacing: -.05em
49
-
50
- #contentAside
51
- a
52
- &.csv, &.table
53
- padding-left: 24px
54
- font-size: 10pt
55
- font-weight: bold
56
- text-decoration: none
57
- &.csv
58
- background: url(../images/csv.png) 5px center no-repeat
59
- &.table
60
- background: url(../images/table.png) 5px center no-repeat
@@ -1,113 +0,0 @@
1
- (function($){
2
- $.HandleNesting = function(el, options){
3
- // To avoid scope issues, use 'base' instead of 'this'
4
- // to reference this class from internal events and functions.
5
- var base = this;
6
-
7
- // Access to jQuery and DOM versions of element
8
- base.$el = $(el);
9
- base.el = el;
10
- base.items = [];
11
- base.blank = null;
12
-
13
- // Add a reverse reference to the DOM object
14
- base.$el.data("HandleNesting", base);
15
-
16
- base.init = function(){
17
-
18
- base.options = $.extend({},$.HandleNesting.defaultOptions, options);
19
-
20
- base.items = base.$el.children('li');
21
- if(base.items.length) {
22
- base.blank = $(base.items[base.items.length-1]).clone();
23
- }
24
-
25
- base.addButtons();
26
-
27
- };
28
-
29
- base.addButtons = function() {
30
- base.addAddButton();
31
- base.items.each(function(i,item) { base.addRemoveButton(item); })
32
- };
33
-
34
- base.addAddButton = function() {
35
- var addButton = $('<button type="button"/>').addClass('add').text('Add');
36
- addButton.click(function() { base.add(); });
37
- base.$el.after(addButton);
38
- }
39
-
40
- base.addRemoveButton = function(item) {
41
-
42
- var destroys = $(item).find('input[name*=_destroy]')
43
-
44
- destroys.each(function(i,destroy) {
45
-
46
- if($(item).find('button.remove').length == 0) {
47
- var removeButton = $('<button type="button"/>').addClass('remove').text('Remove');
48
- removeButton.click(function() { base.remove(this); });
49
- $(item).append(removeButton);
50
- }
51
-
52
- $(destroy).hide();
53
- $(item).find('label[for='+$(destroy).attr('id')+']').hide();
54
-
55
- });
56
- }
57
-
58
- base.add = function() {
59
-
60
- var newId = new Date().getTime();
61
- var match = base.options.nameMatch;
62
- var replace = base.options.nameReplace.replace(/{NEW_ID}/g, newId);
63
-
64
- if(base.options.beforeAdd != null) {
65
- base.options.beforeAdd();
66
- }
67
-
68
- var added = base.blank.clone().hide();
69
-
70
- added.find('*').each(function(i, el) {
71
- $(el).attr('id', null);
72
- });
73
-
74
- added.find('input, select, textarea').each(function(i, el) {
75
- $(el).val('');
76
- el.name = el.name.replace(match, replace);
77
- });
78
-
79
- base.$el.append(added);
80
-
81
- if(base.options.afterAdd != null) {
82
- base.options.afterAdd(added);
83
- }
84
-
85
- added.fadeIn("fast");
86
-
87
- }
88
-
89
- base.remove = function(item) {
90
- var li = $(item).closest('li');
91
- li.find('input[name*=_destroy]').val(1);
92
- li.find('input:checkbox[name*=_destroy]').attr('checked', 'checked');
93
- li.fadeOut("fast");//, function() { $(this).remove() });
94
- }
95
-
96
- // Run initializer
97
- base.init();
98
- };
99
-
100
- $.HandleNesting.defaultOptions = {
101
- nameMatch: /\[[0-9]+\]/,
102
- nameReplace: '[{NEW_ID}]',
103
- beforeAdd: null,
104
- afterAdd: null
105
- };
106
-
107
- $.fn.handleNesting = function(options){
108
- return this.each(function(){
109
- (new $.HandleNesting(this, options));
110
- });
111
- };
112
-
113
- })(jQuery);