rails_com 1.2.5 → 1.2.6
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/javascripts/rails_com/application.js +11 -27
- data/app/assets/javascripts/rails_com/attachment.js +24 -19
- data/app/assets/javascripts/rails_com/fetch_xhr_script.js +13 -2
- data/app/assets/javascripts/rails_com/footer.js +7 -1
- data/app/assets/javascripts/rails_com/picture.js +1 -0
- data/app/assets/javascripts/rails_com/time_local.js +10 -0
- data/app/controllers/active_storage_ext/admin/blob_defaults_controller.rb +2 -1
- data/app/controllers/concerns/rails_common_api.rb +25 -15
- data/app/controllers/concerns/rails_common_controller.rb +46 -0
- data/app/helpers/rails_com/assets_helper.rb +32 -14
- data/app/models/active_storage/blob_default.rb +19 -0
- data/app/views/active_storage_ext/admin/blob_defaults/_form.html.erb +1 -0
- data/app/views/active_storage_ext/admin/blob_defaults/index.html.erb +3 -2
- data/app/views/active_storage_ext/attachments/_default_image_item.html.erb +9 -1
- data/app/views/active_storage_ext/attachments/_list_edit.html.erb +11 -9
- data/app/views/active_storage_ext/attachments/_list_field.html.erb +6 -0
- data/db/migrate/20181012025833_rails_com_init.rb +1 -0
- data/lib/active_record/type/i18n.rb +19 -0
- data/lib/rails_com.rb +11 -21
- data/lib/rails_com/action_controller.rb +3 -0
- data/lib/rails_com/{helpers → action_controller}/controller_helper.rb +8 -9
- data/lib/rails_com/{rails_ext → action_controller}/errors.rb +0 -0
- data/lib/rails_com/action_controller/parameters.rb +16 -0
- data/lib/rails_com/action_view.rb +2 -0
- data/lib/rails_com/{rails_ext → action_view}/template_renderer.rb +5 -17
- data/lib/rails_com/{rails_ext → action_view}/translation_helper.rb +3 -1
- data/lib/rails_com/active_record.rb +3 -0
- data/lib/rails_com/{helpers → active_record}/model_helper.rb +0 -0
- data/lib/rails_com/{rails_ext → active_record}/persistence_sneakily.rb +0 -0
- data/lib/rails_com/active_record/translation.rb +66 -0
- data/lib/rails_com/active_storage.rb +4 -0
- data/lib/rails_com/{rails_ext → active_storage}/activestorage_attached.rb +1 -0
- data/lib/rails_com/active_storage/attached_macros.rb +20 -0
- data/lib/rails_com/{rails_ext → active_storage}/attachment_transfer.rb +4 -2
- data/lib/rails_com/active_storage/blob_ext.rb +34 -0
- data/lib/rails_com/{rails_ext → active_storage}/video_response.rb +2 -1
- data/lib/rails_com/core.rb +7 -0
- data/lib/rails_com/{core_ext → core}/array.rb +0 -0
- data/lib/rails_com/{core_ext → core}/date.rb +0 -0
- data/lib/rails_com/{core_ext → core}/hash.rb +0 -0
- data/lib/rails_com/{core_ext → core}/nil.rb +0 -0
- data/lib/rails_com/{core_ext → core}/numeric.rb +0 -0
- data/lib/rails_com/{core_ext → core}/string.rb +0 -0
- data/lib/rails_com/engine.rb +9 -4
- data/lib/rails_com/{rails_ext → generators}/named_base.rb +0 -0
- data/lib/rails_com/{rails_ext → generators}/scaffold_generator.rb +2 -2
- data/lib/rails_com/utils/uid_helper.rb +7 -1
- data/lib/rails_com/version.rb +1 -1
- data/lib/templates/erb/scaffold/{_search_form.html.erb.tt → _filter.html.erb.tt} +3 -0
- data/lib/templates/erb/scaffold/index.html.erb.tt +2 -4
- metadata +54 -23
- data/app/views/active_storage_ext/attachments/_list_form.html.erb +0 -28
- data/lib/rails_com/rails_ext/attached_macros.rb +0 -21
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 87299107f1442c24126546dff21a4d484162bbad8549d6424d15a6eb880d05db
|
4
|
+
data.tar.gz: a700869e1a3db98b654616814724a47952323e0d70ad7ec66ddedbdbd9f5c72e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e4c1af32eeec4d14e445347ebd89cb776439833f71ed81ddce6ea371243306adfbbe8a46cfbff3b309119bfcbf539157785fb76d43f4ed3d6186be9ca46d7faf
|
7
|
+
data.tar.gz: 4a65adc64a1d6c38b49e76f7cc6be115d13277d8db192a6b7ba2ee77e461c1b5fd91b0b7fe89c1208851819b30a68add5c580d96348934aec812c5d5679eceb4
|
@@ -1,45 +1,29 @@
|
|
1
1
|
//= require rails-ujs
|
2
2
|
//= require turbolinks
|
3
|
-
//= require
|
4
|
-
//= require activestorage
|
3
|
+
//= require ./time_local
|
5
4
|
//= require_self
|
6
5
|
|
7
|
-
function timeForLocalized(){
|
8
|
-
$('time[data-localized!="true"]').each(function(){
|
9
|
-
if (this.textContent.length > 0) {
|
10
|
-
var format = this.dataset['format'] || 'YYYY-MM-DD HH:mm:ss';
|
11
|
-
this.textContent = moment.utc(this.textContent).local().format(format);
|
12
|
-
this.dataset['localized'] = 'true'
|
13
|
-
}
|
14
|
-
})
|
15
|
-
}
|
16
|
-
|
17
|
-
function clickCallback(e) {
|
18
|
-
if (e.target.tagName !== 'A') {
|
19
|
-
return;
|
20
|
-
}
|
21
|
-
(new Date).getTimezoneOffset();
|
22
|
-
}
|
23
|
-
//document.addEventListener('click', clickCallback, false);
|
24
|
-
|
25
|
-
function htmlToElement(html_str) {
|
26
|
-
var template = document.createElement('template');
|
27
|
-
template.innerHTML = html_str.trim();
|
28
|
-
return template.content.firstChild;
|
29
|
-
}
|
30
|
-
|
31
6
|
document.addEventListener('DOMContentLoaded', function() {
|
32
7
|
timeForLocalized()
|
33
8
|
});
|
9
|
+
document.addEventListener('ajax:beforeSend', function(event) {
|
10
|
+
var detail = event.detail;
|
11
|
+
var xhr = detail[0];
|
12
|
+
var offset = (new Date).getTimezoneOffset();
|
13
|
+
xhr.setRequestHeader('Utc-Offset', offset);
|
14
|
+
xhr.setRequestHeader('X-Csp-Nonce', Rails.cspNonce())
|
15
|
+
});
|
16
|
+
|
34
17
|
document.addEventListener('turbolinks:load', function() {
|
35
18
|
timeForLocalized()
|
36
19
|
});
|
37
20
|
document.addEventListener('turbolinks:visit', function() {
|
38
21
|
timeForLocalized()
|
39
22
|
});
|
40
|
-
|
41
23
|
document.addEventListener('turbolinks:request-start', function(event) {
|
42
24
|
var xhr = event.data.xhr;
|
43
25
|
var offset = (new Date).getTimezoneOffset();
|
44
26
|
xhr.setRequestHeader('Utc-Offset', offset);
|
27
|
+
xhr.setRequestHeader('X-Csp-Nonce', Rails.cspNonce())
|
45
28
|
});
|
29
|
+
|
@@ -3,14 +3,14 @@
|
|
3
3
|
|
4
4
|
/*
|
5
5
|
* Input Field with Attachment
|
6
|
-
* based on https://github.com/Rovak/
|
6
|
+
* based on https://github.com/Rovak/inlineAttachment/blob/master/LICENSE
|
7
7
|
*/
|
8
8
|
|
9
9
|
(function(document, window) {
|
10
10
|
'use strict';
|
11
11
|
|
12
12
|
var InputAttachment = function(options) {
|
13
|
-
this.settings = Object.assign(
|
13
|
+
this.settings = Object.assign(InputAttachment.defaults, options);
|
14
14
|
this.editor = this.settings['editor'];
|
15
15
|
this.filenameTag = '{filename}';
|
16
16
|
this.lastValue = null;
|
@@ -39,7 +39,7 @@
|
|
39
39
|
|
40
40
|
uploadFileInput: '',
|
41
41
|
|
42
|
-
|
42
|
+
templateDiv: 'file_template',
|
43
43
|
|
44
44
|
/**
|
45
45
|
* Extension which will be used when a file extension could not
|
@@ -196,17 +196,22 @@
|
|
196
196
|
return xhr;
|
197
197
|
};
|
198
198
|
|
199
|
-
InputAttachment.prototype.previewFile = function(file,
|
200
|
-
var fileList = document.getElementById(
|
199
|
+
InputAttachment.prototype.previewFile = function(file, previewDiv) {
|
200
|
+
var fileList = document.getElementById(previewDiv);
|
201
|
+
var templateDiv = document.getElementById(this.settings.templateDiv);
|
201
202
|
var template = document.createElement('template');
|
202
|
-
|
203
|
+
fileList.querySelectorAll('[data-preview=true]').forEach(e => e.parentNode.removeChild(e));
|
204
|
+
template.innerHTML = templateDiv.outerHTML.trim();
|
203
205
|
var img_div = template.content.firstChild;
|
206
|
+
img_div.style.display = 'inline-block';
|
207
|
+
img_div.dataset['preview'] = true;
|
208
|
+
img_div.id = null;
|
204
209
|
var img = img_div.lastElementChild;
|
205
210
|
|
206
211
|
img.src = window.URL.createObjectURL(file); //创建一个object URL,并不是你的本地路径
|
207
212
|
img.onload = function(e) {
|
208
213
|
window.URL.revokeObjectURL(this.src); //图片加载后,释放object URL
|
209
|
-
}
|
214
|
+
};
|
210
215
|
|
211
216
|
fileList.appendChild(img_div);
|
212
217
|
};
|
@@ -243,7 +248,7 @@
|
|
243
248
|
} else {
|
244
249
|
newValue = this.settings.urlText.replace(this.filenameTag, filename);
|
245
250
|
}
|
246
|
-
this.editor.
|
251
|
+
this.editor.value.replace(this.lastValue, newValue);
|
247
252
|
this.settings.onFileUploaded.call(this, filename, result);
|
248
253
|
}
|
249
254
|
}
|
@@ -258,7 +263,7 @@
|
|
258
263
|
*/
|
259
264
|
InputAttachment.prototype.onFileUploadError = function(xhr) {
|
260
265
|
if (this.settings.onFileUploadError.call(this, xhr) !== false) {
|
261
|
-
this.editor.
|
266
|
+
this.editor.value.replace(this.lastValue, '');
|
262
267
|
}
|
263
268
|
};
|
264
269
|
|
@@ -272,7 +277,7 @@
|
|
272
277
|
if (this.settings.onFileReceived.call(this, file) !== false) {
|
273
278
|
this.lastValue = this.settings.progressText;
|
274
279
|
|
275
|
-
var scrollPos = el.scrollTop
|
280
|
+
var scrollPos = el.scrollTop;
|
276
281
|
el.value = this.lastValue;
|
277
282
|
el.scrollTop = scrollPos;
|
278
283
|
}
|
@@ -338,14 +343,14 @@
|
|
338
343
|
return result;
|
339
344
|
};
|
340
345
|
|
341
|
-
InputAttachment.prototype.imagePreview = function(e){
|
346
|
+
InputAttachment.prototype.imagePreview = function(e, previewDiv){
|
342
347
|
var result = false;
|
343
348
|
|
344
349
|
for (var i = 0; i < e.target.files.length; i++) {
|
345
350
|
var file = e.target.files[i];
|
346
351
|
if (this.isFileAllowed(file)) {
|
347
352
|
result = true;
|
348
|
-
this.previewFile(file,
|
353
|
+
this.previewFile(file, previewDiv);
|
349
354
|
}
|
350
355
|
}
|
351
356
|
|
@@ -364,17 +369,17 @@
|
|
364
369
|
var fileInput = document.getElementById(options['fileInput']);
|
365
370
|
options['editor'] = input;
|
366
371
|
options['fileInput'] = fileInput;
|
367
|
-
var
|
372
|
+
var inlineAttach = new InputAttachment(options);
|
368
373
|
|
369
374
|
if (input) {
|
370
375
|
input.addEventListener('paste', function(e) {
|
371
|
-
|
376
|
+
inlineAttach.onPaste(e);
|
372
377
|
}, false);
|
373
378
|
|
374
379
|
input.addEventListener('drop', function(e) {
|
375
380
|
e.stopPropagation();
|
376
381
|
e.preventDefault();
|
377
|
-
|
382
|
+
inlineAttach.onDrop(e);
|
378
383
|
}, false);
|
379
384
|
|
380
385
|
input.addEventListener('dragenter', function(e) {
|
@@ -389,11 +394,11 @@
|
|
389
394
|
}
|
390
395
|
if (fileInput) {
|
391
396
|
fileInput.addEventListener('click', function(e) {
|
392
|
-
|
397
|
+
inlineAttach.onFileInputClick(e)
|
393
398
|
}, false);
|
394
399
|
|
395
400
|
fileInput.addEventListener('change', function(e) {
|
396
|
-
|
401
|
+
inlineAttach.onFileInputChange(e)
|
397
402
|
}, false);
|
398
403
|
}
|
399
404
|
}
|
@@ -402,11 +407,11 @@
|
|
402
407
|
options = options || {};
|
403
408
|
var fileInput = document.getElementById(options['fileInput']);
|
404
409
|
options['fileInput'] = fileInput;
|
405
|
-
var
|
410
|
+
var inlineAttach = new InputAttachment(options);
|
406
411
|
|
407
412
|
if (fileInput) {
|
408
413
|
fileInput.addEventListener('change', function(e) {
|
409
|
-
|
414
|
+
inlineAttach.imagePreview(e, options['previewDiv'])
|
410
415
|
}, false);
|
411
416
|
}
|
412
417
|
}
|
@@ -6,15 +6,26 @@ function fetch_xhr_script(url, params){
|
|
6
6
|
'X-CSRF-Token': document.head.querySelector("[name=csrf-token]").content
|
7
7
|
}
|
8
8
|
};
|
9
|
-
var _params = Object.assign(default_params, params)
|
9
|
+
var _params = Object.assign(default_params, params);
|
10
10
|
|
11
11
|
fetch(url, _params).then(function(response) {
|
12
12
|
return response.text();
|
13
13
|
}).then(function(text) {
|
14
14
|
var script = document.createElement('script');
|
15
|
+
script.setAttribute('nonce', Rails.cspNonce());
|
15
16
|
script.text = text;
|
16
17
|
document.head.appendChild(script).parentNode.removeChild(script);
|
17
18
|
}).catch(function(ex) {
|
18
19
|
console.log('parsing failed', ex);
|
19
20
|
})
|
20
|
-
}
|
21
|
+
}
|
22
|
+
|
23
|
+
function remote_js_load(paths) {
|
24
|
+
for (i = 0; i < paths.length; i++) {
|
25
|
+
Rails.ajax({
|
26
|
+
url: paths[i],
|
27
|
+
type: 'GET',
|
28
|
+
dataType: 'script'
|
29
|
+
})
|
30
|
+
}
|
31
|
+
}
|
@@ -1,3 +1,9 @@
|
|
1
1
|
$('.message .close').on('click', function() {
|
2
2
|
$(this).closest('.message').fadeOut();
|
3
|
-
});
|
3
|
+
});
|
4
|
+
$('.ui.toggle.checkbox').checkbox();
|
5
|
+
document.querySelectorAll('input[data-submit="true"]').forEach(function (el) {
|
6
|
+
el.addEventListener('change', function () {
|
7
|
+
this.dataset['params'] = this.name + '=' + this.checked;
|
8
|
+
});
|
9
|
+
});
|
@@ -0,0 +1,10 @@
|
|
1
|
+
//= require moment
|
2
|
+
function timeForLocalized(){
|
3
|
+
$('time[data-localized!="true"]').each(function(){
|
4
|
+
if (this.textContent.length > 0) {
|
5
|
+
var format = this.dataset['format'] || 'YYYY-MM-DD HH:mm:ss';
|
6
|
+
this.textContent = moment.utc(this.textContent).local().format(format);
|
7
|
+
this.dataset['localized'] = 'true'
|
8
|
+
}
|
9
|
+
})
|
10
|
+
}
|
@@ -4,47 +4,57 @@ module RailsCommonApi
|
|
4
4
|
included do
|
5
5
|
rescue_from 'StandardError' do |exp|
|
6
6
|
puts nil, exp.full_message(highlight: true, order: :top)
|
7
|
-
render json: {
|
7
|
+
render json: { error: { class: exp.class.inspect }, message: exp.message }, status: 500
|
8
8
|
end
|
9
9
|
|
10
10
|
rescue_from 'ActiveRecord::RecordNotFound' do |exp|
|
11
11
|
puts nil, exp.full_message(highlight: true, order: :top)
|
12
|
-
render json: {
|
12
|
+
render json: { error: { class: exp.class.inspect, id: exp.id }, message: exp.message }, status: 404
|
13
|
+
end
|
14
|
+
|
15
|
+
rescue_from 'AbstractController::ActionNotFound', 'ActionController::RoutingError' do |exp|
|
16
|
+
puts nil, exp.full_message(highlight: true, order: :top)
|
17
|
+
render json: { error: { class: exp.class.inspect }, message: exp.message }, status: 404
|
13
18
|
end
|
14
19
|
|
15
20
|
rescue_from 'ActionController::ForbiddenError' do |exp|
|
16
21
|
puts nil, exp.full_message(highlight: true, order: :top)
|
17
|
-
render json: {
|
22
|
+
render json: { error: { class: exp.class.inspect }, message: exp.message }, status: 403
|
18
23
|
end
|
19
24
|
|
20
25
|
rescue_from 'ActionController::UnauthorizedError' do |exp|
|
21
26
|
puts nil, exp.full_message(highlight: true, order: :top)
|
22
|
-
render json: {
|
27
|
+
render json: { error: { class: exp.class.inspect }, message: exp.message }, status: 401
|
23
28
|
end
|
24
29
|
|
25
30
|
rescue_from 'ActionController::ParameterMissing' do |exp|
|
26
31
|
puts nil, exp.full_message(highlight: true, order: :top)
|
27
|
-
render json: {
|
32
|
+
render json: { error: { class: exp.class.inspect }, message: exp.message }, status: 400
|
28
33
|
end
|
34
|
+
before_action :set_locale
|
29
35
|
end
|
30
36
|
|
31
37
|
def process_errors(model)
|
32
38
|
render json: {
|
33
|
-
code: 406,
|
34
39
|
error: model.errors.as_json(full_messages: true),
|
35
40
|
message: model.errors.full_messages.join("\n")
|
36
|
-
}, status:
|
41
|
+
}, status: :bad_request
|
37
42
|
end
|
38
43
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
+
# Accept-Language: "en,zh-CN;q=0.9,zh;q=0.8,en-US;q=0.7,zh-TW;q=0.6"
|
45
|
+
def set_locale
|
46
|
+
request_locales = request.headers['Accept-Language'].to_s.split(',')
|
47
|
+
available_locales = I18n.available_locales.map(&:to_s)
|
48
|
+
locale = (available_locales & request_locales)[0]
|
49
|
+
unless locale.present?
|
50
|
+
locale = request_locales.first.to_s.split('-').first
|
44
51
|
end
|
45
|
-
|
46
|
-
|
47
|
-
|
52
|
+
locale ||= I18n.default_locale
|
53
|
+
I18n.locale = locale
|
54
|
+
if current_user && current_user.locale.to_s != I18n.locale.to_s
|
55
|
+
current_user.update locale: I18n.locale
|
56
|
+
end
|
57
|
+
logger.debug " ==========> Locale: #{I18n.locale}"
|
48
58
|
end
|
49
59
|
|
50
60
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module RailsCommonController
|
2
|
+
extend ActiveSupport::Concern
|
3
|
+
|
4
|
+
included do
|
5
|
+
before_action :set_locale,
|
6
|
+
:set_timezone
|
7
|
+
end
|
8
|
+
|
9
|
+
def set_timezone
|
10
|
+
if session[:zone]
|
11
|
+
Time.zone = session[:zone]
|
12
|
+
elsif request.headers['HTTP_UTC_OFFSET'].present?
|
13
|
+
zone = -(request.headers['HTTP_UTC_OFFSET'].to_i / 60)
|
14
|
+
Time.zone = zone
|
15
|
+
session[:zone] = zone
|
16
|
+
end
|
17
|
+
|
18
|
+
if current_user && current_user.timezone.blank?
|
19
|
+
current_user.update timezone: Time.zone.name
|
20
|
+
end
|
21
|
+
logger.debug " ==========> Zone: #{Time.zone}"
|
22
|
+
end
|
23
|
+
|
24
|
+
def set_locale
|
25
|
+
if params[:locale]
|
26
|
+
session[:locale] = params[:locale]
|
27
|
+
end
|
28
|
+
|
29
|
+
I18n.locale = session[:locale] || I18n.default_locale
|
30
|
+
if current_user && current_user.locale.to_s != session[:locale].to_s
|
31
|
+
current_user.update locale: session[:locale]
|
32
|
+
end
|
33
|
+
logger.debug " ==========> Locale: #{I18n.locale}"
|
34
|
+
end
|
35
|
+
|
36
|
+
def set_country
|
37
|
+
if params[:country]
|
38
|
+
session[:country] = params[:country]
|
39
|
+
elsif current_user
|
40
|
+
session[:country] = current_user.country
|
41
|
+
end
|
42
|
+
|
43
|
+
logger.debug " ==========> Country: #{session[:country]}"
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -3,32 +3,44 @@ module RailsCom::AssetsHelper
|
|
3
3
|
|
4
4
|
# Assets path: app/assets/javascripts/controllers
|
5
5
|
# Packs Path: app/javascript/packs/javascripts
|
6
|
-
def
|
6
|
+
def origin_js_load(**options)
|
7
7
|
ext = ['.js', '.js.erb'] + Array(options.delete(:ext))
|
8
8
|
suffix = options.delete(:suffix)
|
9
9
|
|
10
10
|
asset_filename = "controllers/#{controller_path}/#{action_name}"
|
11
|
-
|
12
|
-
asset_filename += ['.', suffix].join
|
13
|
-
end
|
14
|
-
asset_paths = assets_load_path(asset_filename, relative_path: 'app/assets/javascripts', ext: ext)
|
11
|
+
pack_filename = "javascripts/#{controller_path}/#{action_name}"
|
15
12
|
|
16
|
-
pack_filename ||= "javascripts/#{controller_path}/#{action_name}"
|
17
13
|
if suffix
|
18
|
-
|
14
|
+
asset_filename = [asset_filename, '-', suffix].join
|
15
|
+
pack_filename = [pack_filename, '-', suffix].join
|
19
16
|
end
|
20
|
-
|
17
|
+
|
18
|
+
asset_paths = assets_load_path(asset_filename, relative_path: 'app/assets/javascripts', ext: ext, suffix: suffix)
|
19
|
+
pack_paths = assets_load_path(pack_filename, relative_path: 'app/javascript/packs', ext: ext, suffix: suffix)
|
21
20
|
|
22
21
|
r = []
|
22
|
+
ar = []
|
23
23
|
if asset_paths.any? { |path| File.exist?(path) }
|
24
24
|
r << javascript_include_tag(asset_filename, options)
|
25
|
+
ar << javascript_path(asset_filename)
|
25
26
|
end
|
26
27
|
|
27
28
|
if pack_paths.any? { |path| File.exist?(path) }
|
28
29
|
r << javascript_pack_tag(pack_filename, options)
|
30
|
+
ar << asset_pack_path(pack_filename + '.js')
|
29
31
|
end
|
30
32
|
|
31
|
-
r.join("\n ").html_safe
|
33
|
+
[r.join("\n ").html_safe, ar]
|
34
|
+
end
|
35
|
+
|
36
|
+
def js_load(**options)
|
37
|
+
r, _ = origin_js_load(options)
|
38
|
+
r
|
39
|
+
end
|
40
|
+
|
41
|
+
def remote_js_load(**options)
|
42
|
+
_, r = origin_js_load(options)
|
43
|
+
r
|
32
44
|
end
|
33
45
|
|
34
46
|
def js_ready(**options)
|
@@ -39,12 +51,18 @@ module RailsCom::AssetsHelper
|
|
39
51
|
# Packs Path: app/javascript/packs/stylesheets
|
40
52
|
def css_load(**options)
|
41
53
|
ext = ['.css', '.css.erb'] + Array(options.delete(:ext))
|
54
|
+
suffix = options.delete(:suffix)
|
42
55
|
|
43
56
|
asset_filename = "controllers/#{controller_path}/#{action_name}"
|
44
|
-
asset_paths = assets_load_path(asset_filename, relative_path: 'app/assets/stylesheets', ext: ext )
|
45
|
-
|
46
57
|
pack_filename = "stylesheets/#{controller_path}/#{action_name}"
|
47
|
-
|
58
|
+
|
59
|
+
if suffix
|
60
|
+
asset_filename = [asset_filename, '-', suffix].join
|
61
|
+
pack_filename = [pack_filename, '-', suffix].join
|
62
|
+
end
|
63
|
+
|
64
|
+
asset_paths = assets_load_path(asset_filename, relative_path: 'app/assets/stylesheets', ext: ext, suffix: suffix)
|
65
|
+
pack_paths = assets_load_path(pack_filename, relative_path: 'app/javascript/packs', ext: ext, suffix: suffix)
|
48
66
|
|
49
67
|
r = []
|
50
68
|
if asset_paths.any? { |path| File.exist?(path) }
|
@@ -52,7 +70,7 @@ module RailsCom::AssetsHelper
|
|
52
70
|
end
|
53
71
|
|
54
72
|
if pack_paths.any? { |path| File.exist?(path) }
|
55
|
-
|
73
|
+
|
56
74
|
begin
|
57
75
|
rs = stylesheet_pack_tag(pack_filename, options)
|
58
76
|
rescue
|
@@ -70,7 +88,7 @@ module RailsCom::AssetsHelper
|
|
70
88
|
end
|
71
89
|
|
72
90
|
private
|
73
|
-
def assets_load_path(filename, relative_path:, ext:)
|
91
|
+
def assets_load_path(filename, relative_path:, ext:, suffix: nil)
|
74
92
|
paths = []
|
75
93
|
|
76
94
|
file_path = Pathname.new(relative_path).join filename
|