formnestic 1.0.2 → 1.0.3

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.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: ebe16f838c5cc06d26df3234123b7528acf0ca10
4
+ data.tar.gz: c27a6423ca05de992ba11853d2f0443504bb3894
5
+ SHA512:
6
+ metadata.gz: 185ff7ebc0baebb71cef55379a41814b41542b4f920b66086fbfad6f3f0ebf7100915301a4f1919908257004cfe53208b23945ecbf60038e260219981ab85a82
7
+ data.tar.gz: 936c96890416217c9ae6aac5c9834438bf1827fe36c88a15e4315d41ddc12168edb9b8109c57ecfc394cbce90aa5e0f37ccdd5118c3689f9629d8a675dd79fd4
data/README.markdown CHANGED
@@ -6,6 +6,8 @@
6
6
 
7
7
  An extension of famous [Formtastic Form Builder](https://github.com/justinfrench/formtastic) to make building nested and association form with nested model addable and removable ability extremely easy and simple.
8
8
 
9
+ Checkout the the [Demo](http://formnestic-demo.herokuapp.com)
10
+
9
11
  ### Compatibility
10
12
 
11
13
  - Formnestic gem requires ``formtastic`` gem version ``>= 2.2.1``
@@ -32,7 +32,7 @@ var Formnestic = {
32
32
  var maxNumberOfEntries = parseInt(nestedModelContainer.attr("max_entry"), 10);
33
33
 
34
34
  if (minNumberOfEntries !== -1 && numberOfShowingEntries <= minNumberOfEntries) {
35
- return alert(nestedModelContainer.attr("min_entry_alert_message"));
35
+ return window.alert(nestedModelContainer.attr("min_entry_alert_message"));
36
36
  }//end if
37
37
 
38
38
  var entryContainer = deleteEntryLinkDom.parents("fieldset.inputs:first");
@@ -46,7 +46,7 @@ var Formnestic = {
46
46
  addRowLinkContainer.removeClass("formnestic-hidden");
47
47
  }//end else
48
48
 
49
- entryContainer.fadeOut(function() {});
49
+ entryContainer.fadeOut();
50
50
  },
51
51
 
52
52
  removeATableEntry: function(deleteEntryLinkDom) {
@@ -57,7 +57,7 @@ var Formnestic = {
57
57
  var minNumberOfEntries = parseInt(table.attr("min_entry"), 10);
58
58
  var maxNumberOfEntries = parseInt(table.attr("max_entry"), 10);
59
59
  if (minNumberOfEntries !== -1 && numberOfShowingEntries <= minNumberOfEntries) {
60
- return alert(table.attr("min_entry_alert_message"));
60
+ return window.alert(table.attr("min_entry_alert_message"));
61
61
  }//end if
62
62
 
63
63
  var trContainer = deleteEntryLinkDom.parents("tr:first");
@@ -69,7 +69,7 @@ var Formnestic = {
69
69
  } else {
70
70
  addRowLink.removeClass("formnestic-hidden");
71
71
  }//end else
72
- trContainer.fadeOut(function() {});
72
+ trContainer.fadeOut();
73
73
  },
74
74
 
75
75
  addOddAndEventClassForListContainer: function(listContainer) {
@@ -91,7 +91,7 @@ var Formnestic = {
91
91
  $(table).find("tbody:first").find("tr").each(function() {
92
92
  var trDom = $(this);
93
93
  if(!trDom.hasClass('formnestic-deleted-row') && !trDom.hasClass("formnestic-table-no-border")) {
94
- trDom.removeClass("formnestic-odd-row formnestic-even-row").addClass(counter % 2 === 0 ? "formnestic-even-row" : "formnestic-odd-row")
94
+ trDom.removeClass("formnestic-odd-row formnestic-even-row").addClass(counter % 2 === 0 ? "formnestic-even-row" : "formnestic-odd-row");
95
95
  counter = counter + 1;
96
96
  }
97
97
  });
@@ -100,14 +100,12 @@ var Formnestic = {
100
100
  },
101
101
 
102
102
  addNewListEntry: function(linkDom, associationName, content) {
103
- var newId = new Date().getTime();
104
- var regexp = new RegExp("new_" + associationName, "g");
105
103
  var linkDomContainer = $(linkDom).parent();
106
104
  var listContainer = linkDomContainer.parents('div.formnestic-nested-model-container:first').find("div.formnestic-list-entries-container");
107
105
  var nestedModelContainer = listContainer.parent();
108
106
  var maxNumberOfEntries = parseInt(nestedModelContainer.attr('max_entry'), 10);
109
107
 
110
- var entryContainer = $(content.replace(regexp, newId)).appendTo(listContainer);
108
+ var entryContainer = $(this.formatNewAppendedContent(content, associationName)).appendTo(listContainer);
111
109
  var counter = this.addOddAndEventClassForListContainer(listContainer);
112
110
  if (maxNumberOfEntries !== -1 && counter >= maxNumberOfEntries) {
113
111
  linkDomContainer.addClass("formnestic-hidden");
@@ -119,12 +117,10 @@ var Formnestic = {
119
117
  },
120
118
 
121
119
  addNewTableEntry: function(linkDom, associationName, content) {
122
- var newId = new Date().getTime();
123
- var regexp = new RegExp("new_" + associationName, "g");
124
120
  var linkDomjQuery = $(linkDom);
125
121
  var table = linkDomjQuery.parents('table:first');
126
122
 
127
- var entryContainer = $(content.replace(regexp, newId)).insertBefore(linkDomjQuery.parents("tr:first"));
123
+ var entryContainer = $(this.formatNewAppendedContent(content, associationName)).insertBefore(linkDomjQuery.parents("tr:first"));
128
124
 
129
125
  var counter = this.addOddAndEvenClassForTable(table);
130
126
  var maxNumberOfEntries = parseInt(table.attr('max_entry'), 10);
@@ -135,5 +131,11 @@ var Formnestic = {
135
131
  }//end else
136
132
 
137
133
  entryContainer.css({display: 'none'}).fadeIn();
134
+ },
135
+
136
+ formatNewAppendedContent: function(content, associationName) {
137
+ var newId = new Date().getTime();
138
+ var regexp = new RegExp("new_" + associationName, "g");
139
+ return content.replace(regexp, newId);
138
140
  }
139
141
  };
data/formnestic.gemspec CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = "formnestic"
8
- s.version = "1.0.2"
8
+ s.version = "1.0.3"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["James"]
@@ -1,31 +1,29 @@
1
1
  module Formnestic
2
2
  module FormBuilder
3
3
  module BaseBuilder
4
-
5
4
  def formnestic_min_entry_alert_message(record_or_name_or_array, min_entry)
6
- entity_name = I18n.t("activerecord.models.#{record_or_name_or_array.to_s.singularize}", default: record_or_name_or_array.to_s.gsub("_", " ").singularize.singularize)
5
+ entity_name = I18n.t("activerecord.models.#{record_or_name_or_array.to_s.singularize}", default: record_or_name_or_array.to_s.tr('_', ' ').singularize.singularize)
7
6
  min_entry != -1 ? (options[:min_entry_alert_message] ||
8
- I18n.t('formnestic.labels.there_must_be_at_least_a_number_of_entries', {
9
- count: min_entry,
10
- entity_singular: entity_name,
11
- entity_plural: entity_name.pluralize})) : ''
7
+ I18n.t('formnestic.labels.there_must_be_at_least_a_number_of_entries', count: min_entry,
8
+ entity_singular: entity_name,
9
+ entity_plural: entity_name.pluralize)) : ''
12
10
  end
13
-
11
+
14
12
  def formnestic_add_rows_counter_related_attributes
15
13
  instance_eval do
16
- instance_variable_set("@rows_counter", 0)
14
+ instance_variable_set('@rows_counter', 0)
17
15
  def rows_counter
18
- return @rows_counter
16
+ @rows_counter
19
17
  end
20
-
18
+
21
19
  def increase_rows_counter
22
20
  @rows_counter += 1
23
21
  end
24
- end
22
+ end
25
23
  end
26
-
24
+
27
25
  def formnestic_link_to_add_fields_with_content(record_or_name_or_array, *args, &block)
28
- new_object = self.object.class.reflect_on_association(record_or_name_or_array).klass.new
26
+ new_object = object.class.reflect_on_association(record_or_name_or_array).klass.new
29
27
  options = args.dup.extract_options!
30
28
  options[:max_entry] ||= -1
31
29
  duplicate_args = args.dup
@@ -34,22 +32,21 @@ module Formnestic
34
32
  rows_counter = self.rows_counter
35
33
  new_record_form_options[:child_index] = "new_#{record_or_name_or_array}"
36
34
  new_record_form_content = formtastic_semantic_fields_for(record_or_name_or_array, *(duplicate_args << new_record_form_options), &block)
37
- link_title = options[:new_record_link_label] || I18n.t("formnestic.labels.add_new_entry")
35
+ link_title = options[:new_record_link_label] || I18n.t('formnestic.labels.add_new_entry')
38
36
  javascript_fn_to_call = js_call_for_nested_model_display_type(options[:display_type])
39
-
37
+
40
38
  template.link_to(link_title, '#', onclick:
41
39
  "Formnestic.#{javascript_fn_to_call}(this, \"#{record_or_name_or_array}\", \"#{escape_javascript(new_record_form_content)}\"); return false;", \
42
- "class" => ["formnestic-add-row-field-link", options[:new_record_link_class], (options[:max_entry] != -1 and rows_counter >= options[:max_entry]) ? "formnestic-hidden" : nil].compact.join(" "))
43
-
40
+ 'class' => ['formnestic-add-row-field-link', options[:new_record_link_class], (options[:max_entry] != -1) && (rows_counter >= options[:max_entry]) ? 'formnestic-hidden' : nil].compact.join(' '))
44
41
  end
45
-
42
+
46
43
  def js_call_for_nested_model_display_type(display_type)
47
44
  if display_type == 'table'
48
- return 'addNewTableEntry'
45
+ 'addNewTableEntry'
49
46
  else
50
- return 'addNewListEntry'
47
+ 'addNewListEntry'
51
48
  end
52
49
  end
53
50
  end
54
51
  end
55
- end
52
+ end
@@ -1,94 +1,194 @@
1
+ # rubocop:disable MethodLength, Documentation, ModuleLength, AbcSize
1
2
  module Formnestic
2
3
  module FormBuilder
3
4
  module TableFormBuilder
4
5
  include Formnestic::FormBuilder::BaseBuilder
5
-
6
- def formnestic_table_semantic_fields_for(record_or_name_or_array, *args, &block)
7
- options = args.dup.extract_options!
6
+ def formnestic_table_semantic_fields_for(
7
+ record_or_name_or_array, *args, &block
8
+ )
9
+ options = args.dup.extract_options!
8
10
  formnestic_add_table_headers_form_attributes
9
11
  formnestic_add_rows_counter_related_attributes
10
-
12
+
11
13
  child_form_builder = nil
12
- contents = [formtastic_semantic_fields_for(record_or_name_or_array, *args, &lambda {|nested_form_builder|
13
- child_form_builder = nested_form_builder
14
- block.call(nested_form_builder)
15
- })]
16
-
17
- contents.push(formnestic_add_new_record_button_row_for_table(record_or_name_or_array, *args, &block)) if options[:row_addable]
18
- options[:class] = ["formnestic-table-inputs formnestic-nested-model", options[:class]].compact.join(" ")
14
+ contents = [formtastic_semantic_fields_for(
15
+ record_or_name_or_array,
16
+ *args,
17
+ &lambda { |nested_form_builder|
18
+ child_form_builder = nested_form_builder
19
+ yield(nested_form_builder)
20
+ }
21
+ )]
22
+
23
+ if options[:row_addable]
24
+ contents.push(
25
+ formnestic_add_new_record_button_row_for_table(
26
+ record_or_name_or_array, *args, &block
27
+ )
28
+ )
29
+ end
30
+ options[:class] = [
31
+ 'formnestic-table-inputs formnestic-nested-model',
32
+ options[:class]
33
+ ].compact.join(' ')
19
34
  options[:min_entry] ||= -1
20
- options[:max_entry] ||= -1
21
- options[:min_entry_alert_message] = formnestic_min_entry_alert_message(record_or_name_or_array, options[:min_entry])
22
-
35
+ options[:max_entry] ||= -1
36
+ options[:min_entry_alert_message] =
37
+ formnestic_min_entry_alert_message(
38
+ record_or_name_or_array, options[:min_entry]
39
+ )
40
+
23
41
  ### Finally, wrap everything inside a table tag
24
42
  template.content_tag(:table, [
25
- formnestic_table_header(options, record_or_name_or_array, child_form_builder), # table header
26
- template.content_tag(:tbody, Formtastic::Util.html_safe(contents.join)) # table body
27
- ].join.html_safe,
28
- options.except(:builder, :parent, :name, :parent_builder, :display_type, :row_removable, :new_record_link_label, :table_headers)
29
- )
43
+ formnestic_table_header(
44
+ options,
45
+ record_or_name_or_array,
46
+ child_form_builder
47
+ ), # table header
48
+ template.content_tag(
49
+ :tbody,
50
+ Formtastic::Util.html_safe(contents.join)
51
+ ) # table body
52
+ ].join.html_safe, options.except(
53
+ :builder,
54
+ :parent,
55
+ :name,
56
+ :parent_builder,
57
+ :display_type,
58
+ :row_removable,
59
+ :new_record_link_label,
60
+ :table_headers
61
+ ))
30
62
  end
31
-
63
+
32
64
  def formnestic_add_table_headers_form_attributes
33
65
  instance_eval do
34
- instance_variable_set("@table_headers", [])
66
+ instance_variable_set('@table_headers', [])
35
67
  def table_headers
36
- return @table_headers
68
+ @table_headers
37
69
  end
38
-
70
+
39
71
  def add_table_header(column_name, class_name, label_text)
40
- if @table_headers.detect{|x| x[:attr] == column_name}.nil?
41
- @table_headers.push({attr: column_name, class: class_name.to_s.tableize.gsub("formtastic/inputs/", "").gsub("_", "-").gsub("-inputs", ""), label_text: label_text})
42
- end
72
+ return if @table_headers.detect do |x|
73
+ x[:attr] == column_name
74
+ end.present?
75
+ @table_headers.push(
76
+ attr: column_name,
77
+ class:
78
+ class_name
79
+ .to_s
80
+ .tableize
81
+ .gsub('formtastic/inputs/', '')
82
+ .tr('_', '-')
83
+ .gsub('-inputs', ''),
84
+ label_text: label_text
85
+ )
43
86
  end
44
87
  end
45
88
  end
46
-
47
- def formnestic_add_new_record_button_row_for_table(record_or_name_or_array, *args, &block)
48
- template.content_tag(:tr, template.content_tag(:td, formnestic_link_to_add_fields_with_content(record_or_name_or_array, *args, &block), {colspan: "100%"}), class: "formnestic-table-no-border")
89
+
90
+ def formnestic_add_new_record_button_row_for_table(
91
+ record_or_name_or_array,
92
+ *args,
93
+ &block
94
+ )
95
+ template.content_tag(
96
+ :tr,
97
+ template.content_tag(
98
+ :td,
99
+ formnestic_link_to_add_fields_with_content(
100
+ record_or_name_or_array, *args, &block
101
+ ), colspan: '100%'
102
+ ), class: 'formnestic-table-no-border'
103
+ )
49
104
  end
50
-
51
- def formnestic_table_header(header_options, record_or_name_or_array, child_form_builder)
52
- association_name = record_or_name_or_array.is_a?(Array) ? record_or_name_or_array[0] : record_or_name_or_array
105
+
106
+ def formnestic_table_header(
107
+ header_options, record_or_name_or_array, child_form_builder
108
+ )
53
109
  thead_contents = if header_options[:table_headers]
54
- formnestic_thead_contents_from_arguments(header_options[:table_headers], record_or_name_or_array, child_form_builder)
55
- else
56
- formnestic_thead_contents_from_inputs(header_options[:row_removable])
57
- end
58
- return template.content_tag(:thead, thead_contents.join.html_safe)
110
+ formnestic_thead_contents_from_arguments(
111
+ header_options[:table_headers],
112
+ record_or_name_or_array, child_form_builder
113
+ )
114
+ else
115
+ formnestic_thead_contents_from_inputs(
116
+ header_options[:row_removable]
117
+ )
118
+ end
119
+ template.content_tag(:thead, thead_contents.join.html_safe)
59
120
  end
60
-
121
+
61
122
  def formnestic_thead_contents_from_inputs(row_removable)
62
123
  tr_content_arr = []
63
124
  table_headers.each do |header|
64
- tr_content_arr.push(template.content_tag(:th, header[:label_text], class: header[:class]))
125
+ tr_content_arr.push(
126
+ template.content_tag(
127
+ :th,
128
+ header[:label_text],
129
+ class: header[:class]
130
+ )
131
+ )
132
+ end
133
+ if row_removable
134
+ tr_content_arr.push(
135
+ template.content_tag(
136
+ :th, '', class: 'formnestic-minus-thead'
137
+ )
138
+ )
65
139
  end
66
- tr_content_arr.push(template.content_tag(:th, "", class: "formnestic-minus-thead")) if row_removable
67
140
  [template.content_tag(:tr, tr_content_arr.join.html_safe)]
68
141
  end
69
-
70
- def formnestic_thead_contents_from_arguments(theads, record_or_name_or_array, child_form_builder)
142
+
143
+ def formnestic_thead_contents_from_arguments(
144
+ theads,
145
+ record_or_name_or_array,
146
+ child_form_builder
147
+ )
71
148
  thead_contents = []
72
149
  theads.each do |el_arr|
73
- tr_content_arr = []
74
- el_arr.each_with_index do |el, index|
75
- tr_content_arr.push(template.content_tag(:th, formnestic_table_thead_th_content(record_or_name_or_array, el, index + 1, child_form_builder), el[:wrapper_html] || {}))
76
- end
77
- thead_contents.push(template.content_tag(:tr, tr_content_arr.join.html_safe))
78
- end
150
+ tr_content_arr = []
151
+ el_arr.each_with_index do |el, index|
152
+ tr_content_arr
153
+ .push(
154
+ template.content_tag(
155
+ :th,
156
+ formnestic_table_thead_th_content(
157
+ record_or_name_or_array, el, index + 1, child_form_builder
158
+ ), el[:wrapper_html] || {}
159
+ )
160
+ )
161
+ end
162
+ thead_contents.push(
163
+ template.content_tag(:tr, tr_content_arr.join.html_safe)
164
+ )
165
+ end
79
166
  thead_contents
80
167
  end
81
-
82
- def formnestic_table_thead_th_content(record_or_name_or_array, table_header_element_opts, position, child_form_builder)
168
+
169
+ def formnestic_table_thead_th_content(
170
+ record_or_name_or_array,
171
+ table_header_element_opts,
172
+ position,
173
+ child_form_builder
174
+ )
83
175
  if table_header_element_opts[:attr].present?
84
- input_base = Formtastic::Inputs::StringInput.new(child_form_builder, "", record_or_name_or_array, child_form_builder.object, table_header_element_opts[:attr], {})
85
- return input_base.label_text
176
+ input_base =
177
+ Formtastic::Inputs::StringInput.new(
178
+ child_form_builder,
179
+ '',
180
+ record_or_name_or_array,
181
+ child_form_builder.object,
182
+ table_header_element_opts[:attr],
183
+ {}
184
+ )
185
+ input_base.label_text
86
186
  elsif table_header_element_opts[:label].present?
87
- return table_header_element_opts[:label]
187
+ table_header_element_opts[:label]
88
188
  else
89
- return "Column #{position}"
189
+ "Column #{position}"
90
190
  end
91
191
  end
92
- end
192
+ end
93
193
  end
94
- end
194
+ end
@@ -1,13 +1,12 @@
1
1
  module Formnestic
2
- module FormBuilder
2
+ module FormBuilder
3
3
  include ActionView::Helpers::JavaScriptHelper
4
-
4
+
5
5
  autoload :BaseBuilder, File.join(File.dirname(__FILE__), 'form_builder', 'base_builder')
6
6
  autoload :TableFormBuilder, File.join(File.dirname(__FILE__), 'form_builder', 'table_form_builder')
7
7
  autoload :ListFormBuilder, File.join(File.dirname(__FILE__), 'form_builder', 'list_form_builder')
8
-
8
+
9
9
  include Formnestic::FormBuilder::TableFormBuilder
10
10
  include Formnestic::FormBuilder::ListFormBuilder
11
-
12
11
  end
13
- end
12
+ end
@@ -2,81 +2,87 @@ module Formnestic
2
2
  module Helpers
3
3
  module InputsHelper
4
4
  def inputs(*args, &block)
5
- if options[:display_type] == 'table'
6
- formnestic_table_row_inputs(*args, &block)
7
- elsif options[:row_removable] or options[:row_addable]
5
+ if options[:display_type] == 'table'
6
+ formnestic_table_row_inputs(*args, &block)
7
+ elsif options[:row_removable] || options[:row_addable]
8
8
  formnestic_list_row_inputs(*args, &block)
9
9
  else
10
10
  formtastic_inputs(*args, &block)
11
- end
11
+ end
12
12
  end
13
-
13
+
14
14
  # for listing form
15
15
  def formnestic_list_row_inputs(*args, &block)
16
- html_options = args.extract_options!
17
- html_options[:name] = field_set_title_from_args(*args)
18
- html_options[:class] = [html_options[:class] || "inputs", "formnestic-li-fieldset", formnestic_row_class_based_on_position(options[:parent_builder].rows_counter)].join(" ")
19
- self.options[:parent_builder].increase_rows_counter
20
-
21
- rows_counter = template.content_tag(:span, self.options[:parent_builder].rows_counter, class: "formnestic-li-fieldset-for-order")
22
- content_div_content = [formnestic_legend_for_list_form, "&nbsp;#".html_safe, rows_counter].join.html_safe
23
- title_div = template.content_tag(:div, content_div_content, class: "formnestic-li-fieldset-legend")
16
+ html_options = formnestic_prepare_html_options_for_wrapper(:list, *args)
17
+ rows_counter = template.content_tag(:span, options[:parent_builder].rows_counter, class: 'formnestic-li-fieldset-for-order')
18
+ content_div_content = [formnestic_legend_for_list_form, '&nbsp;#'.html_safe, rows_counter].join.html_safe
19
+ title_div = template.content_tag(:div, content_div_content, class: 'formnestic-li-fieldset-legend')
24
20
  template.content_tag(:fieldset, [title_div, (options[:row_removable] ? formnestic_row_removing_content_tag(:list) : ''), template.capture(&block)].join.html_safe, html_options)
25
21
  end
26
-
22
+
27
23
  # For table form
28
24
  def formnestic_table_row_inputs(*args, &block)
29
- html_options = args.extract_options!
30
- html_options[:name] = field_set_title_from_args(*args)
31
- html_options[:class] = [html_options[:class] || "inputs", "formnestic-tr-fieldset", formnestic_row_class_based_on_position(options[:parent_builder].rows_counter)].join(" ")
32
-
33
- self.options[:parent_builder].increase_rows_counter
25
+ html_options = formnestic_prepare_html_options_for_wrapper(:table, *args)
34
26
  template.content_tag(:tr, [template.capture(&block), (options[:row_removable] ?
35
27
  formnestic_row_removing_content_tag(:table) : '')].join.html_safe, html_options)
36
28
  end
37
-
29
+
38
30
  def formnestic_legend_for_list_form
39
- record_name = self.object.class.to_s.underscore.gsub("_", " ").singularize.downcase
40
- entity_name = I18n.t("activerecord.models.#{self.object.class.to_s.underscore.downcase}", default: record_name)
41
- template.content_tag(:span, record_name.titleize, class: "formnestic-li-fieldset-for")
31
+ record_name = object.class.to_s.underscore.tr('_', ' ').singularize.downcase
32
+ entity_name = I18n.t("activerecord.models.#{object.class.to_s.underscore.downcase}", default: record_name)
33
+ template.content_tag(:span, record_name.titleize, class: 'formnestic-li-fieldset-for')
42
34
  end
43
-
44
- def formnestic_row_removing_content_tag(form_type)
35
+
36
+ def formnestic_row_removing_content_tag(form_type)
45
37
  contents = []
46
- contents.push(self.hidden_field(:_destroy, class: "formnestic-destroy-input", value: false))
47
- contents.push(template.content_tag(:div, '', title: I18n.t("formnestic.labels.remove_this_entry"), class: "#{formnestic_row_removing_cell_div_class(form_type)} icon-cancel-circled", onclick: formnestic_row_removing_cell_js_call(form_type)))
38
+ contents.push(hidden_field(:_destroy, class: 'formnestic-destroy-input', value: false))
39
+ contents.push(template.content_tag(:div, '', title: I18n.t('formnestic.labels.remove_this_entry'), class: "#{formnestic_row_removing_cell_div_class(form_type)} icon-cancel-circled", onclick: formnestic_row_removing_cell_js_call(form_type)))
48
40
  template.content_tag(form_type == :table ? :td : :div, contents.join.html_safe, class: formnestic_row_removing_cell_container_div_class(form_type))
49
41
  end
50
-
42
+
43
+ def formnestic_prepare_html_options_for_wrapper(form_type, *args)
44
+ html_options = args.extract_options!
45
+ html_options[:name] = field_set_title_from_args(*args)
46
+ html_options[:class] = [html_options[:class] || 'inputs', formnestic_wrapper_class(form_type), formnestic_row_class_based_on_position(options[:parent_builder].rows_counter)].join(' ')
47
+ options[:parent_builder].increase_rows_counter
48
+ html_options
49
+ end
50
+
51
+ def formnestic_wrapper_class(form_type)
52
+ if form_type == :table
53
+ 'formnestic-tr-fieldset'
54
+ else
55
+ 'formnestic-li-fieldset'
56
+ end
57
+ end
58
+
51
59
  def formnestic_row_removing_cell_js_call(form_type)
52
60
  if form_type == :table
53
61
  'Formnestic.removeATableEntry(this);'
54
62
  else
55
63
  'Formnestic.removeAListEntry(this);'
56
- end
64
+ end
57
65
  end
58
-
66
+
59
67
  def formnestic_row_removing_cell_div_class(form_type)
60
68
  if form_type == :table
61
69
  'formnestic-table-minus-button'
62
70
  else
63
71
  'formnestic-list-item-minus-button'
64
- end
72
+ end
65
73
  end
66
-
74
+
67
75
  def formnestic_row_removing_cell_container_div_class(form_type)
68
76
  if form_type == :table
69
77
  'formnestic-minus-button-cell'
70
78
  else
71
79
  'formnestic-minus-button-container'
72
- end
80
+ end
73
81
  end
74
-
82
+
75
83
  def formnestic_row_class_based_on_position(position)
76
- position % 2 == 0 ? 'formnestic-even-row': 'formnestic-odd-row'
84
+ position.even? ? 'formnestic-even-row' : 'formnestic-odd-row'
77
85
  end
78
-
79
-
80
86
  end
81
87
  end
82
- end
88
+ end
@@ -1,9 +1,9 @@
1
1
  module Formnestic
2
2
  # @private
3
3
  module Helpers
4
- autoload :InputsHelper, File.join(File.dirname(__FILE__), 'helpers', 'inputs_helper')
4
+ autoload :InputsHelper, \
5
+ File.join(File.dirname(__FILE__), 'helpers', 'inputs_helper')
5
6
  Formtastic::FormBuilder.send(:alias_method, :formtastic_inputs, :inputs)
6
7
  Formtastic::FormBuilder.send(:include, Formnestic::Helpers::InputsHelper)
7
-
8
8
  end
9
- end
9
+ end
@@ -3,13 +3,13 @@ module Formnestic
3
3
  module Base
4
4
  module Labelling
5
5
  def render_label?
6
- if self.builder.options[:display_type] == "table"
6
+ if builder.options[:display_type] == 'table'
7
7
  false
8
8
  else
9
9
  formtastic_render_label?
10
10
  end
11
- end
11
+ end
12
12
  end
13
13
  end
14
14
  end
15
- end
15
+ end
@@ -3,13 +3,13 @@ module Formnestic
3
3
  module Base
4
4
  module Wrapping
5
5
  def input_wrapping(&block)
6
- if self.builder.options[:display_type] == "table"
6
+ if builder.options[:display_type] == 'table'
7
7
  if [
8
- "Formtastic::Inputs::DateSelectInput",
9
- "Formtastic::Inputs::TimeSelectInput",
10
- "Formtastic::Inputs::DateTimeSelectInput",
11
- "Formtastic::Inputs::TimeInput",
12
- "Formtastic::Inputs::DateInput",
8
+ 'Formtastic::Inputs::DateSelectInput',
9
+ 'Formtastic::Inputs::TimeSelectInput',
10
+ 'Formtastic::Inputs::DateTimeSelectInput',
11
+ 'Formtastic::Inputs::TimeInput',
12
+ 'Formtastic::Inputs::DateInput'
13
13
  ].index(self.class.to_s)
14
14
  table_date_select_input_wrapping(&block)
15
15
  else
@@ -19,24 +19,46 @@ module Formnestic
19
19
  formtastic_input_wrapping(&block)
20
20
  end
21
21
  end
22
-
22
+
23
23
  def table_date_select_input_wrapping(&block)
24
- self.builder.options[:parent_builder].add_table_header(self.attributized_method_name, self.class, label_text)
25
- template.content_tag(:td,
26
- template.content_tag(:div, [
27
- template.capture(&block), error_html, hint_html].join("\n").html_safe,
28
- class: "table-date-select-container"), wrapper_html_options
24
+ builder
25
+ .options[:parent_builder]
26
+ .add_table_header(
27
+ attributized_method_name,
28
+ self.class,
29
+ label_text
30
+ )
31
+ template.content_tag(
32
+ :td,
33
+ template.content_tag(
34
+ :div, [
35
+ template.capture(&block), error_html, hint_html
36
+ ].join("\n").html_safe,
37
+ class: 'table-date-select-container'
38
+ ), wrapper_html_options
29
39
  )
30
40
  end
31
-
41
+
32
42
  def table_input_wrapping(&block)
33
- self.builder.options[:parent_builder].add_table_header(self.attributized_method_name, self.class, label_text)
34
- template.content_tag(:td,
35
- [template.capture(&block), error_html, hint_html].join("\n").html_safe,
43
+ builder
44
+ .options[:parent_builder]
45
+ .add_table_header(
46
+ attributized_method_name,
47
+ self.class,
48
+ label_text
49
+ )
50
+
51
+ template.content_tag(
52
+ :td,
53
+ [
54
+ template.capture(&block),
55
+ error_html,
56
+ hint_html
57
+ ].join("\n").html_safe,
36
58
  wrapper_html_options
37
59
  )
38
- end
60
+ end
39
61
  end
40
62
  end
41
63
  end
42
- end
64
+ end
@@ -4,9 +4,9 @@ module Formnestic
4
4
  extend ActiveSupport::Autoload
5
5
  autoload :Wrapping
6
6
  autoload :Labelling
7
-
7
+
8
8
  include Wrapping
9
9
  include Labelling
10
10
  end
11
11
  end
12
- end
12
+ end
data/lib/formnestic.rb CHANGED
@@ -1,72 +1,25 @@
1
- # encoding: utf-8
2
- require 'formtastic/engine' if defined?(::Rails)
1
+ require 'formnestic/engine' if defined?(::Rails)
3
2
  require 'formtastic/helpers'
4
3
  require 'formtastic'
4
+
5
5
  module Formnestic
6
6
  extend ActiveSupport::Autoload
7
- autoload :Helpers, File.join(File.dirname(__FILE__), 'formnestic', 'helpers')
8
- autoload :FormBuilder, File.join(File.dirname(__FILE__), 'formnestic', 'form_builder')
9
- autoload :Inputs, File.join(File.dirname(__FILE__), 'formnestic', 'inputs')
10
-
11
- include Formnestic::Helpers
7
+ autoload :Helpers,
8
+ File.join(File.dirname(__FILE__), 'formnestic', 'helpers')
9
+ autoload :FormBuilder,
10
+ File.join(File.dirname(__FILE__), 'formnestic', 'form_builder')
11
+ autoload :Inputs,
12
+ File.join(File.dirname(__FILE__), 'formnestic', 'inputs')
13
+ autoload \
14
+ :FormtasticExtensions,
15
+ File.join(File.dirname(__FILE__), 'formnestic', 'formtastic_extensions')
16
+
17
+ include Formnestic::Helpers
12
18
  include Formnestic::Inputs::Base
13
-
14
- Formtastic::FormBuilder.send(:alias_method, :formtastic_semantic_fields_for, :semantic_fields_for)
15
- Formtastic::FormBuilder.send(:include, Formnestic::FormBuilder)
16
- Formtastic::Inputs::Base.send(:alias_method, :formtastic_input_wrapping, :input_wrapping)
17
- Formtastic::Inputs::Base.send(:include, Formnestic::Inputs::Base::Wrapping)
18
-
19
- Formtastic::Inputs::Base.send(:alias_method, :formtastic_render_label?, :render_label?)
20
- Formtastic::Inputs::Base.send(:include, Formnestic::Inputs::Base::Labelling)
21
-
22
- Formtastic::Inputs::BooleanInput.send(:alias_method, :formtastic_label_text_with_embedded_checkbox, :label_text_with_embedded_checkbox)
23
-
24
- [
25
- 'Formtastic::Inputs::DateSelectInput',
26
- 'Formtastic::Inputs::DatetimeSelectInput',
27
- 'Formtastic::Inputs::TimeSelectInput'
28
- ].each do |date_related_subclass_str|
29
- if defined?(date_related_subclass_str)
30
- date_related_subclass = date_related_subclass_str.constantize
31
- date_related_subclass.send(:alias_method, :formtastic_fragment_label_html, :fragment_label_html)
32
- date_related_subclass.class_eval do
33
- def fragment_label_html(fragment)
34
- if self.builder.options[:display_type] == "table"
35
- "".html_safe
36
- else
37
- formtastic_fragment_label_html(fragment)
38
- end
39
- end
40
- end
41
- end
42
- end
43
-
44
- Formtastic::Inputs::BooleanInput.class_eval do
45
- def label_text_with_embedded_checkbox
46
- if self.builder.options[:display_type] == 'table'
47
- check_box_html
48
- else
49
- formtastic_label_text_with_embedded_checkbox
50
- end
51
- end
52
- end
53
-
54
- Formtastic::FormBuilder.class_eval do
55
- def semantic_fields_for(record_or_name_or_array, *args, &block)
56
- options = args.dup.extract_options!
57
- if options[:display_type] == 'table'
58
- formnestic_table_semantic_fields_for(record_or_name_or_array, *args, &block)
59
- elsif options[:row_removable].present? or options[:row_addable].present?
60
- formnestic_list_semantic_fields_for(record_or_name_or_array, *args, &block)
61
- else
62
- formtastic_semantic_fields_for(record_or_name_or_array, *args, &block)
63
- end
64
- end
65
- end
66
-
67
- if defined?(::Rails)
68
- class Engine < Rails::Engine
69
- end
70
- end
71
-
72
- end
19
+ extend Formnestic::FormtasticExtensions
20
+
21
+ extend_form_builder
22
+ extend_form_inputs
23
+ extend_datetime_related_inputs
24
+ extend_boolean_input
25
+ end
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: formnestic
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
5
- prerelease:
4
+ version: 1.0.3
6
5
  platform: ruby
7
6
  authors:
8
7
  - James
@@ -14,193 +13,169 @@ dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: actionpack
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
- - - ! '>='
17
+ - - ">="
20
18
  - !ruby/object:Gem::Version
21
19
  version: 3.2.13
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
- - - ! '>='
24
+ - - ">="
28
25
  - !ruby/object:Gem::Version
29
26
  version: 3.2.13
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: formtastic
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
- - - ! '>='
31
+ - - ">="
36
32
  - !ruby/object:Gem::Version
37
33
  version: 2.2.1
38
34
  type: :runtime
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
- - - ! '>='
38
+ - - ">="
44
39
  - !ruby/object:Gem::Version
45
40
  version: 2.2.1
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: coveralls
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
- - - ! '>='
45
+ - - ">="
52
46
  - !ruby/object:Gem::Version
53
47
  version: '0'
54
48
  type: :runtime
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
- - - ! '>='
52
+ - - ">="
60
53
  - !ruby/object:Gem::Version
61
54
  version: '0'
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: shoulda
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
- - - ! '>='
59
+ - - ">="
68
60
  - !ruby/object:Gem::Version
69
61
  version: '0'
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
- - - ! '>='
66
+ - - ">="
76
67
  - !ruby/object:Gem::Version
77
68
  version: '0'
78
69
  - !ruby/object:Gem::Dependency
79
70
  name: bundler
80
71
  requirement: !ruby/object:Gem::Requirement
81
- none: false
82
72
  requirements:
83
- - - ~>
73
+ - - "~>"
84
74
  - !ruby/object:Gem::Version
85
75
  version: '1.0'
86
76
  type: :development
87
77
  prerelease: false
88
78
  version_requirements: !ruby/object:Gem::Requirement
89
- none: false
90
79
  requirements:
91
- - - ~>
80
+ - - "~>"
92
81
  - !ruby/object:Gem::Version
93
82
  version: '1.0'
94
83
  - !ruby/object:Gem::Dependency
95
84
  name: rdoc
96
85
  requirement: !ruby/object:Gem::Requirement
97
- none: false
98
86
  requirements:
99
- - - ~>
87
+ - - "~>"
100
88
  - !ruby/object:Gem::Version
101
89
  version: '3.4'
102
90
  type: :development
103
91
  prerelease: false
104
92
  version_requirements: !ruby/object:Gem::Requirement
105
- none: false
106
93
  requirements:
107
- - - ~>
94
+ - - "~>"
108
95
  - !ruby/object:Gem::Version
109
96
  version: '3.4'
110
97
  - !ruby/object:Gem::Dependency
111
98
  name: jeweler
112
99
  requirement: !ruby/object:Gem::Requirement
113
- none: false
114
100
  requirements:
115
- - - ~>
101
+ - - "~>"
116
102
  - !ruby/object:Gem::Version
117
103
  version: 2.0.1
118
104
  type: :development
119
105
  prerelease: false
120
106
  version_requirements: !ruby/object:Gem::Requirement
121
- none: false
122
107
  requirements:
123
- - - ~>
108
+ - - "~>"
124
109
  - !ruby/object:Gem::Version
125
110
  version: 2.0.1
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: rspec-rails
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
- - - ~>
115
+ - - "~>"
132
116
  - !ruby/object:Gem::Version
133
117
  version: 2.14.0
134
118
  type: :development
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
- - - ~>
122
+ - - "~>"
140
123
  - !ruby/object:Gem::Version
141
124
  version: 2.14.0
142
125
  - !ruby/object:Gem::Dependency
143
126
  name: rspec_tag_matchers
144
127
  requirement: !ruby/object:Gem::Requirement
145
- none: false
146
128
  requirements:
147
- - - ! '>='
129
+ - - ">="
148
130
  - !ruby/object:Gem::Version
149
131
  version: 1.0.0
150
132
  type: :development
151
133
  prerelease: false
152
134
  version_requirements: !ruby/object:Gem::Requirement
153
- none: false
154
135
  requirements:
155
- - - ! '>='
136
+ - - ">="
156
137
  - !ruby/object:Gem::Version
157
138
  version: 1.0.0
158
139
  - !ruby/object:Gem::Dependency
159
140
  name: tzinfo
160
141
  requirement: !ruby/object:Gem::Requirement
161
- none: false
162
142
  requirements:
163
- - - ! '>='
143
+ - - ">="
164
144
  - !ruby/object:Gem::Version
165
145
  version: '0'
166
146
  type: :development
167
147
  prerelease: false
168
148
  version_requirements: !ruby/object:Gem::Requirement
169
- none: false
170
149
  requirements:
171
- - - ! '>='
150
+ - - ">="
172
151
  - !ruby/object:Gem::Version
173
152
  version: '0'
174
153
  - !ruby/object:Gem::Dependency
175
154
  name: spork
176
155
  requirement: !ruby/object:Gem::Requirement
177
- none: false
178
156
  requirements:
179
- - - ! '>='
157
+ - - ">="
180
158
  - !ruby/object:Gem::Version
181
159
  version: '0'
182
160
  type: :development
183
161
  prerelease: false
184
162
  version_requirements: !ruby/object:Gem::Requirement
185
- none: false
186
163
  requirements:
187
- - - ! '>='
164
+ - - ">="
188
165
  - !ruby/object:Gem::Version
189
166
  version: '0'
190
167
  - !ruby/object:Gem::Dependency
191
168
  name: watchr
192
169
  requirement: !ruby/object:Gem::Requirement
193
- none: false
194
170
  requirements:
195
- - - ! '>='
171
+ - - ">="
196
172
  - !ruby/object:Gem::Version
197
173
  version: '0'
198
174
  type: :development
199
175
  prerelease: false
200
176
  version_requirements: !ruby/object:Gem::Requirement
201
- none: false
202
177
  requirements:
203
- - - ! '>='
178
+ - - ">="
204
179
  - !ruby/object:Gem::Version
205
180
  version: '0'
206
181
  description: An extension of famous Formtastic Form Builder to make building nested
@@ -212,10 +187,10 @@ extensions: []
212
187
  extra_rdoc_files:
213
188
  - README.markdown
214
189
  files:
215
- - .document
216
- - .rspec
217
- - .travis.yml
218
- - .watchr
190
+ - ".document"
191
+ - ".rspec"
192
+ - ".travis.yml"
193
+ - ".watchr"
219
194
  - Gemfile
220
195
  - Gemfile.lock
221
196
  - MIT-LICENSE
@@ -259,28 +234,24 @@ files:
259
234
  homepage: http://github.com/jameshuynh/formnestic
260
235
  licenses:
261
236
  - MIT
237
+ metadata: {}
262
238
  post_install_message:
263
239
  rdoc_options: []
264
240
  require_paths:
265
241
  - lib
266
242
  required_ruby_version: !ruby/object:Gem::Requirement
267
- none: false
268
243
  requirements:
269
- - - ! '>='
244
+ - - ">="
270
245
  - !ruby/object:Gem::Version
271
246
  version: '0'
272
- segments:
273
- - 0
274
- hash: -4363090041359353680
275
247
  required_rubygems_version: !ruby/object:Gem::Requirement
276
- none: false
277
248
  requirements:
278
- - - ! '>='
249
+ - - ">="
279
250
  - !ruby/object:Gem::Version
280
251
  version: '0'
281
252
  requirements: []
282
253
  rubyforge_project:
283
- rubygems_version: 1.8.23
254
+ rubygems_version: 2.6.11
284
255
  signing_key:
285
256
  specification_version: 3
286
257
  summary: An extension of formtastic form builder gem