active_scaffold 3.0.26 → 3.1.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.
Files changed (236) hide show
  1. data/CHANGELOG +1 -1
  2. data/{frontends/default → app/assets}/images/add.gif +0 -0
  3. data/{frontends/default → app/assets}/images/arrow_down.gif +0 -0
  4. data/{frontends/default → app/assets}/images/arrow_up.gif +0 -0
  5. data/{frontends/default → app/assets}/images/close.gif +0 -0
  6. data/{frontends/default → app/assets}/images/close_touch.png +0 -0
  7. data/{frontends/default → app/assets}/images/config.png +0 -0
  8. data/{frontends/default → app/assets}/images/cross.png +0 -0
  9. data/{frontends/default → app/assets}/images/gears.png +0 -0
  10. data/{frontends/default → app/assets}/images/indicator-small.gif +0 -0
  11. data/{frontends/default → app/assets}/images/indicator.gif +0 -0
  12. data/{frontends/default → app/assets}/images/magnifier.png +0 -0
  13. data/app/assets/javascripts/active_scaffold.js.erb +16 -0
  14. data/{frontends/default → app/assets}/javascripts/jquery/active_scaffold.js +16 -28
  15. data/app/assets/javascripts/jquery/active_scaffold.js~ +1036 -0
  16. data/{lib/active_scaffold/bridges/date_picker/public/javascripts/date_picker_bridge.js → app/assets/javascripts/jquery/date_picker_bridge.js.erb} +3 -1
  17. data/{frontends/default → app/assets}/javascripts/jquery/jquery.editinplace.js +0 -0
  18. data/app/assets/javascripts/prototype/active_scaffold.js +1033 -0
  19. data/{frontends/default/javascripts/prototype/active_scaffold.js → app/assets/javascripts/prototype/active_scaffold.js~} +1 -0
  20. data/{frontends/default → app/assets}/javascripts/prototype/dhtml_history.js +0 -0
  21. data/{frontends/default → app/assets}/javascripts/prototype/form_enhancements.js +0 -0
  22. data/{frontends/default → app/assets}/javascripts/prototype/rico_corner.js +0 -0
  23. data/{frontends/default/stylesheets/stylesheet-ie.css → app/assets/stylesheets/active_scaffold-ie.css} +0 -0
  24. data/{frontends/default/stylesheets/stylesheet.css → app/assets/stylesheets/active_scaffold.css.erb} +29 -24
  25. data/{lib/active_scaffold/locale → config/locales}/de.yml +3 -0
  26. data/{lib/active_scaffold/locale → config/locales}/en.yml +3 -0
  27. data/{lib/active_scaffold/locale → config/locales}/es.yml +5 -0
  28. data/{lib/active_scaffold/locale → config/locales}/fr.yml +3 -0
  29. data/{lib/active_scaffold/locale → config/locales}/hu.yml +13 -2
  30. data/{lib/active_scaffold/locale → config/locales}/ja.yml +9 -0
  31. data/{lib/active_scaffold/locale → config/locales}/ru.yml +3 -0
  32. data/frontends/default/views/_form.html.erb +1 -1
  33. data/frontends/default/views/_form_association.html.erb +1 -5
  34. data/frontends/default/views/_horizontal_subform.html.erb +7 -4
  35. data/frontends/default/views/_horizontal_subform.html.erb~ +2 -5
  36. data/frontends/default/views/_horizontal_subform_footer.html.erb +0 -0
  37. data/frontends/default/views/_horizontal_subform_header.html.erb +1 -1
  38. data/frontends/default/views/_horizontal_subform_header.html.erb~ +1 -1
  39. data/frontends/default/views/_horizontal_subform_record.html.erb~ +1 -1
  40. data/frontends/default/views/_list_actions.html.erb +1 -1
  41. data/frontends/default/views/_list_messages.html.erb +1 -3
  42. data/frontends/default/views/_render_field.js.erb +20 -0
  43. data/frontends/default/views/_row.html.erb +3 -9
  44. data/frontends/default/views/_show.html.erb +2 -2
  45. data/frontends/default/views/add_existing.js.erb +20 -0
  46. data/frontends/default/views/destroy.js.erb +24 -0
  47. data/frontends/default/views/{edit_associated.js.rjs → edit_associated.js.erb} +3 -2
  48. data/frontends/default/views/form_messages.js.erb +1 -0
  49. data/frontends/default/views/list.js.erb +1 -0
  50. data/frontends/default/views/mark.js.rjs +6 -0
  51. data/frontends/default/views/on_action_update.js.erb +13 -0
  52. data/frontends/default/views/{on_create.js.erb~ → on_create.js.erb} +0 -0
  53. data/frontends/default/views/on_mark_all.js.erb +12 -0
  54. data/frontends/default/views/{on_update.js.erb~ → on_update.js.erb} +0 -0
  55. data/frontends/default/views/render_field.js.erb +1 -0
  56. data/frontends/default/views/search.html.erb +1 -1
  57. data/frontends/default/views/{update_column.js.erb~ → update_column.js.erb} +3 -3
  58. data/frontends/default/views/update_row.js.erb +1 -0
  59. data/lib/active_scaffold.rb +22 -46
  60. data/lib/active_scaffold/actions/core.rb +14 -6
  61. data/lib/active_scaffold/actions/core.rb~ +3 -3
  62. data/lib/active_scaffold/actions/create.rb +2 -5
  63. data/lib/active_scaffold/actions/create.rb~ +3 -2
  64. data/lib/active_scaffold/actions/delete.rb +1 -0
  65. data/lib/active_scaffold/actions/field_search.rb +1 -1
  66. data/lib/active_scaffold/actions/list.rb +10 -6
  67. data/lib/active_scaffold/actions/list.rb~ +3 -3
  68. data/lib/active_scaffold/actions/mark.rb +8 -8
  69. data/lib/active_scaffold/actions/nested.rb +2 -9
  70. data/lib/active_scaffold/actions/nested.rb~ +5 -7
  71. data/lib/active_scaffold/actions/search.rb +2 -1
  72. data/lib/active_scaffold/actions/subform.rb +1 -5
  73. data/lib/active_scaffold/actions/update.rb +1 -4
  74. data/lib/active_scaffold/actions/update.rb~ +5 -5
  75. data/lib/active_scaffold/attribute_params.rb +15 -26
  76. data/lib/active_scaffold/attribute_params.rb~ +1 -2
  77. data/lib/active_scaffold/bridges.rb +61 -0
  78. data/lib/active_scaffold/bridges/ancestry.rb +5 -0
  79. data/lib/active_scaffold/bridges/ancestry/{lib/ancestry_bridge.rb → ancestry_bridge.rb} +3 -3
  80. data/lib/active_scaffold/bridges/{calendar_date_select/bridge.rb → calendar_date_select.rb} +13 -5
  81. data/lib/active_scaffold/bridges/calendar_date_select/{lib/as_cds_bridge.rb → as_cds_bridge.rb} +4 -20
  82. data/lib/active_scaffold/bridges/cancan.rb +15 -0
  83. data/lib/active_scaffold/bridges/cancan/{lib/cancan_bridge.rb → cancan_bridge.rb} +2 -2
  84. data/lib/active_scaffold/bridges/carrierwave.rb +12 -0
  85. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +31 -0
  86. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge_helpers.rb +10 -0
  87. data/lib/active_scaffold/bridges/carrierwave/{lib/form_ui.rb → form_ui.rb} +0 -0
  88. data/lib/active_scaffold/bridges/carrierwave/{lib/list_ui.rb → list_ui.rb} +1 -1
  89. data/lib/active_scaffold/bridges/country_helper.rb +9 -0
  90. data/lib/active_scaffold/bridges/country_helper/{lib/country_helper_bridge.rb → country_helper_bridge.rb} +5 -5
  91. data/lib/active_scaffold/bridges/date_picker.rb +23 -0
  92. data/lib/active_scaffold/bridges/date_picker/ext.rb +54 -0
  93. data/lib/active_scaffold/bridges/date_picker/helper.rb +188 -0
  94. data/lib/active_scaffold/bridges/dragonfly.rb +9 -0
  95. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +34 -0
  96. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge_helpers.rb +10 -0
  97. data/lib/active_scaffold/bridges/dragonfly/{lib/form_ui.rb → form_ui.rb} +0 -0
  98. data/lib/active_scaffold/bridges/dragonfly/{lib/list_ui.rb → list_ui.rb} +2 -2
  99. data/lib/active_scaffold/bridges/file_column.rb +11 -0
  100. data/lib/active_scaffold/bridges/file_column/{lib/as_file_column_bridge.rb → as_file_column_bridge.rb} +2 -2
  101. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +57 -0
  102. data/lib/active_scaffold/bridges/file_column/{lib/form_ui.rb → form_ui.rb} +2 -2
  103. data/lib/active_scaffold/bridges/file_column/{lib/list_ui.rb → list_ui.rb} +0 -0
  104. data/lib/active_scaffold/bridges/paperclip.rb +12 -0
  105. data/lib/active_scaffold/bridges/paperclip/{lib/form_ui.rb → form_ui.rb} +0 -0
  106. data/lib/active_scaffold/bridges/paperclip/{lib/list_ui.rb → list_ui.rb} +3 -3
  107. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +36 -0
  108. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +24 -0
  109. data/lib/active_scaffold/bridges/record_select.rb +11 -0
  110. data/lib/active_scaffold/bridges/record_select/{lib/record_select_bridge.rb → helpers.rb} +5 -16
  111. data/lib/active_scaffold/bridges/record_select/helpers.rb~ +9 -14
  112. data/lib/active_scaffold/bridges/semantic_attributes.rb +5 -0
  113. data/lib/active_scaffold/bridges/semantic_attributes/{lib/semantic_attributes_bridge.rb → column.rb} +3 -3
  114. data/lib/active_scaffold/bridges/tiny_mce.rb +5 -0
  115. data/lib/active_scaffold/bridges/tiny_mce/{lib/tiny_mce_bridge.rb → helpers.rb} +16 -8
  116. data/lib/active_scaffold/config/base.rb +9 -1
  117. data/lib/active_scaffold/config/core.rb +1 -1
  118. data/lib/active_scaffold/config/create.rb +3 -10
  119. data/lib/active_scaffold/config/delete.rb +1 -2
  120. data/lib/active_scaffold/config/field_search.rb +1 -2
  121. data/lib/active_scaffold/config/form.rb +2 -6
  122. data/lib/active_scaffold/config/list.rb +8 -2
  123. data/lib/active_scaffold/config/nested.rb +2 -6
  124. data/lib/active_scaffold/config/search.rb +6 -2
  125. data/lib/active_scaffold/config/show.rb +1 -4
  126. data/lib/active_scaffold/config/subform.rb +1 -1
  127. data/lib/active_scaffold/config/update.rb +1 -6
  128. data/lib/active_scaffold/data_structures/action_columns.rb +3 -0
  129. data/lib/active_scaffold/data_structures/action_link.rb +14 -10
  130. data/lib/active_scaffold/data_structures/bridge.rb +22 -0
  131. data/lib/active_scaffold/data_structures/column.rb +36 -4
  132. data/lib/active_scaffold/data_structures/nested_info.rb +4 -4
  133. data/lib/active_scaffold/data_structures/set.rb +1 -6
  134. data/lib/active_scaffold/data_structures/sorting.rb +2 -2
  135. data/lib/active_scaffold/engine.rb +4 -0
  136. data/lib/active_scaffold/extensions/action_controller_rendering.rb +2 -2
  137. data/lib/active_scaffold/extensions/action_controller_rendering.rb~ +1 -1
  138. data/lib/active_scaffold/extensions/action_view_rendering.rb +90 -93
  139. data/lib/active_scaffold/extensions/action_view_rendering.rb~ +1 -13
  140. data/lib/active_scaffold/extensions/active_association_reflection.rb +16 -7
  141. data/lib/active_scaffold/extensions/cache_association.rb +16 -0
  142. data/lib/active_scaffold/extensions/reverse_associations.rb +15 -13
  143. data/lib/active_scaffold/extensions/unsaved_associated.rb +1 -1
  144. data/lib/active_scaffold/finder.rb +40 -23
  145. data/lib/active_scaffold/finder.rb~ +3 -11
  146. data/lib/active_scaffold/helpers/association_helpers.rb +1 -1
  147. data/lib/active_scaffold/helpers/controller_helpers.rb +9 -1
  148. data/lib/active_scaffold/helpers/controller_helpers.rb~ +12 -5
  149. data/lib/active_scaffold/helpers/form_column_helpers.rb +20 -21
  150. data/lib/active_scaffold/helpers/form_column_helpers.rb~ +2 -1
  151. data/lib/active_scaffold/helpers/id_helpers.rb +5 -5
  152. data/lib/active_scaffold/helpers/list_column_helpers.rb +14 -24
  153. data/lib/active_scaffold/helpers/list_column_helpers.rb~ +15 -20
  154. data/lib/active_scaffold/helpers/search_column_helpers.rb +10 -1
  155. data/lib/active_scaffold/helpers/search_column_helpers.rb~ +1 -1
  156. data/lib/active_scaffold/helpers/view_helpers.rb +14 -40
  157. data/lib/active_scaffold/helpers/view_helpers.rb~ +3 -3
  158. data/lib/active_scaffold/version.rb +2 -2
  159. data/lib/active_scaffold_env.rb +0 -2
  160. data/test/bridges/active_scaffold_dependent_protect_test.rb +34 -0
  161. data/test/bridges/bridge_test.rb +43 -0
  162. data/test/bridges/company.rb +81 -0
  163. data/test/bridges/paperclip_test.rb +68 -0
  164. data/test/bridges/tiny_mce_test.rb +27 -0
  165. data/test/bridges/unobtrusive_date_picker_test.rb +49 -0
  166. data/test/bridges/validation_reflection_test.rb +57 -0
  167. data/test/config/base_test.rb +1 -1
  168. data/test/config/core_test.rb +58 -0
  169. data/test/config/create_test.rb +8 -5
  170. data/test/config/delete_test.rb +33 -0
  171. data/test/config/field_search_test.rb +47 -0
  172. data/test/config/list_test.rb +64 -9
  173. data/test/config/nested_test.rb +62 -0
  174. data/test/config/search_test.rb +60 -0
  175. data/test/config/show_test.rb +5 -5
  176. data/test/config/subform_test.rb +17 -0
  177. data/test/config/update_test.rb +27 -4
  178. data/test/helpers/list_column_helpers_test.rb +16 -5
  179. data/test/helpers/pagination_helpers_test.rb +4 -0
  180. data/test/misc/attribute_params_test.rb +37 -1
  181. data/test/misc/finder_test.rb +0 -1
  182. data/test/misc/lang_test.rb +2 -3
  183. data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +2 -2
  184. data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +13 -7
  185. metadata +137 -154
  186. data/frontends/default/views/_list_with_header.html.erb~ +0 -32
  187. data/frontends/default/views/_render_field.js.rjs +0 -14
  188. data/frontends/default/views/_show.html.erb~ +0 -8
  189. data/frontends/default/views/_update_form.html.erb~ +0 -6
  190. data/frontends/default/views/add_existing.js.erb~ +0 -18
  191. data/frontends/default/views/add_existing.js.rjs +0 -17
  192. data/frontends/default/views/destroy.js.rjs +0 -23
  193. data/frontends/default/views/form_messages.js.rjs +0 -1
  194. data/frontends/default/views/list.js.rjs +0 -1
  195. data/frontends/default/views/on_action_update.js.rjs +0 -10
  196. data/frontends/default/views/on_create.js.rjs +0 -41
  197. data/frontends/default/views/on_mark_all.js.rjs +0 -12
  198. data/frontends/default/views/on_update.js.rjs +0 -28
  199. data/frontends/default/views/render_field.js.rjs +0 -1
  200. data/frontends/default/views/update_column.js.rjs +0 -13
  201. data/frontends/default/views/update_row.js.rjs +0 -1
  202. data/lib/active_scaffold.rb~ +0 -362
  203. data/lib/active_scaffold/bridges/ancestry/bridge.rb +0 -5
  204. data/lib/active_scaffold/bridges/bridge.rb +0 -59
  205. data/lib/active_scaffold/bridges/cancan/bridge.rb +0 -12
  206. data/lib/active_scaffold/bridges/carrierwave/bridge.rb +0 -9
  207. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge.rb +0 -33
  208. data/lib/active_scaffold/bridges/carrierwave/lib/carrierwave_bridge_helpers.rb +0 -12
  209. data/lib/active_scaffold/bridges/country_helper/bridge.rb +0 -9
  210. data/lib/active_scaffold/bridges/date_picker/bridge.rb +0 -24
  211. data/lib/active_scaffold/bridges/date_picker/lib/datepicker_bridge.rb +0 -234
  212. data/lib/active_scaffold/bridges/dragonfly/bridge.rb +0 -9
  213. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge.rb +0 -36
  214. data/lib/active_scaffold/bridges/dragonfly/lib/dragonfly_bridge_helpers.rb +0 -12
  215. data/lib/active_scaffold/bridges/file_column/bridge.rb +0 -11
  216. data/lib/active_scaffold/bridges/file_column/lib/file_column_helpers.rb +0 -59
  217. data/lib/active_scaffold/bridges/paperclip/bridge.rb +0 -12
  218. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge.rb +0 -38
  219. data/lib/active_scaffold/bridges/paperclip/lib/paperclip_bridge_helpers.rb +0 -26
  220. data/lib/active_scaffold/bridges/record_select/bridge.rb +0 -5
  221. data/lib/active_scaffold/bridges/semantic_attributes/bridge.rb +0 -5
  222. data/lib/active_scaffold/bridges/shared/date_bridge.rb~ +0 -209
  223. data/lib/active_scaffold/bridges/tiny_mce/bridge.rb +0 -5
  224. data/lib/active_scaffold/bridges/validation_reflection/bridge.rb +0 -8
  225. data/lib/active_scaffold/bridges/validation_reflection/lib/validation_reflection_bridge.rb +0 -21
  226. data/lib/active_scaffold/config/base.rb~ +0 -70
  227. data/lib/active_scaffold/config/nested.rb~ +0 -41
  228. data/lib/active_scaffold/constraints.rb~ +0 -186
  229. data/lib/active_scaffold/data_structures/action_link.rb~ +0 -179
  230. data/lib/active_scaffold/data_structures/nested_info.rb~ +0 -123
  231. data/lib/active_scaffold/extensions/action_view_resolver.rb +0 -7
  232. data/lib/active_scaffold/extensions/active_association_reflection.rb~ +0 -22
  233. data/lib/active_scaffold/extensions/unsaved_associated.rb~ +0 -62
  234. data/lib/active_scaffold_assets.rb +0 -45
  235. data/lib/generators/active_scaffold_setup/USAGE +0 -10
  236. data/lib/generators/active_scaffold_setup/active_scaffold_setup_generator.rb +0 -59
@@ -5,7 +5,7 @@ module ActiveScaffold
5
5
  attachment = record.send("#{column.name}")
6
6
  return nil unless attachment.present?
7
7
  content = if attachment.image?
8
- image_tag(attachment.thumb(column.options[:thumb] || ActiveScaffold::Bridges::Dragonfly::Lib::DragonflyBridgeHelpers.thumbnail_style).url, :border => 0)
8
+ image_tag(attachment.thumb(column.options[:thumb] || ActiveScaffold::Bridges::Dragonfly::DragonflyBridgeHelpers.thumbnail_style).url, :border => 0)
9
9
  else
10
10
  attachment.name
11
11
  end
@@ -13,4 +13,4 @@ module ActiveScaffold
13
13
  end
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -0,0 +1,11 @@
1
+ class ActiveScaffold::Bridges::FileColumn < ActiveScaffold::DataStructures::Bridge
2
+ def self.install
3
+ if ActiveScaffold::Config::Core.instance_methods.include?("initialize_with_file_column")
4
+ raise RuntimeError, "We've detected that you have active_scaffold_file_column_bridge installed. This plugin has been moved to core. Please remove active_scaffold_file_column_bridge to prevent any conflicts"
5
+ end
6
+ require File.join(File.dirname(__FILE__), "file_column/as_file_column_bridge")
7
+ require File.join(File.dirname(__FILE__), "file_column/form_ui")
8
+ require File.join(File.dirname(__FILE__), "file_column/list_ui")
9
+ require File.join(File.dirname(__FILE__), "file_column/file_column_helpers")
10
+ end
11
+ end
@@ -8,9 +8,9 @@ module ActiveScaffold::Config
8
8
  def initialize_with_file_column(model_id)
9
9
  initialize_without_file_column(model_id)
10
10
 
11
- return unless ActiveScaffold::Bridges::Paperclip::Lib::FileColumnHelpers.klass_has_file_column_fields?(self.model)
11
+ return unless ActiveScaffold::Bridges::FileColumn::FileColumnHelpers.klass_has_file_column_fields?(self.model)
12
12
 
13
- self.model.send :extend, ActiveScaffold::Bridges::Paperclip::Lib::FileColumnHelpers
13
+ self.model.send :extend, ActiveScaffold::Bridges::FileColumn::FileColumnHelpers
14
14
 
15
15
  # include the "delete" helpers for use with active scaffold, unless they are already included
16
16
  self.model.generate_delete_helpers
@@ -0,0 +1,57 @@
1
+ module ActiveScaffold
2
+ module Bridges
3
+ class FileColumn
4
+ module FileColumnHelpers
5
+ class << self
6
+ def file_column_fields(klass)
7
+ klass.instance_methods.grep(/_just_uploaded\?$/).collect{|m| m[0..-16].to_sym }
8
+ end
9
+
10
+ def generate_delete_helpers(klass)
11
+ file_column_fields(klass).each { |field|
12
+ klass.send :class_eval, <<-EOF, __FILE__, __LINE__ + 1 unless klass.methods.include?("#{field}_with_delete=")
13
+ attr_reader :delete_#{field}
14
+
15
+ def delete_#{field}=(value)
16
+ value = (value=="true") if String===value
17
+ return unless value
18
+
19
+ # passing nil to the file column causes the file to be deleted. Don't delete if we just uploaded a file!
20
+ self.#{field} = nil unless self.#{field}_just_uploaded?
21
+ end
22
+ EOF
23
+ }
24
+ end
25
+
26
+ def klass_has_file_column_fields?(klass)
27
+ true unless file_column_fields(klass).empty?
28
+ end
29
+ end
30
+
31
+ def file_column_fields
32
+ @file_column_fields||=FileColumnHelpers.file_column_fields(self)
33
+ end
34
+
35
+ def options_for_file_column_field(field)
36
+ self.allocate.send("#{field}_options")
37
+ end
38
+
39
+ def field_has_image_version?(field, version="thumb")
40
+ begin
41
+ # the only way to get to the options of a particular field is to use the instance method
42
+ options = options_for_file_column_field(field)
43
+ versions = options[:magick][:versions]
44
+ raise unless versions.stringify_keys[version]
45
+ true
46
+ rescue
47
+ false
48
+ end
49
+ end
50
+
51
+ def generate_delete_helpers
52
+ FileColumnHelpers.generate_delete_helpers(self)
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
@@ -15,7 +15,7 @@ module ActiveScaffold
15
15
  content_tag(
16
16
  :div,
17
17
  get_column_value(@record, column) + " " +
18
- hidden_field(:record, "delete_#{column.name}", :value => "false") +
18
+ custom_hidden_field_tag +
19
19
  " | " +
20
20
  content_tag(:a, as_(:remove_file), {:href => '#', :onclick => js_remove_file_code}),
21
21
  {}
@@ -34,4 +34,4 @@ module ActiveScaffold
34
34
  end
35
35
  end
36
36
  end
37
- end
37
+ end
@@ -0,0 +1,12 @@
1
+ class ActiveScaffold::Bridges::Paperclip < ActiveScaffold::DataStructures::Bridge
2
+ def self.install
3
+ if ActiveScaffold::Config::Core.instance_methods.include?("initialize_with_paperclip")
4
+ raise RuntimeError, "We've detected that you have active_scaffold_paperclip_bridge installed. This plugin has been moved to core. Please remove active_scaffold_paperclip_bridge to prevent any conflicts"
5
+ end
6
+ require File.join(File.dirname(__FILE__), "paperclip/form_ui")
7
+ require File.join(File.dirname(__FILE__), "paperclip/list_ui")
8
+ require File.join(File.dirname(__FILE__), "paperclip/paperclip_bridge_helpers")
9
+ require File.join(File.dirname(__FILE__), "paperclip/paperclip_bridge")
10
+ ActiveScaffold::Config::Core.send :include, ActiveScaffold::Bridges::Paperclip::PaperclipBridge
11
+ end
12
+ end
@@ -4,8 +4,8 @@ module ActiveScaffold
4
4
  def active_scaffold_column_paperclip(column, record)
5
5
  paperclip = record.send("#{column.name}")
6
6
  return nil unless paperclip.file?
7
- content = if paperclip.styles.include?(ActiveScaffold::Bridges::Paperclip::Lib::PaperclipBridgeHelpers.thumbnail_style)
8
- image_tag(paperclip.url(ActiveScaffold::Bridges::Paperclip::Lib::PaperclipBridgeHelpers.thumbnail_style), :border => 0)
7
+ content = if paperclip.styles.include?(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style)
8
+ image_tag(paperclip.url(ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.thumbnail_style), :border => 0)
9
9
  else
10
10
  paperclip.original_filename
11
11
  end
@@ -13,4 +13,4 @@ module ActiveScaffold
13
13
  end
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -0,0 +1,36 @@
1
+ module ActiveScaffold
2
+ module Bridges
3
+ class Paperclip
4
+ module PaperclipBridge
5
+ def initialize_with_paperclip(model_id)
6
+ initialize_without_paperclip(model_id)
7
+ return unless self.model.respond_to?(:attachment_definitions) && !self.model.attachment_definitions.nil?
8
+
9
+ self.update.multipart = true
10
+ self.create.multipart = true
11
+
12
+ self.model.attachment_definitions.keys.each do |field|
13
+ configure_paperclip_field(field.to_sym)
14
+ # define the "delete" helper for use with active scaffold, unless it's already defined
15
+ ActiveScaffold::Bridges::Paperclip::PaperclipBridgeHelpers.generate_delete_helper(self.model, field)
16
+ end
17
+ end
18
+
19
+ def self.included(base)
20
+ base.alias_method_chain :initialize, :paperclip
21
+ end
22
+
23
+ private
24
+ def configure_paperclip_field(field)
25
+ self.columns << field
26
+ self.columns[field].form_ui ||= :paperclip
27
+ self.columns[field].params.add "delete_#{field}"
28
+
29
+ [:file_name, :content_type, :file_size, :updated_at].each do |f|
30
+ self.columns.exclude("#{field}_#{f}".to_sym)
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,24 @@
1
+ module ActiveScaffold
2
+ module Bridges
3
+ class Paperclip
4
+ module PaperclipBridgeHelpers
5
+ mattr_accessor :thumbnail_style
6
+ self.thumbnail_style = :thumbnail
7
+
8
+ def self.generate_delete_helper(klass, field)
9
+ klass.class_eval <<-EOF, __FILE__, __LINE__ + 1 unless klass.instance_methods.include?("delete_#{field}=")
10
+ attr_reader :delete_#{field}
11
+
12
+ def delete_#{field}=(value)
13
+ value = (value == "true") if String === value
14
+ return unless value
15
+
16
+ # passing nil to the file column causes the file to be deleted. Don't delete if we just uploaded a file!
17
+ self.#{field} = nil unless self.#{field}.dirty?
18
+ end
19
+ EOF
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ class ActiveScaffold::Bridges::RecordSelect < ActiveScaffold::DataStructures::Bridge
2
+ def self.install
3
+ require File.join(File.dirname(__FILE__), "record_select/helpers.rb")
4
+ end
5
+ def self.stylesheets
6
+ 'record_select'
7
+ end
8
+ def self.javascripts
9
+ 'record_select'
10
+ end
11
+ end
@@ -1,20 +1,9 @@
1
- module ActiveScaffold
2
- module RecordSelectBridge
1
+ class ActiveScaffold::Bridges::RecordSelect
2
+ module Helpers
3
3
  def self.included(base)
4
4
  base.class_eval do
5
5
  include FormColumnHelpers
6
6
  include SearchColumnHelpers
7
- include ViewHelpers
8
- end
9
- end
10
-
11
- module ViewHelpers
12
- def self.included(base)
13
- base.alias_method_chain :active_scaffold_includes, :record_select
14
- end
15
-
16
- def active_scaffold_includes_with_record_select(*args)
17
- active_scaffold_includes_without_record_select(*args) + record_select_includes
18
7
  end
19
8
  end
20
9
 
@@ -45,12 +34,12 @@ module ActiveScaffold
45
34
  record_select_options = active_scaffold_input_text_options(
46
35
  :controller => remote_controller,
47
36
  :id => options[:id],
48
- :class => options[:class]
37
+ :class => options[:class].gsub(/update_form/, '')
49
38
  )
50
39
  record_select_options.merge!(column.options)
51
40
  if options['data-update_url']
52
41
  record_select_options[:onchange] = %|function(id, label) {
53
- ActiveScaffold.update_column($("##{options[:id]}"), "#{options['data-update_url']}", #{options['data-update_send_form'].to_json}, "#{options[:id]}", id);
42
+ ActiveScaffold.update_column(null, "#{options['data-update_url']}", #{options['data-update_send_form'].to_json}, "#{options[:id]}", id);
54
43
  }|
55
44
  end
56
45
 
@@ -89,4 +78,4 @@ module ActiveScaffold
89
78
  end
90
79
  end
91
80
 
92
- ActionView::Base.class_eval { include ActiveScaffold::RecordSelectBridge }
81
+ ActionView::Base.class_eval { include ActiveScaffold::Bridges::RecordSelect::Helpers }
@@ -16,8 +16,6 @@ class ActiveScaffold::Bridges::RecordSelect
16
16
  active_scaffold_record_select(column, options, @record.send(column.name), multiple)
17
17
  elsif column.plural_association?
18
18
  active_scaffold_record_select(column, options, @record.send(column.name), true)
19
- else
20
- active_scaffold_record_select_autocomplete(column, options)
21
19
  end
22
20
  end
23
21
 
@@ -33,10 +31,17 @@ class ActiveScaffold::Bridges::RecordSelect
33
31
  params.merge!({column.association.primary_key_name => ''})
34
32
  end
35
33
 
36
- record_select_options = active_scaffold_input_text_options(options).merge(
37
- :controller => remote_controller
34
+ record_select_options = active_scaffold_input_text_options(
35
+ :controller => remote_controller,
36
+ :id => options[:id],
37
+ :class => options[:class]
38
38
  )
39
39
  record_select_options.merge!(column.options)
40
+ if options['data-update_url']
41
+ record_select_options[:onchange] = %|function(id, label) {
42
+ ActiveScaffold.update_column(null, "#{options['data-update_url']}", #{options['data-update_send_form'].to_json}, "#{options[:id]}", id);
43
+ }|
44
+ end
40
45
 
41
46
  html = if multiple
42
47
  record_multi_select_field(options[:name], value || [], record_select_options)
@@ -46,16 +51,6 @@ class ActiveScaffold::Bridges::RecordSelect
46
51
  html = self.class.field_error_proc.call(html, self) if @record.errors[column.name].any?
47
52
  html
48
53
  end
49
-
50
- def active_scaffold_record_select_autocomplete(column, options)
51
- remote_controller = active_scaffold_controller_for(column.association.klass).controller_path
52
- record_select_options = active_scaffold_input_text_options(options).merge(
53
- :controller => remote_controller
54
- )
55
- html = record_select_autocomplete(options[:name], @record, record_select_options)
56
- html = self.class.field_error_proc.call(html, self) if @record.errors[column.name].any?
57
- html
58
- end
59
54
  end
60
55
 
61
56
  module SearchColumnHelpers
@@ -0,0 +1,5 @@
1
+ class ActiveScaffold::Bridges::SemanticAttributes < ActiveScaffold::DataStructures::Bridge
2
+ def self.install
3
+ require File.join(File.dirname(__FILE__), "semantic_attributes/column.rb")
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
- module ActiveScaffold
2
- module SemanticAttributesBridge
1
+ class ActiveScaffold::Bridges::SemanticAttributes
2
+ module Column
3
3
  def self.included(base)
4
4
  base.class_eval { alias_method_chain :initialize, :semantic_attributes }
5
5
  end
@@ -16,5 +16,5 @@ module ActiveScaffold
16
16
  end
17
17
  end
18
18
  ActiveScaffold::DataStructures::Column.class_eval do
19
- include ActiveScaffold::SemanticAttributesBridge
19
+ include ActiveScaffold::Bridges::SemanticAttributes::Column
20
20
  end
@@ -0,0 +1,5 @@
1
+ class ActiveScaffold::Bridges::TinyMce < ActiveScaffold::DataStructures::Bridge
2
+ def self.install
3
+ require File.join(File.dirname(__FILE__), "tiny_mce/helpers.rb")
4
+ end
5
+ end
@@ -1,5 +1,13 @@
1
- module ActiveScaffold
2
- module TinyMceBridge
1
+ class ActiveScaffold::Bridges::TinyMce
2
+ module Helpers
3
+ def self.included(base)
4
+ base.class_eval do
5
+ include FormColumnHelpers
6
+ include SearchColumnHelpers
7
+ include ViewHelpers
8
+ end
9
+ end
10
+
3
11
  module ViewHelpers
4
12
  def active_scaffold_includes(*args)
5
13
  if ActiveScaffold.js_framework == :jquery
@@ -28,11 +36,15 @@ ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
28
36
  end
29
37
 
30
38
  module FormColumnHelpers
39
+ def self.included(base)
40
+ base.alias_method_chain :onsubmit, :tiny_mce
41
+ end
42
+
31
43
  def active_scaffold_input_text_editor(column, options)
32
44
  options[:class] = "#{options[:class]} mceEditor #{column.options[:class]}".strip
33
45
  html = []
34
46
  html << send(override_input(:textarea), column, options)
35
- html << javascript_tag("tinyMCE.execCommand('mceAddControl', false, '#{options[:id]}');") if request.xhr?
47
+ html << javascript_tag("tinyMCE.execCommand('mceAddControl', false, '#{options[:id]}');") if request.xhr? || params[:iframe]
36
48
  html.join "\n"
37
49
  end
38
50
 
@@ -54,8 +66,4 @@ ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
54
66
  end
55
67
  end
56
68
 
57
- ActionView::Base.class_eval do
58
- include ActiveScaffold::TinyMceBridge::FormColumnHelpers
59
- include ActiveScaffold::TinyMceBridge::SearchColumnHelpers
60
- include ActiveScaffold::TinyMceBridge::ViewHelpers
61
- end
69
+ ActionView::Base.class_eval { include ActiveScaffold::Bridges::TinyMce::Helpers }
@@ -3,6 +3,10 @@ module ActiveScaffold::Config
3
3
  include ActiveScaffold::Configurable
4
4
  extend ActiveScaffold::Configurable
5
5
 
6
+ def initialize(core_config)
7
+ @core = core_config
8
+ end
9
+
6
10
  def self.inherited(subclass)
7
11
  class << subclass
8
12
  # the crud type of the action. possible values are :create, :read, :update, :delete, and nil.
@@ -21,12 +25,16 @@ module ActiveScaffold::Config
21
25
  # delegate
22
26
  def crud_type; self.class.crud_type end
23
27
 
28
+ def label(model = nil)
29
+ as_(@label, :model => model || @core.label(:count => 1))
30
+ end
31
+
24
32
  # the user property gets set to the instantiation of the local UserSettings class during the automatic instantiation of this class.
25
33
  attr_accessor :user
26
34
 
27
35
  # define a default action_group for this action
28
36
  # e.g. 'members.crud'
29
- class_inheritable_accessor :action_group
37
+ class_attribute :action_group
30
38
 
31
39
  # action_group this action should belong to
32
40
  attr_accessor :action_group
@@ -107,7 +107,7 @@ module ActiveScaffold::Config
107
107
 
108
108
  def initialize(model_id)
109
109
  # model_id is the only absolutely required configuration value. it is also not publicly accessible.
110
- @model_id = model_id.to_s.pluralize.singularize
110
+ @model_id = model_id
111
111
 
112
112
  # inherit the actions list directly from the global level
113
113
  @actions = self.class.actions.clone
@@ -1,8 +1,9 @@
1
1
  module ActiveScaffold::Config
2
2
  class Create < ActiveScaffold::Config::Form
3
3
  self.crud_type = :create
4
- def initialize(*args)
4
+ def initialize(core_config)
5
5
  super
6
+ @label = :create_model
6
7
  self.persistent = self.class.persistent
7
8
  self.action_after_create = self.class.action_after_create
8
9
  self.refresh_list = self.class.refresh_list
@@ -25,20 +26,12 @@ module ActiveScaffold::Config
25
26
 
26
27
  # whether update form is opened after a create or not
27
28
  cattr_accessor :action_after_create
28
- @@action_after_create = false
29
+ @@action_after_create = nil
29
30
 
30
31
  # whether we should refresh list after create or not
31
32
  cattr_accessor :refresh_list
32
33
  @@refresh_list = false
33
34
 
34
- # instance-level configuration
35
- # ----------------------------
36
- # the label= method already exists in the Form base class
37
- def label(model = nil)
38
- model ||= @core.label(:count => 1)
39
- @label ? as_(@label) : as_(:create_model, :model => model)
40
- end
41
-
42
35
  # whether the form stays open after a create or not
43
36
  attr_accessor :persistent
44
37