tramway 0.1.0 → 0.1.1
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.
- checksums.yaml +5 -5
- data/MIT-LICENSE +20 -0
- data/README.md +889 -15
- data/Rakefile +8 -8
- data/app/assets/config/tramway_core_manifest.js +2 -0
- data/app/assets/images/tramway/mona_lisa_from_prado.jpg +0 -0
- data/app/assets/images/tramway/mona_lisa_from_prado_square.jpg +0 -0
- data/app/assets/javascripts/bootstrap-datepicker-1.8.0.js +2035 -0
- data/app/assets/javascripts/bootstrap-datepicker-1.8.0.ru.min.js +64 -0
- data/app/assets/javascripts/ckeditor/config.js +30 -0
- data/app/assets/javascripts/ckeditor/plugins/image/dialogs/image.js +1259 -0
- data/app/assets/javascripts/ckeditor/plugins/image/icons/hidpi/image.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image/icons/image.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image/images/noimage.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/image/lang/en.js +25 -0
- data/app/assets/javascripts/ckeditor/plugins/image/lang/ru.js +25 -0
- data/app/assets/javascripts/ckeditor/plugins/image/plugin.js +184 -0
- data/app/assets/javascripts/ckeditor/plugins/youtube/images/icon-hdpi.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/youtube/images/icon.png +0 -0
- data/app/assets/javascripts/ckeditor/plugins/youtube/lang/en.js +25 -0
- data/app/assets/javascripts/ckeditor/plugins/youtube/lang/ru.js +25 -0
- data/app/assets/javascripts/ckeditor/plugins/youtube/plugin.js +449 -0
- data/app/assets/javascripts/tramway/application.js +60 -0
- data/app/assets/stylesheets/tramway/application.sass +60 -0
- data/app/assets/stylesheets/tramway/bootstrap-datepicker-1.8.0.css +477 -0
- data/app/controllers/concerns/auth_management.rb +26 -0
- data/app/controllers/concerns/filtering.rb +43 -0
- data/app/controllers/tramway/application_controller.rb +142 -0
- data/app/controllers/tramway/export/application_controller.rb +5 -0
- data/app/controllers/tramway/has_and_belongs_to_many_records_controller.rb +26 -0
- data/app/controllers/tramway/records_controller.rb +86 -0
- data/app/controllers/tramway/sessions_controller.rb +49 -0
- data/app/controllers/tramway/singletons_controller.rb +48 -0
- data/app/controllers/tramway/welcome_controller.rb +17 -0
- data/app/decorators/tramway/application_decorated_collection.rb +15 -0
- data/app/decorators/tramway/application_decorator.rb +124 -0
- data/app/decorators/tramway/associations/class_helper.rb +45 -0
- data/app/decorators/tramway/associations/object_helper.rb +58 -0
- data/app/decorators/tramway/attributes/view_helper.rb +30 -0
- data/app/decorators/tramway/concerns/attributes_decorator_helper.rb +97 -0
- data/app/decorators/tramway/concerns/table_builder.rb +33 -0
- data/app/decorators/tramway/default/values_helper.rb +23 -0
- data/app/decorators/tramway/delegating/class_helper.rb +9 -0
- data/app/decorators/tramway/user_decorator.rb +49 -0
- data/app/forms/admin/tramway/user_form.rb +24 -0
- data/app/forms/tramway/application_form.rb +124 -0
- data/app/forms/tramway/application_forms/association_class_helpers.rb +7 -0
- data/app/forms/tramway/application_forms/association_object_helpers.rb +36 -0
- data/app/forms/tramway/application_forms/constant_class_actions.rb +7 -0
- data/app/forms/tramway/application_forms/constant_object_actions.rb +20 -0
- data/app/forms/tramway/application_forms/frontend.rb +12 -0
- data/app/forms/tramway/application_forms/object_helpers.rb +15 -0
- data/app/forms/tramway/application_forms/properties_object_helper.rb +16 -0
- data/app/forms/tramway/application_forms/submit_helper.rb +26 -0
- data/app/forms/tramway/extendable_form.rb +15 -0
- data/app/forms/tramway/extendable_forms_helpers/class_builder.rb +34 -0
- data/app/forms/tramway/extendable_forms_helpers/ignored_properties_helper.rb +11 -0
- data/app/forms/tramway/extendable_forms_helpers/more_properties_helper.rb +31 -0
- data/app/forms/tramway/extendable_forms_helpers/properties_helper.rb +16 -0
- data/app/forms/tramway/extendable_forms_helpers/submit/class_helpers.rb +18 -0
- data/app/forms/tramway/extendable_forms_helpers/submit/object_helpers.rb +21 -0
- data/app/forms/tramway/extendable_forms_helpers/validators.rb +40 -0
- data/app/forms/tramway/extended_application_form.rb +23 -0
- data/app/forms/tramway/form_creator.rb +7 -0
- data/app/forms/tramway/session_form.rb +26 -0
- data/app/helpers/tramway/actions_helper.rb +45 -0
- data/app/helpers/tramway/additional_buttons_builder.rb +12 -0
- data/app/helpers/tramway/application_helper.rb +27 -0
- data/app/helpers/tramway/cases_helper.rb +13 -0
- data/app/helpers/tramway/copy_to_clipboard_helper.rb +11 -0
- data/app/helpers/tramway/focus_generator_helper.rb +10 -0
- data/app/helpers/tramway/frontend_helper.rb +26 -0
- data/app/helpers/tramway/inputs/associations_helper.rb +30 -0
- data/app/helpers/tramway/inputs/polymorphic_associations_helper.rb +24 -0
- data/app/helpers/tramway/inputs_helper.rb +96 -0
- data/app/helpers/tramway/model_helper.rb +7 -0
- data/app/helpers/tramway/navbar_helper.rb +11 -0
- data/app/helpers/tramway/records_helper.rb +120 -0
- data/app/helpers/tramway/russian_cases_helper.rb +26 -0
- data/app/helpers/tramway/singleton_helper.rb +12 -0
- data/app/helpers/tramway/state_machine_buttons_helper.rb +61 -0
- data/app/helpers/tramway/title_helper.rb +25 -0
- data/app/inputs/date_picker_input.rb +4 -0
- data/app/inputs/multiple_file_input.rb +7 -0
- data/app/models/tramway/application_record.rb +60 -0
- data/app/models/tramway/user.rb +23 -0
- data/app/uploaders/application_uploader.rb +22 -0
- data/app/uploaders/file_uploader.rb +4 -0
- data/app/uploaders/ico_uploader.rb +7 -0
- data/app/uploaders/image_defaults.rb +14 -0
- data/app/uploaders/photo_uploader.rb +54 -0
- data/app/views/layouts/tramway/application.html.haml +32 -0
- data/app/views/layouts/tramway/shared/_navbar.html.haml +46 -0
- data/app/views/tramway/404.haml +1 -0
- data/app/views/tramway/records/_form.html.haml +22 -0
- data/app/views/tramway/records/_list.html.haml +38 -0
- data/app/views/tramway/records/_search.html.haml +34 -0
- data/app/views/tramway/records/edit.html.haml +1 -0
- data/app/views/tramway/records/index.html.haml +31 -0
- data/app/views/tramway/records/new.html.haml +1 -0
- data/app/views/tramway/records/show.html.haml +1 -0
- data/app/views/tramway/sessions/new.html.haml +9 -0
- data/app/views/tramway/shared/_input.html.haml +34 -0
- data/app/views/tramway/shared/_input_extended.html.haml +14 -0
- data/app/views/tramway/shared/_messages.html.haml +10 -0
- data/app/views/tramway/shared/_show.html.haml +35 -0
- data/app/views/tramway/shared/errors/server_error.html.haml +12 -0
- data/app/views/tramway/shared/input_extended_types/_checkbox.html.haml +1 -0
- data/app/views/tramway/shared/input_extended_types/_select.html.haml +16 -0
- data/app/views/tramway/shared/input_extended_types/_simple.html.haml +4 -0
- data/app/views/tramway/shared/input_extended_types/_yes_no.html.haml +4 -0
- data/app/views/tramway/shared/show/_attribute_tr.html.haml +9 -0
- data/app/views/tramway/shared/show/associations/_habtm_row.html.haml +14 -0
- data/app/views/tramway/shared/show/associations/_list.html.haml +21 -0
- data/app/views/tramway/shared/show/associations/_row.html.haml +19 -0
- data/app/views/tramway/shared/show/associations/_table_row.html.haml +21 -0
- data/app/views/tramway/singletons/_form.html.haml +15 -0
- data/app/views/tramway/singletons/edit.html.haml +1 -0
- data/app/views/tramway/singletons/new.html.haml +1 -0
- data/app/views/tramway/singletons/show.html.haml +1 -0
- data/app/views/tramway/welcome/index.html.haml +4 -0
- data/config/initializers/assets.rb +7 -0
- data/config/initializers/carrierwave.rb +5 -0
- data/config/initializers/ckeditor.rb +9 -0
- data/config/initializers/plurals.rb +25 -0
- data/config/locales/en/collections.yml +4 -0
- data/config/locales/en/date.yml +16 -0
- data/config/locales/en/dates.yml +10 -0
- data/config/locales/en/helpers.yml +26 -0
- data/config/locales/en/locale.yml +11 -0
- data/config/locales/en/messages.yml +7 -0
- data/config/locales/en/models.yml +9 -0
- data/config/locales/en/simple_form_extension.yml +8 -0
- data/config/locales/en/state_machines.yml +8 -0
- data/config/locales/ru/collections.yml +4 -0
- data/config/locales/ru/date.yml +16 -0
- data/config/locales/ru/dates.yml +10 -0
- data/config/locales/ru/helpers.yml +30 -0
- data/config/locales/ru/locale.yml +6 -0
- data/config/locales/ru/messages.yml +7 -0
- data/config/locales/ru/models.yml +21 -0
- data/config/locales/ru/simple_form_extension.yml +8 -0
- data/config/locales/ru/state_machines.yml +8 -0
- data/config/routes.rb +13 -0
- data/lib/string.rb +18 -0
- data/lib/tramway/application.rb +10 -0
- data/lib/tramway/class_name_helpers.rb +15 -0
- data/lib/tramway/collection.rb +9 -0
- data/lib/tramway/collections/helper.rb +21 -0
- data/lib/tramway/collections.rb +4 -0
- data/lib/tramway/engine.rb +14 -0
- data/lib/tramway/error.rb +32 -0
- data/lib/tramway/forms.rb +5 -0
- data/lib/tramway/generators/install_generator.rb +49 -0
- data/lib/tramway/generators/model_generator.rb +105 -0
- data/lib/tramway/generators/templates/create_tramway_users.rb +18 -0
- data/lib/tramway/generators/templates/decorator.rb.erb +56 -0
- data/lib/tramway/generators/templates/form.rb.erb +22 -0
- data/lib/tramway/generators/templates/initializers/simple_form.rb +23 -0
- data/lib/tramway/generators/templates/initializers/simple_form_bootstrap.rb +133 -0
- data/lib/tramway/generators.rb +4 -0
- data/lib/tramway/navbar.rb +44 -0
- data/lib/tramway/notifications.rb +12 -0
- data/lib/tramway/record_routes_helper.rb +23 -0
- data/lib/tramway/records_models.rb +52 -0
- data/lib/tramway/singleton_models.rb +32 -0
- data/lib/tramway/spec/helpers/navbar_helper.rb +7 -0
- data/lib/tramway/spec/helpers/tramway_helpers.rb +47 -0
- data/lib/tramway/version.rb +3 -1
- data/lib/tramway/welcome_page_actions.rb +5 -0
- data/lib/tramway/yaml/errors.yml +49 -0
- data/lib/tramway.rb +143 -2
- data/lib/validators/presence_validator.rb +9 -0
- metadata +582 -25
- data/.gitignore +0 -9
- data/.travis.yml +0 -5
- data/Gemfile +0 -6
- data/bin/console +0 -14
- data/bin/setup +0 -8
- data/tramway.gemspec +0 -26
|
@@ -0,0 +1,477 @@
|
|
|
1
|
+
/*!
|
|
2
|
+
* Datepicker for Bootstrap v1.8.0 (https://github.com/uxsolutions/bootstrap-datepicker)
|
|
3
|
+
*
|
|
4
|
+
* Licensed under the Apache License v2.0 (http://www.apache.org/licenses/LICENSE-2.0)
|
|
5
|
+
*/
|
|
6
|
+
|
|
7
|
+
.datepicker {
|
|
8
|
+
padding: 4px;
|
|
9
|
+
-webkit-border-radius: 4px;
|
|
10
|
+
-moz-border-radius: 4px;
|
|
11
|
+
border-radius: 4px;
|
|
12
|
+
direction: ltr;
|
|
13
|
+
}
|
|
14
|
+
.datepicker-inline {
|
|
15
|
+
width: 220px;
|
|
16
|
+
}
|
|
17
|
+
.datepicker-rtl {
|
|
18
|
+
direction: rtl;
|
|
19
|
+
}
|
|
20
|
+
.datepicker-rtl.dropdown-menu {
|
|
21
|
+
left: auto;
|
|
22
|
+
}
|
|
23
|
+
.datepicker-rtl table tr td span {
|
|
24
|
+
float: right;
|
|
25
|
+
}
|
|
26
|
+
.datepicker-dropdown {
|
|
27
|
+
top: 0;
|
|
28
|
+
left: 0;
|
|
29
|
+
}
|
|
30
|
+
.datepicker-dropdown:before {
|
|
31
|
+
content: '';
|
|
32
|
+
display: inline-block;
|
|
33
|
+
border-left: 7px solid transparent;
|
|
34
|
+
border-right: 7px solid transparent;
|
|
35
|
+
border-bottom: 7px solid #999;
|
|
36
|
+
border-top: 0;
|
|
37
|
+
border-bottom-color: rgba(0, 0, 0, 0.2);
|
|
38
|
+
position: absolute;
|
|
39
|
+
}
|
|
40
|
+
.datepicker-dropdown:after {
|
|
41
|
+
content: '';
|
|
42
|
+
display: inline-block;
|
|
43
|
+
border-left: 6px solid transparent;
|
|
44
|
+
border-right: 6px solid transparent;
|
|
45
|
+
border-bottom: 6px solid #fff;
|
|
46
|
+
border-top: 0;
|
|
47
|
+
position: absolute;
|
|
48
|
+
}
|
|
49
|
+
.datepicker-dropdown.datepicker-orient-left:before {
|
|
50
|
+
left: 6px;
|
|
51
|
+
}
|
|
52
|
+
.datepicker-dropdown.datepicker-orient-left:after {
|
|
53
|
+
left: 7px;
|
|
54
|
+
}
|
|
55
|
+
.datepicker-dropdown.datepicker-orient-right:before {
|
|
56
|
+
right: 6px;
|
|
57
|
+
}
|
|
58
|
+
.datepicker-dropdown.datepicker-orient-right:after {
|
|
59
|
+
right: 7px;
|
|
60
|
+
}
|
|
61
|
+
.datepicker-dropdown.datepicker-orient-bottom:before {
|
|
62
|
+
top: -7px;
|
|
63
|
+
}
|
|
64
|
+
.datepicker-dropdown.datepicker-orient-bottom:after {
|
|
65
|
+
top: -6px;
|
|
66
|
+
}
|
|
67
|
+
.datepicker-dropdown.datepicker-orient-top:before {
|
|
68
|
+
bottom: -7px;
|
|
69
|
+
border-bottom: 0;
|
|
70
|
+
border-top: 7px solid #999;
|
|
71
|
+
}
|
|
72
|
+
.datepicker-dropdown.datepicker-orient-top:after {
|
|
73
|
+
bottom: -6px;
|
|
74
|
+
border-bottom: 0;
|
|
75
|
+
border-top: 6px solid #fff;
|
|
76
|
+
}
|
|
77
|
+
.datepicker table {
|
|
78
|
+
margin: 0;
|
|
79
|
+
-webkit-touch-callout: none;
|
|
80
|
+
-webkit-user-select: none;
|
|
81
|
+
-khtml-user-select: none;
|
|
82
|
+
-moz-user-select: none;
|
|
83
|
+
-ms-user-select: none;
|
|
84
|
+
user-select: none;
|
|
85
|
+
}
|
|
86
|
+
.datepicker td,
|
|
87
|
+
.datepicker th {
|
|
88
|
+
text-align: center;
|
|
89
|
+
width: 20px;
|
|
90
|
+
height: 20px;
|
|
91
|
+
-webkit-border-radius: 4px;
|
|
92
|
+
-moz-border-radius: 4px;
|
|
93
|
+
border-radius: 4px;
|
|
94
|
+
border: none;
|
|
95
|
+
}
|
|
96
|
+
.table-striped .datepicker table tr td,
|
|
97
|
+
.table-striped .datepicker table tr th {
|
|
98
|
+
background-color: transparent;
|
|
99
|
+
}
|
|
100
|
+
.datepicker table tr td.day:hover,
|
|
101
|
+
.datepicker table tr td.day.focused {
|
|
102
|
+
background: #eee;
|
|
103
|
+
cursor: pointer;
|
|
104
|
+
}
|
|
105
|
+
.datepicker table tr td.old,
|
|
106
|
+
.datepicker table tr td.new {
|
|
107
|
+
color: #999;
|
|
108
|
+
}
|
|
109
|
+
.datepicker table tr td.disabled,
|
|
110
|
+
.datepicker table tr td.disabled:hover {
|
|
111
|
+
background: none;
|
|
112
|
+
color: #999;
|
|
113
|
+
cursor: default;
|
|
114
|
+
}
|
|
115
|
+
.datepicker table tr td.highlighted {
|
|
116
|
+
background: #d9edf7;
|
|
117
|
+
border-radius: 0;
|
|
118
|
+
}
|
|
119
|
+
.datepicker table tr td.today,
|
|
120
|
+
.datepicker table tr td.today:hover,
|
|
121
|
+
.datepicker table tr td.today.disabled,
|
|
122
|
+
.datepicker table tr td.today.disabled:hover {
|
|
123
|
+
background-color: #fde19a;
|
|
124
|
+
background-image: -moz-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
|
125
|
+
background-image: -ms-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
|
126
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fdd49a), to(#fdf59a));
|
|
127
|
+
background-image: -webkit-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
|
128
|
+
background-image: -o-linear-gradient(to bottom, #fdd49a, #fdf59a);
|
|
129
|
+
background-image: linear-gradient(to bottom, #fdd49a, #fdf59a);
|
|
130
|
+
background-repeat: repeat-x;
|
|
131
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fdd49a', endColorstr='#fdf59a', GradientType=0);
|
|
132
|
+
border-color: #fdf59a #fdf59a #fbed50;
|
|
133
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
|
134
|
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
135
|
+
color: #000;
|
|
136
|
+
}
|
|
137
|
+
.datepicker table tr td.today:hover,
|
|
138
|
+
.datepicker table tr td.today:hover:hover,
|
|
139
|
+
.datepicker table tr td.today.disabled:hover,
|
|
140
|
+
.datepicker table tr td.today.disabled:hover:hover,
|
|
141
|
+
.datepicker table tr td.today:active,
|
|
142
|
+
.datepicker table tr td.today:hover:active,
|
|
143
|
+
.datepicker table tr td.today.disabled:active,
|
|
144
|
+
.datepicker table tr td.today.disabled:hover:active,
|
|
145
|
+
.datepicker table tr td.today.active,
|
|
146
|
+
.datepicker table tr td.today:hover.active,
|
|
147
|
+
.datepicker table tr td.today.disabled.active,
|
|
148
|
+
.datepicker table tr td.today.disabled:hover.active,
|
|
149
|
+
.datepicker table tr td.today.disabled,
|
|
150
|
+
.datepicker table tr td.today:hover.disabled,
|
|
151
|
+
.datepicker table tr td.today.disabled.disabled,
|
|
152
|
+
.datepicker table tr td.today.disabled:hover.disabled,
|
|
153
|
+
.datepicker table tr td.today[disabled],
|
|
154
|
+
.datepicker table tr td.today:hover[disabled],
|
|
155
|
+
.datepicker table tr td.today.disabled[disabled],
|
|
156
|
+
.datepicker table tr td.today.disabled:hover[disabled] {
|
|
157
|
+
background-color: #fdf59a;
|
|
158
|
+
}
|
|
159
|
+
.datepicker table tr td.today:active,
|
|
160
|
+
.datepicker table tr td.today:hover:active,
|
|
161
|
+
.datepicker table tr td.today.disabled:active,
|
|
162
|
+
.datepicker table tr td.today.disabled:hover:active,
|
|
163
|
+
.datepicker table tr td.today.active,
|
|
164
|
+
.datepicker table tr td.today:hover.active,
|
|
165
|
+
.datepicker table tr td.today.disabled.active,
|
|
166
|
+
.datepicker table tr td.today.disabled:hover.active {
|
|
167
|
+
background-color: #fbf069 \9;
|
|
168
|
+
}
|
|
169
|
+
.datepicker table tr td.today:hover:hover {
|
|
170
|
+
color: #000;
|
|
171
|
+
}
|
|
172
|
+
.datepicker table tr td.today.active:hover {
|
|
173
|
+
color: #fff;
|
|
174
|
+
}
|
|
175
|
+
.datepicker table tr td.range,
|
|
176
|
+
.datepicker table tr td.range:hover,
|
|
177
|
+
.datepicker table tr td.range.disabled,
|
|
178
|
+
.datepicker table tr td.range.disabled:hover {
|
|
179
|
+
background: #eee;
|
|
180
|
+
-webkit-border-radius: 0;
|
|
181
|
+
-moz-border-radius: 0;
|
|
182
|
+
border-radius: 0;
|
|
183
|
+
}
|
|
184
|
+
.datepicker table tr td.range.today,
|
|
185
|
+
.datepicker table tr td.range.today:hover,
|
|
186
|
+
.datepicker table tr td.range.today.disabled,
|
|
187
|
+
.datepicker table tr td.range.today.disabled:hover {
|
|
188
|
+
background-color: #f3d17a;
|
|
189
|
+
background-image: -moz-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
|
190
|
+
background-image: -ms-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
|
191
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f3c17a), to(#f3e97a));
|
|
192
|
+
background-image: -webkit-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
|
193
|
+
background-image: -o-linear-gradient(to bottom, #f3c17a, #f3e97a);
|
|
194
|
+
background-image: linear-gradient(to bottom, #f3c17a, #f3e97a);
|
|
195
|
+
background-repeat: repeat-x;
|
|
196
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f3c17a', endColorstr='#f3e97a', GradientType=0);
|
|
197
|
+
border-color: #f3e97a #f3e97a #edde34;
|
|
198
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
|
199
|
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
200
|
+
-webkit-border-radius: 0;
|
|
201
|
+
-moz-border-radius: 0;
|
|
202
|
+
border-radius: 0;
|
|
203
|
+
}
|
|
204
|
+
.datepicker table tr td.range.today:hover,
|
|
205
|
+
.datepicker table tr td.range.today:hover:hover,
|
|
206
|
+
.datepicker table tr td.range.today.disabled:hover,
|
|
207
|
+
.datepicker table tr td.range.today.disabled:hover:hover,
|
|
208
|
+
.datepicker table tr td.range.today:active,
|
|
209
|
+
.datepicker table tr td.range.today:hover:active,
|
|
210
|
+
.datepicker table tr td.range.today.disabled:active,
|
|
211
|
+
.datepicker table tr td.range.today.disabled:hover:active,
|
|
212
|
+
.datepicker table tr td.range.today.active,
|
|
213
|
+
.datepicker table tr td.range.today:hover.active,
|
|
214
|
+
.datepicker table tr td.range.today.disabled.active,
|
|
215
|
+
.datepicker table tr td.range.today.disabled:hover.active,
|
|
216
|
+
.datepicker table tr td.range.today.disabled,
|
|
217
|
+
.datepicker table tr td.range.today:hover.disabled,
|
|
218
|
+
.datepicker table tr td.range.today.disabled.disabled,
|
|
219
|
+
.datepicker table tr td.range.today.disabled:hover.disabled,
|
|
220
|
+
.datepicker table tr td.range.today[disabled],
|
|
221
|
+
.datepicker table tr td.range.today:hover[disabled],
|
|
222
|
+
.datepicker table tr td.range.today.disabled[disabled],
|
|
223
|
+
.datepicker table tr td.range.today.disabled:hover[disabled] {
|
|
224
|
+
background-color: #f3e97a;
|
|
225
|
+
}
|
|
226
|
+
.datepicker table tr td.range.today:active,
|
|
227
|
+
.datepicker table tr td.range.today:hover:active,
|
|
228
|
+
.datepicker table tr td.range.today.disabled:active,
|
|
229
|
+
.datepicker table tr td.range.today.disabled:hover:active,
|
|
230
|
+
.datepicker table tr td.range.today.active,
|
|
231
|
+
.datepicker table tr td.range.today:hover.active,
|
|
232
|
+
.datepicker table tr td.range.today.disabled.active,
|
|
233
|
+
.datepicker table tr td.range.today.disabled:hover.active {
|
|
234
|
+
background-color: #efe24b \9;
|
|
235
|
+
}
|
|
236
|
+
.datepicker table tr td.selected,
|
|
237
|
+
.datepicker table tr td.selected:hover,
|
|
238
|
+
.datepicker table tr td.selected.disabled,
|
|
239
|
+
.datepicker table tr td.selected.disabled:hover {
|
|
240
|
+
background-color: #9e9e9e;
|
|
241
|
+
background-image: -moz-linear-gradient(to bottom, #b3b3b3, #808080);
|
|
242
|
+
background-image: -ms-linear-gradient(to bottom, #b3b3b3, #808080);
|
|
243
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#b3b3b3), to(#808080));
|
|
244
|
+
background-image: -webkit-linear-gradient(to bottom, #b3b3b3, #808080);
|
|
245
|
+
background-image: -o-linear-gradient(to bottom, #b3b3b3, #808080);
|
|
246
|
+
background-image: linear-gradient(to bottom, #b3b3b3, #808080);
|
|
247
|
+
background-repeat: repeat-x;
|
|
248
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#b3b3b3', endColorstr='#808080', GradientType=0);
|
|
249
|
+
border-color: #808080 #808080 #595959;
|
|
250
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
|
251
|
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
252
|
+
color: #fff;
|
|
253
|
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
254
|
+
}
|
|
255
|
+
.datepicker table tr td.selected:hover,
|
|
256
|
+
.datepicker table tr td.selected:hover:hover,
|
|
257
|
+
.datepicker table tr td.selected.disabled:hover,
|
|
258
|
+
.datepicker table tr td.selected.disabled:hover:hover,
|
|
259
|
+
.datepicker table tr td.selected:active,
|
|
260
|
+
.datepicker table tr td.selected:hover:active,
|
|
261
|
+
.datepicker table tr td.selected.disabled:active,
|
|
262
|
+
.datepicker table tr td.selected.disabled:hover:active,
|
|
263
|
+
.datepicker table tr td.selected.active,
|
|
264
|
+
.datepicker table tr td.selected:hover.active,
|
|
265
|
+
.datepicker table tr td.selected.disabled.active,
|
|
266
|
+
.datepicker table tr td.selected.disabled:hover.active,
|
|
267
|
+
.datepicker table tr td.selected.disabled,
|
|
268
|
+
.datepicker table tr td.selected:hover.disabled,
|
|
269
|
+
.datepicker table tr td.selected.disabled.disabled,
|
|
270
|
+
.datepicker table tr td.selected.disabled:hover.disabled,
|
|
271
|
+
.datepicker table tr td.selected[disabled],
|
|
272
|
+
.datepicker table tr td.selected:hover[disabled],
|
|
273
|
+
.datepicker table tr td.selected.disabled[disabled],
|
|
274
|
+
.datepicker table tr td.selected.disabled:hover[disabled] {
|
|
275
|
+
background-color: #808080;
|
|
276
|
+
}
|
|
277
|
+
.datepicker table tr td.selected:active,
|
|
278
|
+
.datepicker table tr td.selected:hover:active,
|
|
279
|
+
.datepicker table tr td.selected.disabled:active,
|
|
280
|
+
.datepicker table tr td.selected.disabled:hover:active,
|
|
281
|
+
.datepicker table tr td.selected.active,
|
|
282
|
+
.datepicker table tr td.selected:hover.active,
|
|
283
|
+
.datepicker table tr td.selected.disabled.active,
|
|
284
|
+
.datepicker table tr td.selected.disabled:hover.active {
|
|
285
|
+
background-color: #666666 \9;
|
|
286
|
+
}
|
|
287
|
+
.datepicker table tr td.active,
|
|
288
|
+
.datepicker table tr td.active:hover,
|
|
289
|
+
.datepicker table tr td.active.disabled,
|
|
290
|
+
.datepicker table tr td.active.disabled:hover {
|
|
291
|
+
background-color: #006dcc;
|
|
292
|
+
background-image: -moz-linear-gradient(to bottom, #08c, #0044cc);
|
|
293
|
+
background-image: -ms-linear-gradient(to bottom, #08c, #0044cc);
|
|
294
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc));
|
|
295
|
+
background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc);
|
|
296
|
+
background-image: -o-linear-gradient(to bottom, #08c, #0044cc);
|
|
297
|
+
background-image: linear-gradient(to bottom, #08c, #0044cc);
|
|
298
|
+
background-repeat: repeat-x;
|
|
299
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);
|
|
300
|
+
border-color: #0044cc #0044cc #002a80;
|
|
301
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
|
302
|
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
303
|
+
color: #fff;
|
|
304
|
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
305
|
+
}
|
|
306
|
+
.datepicker table tr td.active:hover,
|
|
307
|
+
.datepicker table tr td.active:hover:hover,
|
|
308
|
+
.datepicker table tr td.active.disabled:hover,
|
|
309
|
+
.datepicker table tr td.active.disabled:hover:hover,
|
|
310
|
+
.datepicker table tr td.active:active,
|
|
311
|
+
.datepicker table tr td.active:hover:active,
|
|
312
|
+
.datepicker table tr td.active.disabled:active,
|
|
313
|
+
.datepicker table tr td.active.disabled:hover:active,
|
|
314
|
+
.datepicker table tr td.active.active,
|
|
315
|
+
.datepicker table tr td.active:hover.active,
|
|
316
|
+
.datepicker table tr td.active.disabled.active,
|
|
317
|
+
.datepicker table tr td.active.disabled:hover.active,
|
|
318
|
+
.datepicker table tr td.active.disabled,
|
|
319
|
+
.datepicker table tr td.active:hover.disabled,
|
|
320
|
+
.datepicker table tr td.active.disabled.disabled,
|
|
321
|
+
.datepicker table tr td.active.disabled:hover.disabled,
|
|
322
|
+
.datepicker table tr td.active[disabled],
|
|
323
|
+
.datepicker table tr td.active:hover[disabled],
|
|
324
|
+
.datepicker table tr td.active.disabled[disabled],
|
|
325
|
+
.datepicker table tr td.active.disabled:hover[disabled] {
|
|
326
|
+
background-color: #0044cc;
|
|
327
|
+
}
|
|
328
|
+
.datepicker table tr td.active:active,
|
|
329
|
+
.datepicker table tr td.active:hover:active,
|
|
330
|
+
.datepicker table tr td.active.disabled:active,
|
|
331
|
+
.datepicker table tr td.active.disabled:hover:active,
|
|
332
|
+
.datepicker table tr td.active.active,
|
|
333
|
+
.datepicker table tr td.active:hover.active,
|
|
334
|
+
.datepicker table tr td.active.disabled.active,
|
|
335
|
+
.datepicker table tr td.active.disabled:hover.active {
|
|
336
|
+
background-color: #003399 \9;
|
|
337
|
+
}
|
|
338
|
+
.datepicker table tr td span {
|
|
339
|
+
display: block;
|
|
340
|
+
width: 23%;
|
|
341
|
+
height: 54px;
|
|
342
|
+
line-height: 54px;
|
|
343
|
+
float: left;
|
|
344
|
+
margin: 1%;
|
|
345
|
+
cursor: pointer;
|
|
346
|
+
-webkit-border-radius: 4px;
|
|
347
|
+
-moz-border-radius: 4px;
|
|
348
|
+
border-radius: 4px;
|
|
349
|
+
}
|
|
350
|
+
.datepicker table tr td span:hover,
|
|
351
|
+
.datepicker table tr td span.focused {
|
|
352
|
+
background: #eee;
|
|
353
|
+
}
|
|
354
|
+
.datepicker table tr td span.disabled,
|
|
355
|
+
.datepicker table tr td span.disabled:hover {
|
|
356
|
+
background: none;
|
|
357
|
+
color: #999;
|
|
358
|
+
cursor: default;
|
|
359
|
+
}
|
|
360
|
+
.datepicker table tr td span.active,
|
|
361
|
+
.datepicker table tr td span.active:hover,
|
|
362
|
+
.datepicker table tr td span.active.disabled,
|
|
363
|
+
.datepicker table tr td span.active.disabled:hover {
|
|
364
|
+
background-color: #006dcc;
|
|
365
|
+
background-image: -moz-linear-gradient(to bottom, #08c, #0044cc);
|
|
366
|
+
background-image: -ms-linear-gradient(to bottom, #08c, #0044cc);
|
|
367
|
+
background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#08c), to(#0044cc));
|
|
368
|
+
background-image: -webkit-linear-gradient(to bottom, #08c, #0044cc);
|
|
369
|
+
background-image: -o-linear-gradient(to bottom, #08c, #0044cc);
|
|
370
|
+
background-image: linear-gradient(to bottom, #08c, #0044cc);
|
|
371
|
+
background-repeat: repeat-x;
|
|
372
|
+
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#08c', endColorstr='#0044cc', GradientType=0);
|
|
373
|
+
border-color: #0044cc #0044cc #002a80;
|
|
374
|
+
border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);
|
|
375
|
+
filter: progid:DXImageTransform.Microsoft.gradient(enabled=false);
|
|
376
|
+
color: #fff;
|
|
377
|
+
text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);
|
|
378
|
+
}
|
|
379
|
+
.datepicker table tr td span.active:hover,
|
|
380
|
+
.datepicker table tr td span.active:hover:hover,
|
|
381
|
+
.datepicker table tr td span.active.disabled:hover,
|
|
382
|
+
.datepicker table tr td span.active.disabled:hover:hover,
|
|
383
|
+
.datepicker table tr td span.active:active,
|
|
384
|
+
.datepicker table tr td span.active:hover:active,
|
|
385
|
+
.datepicker table tr td span.active.disabled:active,
|
|
386
|
+
.datepicker table tr td span.active.disabled:hover:active,
|
|
387
|
+
.datepicker table tr td span.active.active,
|
|
388
|
+
.datepicker table tr td span.active:hover.active,
|
|
389
|
+
.datepicker table tr td span.active.disabled.active,
|
|
390
|
+
.datepicker table tr td span.active.disabled:hover.active,
|
|
391
|
+
.datepicker table tr td span.active.disabled,
|
|
392
|
+
.datepicker table tr td span.active:hover.disabled,
|
|
393
|
+
.datepicker table tr td span.active.disabled.disabled,
|
|
394
|
+
.datepicker table tr td span.active.disabled:hover.disabled,
|
|
395
|
+
.datepicker table tr td span.active[disabled],
|
|
396
|
+
.datepicker table tr td span.active:hover[disabled],
|
|
397
|
+
.datepicker table tr td span.active.disabled[disabled],
|
|
398
|
+
.datepicker table tr td span.active.disabled:hover[disabled] {
|
|
399
|
+
background-color: #0044cc;
|
|
400
|
+
}
|
|
401
|
+
.datepicker table tr td span.active:active,
|
|
402
|
+
.datepicker table tr td span.active:hover:active,
|
|
403
|
+
.datepicker table tr td span.active.disabled:active,
|
|
404
|
+
.datepicker table tr td span.active.disabled:hover:active,
|
|
405
|
+
.datepicker table tr td span.active.active,
|
|
406
|
+
.datepicker table tr td span.active:hover.active,
|
|
407
|
+
.datepicker table tr td span.active.disabled.active,
|
|
408
|
+
.datepicker table tr td span.active.disabled:hover.active {
|
|
409
|
+
background-color: #003399 \9;
|
|
410
|
+
}
|
|
411
|
+
.datepicker table tr td span.old,
|
|
412
|
+
.datepicker table tr td span.new {
|
|
413
|
+
color: #999;
|
|
414
|
+
}
|
|
415
|
+
.datepicker .datepicker-switch {
|
|
416
|
+
width: 145px;
|
|
417
|
+
}
|
|
418
|
+
.datepicker .datepicker-switch,
|
|
419
|
+
.datepicker .prev,
|
|
420
|
+
.datepicker .next,
|
|
421
|
+
.datepicker tfoot tr th {
|
|
422
|
+
cursor: pointer;
|
|
423
|
+
}
|
|
424
|
+
.datepicker .datepicker-switch:hover,
|
|
425
|
+
.datepicker .prev:hover,
|
|
426
|
+
.datepicker .next:hover,
|
|
427
|
+
.datepicker tfoot tr th:hover {
|
|
428
|
+
background: #eee;
|
|
429
|
+
}
|
|
430
|
+
.datepicker .prev.disabled,
|
|
431
|
+
.datepicker .next.disabled {
|
|
432
|
+
visibility: hidden;
|
|
433
|
+
}
|
|
434
|
+
.datepicker .cw {
|
|
435
|
+
font-size: 10px;
|
|
436
|
+
width: 12px;
|
|
437
|
+
padding: 0 2px 0 5px;
|
|
438
|
+
vertical-align: middle;
|
|
439
|
+
}
|
|
440
|
+
.input-append.date .add-on,
|
|
441
|
+
.input-prepend.date .add-on {
|
|
442
|
+
cursor: pointer;
|
|
443
|
+
}
|
|
444
|
+
.input-append.date .add-on i,
|
|
445
|
+
.input-prepend.date .add-on i {
|
|
446
|
+
margin-top: 3px;
|
|
447
|
+
}
|
|
448
|
+
.input-daterange input {
|
|
449
|
+
text-align: center;
|
|
450
|
+
}
|
|
451
|
+
.input-daterange input:first-child {
|
|
452
|
+
-webkit-border-radius: 3px 0 0 3px;
|
|
453
|
+
-moz-border-radius: 3px 0 0 3px;
|
|
454
|
+
border-radius: 3px 0 0 3px;
|
|
455
|
+
}
|
|
456
|
+
.input-daterange input:last-child {
|
|
457
|
+
-webkit-border-radius: 0 3px 3px 0;
|
|
458
|
+
-moz-border-radius: 0 3px 3px 0;
|
|
459
|
+
border-radius: 0 3px 3px 0;
|
|
460
|
+
}
|
|
461
|
+
.input-daterange .add-on {
|
|
462
|
+
display: inline-block;
|
|
463
|
+
width: auto;
|
|
464
|
+
min-width: 16px;
|
|
465
|
+
height: 18px;
|
|
466
|
+
padding: 4px 5px;
|
|
467
|
+
font-weight: normal;
|
|
468
|
+
line-height: 18px;
|
|
469
|
+
text-align: center;
|
|
470
|
+
text-shadow: 0 1px 0 #fff;
|
|
471
|
+
vertical-align: middle;
|
|
472
|
+
background-color: #eee;
|
|
473
|
+
border: 1px solid #ccc;
|
|
474
|
+
margin-left: -5px;
|
|
475
|
+
margin-right: -5px;
|
|
476
|
+
}
|
|
477
|
+
/*# sourceMappingURL=bootstrap-datepicker.css.map */
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Tramway::AuthManagement
|
|
4
|
+
def sign_in(user)
|
|
5
|
+
session[:tramway_user_id] = user.id
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def sign_out
|
|
9
|
+
session[:tramway_user_id] = nil
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def signed_in?
|
|
13
|
+
current_user
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def authenticate_user!
|
|
17
|
+
redirect_to Tramway::Engine.routes.url_helpers.new_session_path if !session_path? && !signed_in?
|
|
18
|
+
end
|
|
19
|
+
|
|
20
|
+
def current_user
|
|
21
|
+
user = Tramway::User.find_by id: session[:tramway_user_id]
|
|
22
|
+
return false unless user
|
|
23
|
+
|
|
24
|
+
Tramway::UserDecorator.decorate user
|
|
25
|
+
end
|
|
26
|
+
end
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module Tramway::Filtering
|
|
4
|
+
def list_filtering(records)
|
|
5
|
+
params[:list_filters]&.each do |filter, _value|
|
|
6
|
+
case decorator_class.list_filters[filter.to_sym][:type]
|
|
7
|
+
when :select
|
|
8
|
+
records = list_filtering_select records, filter
|
|
9
|
+
when :dates
|
|
10
|
+
records = list_filtering_dates records, filter
|
|
11
|
+
end
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
records
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def list_filtering_select(records, filter)
|
|
18
|
+
value.present? ? decorator_class.list_filters[filter.to_sym][:query].call(records, value) : records
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def list_filtering_dates(records, filter)
|
|
22
|
+
begin_date = date_filter :begin, filter
|
|
23
|
+
end_date = date_filter :end, filter
|
|
24
|
+
if begin_date.present? && end_date.present? && value.present?
|
|
25
|
+
decorator_class.list_filters[filter.to_sym][:query].call(records, begin_date, end_date)
|
|
26
|
+
else
|
|
27
|
+
records
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
def date_filter(type, filter)
|
|
32
|
+
params[:list_filters][filter.to_sym]["#{type}_date".to_sym]
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def filtering(records)
|
|
36
|
+
if params[:filter].present?
|
|
37
|
+
params[:filter] = JSON.parse params[:filter] if params[:filter].is_a? String
|
|
38
|
+
records.ransack(params[:filter]).result(distinct: true)
|
|
39
|
+
else
|
|
40
|
+
records
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
end
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
# FIXME: use default `require` method
|
|
4
|
+
load "#{Tramway.root}/lib/tramway/class_name_helpers.rb"
|
|
5
|
+
load "#{Tramway.root}/lib/tramway/record_routes_helper.rb"
|
|
6
|
+
|
|
7
|
+
# FIXME: configurate load_path
|
|
8
|
+
load "#{Tramway.root}/app/controllers/concerns/auth_management.rb"
|
|
9
|
+
load "#{Tramway.root}/app/controllers/concerns/filtering.rb"
|
|
10
|
+
|
|
11
|
+
class Tramway::ApplicationController < ActionController::Base
|
|
12
|
+
include Tramway::ClassNameHelpers
|
|
13
|
+
include Tramway::AuthManagement
|
|
14
|
+
include Tramway::Filtering
|
|
15
|
+
include Tramway::RecordRoutesHelper
|
|
16
|
+
|
|
17
|
+
before_action :application
|
|
18
|
+
before_action :load_extensions
|
|
19
|
+
before_action :notifications
|
|
20
|
+
before_action :notifications_count
|
|
21
|
+
before_action :collections_counts, if: :model_given?
|
|
22
|
+
before_action :authenticate_user!
|
|
23
|
+
before_action :check_available!
|
|
24
|
+
before_action :check_available_scope!, if: :model_given?, only: :index
|
|
25
|
+
|
|
26
|
+
protect_from_forgery with: :exception
|
|
27
|
+
|
|
28
|
+
protected
|
|
29
|
+
|
|
30
|
+
def check_available!
|
|
31
|
+
return if session_path?
|
|
32
|
+
|
|
33
|
+
return unless !model_given? && !form_given?
|
|
34
|
+
|
|
35
|
+
Tramway::Error.raise_error :tramway, :application_controller, :model_or_form_not_available
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
def check_available_scope!
|
|
39
|
+
raise 'Scope is not available' if params[:scope].present? && !available_scope_given?
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
def collections_counts
|
|
43
|
+
@counts = decorator_class.collections.reduce({}) do |hash, collection|
|
|
44
|
+
records = model_class.public_send(collection)
|
|
45
|
+
records = filtering records
|
|
46
|
+
records = list_filtering records
|
|
47
|
+
|
|
48
|
+
hash.merge! collection => records.public_send(current_user_role_scope, current_user.id).count
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def notifications
|
|
53
|
+
if current_user
|
|
54
|
+
@notifications ||= Tramway.notificable_queries&.reduce({}) do |hash, notification|
|
|
55
|
+
hash.merge! notification[0] => notification[1].call(current_user)
|
|
56
|
+
end
|
|
57
|
+
end
|
|
58
|
+
@notifications
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
def notifications_count
|
|
62
|
+
@notifications_count = notifications&.reduce(0) do |count, notification|
|
|
63
|
+
count += notification[1].count # rubocop:disable Lint/UselessAssignment
|
|
64
|
+
end
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
include Tramway::ClassNameHelpers
|
|
68
|
+
|
|
69
|
+
def model_class
|
|
70
|
+
model_class_name(params[:model] || params[:form])
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def decorator_class
|
|
74
|
+
decorator_class_name
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
def admin_form_class
|
|
78
|
+
class_name = "::#{current_user.role.camelize}::#{model_class}Form"
|
|
79
|
+
|
|
80
|
+
unless defined? class_name
|
|
81
|
+
Tramway::Error.raise_error(
|
|
82
|
+
:tramway,
|
|
83
|
+
:application,
|
|
84
|
+
:create_form_for_role,
|
|
85
|
+
role: current_user.role,
|
|
86
|
+
model_class: model_class,
|
|
87
|
+
class_name: class_name
|
|
88
|
+
)
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
class_name.constantize
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
def model_given?
|
|
95
|
+
current_user.present? && (available_models_given? || singleton_models_given?)
|
|
96
|
+
end
|
|
97
|
+
|
|
98
|
+
def form_given?
|
|
99
|
+
Tramway.forms.include? params[:form].underscore.sub(%r{^admin/}, '').sub(/_form$/, '') if params[:form].present?
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
def available_scope_given?
|
|
103
|
+
params[:scope].present? && params[:scope].in?(decorator_class.collections.map(&:to_s))
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def available_models_given?
|
|
107
|
+
check_models_given? :available
|
|
108
|
+
end
|
|
109
|
+
|
|
110
|
+
def singleton_models_given?
|
|
111
|
+
check_models_given? :singleton
|
|
112
|
+
end
|
|
113
|
+
|
|
114
|
+
private
|
|
115
|
+
|
|
116
|
+
def check_models_given?(model_type)
|
|
117
|
+
models = Tramway.send("#{model_type}_models", role: current_user.role)
|
|
118
|
+
models.any? && params[:model].in?(models.map(&:to_s))
|
|
119
|
+
end
|
|
120
|
+
|
|
121
|
+
def session_path?
|
|
122
|
+
request.path.in?(['/admin/session/new', '/admin/session', '/admin/sign_out'])
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
def application
|
|
126
|
+
return unless Tramway.application
|
|
127
|
+
|
|
128
|
+
@application ||= Tramway.application&.model_class&.first || Tramway.application
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
def load_extensions
|
|
132
|
+
Tramway::Extensions.load if defined? Tramway::Extensions
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
def authenticated_user
|
|
136
|
+
(defined?(current_user) && current_user.try(:model)) || (defined?(current_user) && current_user.model)
|
|
137
|
+
end
|
|
138
|
+
|
|
139
|
+
def current_user_role_scope
|
|
140
|
+
"#{current_user.role}_scope"
|
|
141
|
+
end
|
|
142
|
+
end
|