comfortable_mexican_sofa 2.0.2 → 2.0.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +95 -4
- data/.travis.yml +2 -1
- data/CONTRIBUTING.md +8 -5
- data/Gemfile +9 -9
- data/Rakefile +1 -1
- data/app/assets/javascripts/comfy/admin/cms/base.js.coffee +1 -0
- data/app/assets/stylesheets/comfy/admin/cms/base.sass +14 -4
- data/app/controllers/application_controller.rb +2 -2
- data/app/controllers/comfy/admin/base_controller.rb +1 -1
- data/app/controllers/comfy/admin/cms/base_controller.rb +7 -6
- data/app/controllers/comfy/admin/cms/categories_controller.rb +2 -1
- data/app/controllers/comfy/admin/cms/files_controller.rb +32 -29
- data/app/controllers/comfy/admin/cms/layouts_controller.rb +10 -9
- data/app/controllers/comfy/admin/cms/pages_controller.rb +31 -27
- data/app/controllers/comfy/admin/cms/revisions/base_controller.rb +5 -4
- data/app/controllers/comfy/admin/cms/revisions/layout_controller.rb +2 -1
- data/app/controllers/comfy/admin/cms/revisions/page_controller.rb +9 -3
- data/app/controllers/comfy/admin/cms/revisions/snippet_controller.rb +2 -1
- data/app/controllers/comfy/admin/cms/revisions/translation_controller.rb +9 -3
- data/app/controllers/comfy/admin/cms/sites_controller.rb +10 -9
- data/app/controllers/comfy/admin/cms/snippets_controller.rb +10 -9
- data/app/controllers/comfy/admin/cms/translations_controller.rb +15 -14
- data/app/controllers/comfy/cms/assets_controller.rb +4 -3
- data/app/controllers/comfy/cms/base_controller.rb +12 -11
- data/app/controllers/comfy/cms/content_controller.rb +8 -7
- data/app/controllers/concerns/comfy/paginate.rb +2 -1
- data/app/helpers/comfy/cms_helper.rb +6 -3
- data/app/models/comfy/cms/categorization.rb +2 -1
- data/app/models/comfy/cms/category.rb +3 -2
- data/app/models/comfy/cms/file.rb +9 -7
- data/app/models/comfy/cms/fragment.rb +8 -6
- data/app/models/comfy/cms/layout.rb +24 -24
- data/app/models/comfy/cms/page.rb +51 -32
- data/app/models/comfy/cms/revision.rb +2 -1
- data/app/models/comfy/cms/site.rb +27 -26
- data/app/models/comfy/cms/snippet.rb +7 -5
- data/app/models/comfy/cms/translation.rb +6 -4
- data/app/models/concerns/comfy/cms/with_categories.rb +9 -7
- data/app/models/concerns/comfy/cms/with_fragments.rb +15 -13
- data/app/views/comfy/admin/cms/categories/_categories.html.haml +1 -1
- data/app/views/comfy/admin/cms/files/_file.html.haml +3 -3
- data/app/views/comfy/admin/cms/files/_modal.html.haml +2 -2
- data/app/views/comfy/admin/cms/{pages/_fragment_attachments.html.haml → fragments/_form_fragment_attachments.html.haml} +0 -0
- data/app/views/comfy/admin/cms/{pages → fragments}/_form_fragments.html.haml +0 -0
- data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +2 -2
- data/app/views/comfy/admin/cms/pages/_form.html.haml +7 -7
- data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +16 -15
- data/app/views/comfy/admin/cms/pages/form_fragments.js.erb +1 -1
- data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +1 -1
- data/app/views/comfy/admin/cms/snippets/index.html.haml +3 -3
- data/app/views/comfy/admin/cms/translations/_form.html.haml +1 -1
- data/app/views/comfy/admin/cms/translations/form_fragments.js.erb +1 -1
- data/app/views/layouts/comfy/admin/cms/_body.html.haml +1 -4
- data/app/views/layouts/comfy/admin/cms.html.haml +1 -1
- data/bin/bundle +3 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/bin/setup +36 -0
- data/bin/update +31 -0
- data/bin/yarn +11 -0
- data/comfortable_mexican_sofa.gemspec +14 -14
- data/config/application.rb +4 -3
- data/config/boot.rb +3 -3
- data/config/cms_routes.rb +1 -1
- data/config/environment.rb +1 -1
- data/config/environments/development.rb +2 -2
- data/config/environments/test.rb +1 -1
- data/config/initializers/comfortable_mexican_sofa.rb +2 -5
- data/config/locales/cs.yml +2 -1
- data/config/locales/da.yml +2 -1
- data/config/locales/de.yml +2 -1
- data/config/locales/en.yml +2 -1
- data/config/locales/es.yml +2 -1
- data/config/locales/fr.yml +2 -1
- data/config/locales/it.yml +2 -1
- data/config/locales/ja.yml +2 -1
- data/config/locales/nb.yml +2 -1
- data/config/locales/nl.yml +2 -1
- data/config/locales/pl.yml +2 -1
- data/config/locales/pt-BR.yml +2 -1
- data/config/locales/ru.yml +2 -1
- data/config/locales/sk.yml +2 -1
- data/config/locales/sv.yml +2 -1
- data/config/locales/tr.yml +2 -1
- data/config/locales/uk.yml +2 -1
- data/config/locales/zh-CN.yml +2 -1
- data/config/locales/zh-TW.yml +2 -1
- data/config.ru +1 -1
- data/lib/comfortable_mexican_sofa/access_control/admin_authentication.rb +2 -1
- data/lib/comfortable_mexican_sofa/access_control/admin_authorization.rb +2 -0
- data/lib/comfortable_mexican_sofa/access_control/public_authentication.rb +3 -1
- data/lib/comfortable_mexican_sofa/access_control/public_authorization.rb +2 -0
- data/lib/comfortable_mexican_sofa/configuration.rb +27 -29
- data/lib/comfortable_mexican_sofa/content/block.rb +2 -1
- data/lib/comfortable_mexican_sofa/content/params_parser.rb +22 -21
- data/lib/comfortable_mexican_sofa/content/renderer.rb +10 -8
- data/lib/comfortable_mexican_sofa/content/tag.rb +1 -0
- data/lib/comfortable_mexican_sofa/content/tags/asset.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/checkbox.rb +3 -2
- data/lib/comfortable_mexican_sofa/content/tags/date.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/datetime.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/file.rb +15 -13
- data/lib/comfortable_mexican_sofa/content/tags/file_link.rb +8 -7
- data/lib/comfortable_mexican_sofa/content/tags/files.rb +15 -13
- data/lib/comfortable_mexican_sofa/content/tags/fragment.rb +7 -6
- data/lib/comfortable_mexican_sofa/content/tags/helper.rb +2 -1
- data/lib/comfortable_mexican_sofa/content/tags/markdown.rb +5 -4
- data/lib/comfortable_mexican_sofa/content/tags/number.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/partial.rb +1 -0
- data/lib/comfortable_mexican_sofa/content/tags/snippet.rb +3 -2
- data/lib/comfortable_mexican_sofa/content/tags/template.rb +1 -0
- data/lib/comfortable_mexican_sofa/content/tags/text.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/textarea.rb +4 -3
- data/lib/comfortable_mexican_sofa/content/tags/wysiwyg.rb +4 -3
- data/lib/comfortable_mexican_sofa/content.rb +21 -21
- data/lib/comfortable_mexican_sofa/engine.rb +17 -15
- data/lib/comfortable_mexican_sofa/error.rb +12 -6
- data/lib/comfortable_mexican_sofa/extensions/acts_as_tree.rb +17 -11
- data/lib/comfortable_mexican_sofa/extensions/has_revisions.rb +14 -13
- data/lib/comfortable_mexican_sofa/form_builder.rb +2 -2
- data/lib/comfortable_mexican_sofa/render_methods.rb +74 -76
- data/lib/comfortable_mexican_sofa/routes/cms.rb +4 -4
- data/lib/comfortable_mexican_sofa/routes/cms_admin.rb +2 -1
- data/lib/comfortable_mexican_sofa/routing.rb +4 -2
- data/lib/comfortable_mexican_sofa/seeds/file/exporter.rb +7 -6
- data/lib/comfortable_mexican_sofa/seeds/file/importer.rb +9 -9
- data/lib/comfortable_mexican_sofa/seeds/layout/exporter.rb +8 -7
- data/lib/comfortable_mexican_sofa/seeds/layout/importer.rb +11 -10
- data/lib/comfortable_mexican_sofa/seeds/page/exporter.rb +25 -23
- data/lib/comfortable_mexican_sofa/seeds/page/importer.rb +47 -43
- data/lib/comfortable_mexican_sofa/seeds/snippet/exporter.rb +7 -6
- data/lib/comfortable_mexican_sofa/seeds/snippet/importer.rb +7 -6
- data/lib/comfortable_mexican_sofa/seeds.rb +16 -9
- data/lib/comfortable_mexican_sofa/version.rb +4 -2
- data/lib/comfortable_mexican_sofa/view_hooks.rb +10 -9
- data/lib/comfortable_mexican_sofa.rb +30 -30
- data/lib/generators/comfy/cms/assets_generator.rb +6 -4
- data/lib/generators/comfy/cms/cms_generator.rb +14 -14
- data/lib/generators/comfy/cms/controllers_generator.rb +5 -3
- data/lib/generators/comfy/cms/models_generator.rb +5 -3
- data/lib/generators/comfy/cms/views_generator.rb +5 -3
- data/lib/generators/comfy/scaffold/scaffold_generator.rb +19 -18
- data/lib/tasks/cms_seeds.rake +4 -5
- data/test/controllers/comfy/admin/cms/base_controller_test.rb +4 -3
- data/test/controllers/comfy/admin/cms/categories_controller_test.rb +19 -18
- data/test/controllers/comfy/admin/cms/files_controller_test.rb +19 -19
- data/test/controllers/comfy/admin/cms/layouts_controller_test.rb +33 -32
- data/test/controllers/comfy/admin/cms/pages_controller_test.rb +99 -98
- data/test/controllers/comfy/admin/cms/revisions/layout_controller_test.rb +9 -9
- data/test/controllers/comfy/admin/cms/revisions/page_controller_test.rb +6 -6
- data/test/controllers/comfy/admin/cms/revisions/snippet_controller_test.rb +9 -8
- data/test/controllers/comfy/admin/cms/revisions/translation_controller_test.rb +6 -7
- data/test/controllers/comfy/admin/cms/sites_controller_test.rb +31 -30
- data/test/controllers/comfy/admin/cms/snippets_controller_test.rb +38 -37
- data/test/controllers/comfy/admin/cms/translations_controller_test.rb +21 -20
- data/test/controllers/comfy/cms/assets_controller_test.rb +14 -13
- data/test/controllers/comfy/cms/content_controller_test.rb +58 -57
- data/test/gemfiles/Gemfile.rails.5.2 +5 -4
- data/test/generators/cms_assets_generator_test.rb +6 -4
- data/test/generators/cms_controllers_generator_test.rb +7 -5
- data/test/generators/cms_generator_test.rb +12 -10
- data/test/generators/cms_models_generator_test.rb +7 -5
- data/test/generators/cms_views_generator_test.rb +6 -4
- data/test/generators/scaffold_generator_test.rb +18 -16
- data/test/helpers/cms_helper_test.rb +5 -2
- data/test/integration/access_control_test.rb +29 -20
- data/test/integration/i18n_test.rb +8 -7
- data/test/integration/js_variables_test.rb +2 -1
- data/test/integration/render_cms_test.rb +93 -88
- data/test/integration/routing_test.rb +4 -3
- data/test/integration/seeds_test.rb +21 -22
- data/test/integration/sites_test.rb +26 -25
- data/test/integration/view_hooks_test.rb +15 -14
- data/test/lib/configuration_test.rb +13 -15
- data/test/lib/content/block_test.rb +1 -1
- data/test/lib/content/params_parser_test.rb +11 -10
- data/test/lib/content/renderer_test.rb +16 -11
- data/test/lib/content/tag_test.rb +7 -3
- data/test/lib/content/tags/asset_test.rb +4 -3
- data/test/lib/content/tags/checkbox_test.rb +2 -1
- data/test/lib/content/tags/date_test.rb +2 -1
- data/test/lib/content/tags/datetime_test.rb +2 -1
- data/test/lib/content/tags/file_link_test.rb +3 -2
- data/test/lib/content/tags/file_test.rb +3 -2
- data/test/lib/content/tags/files_test.rb +4 -3
- data/test/lib/content/tags/fragment_test.rb +2 -1
- data/test/lib/content/tags/helper_test.rb +4 -3
- data/test/lib/content/tags/markdown_test.rb +2 -1
- data/test/lib/content/tags/number_test.rb +2 -1
- data/test/lib/content/tags/partial_test.rb +4 -3
- data/test/lib/content/tags/snippet_test.rb +2 -1
- data/test/lib/content/tags/template_test.rb +2 -1
- data/test/lib/content/tags/text_test.rb +2 -1
- data/test/lib/content/tags/textarea_test.rb +2 -1
- data/test/lib/content/tags/wysiwyg_test.rb +2 -1
- data/test/lib/revisions_test.rb +44 -42
- data/test/lib/seeds/files_test.rb +30 -29
- data/test/lib/seeds/layouts_test.rb +13 -12
- data/test/lib/seeds/pages_test.rb +32 -29
- data/test/lib/seeds/snippets_test.rb +21 -20
- data/test/lib/seeds_test.rb +9 -8
- data/test/models/categorization_test.rb +10 -9
- data/test/models/category_test.rb +1 -1
- data/test/models/file_test.rb +1 -1
- data/test/models/fragment_test.rb +11 -10
- data/test/models/layout_test.rb +71 -70
- data/test/models/page_test.rb +170 -159
- data/test/models/site_test.rb +17 -16
- data/test/models/snippet_test.rb +1 -0
- data/test/models/translation_test.rb +2 -1
- data/test/tasks/cms_seeds_test.rb +3 -2
- data/test/test_helper.rb +42 -40
- metadata +55 -51
- data/.rubocop_todo.yml +0 -974
- data/script/rails +0 -6
data/config/locales/zh-CN.yml
CHANGED
data/config/locales/zh-TW.yml
CHANGED
data/config.ru
CHANGED
@@ -1,11 +1,11 @@
|
|
1
1
|
module ComfortableMexicanSofa::AccessControl
|
2
2
|
module AdminAuthentication
|
3
|
+
|
3
4
|
# Set username and password in config/initializers/comfortable_mexican_sofa.rb
|
4
5
|
# Like this:
|
5
6
|
# ComfortableMexicanSofa::AccessControl::AdminAuthentication.username = 'myname'
|
6
7
|
# ComfortableMexicanSofa::AccessControl::AdminAuthentication.password = 'mypassword'
|
7
8
|
|
8
|
-
|
9
9
|
mattr_accessor :username,
|
10
10
|
:password
|
11
11
|
|
@@ -17,5 +17,6 @@ module ComfortableMexicanSofa::AccessControl
|
|
17
17
|
self.username == username && self.password == password
|
18
18
|
end
|
19
19
|
end
|
20
|
+
|
20
21
|
end
|
21
22
|
end
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
class ComfortableMexicanSofa::Configuration
|
4
2
|
|
5
3
|
# Don't like ComfortableMexicanSofa? Set it to whatever you like. :(
|
@@ -77,38 +75,38 @@ class ComfortableMexicanSofa::Configuration
|
|
77
75
|
|
78
76
|
# Configuration defaults
|
79
77
|
def initialize
|
80
|
-
@cms_title =
|
81
|
-
@base_controller =
|
82
|
-
@admin_auth =
|
83
|
-
@admin_authorization =
|
84
|
-
@public_auth =
|
85
|
-
@public_authorization =
|
78
|
+
@cms_title = "ComfortableMexicanSofa CMS Engine"
|
79
|
+
@base_controller = "ApplicationController"
|
80
|
+
@admin_auth = "ComfortableMexicanSofa::AccessControl::AdminAuthentication"
|
81
|
+
@admin_authorization = "ComfortableMexicanSofa::AccessControl::AdminAuthorization"
|
82
|
+
@public_auth = "ComfortableMexicanSofa::AccessControl::PublicAuthentication"
|
83
|
+
@public_authorization = "ComfortableMexicanSofa::AccessControl::PublicAuthorization"
|
86
84
|
@seed_data_path = nil
|
87
|
-
@admin_route_redirect =
|
85
|
+
@admin_route_redirect = ""
|
88
86
|
@enable_sitemap = true
|
89
87
|
@enable_seeds = false
|
90
|
-
@seeds_path = File.expand_path(
|
88
|
+
@seeds_path = File.expand_path("db/cms_seeds", Rails.root)
|
91
89
|
@revisions_limit = 25
|
92
90
|
@locales = {
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
91
|
+
"cs" => "Česky",
|
92
|
+
"da" => "Dansk",
|
93
|
+
"de" => "Deutsch",
|
94
|
+
"en" => "English",
|
95
|
+
"es" => "Español",
|
96
|
+
"fr" => "Français",
|
97
|
+
"it" => "Italiano",
|
98
|
+
"ja" => "日本語",
|
99
|
+
"nb" => "Norsk",
|
100
|
+
"nl" => "Nederlands",
|
101
|
+
"pl" => "Polski",
|
102
|
+
"pt-BR" => "Português Brasileiro",
|
103
|
+
"ru" => "Русский",
|
104
|
+
"sk" => "Slovensky",
|
105
|
+
"sv" => "Svenska",
|
106
|
+
"tr" => "Türkçe",
|
107
|
+
"uk" => "Українська",
|
108
|
+
"zh-CN" => "简体中文",
|
109
|
+
"zh-TW" => "正體中文"
|
112
110
|
}
|
113
111
|
@admin_locale = nil
|
114
112
|
@admin_cache_sweeper = nil
|
@@ -2,23 +2,22 @@ module ComfortableMexicanSofa::Content::ParamsParser
|
|
2
2
|
|
3
3
|
class Error < StandardError; end
|
4
4
|
|
5
|
-
SINGLE_STRING_LITERAL =
|
6
|
-
DOUBLE_STRING_LITERAL =
|
7
|
-
IDENTIFIER =
|
8
|
-
COLUMN =
|
9
|
-
COMMA =
|
5
|
+
SINGLE_STRING_LITERAL = %r{'[^']*'}
|
6
|
+
DOUBLE_STRING_LITERAL = %r{"[^"]*"}
|
7
|
+
IDENTIFIER = %r{[a-z0-9][\w\-/.]*}i
|
8
|
+
COLUMN = %r{:}
|
9
|
+
COMMA = %r{,}
|
10
10
|
|
11
11
|
def self.parse(text)
|
12
12
|
parameterize(slice(tokenize(text.to_s)))
|
13
13
|
end
|
14
14
|
|
15
15
|
def self.parameterize(token_groups)
|
16
|
-
params = [
|
16
|
+
params = []
|
17
17
|
token_groups.each do |tokens|
|
18
|
-
|
19
|
-
when tokens.count == 1
|
18
|
+
if tokens.count == 1
|
20
19
|
collect_param_for_string!(params, tokens[0])
|
21
|
-
|
20
|
+
elsif tokens.count == 3
|
22
21
|
collect_param_for_hash!(params, tokens)
|
23
22
|
else
|
24
23
|
raise Error, "Unexpected tokens found: #{tokens}"
|
@@ -36,7 +35,7 @@ module ComfortableMexicanSofa::Content::ParamsParser
|
|
36
35
|
def self.collect_param_for_hash!(params, tokens)
|
37
36
|
key, col, val = tokens
|
38
37
|
key_type, key_value = key
|
39
|
-
col_type,
|
38
|
+
col_type, = col
|
40
39
|
val_type, val_value = val
|
41
40
|
|
42
41
|
unless key_type == :string && col_type == :column && val_type == :string
|
@@ -50,10 +49,11 @@ module ComfortableMexicanSofa::Content::ParamsParser
|
|
50
49
|
|
51
50
|
# grouping tokens based on the comma and also removing comma tokens
|
52
51
|
def self.slice(tokens)
|
53
|
-
tokens.slice_after do |token|
|
52
|
+
slices = tokens.slice_after do |token|
|
54
53
|
token[0] == :comma
|
55
|
-
end
|
56
|
-
|
54
|
+
end
|
55
|
+
slices.map do |expression|
|
56
|
+
expression.reject { |t| t[0] == :comma }
|
57
57
|
end
|
58
58
|
end
|
59
59
|
|
@@ -62,19 +62,20 @@ module ComfortableMexicanSofa::Content::ParamsParser
|
|
62
62
|
tokens = []
|
63
63
|
ss = StringScanner.new(args_string)
|
64
64
|
until ss.eos?
|
65
|
-
ss.skip(
|
65
|
+
ss.skip(%r{\s*})
|
66
66
|
break if ss.eos?
|
67
|
-
token =
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
67
|
+
token =
|
68
|
+
if (t = ss.scan(SINGLE_STRING_LITERAL)) then [:string, t[1...t.size - 1]]
|
69
|
+
elsif (t = ss.scan(DOUBLE_STRING_LITERAL)) then [:string, t[1...t.size - 1]]
|
70
|
+
elsif (t = ss.scan(IDENTIFIER)) then [:string, t]
|
71
|
+
elsif (t = ss.scan(COLUMN)) then [:column, t]
|
72
|
+
elsif (t = ss.scan(COMMA)) then [:comma, t]
|
73
73
|
else
|
74
74
|
raise Error, "Unexpected char: #{ss.getch}"
|
75
|
-
|
75
|
+
end
|
76
76
|
tokens << token
|
77
77
|
end
|
78
78
|
tokens
|
79
79
|
end
|
80
|
+
|
80
81
|
end
|
@@ -18,7 +18,7 @@ class ComfortableMexicanSofa::Content::Renderer
|
|
18
18
|
MAX_DEPTH = 100
|
19
19
|
|
20
20
|
# tags are in this format: {{ cms:tag_class params }}
|
21
|
-
TAG_REGEX =
|
21
|
+
TAG_REGEX = %r{\{\{\s*?cms:(?<class>\w+)(?<params>.*?)\}\}}
|
22
22
|
|
23
23
|
class << self
|
24
24
|
|
@@ -29,6 +29,7 @@ class ComfortableMexicanSofa::Content::Renderer
|
|
29
29
|
def register_tag(name, klass)
|
30
30
|
tags[name.to_s] = klass
|
31
31
|
end
|
32
|
+
|
32
33
|
end
|
33
34
|
|
34
35
|
def initialize(context)
|
@@ -59,7 +60,7 @@ class ComfortableMexicanSofa::Content::Renderer
|
|
59
60
|
if allow_erb
|
60
61
|
string.to_s
|
61
62
|
else
|
62
|
-
string.to_s.gsub(
|
63
|
+
string.to_s.gsub("<%", "<%").gsub("%>", "%>")
|
63
64
|
end
|
64
65
|
end
|
65
66
|
|
@@ -67,14 +68,14 @@ class ComfortableMexicanSofa::Content::Renderer
|
|
67
68
|
def tokenize(string)
|
68
69
|
tokens = []
|
69
70
|
ss = StringScanner.new(string.to_s)
|
70
|
-
while string = ss.scan_until(TAG_REGEX)
|
71
|
-
text = string.sub(ss[0],
|
72
|
-
tokens << text
|
73
|
-
tokens << {tag_class: ss[:class], tag_params: ss[:params].strip}
|
71
|
+
while (string = ss.scan_until(TAG_REGEX))
|
72
|
+
text = string.sub(ss[0], "")
|
73
|
+
tokens << text unless text.empty?
|
74
|
+
tokens << { tag_class: ss[:class], tag_params: ss[:params].strip }
|
74
75
|
end
|
75
76
|
text = ss.rest
|
76
77
|
tokens << text if text.present?
|
77
|
-
|
78
|
+
tokens
|
78
79
|
end
|
79
80
|
|
80
81
|
# Constructing node tree for content. It's a list of strings and tags with
|
@@ -97,7 +98,7 @@ class ComfortableMexicanSofa::Content::Renderer
|
|
97
98
|
nodes.pop
|
98
99
|
|
99
100
|
else
|
100
|
-
unless klass = self.class.tags[tag_class]
|
101
|
+
unless (klass = self.class.tags[tag_class])
|
101
102
|
raise SyntaxError, "Unrecognized tag #{tag_class}: #{token}"
|
102
103
|
end
|
103
104
|
|
@@ -122,4 +123,5 @@ class ComfortableMexicanSofa::Content::Renderer
|
|
122
123
|
|
123
124
|
nodes.flatten
|
124
125
|
end
|
126
|
+
|
125
127
|
end
|
@@ -29,15 +29,15 @@ class ComfortableMexicanSofa::Content::Tag::Asset < ComfortableMexicanSofa::Cont
|
|
29
29
|
def content
|
30
30
|
return "" unless layout
|
31
31
|
|
32
|
-
base = ComfortableMexicanSofa.config.public_cms_path ||
|
32
|
+
base = ComfortableMexicanSofa.config.public_cms_path || ""
|
33
33
|
unless base.ends_with?("/")
|
34
|
-
base
|
34
|
+
base += "/"
|
35
35
|
end
|
36
36
|
|
37
37
|
case @type
|
38
38
|
when "css"
|
39
39
|
out = "#{base}cms-css/#{context.site.id}/#{@identifier}/#{layout.cache_buster}.css"
|
40
|
-
if @as ==
|
40
|
+
if @as == "tag"
|
41
41
|
out = "<link href='#{out}' media='screen' rel='stylesheet' type='text/css' />"
|
42
42
|
end
|
43
43
|
out
|
@@ -49,6 +49,7 @@ class ComfortableMexicanSofa::Content::Tag::Asset < ComfortableMexicanSofa::Cont
|
|
49
49
|
out
|
50
50
|
end
|
51
51
|
end
|
52
|
+
|
52
53
|
end
|
53
54
|
|
54
55
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -7,13 +7,14 @@ class ComfortableMexicanSofa::Content::Tag::Checkbox < ComfortableMexicanSofa::C
|
|
7
7
|
fragment.boolean
|
8
8
|
end
|
9
9
|
|
10
|
-
def form_field(object_name, view, index
|
10
|
+
def form_field(object_name, view, index)
|
11
11
|
name = "#{object_name}[fragments_attributes][#{index}][boolean]"
|
12
12
|
checkbox_hidden = view.hidden_field_tag(name, "0", id: nil)
|
13
|
-
checkbox_input = view.check_box_tag(name, "1",
|
13
|
+
checkbox_input = view.check_box_tag(name, "1", content.present?, id: nil)
|
14
14
|
|
15
15
|
yield [checkbox_hidden, checkbox_input].join.html_safe
|
16
16
|
end
|
17
|
+
|
17
18
|
end
|
18
19
|
|
19
20
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -7,14 +7,15 @@ class ComfortableMexicanSofa::Content::Tag::Date < ComfortableMexicanSofa::Conte
|
|
7
7
|
fragment.datetime
|
8
8
|
end
|
9
9
|
|
10
|
-
def form_field(object_name, view, index
|
10
|
+
def form_field(object_name, view, index)
|
11
11
|
name = "#{object_name}[fragments_attributes][#{index}][datetime]"
|
12
|
-
options = {id: nil, class: "form-control", data: {"cms-date" => true}}
|
13
|
-
value =
|
12
|
+
options = { id: nil, class: "form-control", data: { "cms-date" => true } }
|
13
|
+
value = content.present? ? content.to_s(:db) : ""
|
14
14
|
input = view.send(:text_field_tag, name, value, options)
|
15
15
|
|
16
16
|
yield input
|
17
17
|
end
|
18
|
+
|
18
19
|
end
|
19
20
|
|
20
21
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -7,14 +7,15 @@ class ComfortableMexicanSofa::Content::Tag::Datetime < ComfortableMexicanSofa::C
|
|
7
7
|
fragment.datetime
|
8
8
|
end
|
9
9
|
|
10
|
-
def form_field(object_name, view, index
|
10
|
+
def form_field(object_name, view, index)
|
11
11
|
name = "#{object_name}[fragments_attributes][#{index}][datetime]"
|
12
|
-
options = {id: nil, class: "form-control", data: {"cms-datetime" => true}}
|
13
|
-
value =
|
12
|
+
options = { id: nil, class: "form-control", data: { "cms-datetime" => true } }
|
13
|
+
value = content.present? ? content.to_s(:db) : ""
|
14
14
|
input = view.send(:text_field_tag, name, value, options)
|
15
15
|
|
16
16
|
yield input
|
17
17
|
end
|
18
|
+
|
18
19
|
end
|
19
20
|
|
20
21
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -36,20 +36,21 @@ class ComfortableMexicanSofa::Content::Tag::File < ComfortableMexicanSofa::Conte
|
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
39
|
-
def form_field(object_name, view, index
|
39
|
+
def form_field(object_name, view, index)
|
40
40
|
name = "#{object_name}[fragments_attributes][#{index}][files]"
|
41
|
-
input = view.send(:file_field_tag, name,
|
41
|
+
input = view.send(:file_field_tag, name, id: nil)
|
42
42
|
|
43
|
-
attachments_partial =
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
43
|
+
attachments_partial =
|
44
|
+
if fragment.attachments
|
45
|
+
view.render(
|
46
|
+
partial: "comfy/admin/cms/fragments/form_fragment_attachments",
|
47
|
+
locals: {
|
48
|
+
object_name: object_name,
|
49
|
+
index: index,
|
50
|
+
attachments: fragment.attachments
|
51
|
+
}
|
52
|
+
)
|
53
|
+
end
|
53
54
|
|
54
55
|
yield [input, attachments_partial].join.html_safe
|
55
56
|
end
|
@@ -67,9 +68,10 @@ protected
|
|
67
68
|
def url_for(attachment)
|
68
69
|
ApplicationController.render(
|
69
70
|
inline: "<%= url_for(@attachment) %>",
|
70
|
-
assigns: {attachment: attachment}
|
71
|
+
assigns: { attachment: attachment }
|
71
72
|
)
|
72
73
|
end
|
74
|
+
|
73
75
|
end
|
74
76
|
|
75
77
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -10,7 +10,7 @@
|
|
10
10
|
#
|
11
11
|
class ComfortableMexicanSofa::Content::Tag::FileLink < ComfortableMexicanSofa::Content::Tag
|
12
12
|
|
13
|
-
attr_reader :identifier, :as, :
|
13
|
+
attr_reader :identifier, :as, :variant_attrs
|
14
14
|
|
15
15
|
def initialize(context, params_string)
|
16
16
|
super
|
@@ -26,7 +26,11 @@ class ComfortableMexicanSofa::Content::Tag::FileLink < ComfortableMexicanSofa::C
|
|
26
26
|
end
|
27
27
|
|
28
28
|
def file
|
29
|
-
@file ||= context.site.files.detect{|f| f.id ==
|
29
|
+
@file ||= context.site.files.detect { |f| f.id == identifier.to_i }
|
30
|
+
end
|
31
|
+
|
32
|
+
def label
|
33
|
+
@file.label.present? ? @file.label : @file.attachment.filename
|
30
34
|
end
|
31
35
|
|
32
36
|
def content
|
@@ -49,16 +53,13 @@ class ComfortableMexicanSofa::Content::Tag::FileLink < ComfortableMexicanSofa::C
|
|
49
53
|
|
50
54
|
protected
|
51
55
|
|
52
|
-
def label
|
53
|
-
@file.label.present?? @file.label : @file.attachment.filename
|
54
|
-
end
|
55
|
-
|
56
56
|
def url_for(attachment)
|
57
57
|
ApplicationController.render(
|
58
58
|
inline: "<%= url_for(@attachment) %>",
|
59
|
-
assigns: {attachment: attachment}
|
59
|
+
assigns: { attachment: attachment }
|
60
60
|
)
|
61
61
|
end
|
62
|
+
|
62
63
|
end
|
63
64
|
|
64
65
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -15,23 +15,25 @@ class ComfortableMexicanSofa::Content::Tag::Files < ComfortableMexicanSofa::Cont
|
|
15
15
|
end.join(" ")
|
16
16
|
end
|
17
17
|
|
18
|
-
def form_field(object_name, view, index
|
18
|
+
def form_field(object_name, view, index)
|
19
19
|
name = "#{object_name}[fragments_attributes][#{index}][files][]"
|
20
|
-
input = view.send(:file_field_tag, name,
|
21
|
-
|
22
|
-
attachments_partial =
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
20
|
+
input = view.send(:file_field_tag, name, id: nil, multiple: true)
|
21
|
+
|
22
|
+
attachments_partial =
|
23
|
+
if fragment.attachments
|
24
|
+
view.render(
|
25
|
+
partial: "comfy/admin/cms/fragments/form_fragment_attachments",
|
26
|
+
locals: {
|
27
|
+
object_name: object_name,
|
28
|
+
index: index,
|
29
|
+
attachments: fragment.attachments
|
30
|
+
}
|
31
|
+
)
|
32
|
+
end
|
32
33
|
|
33
34
|
yield [input, attachments_partial].join.html_safe
|
34
35
|
end
|
36
|
+
|
35
37
|
end
|
36
38
|
|
37
39
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -21,13 +21,13 @@ class ComfortableMexicanSofa::Content::Tag::Fragment < ComfortableMexicanSofa::C
|
|
21
21
|
end
|
22
22
|
|
23
23
|
@namespace = @options["namespace"] || "default"
|
24
|
-
@renderable = @options["render"].to_s.downcase
|
24
|
+
@renderable = @options["render"].to_s.downcase != "false"
|
25
25
|
end
|
26
26
|
|
27
27
|
# Grabs existing fragment record or spins up a new instance if there's none
|
28
28
|
def fragment
|
29
|
-
|
30
|
-
|
29
|
+
context.fragments.detect { |f| f.identifier == identifier } ||
|
30
|
+
context.fragments.build(identifier: identifier)
|
31
31
|
end
|
32
32
|
|
33
33
|
def content
|
@@ -37,10 +37,10 @@ class ComfortableMexicanSofa::Content::Tag::Fragment < ComfortableMexicanSofa::C
|
|
37
37
|
# If `render: false` was passed in we won't render anything. Assuming that
|
38
38
|
# that fragment content will be rendered manually
|
39
39
|
def render
|
40
|
-
|
40
|
+
renderable ? content : ""
|
41
41
|
end
|
42
42
|
|
43
|
-
# Tag renders its own form inputs via `form_field(template, index
|
43
|
+
# Tag renders its own form inputs via `form_field(template, index)`
|
44
44
|
# For example:
|
45
45
|
# class MyTag < ComfortableMexicanSofa::Content::Tag::Fragment
|
46
46
|
# def form_field(view, index, &block)
|
@@ -48,7 +48,8 @@ class ComfortableMexicanSofa::Content::Tag::Fragment < ComfortableMexicanSofa::C
|
|
48
48
|
# yield view.text_area "input_name", "value"
|
49
49
|
# end
|
50
50
|
# end
|
51
|
-
def form_field
|
51
|
+
def form_field
|
52
52
|
raise "Form field rendering not implemented for this Tag"
|
53
53
|
end
|
54
|
+
|
54
55
|
end
|
@@ -7,7 +7,7 @@
|
|
7
7
|
#
|
8
8
|
class ComfortableMexicanSofa::Content::Tag::Helper < ComfortableMexicanSofa::Content::Tag
|
9
9
|
|
10
|
-
BLACKLIST = %w
|
10
|
+
BLACKLIST = %w[eval class_eval instance_eval render].freeze
|
11
11
|
|
12
12
|
attr_reader :method_name
|
13
13
|
|
@@ -45,6 +45,7 @@ class ComfortableMexicanSofa::Content::Tag::Helper < ComfortableMexicanSofa::Con
|
|
45
45
|
content unless BLACKLIST.member?(method_name)
|
46
46
|
end
|
47
47
|
end
|
48
|
+
|
48
49
|
end
|
49
50
|
|
50
51
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -4,16 +4,17 @@
|
|
4
4
|
class ComfortableMexicanSofa::Content::Tag::Markdown < ComfortableMexicanSofa::Content::Tag::Fragment
|
5
5
|
|
6
6
|
def render
|
7
|
-
|
7
|
+
renderable ? Kramdown::Document.new(content.to_s).to_html : ""
|
8
8
|
end
|
9
9
|
|
10
|
-
def form_field(object_name, view, index
|
10
|
+
def form_field(object_name, view, index)
|
11
11
|
name = "#{object_name}[fragments_attributes][#{index}][content]"
|
12
|
-
options = {id: nil, data: {"cms-cm-mode" => "text/x-markdown"}}
|
13
|
-
input = view.send(:text_area_tag, name,
|
12
|
+
options = { id: nil, data: { "cms-cm-mode" => "text/x-markdown" } }
|
13
|
+
input = view.send(:text_area_tag, name, content, options)
|
14
14
|
|
15
15
|
yield input
|
16
16
|
end
|
17
|
+
|
17
18
|
end
|
18
19
|
|
19
20
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|
@@ -3,13 +3,14 @@
|
|
3
3
|
#
|
4
4
|
class ComfortableMexicanSofa::Content::Tag::Number < ComfortableMexicanSofa::Content::Tag::Fragment
|
5
5
|
|
6
|
-
def form_field(object_name, view, index
|
6
|
+
def form_field(object_name, view, index)
|
7
7
|
name = "#{object_name}[fragments_attributes][#{index}][content]"
|
8
|
-
options = {id: nil, class: "form-control"}
|
9
|
-
input = view.send(:number_field_tag, name,
|
8
|
+
options = { id: nil, class: "form-control" }
|
9
|
+
input = view.send(:number_field_tag, name, content, options)
|
10
10
|
|
11
11
|
yield input
|
12
12
|
end
|
13
|
+
|
13
14
|
end
|
14
15
|
|
15
16
|
ComfortableMexicanSofa::Content::Renderer.register_tag(
|