active_scaffold 3.2.7 → 3.2.8

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 (50) hide show
  1. data/CHANGELOG +16 -1
  2. data/app/assets/javascripts/jquery/active_scaffold.js +50 -16
  3. data/app/assets/javascripts/jquery/jquery.editinplace.js +6 -6
  4. data/app/assets/javascripts/prototype/active_scaffold.js +39 -15
  5. data/app/assets/stylesheets/active_scaffold_layout.css +24 -1
  6. data/frontends/default/views/_base_form.html.erb +9 -10
  7. data/frontends/default/views/_form.html.erb +8 -7
  8. data/frontends/default/views/_form_attribute.html.erb +6 -3
  9. data/frontends/default/views/_form_messages.html.erb +3 -3
  10. data/frontends/default/views/_horizontal_subform_record.html.erb +1 -1
  11. data/frontends/default/views/_list_calculations.html.erb +1 -1
  12. data/frontends/default/views/_list_messages.html.erb +10 -13
  13. data/frontends/default/views/_list_record_columns.html.erb +2 -2
  14. data/frontends/default/views/_messages.html.erb +1 -1
  15. data/frontends/default/views/_refresh_list.js.erb +1 -0
  16. data/frontends/default/views/_row.html.erb +2 -2
  17. data/frontends/default/views/_search.html.erb +2 -2
  18. data/frontends/default/views/_update_calculations.js.erb +4 -0
  19. data/frontends/default/views/_update_messages.js.erb +2 -0
  20. data/frontends/default/views/_vertical_subform_record.html.erb +1 -1
  21. data/frontends/default/views/add_existing.js.erb +2 -6
  22. data/frontends/default/views/destroy.js.erb +25 -23
  23. data/frontends/default/views/on_action_update.js.erb +21 -12
  24. data/frontends/default/views/on_create.js.erb +24 -21
  25. data/frontends/default/views/on_update.js.erb +19 -18
  26. data/frontends/default/views/refresh_list.js.erb +2 -1
  27. data/frontends/default/views/row.js.erb +1 -0
  28. data/frontends/default/views/update_column.js.erb +14 -15
  29. data/lib/active_scaffold.rb +1 -1
  30. data/lib/active_scaffold/actions/core.rb +6 -2
  31. data/lib/active_scaffold/actions/create.rb +9 -12
  32. data/lib/active_scaffold/actions/delete.rb +1 -4
  33. data/lib/active_scaffold/actions/list.rb +15 -12
  34. data/lib/active_scaffold/actions/mark.rb +1 -2
  35. data/lib/active_scaffold/actions/nested.rb +2 -1
  36. data/lib/active_scaffold/actions/update.rb +5 -8
  37. data/lib/active_scaffold/config/list.rb +18 -0
  38. data/lib/active_scaffold/constraints.rb +2 -12
  39. data/lib/active_scaffold/data_structures/column.rb +5 -2
  40. data/lib/active_scaffold/data_structures/nested_info.rb +6 -5
  41. data/lib/active_scaffold/finder.rb +11 -7
  42. data/lib/active_scaffold/helpers/controller_helpers.rb +16 -6
  43. data/lib/active_scaffold/helpers/form_column_helpers.rb +10 -20
  44. data/lib/active_scaffold/helpers/id_helpers.rb +2 -2
  45. data/lib/active_scaffold/helpers/list_column_helpers.rb +15 -20
  46. data/lib/active_scaffold/helpers/search_column_helpers.rb +15 -27
  47. data/lib/active_scaffold/helpers/show_column_helpers.rb +9 -20
  48. data/lib/active_scaffold/helpers/view_helpers.rb +20 -1
  49. data/lib/active_scaffold/version.rb +1 -1
  50. metadata +8 -4
data/CHANGELOG CHANGED
@@ -1,4 +1,19 @@
1
- = 3.2.7 (not released)
1
+ = 3.2.8 (not released)
2
+ - add deprecation for update_column, update_columns should be used instead
3
+ - fix constraints with hide_nested_column disabled in list and embedded scaffolds which are nested too
4
+ - fix setting a hash as includes, cannot be concat in finder
5
+ - add option to scroll on close only if element is not visible in viewport (default now)
6
+ - fix create and edit singular associations without render_component
7
+ - messages go across all table
8
+ - display readonly associations in forms, it was ready to display them but it was skipping them
9
+ - Some fixes for inplace editors (cloning form overrides, ajax and radiobuttons). Add handlers for empty columns
10
+ - add wrap_tag to list so cells content can be wrapped in a tag for better styling
11
+ - fix date picker parsing for datetime fields when jquery is used
12
+ - add as:element_updated js event when replace or replace_html is called
13
+ - rescue database exceptions so you get error messages for it insted of error 500, for example in case you forgot to check uniqueness for a unique index
14
+ - add class attribute for displayed unauthorized columns in forms, so they get same styling
15
+
16
+ = 3.2.7
2
17
  - restore missing update.persistent feature
3
18
  - fix create.persistent
4
19
  - add new record in first scaffold, not in all nested scaffolds
@@ -111,18 +111,23 @@ jQuery(document).ready(function() {
111
111
  ActiveScaffold.report_500_response(as_scaffold);
112
112
  return true;
113
113
  });
114
- jQuery('span.in_place_editor_field').live('hover', function(event) {
115
- jQuery(this).data(); // $ 1.4.2 workaround
114
+ jQuery('td.in_place_editor_field').live('hover', function(event) {
115
+ var td = jQuery(this), span = td.find('span.in_place_editor_field');
116
+ span.data(); // $ 1.4.2 workaround
116
117
  if (event.type == 'mouseenter') {
117
- if (typeof(jQuery(this).data('editInPlace')) === 'undefined') jQuery(this).addClass("hover");
118
+ if (td.hasClass('empty') || typeof(span.data('editInPlace')) === 'undefined') td.find('span').addClass("hover");
118
119
  }
119
120
  if (event.type == 'mouseleave') {
120
- if (typeof(jQuery(this).data('editInPlace')) === 'undefined') jQuery(this).removeClass("hover");
121
+ if (td.hasClass('empty') || typeof(span.data('editInPlace')) === 'undefined') td.find('span').removeClass("hover");
121
122
  }
122
123
  return true;
123
124
  });
124
- jQuery('span.in_place_editor_field').live('click', function(event) {
125
- ActiveScaffold.in_place_editor_field_clicked(jQuery(this));
125
+ jQuery('td.in_place_editor_field').live('click', function(event) {
126
+ var span = jQuery(this).find('span.in_place_editor_field');
127
+ span.data('addEmptyOnCancel', jQuery(this).hasClass('empty'));
128
+ jQuery(this).removeClass('empty');
129
+ if (span.data('editInPlace')) span.trigger('click.editInPlace');
130
+ else ActiveScaffold.in_place_editor_field_clicked(span);
126
131
  });
127
132
  jQuery('a.as_paginate').live('ajax:before',function(event) {
128
133
  var as_paginate = jQuery(this);
@@ -201,6 +206,11 @@ jQuery(document).ready(function() {
201
206
  }
202
207
  return true;
203
208
  });
209
+
210
+ jQuery('.message a.close').live('click', function(e) {
211
+ ActiveScaffold.hide(jQuery(this).closest('.message'));
212
+ e.preventDefault();
213
+ });
204
214
  });
205
215
 
206
216
  /* Simple Inheritance
@@ -361,9 +371,12 @@ var ActiveScaffold = {
361
371
  },
362
372
  reload_if_empty: function(tbody, url) {
363
373
  if (this.records_for(tbody).length == 0) {
364
- jQuery.getScript(url);
374
+ this.reload(url);
365
375
  }
366
376
  },
377
+ reload: function(url) {
378
+ jQuery.getScript(url);
379
+ },
367
380
  removeSortClasses: function(scaffold) {
368
381
  if (typeof(scaffold) == 'string') scaffold = '#' + scaffold;
369
382
  scaffold = jQuery(scaffold)
@@ -409,6 +422,7 @@ var ActiveScaffold = {
409
422
  if (element.attr('id')) {
410
423
  element = jQuery('#' + element.attr('id'));
411
424
  }
425
+ element.trigger('as:element_updated');
412
426
  return element;
413
427
  },
414
428
 
@@ -416,6 +430,7 @@ var ActiveScaffold = {
416
430
  if (typeof(element) == 'string') element = '#' + element;
417
431
  element = jQuery(element);
418
432
  element.html(html);
433
+ element.trigger('as:element_updated');
419
434
  return element;
420
435
  },
421
436
 
@@ -423,6 +438,12 @@ var ActiveScaffold = {
423
438
  if (typeof(element) == 'string') element = '#' + element;
424
439
  jQuery(element).remove();
425
440
  },
441
+
442
+ update_inplace_edit: function(element, value, empty) {
443
+ if (typeof(element) == 'string') element = '#' + element;
444
+ this.replace_html(jQuery(element), value);
445
+ if (empty) jQuery(element).closest('td').addClass('empty');
446
+ },
426
447
 
427
448
  hide: function(element) {
428
449
  if (typeof(element) == 'string') element = '#' + element;
@@ -528,15 +549,22 @@ var ActiveScaffold = {
528
549
 
529
550
  find_action_link: function(element) {
530
551
  if (typeof(element) == 'string') element = '#' + element;
531
- var as_adapter = jQuery(element).closest('.as_adapter');
532
- return ActiveScaffold.ActionLink.get(as_adapter);
552
+ element = jQuery(element);
553
+ return ActiveScaffold.ActionLink.get(element.is('.actions a') ? element : element.closest('.as_adapter'));
533
554
  },
534
555
 
535
- scroll_to: function(element) {
556
+ scroll_to: function(element, checkInViewport) {
557
+ if (typeof checkInViewport == 'undefined') checkInViewport = true;
536
558
  if (typeof(element) == 'string') element = '#' + element;
537
- var form_offset = jQuery(element).offset(),
538
- destination = form_offset.top;
539
- jQuery(document).scrollTop(destination);
559
+ var form_offset = jQuery(element).offset().top;
560
+ if (checkInViewport) {
561
+ var docViewTop = jQuery(window).scrollTop(),
562
+ docViewBottom = docViewTop + jQuery(window).height();
563
+ // If it's in viewport , don't scroll;
564
+ if (form_offset + jQuery(element).height() <= docViewBottom && form_offset >= docViewTop) return;
565
+ }
566
+
567
+ jQuery(document).scrollTop(form_offset);
540
568
  },
541
569
 
542
570
  process_checkbox_inplace_edit: function(checkbox, options) {
@@ -679,11 +707,17 @@ var ActiveScaffold = {
679
707
 
680
708
  in_place_editor_field_clicked: function(span) {
681
709
  span.data(); // $ 1.4.2 workaround
710
+ // test editor is open
682
711
  if (typeof(span.data('editInPlace')) === 'undefined') {
683
712
  var options = {show_buttons: true,
684
713
  hover_class: 'hover',
685
714
  element_id: 'editor_id',
686
715
  ajax_data_type: "script",
716
+ delegate: {
717
+ willCloseEditInPlace: function(span, options, enteredText) {
718
+ if (span.data('addEmptyOnCancel')) span.closest('td').addClass('empty');
719
+ }
720
+ },
687
721
  update_value: 'value'},
688
722
  csrf_param = jQuery('meta[name=csrf-param]').first(),
689
723
  csrf_token = jQuery('meta[name=csrf-token]').first(),
@@ -691,7 +725,7 @@ var ActiveScaffold = {
691
725
  column_heading = null;
692
726
 
693
727
  if(!(my_parent.is('td') || my_parent.is('th'))){
694
- my_parent = span.parents('td').eq(0);
728
+ my_parent = span.parents('td').eq(0);
695
729
  }
696
730
 
697
731
  if (my_parent.is('td')) {
@@ -897,7 +931,7 @@ ActiveScaffold.ActionLink.Abstract = Class.extend({
897
931
  this.enable();
898
932
  this.adapter.remove();
899
933
  if (this.hide_target) this.target.show();
900
- if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target);
934
+ if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target, ActiveScaffold.config.scroll_on_close == 'checkInViewport');
901
935
  },
902
936
 
903
937
  get_new_adapter_id: function() {
@@ -991,10 +1025,10 @@ ActiveScaffold.ActionLink.Record = ActiveScaffold.ActionLink.Abstract.extend({
991
1025
  },
992
1026
 
993
1027
  close: function(refreshed_content) {
1028
+ this._super();
994
1029
  if (refreshed_content) {
995
1030
  ActiveScaffold.update_row(this.target, refreshed_content);
996
1031
  }
997
- this._super();
998
1032
  },
999
1033
 
1000
1034
  enable: function() {
@@ -285,6 +285,7 @@ $.extend(InlineEditor.prototype, {
285
285
  },
286
286
 
287
287
  setInitialValue: function() {
288
+ if (this.settings.field_type == 'remote') return; // remote generated editor doesn't need initial value
288
289
  var initialValue = this.triggerDelegateCall('willOpenEditInPlace', this.originalValue);
289
290
  var editor = this.dom.find(':input');
290
291
  editor.val(initialValue);
@@ -312,7 +313,7 @@ $.extend(InlineEditor.prototype, {
312
313
 
313
314
  var editorNode = patternNodes.editNode.clone();
314
315
  var clonedNodes = null;
315
- if (editorNode.attr('id').length > 0) editorNode.attr('id', editorNode.attr('id') + this.settings.clone_id_suffix);
316
+ if (editorNode.attr('id')) editorNode.attr('id', editorNode.attr('id') + this.settings.clone_id_suffix);
316
317
  editorNode.attr('name', 'inplace_value');
317
318
  editorNode.addClass('editor_field');
318
319
  this.setValue(editorNode, this.originalValue);
@@ -321,7 +322,7 @@ $.extend(InlineEditor.prototype, {
321
322
  if (patternNodes.additionalNodes) {
322
323
  patternNodes.additionalNodes.each(function (index, node) {
323
324
  var patternNode = $(node).clone();
324
- if (patternNode.attr('id').length > 0) {
325
+ if (patternNode.attr('id')) {
325
326
  patternNode.attr('id', patternNode.attr('id') + this.settings.clone_id_suffix);
326
327
  }
327
328
  clonedNodes = clonedNodes.after(patternNode);
@@ -342,8 +343,7 @@ $.extend(InlineEditor.prototype, {
342
343
  selectedNodes = firstNode.children();
343
344
  }
344
345
  nodes.editNode = selectedNodes.first();
345
- // buggy...
346
- //nodes.additionalNodes = selectedNodes.find(':gt(0)');
346
+ nodes.additionalNodes = selectedNodes.slice(1);
347
347
  }
348
348
  return nodes;
349
349
  },
@@ -470,10 +470,10 @@ $.extend(InlineEditor.prototype, {
470
470
  if (false === this.triggerDelegateCall('shouldCloseEditInPlace', true, anEvent))
471
471
  return;
472
472
 
473
- var editor = this.dom.find(':input:not(:button)');
473
+ var editor = this.dom.find(':input:not(:button)').not('input:checkbox:not(:checked)').not('input:radio:not(:checked)');
474
474
  var enteredText = '';
475
475
  if (editor.length > 1) {
476
- enteredText = jQuery.map(editor.not('input:checkbox:not(:checked)'), function(item, index) {
476
+ enteredText = jQuery.map(editor, function(item, index) {
477
477
  return $(item).val();
478
478
  });
479
479
  } else {
@@ -135,14 +135,16 @@ document.observe("dom:loaded", function() {
135
135
  ActiveScaffold.report_500_response(as_scaffold);
136
136
  return true;
137
137
  });
138
- document.on('mouseover', 'span.in_place_editor_field', function(event) {
139
- event.findElement().addClassName('hover');
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
140
  });
141
- document.on('mouseout', 'span.in_place_editor_field', function(event) {
142
- event.findElement().removeClassName('hover');
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
143
  });
144
- document.on('click', 'span.in_place_editor_field', function(event) {
145
- var span = event.findElement('span.in_place_editor_field');
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');
146
148
 
147
149
  if (typeof(span.inplace_edit) === 'undefined') {
148
150
  var options = {htmlResponse: false,
@@ -150,6 +152,7 @@ document.observe("dom:loaded", function() {
150
152
  onLeaveHover: null,
151
153
  onComplete: null,
152
154
  params: '',
155
+ externalControl: td.down('.handle'),
153
156
  ajaxOptions: {method: 'post'}},
154
157
  csrf_param = $$('meta[name=csrf-param]')[0],
155
158
  csrf_token = $$('meta[name=csrf-token]')[0],
@@ -287,6 +290,10 @@ document.observe("dom:loaded", function() {
287
290
  }
288
291
  return true;
289
292
  });
293
+ document.on('click', '.messages a.close', function(event, element) {
294
+ ActiveScaffold.hide(element.up('.message'));
295
+ event.stop();
296
+ });
290
297
  });
291
298
 
292
299
 
@@ -331,13 +338,16 @@ var ActiveScaffold = {
331
338
  },
332
339
  reload_if_empty: function(tbody, url) {
333
340
  if (this.records_for(tbody).length == 0) {
334
- new Ajax.Request(url, {
335
- method: 'get',
336
- asynchronous: true,
337
- evalScripts: true
338
- });
341
+ this.reload(url);
339
342
  }
340
343
  },
344
+ reload: function(url) {
345
+ new Ajax.Request(url, {
346
+ method: 'get',
347
+ asynchronous: true,
348
+ evalScripts: true
349
+ });
350
+ },
341
351
  removeSortClasses: function(scaffold) {
342
352
  scaffold = $(scaffold)
343
353
  scaffold.select('td.sorted').each(function(element) {
@@ -385,6 +395,11 @@ var ActiveScaffold = {
385
395
  $(element).remove();
386
396
  },
387
397
 
398
+ update_inplace_edit: function(element, value, empty) {
399
+ this.replace_html(element, value);
400
+ if (empty) $(element).up('td').addClassName('empty');
401
+ },
402
+
388
403
  hide: function(element) {
389
404
  $(element).hide();
390
405
  },
@@ -482,10 +497,19 @@ var ActiveScaffold = {
482
497
  },
483
498
 
484
499
  find_action_link: function(element) {
485
- return ActiveScaffold.ActionLink.get($(element).up('.as_adapter'));
500
+ element = $(element);
501
+ return ActiveScaffold.ActionLink.get(element.match('.actions a') ? element : element.up('.as_adapter'));
486
502
  },
487
503
 
488
- scroll_to: function(element) {
504
+ scroll_to: function(element, checkInViewport) {
505
+ if (typeof checkInViewport == 'undefined') checkInViewport = true;
506
+ var form_offset = $(element).viewportOffset().top;
507
+ if (checkInViewport) {
508
+ var docViewTop = document.viewport.getScrollOffsets().top,
509
+ docViewBottom = docViewTop + document.viewport.getHeight();
510
+ // If it's in viewport , don't scroll;
511
+ if (form_offset + $(element).getHeight() <= docViewBottom && form_offset >= docViewTop) return;
512
+ }
489
513
  $(element).scrollTo();
490
514
  },
491
515
 
@@ -795,7 +819,7 @@ ActiveScaffold.ActionLink.Abstract = Class.create({
795
819
  this.enable();
796
820
  this.adapter.remove();
797
821
  if (this.hide_target) this.target.show();
798
- if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target);
822
+ if (ActiveScaffold.config.scroll_on_close) ActiveScaffold.scroll_to(this.target, ActiveScaffold.config.scroll_on_close == 'checkInViewport');
799
823
  },
800
824
 
801
825
  get_new_adapter_id: function() {
@@ -887,10 +911,10 @@ ActiveScaffold.ActionLink.Record = Class.create(ActiveScaffold.ActionLink.Abstra
887
911
  },
888
912
 
889
913
  close: function($super, refreshed_content) {
914
+ $super();
890
915
  if (refreshed_content) {
891
916
  ActiveScaffold.update_row(this.target, refreshed_content);
892
917
  }
893
- $super();
894
918
  },
895
919
 
896
920
  enable: function() {
@@ -203,6 +203,12 @@ padding: 0px;
203
203
  .active-scaffold tbody.records td.empty {
204
204
  text-align: center;
205
205
  }
206
+ .active-scaffold tbody.records td.in_place_editor_field .handle {
207
+ display:none;
208
+ }
209
+ .active-scaffold tbody.records td.in_place_editor_field.empty .handle {
210
+ display:inline;
211
+ }
206
212
 
207
213
  .active-scaffold td.numeric,
208
214
  .active-scaffold-calculations td {
@@ -433,6 +439,7 @@ border: none;
433
439
  .active-scaffold .empty-message, .active-scaffold .filtered-message {
434
440
  padding: 4px;
435
441
  text-align: center;
442
+ position: relative;
436
443
  }
437
444
 
438
445
  .active-scaffold .message {
@@ -444,7 +451,15 @@ margin: 2px 7px;
444
451
  line-height: 12px;
445
452
  }
446
453
 
447
- .active-scaffold .message a {
454
+ .active-scaffold .filtered-message .reset {
455
+ position: absolute;
456
+ display: inline;
457
+ right: 10px;
458
+ top: 4px;
459
+ padding: 0;
460
+ }
461
+
462
+ .active-scaffold .message a.close {
448
463
  position: absolute;
449
464
  right: 10px;
450
465
  top: 4px;
@@ -594,6 +609,14 @@ padding: 2px;
594
609
  margin-left: 5px;
595
610
  list-style: none;
596
611
  }
612
+ .active-scaffold ol:after {
613
+ content: '.';
614
+ visibility: hidden;
615
+ line-height: 0;
616
+ height: 0;
617
+ display: block;
618
+ clear: both;
619
+ }
597
620
 
598
621
  .active-scaffold p.form-footer {
599
622
  clear: both;
@@ -1,4 +1,6 @@
1
- <% url_options ||= params_for(:action => form_action)
1
+ <% scope ||= nil
2
+ footer_extension ||= nil
3
+ url_options ||= params_for(:action => form_action)
2
4
  xhr = request.xhr? if xhr.nil?
3
5
  if active_scaffold_config.actions.include? form_action
4
6
  multipart ||= active_scaffold_config.send(form_action).multipart?
@@ -7,6 +9,9 @@
7
9
  multipart ||= false
8
10
  columns ||= nil
9
11
  end
12
+ method ||= :post
13
+ cancel_link = true if cancel_link.nil?
14
+ submit_text ||= form_action
10
15
  body_partial ||= 'form' %>
11
16
  <%=
12
17
  options = {:onsubmit => onsubmit,
@@ -29,22 +34,16 @@ end
29
34
  <h4><%= headline -%></h4>
30
35
 
31
36
  <div id="<%= element_messages_id(:action => form_action) %>" class="messages-container">
32
- <% if request.xhr? -%>
33
- <% records = @error_records || Array(@record)
34
- records.each do |record| %>
35
- <%= active_scaffold_error_messages_for record, :object_name => "#{record.class.model_name.human.downcase}#{record.new_record? ? '' : ": #{record.to_label}"}" %>
36
- <% end %>
37
- <% else -%>
38
37
  <%= render :partial => 'form_messages' %>
39
- <% end -%>
40
38
  </div>
41
39
 
42
- <%= render :partial => body_partial, :locals => { :columns => columns, :form_action => form_action } %>
40
+ <%= render :partial => body_partial, :locals => { :columns => columns, :form_action => form_action, :scope => scope } %>
43
41
 
44
42
  <p class="form-footer">
45
- <%= submit_tag as_(form_action), :class => "submit" %>
43
+ <%= submit_tag as_(submit_text), :class => "submit" %>
46
44
  <%= link_to(as_(:cancel), main_path_to_return, cancel_options) if cancel_link %>
47
45
  <%= loading_indicator_tag(:action => form_action, :id => params[:id]) %>
46
+ <%= render :partial => footer_extension, :locals => { :form_action => form_action } if footer_extension %>
48
47
  </p>
49
48
 
50
49
  </form>
@@ -1,5 +1,8 @@
1
- <% subsection_id ||= nil %>
2
- <% show_unauthorized_columns = active_scaffold_config.send(form_action).show_unauthorized_columns %>
1
+ <%
2
+ scope ||= nil
3
+ subsection_id ||= nil
4
+ show_unauthorized_columns = active_scaffold_config.send(form_action).show_unauthorized_columns
5
+ %>
3
6
  <ol class="form" <%= "id=#{subsection_id}" unless subsection_id.nil? %> <%= "style=\"display: none;\"".html_safe if columns.collapsed %>>
4
7
  <% columns.each :for => @record, :crud_type => (:read if show_unauthorized_columns) do |column| %>
5
8
  <% authorized = show_unauthorized_columns ? @record.authorized_for?(:crud_type => form_action, :column => column.name) : true %>
@@ -8,18 +11,16 @@
8
11
  <% subsection_id = sub_section_id(:sub_section => column.label) %>
9
12
  <li class="sub-section <%= column.css_class %>">
10
13
  <h5><%= column.label %></h5>
11
- <%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id, :form_action => form_action } %>
14
+ <%= render :partial => 'form', :locals => { :columns => column, :subsection_id => subsection_id, :form_action => form_action, :scope => scope } %>
12
15
  <%= link_to_visibility_toggle(subsection_id, {:default_visible => !column.collapsed}) -%>
13
16
  </li>
14
- <% elsif column.readonly_association?
15
- next %>
16
17
  <% elsif renders_as == :subform and !override_form_field?(column) and authorized -%>
17
18
  <li class="sub-form <%= active_scaffold_config_for(column.association.klass).subform.layout %>-sub-form <%= column.css_class unless column.css_class.nil? || column.css_class.is_a?(Proc) %> <%=column.name%>-sub-form" id="<%= sub_form_id(:association => column.name) %>">
18
- <%=raw render :partial => form_partial_for_column(column, renders_as), :locals => { :column => column } -%>
19
+ <%=raw render :partial => form_partial_for_column(column, renders_as), :locals => { :column => column, :scope => scope } -%>
19
20
  </li>
20
21
  <% else -%>
21
22
  <li class="form-element <%= 'required' if column.required? %> <%= column.css_class unless column.css_class.nil? || column.css_class.is_a?(Proc) %>">
22
- <%=raw render :partial => form_partial_for_column(column, renders_as), :locals => { :column => column, :only_value => !authorized } -%>
23
+ <%=raw render :partial => form_partial_for_column(column, renders_as), :locals => { :column => column, :only_value => !authorized, :scope => scope } -%>
23
24
  </li>
24
25
  <% end -%>
25
26
  <% end -%>