active_scaffold 3.2.17 → 3.2.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (246) hide show
  1. data/CHANGELOG +5 -1
  2. metadata +17 -261
  3. data/app/assets/images/active_scaffold/add.png +0 -0
  4. data/app/assets/images/active_scaffold/arrow_down.png +0 -0
  5. data/app/assets/images/active_scaffold/arrow_up.png +0 -0
  6. data/app/assets/images/active_scaffold/close.png +0 -0
  7. data/app/assets/images/active_scaffold/close_touch.png +0 -0
  8. data/app/assets/images/active_scaffold/config.png +0 -0
  9. data/app/assets/images/active_scaffold/cross.png +0 -0
  10. data/app/assets/images/active_scaffold/gears.png +0 -0
  11. data/app/assets/images/active_scaffold/indicator-small.gif +0 -0
  12. data/app/assets/images/active_scaffold/indicator.gif +0 -0
  13. data/app/assets/images/active_scaffold/magnifier.png +0 -0
  14. data/app/assets/javascripts/active_scaffold.js.erb +0 -19
  15. data/app/assets/javascripts/jquery/active_scaffold.js +0 -1113
  16. data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +0 -24
  17. data/app/assets/javascripts/jquery/draggable_lists.js +0 -27
  18. data/app/assets/javascripts/jquery/jquery.editinplace.js +0 -743
  19. data/app/assets/javascripts/jquery/tiny_mce_bridge.js +0 -7
  20. data/app/assets/javascripts/prototype/active_scaffold.js +0 -1107
  21. data/app/assets/javascripts/prototype/dhtml_history.js +0 -870
  22. data/app/assets/javascripts/prototype/form_enhancements.js +0 -117
  23. data/app/assets/javascripts/prototype/rico_corner.js +0 -370
  24. data/app/assets/javascripts/prototype/tiny_mce_bridge.js +0 -7
  25. data/app/assets/stylesheets/active_scaffold-ie.css.scss +0 -54
  26. data/app/assets/stylesheets/active_scaffold.css.scss +0 -14
  27. data/app/assets/stylesheets/active_scaffold_colors.css.scss +0 -395
  28. data/app/assets/stylesheets/active_scaffold_extensions.css.erb +0 -2
  29. data/app/assets/stylesheets/active_scaffold_images.css.scss +0 -40
  30. data/app/assets/stylesheets/active_scaffold_layout.css +0 -936
  31. data/app/assets/stylesheets/blue-theme.css +0 -74
  32. data/config/locales/de.yml +0 -125
  33. data/config/locales/en.yml +0 -127
  34. data/config/locales/es.yml +0 -128
  35. data/config/locales/fr.yml +0 -131
  36. data/config/locales/hu.yml +0 -126
  37. data/config/locales/ja.yml +0 -126
  38. data/config/locales/ru.yml +0 -135
  39. data/frontends/default/views/_action_group.html.erb +0 -24
  40. data/frontends/default/views/_add_existing_form.html.erb +0 -30
  41. data/frontends/default/views/_base_form.html.erb +0 -53
  42. data/frontends/default/views/_create_form.html.erb +0 -8
  43. data/frontends/default/views/_create_form_on_list.html.erb +0 -6
  44. data/frontends/default/views/_field_search.html.erb +0 -32
  45. data/frontends/default/views/_form.html.erb +0 -28
  46. data/frontends/default/views/_form_association.html.erb +0 -17
  47. data/frontends/default/views/_form_association_footer.html.erb +0 -47
  48. data/frontends/default/views/_form_attribute.html.erb +0 -23
  49. data/frontends/default/views/_form_hidden_attribute.html.erb +0 -7
  50. data/frontends/default/views/_form_messages.html.erb +0 -5
  51. data/frontends/default/views/_horizontal_subform.html.erb +0 -22
  52. data/frontends/default/views/_horizontal_subform_footer.html.erb +0 -0
  53. data/frontends/default/views/_horizontal_subform_header.html.erb +0 -11
  54. data/frontends/default/views/_horizontal_subform_record.html.erb +0 -43
  55. data/frontends/default/views/_human_conditions.html.erb +0 -1
  56. data/frontends/default/views/_list.html.erb +0 -18
  57. data/frontends/default/views/_list_actions.html.erb +0 -15
  58. data/frontends/default/views/_list_calculations.html.erb +0 -16
  59. data/frontends/default/views/_list_column_headings.html.erb +0 -12
  60. data/frontends/default/views/_list_header.html.erb +0 -10
  61. data/frontends/default/views/_list_inline_adapter.html.erb +0 -21
  62. data/frontends/default/views/_list_messages.html.erb +0 -28
  63. data/frontends/default/views/_list_pagination.html.erb +0 -11
  64. data/frontends/default/views/_list_pagination_links.html.erb +0 -9
  65. data/frontends/default/views/_list_record.html.erb +0 -13
  66. data/frontends/default/views/_list_record_columns.html.erb +0 -8
  67. data/frontends/default/views/_list_with_header.html.erb +0 -36
  68. data/frontends/default/views/_messages.html.erb +0 -10
  69. data/frontends/default/views/_refresh_list.js.erb +0 -1
  70. data/frontends/default/views/_render_field.js.erb +0 -20
  71. data/frontends/default/views/_row.html.erb +0 -1
  72. data/frontends/default/views/_search.html.erb +0 -34
  73. data/frontends/default/views/_search_attribute.html.erb +0 -10
  74. data/frontends/default/views/_show.html.erb +0 -8
  75. data/frontends/default/views/_show_columns.html.erb +0 -15
  76. data/frontends/default/views/_update_actions.html.erb +0 -9
  77. data/frontends/default/views/_update_calculations.js.erb +0 -4
  78. data/frontends/default/views/_update_form.html.erb +0 -6
  79. data/frontends/default/views/_update_messages.js.erb +0 -2
  80. data/frontends/default/views/_vertical_subform.html.erb +0 -12
  81. data/frontends/default/views/_vertical_subform_record.html.erb +0 -43
  82. data/frontends/default/views/action_confirmation.html.erb +0 -13
  83. data/frontends/default/views/add_existing.js.erb +0 -14
  84. data/frontends/default/views/add_existing_form.html.erb +0 -5
  85. data/frontends/default/views/create.html.erb +0 -5
  86. data/frontends/default/views/delete.html.erb +0 -13
  87. data/frontends/default/views/destroy.js.erb +0 -26
  88. data/frontends/default/views/edit_associated.js.erb +0 -12
  89. data/frontends/default/views/field_search.html.erb +0 -5
  90. data/frontends/default/views/form_messages.js.erb +0 -1
  91. data/frontends/default/views/list.html.erb +0 -1
  92. data/frontends/default/views/on_action_update.js.erb +0 -22
  93. data/frontends/default/views/on_create.js.erb +0 -38
  94. data/frontends/default/views/on_mark.js.erb +0 -6
  95. data/frontends/default/views/on_update.js.erb +0 -29
  96. data/frontends/default/views/refresh_list.js.erb +0 -2
  97. data/frontends/default/views/render_field.js.erb +0 -1
  98. data/frontends/default/views/row.js.erb +0 -2
  99. data/frontends/default/views/search.html.erb +0 -5
  100. data/frontends/default/views/show.html.erb +0 -5
  101. data/frontends/default/views/update.html.erb +0 -8
  102. data/frontends/default/views/update_column.js.erb +0 -15
  103. data/frontends/default/views/update_row.js.erb +0 -1
  104. data/lib/active_scaffold.rb +0 -373
  105. data/lib/active_scaffold/actions/common_search.rb +0 -22
  106. data/lib/active_scaffold/actions/core.rb +0 -203
  107. data/lib/active_scaffold/actions/create.rb +0 -139
  108. data/lib/active_scaffold/actions/delete.rb +0 -74
  109. data/lib/active_scaffold/actions/field_search.rb +0 -78
  110. data/lib/active_scaffold/actions/list.rb +0 -208
  111. data/lib/active_scaffold/actions/mark.rb +0 -89
  112. data/lib/active_scaffold/actions/nested.rb +0 -244
  113. data/lib/active_scaffold/actions/search.rb +0 -48
  114. data/lib/active_scaffold/actions/show.rb +0 -61
  115. data/lib/active_scaffold/actions/subform.rb +0 -23
  116. data/lib/active_scaffold/actions/update.rb +0 -156
  117. data/lib/active_scaffold/active_record_permissions.rb +0 -135
  118. data/lib/active_scaffold/attribute_params.rb +0 -200
  119. data/lib/active_scaffold/bridges.rb +0 -61
  120. data/lib/active_scaffold/bridges/ancestry.rb +0 -5
  121. data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +0 -39
  122. data/lib/active_scaffold/bridges/bitfields.rb +0 -6
  123. data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +0 -37
  124. data/lib/active_scaffold/bridges/calendar_date_select.rb +0 -24
  125. data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +0 -66
  126. data/lib/active_scaffold/bridges/cancan.rb +0 -15
  127. data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +0 -127
  128. data/lib/active_scaffold/bridges/carrierwave.rb +0 -12
  129. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge.rb +0 -31
  130. data/lib/active_scaffold/bridges/carrierwave/carrierwave_bridge_helpers.rb +0 -10
  131. data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +0 -45
  132. data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +0 -17
  133. data/lib/active_scaffold/bridges/country_helper.rb +0 -9
  134. data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +0 -358
  135. data/lib/active_scaffold/bridges/date_picker.rb +0 -23
  136. data/lib/active_scaffold/bridges/date_picker/ext.rb +0 -63
  137. data/lib/active_scaffold/bridges/date_picker/helper.rb +0 -180
  138. data/lib/active_scaffold/bridges/dragonfly.rb +0 -9
  139. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge.rb +0 -34
  140. data/lib/active_scaffold/bridges/dragonfly/dragonfly_bridge_helpers.rb +0 -10
  141. data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +0 -27
  142. data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +0 -16
  143. data/lib/active_scaffold/bridges/file_column.rb +0 -11
  144. data/lib/active_scaffold/bridges/file_column/as_file_column_bridge.rb +0 -46
  145. data/lib/active_scaffold/bridges/file_column/file_column_helpers.rb +0 -57
  146. data/lib/active_scaffold/bridges/file_column/form_ui.rb +0 -34
  147. data/lib/active_scaffold/bridges/file_column/list_ui.rb +0 -26
  148. data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +0 -43
  149. data/lib/active_scaffold/bridges/file_column/test/mock_model.rb +0 -9
  150. data/lib/active_scaffold/bridges/file_column/test/test_helper.rb +0 -15
  151. data/lib/active_scaffold/bridges/paperclip.rb +0 -12
  152. data/lib/active_scaffold/bridges/paperclip/form_ui.rb +0 -27
  153. data/lib/active_scaffold/bridges/paperclip/list_ui.rb +0 -16
  154. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge.rb +0 -36
  155. data/lib/active_scaffold/bridges/paperclip/paperclip_bridge_helpers.rb +0 -24
  156. data/lib/active_scaffold/bridges/record_select.rb +0 -11
  157. data/lib/active_scaffold/bridges/record_select/helpers.rb +0 -92
  158. data/lib/active_scaffold/bridges/semantic_attributes.rb +0 -5
  159. data/lib/active_scaffold/bridges/semantic_attributes/column.rb +0 -20
  160. data/lib/active_scaffold/bridges/shared/date_bridge.rb +0 -209
  161. data/lib/active_scaffold/bridges/tiny_mce.rb +0 -17
  162. data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +0 -46
  163. data/lib/active_scaffold/config/base.rb +0 -75
  164. data/lib/active_scaffold/config/core.rb +0 -236
  165. data/lib/active_scaffold/config/create.rb +0 -32
  166. data/lib/active_scaffold/config/delete.rb +0 -32
  167. data/lib/active_scaffold/config/field_search.rb +0 -79
  168. data/lib/active_scaffold/config/form.rb +0 -64
  169. data/lib/active_scaffold/config/list.rb +0 -247
  170. data/lib/active_scaffold/config/mark.rb +0 -30
  171. data/lib/active_scaffold/config/nested.rb +0 -42
  172. data/lib/active_scaffold/config/search.rb +0 -73
  173. data/lib/active_scaffold/config/show.rb +0 -31
  174. data/lib/active_scaffold/config/subform.rb +0 -35
  175. data/lib/active_scaffold/config/update.rb +0 -33
  176. data/lib/active_scaffold/configurable.rb +0 -29
  177. data/lib/active_scaffold/constraints.rb +0 -171
  178. data/lib/active_scaffold/data_structures/action_columns.rb +0 -142
  179. data/lib/active_scaffold/data_structures/action_link.rb +0 -185
  180. data/lib/active_scaffold/data_structures/action_links.rb +0 -191
  181. data/lib/active_scaffold/data_structures/actions.rb +0 -45
  182. data/lib/active_scaffold/data_structures/bridge.rb +0 -22
  183. data/lib/active_scaffold/data_structures/column.rb +0 -401
  184. data/lib/active_scaffold/data_structures/columns.rb +0 -75
  185. data/lib/active_scaffold/data_structures/error_message.rb +0 -24
  186. data/lib/active_scaffold/data_structures/nested_info.rb +0 -171
  187. data/lib/active_scaffold/data_structures/set.rb +0 -61
  188. data/lib/active_scaffold/data_structures/sorting.rb +0 -167
  189. data/lib/active_scaffold/engine.rb +0 -4
  190. data/lib/active_scaffold/extensions/action_controller_rendering.rb +0 -20
  191. data/lib/active_scaffold/extensions/action_controller_rescueing.rb +0 -7
  192. data/lib/active_scaffold/extensions/action_view_rendering.rb +0 -115
  193. data/lib/active_scaffold/extensions/active_record_offset.rb +0 -12
  194. data/lib/active_scaffold/extensions/array.rb +0 -7
  195. data/lib/active_scaffold/extensions/cache_association.rb +0 -16
  196. data/lib/active_scaffold/extensions/localize.rb +0 -10
  197. data/lib/active_scaffold/extensions/name_option_for_datetime.rb +0 -12
  198. data/lib/active_scaffold/extensions/nil_id_in_url_params.rb +0 -7
  199. data/lib/active_scaffold/extensions/paginator_extensions.rb +0 -26
  200. data/lib/active_scaffold/extensions/reverse_associations.rb +0 -64
  201. data/lib/active_scaffold/extensions/routing_mapper.rb +0 -48
  202. data/lib/active_scaffold/extensions/to_label.rb +0 -8
  203. data/lib/active_scaffold/extensions/unsaved_associated.rb +0 -61
  204. data/lib/active_scaffold/extensions/unsaved_record.rb +0 -20
  205. data/lib/active_scaffold/extensions/usa_state.rb +0 -46
  206. data/lib/active_scaffold/finder.rb +0 -399
  207. data/lib/active_scaffold/helpers/association_helpers.rb +0 -42
  208. data/lib/active_scaffold/helpers/controller_helpers.rb +0 -94
  209. data/lib/active_scaffold/helpers/form_column_helpers.rb +0 -322
  210. data/lib/active_scaffold/helpers/human_condition_helpers.rb +0 -64
  211. data/lib/active_scaffold/helpers/id_helpers.rb +0 -131
  212. data/lib/active_scaffold/helpers/list_column_helpers.rb +0 -374
  213. data/lib/active_scaffold/helpers/pagination_helpers.rb +0 -62
  214. data/lib/active_scaffold/helpers/search_column_helpers.rb +0 -257
  215. data/lib/active_scaffold/helpers/show_column_helpers.rb +0 -44
  216. data/lib/active_scaffold/helpers/view_helpers.rb +0 -398
  217. data/lib/active_scaffold/marked_model.rb +0 -38
  218. data/lib/active_scaffold/paginator.rb +0 -136
  219. data/lib/active_scaffold/responds_to_parent.rb +0 -70
  220. data/lib/active_scaffold/tableless.rb +0 -83
  221. data/lib/active_scaffold/version.rb +0 -9
  222. data/lib/active_scaffold_env.rb +0 -13
  223. data/lib/generators/active_scaffold/USAGE +0 -29
  224. data/lib/generators/active_scaffold/active_scaffold_generator.rb +0 -21
  225. data/lib/generators/active_scaffold_controller/USAGE +0 -19
  226. data/lib/generators/active_scaffold_controller/active_scaffold_controller_generator.rb +0 -29
  227. data/lib/generators/active_scaffold_controller/templates/controller.rb +0 -4
  228. data/lib/generators/active_scaffold_controller/templates/helper.rb +0 -2
  229. data/public/blank.html +0 -33
  230. data/shoulda_macros/macros.rb +0 -136
  231. data/vendor/assets/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  232. data/vendor/assets/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  233. data/vendor/assets/images/ui-bg_flat_10_000000_40x100.png +0 -0
  234. data/vendor/assets/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  235. data/vendor/assets/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  236. data/vendor/assets/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  237. data/vendor/assets/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  238. data/vendor/assets/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  239. data/vendor/assets/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  240. data/vendor/assets/images/ui-icons_222222_256x240.png +0 -0
  241. data/vendor/assets/images/ui-icons_228ef1_256x240.png +0 -0
  242. data/vendor/assets/images/ui-icons_ef8c08_256x240.png +0 -0
  243. data/vendor/assets/images/ui-icons_ffd27a_256x240.png +0 -0
  244. data/vendor/assets/images/ui-icons_ffffff_256x240.png +0 -0
  245. data/vendor/assets/javascripts/jquery-ui-timepicker-addon.js +0 -1276
  246. data/vendor/assets/stylesheets/jquery-ui.css +0 -568
@@ -1,7 +0,0 @@
1
- var action_link_close = ActiveScaffold.ActionLink.Abstract.prototype.close;
2
- ActiveScaffold.ActionLink.Abstract.prototype.close = function() {
3
- jQuery(this.adapter).find('textarea.mceEditor').each(function(index, elem) {
4
- tinyMCE.execCommand('mceRemoveControl', false, jQuery(elem).attr('id'));
5
- });
6
- action_link_close.apply(this);
7
- };
@@ -1,1107 +0,0 @@
1
- if (typeof Prototype == 'undefined')
2
- {
3
- warning = "ActiveScaffold Error: Prototype could not be found. Please make sure that your application's layout includes prototype.js (e.g. <%= javascript_include_tag :defaults %>) *before* it includes active_scaffold.js (e.g. <%= active_scaffold_includes %>).";
4
- alert(warning);
5
- }
6
- if (Prototype.Version.substring(0, 3) < '1.6')
7
- {
8
- warning = "ActiveScaffold Error: Prototype version 1.6.x or higher is required. Please update prototype.js (rake rails:update:javascripts).";
9
- alert(warning);
10
- }
11
- if (!Element.Methods.highlight) Element.addMethods({highlight: Prototype.emptyFunction});
12
-
13
-
14
- document.observe("dom:loaded", function() {
15
- document.on('ajax:create', 'form.as_form', function(event) {
16
- var source = event.findElement();
17
- var as_form = event.findElement('form');
18
- if (source.nodeName.toUpperCase() == 'INPUT' && source.readAttribute('type') == 'button') {
19
- // Hack: Prototype or rails.js somehow screw up event handling if someone clicks
20
- // a button of type button such as Create Another <Association>
21
- // as a result form is disabled but never reenabled..
22
- } else {
23
- if (as_form && as_form.readAttribute('data-loading') == 'true') {
24
- ActiveScaffold.disable_form(as_form);
25
- }
26
- }
27
- return true;
28
- });
29
- document.on('ajax:complete', 'form.as_form', function(event) {
30
- var as_form = event.findElement('form');
31
- if (as_form && as_form.readAttribute('data-loading') == 'true') {
32
- ActiveScaffold.enable_form(as_form);
33
- event.stop();
34
- return false;
35
- }
36
- });
37
- document.on('ajax:failure', 'form.as_form', function(event) {
38
- var as_div = event.findElement('div.active-scaffold');
39
- if (as_div) {
40
- ActiveScaffold.report_500_response(as_div)
41
- event.stop();
42
- return false;
43
- }
44
- });
45
- document.on('submit', 'form.as_form.as_remote_upload', function(event) {
46
- var as_form = event.findElement('form');
47
- if (as_form && as_form.readAttribute('data-loading') == 'true') {
48
- setTimeout("ActiveScaffold.disable_form('" + as_form.readAttribute('id') + "')", 10);
49
- }
50
- return true;
51
- });
52
- document.on('ajax:before', 'a.as_action', function(event) {
53
- var action_link = ActiveScaffold.ActionLink.get(event.findElement());
54
- if (action_link) {
55
- if (action_link.is_disabled()) {
56
- event.stop();
57
- } else {
58
- if (action_link.loading_indicator) action_link.loading_indicator.style.visibility = 'visible';
59
- action_link.disable();
60
- }
61
- }
62
- return true;
63
- });
64
- document.on('ajax:success', 'a.as_action', function(event) {
65
- var action_link = ActiveScaffold.ActionLink.get(event.findElement());
66
- if (action_link && event.memo && event.memo.request) {
67
- if (action_link.position) {
68
- action_link.insert(event.memo.request.transport.responseText);
69
- if (action_link.hide_target) action_link.target.hide();
70
- } else {
71
- //event.memo.request.evalResponse(); // (clyfe) prototype evals the response by itself checking headers, this would eval twice
72
- action_link.enable();
73
- }
74
- event.stop();
75
- }
76
- return true;
77
- });
78
- document.on('ajax:complete', 'a.as_action', function(event) {
79
- var action_link = ActiveScaffold.ActionLink.get(event.findElement());
80
- if (action_link && action_link.loading_indicator) {
81
- action_link.loading_indicator.style.visibility = 'hidden';
82
- }
83
- return true;
84
- });
85
- document.on('ajax:failure', 'a.as_action', function(event) {
86
- var action_link = ActiveScaffold.ActionLink.get(event.findElement());
87
- if (action_link) {
88
- ActiveScaffold.report_500_response(action_link.scaffold_id());
89
- action_link.enable();
90
- }
91
- return true;
92
- });
93
- document.on('ajax:before', 'a.as_cancel', function(event) {
94
- var as_cancel = event.findElement();
95
- var action_link = ActiveScaffold.find_action_link(as_cancel);
96
-
97
- if (action_link) {
98
- var refresh_data = action_link.readAttribute('data-cancel-refresh') || as_cancel.readAttribute('data-refresh');
99
- if (refresh_data && action_link.refresh_url) {
100
- event.memo.url = action_link.refresh_url;
101
- } else if (!refresh_data || as_cancel.readAttribute('href').blank()) {
102
- action_link.close();
103
- event.stop();
104
- }
105
- }
106
- return true;
107
- });
108
- document.on('ajax:success', 'a.as_cancel', function(event) {
109
- var action_link = ActiveScaffold.find_action_link(event.findElement());
110
- if (action_link) {
111
- if (action_link.position) {
112
- action_link.close();
113
- } else {
114
- event.memo.request.evalResponse();
115
- }
116
- }
117
- return true;
118
- });
119
- document.on('ajax:failure', 'a.as_cancel', function(event) {
120
- var action_link = ActiveScaffold.find_action_link(event.findElement());
121
- if (action_link) {
122
- ActiveScaffold.report_500_response(action_link.scaffold_id());
123
- }
124
- return true;
125
- });
126
- document.on('ajax:before', 'a.as_sort', function(event) {
127
- var as_sort = event.findElement();
128
- var history_controller_id = as_sort.readAttribute('data-page-history');
129
- if (history_controller_id) addActiveScaffoldPageToHistory(as_sort.readAttribute('href'), history_controller_id);
130
- as_sort.up('th').addClassName('loading');
131
- return true;
132
- });
133
- document.on('ajax:failure', 'a.as_sort', function(event) {
134
- var as_scaffold = event.findElement('.active-scaffold');
135
- ActiveScaffold.report_500_response(as_scaffold);
136
- return true;
137
- });
138
- document.on('mouseover', 'td.in_place_editor_field', function(event) {
139
- event.findElement('td.in_place_editor_field').select('span').invoke('addClassName', 'hover');
140
- });
141
- document.on('mouseout', 'td.in_place_editor_field', function(event) {
142
- event.findElement('td.in_place_editor_field').select('span').invoke('removeClassName', 'hover');
143
- });
144
- document.on('click', 'td.in_place_editor_field', function(event) {
145
- var td = event.findElement('td.in_place_editor_field'),
146
- span = td.down('span.in_place_editor_field');
147
- td.removeClassName('empty');
148
-
149
- if (typeof(span.inplace_edit) === 'undefined') {
150
- var options = {htmlResponse: false,
151
- onEnterHover: null,
152
- onLeaveHover: null,
153
- onComplete: null,
154
- params: '',
155
- externalControl: td.down('.handle'),
156
- ajaxOptions: {method: 'post'}},
157
- csrf_param = $$('meta[name=csrf-param]')[0],
158
- csrf_token = $$('meta[name=csrf-token]')[0],
159
- my_parent = span.up(),
160
- column_heading = null;
161
-
162
- if(!(my_parent.nodeName.toLowerCase() === 'td' || my_parent.nodeName.toLowerCase() === 'th')){
163
- my_parent = span.up('td');
164
- }
165
-
166
- if (my_parent.nodeName.toLowerCase() === 'td') {
167
- var heading_selector = '.' + span.up().readAttribute('class').split(' ')[0] + '_heading';
168
- column_heading = span.up('.active-scaffold').down(heading_selector);
169
- } else if (my_parent.nodeName.toLowerCase() === 'th') {
170
- column_heading = my_parent;
171
- }
172
-
173
- var render_url = column_heading.readAttribute('data-ie-render-url'),
174
- mode = column_heading.readAttribute('data-ie-mode'),
175
- record_id = span.readAttribute('data-ie-id') || '';
176
-
177
- ActiveScaffold.read_inplace_edit_heading_attributes(column_heading, options);
178
-
179
- if (span.readAttribute('data-ie-url')) {
180
- options.url = span.readAttribute('data-ie-url');
181
- } else {
182
- options.url = column_heading.readAttribute('data-ie-url');
183
- }
184
- options.url = options.url.sub('__id__', record_id);
185
-
186
- if (csrf_param) options['params'] = csrf_param.readAttribute('content') + '=' + csrf_token.readAttribute('content');
187
-
188
- if (span.up('div.active-scaffold').readAttribute('data-eid')) {
189
- if (options['params'].length > 0) {
190
- options['params'] += "&";
191
- }
192
- options['params'] += ("eid=" + span.up('div.active-scaffold').readAttribute('data-eid'));
193
- }
194
-
195
- if (mode === 'clone') {
196
- options.nodeIdSuffix = record_id;
197
- options.inplacePatternSelector = '#' + column_heading.readAttribute('id') + ' .as_inplace_pattern';
198
- options['onFormCustomization'] = new Function('element', 'form', 'element.clonePatternField();');
199
- }
200
-
201
- if (render_url) {
202
- var plural = false;
203
- if (column_heading.readAttribute('data-ie-plural')) plural = true;
204
- options['onFormCustomization'] = new Function('element', 'form', 'element.setFieldFromAjax(' + "'" + render_url.sub('__id__', record_id) + "', {plural: " + plural + '});');
205
- }
206
-
207
- if (mode === 'inline_checkbox') {
208
- ActiveScaffold.process_checkbox_inplace_edit(span.down('input[type="checkbox"]'), options);
209
- } else {
210
- ActiveScaffold.create_inplace_editor(span, options);
211
- }
212
- }
213
- return true;
214
- });
215
- document.on('ajax:before', 'a.as_paginate', function(event) {
216
- var as_paginate = event.findElement();
217
- var loading_indicator = as_paginate.up().down('img.loading-indicator');
218
- var history_controller_id = as_paginate.readAttribute('data-page-history');
219
-
220
- if (history_controller_id) addActiveScaffoldPageToHistory(as_paginate.readAttribute('href'), history_controller_id);
221
- if (loading_indicator) loading_indicator.style.visibility = 'visible';
222
- return true;
223
- });
224
- document.on('ajax:failure', 'a.as_paginate', function(event) {
225
- var as_scaffold = event.findElement('.active-scaffold');
226
- ActiveScaffold.report_500_response(as_scaffold);
227
- return true;
228
- });
229
- document.on('ajax:complete', 'a.as_paginate', function(event) {
230
- var as_paginate = event.findElement();
231
- var loading_indicator = as_paginate.up().down('img.loading-indicator');
232
-
233
- if(loading_indicator) loading_indicator.style.visibility = 'hidden';
234
- return true;
235
- });
236
- document.on('ajax:before', 'a.as_add_existing, a.as_replace_existing', function(event) {
237
- var button = event.findElement();
238
- var url = button.readAttribute('href').sub('--ID--', button.previous().getValue());
239
- event.memo.url = url;
240
- return true;
241
- });
242
- document.on('change', 'input.update_form, textarea.update_form, select.update_form', function(event) {
243
- var element = event.findElement();
244
- ActiveScaffold.update_column(element, element.readAttribute('data-update_url'), element.hasAttribute('data-update_send_form'), element.readAttribute('id'), element.getValue());
245
- return true;
246
- });
247
- document.on('recordselect:change', 'input.recordselect.update_form', function(event) {
248
- var element = event.findElement();
249
- ActiveScaffold.update_column(element, element.readAttribute('data-update_url'), element.hasAttribute('data-update_send_form'), element.readAttribute('id'), element.memo.id);
250
- return true;
251
- });
252
- document.on('change', 'select.as_search_range_option', function(event) {
253
- var element = event.findElement();
254
- Element[element.value == 'BETWEEN' ? 'show' : 'hide'](element.readAttribute('id').sub('_opt', '_between'));
255
- Element[(element.value == 'null' || element.value == 'not_null') ? 'hide' : 'show'](element.readAttribute('id').sub('_opt', '_numeric'));
256
- return true;
257
- });
258
- document.on('change', 'select.as_search_date_time_option', function(event) {
259
- var element = event.findElement();
260
- Element[!(element.value == 'PAST' || element.value == 'FUTURE' || element.value == 'RANGE') ? 'show' : 'hide'](element.readAttribute('id').sub('_opt', '_numeric'));
261
- Element[(element.value == 'PAST' || element.value == 'FUTURE') ? 'show' : 'hide'](element.readAttribute('id').sub('_opt', '_trend'));
262
- Element[element.value == 'RANGE' ? 'show' : 'hide'](element.readAttribute('id').sub('_opt', '_range'));
263
- return true;
264
- });
265
- document.on('change', 'select.as_update_date_operator', function(event) {
266
- var element = event.findElement();
267
- Element[element.value == 'REPLACE' ? 'show' : 'hide'](element.next());
268
- Element[element.value == 'REPLACE' ? 'show' : 'hide'](element.next().next());
269
- Element[element.value == 'REPLACE' ? 'hide' : 'show'](element.next('span'));
270
- return true;
271
- });
272
- document.on("click", "a[data-popup]", function(event, element) {
273
- if (event.stopped) return;
274
- window.open($(element).href);
275
- event.stop();
276
- });
277
- document.on("click", ".hover_click", function(event, element) {
278
- var ul_element = element.down('ul');
279
- if (ul_element.getStyle('display') === 'none') {
280
- ul_element.style.display = 'block';
281
- } else {
282
- ul_element.style.display = 'none';
283
- }
284
-
285
- return true;
286
- });
287
- document.on("click", ".hover_click a.as_action", function(event, element) {
288
- var element = element.up('.hover_click').down('ul');
289
- if (element) {
290
- element.style.display = 'none';
291
- }
292
- return true;
293
- });
294
- document.on('click', '.messages a.close', function(event, element) {
295
- ActiveScaffold.hide(element.up('.message'));
296
- event.stop();
297
- });
298
- });
299
-
300
-
301
- /*
302
- * Simple utility methods
303
- */
304
-
305
- var ActiveScaffold = {
306
- records_for: function(tbody_id) {
307
- var rows = [];
308
- var child = $(tbody_id).down('.record');
309
- while (child) {
310
- rows.push(child);
311
- child = child.next('.record');
312
- }
313
- return rows;
314
- },
315
- stripe: function(tbody_id) {
316
- var even = false;
317
- var rows = this.records_for(tbody_id);
318
- for (var i = 0; i < rows.length; i++) {
319
- var child = rows[i];
320
- //Make sure to skip rows that are create or edit rows or messages
321
- if (child.tagName != 'SCRIPT'
322
- && !child.hasClassName("create")
323
- && !child.hasClassName("update")
324
- && !child.hasClassName("inline-adapter")
325
- && !child.hasClassName("active-scaffold-calculations")) {
326
-
327
- if (even) child.addClassName("even-record");
328
- else child.removeClassName("even-record");
329
-
330
- even = !even;
331
- }
332
- }
333
- },
334
- hide_empty_message: function(tbody) {
335
- if (this.records_for(tbody).length != 0) {
336
- var empty_message_nodes = $(tbody).up().select('tbody.messages p.empty-message')
337
- empty_message_nodes.invoke('hide');
338
- }
339
- },
340
- reload_if_empty: function(tbody, url) {
341
- if (this.records_for(tbody).length == 0) {
342
- this.reload(url);
343
- }
344
- },
345
- reload: function(url) {
346
- new Ajax.Request(url, {
347
- method: 'get',
348
- asynchronous: true,
349
- evalScripts: true
350
- });
351
- },
352
- removeSortClasses: function(scaffold) {
353
- scaffold = $(scaffold)
354
- scaffold.select('td.sorted').each(function(element) {
355
- element.removeClassName("sorted");
356
- });
357
- scaffold.select('th.sorted').each(function(element) {
358
- element.removeClassName("sorted");
359
- element.removeClassName("asc");
360
- element.removeClassName("desc");
361
- });
362
- },
363
- decrement_record_count: function(scaffold) {
364
- // decrement the last record count, firsts record count are in nested lists
365
- scaffold = $(scaffold)
366
- count = scaffold.select('span.active-scaffold-records').last();
367
- if (count) count.update(parseInt(count.innerHTML, 10) - 1);
368
- },
369
- increment_record_count: function(scaffold) {
370
- // increment the last record count, firsts record count are in nested lists
371
- scaffold = $(scaffold)
372
- count = scaffold.select('span.active-scaffold-records').last();
373
- if (count) count.update(parseInt(count.innerHTML, 10) + 1);
374
- },
375
- update_row: function(row, html) {
376
- row = $(row);
377
- var new_row = this.replace(row, html)
378
- if (row.hasClassName('even-record')) new_row.addClassName('even-record');
379
- ActiveScaffold.highlight(new_row);
380
- },
381
-
382
- replace: function(element, html) {
383
- element = $(element)
384
- Element.replace(element, html);
385
- element = $(element.readAttribute('id'));
386
- return element;
387
- },
388
-
389
- replace_html: function(element, html) {
390
- element = $(element);
391
- element.update(html);
392
- return element;
393
- },
394
-
395
- remove: function(element) {
396
- $(element).remove();
397
- },
398
-
399
- update_inplace_edit: function(element, value, empty) {
400
- this.replace_html(element, value);
401
- if (empty) $(element).up('td').addClassName('empty');
402
- },
403
-
404
- hide: function(element) {
405
- $(element).hide();
406
- },
407
-
408
- show: function(element) {
409
- $(element).show();
410
- },
411
-
412
- reset_form: function(element) {
413
- $(element).reset();
414
- },
415
-
416
- disable_form: function(as_form) {
417
- as_form = $(as_form)
418
- var loading_indicator = $(as_form.readAttribute('id').sub('-form', '-loading-indicator'));
419
- if (loading_indicator) loading_indicator.style.visibility = 'visible';
420
- as_form.disable();
421
- },
422
-
423
- enable_form: function(as_form) {
424
- as_form = $(as_form)
425
- var loading_indicator = $(as_form.readAttribute('id').sub('-form', '-loading-indicator'));
426
- if (loading_indicator) loading_indicator.style.visibility = 'hidden';
427
- as_form.enable();
428
- },
429
-
430
- focus_first_element_of_form: function(form_element) {
431
- Form.focusFirstElement(form_element);
432
- },
433
-
434
- create_record_row: function(active_scaffold_id, html, options) {
435
- tbody = $(active_scaffold_id).down('tbody.records');
436
-
437
- var new_row = null;
438
-
439
- if (options.insert_at == 'top') {
440
- tbody.insert({top: html});
441
- new_row = tbody.firstDescendant();
442
- } else if (options.insert_at == 'bottom') {
443
- var last_row = tbody.childElements().reverse().detect(function(node) { return node.hasClassName('record') || node.hasClassName('inline-adapter')});
444
- if (last_row) {
445
- last_row.insert({after: html});
446
- } else {
447
- tbody.insert({bottom: html});
448
- }
449
- new_row = Selector.findChildElements(tbody, ['tr.record']).last();
450
- }
451
-
452
- this.stripe(tbody);
453
- this.hide_empty_message(tbody);
454
- this.increment_record_count(tbody.up('div.active-scaffold'));
455
- ActiveScaffold.highlight(new_row);
456
- },
457
-
458
- create_record_row_from_url: function(action_link, url, options) {
459
- new Ajax.Request(url, {
460
- method: 'get',
461
- onComplete: function(response) {
462
- ActiveScaffold.create_record_row(action_link.scaffold(), row, options);
463
- action_link.close();
464
- }
465
- });
466
- },
467
-
468
- delete_record_row: function(row, page_reload_url) {
469
- row = $(row);
470
- var tbody = row.up('tbody.records');
471
-
472
- var current_action_node = row.down('td.actions a.disabled');
473
-
474
- if (current_action_node) {
475
- var action_link = ActiveScaffold.ActionLink.get(current_action_node);
476
- if (action_link) {
477
- action_link.close_previous_adapter();
478
- }
479
- }
480
- row.remove();
481
- tbody = $(tbody);
482
- this.stripe(tbody);
483
- this.decrement_record_count(tbody.up('div.active-scaffold'));
484
- this.reload_if_empty(tbody, page_reload_url);
485
- },
486
-
487
- delete_subform_record: function(record) {
488
- var errors = $(record).previous();
489
- if (errors.hasClassName('association-record-errors')) {
490
- this.remove(errors);
491
- }
492
- var associated = $(record).next();
493
- this.remove(record);
494
- while (associated && associated.hasClassName('associated-record')) {
495
- record = associated;
496
- associated = $(record).next();
497
- this.remove(record);
498
- }
499
- },
500
-
501
- report_500_response: function(active_scaffold_id) {
502
- var server_error = $(active_scaffold_id).down('td.messages-container p.server-error');
503
- if (server_error.visible()) {
504
- ActiveScaffold.highlight(server_error);
505
- } else {
506
- server_error.show();
507
- }
508
- },
509
-
510
- find_action_link: function(element) {
511
- element = $(element);
512
- return ActiveScaffold.ActionLink.get(element.match('.actions a') ? element : element.up('.as_adapter'));
513
- },
514
-
515
- scroll_to: function(element, checkInViewport) {
516
- if (typeof checkInViewport == 'undefined') checkInViewport = true;
517
- var form_offset = $(element).viewportOffset().top;
518
- if (checkInViewport) {
519
- var docViewTop = document.viewport.getScrollOffsets().top,
520
- docViewBottom = docViewTop + document.viewport.getHeight();
521
- // If it's in viewport , don't scroll;
522
- if (form_offset + $(element).getHeight() <= docViewBottom && form_offset >= docViewTop) return;
523
- }
524
- $(element).scrollTo();
525
- },
526
-
527
- process_checkbox_inplace_edit: function(checkbox, options) {
528
- var checked = checkbox.readAttribute('checked');
529
- // checked attribute is nt updated
530
- if (checked !== 'checked') options['params'] += '&value=1';
531
- new Ajax.Request(options.url, {
532
- method: 'post',
533
- parameters: options['params'],
534
- onCreate: function(response) {
535
- checkbox.disable();
536
- },
537
- onComplete: function(response) {
538
- checkbox.enable();
539
- }
540
- });
541
- },
542
-
543
- read_inplace_edit_heading_attributes: function(column_heading, options) {
544
- if (column_heading.readAttribute('data-ie-cancel-text')) options.cancelText = column_heading.readAttribute('data-ie-cancel-text');
545
- if (column_heading.readAttribute('data-ie-loading-text')) options.loadingText = column_heading.readAttribute('data-ie-loading-text');
546
- if (column_heading.readAttribute('data-ie-saving-text')) options.savingText = column_heading.readAttribute('data-ie-saving-text');
547
- if (column_heading.readAttribute('data-ie-save-text')) options.okText = column_heading.readAttribute('data-ie-save-text');
548
- if (column_heading.readAttribute('data-ie-rows')) options.rows = column-heading.readAttribute('data-ie-rows');
549
- if (column_heading.readAttribute('data-ie-cols')) options.cols = column-heading.readAttribute('data-ie-cols');
550
- if (column_heading.readAttribute('data-ie-size')) options.size = column-heading.readAttribute('data-ie-size');
551
- },
552
-
553
- create_inplace_editor: function(span, options) {
554
- if (options['params'].length > 0) {
555
- options['callback'] = new Function('form', 'return Form.serialize(form) + ' + "'&" + options['params'] + "';");
556
- }
557
- span.removeClassName('hover');
558
- span.inplace_edit = new ActiveScaffold.InPlaceEditor(span.readAttribute('id'), options.url, options)
559
- span.inplace_edit.enterEditMode();
560
- },
561
-
562
- create_visibility_toggle: function(element, options) {
563
- var toggable = $(element);
564
- var toggler = toggable.previous();
565
- var initial_label = (options.default_visible === true) ? options.hide_label : options.show_label;
566
-
567
- toggler.insert(' (<a class="visibility-toggle" href="#">' + initial_label + '</a>)');
568
- toggler.firstDescendant().observe('click', function(event) {
569
- var element = event.element();
570
- toggable.toggle();
571
- element.innerHTML = (toggable.style.display == 'none') ? options.show_label : options.hide_label;
572
- return false;
573
- });
574
- },
575
-
576
- create_associated_record_form: function(element, content, options) {
577
- var element = $(element);
578
- if (options.singular == false) {
579
- if (!(options.id && $(options.id))) {
580
- element.insert(content);
581
- }
582
- } else {
583
- var current = $$('#' + element.readAttribute('id') + ' .association-record');
584
- if (current[0]) {
585
- this.replace(current[0], content);
586
- } else {
587
- element.insert({top: content});
588
- }
589
- }
590
- },
591
-
592
- render_form_field: function(source, content, options) {
593
- var source = $(source);
594
- var element = source.up('.association-record');
595
- if (typeof(element) === 'undefined') {
596
- element = source.up('ol.form');
597
- }
598
- element = element.down('.' + options.field_class);
599
-
600
- if (element) {
601
- if (options.is_subform == false) {
602
- this.replace(element.up('dl'), content);
603
- } else {
604
- this.replace_html(element, content);
605
- }
606
- }
607
- },
608
-
609
- record_select_onselect: function(edit_associated_url, active_scaffold_id, id){
610
- new Ajax.Request(
611
- edit_associated_url.sub('--ID--', id), {
612
- asynchronous: true,
613
- evalScripts: true,
614
- onFailure: function(){
615
- ActiveScaffold.report_500_response(active_scaffold_id.to_json)
616
- }
617
- }
618
- );
619
- },
620
-
621
- // element is tbody id
622
- mark_records: function(element, options) {
623
- var element = $(element);
624
- if (options.include_checkboxes) {
625
- var mark_checkboxes = $$('#' + element.readAttribute('id') + ' > tr.record td.marked-column input[type="checkbox"]');
626
- mark_checkboxes.each(function(item) {
627
- if(options.checked) {
628
- item.writeAttribute({ checked: 'checked' });
629
- } else {
630
- item.removeAttribute('checked');
631
- }
632
- item.writeAttribute('value', ('' + !options.checked));
633
- });
634
- }
635
- if(options.include_mark_all) {
636
- var mark_all_checkbox = element.previous('thead').down('th.marked-column_heading span input[type="checkbox"]');
637
- if(options.checked) {
638
- mark_all_checkbox.writeAttribute({ checked: 'checked' });
639
- } else {
640
- mark_all_checkbox.removeAttribute('checked');
641
- }
642
- mark_all_checkbox.writeAttribute('value', ('' + !options.checked));
643
- }
644
- },
645
-
646
- update_column: function(element, url, send_form, source_id, val) {
647
- if (!element) element = $(source_id);
648
-
649
- var as_form = element.up('form.as_form');
650
- var params = null;
651
-
652
- if (send_form) {
653
- var selector;
654
- if (selector = element.readAttribute('data-update_send_form_selector'))
655
- params = Form.serializeElements(as_form.getElementsBySelector(selector), true);
656
- else params = as_form.serialize(true);
657
- } else {
658
- params = {value: val};
659
- }
660
- params.source_id = source_id;
661
-
662
- new Ajax.Request(url, {
663
- method: 'get',
664
- parameters: params,
665
- onLoading: function(response) {
666
- element.next('img.loading-indicator').style.visibility = 'visible';
667
- as_form.disable();
668
- },
669
- onComplete: function(response) {
670
- element.next('img.loading-indicator').style.visibility = 'hidden';
671
- as_form.enable();
672
- },
673
- onFailure: function(request) {
674
- var as_div = event.findElement('div.active-scaffold');
675
- if (as_div) {
676
- ActiveScaffold.report_500_response(as_div)
677
- }
678
- }
679
- });
680
- },
681
-
682
- draggable_lists: function(element) {
683
- new DraggableLists(element);
684
- },
685
-
686
- highlight: function(element) {
687
- element = $(element);
688
- if (typeof(element.highlight) == 'function') {
689
- element.highlight(Object.extend({duration: 3}, ActiveScaffold.config.highlight));
690
- }
691
- }
692
- }
693
-
694
- /*
695
- * DHTML history tie-in
696
- */
697
- function addActiveScaffoldPageToHistory(url, active_scaffold_id) {
698
- if (typeof dhtmlHistory == 'undefined') return; // it may not be loaded
699
-
700
- var array = url.split('?');
701
- var qs = new Querystring(array[1]);
702
- var sort = qs.get('sort')
703
- var dir = qs.get('sort_direction')
704
- var page = qs.get('page')
705
- if (sort || dir || page) dhtmlHistory.add(active_scaffold_id+":"+page+":"+sort+":"+dir, url);
706
- }
707
-
708
- /*
709
- * Add-ons/Patches to Prototype
710
- */
711
-
712
- /* patch to support replacing TR/TD/TBODY in Internet Explorer, courtesy of http://dev.rubyonrails.org/ticket/4273 */
713
- Element.replace = function(element, html) {
714
- element = $(element);
715
- if (element.outerHTML) {
716
- try {
717
- element.outerHTML = html.stripScripts();
718
- } catch (e) {
719
- var tn = element.tagName;
720
- if(tn=='TBODY' || tn=='TR' || tn=='TD')
721
- {
722
- var tempDiv = document.createElement("div");
723
- tempDiv.innerHTML = '<table id="tempTable" style="display: none">' + html.stripScripts() + '</table>';
724
- element.parentNode.replaceChild(tempDiv.getElementsByTagName(tn).item(0), element);
725
- }
726
- else throw e;
727
- }
728
- } else {
729
- var range = element.ownerDocument.createRange();
730
- /* patch to fix <form> replaces in Firefox. see http://dev.rubyonrails.org/ticket/8010 */
731
- range.selectNodeContents(element.parentNode);
732
- element.parentNode.replaceChild(range.createContextualFragment(html.stripScripts()), element);
733
- }
734
- setTimeout(function() {html.evalScripts()}, 10);
735
- return element;
736
- };
737
-
738
- /*
739
- * URL modification support. Incomplete functionality.
740
- */
741
- Object.extend(String.prototype, {
742
- append_params: function(params) {
743
- url = this;
744
- if (url.indexOf('?') == -1) url += '?';
745
- else if (url.lastIndexOf('&') != url.length) url += '&';
746
-
747
- url += $H(params).collect(function(item) {
748
- return item.key + '=' + item.value;
749
- }).join('&');
750
-
751
- return url;
752
- }
753
- });
754
-
755
- /*
756
- * Prototype's implementation was throwing an error instead of false
757
- */
758
- Element.Methods.Simulated = {
759
- hasAttribute: function(element, attribute) {
760
- var t = Element._attributeTranslations;
761
- attribute = (t.names && t.names[attribute]) || attribute;
762
- // Return false if we get an error here
763
- try {
764
- return $(element).getAttributeNode(attribute).specified;
765
- } catch (e) {
766
- return false;
767
- }
768
- }
769
- };
770
-
771
- /**
772
- * A set of links. As a set, they can be controlled such that only one is "open" at a time, etc.
773
- */
774
- ActiveScaffold.Actions = new Object();
775
- ActiveScaffold.Actions.Abstract = Class.create({
776
- initialize: function(links, target, loading_indicator, options) {
777
- this.target = $(target);
778
- this.loading_indicator = $(loading_indicator);
779
- this.options = options;
780
- this.links = links.collect(function(link) {
781
- return this.instantiate_link(link);
782
- }.bind(this));
783
- },
784
-
785
- instantiate_link: function(link) {
786
- throw 'unimplemented'
787
- }
788
- });
789
-
790
- /**
791
- * A DataStructures::ActionLink, represented in JavaScript.
792
- * Concerned with AJAX-enabling a link and adapting the result for insertion into the table.
793
- */
794
- ActiveScaffold.ActionLink = {
795
- get: function(element) {
796
- var element = $(element);
797
- if (typeof(element.retrieve('action_link')) === 'undefined' && !element.hasClassName('as_adapter')) {
798
- var parent = element.up('.actions');
799
- if (typeof(parent) === 'undefined') {
800
- // maybe an column action_link
801
- parent = element.up();
802
- }
803
- if (parent && parent.nodeName.toUpperCase() == 'TD') {
804
- // record action
805
- parent = parent.up('tr.record')
806
- new ActiveScaffold.Actions.Record(parent.select('a.as_action'), parent, parent.down('td.actions .loading-indicator'));
807
- } else if (parent && parent.nodeName.toUpperCase() == 'DIV') {
808
- //table action
809
- new ActiveScaffold.Actions.Table(parent.select('a.as_action'), parent.up('div.active-scaffold').down('tbody.before-header'), parent.down('.loading-indicator'));
810
- }
811
- element = $(element);
812
- }
813
- return element.retrieve('action_link');
814
- }
815
- };
816
-
817
- ActiveScaffold.ActionLink.Abstract = Class.create({
818
- initialize: function(a, target, loading_indicator) {
819
- this.tag = $(a);
820
- this.url = this.tag.href;
821
- this.method = this.tag.readAttribute('data-method') || 'get';
822
- this.target = target;
823
- this.loading_indicator = loading_indicator;
824
- this.hide_target = false;
825
- this.position = this.tag.readAttribute('data-position');
826
-
827
- this.tag.store('action_link', this);
828
- },
829
-
830
- open: function(event) {
831
- this.tag.click();
832
- },
833
-
834
- insert: function(content) {
835
- throw 'unimplemented'
836
- },
837
-
838
- close: function() {
839
- this.enable();
840
- this.adapter.remove();
841
- if (this.hide_target) this.target.show();
842
- if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target.id, ActiveScaffold.config.scroll_on_close == 'checkInViewport');
843
- },
844
-
845
- get_new_adapter_id: function() {
846
- var id = 'adapter_';
847
- var i = 0;
848
- while ($(id + i)) i++;
849
- return id + i;
850
- },
851
-
852
- enable: function() {
853
- return this.tag.removeClassName('disabled');
854
- },
855
-
856
- disable: function() {
857
- return this.tag.addClassName('disabled');
858
- },
859
-
860
- is_disabled: function() {
861
- return this.tag.hasClassName('disabled');
862
- },
863
-
864
- scaffold_id: function() {
865
- return this.tag.up('div.active-scaffold').readAttribute('id');
866
- },
867
-
868
- scaffold: function() {
869
- return this.tag.up('div.active-scaffold');
870
- },
871
-
872
- update_flash_messages: function(messages) {
873
- message_node = $(this.scaffold_id().sub('-active-scaffold', '-messages'));
874
- if (message_node) message_node.update(messages);
875
- },
876
-
877
- set_adapter: function(element) {
878
- this.adapter = element;
879
- this.adapter.addClassName('as_adapter');
880
- this.adapter.store('action_link', this);
881
- }
882
- });
883
-
884
- /**
885
- * Concrete classes for record actions
886
- */
887
- ActiveScaffold.Actions.Record = Class.create(ActiveScaffold.Actions.Abstract, {
888
- instantiate_link: function(link) {
889
- var l = new ActiveScaffold.ActionLink.Record(link, this.target, this.loading_indicator);
890
- if (this.target.hasAttribute('data-refresh') && !this.target.readAttribute('data-refresh').blank()) l.refresh_url = this.target.readAttribute('data-refresh');
891
-
892
- if (l.position) {
893
- l.url = l.url.append_params({adapter: '_list_inline_adapter'});
894
- l.tag.href = l.url;
895
- }
896
- l.set = this;
897
- return l;
898
- }
899
- });
900
-
901
- ActiveScaffold.ActionLink.Record = Class.create(ActiveScaffold.ActionLink.Abstract, {
902
- close_previous_adapter: function() {
903
- this.set.links.each(function(item) {
904
- if (item.url != this.url && item.is_disabled() && item.adapter) {
905
- item.enable();
906
- item.adapter.remove();
907
- }
908
- }.bind(this));
909
- },
910
-
911
- insert: function(content) {
912
- this.close_previous_adapter();
913
-
914
- if (this.position == 'replace') {
915
- this.position = 'after';
916
- this.hide_target = true;
917
- }
918
-
919
- if (this.position == 'after') {
920
- this.target.insert({after:content});
921
- this.set_adapter(this.target.next());
922
- }
923
- else if (this.position == 'before') {
924
- this.target.insert({before:content});
925
- this.set_adapter(this.target.previous());
926
- }
927
- else {
928
- return false;
929
- }
930
- ActiveScaffold.highlight(this.adapter.down('td').down());
931
- },
932
-
933
- close: function($super, refreshed_content_or_reload) {
934
- $super();
935
- if (refreshed_content_or_reload) {
936
- if (typeof refreshed_content_or_reload == 'string') {
937
- ActiveScaffold.update_row(this.target, refreshed_content_or_update);
938
- } else if (this.refresh_url) {
939
- var target = this.target;
940
- new Ajax.Request(this.refresh_url, {
941
- method: 'get',
942
- onComplete: function(response) {
943
- ActiveScaffold.update_row(target, response.responseText);
944
- }
945
- });
946
- }
947
- }
948
- },
949
-
950
- enable: function() {
951
- this.set.links.each(function(item) {
952
- if (item.url != this.url) return;
953
- item.tag.removeClassName('disabled');
954
- }.bind(this));
955
- },
956
-
957
- disable: function() {
958
- this.set.links.each(function(item) {
959
- if (item.url != this.url) return;
960
- item.tag.addClassName('disabled');
961
- }.bind(this));
962
- },
963
-
964
- set_opened: function() {
965
- if (this.position == 'after') {
966
- this.set_adapter(this.target.next());
967
- }
968
- else if (this.position == 'before') {
969
- this.set_adapter(this.target.previous());
970
- }
971
- this.disable();
972
- }
973
- });
974
-
975
- /**
976
- * Concrete classes for table actions
977
- */
978
- ActiveScaffold.Actions.Table = Class.create(ActiveScaffold.Actions.Abstract, {
979
- instantiate_link: function(link) {
980
- var l = new ActiveScaffold.ActionLink.Table(link, this.target, this.loading_indicator);
981
- if (l.position) {
982
- l.url = l.url.append_params({adapter: '_list_inline_adapter'});
983
- l.tag.href = l.url;
984
- }
985
- return l;
986
- }
987
- });
988
-
989
- ActiveScaffold.ActionLink.Table = Class.create(ActiveScaffold.ActionLink.Abstract, {
990
- insert: function(content) {
991
- if (this.position == 'top') {
992
- this.target.insert({top:content});
993
- this.set_adapter(this.target.immediateDescendants().first());
994
- }
995
- else {
996
- throw 'Unknown position "' + this.position + '"'
997
- }
998
- ActiveScaffold.highlight(this.adapter.down('td').down());
999
- },
1000
-
1001
- reload: function() {
1002
- this.close();
1003
- this.open();
1004
- },
1005
- });
1006
-
1007
- if (Ajax.InPlaceEditor) {
1008
- ActiveScaffold.InPlaceEditor = Class.create(Ajax.InPlaceEditor, {
1009
- initialize: function($super, element, url, options) {
1010
- $super(element, url, options);
1011
- if (this._originalBackground == 'transparent') {
1012
- this._originalBackground = null;
1013
- }
1014
- },
1015
-
1016
- setFieldFromAjax: function(url, options) {
1017
- var ipe = this;
1018
- $(ipe._controls.editor).remove();
1019
- new Ajax.Request(url, {
1020
- method: 'get',
1021
- onComplete: function(response) {
1022
- ipe._form.insert({top: response.responseText});
1023
- if (options.plural) {
1024
- ipe._form.getElements().each(function(el) {
1025
- if (el.type != "submit" && el.type != "image") {
1026
- el.name = ipe.options.paramName + '[]';
1027
- el.className = 'editor_field';
1028
- }
1029
- });
1030
- } else {
1031
- var fld = ipe._form.findFirstElement();
1032
- fld.name = ipe.options.paramName;
1033
- fld.className = 'editor_field';
1034
- if (ipe.options.submitOnBlur)
1035
- fld.onblur = ipe._boundSubmitHandler;
1036
- ipe._controls.editor = fld;
1037
- }
1038
- }
1039
- });
1040
- },
1041
-
1042
- clonePatternField: function() {
1043
- var patternNodes = this.getPatternNodes(this.options.inplacePatternSelector);
1044
- if (patternNodes.editNode == null) {
1045
- alert('did not find any matching node for ' + this.options.editFieldSelector);
1046
- return;
1047
- }
1048
-
1049
- var fld = patternNodes.editNode.cloneNode(true);
1050
- if (fld.id.length > 0) fld.id += this.options.nodeIdSuffix;
1051
- fld.name = this.options.paramName;
1052
- fld.className = 'editor_field';
1053
- this.setValue(fld, this._controls.editor.value);
1054
- if (this.options.submitOnBlur)
1055
- fld.onblur = this._boundSubmitHandler;
1056
- $(this._controls.editor).remove();
1057
- this._controls.editor = fld;
1058
- this._form.appendChild(this._controls.editor);
1059
-
1060
- $A(patternNodes.additionalNodes).each(function(node) {
1061
- var patternNode = node.cloneNode(true);
1062
- if (patternNode.id.length > 0) {
1063
- patternNode.id = patternNode.id + this.options.nodeIdSuffix;
1064
- }
1065
- this._form.appendChild(patternNode);
1066
- }.bind(this));
1067
- },
1068
-
1069
- getPatternNodes: function(inplacePatternSelector) {
1070
- var nodes = {editNode: null, additionalNodes: []};
1071
- var selectedNodes = $$(inplacePatternSelector);
1072
- var firstNode = selectedNodes.first();
1073
-
1074
- if (typeof(firstNode) !== 'undefined') {
1075
- // AS inplace_edit_control_container -> we have to select all child nodes
1076
- // Workaround for ie which does not support css > selector
1077
- if (firstNode.className.indexOf('as_inplace_pattern') !== -1) {
1078
- selectedNodes = firstNode.childElements();
1079
- }
1080
- nodes.editNode = selectedNodes.first();
1081
- selectedNodes.shift();
1082
- nodes.additionalNodes = selectedNodes;
1083
- }
1084
- return nodes;
1085
- },
1086
-
1087
- setValue: function(editField, textValue) {
1088
- var function_name = 'setValueFor' + editField.nodeName.toLowerCase();
1089
- if (typeof(this[function_name]) == 'function') {
1090
- this[function_name](editField, textValue);
1091
- } else {
1092
- editField.value = textValue;
1093
- }
1094
- },
1095
-
1096
- setValueForselect: function(editField, textValue) {
1097
- var len = editField.options.length;
1098
- var i = 0;
1099
- while (i < len && editField.options[i].text != textValue) {
1100
- i++;
1101
- }
1102
- if (i < len) {
1103
- editField.value = editField.options[i].value
1104
- }
1105
- }
1106
- });
1107
- }