comfortable_media_surfer 3.0.0 → 3.1.2
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/.gitattributes +1 -0
- data/.github/dependabot.yml +7 -0
- data/.github/workflows/coveralls.yml +13 -1
- data/.github/workflows/rubyonrails.yml +15 -3
- data/.gitignore +4 -0
- data/.rubocop.yml +4 -1
- data/CHANGELOG.md +86 -0
- data/CONTRIBUTING.md +5 -2
- data/Gemfile +10 -6
- data/README.md +64 -27
- data/app/assets/builds/.keep +0 -0
- data/app/assets/config/manifest.js +1 -0
- data/app/assets/javascripts/comfy/admin/cms/application.js +21 -36
- data/app/assets/javascripts/comfy/admin/cms/base.js +6 -5
- data/app/assets/javascripts/comfy/admin/cms/codemirror.js +22 -10
- data/app/assets/javascripts/comfy/admin/cms/diff.js +7 -5
- data/app/assets/javascripts/comfy/admin/cms/file_link.js +17 -11
- data/app/assets/javascripts/comfy/admin/cms/file_upload.js +67 -41
- data/app/assets/javascripts/comfy/admin/cms/files_modal.js +20 -13
- data/app/assets/javascripts/comfy/admin/cms/sortable_list.js +28 -19
- data/app/assets/javascripts/comfy/admin/cms/timepicker.js +20 -12
- data/app/assets/javascripts/comfy/admin/cms/wysiwyg.js +39 -20
- data/app/assets/javascripts/comfy/vendor/diff/pretty_text_diff.js +30 -18
- data/app/assets/javascripts/comfy/vendor/redactor/definedlinks.js +31 -34
- data/app/assets/javascripts/comfy/vendor/redactor/filemanager.js +77 -62
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/hr.js +78 -76
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/nb.js +76 -74
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/pl.js +77 -75
- data/app/assets/javascripts/comfy/vendor/redactor/imagemanager.js +66 -55
- data/app/assets/javascripts/comfy/vendor/redactor/table.js +346 -335
- data/app/assets/javascripts/comfy/vendor/redactor/video.js +69 -64
- data/app/assets/javascripts/comfy/vendor/redactor.js +2 -0
- data/app/assets/stylesheets/comfy/admin/cms/application.sass +2 -2
- data/app/assets/stylesheets/comfy/admin/cms/codemirror_overrides.sass +1 -1
- data/app/helpers/comfy/admin/cms_helper.rb +2 -2
- data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +14 -8
- data/comfortable_media_surfer.gemspec +8 -9
- data/config/application.rb +4 -1
- data/config/environments/development.rb +11 -10
- data/config/environments/production.rb +0 -6
- data/config/puma.rb +43 -0
- data/db/migrate/01_create_cms.rb +0 -1
- data/db/migrate/02_add_markdown_to_snippets.rb +5 -0
- data/gemfiles/7.1.gemfile +3 -2
- data/gemfiles/7.2.gemfile +3 -2
- data/gemfiles/{6.1.gemfile → 8.0.gemfile} +3 -2
- data/lib/comfortable_media_surfer/content/tags/audio.rb +1 -1
- data/lib/comfortable_media_surfer/content/tags/breadcrumbs.rb +1 -1
- data/lib/comfortable_media_surfer/content/tags/children.rb +1 -1
- data/lib/comfortable_media_surfer/content/tags/siblings.rb +1 -1
- data/lib/comfortable_media_surfer/engine.rb +3 -8
- data/lib/comfortable_media_surfer/extensions/has_revisions.rb +1 -1
- data/lib/comfortable_media_surfer/render_methods.rb +7 -7
- data/lib/comfortable_media_surfer/version.rb +1 -1
- data/lib/generators/comfy/cms/README +2 -9
- data/lib/generators/comfy/cms/cms_generator.rb +9 -7
- data/lib/generators/comfy/scaffold/scaffold_generator.rb +1 -1
- data/lib/tasks/cms_assets.rake +19 -0
- data/package-lock.json +379 -0
- data/package.json +23 -0
- data/rakelib/create_release.rake +17 -17
- metadata +24 -146
- data/app/assets/javascripts/comfy/vendor/Moxie.swf +0 -0
- data/app/assets/javascripts/comfy/vendor/Moxie.xap +0 -0
- data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js +0 -7
- data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js.map +0 -1
- data/app/assets/javascripts/comfy/vendor/codemirror/addon/edit/closetag.js +0 -169
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/css/css.js +0 -832
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/htmlmixed/htmlmixed.js +0 -152
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/javascript/javascript.js +0 -875
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/markdown/markdown.js +0 -861
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/xml/xml.js +0 -394
- data/app/assets/javascripts/comfy/vendor/codemirror.js +0 -9653
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ar.js +0 -52
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bg.js +0 -65
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bn.js +0 -65
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ca.js +0 -83
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cs.js +0 -70
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cy.js +0 -92
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/da.js +0 -71
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/de.js +0 -70
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/default.js +0 -80
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/eo.js +0 -73
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/es.js +0 -69
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/et.js +0 -73
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fa.js +0 -68
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fi.js +0 -69
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fr.js +0 -75
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/gr.js +0 -74
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/he.js +0 -57
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hi.js +0 -65
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hr.js +0 -66
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hu.js +0 -72
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/id.js +0 -61
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/it.js +0 -70
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ja.js +0 -57
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ko.js +0 -60
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lt.js +0 -72
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lv.js +0 -67
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mk.js +0 -69
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mn.js +0 -67
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ms.js +0 -68
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/my.js +0 -69
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/nl.js +0 -75
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/no.js +0 -73
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pa.js +0 -65
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pl.js +0 -68
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt-BR.js +0 -66
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt.js +0 -66
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ro.js +0 -69
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ru.js +0 -66
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/si.js +0 -65
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sk.js +0 -70
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sl.js +0 -70
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sq.js +0 -65
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sr.js +0 -69
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sv.js +0 -70
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/th.js +0 -72
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/tr.js +0 -66
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/uk.js +0 -66
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/vn.js +0 -66
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-CN.js +0 -61
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-TW.js +0 -61
- data/app/assets/javascripts/comfy/vendor/moxie.min.js +0 -16
- data/app/assets/javascripts/comfy/vendor/plupload.dev.js +0 -2497
- data/app/assets/javascripts/comfy/vendor/sortable.min.js +0 -5
- data/app/assets/stylesheets/comfy/vendor/codemirror.css +0 -346
- data/app/assets/stylesheets/comfy/vendor/flatpickr.min.css +0 -13
- data/config/initializers/assets.rb +0 -14
- data/gemfiles/7.0.gemfile +0 -31
@@ -1,77 +1,82 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
(function($)
|
4
|
-
{
|
5
|
-
RedactorPlugins.video = function()
|
6
|
-
{
|
7
|
-
return {
|
8
|
-
reUrlYoutube: /https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/ig,
|
9
|
-
reUrlVimeo: /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,
|
10
|
-
getTemplate: function()
|
11
|
-
{
|
12
|
-
return String()
|
13
|
-
+ '<section id="redactor-modal-video-insert">'
|
14
|
-
+ '<label>' + this.lang.get('video_html_code') + '</label>'
|
15
|
-
+ '<textarea id="redactor-insert-video-area" style="height: 160px;"></textarea>'
|
16
|
-
+ '</section>';
|
17
|
-
},
|
18
|
-
init: function()
|
19
|
-
{
|
20
|
-
var button = this.button.addAfter('image', 'video', this.lang.get('video'));
|
21
|
-
this.button.addCallback(button, this.video.show);
|
22
|
-
},
|
23
|
-
show: function()
|
24
|
-
{
|
25
|
-
this.modal.addTemplate('video', this.video.getTemplate());
|
1
|
+
import jQuery from "jquery";
|
26
2
|
|
27
|
-
|
28
|
-
this.modal.createCancelButton();
|
3
|
+
if (!RedactorPlugins) var RedactorPlugins = {};
|
29
4
|
|
30
|
-
|
31
|
-
|
5
|
+
(function ($) {
|
6
|
+
RedactorPlugins.video = function () {
|
7
|
+
return {
|
8
|
+
reUrlYoutube:
|
9
|
+
/https?:\/\/(?:[0-9A-Z-]+\.)?(?:youtu\.be\/|youtube\.com\S*[^\w\-\s])([\w\-]{11})(?=[^\w\-]|$)(?![?=&+%\w.-]*(?:['"][^<>]*>|<\/a>))[?=&+%\w.-]*/gi,
|
10
|
+
reUrlVimeo: /https?:\/\/(www\.)?vimeo.com\/(\d+)($|\/)/,
|
11
|
+
getTemplate: function () {
|
12
|
+
return (
|
13
|
+
String() +
|
14
|
+
'<section id="redactor-modal-video-insert">' +
|
15
|
+
"<label>" +
|
16
|
+
this.lang.get("video_html_code") +
|
17
|
+
"</label>" +
|
18
|
+
'<textarea id="redactor-insert-video-area" style="height: 160px;"></textarea>' +
|
19
|
+
"</section>"
|
20
|
+
);
|
21
|
+
},
|
22
|
+
init: function () {
|
23
|
+
var button = this.button.addAfter(
|
24
|
+
"image",
|
25
|
+
"video",
|
26
|
+
this.lang.get("video")
|
27
|
+
);
|
28
|
+
this.button.addCallback(button, this.video.show);
|
29
|
+
},
|
30
|
+
show: function () {
|
31
|
+
this.modal.addTemplate("video", this.video.getTemplate());
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
this.modal.load("video", this.lang.get("video"), 700);
|
34
|
+
this.modal.createCancelButton();
|
35
35
|
|
36
|
-
|
36
|
+
var button = this.modal.createActionButton(this.lang.get("insert"));
|
37
|
+
button.on("click", this.video.insert);
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
{
|
41
|
-
var data = $('#redactor-insert-video-area').val();
|
39
|
+
this.selection.save();
|
40
|
+
this.modal.show();
|
42
41
|
|
43
|
-
|
44
|
-
|
45
|
-
|
42
|
+
$("#redactor-insert-video-area").focus();
|
43
|
+
},
|
44
|
+
insert: function () {
|
45
|
+
var data = $("#redactor-insert-video-area").val();
|
46
46
|
|
47
|
-
|
48
|
-
|
49
|
-
iframeEnd = '" frameborder="0" allowfullscreen></iframe>';
|
47
|
+
if (!data.match(/<iframe|<video/gi)) {
|
48
|
+
data = this.clean.stripTags(data);
|
50
49
|
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
else if (data.match(this.video.reUrlVimeo))
|
56
|
-
{
|
57
|
-
data = data.replace(this.video.reUrlVimeo, iframeStart + '//player.vimeo.com/video/$2' + iframeEnd);
|
58
|
-
}
|
59
|
-
}
|
50
|
+
// parse if it is link on youtube & vimeo
|
51
|
+
var iframeStart =
|
52
|
+
'<iframe style="width: 500px; height: 281px;" src="',
|
53
|
+
iframeEnd = '" frameborder="0" allowfullscreen></iframe>';
|
60
54
|
|
61
|
-
|
62
|
-
|
55
|
+
if (data.match(this.video.reUrlYoutube)) {
|
56
|
+
data = data.replace(
|
57
|
+
this.video.reUrlYoutube,
|
58
|
+
iframeStart + "//www.youtube.com/embed/$1" + iframeEnd
|
59
|
+
);
|
60
|
+
} else if (data.match(this.video.reUrlVimeo)) {
|
61
|
+
data = data.replace(
|
62
|
+
this.video.reUrlVimeo,
|
63
|
+
iframeStart + "//player.vimeo.com/video/$2" + iframeEnd
|
64
|
+
);
|
65
|
+
}
|
66
|
+
}
|
63
67
|
|
64
|
-
|
68
|
+
this.selection.restore();
|
69
|
+
this.modal.close();
|
65
70
|
|
66
|
-
|
67
|
-
else
|
68
|
-
{
|
69
|
-
this.insert.html(data);
|
70
|
-
}
|
71
|
+
var current = this.selection.getBlock() || this.selection.getCurrent();
|
71
72
|
|
72
|
-
|
73
|
-
|
73
|
+
if (current) $(current).after(data);
|
74
|
+
else {
|
75
|
+
this.insert.html(data);
|
76
|
+
}
|
74
77
|
|
75
|
-
|
76
|
-
|
77
|
-
}
|
78
|
+
this.code.sync();
|
79
|
+
},
|
80
|
+
};
|
81
|
+
};
|
82
|
+
})(jQuery);
|
@@ -1,9 +1,9 @@
|
|
1
1
|
@import "comfy/vendor/bootstrap/bootstrap"
|
2
2
|
|
3
|
-
@import "
|
3
|
+
@import "codemirror/lib/codemirror"
|
4
4
|
@import "comfy/vendor/fontawesome"
|
5
5
|
@import "comfy/vendor/redactor"
|
6
|
-
@import "
|
6
|
+
@import "flatpickr/dist/flatpickr.min"
|
7
7
|
|
8
8
|
@import "comfy/admin/cms/codemirror_overrides"
|
9
9
|
@import "comfy/admin/cms/redactor_overrides"
|
@@ -4,11 +4,11 @@ module Comfy
|
|
4
4
|
module Admin
|
5
5
|
module CmsHelper
|
6
6
|
# Wrapper around Comfy::FormBuilder
|
7
|
-
def comfy_form_with(**options, &
|
7
|
+
def comfy_form_with(**options, &)
|
8
8
|
form_options = options.merge(builder: ComfortableMediaSurfer::FormBuilder)
|
9
9
|
form_options[:bootstrap] = { layout: :horizontal }
|
10
10
|
form_options[:local] = true
|
11
|
-
bootstrap_form_with(**form_options, &
|
11
|
+
bootstrap_form_with(**form_options, &)
|
12
12
|
end
|
13
13
|
|
14
14
|
def comfy_admin_partial(path, params = {})
|
@@ -1,13 +1,19 @@
|
|
1
1
|
// TODO: Extract this so the server only renders the HTML.
|
2
|
-
var li =
|
3
|
-
li.
|
4
|
-
|
2
|
+
var li = document.querySelector('li#comfy_cms_page_<%=@page.id%>');
|
3
|
+
var toggle = li.querySelector('.item .toggle');
|
4
|
+
toggle.classList.toggle('open');
|
5
5
|
<% if session[:cms_page_tree].member?(@page.id.to_s) %>
|
6
|
-
if(!li.
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
if(!li.querySelector('ul.children')) {
|
7
|
+
var childrenList = document.createElement('ul');
|
8
|
+
childrenList.className = 'children sortable pl-md-3';
|
9
|
+
childrenList.innerHTML = '<%= escape_javascript(render partial: "index_branch", collection: @page.children) %>';
|
10
|
+
li.appendChild(childrenList);
|
11
|
+
CMS.sortableList.dispose();
|
12
|
+
CMS.sortableList.init();
|
10
13
|
}
|
11
14
|
<% else %>
|
12
|
-
li.
|
15
|
+
var childrenList = li.querySelector('ul.children');
|
16
|
+
if (childrenList) {
|
17
|
+
childrenList.remove();
|
18
|
+
}
|
13
19
|
<% end %>
|
@@ -9,29 +9,28 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ['Oleg Khabarov', 'Andrew vonderLuft', 'ShakaCode']
|
10
10
|
spec.email = ['justin@shakacode.com']
|
11
11
|
spec.homepage = 'https://github.com/shakacode/comfortable-media-surfer'
|
12
|
-
spec.summary = 'Rails
|
13
|
-
spec.description = 'ComfortableMediaSurfer is a powerful Rails
|
12
|
+
spec.summary = 'Rails 7.0+ CMS Engine'
|
13
|
+
spec.description = 'ComfortableMediaSurfer is a powerful Rails 7.0+ CMS Engine'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
+
spec.post_install_message = 'Please run rake comfy:compile_assets to compile assets.'
|
17
|
+
|
16
18
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
19
|
f.match(%r{^(test|doc)/})
|
18
20
|
end
|
19
21
|
|
20
|
-
spec.required_ruby_version = '>= 3.
|
22
|
+
spec.required_ruby_version = '>= 3.2.0'
|
21
23
|
spec.metadata['rubygems_mfa_required'] = 'true'
|
22
24
|
|
23
25
|
spec.add_dependency 'active_link_to', '~> 1.0', '>= 1.0.5'
|
24
26
|
spec.add_dependency 'comfy_bootstrap_form', '~> 4.0', '>= 4.0.0'
|
25
27
|
spec.add_dependency 'haml-rails', '~> 2.1', '>= 2.1.0'
|
26
28
|
spec.add_dependency 'image_processing', '~> 1.2', '>= 1.12.2'
|
27
|
-
spec.add_dependency 'jquery-rails', '~> 4.6', '>= 4.6.0'
|
28
29
|
spec.add_dependency 'kaminari', '~> 1.2', '>= 1.2.2'
|
29
30
|
spec.add_dependency 'kramdown', '~> 2.4', '>= 2.4.0'
|
30
31
|
spec.add_dependency 'mimemagic', '~> 0.4', '>= 0.4.3'
|
31
|
-
spec.add_dependency 'mini_magick', '
|
32
|
-
spec.add_dependency 'rails', '>=
|
32
|
+
spec.add_dependency 'mini_magick', '>= 4.12', '< 6.0'
|
33
|
+
spec.add_dependency 'rails', '>= 7.0.0'
|
33
34
|
spec.add_dependency 'rails-i18n', '>= 6.0.0'
|
34
|
-
spec.add_dependency 'sassc-rails', '
|
35
|
-
spec.add_dependency 'sprockets-rails', '~> 3.4', '>= 3.4.2'
|
36
|
-
spec.add_development_dependency "gem-release"
|
35
|
+
spec.add_dependency 'sassc-rails', '>= 2.1.2'
|
37
36
|
end
|
data/config/application.rb
CHANGED
@@ -10,6 +10,9 @@ Bundler.require(*Rails.groups)
|
|
10
10
|
|
11
11
|
module ComfortableMediaSurfer
|
12
12
|
class Application < Rails::Application
|
13
|
+
# Ensuring that ActiveStorage routes are loaded before Comfy's globbing
|
14
|
+
# route. Without this file serving routes are inaccessible.
|
15
|
+
config.railties_order = [ActiveStorage::Engine, :main_app, :all]
|
13
16
|
# Load defaults based on Rails major/minor version
|
14
17
|
config.load_defaults Rails.version.scan(%r{^\d+\.\d+}).first.to_f
|
15
18
|
|
@@ -17,7 +20,7 @@ module ComfortableMediaSurfer
|
|
17
20
|
if Gem::Version.new(Rails.version) >= Gem::Version.new('7.1.0')
|
18
21
|
config.active_record.default_column_serializer = YAML
|
19
22
|
config.active_record.before_committed_on_all_records = false
|
20
|
-
config.active_record.commit_transaction_on_non_local_return = false
|
23
|
+
# config.active_record.commit_transaction_on_non_local_return = false # deprecated in Rails 8
|
21
24
|
config.active_record.run_after_transaction_callbacks_in_order_defined = false
|
22
25
|
config.active_support.message_serializer = :json
|
23
26
|
config.active_record.run_commit_callbacks_on_first_saved_instances_in_transaction = true
|
@@ -16,22 +16,19 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
|
|
16
16
|
# Show full error reports.
|
17
17
|
config.consider_all_requests_local = true
|
18
18
|
|
19
|
-
# Enable server timing
|
19
|
+
# Enable server timing.
|
20
20
|
config.server_timing = true
|
21
21
|
|
22
|
-
# Enable/disable caching. By default caching is disabled.
|
23
|
-
# Run rails dev:cache to toggle caching.
|
22
|
+
# Enable/disable Action Controller caching. By default Action Controller caching is disabled.
|
23
|
+
# Run rails dev:cache to toggle Action Controller caching.
|
24
24
|
if Rails.root.join('tmp/caching-dev.txt').exist?
|
25
25
|
config.action_controller.perform_caching = true
|
26
26
|
config.action_controller.enable_fragment_cache_logging = true
|
27
27
|
|
28
28
|
config.cache_store = :memory_store
|
29
|
-
config.public_file_server.headers = {
|
30
|
-
'Cache-Control' => "public, max-age=#{2.days.to_i}"
|
31
|
-
}
|
29
|
+
config.public_file_server.headers = { 'cache-control' => "public, max-age=#{2.days.to_i}" }
|
32
30
|
else
|
33
31
|
config.action_controller.perform_caching = false
|
34
|
-
|
35
32
|
config.cache_store = :null_store
|
36
33
|
end
|
37
34
|
|
@@ -41,8 +38,12 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
|
|
41
38
|
# Don't care if the mailer can't send.
|
42
39
|
config.action_mailer.raise_delivery_errors = false
|
43
40
|
|
41
|
+
# Make template changes take effect immediately.
|
44
42
|
config.action_mailer.perform_caching = false
|
45
43
|
|
44
|
+
# Set localhost to be used by links generated in mailer templates.
|
45
|
+
config.action_mailer.default_url_options = { host: 'localhost', port: 3000 }
|
46
|
+
|
46
47
|
# Print deprecation notices to the Rails logger.
|
47
48
|
config.active_support.deprecation = :log
|
48
49
|
|
@@ -61,9 +62,6 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
|
|
61
62
|
# Highlight code that enqueued background job in logs.
|
62
63
|
config.active_job.verbose_enqueue_logs = true
|
63
64
|
|
64
|
-
# Suppress logger output for asset requests.
|
65
|
-
config.assets.quiet = true
|
66
|
-
|
67
65
|
# Raises error for missing translations.
|
68
66
|
# config.i18n.raise_on_missing_translations = true
|
69
67
|
|
@@ -77,4 +75,7 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
|
|
77
75
|
# Raise error when a before_action's only/except options reference missing actions
|
78
76
|
config.action_controller.raise_on_missing_callback_actions = true
|
79
77
|
end
|
78
|
+
|
79
|
+
# Apply autocorrection by RuboCop to files generated by `bin/rails generate`.
|
80
|
+
# config.generators.apply_rubocop_autocorrect_after_generate!
|
80
81
|
end
|
@@ -25,12 +25,6 @@ defined?(ComfortableMediaSurfer::Application) && ComfortableMediaSurfer::Applica
|
|
25
25
|
# Enable static file serving from the `/public` folder (turn off if using NGINX/Apache for it).
|
26
26
|
config.public_file_server.enabled = ENV['RAILS_SERVE_STATIC_FILES'].present?
|
27
27
|
|
28
|
-
# Compress CSS using a preprocessor.
|
29
|
-
# config.assets.css_compressor = :sass
|
30
|
-
|
31
|
-
# Do not fallback to assets pipeline if a precompiled asset is missed.
|
32
|
-
config.assets.compile = false
|
33
|
-
|
34
28
|
# Enable serving of images, stylesheets, and JavaScripts from an asset server.
|
35
29
|
# config.asset_host = "http://assets.example.com"
|
36
30
|
|
data/config/puma.rb
ADDED
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# This configuration file will be evaluated by Puma. The top-level methods that
|
4
|
+
# are invoked here are part of Puma's configuration DSL. For more information
|
5
|
+
# about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.
|
6
|
+
#
|
7
|
+
# Puma starts a configurable number of processes (workers) and each process
|
8
|
+
# serves each request in a thread from an internal thread pool.
|
9
|
+
#
|
10
|
+
# You can control the number of workers using ENV["WEB_CONCURRENCY"]. You
|
11
|
+
# should only set this value when you want to run 2 or more workers. The
|
12
|
+
# default is already 1.
|
13
|
+
#
|
14
|
+
# The ideal number of threads per worker depends both on how much time the
|
15
|
+
# application spends waiting for IO operations and on how much you wish to
|
16
|
+
# prioritize throughput over latency.
|
17
|
+
#
|
18
|
+
# As a rule of thumb, increasing the number of threads will increase how much
|
19
|
+
# traffic a given process can handle (throughput), but due to CRuby's
|
20
|
+
# Global VM Lock (GVL) it has diminishing returns and will degrade the
|
21
|
+
# response time (latency) of the application.
|
22
|
+
#
|
23
|
+
# The default is set to 3 threads as it's deemed a decent compromise between
|
24
|
+
# throughput and latency for the average Rails application.
|
25
|
+
#
|
26
|
+
# Any libraries that use a connection pool or another resource pool should
|
27
|
+
# be configured to provide at least as many connections as the number of
|
28
|
+
# threads. This includes Active Record's `pool` parameter in `database.yml`.
|
29
|
+
threads_count = ENV.fetch('RAILS_MAX_THREADS', 3)
|
30
|
+
threads threads_count, threads_count
|
31
|
+
|
32
|
+
# Specifies the `port` that Puma will listen on to receive requests; default is 3000.
|
33
|
+
port ENV.fetch('PORT', 3000)
|
34
|
+
|
35
|
+
# Allow puma to be restarted by `bin/rails restart` command.
|
36
|
+
plugin :tmp_restart
|
37
|
+
|
38
|
+
# Run the Solid Queue supervisor inside of Puma for single-server deployments
|
39
|
+
plugin :solid_queue if ENV['SOLID_QUEUE_IN_PUMA']
|
40
|
+
|
41
|
+
# Specify the PID file. Defaults to tmp/pids/server.pid in development.
|
42
|
+
# In other environments, only set the PID file if requested.
|
43
|
+
pidfile ENV['PIDFILE'] if ENV['PIDFILE']
|
data/db/migrate/01_create_cms.rb
CHANGED
@@ -88,7 +88,6 @@ class CreateCms < ActiveRecord::Migration[5.2]
|
|
88
88
|
t.integer :site_id, null: false
|
89
89
|
t.string :label, null: false
|
90
90
|
t.string :identifier, null: false
|
91
|
-
t.boolean :markdown
|
92
91
|
t.text :content, limit: LIMIT
|
93
92
|
t.integer :position, null: false, default: 0
|
94
93
|
t.timestamps
|
data/gemfiles/7.1.gemfile
CHANGED
@@ -5,13 +5,14 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
5
5
|
|
6
6
|
gemspec path: '../'
|
7
7
|
|
8
|
-
gem 'rails', '~> 7.1.0', '>= 7.1.1'
|
8
|
+
gem 'rails', '~> 7.1.0', '>= 7.1.5.1'
|
9
9
|
|
10
10
|
group :development, :test do
|
11
11
|
gem 'autoprefixer-rails', '~> 10.4.16.0'
|
12
12
|
gem 'byebug', '~> 11.1.0', platforms: %i[mri mingw x64_mingw]
|
13
13
|
gem 'image_processing', '>= 1.12.0'
|
14
|
-
gem '
|
14
|
+
gem 'propshaft', '~> 1.1.0'
|
15
|
+
gem 'sqlite3', '>= 2.1'
|
15
16
|
end
|
16
17
|
|
17
18
|
group :test do
|
data/gemfiles/7.2.gemfile
CHANGED
@@ -5,13 +5,14 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
5
5
|
|
6
6
|
gemspec path: '../'
|
7
7
|
|
8
|
-
gem 'rails', '~> 7.2.0', '>= 7.2.2'
|
8
|
+
gem 'rails', '~> 7.2.0', '>= 7.2.2.1'
|
9
9
|
|
10
10
|
group :development, :test do
|
11
11
|
gem 'autoprefixer-rails', '~> 10.4.16.0'
|
12
12
|
gem 'byebug', '~> 11.1.0', platforms: %i[mri mingw x64_mingw]
|
13
13
|
gem 'image_processing', '>= 1.12.0'
|
14
|
-
gem '
|
14
|
+
gem 'propshaft', '~> 1.1.0'
|
15
|
+
gem 'sqlite3', '>= 2.1'
|
15
16
|
end
|
16
17
|
|
17
18
|
group :test do
|
@@ -5,13 +5,14 @@ git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
|
5
5
|
|
6
6
|
gemspec path: '../'
|
7
7
|
|
8
|
-
gem 'rails', '~>
|
8
|
+
gem 'rails', '~> 8.0.1'
|
9
9
|
|
10
10
|
group :development, :test do
|
11
11
|
gem 'autoprefixer-rails', '~> 10.4.16.0'
|
12
12
|
gem 'byebug', '~> 11.1.0', platforms: %i[mri mingw x64_mingw]
|
13
13
|
gem 'image_processing', '>= 1.12.0'
|
14
|
-
gem '
|
14
|
+
gem 'propshaft', '~> 1.1.0'
|
15
|
+
gem 'sqlite3', '>= 2.1'
|
15
16
|
end
|
16
17
|
|
17
18
|
group :test do
|
@@ -30,7 +30,7 @@ class ComfortableMediaSurfer::Content::Tags::Audio < ComfortableMediaSurfer::Con
|
|
30
30
|
end
|
31
31
|
|
32
32
|
def content
|
33
|
-
|
33
|
+
"#{@style}<audio controls class=\"audioplayer\" src=#{@path}></audio>"
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
@@ -6,18 +6,13 @@ require 'rails-i18n'
|
|
6
6
|
require 'comfy_bootstrap_form'
|
7
7
|
require 'active_link_to'
|
8
8
|
require 'kramdown'
|
9
|
-
require 'jquery-rails'
|
10
9
|
require 'haml-rails'
|
11
|
-
require 'sassc-rails'
|
12
10
|
|
13
11
|
module ComfortableMediaSurfer
|
14
12
|
class Engine < ::Rails::Engine
|
15
|
-
initializer 'comfortable_media_surfer.setup_assets' do
|
16
|
-
|
17
|
-
|
18
|
-
comfy/admin/cms/application.css
|
19
|
-
comfy/admin/cms/lib/redactor-font.eot
|
20
|
-
]
|
13
|
+
initializer 'comfortable_media_surfer.setup_assets' do |app|
|
14
|
+
app.config.assets.paths << root.join('app/assets/builds')
|
15
|
+
app.config.assets.precompile += %w[comfy/admin/cms/application.js comfy/admin/cms/application.css]
|
21
16
|
end
|
22
17
|
|
23
18
|
config.to_prepare do
|
@@ -31,7 +31,7 @@ module ComfortableMediaSurfer::Extensions::HasRevisions
|
|
31
31
|
return if new_record?
|
32
32
|
|
33
33
|
if (respond_to?(:fragments_attributes_changed) && fragments_attributes_changed) ||
|
34
|
-
|
34
|
+
!!changed.intersect?(revision_fields)
|
35
35
|
self.revision_data = revision_fields.each_with_object({}) do |field, c|
|
36
36
|
c[field] = send("#{field}_was")
|
37
37
|
end
|
@@ -33,7 +33,7 @@ module ComfortableMediaSurfer::RenderMethods
|
|
33
33
|
# it by passing :cms_site parameter with site's slug. For example:
|
34
34
|
# render cms_page: '/path/to/page', cms_site: 'default'
|
35
35
|
#
|
36
|
-
def render(options = {}, locals = {}, &
|
36
|
+
def render(options = {}, locals = {}, &)
|
37
37
|
return super unless options.is_a?(Hash)
|
38
38
|
|
39
39
|
if (site_identifier = options.delete(:cms_site)) && !(@cms_site = Comfy::Cms::Site.find_by_identifier(site_identifier))
|
@@ -47,15 +47,15 @@ module ComfortableMediaSurfer::RenderMethods
|
|
47
47
|
end
|
48
48
|
|
49
49
|
if page_path
|
50
|
-
render_cms_page(page_path, options, locals, &
|
50
|
+
render_cms_page(page_path, options, locals, &)
|
51
51
|
elsif layout_identifier
|
52
|
-
render_cms_layout(layout_identifier, options, locals, &
|
52
|
+
render_cms_layout(layout_identifier, options, locals, &)
|
53
53
|
else
|
54
54
|
super
|
55
55
|
end
|
56
56
|
end
|
57
57
|
|
58
|
-
def render_cms_page(path, options = {}, locals = {}, &
|
58
|
+
def render_cms_page(path, options = {}, locals = {}, &)
|
59
59
|
path.gsub!(%r{^/#{@cms_site.path}}, '') if @cms_site.path.present?
|
60
60
|
|
61
61
|
unless (@cms_page = @cms_site.pages.find_by_full_path(path))
|
@@ -77,10 +77,10 @@ module ComfortableMediaSurfer::RenderMethods
|
|
77
77
|
options[:layout] ||= cms_app_layout.blank? ? nil : cms_app_layout
|
78
78
|
options[:inline] = @cms_page.render
|
79
79
|
|
80
|
-
render(options, locals, &
|
80
|
+
render(options, locals, &)
|
81
81
|
end
|
82
82
|
|
83
|
-
def render_cms_layout(identifier, options = {}, locals = {}, &
|
83
|
+
def render_cms_layout(identifier, options = {}, locals = {}, &)
|
84
84
|
unless (@cms_layout = @cms_site.layouts.find_by_identifier(identifier))
|
85
85
|
raise ComfortableMediaSurfer::MissingLayout, identifier
|
86
86
|
end
|
@@ -97,7 +97,7 @@ module ComfortableMediaSurfer::RenderMethods
|
|
97
97
|
options[:layout] ||= cms_app_layout.blank? ? nil : cms_app_layout
|
98
98
|
options[:inline] = cms_page.render
|
99
99
|
|
100
|
-
render(options, locals, &
|
100
|
+
render(options, locals, &)
|
101
101
|
end
|
102
102
|
end
|
103
103
|
|
@@ -13,16 +13,9 @@ You are almost done. Don't forget to:
|
|
13
13
|
|
14
14
|
[Optional] - If you want to store files in your CMS with ActiveStorage: `rails active_storage:install`
|
15
15
|
[Mandatory] - Create the tables in your database: `rails db:migrate`
|
16
|
+
[Mandatory] - Run `rails comfy:compile_assets`
|
16
17
|
|
17
18
|
Then go to http://your-rails-app/admin to start adding content.
|
18
19
|
|
19
20
|
Default username and password are: user / pass
|
20
|
-
Change these defaults in config/initializers/
|
21
|
-
|
22
|
-
----------------------------
|
23
|
-
IF YOU ARE ON RAILS 6.x
|
24
|
-
----------------------------
|
25
|
-
and encounter errors referencing webpacker:
|
26
|
-
ensure that you have nvm installed, and then run
|
27
|
-
- nvm install 13.7 && nvm use 13.7
|
28
|
-
- rails webpacker:install
|
21
|
+
Change these defaults in config/initializers/comfortable_media_surfer.rb
|
@@ -11,14 +11,16 @@ module Comfy
|
|
11
11
|
source_root File.expand_path('../../../..', __dir__)
|
12
12
|
|
13
13
|
def generate_migration
|
14
|
-
|
15
|
-
|
16
|
-
|
14
|
+
%w[01_create_cms 02_add_markdown_to_snippets].each do |migration|
|
15
|
+
destination = File.expand_path("db/migrate/#{migration}.rb", destination_root)
|
16
|
+
migration_dir = File.dirname(destination)
|
17
|
+
destination = self.class.migration_exists?(migration_dir, migration)
|
17
18
|
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
if destination
|
20
|
+
puts "\e[0m\e[31mFound existing #{migration}.rb migration. Remove it if you want to regenerate.\e[0m"
|
21
|
+
else
|
22
|
+
migration_template "db/migrate/#{migration}.rb", "db/migrate/#{migration[3..]}.rb"
|
23
|
+
end
|
22
24
|
end
|
23
25
|
end
|
24
26
|
|