tb_core 1.4.3.1 → 1.4.4
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 +4 -4
- data/README.md +18 -54
- data/app/assets/javascripts/admin/core/application.js +8 -4
- data/app/assets/javascripts/admin/core/dashboard.js +2 -3
- data/app/assets/javascripts/admin/core/date_picker.js +2 -2
- data/app/assets/javascripts/admin/core/editor.js +2 -2
- data/app/assets/javascripts/admin/core/modal.js +1 -1
- data/app/assets/javascripts/admin/core/users.js +5 -5
- data/app/assets/javascripts/tb_core.js +8 -0
- data/app/assets/libs/sortable/sortable.js +152 -91
- data/app/controllers/admin/application_controller.rb +1 -2
- data/app/controllers/admin/dashboard_controller.rb +2 -2
- data/app/controllers/admin/settings_controller.rb +2 -2
- data/app/controllers/admin/users_controller.rb +4 -7
- data/app/controllers/concerns/tb_core/error_handling.rb +16 -7
- data/app/controllers/concerns/tb_core/user_authentication.rb +5 -5
- data/app/controllers/tb_core/application_controller.rb +1 -1
- data/app/controllers/user_sessions_controller.rb +2 -2
- data/app/helpers/tb_core/application_helper.rb +4 -36
- data/app/mailers/tb_core_mailer.rb +3 -3
- data/app/models/concerns/tb_core/user_model.rb +131 -0
- data/app/models/spud/spud_user_model.rb +6 -138
- data/app/models/spud_permission.rb +4 -4
- data/app/models/spud_role.rb +1 -1
- data/app/models/spud_user.rb +2 -1
- data/app/views/admin/dashboard/index.html.erb +1 -1
- data/app/views/admin/settings/_form.html.erb +1 -1
- data/app/views/admin/settings/edit.html.erb +1 -1
- data/app/views/admin/setup/new.html.erb +1 -1
- data/app/views/admin/users/_form.html.erb +1 -1
- data/app/views/admin/users/index.html.erb +2 -2
- data/app/views/admin/users/show.html.erb +1 -1
- data/app/views/layouts/admin/application.html.erb +6 -6
- data/app/views/layouts/admin/login.html.erb +1 -1
- data/app/views/tb_core_mailer/forgot_password_notification.html.erb +2 -2
- data/app/views/tb_core_mailer/user_credentials.html.erb +2 -2
- data/app/views/user_sessions/_form.html.erb +1 -1
- data/app/views/user_sessions/new.html.erb +1 -1
- data/lib/generators/spud/module_generator.rb +7 -7
- data/lib/generators/spud/setup_generator.rb +6 -7
- data/lib/generators/spud/templates/assets/admin/application.js +1 -1
- data/lib/generators/spud/templates/assets/application.js +3 -4
- data/lib/generators/spud/templates/controller_spec.rb.erb +5 -5
- data/lib/generators/spud/templates/views/admin/_form.html.erb +1 -1
- data/lib/generators/spud/templates/views/admin/index.html.erb +1 -1
- data/lib/generators/spud/templates/views/admin/show.html.erb +1 -1
- data/lib/generators/spud/templates/views/frontend/index.html.erb +1 -1
- data/lib/generators/spud/templates/views/frontend/show.html.erb +1 -1
- data/lib/tb_core.rb +3 -5
- data/lib/tb_core/belongs_to_app.rb +47 -46
- data/lib/tb_core/catch_all_route.rb +3 -0
- data/lib/tb_core/configuration.rb +28 -0
- data/lib/tb_core/engine.rb +61 -0
- data/lib/tb_core/errors.rb +50 -0
- data/lib/tb_core/responder.rb +0 -26
- data/lib/{spud_core → tb_core}/searchable.rb +4 -1
- data/lib/tb_core/spud_core.rb +23 -0
- data/lib/{spud_core → tb_core}/test_files.rb +0 -0
- data/lib/tb_core/test_helper.rb +3 -3
- data/lib/tb_core/version.rb +3 -0
- data/spec/controllers/admin/application_controller_spec.rb +5 -5
- data/spec/controllers/admin/dashboard_controller_spec.rb +5 -5
- data/spec/controllers/admin/password_reset_controller_spec.rb +1 -1
- data/spec/controllers/admin/settings_controller_spec.rb +1 -1
- data/spec/controllers/admin/setup_controller_spec.rb +2 -2
- data/spec/controllers/admin/user_sessions_controller_spec.rb +2 -2
- data/spec/controllers/admin/users_controller_spec.rb +17 -17
- data/spec/dummy/app/assets/javascripts/admin/application.js +1 -1
- data/spec/dummy/app/assets/javascripts/application.js +1 -1
- data/spec/dummy/config/application.rb +1 -1
- data/spec/factories/spud_admin_permission_factories.rb +2 -2
- data/spec/factories/spud_role_factories.rb +2 -2
- data/spec/factories/spud_user_factories.rb +6 -6
- data/spec/helpers/spud/admin/application_helper_spec.rb +1 -1
- data/spec/helpers/tb_core/application_helper_spec.rb +0 -35
- data/spec/lib/spud_core/configuration_spec.rb +2 -2
- data/spec/lib/tb_core/belongs_to_app_spec.rb +4 -3
- data/spec/models/spud_role_spec.rb +2 -2
- data/spec/models/spud_user_spec.rb +13 -13
- data/spec/rails_helper.rb +1 -1
- metadata +59 -67
- data/app/assets/javascripts/tb_core.js.erb +0 -9
- data/app/assets/javascripts/tb_core/configuration.js.erb +0 -9
- data/app/assets/javascripts/tb_core/console.js +0 -12
- data/app/assets/javascripts/tb_core/remote.js +0 -237
- data/app/assets/javascripts/tb_core/utility.js +0 -55
- data/app/controllers/concerns/tb_core/sortable_params.rb +0 -80
- data/app/controllers/spud/application_controller.rb +0 -10
- data/lib/generators/spud/templates/assets/bootstrap.js +0 -14
- data/lib/spud_core/catch_all_route.rb +0 -3
- data/lib/spud_core/configuration.rb +0 -56
- data/lib/spud_core/engine.rb +0 -76
- data/lib/spud_core/errors.rb +0 -47
- data/lib/spud_core/version.rb +0 -5
- data/lib/tb_core/table_header.rb +0 -92
- data/spec/controllers/tb_core/sortable_params_spec.rb +0 -64
|
@@ -1,237 +0,0 @@
|
|
|
1
|
-
//= require rails-ujs
|
|
2
|
-
//= require_self
|
|
3
|
-
|
|
4
|
-
(function(){
|
|
5
|
-
|
|
6
|
-
/*
|
|
7
|
-
* jQuery UJS Handlers
|
|
8
|
-
*
|
|
9
|
-
* These handlers are designed to work with the Rails/jQuery UJS adapter. This applies
|
|
10
|
-
* to things like data-remote forms, data-method links, etc.
|
|
11
|
-
*
|
|
12
|
-
* For more info see the following lnks:
|
|
13
|
-
* - https://github.com/rails/jquery-ujs/wiki/ajax
|
|
14
|
-
* - http://guides.rubyonrails.org/working_with_javascript_in_rails.html
|
|
15
|
-
*
|
|
16
|
-
*/
|
|
17
|
-
tb.remote = {
|
|
18
|
-
init: function(){
|
|
19
|
-
Rails.delegate(document, 'form', 'ajax:before', onRemoteFormBefore);
|
|
20
|
-
Rails.delegate(document, 'form[data-success], a[data-success]', 'ajax:success', onRemoteFormSuccess);
|
|
21
|
-
Rails.delegate(document, 'form[data-errors]', 'ajax:error', onRemoteFormErrors);
|
|
22
|
-
Rails.delegate(document, 'tr a[data-method=delete][data-remote=true]', 'ajax:success', onRemoteDeleteTableRow);
|
|
23
|
-
}
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
/*
|
|
27
|
-
* UJS likes to request application/javascript by default, but Twice Baked prefers JSON.
|
|
28
|
-
*/
|
|
29
|
-
var onRemoteFormBefore = function(event){
|
|
30
|
-
if(this.getAttribute('data-type') === null){
|
|
31
|
-
this.setAttribute('data-type', 'json');
|
|
32
|
-
}
|
|
33
|
-
};
|
|
34
|
-
|
|
35
|
-
/*
|
|
36
|
-
* Called when a remote form is submitted with a data-success configured
|
|
37
|
-
* Simply redirects to the configured path, or reloads the page if "reload" is passed
|
|
38
|
-
*
|
|
39
|
-
* ie:
|
|
40
|
-
* <form action="..." data-remote="true" data-success="/path/for/success/:id">
|
|
41
|
-
*/
|
|
42
|
-
var onRemoteFormSuccess = function(event){
|
|
43
|
-
var successPath = this.getAttribute('data-success');
|
|
44
|
-
if(successPath === 'reload'){
|
|
45
|
-
window.location.reload(true);
|
|
46
|
-
}
|
|
47
|
-
else{
|
|
48
|
-
var json = event.detail[0];
|
|
49
|
-
window.location = buildSuccessPath(successPath, json);
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
|
|
53
|
-
/*
|
|
54
|
-
* Build a path for redirection.
|
|
55
|
-
*
|
|
56
|
-
* - Adds a timestamp GET param for cache busting
|
|
57
|
-
* - Inserts an ID attribute if necessary
|
|
58
|
-
*
|
|
59
|
-
*/
|
|
60
|
-
var buildSuccessPath = function(path, json){
|
|
61
|
-
var timestamp = (new Date()).valueOf();
|
|
62
|
-
if(path.indexOf('?') > -1){
|
|
63
|
-
path += ('&t=' + timestamp);
|
|
64
|
-
}
|
|
65
|
-
else{
|
|
66
|
-
path += ('?t=' + timestamp);
|
|
67
|
-
}
|
|
68
|
-
if(json && json.id){
|
|
69
|
-
path = path.replace(':id', json.id);
|
|
70
|
-
}
|
|
71
|
-
return path;
|
|
72
|
-
};
|
|
73
|
-
|
|
74
|
-
/*
|
|
75
|
-
* Called when a remote form is submitted and the server has returned an error, only
|
|
76
|
-
* if the form has a data-errors attribute
|
|
77
|
-
*
|
|
78
|
-
* ie:
|
|
79
|
-
* <form action="..." data-remote="true" data-errors="inline">
|
|
80
|
-
* - OR -
|
|
81
|
-
* <form action="..." data-remote="true" data-errors="alert">
|
|
82
|
-
*/
|
|
83
|
-
var onRemoteFormErrors = function(event){
|
|
84
|
-
var json = event.detail[0];
|
|
85
|
-
var xhr = event.detail[2];
|
|
86
|
-
var form = this;
|
|
87
|
-
var errorType = form.getAttribute('data-errors');
|
|
88
|
-
|
|
89
|
-
if(xhr.status === 422){
|
|
90
|
-
if(errorType === 'inline'){
|
|
91
|
-
tb.remote.displayErrorsInline(form, json);
|
|
92
|
-
}
|
|
93
|
-
else{
|
|
94
|
-
tb.remote.displayErrorsAlert(json);
|
|
95
|
-
}
|
|
96
|
-
}
|
|
97
|
-
else if(xhr.status === 401 || xhr.status === 403){
|
|
98
|
-
window.alert('Error: Access denied.');
|
|
99
|
-
}
|
|
100
|
-
else if(json.location) {
|
|
101
|
-
window.location = json.location;
|
|
102
|
-
}
|
|
103
|
-
else{
|
|
104
|
-
var errorThrown = event.detail[1];
|
|
105
|
-
window.alert('An unexpected error occurred: ' + errorThrown);
|
|
106
|
-
}
|
|
107
|
-
};
|
|
108
|
-
|
|
109
|
-
function removeElement(element) {
|
|
110
|
-
element.parentElement.removeChild(element);
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
function createErrorParagraph(text, base) {
|
|
114
|
-
var p = document.createElement('p');
|
|
115
|
-
p.classList.add('form-error');
|
|
116
|
-
p.classList.add(base ? 'form-error-base' : 'form-error-inline');
|
|
117
|
-
p.innerText = text;
|
|
118
|
-
return p;
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
function querySelectorArray(parent, selector) {
|
|
122
|
-
var query = parent.querySelectorAll(selector);
|
|
123
|
-
var array = Array.prototype.slice.call(query);
|
|
124
|
-
return array;
|
|
125
|
-
}
|
|
126
|
-
|
|
127
|
-
/*
|
|
128
|
-
* Take a single error message and format it as if it were
|
|
129
|
-
* a json error coming from the server
|
|
130
|
-
*/
|
|
131
|
-
function formatStringAsErrors(errorString) {
|
|
132
|
-
return {base: {messages: [errorString] }};
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/*
|
|
136
|
-
* Remove inline error messages
|
|
137
|
-
*/
|
|
138
|
-
tb.remote.clearErrors = function(form) {
|
|
139
|
-
querySelectorArray(form, '.form-error-inline, .form-error-base').forEach(removeElement);
|
|
140
|
-
};
|
|
141
|
-
|
|
142
|
-
/*
|
|
143
|
-
* Append error text to form input fields and scroll to the first error
|
|
144
|
-
*/
|
|
145
|
-
tb.remote.displayErrorsInline = function(form, errors){
|
|
146
|
-
if(typeof errors === 'string') {
|
|
147
|
-
errors = formatStringAsErrors(errors);
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
tb.remote.clearErrors(form);
|
|
151
|
-
|
|
152
|
-
for(var key in errors){
|
|
153
|
-
var messages = errors[key].messages;
|
|
154
|
-
if(key === 'base'){
|
|
155
|
-
for(var i=0; i<messages.length; i++){
|
|
156
|
-
var p = createErrorParagraph(messages[i], true);
|
|
157
|
-
form.insertBefore(p, form.firstChild);
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
else{
|
|
161
|
-
var inputName, input;
|
|
162
|
-
|
|
163
|
-
keyArr = key.split('.');
|
|
164
|
-
|
|
165
|
-
if(keyArr.length === 2){
|
|
166
|
-
keyArr[0] += '_attributes';
|
|
167
|
-
input = form.querySelector("[name$='[" + keyArr.join('][') + "]']");
|
|
168
|
-
}
|
|
169
|
-
else{
|
|
170
|
-
var array = querySelectorArray(form, "[name$='[" + key + "]']");
|
|
171
|
-
input = array.filter(function(input){
|
|
172
|
-
return !input.name.match(/\]\[/); // Filter out nested attribute inputs ie model[a][b]
|
|
173
|
-
})[0];
|
|
174
|
-
if(input === null && !key.match(/_id$/)){
|
|
175
|
-
input = form.querySelector("[name$='[" + key + "_id]']");
|
|
176
|
-
}
|
|
177
|
-
}
|
|
178
|
-
|
|
179
|
-
var message = messages[0];
|
|
180
|
-
if(input){
|
|
181
|
-
input.parentNode.appendChild(createErrorParagraph(message));
|
|
182
|
-
}
|
|
183
|
-
else{
|
|
184
|
-
console.warn('Missing input field for key:', key);
|
|
185
|
-
form.insertBefore(
|
|
186
|
-
createErrorParagraph(key+' '+message), form.firstChild
|
|
187
|
-
);
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
var firstError = form.querySelector('.form-error-inline, .form-error-base')
|
|
193
|
-
if(firstError &&
|
|
194
|
-
!tb.util.elementIsInView(firstError) &&
|
|
195
|
-
typeof(firstError.scrollIntoView) === 'function'){
|
|
196
|
-
firstError.parentElement.scrollIntoView();
|
|
197
|
-
}
|
|
198
|
-
};
|
|
199
|
-
|
|
200
|
-
/*
|
|
201
|
-
* Display errors in a standard window.alert dialog
|
|
202
|
-
*/
|
|
203
|
-
tb.remote.displayErrorsAlert = function(errors){
|
|
204
|
-
if(typeof errors === 'string') {
|
|
205
|
-
errors = formatStringAsErrors(errors);
|
|
206
|
-
}
|
|
207
|
-
var text = "Please correct the following errors:\n";
|
|
208
|
-
var label, message;
|
|
209
|
-
var index = 0;
|
|
210
|
-
for(var key in errors){
|
|
211
|
-
label = errors[key].label;
|
|
212
|
-
message = errors[key].messages[0];
|
|
213
|
-
if(key === 'base'){
|
|
214
|
-
text += ' - ' + message + "\n"
|
|
215
|
-
}
|
|
216
|
-
else{
|
|
217
|
-
text += ' - ' + label + ' ' + message + "\n"
|
|
218
|
-
}
|
|
219
|
-
index++;
|
|
220
|
-
}
|
|
221
|
-
window.alert(text);
|
|
222
|
-
};
|
|
223
|
-
|
|
224
|
-
/*
|
|
225
|
-
* Used for deleting table rows
|
|
226
|
-
* Add a link with data-remote=true and data-method=delete to your table to trigger this callback
|
|
227
|
-
*/
|
|
228
|
-
var onRemoteDeleteTableRow = function(){
|
|
229
|
-
var row = $(this).parents('tr');
|
|
230
|
-
row.fadeOut(200, function(){
|
|
231
|
-
row.remove();
|
|
232
|
-
});
|
|
233
|
-
};
|
|
234
|
-
|
|
235
|
-
tb.remote.init();
|
|
236
|
-
|
|
237
|
-
})();
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
(function(){
|
|
2
|
-
|
|
3
|
-
tb.util = {
|
|
4
|
-
domainWithPort: function(){
|
|
5
|
-
if(window.location.origin){
|
|
6
|
-
return window.location.origin;
|
|
7
|
-
}
|
|
8
|
-
else{
|
|
9
|
-
return location.protocol + '//' + location.hostname + (location.port ? ':' + location.port : '');
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
|
|
13
|
-
pathFor: function(){
|
|
14
|
-
var args = Array.prototype.slice.call(arguments, 0);
|
|
15
|
-
var parts = [''];
|
|
16
|
-
if(tb.config.subUri){
|
|
17
|
-
parts.push(tb.config.subUri);
|
|
18
|
-
}
|
|
19
|
-
return parts.concat(args).join('/');
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
urlFor: function(){
|
|
23
|
-
var args = Array.prototype.slice.call(arguments, 0);
|
|
24
|
-
var parts = [tb.util.domainWithPort()];
|
|
25
|
-
if(tb.config.subUri){
|
|
26
|
-
parts.push(tb.config.subUri);
|
|
27
|
-
}
|
|
28
|
-
return parts.concat(args).join('/');
|
|
29
|
-
},
|
|
30
|
-
|
|
31
|
-
getCsrfToken: function(){
|
|
32
|
-
console.warn('Call to tb.util.getCsrfToken() will be removed in the future; Use Rails.csrfToken() instead.')
|
|
33
|
-
return Rails.csrfToken();
|
|
34
|
-
},
|
|
35
|
-
|
|
36
|
-
/*
|
|
37
|
-
* Use top/bottom offsets to determine if the given jQuery element is within the current scroll view
|
|
38
|
-
*
|
|
39
|
-
* http://stackoverflow.com/questions/123999/how-to-tell-if-a-dom-element-is-visible-in-the-current-viewport/7557433#7557433
|
|
40
|
-
*/
|
|
41
|
-
elementIsInView: function(el){
|
|
42
|
-
if (typeof jQuery === "function" && el instanceof jQuery) {
|
|
43
|
-
el = el[0];
|
|
44
|
-
}
|
|
45
|
-
var rect = el.getBoundingClientRect();
|
|
46
|
-
return (
|
|
47
|
-
rect.top >= 0 &&
|
|
48
|
-
rect.left >= 0 &&
|
|
49
|
-
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
|
|
50
|
-
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
|
|
51
|
-
);
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
|
|
55
|
-
})();
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
module TbCore
|
|
2
|
-
module SortableParams
|
|
3
|
-
extend ActiveSupport::Concern
|
|
4
|
-
|
|
5
|
-
module ClassMethods
|
|
6
|
-
attr_accessor :default_sort_attribute
|
|
7
|
-
attr_accessor :sortable_mapping
|
|
8
|
-
|
|
9
|
-
# Define attributes you wish to sort by
|
|
10
|
-
#
|
|
11
|
-
# This optional configuration method tells the the sortable
|
|
12
|
-
# helpers how they should map attributes to queries. For
|
|
13
|
-
# example a "name" sort might need to sort on first and last
|
|
14
|
-
# name attributes
|
|
15
|
-
#
|
|
16
|
-
# The `default` argument, if passed, will determine the
|
|
17
|
-
# attribute used when no sort param has been passed
|
|
18
|
-
#
|
|
19
|
-
# Usage:
|
|
20
|
-
#
|
|
21
|
-
# sortable_by :email, name: [:last_name, :first_name]
|
|
22
|
-
# default: :email,
|
|
23
|
-
#
|
|
24
|
-
#
|
|
25
|
-
def sortable_by(*attributes, **options)
|
|
26
|
-
@default_sort_attribute = options.delete(:default)
|
|
27
|
-
@sortable_mapping = options.merge(attributes.map { |att| [att, att] }.to_h)
|
|
28
|
-
end
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
# Return the current sort direction
|
|
32
|
-
#
|
|
33
|
-
# Defaults to :asc for all values other than "desc"
|
|
34
|
-
#
|
|
35
|
-
def sort_direction
|
|
36
|
-
if params[:dir].present? && params[:dir] == 'desc'
|
|
37
|
-
:desc
|
|
38
|
-
else
|
|
39
|
-
:asc
|
|
40
|
-
end
|
|
41
|
-
end
|
|
42
|
-
|
|
43
|
-
# Return the current sort param
|
|
44
|
-
#
|
|
45
|
-
def sort_attribute
|
|
46
|
-
params[:sort].try(:to_sym) || self.class.default_sort_attribute
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
# Return a hash that can be used in an ActiveRecord order query
|
|
50
|
-
#
|
|
51
|
-
# Example:
|
|
52
|
-
# MyModel.where(...).order(sortable_query).paginate(...)
|
|
53
|
-
#
|
|
54
|
-
def sortable_query
|
|
55
|
-
return unless sort_attribute
|
|
56
|
-
normalize_sort_value(
|
|
57
|
-
sort_attribute,
|
|
58
|
-
sort_direction
|
|
59
|
-
)
|
|
60
|
-
end
|
|
61
|
-
|
|
62
|
-
# Translate the sort_by and direction into a sortable hash
|
|
63
|
-
#
|
|
64
|
-
def normalize_sort_value(sort_by, direction)
|
|
65
|
-
mapping = self.class.sortable_mapping[sort_by]
|
|
66
|
-
if mapping.is_a? Symbol
|
|
67
|
-
{ mapping => sort_direction }
|
|
68
|
-
elsif mapping.is_a? String
|
|
69
|
-
mapping.gsub(':dir', sort_direction.to_s)
|
|
70
|
-
elsif mapping.is_a? Array
|
|
71
|
-
mapping.map { |att| [att, direction] }.to_h
|
|
72
|
-
elsif mapping.is_a? Proc
|
|
73
|
-
mapping.call(direction)
|
|
74
|
-
else
|
|
75
|
-
logger.debug("WARNING: Sort attribute '#{sort_by}' is not recognized. Did you mean to pass it to sortable_by?")
|
|
76
|
-
nil
|
|
77
|
-
end
|
|
78
|
-
end
|
|
79
|
-
end
|
|
80
|
-
end
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
class Spud::ApplicationController < TbCore::ApplicationController
|
|
2
|
-
def initialize
|
|
3
|
-
ActiveSupport::Deprecation.warn(
|
|
4
|
-
'Spud::ApplicationController is deprecated and may be removed from future releases,
|
|
5
|
-
use TbCore::ApplicationController instead.',
|
|
6
|
-
caller
|
|
7
|
-
)
|
|
8
|
-
super
|
|
9
|
-
end
|
|
10
|
-
end
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// Use this file to comment out any Bootstrap JavaScript files you are not using
|
|
2
|
-
//
|
|
3
|
-
//= require bootstrap/affix
|
|
4
|
-
//= require bootstrap/alert
|
|
5
|
-
//= require bootstrap/button
|
|
6
|
-
//= require bootstrap/carousel
|
|
7
|
-
//= require bootstrap/collapse
|
|
8
|
-
//= require bootstrap/dropdown
|
|
9
|
-
//= require bootstrap/modal
|
|
10
|
-
//= require bootstrap/scrollspy
|
|
11
|
-
//= require bootstrap/tab
|
|
12
|
-
//= require bootstrap/transition
|
|
13
|
-
//= require bootstrap/tooltip
|
|
14
|
-
//= require bootstrap/popover
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
module Spud
|
|
2
|
-
module Core
|
|
3
|
-
include ActiveSupport::Configurable
|
|
4
|
-
config_accessor :site_name, :admin_applications, :from_address, :site_id, :short_name,
|
|
5
|
-
:javascripts, :stylesheets, :admin_javascripts, :admin_stylesheets,
|
|
6
|
-
:permissions, :production_alert_domain, :use_email_as_login
|
|
7
|
-
self.admin_applications = []
|
|
8
|
-
self.site_name = 'Company Name'
|
|
9
|
-
self.site_id = 0
|
|
10
|
-
self.short_name = 'default'
|
|
11
|
-
self.javascripts = []
|
|
12
|
-
self.stylesheets = []
|
|
13
|
-
self.from_address = 'no-reply@companyname.com'
|
|
14
|
-
self.permissions = []
|
|
15
|
-
self.admin_javascripts = ['admin/core/application', 'admin/application']
|
|
16
|
-
self.admin_stylesheets = ['admin/core/application', 'admin/application']
|
|
17
|
-
self.production_alert_domain = nil
|
|
18
|
-
self.use_email_as_login = false
|
|
19
|
-
|
|
20
|
-
def self.site_config_for_host(host)
|
|
21
|
-
ActiveSupport::Deprecation.warn 'Spud::Core.site_config_for_host is deprecated and will be removed in the future'
|
|
22
|
-
return default_site_config
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
def self.site_config_for_id(id)
|
|
26
|
-
ActiveSupport::Deprecation.warn 'Spud::Core.site_config_for_id is deprecated and will be removed in the future'
|
|
27
|
-
return default_site_config
|
|
28
|
-
end
|
|
29
|
-
|
|
30
|
-
def self.default_site_config
|
|
31
|
-
ActiveSupport::Deprecation.warn 'Spud::Core.default_site_config is deprecated and will be removed in the future'
|
|
32
|
-
return {
|
|
33
|
-
site_id: Spud::Core.config.site_id,
|
|
34
|
-
site_name: Spud::Core.config.site_name,
|
|
35
|
-
short_name: Spud::Core.config.short_name
|
|
36
|
-
}
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
def self.append_admin_javascripts(*args)
|
|
40
|
-
if args[0].class == Array
|
|
41
|
-
Spud::Core.config.admin_javascripts += args[0]
|
|
42
|
-
else
|
|
43
|
-
Spud::Core.config.admin_javascripts += args
|
|
44
|
-
end
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
def self.append_admin_stylesheets(*args)
|
|
48
|
-
if args[0].class == Array
|
|
49
|
-
Spud::Core.config.admin_stylesheets += args[0]
|
|
50
|
-
else
|
|
51
|
-
Spud::Core.config.admin_stylesheets += args
|
|
52
|
-
end
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
end
|
|
56
|
-
end
|