ask 0.1.0 → 0.1.1

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.
@@ -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);