active_scaffold 3.6.20 → 3.7.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.rdoc +47 -0
- data/README.md +29 -16
- data/app/assets/javascripts/jquery/active_scaffold.js +106 -68
- data/app/assets/javascripts/jquery/active_scaffold_chosen.js +6 -5
- data/app/assets/javascripts/jquery/tiny_mce_bridge.js +18 -4
- data/app/assets/stylesheets/active_scaffold_layout.css +13 -2
- data/app/views/active_scaffold_overrides/_base_form.html.erb +5 -1
- data/app/views/active_scaffold_overrides/_field_search.html.erb +1 -0
- data/app/views/active_scaffold_overrides/_form_association_record.html.erb +2 -1
- data/app/views/active_scaffold_overrides/_render_field.js.erb +24 -13
- data/config/locales/de.yml +6 -3
- data/config/locales/en.yml +3 -0
- data/config/locales/es.yml +3 -0
- data/config/locales/fr.yml +9 -6
- data/config/locales/hu.yml +20 -17
- data/config/locales/ja.yml +83 -80
- data/config/locales/ru.yml +17 -14
- data/lib/active_scaffold/actions/common_search.rb +2 -2
- data/lib/active_scaffold/actions/core.rb +30 -10
- data/lib/active_scaffold/actions/field_search.rb +9 -6
- data/lib/active_scaffold/actions/nested.rb +7 -7
- data/lib/active_scaffold/actions/update.rb +3 -3
- data/lib/active_scaffold/attribute_params.rb +22 -70
- data/lib/active_scaffold/bridges/active_storage/active_storage_helpers.rb +0 -3
- data/lib/active_scaffold/bridges/active_storage/form_ui.rb +6 -6
- data/lib/active_scaffold/bridges/active_storage/list_ui.rb +7 -7
- data/lib/active_scaffold/bridges/active_storage.rb +3 -0
- data/lib/active_scaffold/bridges/ancestry/ancestry_bridge.rb +2 -2
- data/lib/active_scaffold/bridges/bitfields/bitfields_bridge.rb +2 -2
- data/lib/active_scaffold/bridges/calendar_date_select/as_cds_bridge.rb +12 -14
- data/lib/active_scaffold/bridges/carrierwave/form_ui.rb +2 -2
- data/lib/active_scaffold/bridges/carrierwave/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/chosen/helpers.rb +10 -10
- data/lib/active_scaffold/bridges/country_select/country_select_bridge_helper.rb +7 -7
- data/lib/active_scaffold/bridges/date_picker/ext.rb +20 -9
- data/lib/active_scaffold/bridges/date_picker/helper.rb +9 -9
- data/lib/active_scaffold/bridges/date_picker.rb +2 -0
- data/lib/active_scaffold/bridges/dragonfly/form_ui.rb +3 -3
- data/lib/active_scaffold/bridges/dragonfly/list_ui.rb +5 -5
- data/lib/active_scaffold/bridges/file_column/form_ui.rb +1 -1
- data/lib/active_scaffold/bridges/file_column/list_ui.rb +3 -3
- data/lib/active_scaffold/bridges/file_column/test/functional/file_column_keep_test.rb +1 -1
- data/lib/active_scaffold/bridges/paper_trail/actions.rb +4 -1
- data/lib/active_scaffold/bridges/paperclip/form_ui.rb +3 -3
- data/lib/active_scaffold/bridges/paperclip/list_ui.rb +1 -1
- data/lib/active_scaffold/bridges/record_select/helpers.rb +17 -17
- data/lib/active_scaffold/bridges/tiny_mce/helpers.rb +6 -6
- data/lib/active_scaffold/bridges/tiny_mce.rb +1 -1
- data/lib/active_scaffold/bridges/usa_state_select/usa_state_select_helper.rb +6 -11
- data/lib/active_scaffold/bridges.rb +0 -3
- data/lib/active_scaffold/config/core.rb +1 -1
- data/lib/active_scaffold/config/field_search.rb +9 -1
- data/lib/active_scaffold/config/form.rb +9 -1
- data/lib/active_scaffold/constraints.rb +22 -7
- data/lib/active_scaffold/core.rb +6 -10
- data/lib/active_scaffold/data_structures/action_columns.rb +0 -25
- data/lib/active_scaffold/data_structures/action_links.rb +1 -1
- data/lib/active_scaffold/data_structures/association/abstract.rb +8 -0
- data/lib/active_scaffold/data_structures/association/active_mongoid.rb +8 -0
- data/lib/active_scaffold/data_structures/association/active_record.rb +1 -13
- data/lib/active_scaffold/data_structures/association/mongoid.rb +21 -8
- data/lib/active_scaffold/data_structures/column.rb +139 -28
- data/lib/active_scaffold/data_structures/columns.rb +12 -12
- data/lib/active_scaffold/data_structures/nested_info.rb +12 -0
- data/lib/active_scaffold/data_structures/sorting.rb +1 -1
- data/lib/active_scaffold/engine.rb +15 -1
- data/lib/active_scaffold/extensions/action_view_rendering.rb +13 -5
- data/lib/active_scaffold/extensions/cow_proxy.rb +1 -1
- data/lib/active_scaffold/extensions/routing_mapper.rb +1 -0
- data/lib/active_scaffold/extensions/unsaved_record.rb +9 -3
- data/lib/active_scaffold/finder.rb +147 -28
- data/lib/active_scaffold/helpers/action_link_helpers.rb +1 -1
- data/lib/active_scaffold/helpers/controller_helpers.rb +9 -4
- data/lib/active_scaffold/helpers/form_column_helpers.rb +153 -107
- data/lib/active_scaffold/helpers/human_condition_helpers.rb +48 -14
- data/lib/active_scaffold/helpers/list_column_helpers.rb +37 -20
- data/lib/active_scaffold/helpers/search_column_helpers.rb +137 -55
- data/lib/active_scaffold/helpers/show_column_helpers.rb +6 -6
- data/lib/active_scaffold/helpers/view_helpers.rb +1 -1
- data/lib/active_scaffold/orm_checks.rb +21 -1
- data/lib/active_scaffold/registry.rb +10 -15
- data/lib/active_scaffold/tableless.rb +10 -79
- data/lib/active_scaffold/version.rb +2 -2
- data/lib/active_scaffold.rb +3 -9
- data/lib/generators/active_scaffold/install_generator.rb +2 -2
- data/test/bridges/bridge_test.rb +1 -1
- data/test/bridges/date_picker_test.rb +3 -2
- data/test/bridges/paperclip_test.rb +18 -14
- data/test/bridges/tiny_mce_test.rb +5 -3
- data/test/config/base_test.rb +1 -1
- data/test/config/core_test.rb +1 -1
- data/test/config/create_test.rb +1 -1
- data/test/config/delete_test.rb +1 -1
- data/test/config/field_search_test.rb +1 -1
- data/test/config/list_test.rb +1 -1
- data/test/config/nested_test.rb +1 -1
- data/test/config/search_test.rb +1 -1
- data/test/config/show_test.rb +1 -1
- data/test/config/subform_test.rb +1 -1
- data/test/config/update_test.rb +1 -1
- data/test/data_structures/action_columns_test.rb +1 -1
- data/test/data_structures/action_link_test.rb +1 -1
- data/test/data_structures/action_links_test.rb +1 -1
- data/test/data_structures/actions_test.rb +1 -1
- data/test/data_structures/association_column_test.rb +1 -1
- data/test/data_structures/column_test.rb +1 -1
- data/test/data_structures/columns_test.rb +1 -1
- data/test/data_structures/set_test.rb +1 -1
- data/test/data_structures/sorting_test.rb +1 -1
- data/test/data_structures/standard_column_test.rb +1 -1
- data/test/data_structures/validation_reflection_test.rb +1 -1
- data/test/data_structures/virtual_column_test.rb +1 -1
- data/test/extensions/active_record_test.rb +1 -1
- data/test/helpers/form_column_helpers_test.rb +7 -5
- data/test/helpers/pagination_helpers_test.rb +1 -1
- data/test/helpers/search_column_helpers_test.rb +2 -1
- data/test/misc/active_record_permissions_test.rb +1 -1
- data/test/misc/attribute_params_test.rb +1 -1
- data/test/misc/calculation_test.rb +1 -1
- data/test/misc/configurable_test.rb +1 -1
- data/test/misc/constraints_test.rb +2 -1
- data/test/misc/convert_numbers_format_test.rb +1 -1
- data/test/misc/finder_test.rb +39 -1
- data/test/misc/lang_test.rb +1 -1
- data/test/misc/parse_datetime_test.rb +1 -1
- data/test/misc/tableless_test.rb +1 -1
- data/test/test_helper.rb +4 -4
- metadata +5 -17
- data/config/brakeman.ignore +0 -26
- data/config/brakeman.yml +0 -3
- data/config/i18n-tasks.yml +0 -121
- data/lib/active_scaffold/bridges/shared/date_bridge.rb +0 -221
- data/lib/active_scaffold/delayed_setup.rb +0 -41
- data/lib/active_scaffold/extensions/left_outer_joins.rb +0 -43
data/config/locales/es.yml
CHANGED
@@ -47,6 +47,9 @@ es:
|
|
47
47
|
deleted_model: "%{model} borrado"
|
48
48
|
deleted_records: Ver Eliminados
|
49
49
|
delimiter: Delimitador
|
50
|
+
doesnt_begin_with: No empieza con
|
51
|
+
doesnt_contain: No contiene
|
52
|
+
doesnt_end_with: No termina con
|
50
53
|
download: Descargar
|
51
54
|
edit: Editar
|
52
55
|
ends_with: Termina con
|
data/config/locales/fr.yml
CHANGED
@@ -47,6 +47,9 @@ fr:
|
|
47
47
|
deleted_model: Suppression de %{model}
|
48
48
|
deleted_records: Lister les enregistrements supprimés
|
49
49
|
delimiter: Délimiteur
|
50
|
+
doesnt_begin_with:
|
51
|
+
doesnt_contain:
|
52
|
+
doesnt_end_with:
|
50
53
|
download: Télécharger
|
51
54
|
edit: Éditer
|
52
55
|
ends_with: Se terminant par
|
@@ -63,7 +66,7 @@ fr:
|
|
63
66
|
found: Trouvé
|
64
67
|
future: Futur
|
65
68
|
group_by: Grouper par
|
66
|
-
grouped_by:
|
69
|
+
grouped_by:
|
67
70
|
hide: "(Cacher)"
|
68
71
|
hours: Heures
|
69
72
|
human_conditions:
|
@@ -138,11 +141,11 @@ fr:
|
|
138
141
|
yesterday: Hier
|
139
142
|
date:
|
140
143
|
formats:
|
141
|
-
month:
|
142
|
-
quarter:
|
143
|
-
week:
|
144
|
-
year_month:
|
145
|
-
year_quarter:
|
144
|
+
month: "%B"
|
145
|
+
quarter:
|
146
|
+
week:
|
147
|
+
year_month: "%b %Y"
|
148
|
+
year_quarter:
|
146
149
|
time:
|
147
150
|
formats:
|
148
151
|
picker: "%a, %d %b %Y %H:%M:%S"
|
data/config/locales/hu.yml
CHANGED
@@ -18,7 +18,7 @@ hu:
|
|
18
18
|
between: Között
|
19
19
|
cancel: Mégse
|
20
20
|
cant_destroy_record: 'nem törölhető: %{record}'
|
21
|
-
changes:
|
21
|
+
changes:
|
22
22
|
click_to_edit: Kattints a szerkesztéshez
|
23
23
|
click_to_reset: Kattints az alapállapothoz
|
24
24
|
close: Bezárás
|
@@ -27,7 +27,7 @@ hu:
|
|
27
27
|
contains: Contains
|
28
28
|
create: Létrehozás
|
29
29
|
create_another: Create Another %{model}
|
30
|
-
create_apply:
|
30
|
+
create_apply:
|
31
31
|
create_model: "%{model} létrehozása"
|
32
32
|
create_new: Új létrehozása
|
33
33
|
created_model: "%{model} létrehozva"
|
@@ -38,15 +38,18 @@ hu:
|
|
38
38
|
showMonthAfterYear: false
|
39
39
|
weekHeader: Wk
|
40
40
|
datetime_picker_options:
|
41
|
-
closeText:
|
42
|
-
currentText:
|
41
|
+
closeText:
|
42
|
+
currentText:
|
43
43
|
timeText:
|
44
|
-
timezoneText:
|
44
|
+
timezoneText:
|
45
45
|
days: Days
|
46
46
|
delete: Törlés
|
47
47
|
deleted_model: "%{model} törölve"
|
48
|
-
deleted_records:
|
48
|
+
deleted_records:
|
49
49
|
delimiter: Elválasztó
|
50
|
+
doesnt_begin_with:
|
51
|
+
doesnt_contain:
|
52
|
+
doesnt_end_with:
|
50
53
|
download: Letöltés
|
51
54
|
edit: Szerkesztés
|
52
55
|
ends_with: Ends with
|
@@ -62,8 +65,8 @@ hu:
|
|
62
65
|
filtered: "(Szűrt)"
|
63
66
|
found: Találat
|
64
67
|
future: Future
|
65
|
-
group_by:
|
66
|
-
grouped_by:
|
68
|
+
group_by:
|
69
|
+
grouped_by:
|
67
70
|
hide: "(Elrejtés)"
|
68
71
|
hours: Hours
|
69
72
|
human_conditions:
|
@@ -85,9 +88,9 @@ hu:
|
|
85
88
|
next_week: Next Week
|
86
89
|
next_year: Next Year
|
87
90
|
no_authorization_for_action: No Authorization for action %{action}
|
88
|
-
no_color:
|
91
|
+
no_color:
|
89
92
|
no_entries: Nincs elem
|
90
|
-
no_group:
|
93
|
+
no_group:
|
91
94
|
no_options: nincsenek opciók
|
92
95
|
not_null: Not Null
|
93
96
|
'null': 'Null'
|
@@ -109,7 +112,7 @@ hu:
|
|
109
112
|
refresh: Frissítés
|
110
113
|
remove: Törlés
|
111
114
|
remove_file: Fájl törlése, vagy cseréje
|
112
|
-
remove_files:
|
115
|
+
remove_files:
|
113
116
|
replace_existing: Replace existing
|
114
117
|
replace_with_new: Csere újjal
|
115
118
|
reset: Alapállapot
|
@@ -129,7 +132,7 @@ hu:
|
|
129
132
|
tomorrow: Tomorrow
|
130
133
|
'true': 'True'
|
131
134
|
update: Modosítás
|
132
|
-
update_apply:
|
135
|
+
update_apply:
|
133
136
|
update_model: "%{model} modosítása"
|
134
137
|
updated_model: "%{model} módosítva"
|
135
138
|
version_inconsistency: Verzió ütközés - ezt a rekordot módosították mióta elkezdted szerkeszteni.
|
@@ -138,11 +141,11 @@ hu:
|
|
138
141
|
yesterday: Yesterday
|
139
142
|
date:
|
140
143
|
formats:
|
141
|
-
month:
|
142
|
-
quarter:
|
143
|
-
week:
|
144
|
-
year_month:
|
145
|
-
year_quarter:
|
144
|
+
month:
|
145
|
+
quarter:
|
146
|
+
week:
|
147
|
+
year_month:
|
148
|
+
year_quarter:
|
146
149
|
time:
|
147
150
|
formats:
|
148
151
|
picker: "%a, %d %b %Y %H:%M:%S"
|
data/config/locales/ja.yml
CHANGED
@@ -11,23 +11,23 @@ ja:
|
|
11
11
|
add: 追加
|
12
12
|
add_existing: 既存のものを追加
|
13
13
|
add_existing_model: 既存の%{model}を追加
|
14
|
-
apply:
|
15
|
-
are_you_sure_to_delete:
|
16
|
-
average:
|
17
|
-
begins_with:
|
18
|
-
between:
|
14
|
+
apply: 適用
|
15
|
+
are_you_sure_to_delete: "%{label}を消去してもよろしいですか?"
|
16
|
+
average: 平均
|
17
|
+
begins_with: 開始時間
|
18
|
+
between: 範囲指定
|
19
19
|
cancel: キャンセル
|
20
|
-
cant_destroy_record: "%{record}
|
21
|
-
changes:
|
20
|
+
cant_destroy_record: "%{record}を削除できません"
|
21
|
+
changes: 差分
|
22
22
|
click_to_edit: クリックして編集
|
23
|
-
click_to_reset:
|
23
|
+
click_to_reset: クリックしてリセット
|
24
24
|
close: 閉じる
|
25
|
-
config_list:
|
26
|
-
config_list_model:
|
27
|
-
contains:
|
25
|
+
config_list:
|
26
|
+
config_list_model:
|
27
|
+
contains: 部分一致検索
|
28
28
|
create: 作成
|
29
|
-
create_another:
|
30
|
-
create_apply:
|
29
|
+
create_another:
|
30
|
+
create_apply:
|
31
31
|
create_model: "%{model}を作成"
|
32
32
|
create_new: 新規作成
|
33
33
|
created_model: "%{model}を作成しました"
|
@@ -36,36 +36,39 @@ ja:
|
|
36
36
|
firstDay: 0
|
37
37
|
isRTL: false
|
38
38
|
showMonthAfterYear: false
|
39
|
-
weekHeader:
|
39
|
+
weekHeader: 週
|
40
40
|
datetime_picker_options:
|
41
|
-
closeText:
|
42
|
-
currentText:
|
43
|
-
timeText:
|
44
|
-
timezoneText:
|
45
|
-
days:
|
41
|
+
closeText: 閉じる
|
42
|
+
currentText: 現在時刻
|
43
|
+
timeText: 時間
|
44
|
+
timezoneText: 時間帯
|
45
|
+
days: 日分
|
46
46
|
delete: 削除
|
47
47
|
deleted_model: "%{model}を削除しました"
|
48
|
-
deleted_records:
|
49
|
-
delimiter:
|
48
|
+
deleted_records:
|
49
|
+
delimiter: 区切り文字
|
50
|
+
doesnt_begin_with:
|
51
|
+
doesnt_contain:
|
52
|
+
doesnt_end_with:
|
50
53
|
download: ダウンロード
|
51
54
|
edit: 編集
|
52
|
-
ends_with:
|
53
|
-
error_500: "(コード500
|
55
|
+
ends_with: 終了時間
|
56
|
+
error_500: "(コード500:内部エラー)"
|
54
57
|
errors:
|
55
58
|
template:
|
56
|
-
body:
|
59
|
+
body: 次のフィールドに問題がありました:
|
57
60
|
header:
|
58
|
-
one: 1
|
59
|
-
other: "%{count}
|
60
|
-
export:
|
61
|
-
'false':
|
61
|
+
one: 1件のエラーにより、この%{model}が保存できませんでした
|
62
|
+
other: "%{count}件のエラーにより、この%{model}が保存できませんでした"
|
63
|
+
export: エクスポート
|
64
|
+
'false':
|
62
65
|
filtered: "(フィルタ中)"
|
63
66
|
found: 個ありました
|
64
|
-
future:
|
65
|
-
group_by:
|
66
|
-
grouped_by:
|
67
|
-
hide: "
|
68
|
-
hours:
|
67
|
+
future: 未来
|
68
|
+
group_by:
|
69
|
+
grouped_by:
|
70
|
+
hide: "(隠す)"
|
71
|
+
hours: 時間分
|
69
72
|
human_conditions:
|
70
73
|
association: "%{column} = %{value}"
|
71
74
|
boolean: "%{column} = %{value}"
|
@@ -73,76 +76,76 @@ ja:
|
|
73
76
|
internal_error: リクエストが失敗しました
|
74
77
|
live_search: その場で検索
|
75
78
|
loading: 読み込み中…
|
76
|
-
mark_all_records:
|
77
|
-
maximum:
|
78
|
-
minimum:
|
79
|
-
minutes:
|
80
|
-
months:
|
79
|
+
mark_all_records: すべて選択
|
80
|
+
maximum: 最大値
|
81
|
+
minimum: 最小値
|
82
|
+
minutes: 分間
|
83
|
+
months: か月分
|
81
84
|
nested_for_model: "%{parent_model}の%{nested_model}"
|
82
|
-
nested_of_model:
|
85
|
+
nested_of_model:
|
83
86
|
next: 次
|
84
|
-
next_month:
|
85
|
-
next_week:
|
86
|
-
next_year:
|
87
|
-
no_authorization_for_action:
|
88
|
-
no_color:
|
87
|
+
next_month: 来月
|
88
|
+
next_week: 来週
|
89
|
+
next_year: 来年
|
90
|
+
no_authorization_for_action:
|
91
|
+
no_color:
|
89
92
|
no_entries: 見つかりませんでした
|
90
|
-
no_group:
|
93
|
+
no_group:
|
91
94
|
no_options: オプション無し
|
92
|
-
not_null:
|
93
|
-
'null':
|
94
|
-
omit_header:
|
95
|
-
optional_attributes:
|
95
|
+
not_null:
|
96
|
+
'null':
|
97
|
+
omit_header:
|
98
|
+
optional_attributes:
|
96
99
|
options: オプション
|
97
|
-
past:
|
98
|
-
pdf:
|
99
|
-
prev_month:
|
100
|
-
prev_week:
|
101
|
-
prev_year:
|
100
|
+
past: 過去
|
101
|
+
pdf:
|
102
|
+
prev_month: 先月
|
103
|
+
prev_week: 先週
|
104
|
+
prev_year: 去年
|
102
105
|
previous: 前
|
103
106
|
print: 印刷
|
104
|
-
range:
|
105
|
-
record_not_saved:
|
107
|
+
range: 範囲検索
|
108
|
+
record_not_saved: 不明なエラーによって保存できませんでした
|
106
109
|
records_marked:
|
107
|
-
one:
|
108
|
-
other: "%{
|
109
|
-
refresh:
|
110
|
+
one: "%{model}を1件選択"
|
111
|
+
other: "%{model}を%{count}件選択"
|
112
|
+
refresh: 更新
|
110
113
|
remove: 削除
|
111
114
|
remove_file: ファイルを削除または置換
|
112
115
|
remove_files: ファイルを削除または追加する
|
113
|
-
replace_existing:
|
116
|
+
replace_existing:
|
114
117
|
replace_with_new: 新しいもので置換
|
115
118
|
reset: リセット
|
116
|
-
revisions_for_model:
|
119
|
+
revisions_for_model:
|
117
120
|
saving: 保存中…
|
118
121
|
search: 検索
|
119
122
|
search_terms: 検索単語
|
120
|
-
seconds:
|
123
|
+
seconds: 秒分
|
121
124
|
show: 表示
|
122
|
-
show_block: "
|
125
|
+
show_block: "(表示)"
|
123
126
|
show_model: "%{model}を表示"
|
124
|
-
sum:
|
125
|
-
this_month:
|
126
|
-
this_week:
|
127
|
-
this_year:
|
128
|
-
today:
|
129
|
-
tomorrow:
|
130
|
-
'true':
|
127
|
+
sum: 合計値
|
128
|
+
this_month: 今月
|
129
|
+
this_week: 今週
|
130
|
+
this_year: 今年
|
131
|
+
today: 今日
|
132
|
+
tomorrow: 明日
|
133
|
+
'true':
|
131
134
|
update: 更新
|
132
|
-
update_apply:
|
135
|
+
update_apply:
|
133
136
|
update_model: "%{model}を更新"
|
134
137
|
updated_model: "%{model}を更新しました"
|
135
138
|
version_inconsistency: バージョンが一致しません - あなたが編集している間にこのレコードが変更されました。
|
136
|
-
weeks:
|
137
|
-
years:
|
138
|
-
yesterday:
|
139
|
+
weeks: 週間分
|
140
|
+
years: 年分
|
141
|
+
yesterday: 昨日
|
139
142
|
date:
|
140
143
|
formats:
|
141
|
-
month:
|
142
|
-
quarter:
|
143
|
-
week:
|
144
|
-
year_month:
|
145
|
-
year_quarter:
|
144
|
+
month: "%m月"
|
145
|
+
quarter: 第%{quarter}四半期
|
146
|
+
week: 週
|
147
|
+
year_month: "%Y年%m月"
|
148
|
+
year_quarter: "%{year}年第%{quarter}四半期"
|
146
149
|
time:
|
147
150
|
formats:
|
148
|
-
picker: "%a
|
151
|
+
picker: "%Y年%m月%d日(%a) %H:%M:%S"
|
data/config/locales/ru.yml
CHANGED
@@ -18,7 +18,7 @@ ru:
|
|
18
18
|
between: В интервале
|
19
19
|
cancel: Отмена
|
20
20
|
cant_destroy_record: Запись %{record} не может быть удалена
|
21
|
-
changes:
|
21
|
+
changes:
|
22
22
|
click_to_edit: Нажмите для редактирования
|
23
23
|
click_to_reset: Нажмите для сброса
|
24
24
|
close: Закрыть
|
@@ -27,7 +27,7 @@ ru:
|
|
27
27
|
contains: Содержит
|
28
28
|
create: Создать
|
29
29
|
create_another: "%{model}: Создать другую запись"
|
30
|
-
create_apply:
|
30
|
+
create_apply:
|
31
31
|
create_model: "%{model}: создать запись"
|
32
32
|
create_new: Создать новую запись
|
33
33
|
created_model: "%{model}: запись создана"
|
@@ -41,12 +41,15 @@ ru:
|
|
41
41
|
closeText: Закрыть
|
42
42
|
currentText: Текущее время
|
43
43
|
timeText:
|
44
|
-
timezoneText:
|
44
|
+
timezoneText:
|
45
45
|
days: дней
|
46
46
|
delete: Удалить
|
47
47
|
deleted_model: "%{model}: запись удалена"
|
48
|
-
deleted_records:
|
48
|
+
deleted_records:
|
49
49
|
delimiter: Разделитель
|
50
|
+
doesnt_begin_with:
|
51
|
+
doesnt_contain:
|
52
|
+
doesnt_end_with:
|
50
53
|
download: Загрузить
|
51
54
|
edit: Изменить
|
52
55
|
ends_with: Оканчивается на
|
@@ -68,8 +71,8 @@ ru:
|
|
68
71
|
one: запись
|
69
72
|
other: записи
|
70
73
|
future: Будущие
|
71
|
-
group_by:
|
72
|
-
grouped_by:
|
74
|
+
group_by:
|
75
|
+
grouped_by:
|
73
76
|
hide: "(Скрыть)"
|
74
77
|
hours: часов
|
75
78
|
human_conditions:
|
@@ -91,9 +94,9 @@ ru:
|
|
91
94
|
next_week: На следующей неделе
|
92
95
|
next_year: В следующем году
|
93
96
|
no_authorization_for_action: Нет прав на выполнение действия "%{action}"
|
94
|
-
no_color:
|
97
|
+
no_color:
|
95
98
|
no_entries: Нет записей
|
96
|
-
no_group:
|
99
|
+
no_group:
|
97
100
|
no_options: Нет вариантов
|
98
101
|
not_null: Не пусто
|
99
102
|
'null': Пусто
|
@@ -137,7 +140,7 @@ ru:
|
|
137
140
|
tomorrow: Завтра
|
138
141
|
'true': Да
|
139
142
|
update: Обновить запись
|
140
|
-
update_apply:
|
143
|
+
update_apply:
|
141
144
|
update_model: "%{model}: обновить запись"
|
142
145
|
updated_model: "%{model}: запись обновлена"
|
143
146
|
version_inconsistency: Эта запись была обновлена с того момента, как вы начали ее редактировать
|
@@ -146,11 +149,11 @@ ru:
|
|
146
149
|
yesterday: Вчера
|
147
150
|
date:
|
148
151
|
formats:
|
149
|
-
month:
|
150
|
-
quarter:
|
151
|
-
week:
|
152
|
-
year_month:
|
153
|
-
year_quarter:
|
152
|
+
month:
|
153
|
+
quarter:
|
154
|
+
week:
|
155
|
+
year_month:
|
156
|
+
year_quarter:
|
154
157
|
time:
|
155
158
|
formats:
|
156
159
|
picker: "%a, %d %b %Y %H:%M:%S"
|
@@ -31,11 +31,11 @@ module ActiveScaffold::Actions
|
|
31
31
|
params_hash params[:search]
|
32
32
|
end
|
33
33
|
|
34
|
-
def set_outer_joins_for_search(columns)
|
34
|
+
def set_outer_joins_for_search(columns) # rubocop:disable Naming/AccessorMethodName
|
35
35
|
references = []
|
36
36
|
outer_joins = []
|
37
37
|
columns.each do |column|
|
38
|
-
next
|
38
|
+
next if column.search_joins.blank?
|
39
39
|
if column.includes.present? && list_columns.include?(column)
|
40
40
|
references << (column.search_joins & column.includes)
|
41
41
|
outer_joins << (column.search_joins - column.includes)
|
@@ -6,6 +6,7 @@ module ActiveScaffold::Actions
|
|
6
6
|
before_action :check_input_device
|
7
7
|
before_action :register_constraints_with_action_columns, :unless => :nested?
|
8
8
|
after_action :clear_flashes
|
9
|
+
after_action :dl_cookie
|
9
10
|
around_action :clear_storage
|
10
11
|
rescue_from ActiveScaffold::RecordNotAllowed, ActiveScaffold::ActionNotAllowed, :with => :deny_access
|
11
12
|
end
|
@@ -22,7 +23,7 @@ module ActiveScaffold::Actions
|
|
22
23
|
end
|
23
24
|
|
24
25
|
def render_field
|
25
|
-
if request.get?
|
26
|
+
if request.get? || request.head?
|
26
27
|
render_field_for_inplace_editing
|
27
28
|
respond_to do |format|
|
28
29
|
format.js { render :action => 'render_field_inplace', :layout => false }
|
@@ -61,14 +62,18 @@ module ActiveScaffold::Actions
|
|
61
62
|
@source_id = params.delete(:source_id)
|
62
63
|
@columns = @column.update_columns || []
|
63
64
|
@scope = params.delete(:scope)
|
64
|
-
|
65
|
-
|
66
|
-
|
65
|
+
if @scope
|
66
|
+
@form_action = :subform
|
67
|
+
elsif active_scaffold_config.actions.include? params[:form_action]&.to_sym
|
68
|
+
@form_action = params.delete(:form_action).to_sym
|
69
|
+
end
|
70
|
+
@form_action ||= params[:id] ? :update : :create
|
71
|
+
@main_columns = active_scaffold_config.send(@form_action).columns
|
67
72
|
@columns << @column.name if @column.options[:refresh_link] && @columns.exclude?(@column.name)
|
68
73
|
|
69
74
|
@record =
|
70
75
|
if @column.send_form_on_update_column
|
71
|
-
updated_record_with_form(@main_columns, params[:record], @scope)
|
76
|
+
updated_record_with_form(@main_columns, params[:record] || params[:search], @scope)
|
72
77
|
else
|
73
78
|
updated_record_with_column(@column, params.delete(:value), @scope)
|
74
79
|
end
|
@@ -100,7 +105,14 @@ module ActiveScaffold::Actions
|
|
100
105
|
record = params[:id] ? copy_attributes(find_if_allowed(params[:id], :read)) : new_model
|
101
106
|
apply_constraints_to_record(record) unless scope || params[:id]
|
102
107
|
create_association_with_parent record, true if nested?
|
103
|
-
|
108
|
+
if @form_action == :field_search && value.is_a?(Array) && column.association&.singular?
|
109
|
+
# don't assign value if it's an array and column is singular association,
|
110
|
+
# e.g. value came from multi-select on search form
|
111
|
+
# use instance variable so it's available in the view and helpers
|
112
|
+
@value = value
|
113
|
+
else
|
114
|
+
update_column_from_params(record, column, value, true)
|
115
|
+
end
|
104
116
|
record.id = params[:id]
|
105
117
|
record
|
106
118
|
end
|
@@ -165,6 +177,10 @@ module ActiveScaffold::Actions
|
|
165
177
|
flash.clear if request.xhr?
|
166
178
|
end
|
167
179
|
|
180
|
+
def dl_cookie
|
181
|
+
cookies[params[:_dl_cookie]] = {value: Time.now.to_i, expires: 1.day.since} if params[:_dl_cookie]
|
182
|
+
end
|
183
|
+
|
168
184
|
def each_marked_record(&block)
|
169
185
|
active_scaffold_config.model.as_marked.each(&block)
|
170
186
|
end
|
@@ -248,7 +264,7 @@ module ActiveScaffold::Actions
|
|
248
264
|
@conditions_from_params ||= begin
|
249
265
|
conditions = [{}]
|
250
266
|
params.except(:controller, :action, :page, :sort, :sort_direction, :format, :id).each do |key, value|
|
251
|
-
distinct = true if key
|
267
|
+
distinct = true if key.match?(/!$/)
|
252
268
|
column = active_scaffold_config._columns_hash[key.to_s[0..(distinct ? -2 : -1)]]
|
253
269
|
next unless column
|
254
270
|
key = column.name.to_sym
|
@@ -321,7 +337,8 @@ module ActiveScaffold::Actions
|
|
321
337
|
|
322
338
|
def check_input_device
|
323
339
|
return unless session[:input_device_type].nil?
|
324
|
-
if request.env['HTTP_USER_AGENT']
|
340
|
+
return if request.env['HTTP_USER_AGENT'].nil?
|
341
|
+
if request.env['HTTP_USER_AGENT'].match?(/(iPhone|iPod|iPad)/i)
|
325
342
|
session[:input_device_type] = 'TOUCH'
|
326
343
|
session[:hover_supported] = false
|
327
344
|
else
|
@@ -362,14 +379,14 @@ module ActiveScaffold::Actions
|
|
362
379
|
# flash[:info] = 'Player fired'
|
363
380
|
# end
|
364
381
|
def process_action_link_action(render_action = :action_update, crud_type_or_security_options = nil)
|
365
|
-
if request.get?
|
382
|
+
if request.get? || request.head?
|
366
383
|
# someone has disabled javascript, we have to show confirmation form first
|
367
384
|
@record = find_if_allowed(params[:id], :read) if params[:id]
|
368
385
|
respond_to_action(:action_confirmation)
|
369
386
|
else
|
370
387
|
@action_link = active_scaffold_config.action_links[action_name]
|
371
388
|
if params[:id]
|
372
|
-
crud_type_or_security_options ||= {:crud_type => request.
|
389
|
+
crud_type_or_security_options ||= {:crud_type => request.delete? ? :delete : :update, :action => action_name}
|
373
390
|
get_row(crud_type_or_security_options)
|
374
391
|
if @record.nil?
|
375
392
|
self.successful = false
|
@@ -378,6 +395,9 @@ module ActiveScaffold::Actions
|
|
378
395
|
yield @record
|
379
396
|
end
|
380
397
|
else
|
398
|
+
if @action_link && respond_to?(@action_link.security_method, true) && !send(@action_link.security_method)
|
399
|
+
raise ActiveScaffold::ActionNotAllowed
|
400
|
+
end
|
381
401
|
yield
|
382
402
|
end
|
383
403
|
respond_to_action(render_action)
|
@@ -154,7 +154,6 @@ module ActiveScaffold::Actions
|
|
154
154
|
filtered_columns = []
|
155
155
|
text_search = active_scaffold_config.field_search.text_search
|
156
156
|
columns = active_scaffold_config.field_search.columns
|
157
|
-
count_includes = active_scaffold_config.list.user.count_includes
|
158
157
|
search_params.each do |key, value|
|
159
158
|
next unless columns.include? key
|
160
159
|
column = active_scaffold_config.columns[key]
|
@@ -164,11 +163,7 @@ module ActiveScaffold::Actions
|
|
164
163
|
active_scaffold_conditions << search_condition
|
165
164
|
filtered_columns << column
|
166
165
|
end
|
167
|
-
|
168
|
-
active_scaffold_outer_joins.concat filtered_columns.map(&:search_joins).flatten.uniq.compact
|
169
|
-
else
|
170
|
-
set_outer_joins_for_search filtered_columns
|
171
|
-
end
|
166
|
+
setup_joins_for_filtered_columns(filtered_columns)
|
172
167
|
if filtered_columns.present? || grouped_search?
|
173
168
|
@filtered = active_scaffold_config.field_search.human_conditions ? filtered_columns : true
|
174
169
|
end
|
@@ -182,6 +177,14 @@ module ActiveScaffold::Actions
|
|
182
177
|
|
183
178
|
private
|
184
179
|
|
180
|
+
def setup_joins_for_filtered_columns(filtered_columns)
|
181
|
+
if grouped_search? || active_scaffold_config.list.user.count_includes.present?
|
182
|
+
active_scaffold_outer_joins.concat filtered_columns.map(&:search_joins).flatten.uniq.compact
|
183
|
+
else
|
184
|
+
set_outer_joins_for_search filtered_columns
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
185
188
|
def field_search_formats
|
186
189
|
(default_formats + active_scaffold_config.formats + active_scaffold_config.field_search.formats).uniq
|
187
190
|
end
|
@@ -8,7 +8,7 @@ module ActiveScaffold::Actions
|
|
8
8
|
base.module_eval do
|
9
9
|
before_action :set_nested
|
10
10
|
before_action :configure_nested
|
11
|
-
include ActiveScaffold::Actions::Nested::ChildMethods if active_scaffold_config.
|
11
|
+
include ActiveScaffold::Actions::Nested::ChildMethods if active_scaffold_config.columns.map(&:association).compact.any?(&:habtm?)
|
12
12
|
end
|
13
13
|
base.before_action :include_habtm_actions
|
14
14
|
base.helper_method :nested
|
@@ -120,9 +120,9 @@ module ActiveScaffold::Actions
|
|
120
120
|
|
121
121
|
def create_association_with_parent?(check_match = false)
|
122
122
|
# has_many is done by beginning_of_chain and rails if direct association, not in through associations
|
123
|
-
return false
|
123
|
+
return false unless nested.create_with_parent?
|
124
124
|
return false if check_match && !nested.match_model?(active_scaffold_config.model)
|
125
|
-
|
125
|
+
nested_parent_record.present?
|
126
126
|
end
|
127
127
|
|
128
128
|
def create_association_with_parent(record, check_match = false)
|
@@ -131,7 +131,7 @@ module ActiveScaffold::Actions
|
|
131
131
|
record.send("#{nested.child_association.name}=", nested_parent_record)
|
132
132
|
elsif nested.create_through_singular?
|
133
133
|
through = nested_parent_record.send(nested.association.through_reflection.name) ||
|
134
|
-
|
134
|
+
nested_parent_record.send("build_#{nested.association.through_reflection.name}")
|
135
135
|
if nested.source_reflection.reverse_association.collection?
|
136
136
|
record.send(nested.source_reflection.reverse) << through
|
137
137
|
else
|
@@ -167,7 +167,7 @@ module ActiveScaffold::Actions::Nested
|
|
167
167
|
end
|
168
168
|
|
169
169
|
def destroy_existing
|
170
|
-
return redirect_to(params.merge(:action => :delete, :only_path => true)) if request.get?
|
170
|
+
return redirect_to(params.merge(:action => :delete, :only_path => true)) if request.get? || request.head?
|
171
171
|
do_destroy_existing
|
172
172
|
respond_to_action(:destroy_existing)
|
173
173
|
end
|
@@ -247,8 +247,8 @@ module ActiveScaffold::Actions::Nested
|
|
247
247
|
parent_record = nested_parent_record(:update)
|
248
248
|
@record = active_scaffold_config.model.find(params[:associated_id])
|
249
249
|
if parent_record && @record
|
250
|
-
parent_record.send(nested.association.name) << @record
|
251
|
-
parent_record.save
|
250
|
+
self.successful = false unless parent_record.send(nested.association.name) << @record
|
251
|
+
parent_record.save if successful?
|
252
252
|
else
|
253
253
|
false
|
254
254
|
end
|
@@ -185,11 +185,11 @@ module ActiveScaffold::Actions
|
|
185
185
|
|
186
186
|
def value_for_update_column(param_value, column, record)
|
187
187
|
unless param_value
|
188
|
-
param_value = ActiveScaffold::Core.column_type_cast
|
188
|
+
param_value = ActiveScaffold::Core.column_type_cast column.default_for_empty_value, column.column
|
189
189
|
param_value = false if param_value == true
|
190
190
|
end
|
191
|
-
value = column_value_from_param_value(record,
|
192
|
-
value = [] if value.nil? &&
|
191
|
+
value = column_value_from_param_value(record, column, param_value)
|
192
|
+
value = [] if value.nil? && column.form_ui && column.association&.collection?
|
193
193
|
value
|
194
194
|
end
|
195
195
|
|