active_scaffold 3.3.3 → 3.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +39 -0
- data/README.md +5 -3
- data/app/assets/images/active_scaffold/refresh.png +0 -0
- data/app/assets/javascripts/jquery/active_scaffold.js +182 -91
- data/app/assets/javascripts/jquery/date_picker_bridge.js.erb +14 -16
- data/app/assets/javascripts/jquery/draggable_lists.js +33 -26
- data/app/assets/javascripts/jquery/jquery.editinplace.js +3 -3
- data/app/assets/javascripts/prototype/active_scaffold.js +61 -19
- data/app/assets/stylesheets/active_scaffold_colors.css.scss +4 -0
- data/app/assets/stylesheets/active_scaffold_images.css.scss +3 -0
- data/app/assets/stylesheets/active_scaffold_layout.css +23 -2
- data/app/views/active_scaffold_overrides/_add_existing_form.html.erb +1 -3
- data/app/views/active_scaffold_overrides/_base_form.html.erb +7 -5
- data/app/views/active_scaffold_overrides/_field_search.html.erb +1 -2
- data/app/views/active_scaffold_overrides/_form.html.erb +6 -4
- data/app/views/active_scaffold_overrides/_form_association.html.erb +4 -3
- data/app/views/active_scaffold_overrides/_form_association_footer.html.erb +5 -5
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +8 -6
- data/app/views/active_scaffold_overrides/_horizontal_subform_header.html.erb +3 -2
- data/app/views/active_scaffold_overrides/_list.html.erb +8 -6
- data/app/views/active_scaffold_overrides/_list_column_headings.html.erb +1 -4
- data/app/views/active_scaffold_overrides/_list_pagination.html.erb +4 -4
- data/app/views/active_scaffold_overrides/_list_pagination_links.html.erb +1 -1
- data/app/views/active_scaffold_overrides/_list_record.html.erb +3 -3
- data/app/views/active_scaffold_overrides/_refresh_list.js.erb +8 -1
- data/app/views/active_scaffold_overrides/_search.html.erb +7 -13
- data/app/views/active_scaffold_overrides/_show_columns.html.erb +1 -1
- data/app/views/active_scaffold_overrides/on_create.js.erb +4 -4
- data/app/views/active_scaffold_overrides/render_field_inplace.html.erb +1 -1
- data/app/views/active_scaffold_overrides/row.js.erb +1 -1
- data/config/locales/de.yml +106 -95
- data/config/locales/en.yml +108 -97
- data/config/locales/es.yml +109 -98
- data/config/locales/fr.yml +108 -97
- data/config/locales/hu.yml +109 -98
- data/config/locales/ja.yml +100 -89
- data/config/locales/ru.yml +115 -104
- data/lib/active_scaffold.rb +18 -294
- data/lib/active_scaffold/actions/common_search.rb +50 -17
- data/lib/active_scaffold/actions/core.rb +93 -22
- data/lib/active_scaffold/actions/create.rb +15 -6
- data/lib/active_scaffold/actions/field_search.rb +68 -60
- data/lib/active_scaffold/actions/list.rb +49 -28
- data/lib/active_scaffold/actions/nested.rb +14 -6
- data/lib/active_scaffold/actions/search.rb +36 -35
- data/lib/active_scaffold/actions/show.rb +9 -4
- data/lib/active_scaffold/actions/subform.rb +1 -1
- data/lib/active_scaffold/actions/update.rb +22 -7
- data/lib/active_scaffold/active_record_permissions.rb +125 -118
- data/lib/active_scaffold/attribute_params.rb +84 -66
- data/lib/active_scaffold/bridges.rb +3 -3
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +10 -5
- data/lib/active_scaffold/bridges/cancan.rb +2 -1
- data/lib/active_scaffold/bridges/cancan/cancan_bridge.rb +13 -2
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +11 -6
- data/lib/active_scaffold/bridges/chosen/helpers.rb +2 -2
- data/lib/active_scaffold/bridges/country_helper/country_helper_bridge.rb +45 -29
- data/lib/active_scaffold/bridges/date_picker/ext.rb +11 -6
- data/lib/active_scaffold/bridges/date_picker/helper.rb +5 -1
- data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +10 -5
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +6 -1
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +12 -11
- data/lib/active_scaffold/bridges/paperclip/form_ui.rb +14 -6
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +15 -12
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +7 -8
- data/lib/active_scaffold/bridges/tiny_mce.rb +5 -3
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +4 -5
- data/lib/active_scaffold/config/base.rb +4 -0
- data/lib/active_scaffold/config/core.rb +12 -5
- data/lib/active_scaffold/config/delete.rb +0 -2
- data/lib/active_scaffold/config/field_search.rb +1 -4
- data/lib/active_scaffold/config/form.rb +0 -2
- data/lib/active_scaffold/config/list.rb +31 -1
- data/lib/active_scaffold/config/search.rb +0 -3
- data/lib/active_scaffold/config/show.rb +0 -6
- data/lib/active_scaffold/config/subform.rb +1 -0
- data/lib/active_scaffold/configurable.rb +2 -2
- data/lib/active_scaffold/constraints.rb +11 -14
- data/lib/active_scaffold/core.rb +277 -0
- data/lib/active_scaffold/data_structures/action_columns.rb +18 -2
- data/lib/active_scaffold/data_structures/action_link.rb +25 -6
- data/lib/active_scaffold/data_structures/action_links.rb +9 -4
- data/lib/active_scaffold/data_structures/actions.rb +1 -1
- data/lib/active_scaffold/data_structures/column.rb +6 -6
- data/lib/active_scaffold/data_structures/columns.rb +2 -2
- data/lib/active_scaffold/data_structures/nested_info.rb +5 -1
- data/lib/active_scaffold/data_structures/sorting.rb +15 -5
- data/lib/active_scaffold/delayed_setup.rb +30 -0
- data/lib/active_scaffold/engine.rb +25 -0
- data/lib/active_scaffold/extensions/action_view_rendering.rb +1 -1
- data/lib/active_scaffold/extensions/left_outer_joins.rb +61 -21
- data/lib/active_scaffold/extensions/localize.rb +1 -1
- data/lib/active_scaffold/extensions/name_option_for_datetime.rb +13 -8
- data/lib/active_scaffold/extensions/paginator_extensions.rb +5 -1
- data/lib/active_scaffold/extensions/reverse_associations.rb +1 -0
- data/lib/active_scaffold/extensions/routing_mapper.rb +1 -1
- data/lib/active_scaffold/extensions/unsaved_record.rb +4 -6
- data/lib/active_scaffold/finder.rb +79 -27
- data/lib/active_scaffold/helpers/association_helpers.rb +48 -18
- data/lib/active_scaffold/helpers/controller_helpers.rb +19 -10
- data/lib/active_scaffold/helpers/form_column_helpers.rb +185 -87
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +2 -1
- data/lib/active_scaffold/helpers/id_helpers.rb +14 -8
- data/lib/active_scaffold/helpers/list_column_helpers.rb +65 -56
- data/lib/active_scaffold/helpers/pagination_helpers.rb +5 -1
- data/lib/active_scaffold/helpers/search_column_helpers.rb +21 -18
- data/lib/active_scaffold/helpers/view_helpers.rb +102 -64
- data/lib/active_scaffold/responds_to_parent.rb +39 -64
- data/lib/active_scaffold/tableless.rb +129 -10
- data/lib/active_scaffold/version.rb +2 -2
- data/test/bridges/bridge_test.rb +1 -1
- data/test/bridges/date_picker_test.rb +2 -2
- data/test/bridges/paperclip_test.rb +10 -8
- data/test/bridges/tiny_mce_test.rb +2 -2
- data/test/company.rb +22 -10
- data/test/config/base_test.rb +1 -1
- data/test/config/core_test.rb +8 -6
- data/test/config/create_test.rb +6 -6
- data/test/config/delete_test.rb +4 -4
- data/test/config/field_search_test.rb +6 -6
- data/test/config/list_test.rb +7 -7
- data/test/config/nested_test.rb +8 -7
- data/test/config/search_test.rb +7 -7
- data/test/config/show_test.rb +5 -5
- data/test/config/subform_test.rb +1 -1
- data/test/config/update_test.rb +5 -4
- data/test/data_structures/action_columns_test.rb +15 -16
- data/test/data_structures/action_link_test.rb +10 -10
- data/test/data_structures/action_links_test.rb +6 -6
- data/test/data_structures/actions_test.rb +4 -4
- data/test/data_structures/association_column_test.rb +4 -4
- data/test/data_structures/column_test.rb +9 -9
- data/test/data_structures/columns_test.rb +7 -7
- data/test/data_structures/error_message_test.rb +2 -4
- data/test/data_structures/set_test.rb +13 -13
- data/test/data_structures/sorting_test.rb +8 -8
- data/test/data_structures/standard_column_test.rb +2 -2
- data/test/data_structures/validation_reflection_test.rb +8 -8
- data/test/data_structures/virtual_column_test.rb +5 -5
- data/test/extensions/active_record_test.rb +1 -1
- data/test/helpers/form_column_helpers_test.rb +5 -5
- data/test/helpers/list_column_helpers_test.rb +2 -1
- data/test/helpers/pagination_helpers_test.rb +1 -1
- data/test/misc/active_record_permissions_test.rb +23 -4
- data/test/misc/attribute_params_test.rb +304 -136
- data/test/misc/calculation_test.rb +55 -0
- data/test/misc/configurable_test.rb +22 -21
- data/test/misc/constraints_test.rb +10 -7
- data/test/misc/convert_numbers_format_test.rb +149 -0
- data/test/misc/finder_test.rb +17 -13
- data/test/misc/lang_test.rb +1 -1
- data/test/misc/tableless_test.rb +18 -0
- data/test/mock_app/app/controllers/addresses_controller.rb +4 -0
- data/test/mock_app/app/controllers/buildings_controller.rb +4 -0
- data/test/mock_app/app/controllers/cars_controller.rb +4 -0
- data/test/mock_app/app/controllers/contacts_controller.rb +4 -0
- data/test/mock_app/app/controllers/floors_controller.rb +6 -0
- data/test/mock_app/app/controllers/people_controller.rb +4 -0
- data/test/mock_app/app/models/address.rb +3 -0
- data/test/mock_app/app/models/building.rb +8 -0
- data/test/mock_app/app/models/car.rb +3 -0
- data/test/mock_app/app/models/contact.rb +3 -0
- data/test/mock_app/app/models/file_model.rb +19 -0
- data/test/mock_app/app/models/floor.rb +8 -0
- data/test/mock_app/app/models/person.rb +11 -0
- data/test/mock_app/config/application.rb +2 -0
- data/test/mock_app/config/environments/test.rb +1 -1
- data/test/mock_app/config/initializers/secret_token.rb +5 -1
- data/test/mock_app/config/routes.rb +1 -1
- data/test/mock_app/db/schema.rb +51 -0
- data/test/model_stub.rb +3 -3
- data/test/test_helper.rb +15 -12
- metadata +51 -50
- data/lib/active_scaffold/extensions/array.rb +0 -7
- data/lib/active_scaffold/extensions/cache_association.rb +0 -16
- data/lib/active_scaffold/extensions/usa_state.rb +0 -46
- data/lib/active_scaffold_env.rb +0 -13
- data/test/extensions/array_test.rb +0 -12
- data/test/mock_app/public/blank.html +0 -33
- data/test/mock_app/public/images/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/images/active_scaffold/default/add.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_down.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/arrow_up.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/close.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/cross.png +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator-small.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/indicator.gif +0 -0
- data/test/mock_app/public/images/active_scaffold/default/magnifier.png +0 -0
- data/test/mock_app/public/javascripts/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/javascripts/active_scaffold/default/active_scaffold.js +0 -532
- data/test/mock_app/public/javascripts/active_scaffold/default/dhtml_history.js +0 -867
- data/test/mock_app/public/javascripts/active_scaffold/default/form_enhancements.js +0 -117
- data/test/mock_app/public/javascripts/active_scaffold/default/rico_corner.js +0 -370
- data/test/mock_app/public/stylesheets/active_scaffold/DO_NOT_EDIT +0 -2
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet-ie.css +0 -35
- data/test/mock_app/public/stylesheets/active_scaffold/default/stylesheet.css +0 -848
@@ -1,25 +1,23 @@
|
|
1
1
|
<%# encoding: utf-8 %>
|
2
2
|
<%= ActiveScaffold::Bridges[:date_picker].localization %>
|
3
|
-
jQuery(
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
inlineSettings[attrName] = attrValue;
|
16
|
-
}
|
3
|
+
Object.getPrototypeOf(jQuery.datepicker)._attachDatepicker_without_inlineSettings = Object.getPrototypeOf(jQuery.datepicker)._attachDatepicker;
|
4
|
+
jQuery.extend(Object.getPrototypeOf(jQuery.datepicker), {
|
5
|
+
_attachDatepicker: function(target, settings) {
|
6
|
+
var inlineSettings = {}, $target = jQuery(target);
|
7
|
+
for (var attrName in this._defaults) {
|
8
|
+
if(this._defaults.hasOwnProperty(attrName)){
|
9
|
+
var attrValue = $target.data(attrName.toLowerCase());
|
10
|
+
if (attrValue) {
|
11
|
+
try {
|
12
|
+
inlineSettings[attrName] = eval(attrValue);
|
13
|
+
} catch (err) {
|
14
|
+
inlineSettings[attrName] = attrValue;
|
17
15
|
}
|
18
16
|
}
|
19
17
|
}
|
20
|
-
this._attachDatepicker_without_inlineSettings(target, $.extend({}, settings || {}, inlineSettings));
|
21
18
|
}
|
22
|
-
|
19
|
+
this._attachDatepicker_without_inlineSettings(target, jQuery.extend({}, settings || {}, inlineSettings));
|
20
|
+
}
|
23
21
|
});
|
24
22
|
jQuery(document).on("focus", "input.date_picker", function(){
|
25
23
|
var date_picker = jQuery(this);
|
@@ -1,26 +1,33 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
}
|
1
|
+
(function() {
|
2
|
+
function enableDraggableLists(element) {
|
3
|
+
if (element.hasClass('draggable-list')) return;
|
4
|
+
element.addClass('draggable-list');
|
5
|
+
var list_selected = jQuery(element.get(0).cloneNode(false)).addClass('selected');
|
6
|
+
list_selected.attr('id', list_selected.attr('id') + '_selected').insertAfter(element);
|
7
|
+
element.find('input:checkbox').each(function(index, item) {
|
8
|
+
var li = jQuery(item).closest('li').addClass('draggable-item');
|
9
|
+
li.children('label').removeAttr('for');
|
10
|
+
if (jQuery(item).is(':checked')) li.appendTo(list_selected);
|
11
|
+
li.draggable({appendTo: 'body', helper: 'clone'});
|
12
|
+
});
|
13
|
+
jQuery([element, list_selected]).droppable({
|
14
|
+
hoverClass: 'hover',
|
15
|
+
accept: function(draggable) {
|
16
|
+
var parent_id = draggable.parent().attr('id'), id = jQuery(this).attr('id'),
|
17
|
+
requested_id = jQuery(this).hasClass('selected') ? id.replace('_selected', '') : id + '_selected';
|
18
|
+
return parent_id == requested_id;
|
19
|
+
},
|
20
|
+
drop: function(event, ui) {
|
21
|
+
jQuery(this).append(ui.draggable);
|
22
|
+
var input = jQuery('input:checkbox', ui.draggable);
|
23
|
+
input.prop('checked', jQuery(this).hasClass('selected'));
|
24
|
+
input.trigger('change');
|
25
|
+
ui.draggable.css({left: '0px', top: '0px'});
|
26
|
+
}
|
27
|
+
});
|
28
|
+
return element;
|
29
|
+
};
|
30
|
+
jQuery.fn.draggableLists = function() {
|
31
|
+
this.each(function() { enableDraggableLists(jQuery(this)); });
|
32
|
+
};
|
33
|
+
})();
|
@@ -314,7 +314,7 @@ $.extend(InlineEditor.prototype, {
|
|
314
314
|
|
315
315
|
var editorNode = patternNodes.editNode.clone();
|
316
316
|
var clonedNodes = null;
|
317
|
-
if (editorNode.
|
317
|
+
if (editorNode.data('id')) editorNode.attr('id', editorNode.data('id') + this.settings.clone_id_suffix);
|
318
318
|
editorNode.attr('name', 'inplace_value');
|
319
319
|
editorNode.addClass('editor_field');
|
320
320
|
this.setValue(editorNode, this.originalValue);
|
@@ -323,8 +323,8 @@ $.extend(InlineEditor.prototype, {
|
|
323
323
|
if (patternNodes.additionalNodes) {
|
324
324
|
patternNodes.additionalNodes.each(function (index, node) {
|
325
325
|
var patternNode = $(node).clone();
|
326
|
-
if (patternNode.
|
327
|
-
patternNode.attr('id', patternNode.
|
326
|
+
if (patternNode.data('id')) {
|
327
|
+
patternNode.attr('id', patternNode.data('id') + this.settings.clone_id_suffix);
|
328
328
|
}
|
329
329
|
clonedNodes = clonedNodes.after(patternNode);
|
330
330
|
});
|
@@ -43,6 +43,9 @@ document.observe("dom:loaded", function() {
|
|
43
43
|
return false;
|
44
44
|
}
|
45
45
|
});
|
46
|
+
document.on('ajax:complete', 'form.live', function(event) {
|
47
|
+
ActiveScaffold.focus_first_element_of_form(event.findElement('form'));
|
48
|
+
});
|
46
49
|
document.on('ajax:failure', 'form.as_form', function(event) {
|
47
50
|
var as_div = event.findElement('div.active-scaffold');
|
48
51
|
if (as_div) {
|
@@ -77,7 +80,10 @@ document.observe("dom:loaded", function() {
|
|
77
80
|
action_link.insert(event.memo.request.transport.responseText);
|
78
81
|
if (action_link.hide_target) action_link.target.hide();
|
79
82
|
} else {
|
80
|
-
|
83
|
+
if (action_link.tag.hasClassName('toggle')) {
|
84
|
+
action_link.tag.up('.action_group,.actions').select('.toggle.active').invoke('removeClassName', 'active');
|
85
|
+
action_link.tag.addClassName('active');
|
86
|
+
}
|
81
87
|
action_link.enable();
|
82
88
|
}
|
83
89
|
event.stop();
|
@@ -115,7 +121,7 @@ document.observe("dom:loaded", function() {
|
|
115
121
|
return true;
|
116
122
|
});
|
117
123
|
document.on('ajax:success', 'a.as_cancel', function(event) {
|
118
|
-
var action_link = ActiveScaffold.find_action_link(
|
124
|
+
var link = event.findElement(), action_link = ActiveScaffold.find_action_link(link);
|
119
125
|
if (action_link) {
|
120
126
|
if (action_link.position) {
|
121
127
|
action_link.close();
|
@@ -123,6 +129,7 @@ document.observe("dom:loaded", function() {
|
|
123
129
|
event.memo.request.evalResponse();
|
124
130
|
}
|
125
131
|
}
|
132
|
+
if (link.hasClassName('reset')) link.up('form').reset();
|
126
133
|
return true;
|
127
134
|
});
|
128
135
|
document.on('ajax:failure', 'a.as_cancel', function(event) {
|
@@ -252,11 +259,31 @@ document.observe("dom:loaded", function() {
|
|
252
259
|
return true;
|
253
260
|
} else return false;
|
254
261
|
});
|
255
|
-
document.on('change', 'input.update_form, textarea.update_form, select.update_form', function(event) {
|
262
|
+
document.on('change', 'input.update_form, textarea.update_form, select.update_form, .checkbox-list.update_form input:checkbox', function(event) {
|
256
263
|
var element = event.findElement();
|
257
|
-
|
264
|
+
var form_element = element.up('.checkbox-list');
|
265
|
+
var value, additional_params;
|
266
|
+
if (form_element.match(".checkbox-list")) {
|
267
|
+
value = Form.Element.getValue(form_element.up());
|
268
|
+
additional_params = element.readAttribute('checked') ? {'_added': element.readAttribute('value')} : {'_removed': element.readAttribute('value')};
|
269
|
+
} else {
|
270
|
+
value = element.getValue();
|
271
|
+
form_element = element;
|
272
|
+
}
|
273
|
+
ActiveScaffold.update_column(element, form_element.readAttribute('data-update_url'), form_element.hasAttribute('data-update_send_form'), element.readAttribute('id'), value);
|
258
274
|
return true;
|
259
275
|
});
|
276
|
+
document.on('click', 'a.refresh-link', function(event) {
|
277
|
+
event.stop();
|
278
|
+
var element = event.findElement();
|
279
|
+
var form_element = element.previous();
|
280
|
+
var value;
|
281
|
+
if (form_element.match(".checkbox-list")) {
|
282
|
+
value = Form.Element.getValue(form_element);
|
283
|
+
form_element = form_element.up().select("input:checkbox"); // parent is needed for draggable-list, checked list may be empty
|
284
|
+
} else value = form_element.getValue();
|
285
|
+
ActiveScaffold.update_column(form_element, element.readAttribute('href'), element.hasAttribute('data-update_send_form'), form_element.readAttribute('id'), value);
|
286
|
+
});
|
260
287
|
document.on('recordselect:change', 'input.recordselect.update_form', function(event) {
|
261
288
|
var element = event.findElement();
|
262
289
|
ActiveScaffold.update_column(element, element.readAttribute('data-update_url'), element.hasAttribute('data-update_send_form'), element.readAttribute('id'), element.memo.id);
|
@@ -383,20 +410,24 @@ var ActiveScaffold = {
|
|
383
410
|
update_row: function(row, html) {
|
384
411
|
row = $(row);
|
385
412
|
var new_row = this.replace(row, html)
|
386
|
-
if (
|
387
|
-
|
413
|
+
if (new_row) {
|
414
|
+
if (row.hasClassName('even-record')) new_row.addClassName('even-record');
|
415
|
+
ActiveScaffold.highlight(new_row);
|
416
|
+
}
|
388
417
|
},
|
389
418
|
|
390
419
|
replace: function(element, html) {
|
391
420
|
element = $(element)
|
392
|
-
|
393
|
-
|
421
|
+
if (element) {
|
422
|
+
Element.replace(element, html);
|
423
|
+
element = $(element.readAttribute('id'));
|
424
|
+
}
|
394
425
|
return element;
|
395
426
|
},
|
396
427
|
|
397
428
|
replace_html: function(element, html) {
|
398
429
|
element = $(element);
|
399
|
-
element.update(html);
|
430
|
+
if (element) element.update(html);
|
400
431
|
return element;
|
401
432
|
},
|
402
433
|
|
@@ -540,6 +571,11 @@ var ActiveScaffold = {
|
|
540
571
|
link = $(link);
|
541
572
|
link.next('ul').remove();
|
542
573
|
link.up('td').addClassName('action_group dyn');
|
574
|
+
if (link.up('td.actions')) link.up('td').addClassName('action_group dyn');
|
575
|
+
else {
|
576
|
+
if (link.up().hasClassName('actions')) link.wrap('div');
|
577
|
+
link.up().addClassName('action_group dyn');
|
578
|
+
}
|
543
579
|
link.insert({after: html});
|
544
580
|
},
|
545
581
|
|
@@ -595,7 +631,7 @@ var ActiveScaffold = {
|
|
595
631
|
var toggler = toggable.previous();
|
596
632
|
var initial_label = (options.default_visible === true) ? options.hide_label : options.show_label;
|
597
633
|
|
598
|
-
toggler.insert('
|
634
|
+
toggler.insert(' <a class="visibility-toggle" href="#">' + initial_label + '</a>');
|
599
635
|
toggler.firstDescendant().observe('click', function(event) {
|
600
636
|
var element = event.element();
|
601
637
|
event.stop();
|
@@ -623,11 +659,14 @@ var ActiveScaffold = {
|
|
623
659
|
|
624
660
|
render_form_field: function(source, content, options) {
|
625
661
|
var source = $(source);
|
626
|
-
var element = source.up('.association-record');
|
662
|
+
var element = source.up('.association-record'), selector = '';
|
627
663
|
if (typeof(element) === 'undefined') {
|
628
664
|
element = source.up('ol.form');
|
665
|
+
selector = 'li';
|
629
666
|
}
|
630
|
-
|
667
|
+
// find without entering new subforms
|
668
|
+
selector = options.is_subform ? '' : selector + ':not(.sub-form) ';
|
669
|
+
element = element.down(selector + '.' + options.field_class);
|
631
670
|
|
632
671
|
if (element) {
|
633
672
|
if (options.is_subform == false) {
|
@@ -675,7 +714,7 @@ var ActiveScaffold = {
|
|
675
714
|
}
|
676
715
|
},
|
677
716
|
|
678
|
-
update_column: function(element, url, send_form, source_id, val) {
|
717
|
+
update_column: function(element, url, send_form, source_id, val, additional_params) {
|
679
718
|
if (!element) element = $(source_id);
|
680
719
|
|
681
720
|
var as_form = element.up('form.as_form');
|
@@ -690,6 +729,7 @@ var ActiveScaffold = {
|
|
690
729
|
params = Form.serializeElements(base.getElementsBySelector('input, textarea, select'), true);
|
691
730
|
else params = as_form.serialize(true);
|
692
731
|
params['_method'] = '';
|
732
|
+
if (additional_params) params = Object.extend(params, additional_params);
|
693
733
|
} else {
|
694
734
|
params = {value: val};
|
695
735
|
}
|
@@ -936,7 +976,7 @@ ActiveScaffold.ActionLink.Abstract = Class.create({
|
|
936
976
|
ActiveScaffold.Actions.Record = Class.create(ActiveScaffold.Actions.Abstract, {
|
937
977
|
instantiate_link: function(link) {
|
938
978
|
var l = new ActiveScaffold.ActionLink.Record(link, this.target, this.loading_indicator);
|
939
|
-
if (this.target.hasAttribute('data-refresh') && !this.target.readAttribute('data-refresh').blank()) l.refresh_url = this.target.readAttribute('data-refresh');
|
979
|
+
if (this.target.hasAttribute('data-refresh') && !this.target.readAttribute('data-refresh').blank()) l.refresh_url = this.target.up('.records').readAttribute('data-refresh-record').replace('--ID--', this.target.readAttribute('data-refresh'));
|
940
980
|
|
941
981
|
if (l.position) {
|
942
982
|
l.url = l.url.append_params({adapter: '_list_inline_adapter'});
|
@@ -977,6 +1017,7 @@ ActiveScaffold.ActionLink.Record = Class.create(ActiveScaffold.ActionLink.Abstra
|
|
977
1017
|
return false;
|
978
1018
|
}
|
979
1019
|
this.adapter.down('.inline-adapter-cell').writeAttribute('colspan', colspan);
|
1020
|
+
ActiveScaffold.focus_first_element_of_form(this.adapter);
|
980
1021
|
ActiveScaffold.highlight(this.adapter.down('td').down());
|
981
1022
|
},
|
982
1023
|
|
@@ -1045,8 +1086,9 @@ ActiveScaffold.ActionLink.Table = Class.create(ActiveScaffold.ActionLink.Abstrac
|
|
1045
1086
|
else {
|
1046
1087
|
throw 'Unknown position "' + this.position + '"'
|
1047
1088
|
}
|
1089
|
+
ActiveScaffold.focus_first_element_of_form(this.adapter);
|
1048
1090
|
ActiveScaffold.highlight(this.adapter.down('td').down());
|
1049
|
-
}
|
1091
|
+
}
|
1050
1092
|
});
|
1051
1093
|
|
1052
1094
|
if (Ajax.InPlaceEditor) {
|
@@ -1091,8 +1133,8 @@ ActiveScaffold.InPlaceEditor = Class.create(Ajax.InPlaceEditor, {
|
|
1091
1133
|
return;
|
1092
1134
|
}
|
1093
1135
|
|
1094
|
-
var fld = patternNodes.editNode.cloneNode(true);
|
1095
|
-
if (fld.id.length > 0) fld.id
|
1136
|
+
var fld = $(patternNodes.editNode.cloneNode(true));
|
1137
|
+
if (fld.readAttribute("data-id").length > 0) fld.id = fld.readAttribute("data-id") + this.options.nodeIdSuffix;
|
1096
1138
|
fld.name = this.options.paramName;
|
1097
1139
|
fld.className = 'editor_field';
|
1098
1140
|
this.setValue(fld, this._controls.editor.value);
|
@@ -1103,9 +1145,9 @@ ActiveScaffold.InPlaceEditor = Class.create(Ajax.InPlaceEditor, {
|
|
1103
1145
|
this._form.appendChild(this._controls.editor);
|
1104
1146
|
|
1105
1147
|
$A(patternNodes.additionalNodes).each(function(node) {
|
1106
|
-
var patternNode = node.cloneNode(true);
|
1148
|
+
var patternNode = $(node.cloneNode(true));
|
1107
1149
|
if (patternNode.id.length > 0) {
|
1108
|
-
patternNode.id = patternNode.id + this.options.nodeIdSuffix;
|
1150
|
+
patternNode.id = patternNode.readAttribute("data-id") + this.options.nodeIdSuffix;
|
1109
1151
|
}
|
1110
1152
|
this._form.appendChild(patternNode);
|
1111
1153
|
}.bind(this));
|
@@ -78,6 +78,7 @@ $input_focus_bg: #ffc !default;
|
|
78
78
|
|
79
79
|
$draggable_list_bg: #FFFF88 !default;
|
80
80
|
$draggable_list_selected_bg: #7FCF00 !default;
|
81
|
+
$draggable_list_disabled_bg: $disabled_color !default;
|
81
82
|
$checkbox_list_bg: #fff !default;
|
82
83
|
|
83
84
|
$subform_color: #999 !default;
|
@@ -371,6 +372,9 @@ background-color: $draggable_list_bg;
|
|
371
372
|
.active-scaffold .draggable-list.selected {
|
372
373
|
background-color: $draggable_list_selected_bg;
|
373
374
|
}
|
375
|
+
.active-scaffold .ui-droppable-disabled, .active-scaffold .ui-droppable-disabled.selected {
|
376
|
+
background-color: $draggable_list_disabled_bg;
|
377
|
+
}
|
374
378
|
|
375
379
|
|
376
380
|
/* Form :: Association Sub-Forms
|
@@ -38,3 +38,6 @@ background-image: image-url('active_scaffold/cross.png');
|
|
38
38
|
.as_touch a.inline-adapter-close {
|
39
39
|
background-image: image-url('active_scaffold/close_touch.png');
|
40
40
|
}
|
41
|
+
.active-scaffold .refresh-link {
|
42
|
+
background-image: image-url('active_scaffold/refresh.png');
|
43
|
+
}
|
@@ -79,6 +79,7 @@ padding: 5px 5px;
|
|
79
79
|
margin-left: 0px;
|
80
80
|
}
|
81
81
|
|
82
|
+
.active-scaffold .active-scaffold .active-scaffold-header div.actions .action_group > a,
|
82
83
|
.active-scaffold .active-scaffold .active-scaffold-header div.actions > a {
|
83
84
|
padding: 1px 5px;
|
84
85
|
}
|
@@ -256,7 +257,7 @@ padding: 0;
|
|
256
257
|
position: absolute;
|
257
258
|
line-height: 200%;
|
258
259
|
display: none;
|
259
|
-
width: 150px;
|
260
|
+
min-width: 150px;
|
260
261
|
right: 0px;
|
261
262
|
z-index: 2;
|
262
263
|
}
|
@@ -715,6 +716,15 @@ padding: 1px;
|
|
715
716
|
border: solid 1px;
|
716
717
|
}
|
717
718
|
|
719
|
+
.active-scaffold .refresh-link {
|
720
|
+
display: inline-block;
|
721
|
+
width: 25px;
|
722
|
+
text-indent: 26px;
|
723
|
+
overflow: hidden;
|
724
|
+
background-position: 5px 50%;
|
725
|
+
background-repeat: no-repeat;
|
726
|
+
}
|
727
|
+
|
718
728
|
.active-scaffold .checkbox-list {
|
719
729
|
padding-left: 0px;
|
720
730
|
}
|
@@ -727,6 +737,11 @@ display: inline;
|
|
727
737
|
.active-scaffold .checkbox-list li label {
|
728
738
|
padding: 0 0 0 2px;
|
729
739
|
}
|
740
|
+
.active-scaffold .checkbox-list + .refresh-link {
|
741
|
+
float: left;
|
742
|
+
}
|
743
|
+
|
744
|
+
.active-scaffold .draggable-lists + .loading-indicator { float: left; }
|
730
745
|
|
731
746
|
.active-scaffold .draggable-list {
|
732
747
|
float: left;
|
@@ -749,6 +764,12 @@ display: block;
|
|
749
764
|
li.draggable-item {
|
750
765
|
list-style: none;
|
751
766
|
}
|
767
|
+
li.draggable-item, li.draggable-item label {
|
768
|
+
cursor: move;
|
769
|
+
}
|
770
|
+
li.ui-draggable-disabled, li.ui-draggable-disabled label {
|
771
|
+
cursor: default;
|
772
|
+
}
|
752
773
|
li.draggable-item input,
|
753
774
|
.active-scaffold .draggable-list input {
|
754
775
|
display: none;
|
@@ -788,7 +809,7 @@ padding: 0 5px 0 1px;
|
|
788
809
|
background: none;
|
789
810
|
}
|
790
811
|
|
791
|
-
.active-scaffold .horizontal-sub-form td dt label {
|
812
|
+
.active-scaffold .horizontal-sub-form td > dl > dt label {
|
792
813
|
display: none;
|
793
814
|
}
|
794
815
|
|
@@ -17,7 +17,7 @@ options = {:id => element_form_id(:action => :add_existing),
|
|
17
17
|
<% end -%>
|
18
18
|
|
19
19
|
<label for="<%= "record_#{active_scaffold_config.model}" %>"><%= active_scaffold_add_existing_label %></label>
|
20
|
-
<%= active_scaffold_add_existing_input(:name => 'associated_id', :url_options => url_options) %>
|
20
|
+
<%= active_scaffold_add_existing_input(:name => 'associated_id', :url_options => url_options, :object => @record) %>
|
21
21
|
|
22
22
|
<p class="form-footer">
|
23
23
|
<%= submit_tag as_(:add), :class => "submit" %>
|
@@ -26,5 +26,3 @@ options = {:id => element_form_id(:action => :add_existing),
|
|
26
26
|
</p>
|
27
27
|
|
28
28
|
</form>
|
29
|
-
<%= javascript_tag("ActiveScaffold.focus_first_element_of_form('#{element_form_id(:action => :add_existing)}');") %>
|
30
|
-
|
@@ -14,10 +14,13 @@
|
|
14
14
|
method ||= :post
|
15
15
|
cancel_link = true if cancel_link.nil?
|
16
16
|
submit_text ||= form_action
|
17
|
-
|
17
|
+
apply_text ||= :"#{form_action}_apply"
|
18
|
+
body_partial ||= 'form'
|
19
|
+
form_id = element_form_id(:action => form_action, :id => @record.try(:id))
|
20
|
+
%>
|
18
21
|
<%=
|
19
22
|
options = {:onsubmit => onsubmit,
|
20
|
-
:id =>
|
23
|
+
:id => form_id,
|
21
24
|
:multipart => multipart,
|
22
25
|
:class => "as_form #{form_action.to_s}",
|
23
26
|
:method => method,
|
@@ -43,11 +46,10 @@ end
|
|
43
46
|
|
44
47
|
<p class="form-footer">
|
45
48
|
<%= submit_tag as_(submit_text), :class => "submit" if !persistent || persistent == :optional %>
|
46
|
-
<%= submit_tag as_(
|
49
|
+
<%= submit_tag as_(apply_text), :class => "submit", :name => 'dont_close' if persistent %>
|
47
50
|
<%= link_to(as_(:cancel), main_path_to_return, cancel_options) if cancel_link %>
|
48
|
-
<%= loading_indicator_tag(:action => form_action, :id =>
|
51
|
+
<%= loading_indicator_tag(:action => form_action, :id => @record.try(:id)) %>
|
49
52
|
<%= render :partial => footer_extension, :locals => { :form_action => form_action } if footer_extension %>
|
50
53
|
</p>
|
51
54
|
|
52
55
|
</form>
|
53
|
-
<%= javascript_tag("ActiveScaffold.focus_first_element_of_form('#{element_form_id(:action => form_action)}');") %>
|