storytime 2.1.6 → 2.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.github/workflows/test.yml +54 -0
- data/.gitignore +2 -1
- data/.ruby-version +1 -1
- data/.tool-versions +1 -0
- data/Gemfile +5 -3
- data/Gemfile.lock +414 -425
- data/Guardfile +1 -1
- data/app/assets/fonts/storytime-icons.eot +0 -0
- data/app/assets/fonts/storytime-icons.svg +23 -0
- data/app/assets/fonts/storytime-icons.ttf +0 -0
- data/app/assets/fonts/storytime-icons.woff +0 -0
- data/app/assets/javascripts/storytime/application.js +1 -8
- data/app/assets/javascripts/storytime/off_canvas.coffee +16 -0
- data/app/assets/javascripts/storytime/wysiwyg.js.coffee +9 -7
- data/app/assets/stylesheets/storytime/_buttons.scss +33 -0
- data/app/assets/stylesheets/storytime/_list-group.scss +1 -1
- data/app/assets/stylesheets/storytime/application.scss +14 -2
- data/app/assets/stylesheets/storytime/icons.scss +5 -5
- data/app/assets/stylesheets/storytime/leather/_buttons.scss +31 -0
- data/app/assets/stylesheets/storytime/leather/_devise.scss +72 -0
- data/app/assets/stylesheets/storytime/leather/_grid.scss +19 -0
- data/app/assets/stylesheets/storytime/leather/_list_groups.scss +33 -0
- data/app/assets/stylesheets/storytime/leather/_nav_menus.scss +125 -0
- data/app/assets/stylesheets/storytime/leather/_navbar_transparent.scss +23 -0
- data/app/assets/stylesheets/storytime/leather/_off_canvas.scss +109 -0
- data/app/assets/stylesheets/storytime/leather/_scroll_panels.scss +85 -0
- data/app/assets/stylesheets/storytime/leather/_toggle_columns.scss +23 -0
- data/app/assets/stylesheets/storytime/leather/_typography.scss +12 -0
- data/app/assets/stylesheets/storytime/leather/_utilities.scss +54 -0
- data/app/assets/stylesheets/storytime/leather/_variables.scss +8 -0
- data/app/assets/stylesheets/storytime/posts.scss +9 -1
- data/app/controllers/storytime/application_controller.rb +1 -1
- data/app/controllers/storytime/dashboard/blog_posts_controller.rb +5 -3
- data/app/controllers/storytime/dashboard/blogs_controller.rb +1 -1
- data/app/controllers/storytime/dashboard/media_controller.rb +4 -4
- data/app/controllers/storytime/dashboard/memberships_controller.rb +1 -1
- data/app/controllers/storytime/dashboard/pages_controller.rb +26 -6
- data/app/controllers/storytime/dashboard/posts_controller.rb +30 -5
- data/app/controllers/storytime/dashboard/subscriptions_controller.rb +1 -1
- data/app/controllers/storytime/pages_controller.rb +31 -1
- data/app/controllers/storytime/posts_controller.rb +1 -1
- data/app/controllers/storytime/subscriptions_controller.rb +5 -1
- data/app/helpers/storytime/application_helper.rb +0 -4
- data/app/models/concerns/storytime/post_featured_images.rb +2 -2
- data/app/models/concerns/storytime/post_partial_inheritance.rb +2 -2
- data/app/models/storytime/autosave.rb +1 -1
- data/app/models/storytime/comment.rb +1 -1
- data/app/models/storytime/media.rb +1 -1
- data/app/models/storytime/membership.rb +2 -2
- data/app/models/storytime/post.rb +7 -3
- data/app/models/storytime/site.rb +4 -6
- data/app/models/storytime/snippet.rb +12 -1
- data/app/models/storytime/subscription.rb +2 -2
- data/app/models/storytime/version.rb +1 -1
- data/app/policies/storytime/post_policy.rb +1 -1
- data/app/views/storytime/dashboard/_navigation.html.erb +0 -9
- data/app/views/storytime/dashboard/blog_posts/_form.html.erb +5 -1
- data/app/views/storytime/dashboard/blogs/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/blogs/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/blogs/new.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/media/_gallery.html.erb +1 -1
- data/app/views/storytime/dashboard/media/_modal.html.erb +2 -2
- data/app/views/storytime/dashboard/media/show.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/_edit.html.erb +1 -1
- data/app/views/storytime/dashboard/memberships/_index.html.erb +3 -3
- data/app/views/storytime/dashboard/memberships/_new.html.erb +1 -1
- data/app/views/storytime/dashboard/memberships/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/new.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/memberships/save.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/pages/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/posts/_directory.html.erb +18 -0
- data/app/views/storytime/dashboard/posts/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/posts/_list.html.erb +2 -26
- data/app/views/storytime/dashboard/posts/_new_button.html.erb +1 -1
- data/app/views/storytime/dashboard/posts/_post.html.erb +28 -0
- data/app/views/storytime/dashboard/posts/_sorts.html.erb +21 -0
- data/app/views/storytime/dashboard/posts/index.html.erb +5 -3
- data/app/views/storytime/dashboard/roles/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/roles/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/sites/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/sites/site.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/snippets/_index.html.erb +1 -1
- data/app/views/storytime/dashboard/snippets/edit.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/snippets/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/snippets/new.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/subscriptions/_form.html.erb +1 -1
- data/app/views/storytime/dashboard/subscriptions/_index.html.erb +2 -2
- data/app/views/storytime/dashboard/subscriptions/form.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/subscriptions/index.json.jbuilder +1 -1
- data/app/views/storytime/dashboard/versions/_versions_info.html.erb +1 -1
- data/app/views/storytime/posts/show.html.erb +6 -0
- data/app/views/storytime/sites/_google_analytics_code.html.erb +5 -8
- data/config/initializers/assets.rb +2 -1
- data/config/initializers/friendly_id.rb +1 -1
- data/config/initializers/url_for_patch.rb +19 -8
- data/config/locales/devise.zh-CN.yml +59 -0
- data/config/locales/kaminari.zh-CN.yml +17 -0
- data/config/locales/simple_form.zh-CN.yml +26 -0
- data/config/locales/zh-CN.yml +141 -0
- data/config/routes.rb +2 -4
- data/db/migrate/20140501174341_create_storytime_posts.rb +1 -1
- data/db/migrate/20140509191309_create_friendly_id_slugs.rb +1 -1
- data/db/migrate/20140511200849_create_storytime_media.rb +1 -1
- data/db/migrate/20140513161233_create_storytime_sites.rb +1 -1
- data/db/migrate/20140514200234_create_storytime_tags.rb +1 -1
- data/db/migrate/20140514200304_create_storytime_taggings.rb +1 -1
- data/db/migrate/20140516141252_create_storytime_versions.rb +1 -1
- data/db/migrate/20140521190606_create_storytime_roles.rb +1 -1
- data/db/migrate/20140521191048_add_storytime_role_id_to_users.rb +1 -1
- data/db/migrate/20140521191728_create_storytime_permissions.rb +1 -1
- data/db/migrate/20140521191744_create_storytime_actions.rb +1 -1
- data/db/migrate/20140813014447_create_storytime_comments.rb +1 -1
- data/db/migrate/20140813130534_add_storytime_name_to_users.rb +1 -1
- data/db/migrate/20140916183056_create_storytime_autosaves.rb +1 -1
- data/db/migrate/20141020213343_add_secondary_media_id_to_storytime_post.rb +1 -1
- data/db/migrate/20141021073356_create_storytime_snippets.rb +1 -1
- data/db/migrate/20141111164439_create_storytime_subscriptions.rb +1 -1
- data/db/migrate/20150122200805_add_title_and_content_index_to_storytime_post.rb +1 -1
- data/db/migrate/20150128185746_seed_new_actions_and_permissions.rb +1 -1
- data/db/migrate/20150129215308_add_site_id_to_storytime_subscription.rb +1 -1
- data/db/migrate/20150206201847_add_site_id_to_storytime_post.rb +1 -1
- data/db/migrate/20150206201919_add_site_id_to_storytime_snippet.rb +1 -1
- data/db/migrate/20150206201931_add_site_id_to_storytime_tag.rb +1 -1
- data/db/migrate/20150206205256_add_notification_fields_to_storytime_post.rb +1 -1
- data/db/migrate/20150216211257_add_subdomain_to_storytime_sites.rb +1 -1
- data/db/migrate/20150216225045_add_site_to_storytime_media.rb +1 -1
- data/db/migrate/20150219210528_remove_root_page_content_from_storytime_sites.rb +1 -1
- data/db/migrate/20150220184902_add_blog_id_to_posts.rb +1 -1
- data/db/migrate/20150224192138_add_homepage_path_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224193151_add_subscription_email_from_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224193551_add_layout_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224194559_add_disqus_forum_shortname_to_storytime_sites.rb +1 -1
- data/db/migrate/20150224212453_remove_homepage_path_from_storytime_sites.rb +1 -1
- data/db/migrate/20150225143516_add_site_id_to_storytime_autosaves.rb +1 -1
- data/db/migrate/20150225143826_add_site_id_to_storytime_comments.rb +1 -1
- data/db/migrate/20150225145119_add_site_id_to_storytime_versions.rb +1 -1
- data/db/migrate/20150225145316_add_site_id_to_storytime_taggings.rb +1 -1
- data/db/migrate/20150225145608_update_storytime_site_id_columns.rb +1 -1
- data/db/migrate/20150225164232_add_site_id_to_storytime_permissions.rb +1 -1
- data/db/migrate/20150225212917_create_storytime_memberships.rb +1 -1
- data/db/migrate/20150225213535_create_memberships_for_storytime_users.rb +1 -1
- data/db/migrate/20150226201739_add_custom_domain_to_storytime_sites.rb +1 -1
- data/db/migrate/20150302171500_add_site_id_to_storytime_media.rb +1 -1
- data/db/migrate/20150302171722_set_site_layout.rb +1 -1
- data/db/migrate/20150302185138_remove_storytime_role_id_from_users.rb +1 -1
- data/db/migrate/20150302192525_transfer_posts_to_blogs.rb +1 -1
- data/db/migrate/20150302192759_seed_permissions.rb +1 -1
- data/db/migrate/20150331162329_add_discourse_name_to_storytime_sites.rb +1 -1
- data/db/migrate/20150402161427_remove_subdomain_from_storytime_site.rb +1 -1
- data/db/migrate/20150520181115_create_storytime_navigations.rb +1 -1
- data/db/migrate/20150520185227_create_storytime_links.rb +1 -1
- data/db/migrate/20150520190700_add_position_to_storytime_links.rb +1 -1
- data/db/migrate/20150529192058_add_url_to_storytime_links.rb +1 -1
- data/db/migrate/20260408001637_add_canonical_url_to_storytime_posts.rb +5 -0
- data/db/migrate/20260701000000_sanitize_existing_storytime_snippets.rb +22 -0
- data/lib/storytime/cli/install.rb +2 -20
- data/lib/storytime/concerns/action_controller_extension.rb +36 -0
- data/lib/storytime/constraints/page_constraint.rb +8 -2
- data/lib/storytime/engine.rb +3 -5
- data/lib/storytime/migrators/v1.rb +3 -3
- data/lib/storytime/post_notifier.rb +1 -1
- data/lib/storytime/post_url_handler.rb +18 -5
- data/lib/storytime/storytime_helpers.rb +4 -0
- data/lib/storytime/version.rb +1 -1
- data/lib/storytime.rb +1 -1
- data/spec/controllers/dashboard_controller_spec.rb +5 -6
- data/spec/dummy/app/assets/config/manifest.js +3 -0
- data/spec/dummy/config/database.yml +3 -3
- data/spec/dummy/config/initializers/devise.rb +1 -1
- data/spec/dummy/db/migrate/20140530185250_devise_create_users.rb +1 -1
- data/spec/dummy/db/migrate/20150127172846_create_widgets.rb +1 -1
- data/spec/dummy/db/migrate/20150206203824_add_video_url_to_storytime_posts.rb +1 -1
- data/spec/dummy/db/schema.rb +226 -244
- data/spec/factories/action_factories.rb +3 -3
- data/spec/factories/comment_factories.rb +1 -1
- data/spec/factories/media_factories.rb +1 -1
- data/spec/factories/membership_factories.rb +1 -1
- data/spec/factories/navigation_factories.rb +3 -3
- data/spec/factories/permission_factories.rb +1 -1
- data/spec/factories/post_factories.rb +2 -2
- data/spec/factories/role_factories.rb +11 -11
- data/spec/factories/site_factories.rb +3 -3
- data/spec/factories/snippet_factories.rb +1 -1
- data/spec/factories/subscription_factories.rb +1 -1
- data/spec/factories/user_factories.rb +2 -2
- data/spec/factories/widget_factories.rb +2 -2
- data/spec/features/blogs_spec.rb +7 -7
- data/spec/features/comments_spec.rb +11 -11
- data/spec/features/dashboard/media_spec.rb +17 -11
- data/spec/features/dashboard/memberships_spec.rb +13 -19
- data/spec/features/dashboard/navigations_spec.rb +1 -1
- data/spec/features/dashboard/pages_spec.rb +8 -8
- data/spec/features/dashboard/posts_spec.rb +19 -19
- data/spec/features/dashboard/sites_spec.rb +1 -1
- data/spec/features/dashboard/snippets_spec.rb +3 -3
- data/spec/features/dashboard/subscription_spec.rb +2 -2
- data/spec/features/pages_spec.rb +3 -3
- data/spec/features/posts_spec.rb +2 -2
- data/spec/features/subscription_spec.rb +3 -3
- data/spec/importers/wordpress_spec.rb +1 -1
- data/spec/lib/mysql_fulltext_search_adapter_spec.rb +3 -3
- data/spec/lib/mysql_search_adapter_spec.rb +3 -3
- data/spec/lib/postgres_search_adapter_spec.rb +3 -3
- data/spec/lib/sqlite3_search_adapter_spec.rb +3 -3
- data/spec/lib/storytime/constraints/page_constraint_spec.rb +40 -0
- data/spec/lib/storytime_helpers_spec.rb +2 -2
- data/spec/models/navigation_spec.rb +3 -3
- data/spec/models/post_spec.rb +29 -29
- data/spec/models/snippet_spec.rb +31 -0
- data/spec/models/subscription_spec.rb +4 -4
- data/spec/models/tagging_spec.rb +14 -14
- data/spec/models/version_spec.rb +29 -29
- data/spec/policies/comment_policy_spec.rb +11 -11
- data/spec/policies/post_policy_spec.rb +13 -13
- data/spec/requests/pages_spec.rb +37 -0
- data/spec/requests/routings_spec.rb +14 -15
- data/spec/spec_helper.rb +8 -15
- data/spec/support/domains.rb +2 -2
- data/spec/support/feature_macros.rb +5 -5
- data/spec/support/pundit_matcher.rb +3 -3
- data/storytime.gemspec +15 -20
- data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +195 -0
- data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +169 -0
- data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +182 -0
- data/vendor/assets/javascripts/codemirror.js +8922 -0
- data/vendor/assets/javascripts/medium-editor.min.js +3 -3
- data/vendor/assets/stylesheets/codemirror/themes/solarized.css +169 -0
- data/vendor/assets/stylesheets/codemirror.css +347 -0
- metadata +94 -134
- data/config/initializers/storytime_admin.rb +0 -5
- data/config/spring.rb +0 -1
- data/spec/dummy/app/controllers/storytime_admin/widgets_controller.rb +0 -5
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/test.sqlite3 +0 -0
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
zh-CN:
|
|
2
|
+
common:
|
|
3
|
+
are_you_sure_you_want_to_delete: "你确定要删除 %{resource_name}?"
|
|
4
|
+
|
|
5
|
+
flash:
|
|
6
|
+
admin:
|
|
7
|
+
create:
|
|
8
|
+
success: "成功创建 %{resource_name} 。"
|
|
9
|
+
update:
|
|
10
|
+
success: "成功更新 %{resource_name} 。"
|
|
11
|
+
blogs:
|
|
12
|
+
destroy:
|
|
13
|
+
success: "成功删除博客。"
|
|
14
|
+
comments:
|
|
15
|
+
create:
|
|
16
|
+
success: "成功创建留言。"
|
|
17
|
+
update:
|
|
18
|
+
success: "成功更新留言。"
|
|
19
|
+
posts:
|
|
20
|
+
create:
|
|
21
|
+
success: "成功创建文章。"
|
|
22
|
+
update:
|
|
23
|
+
success: "成功更新文章。"
|
|
24
|
+
destroy:
|
|
25
|
+
success: "成功删除文章。"
|
|
26
|
+
sites:
|
|
27
|
+
create:
|
|
28
|
+
success: "成功创建站点。"
|
|
29
|
+
update:
|
|
30
|
+
success: "成功更新站点。"
|
|
31
|
+
destroy:
|
|
32
|
+
success: "成功删除站点。"
|
|
33
|
+
snippets:
|
|
34
|
+
create:
|
|
35
|
+
success: "成功创建文字段落。"
|
|
36
|
+
update:
|
|
37
|
+
success: "成功更新文字段落。"
|
|
38
|
+
destroy:
|
|
39
|
+
success: "成功删除文字段落。"
|
|
40
|
+
subscriptions:
|
|
41
|
+
create:
|
|
42
|
+
success: "已成功创建订阅。"
|
|
43
|
+
fail: "不能创建订阅。"
|
|
44
|
+
update:
|
|
45
|
+
success: "成功更新订阅。"
|
|
46
|
+
destroy:
|
|
47
|
+
success: >
|
|
48
|
+
你已经被成功的从订阅列表中移除。你不会再收到我们的消息。
|
|
49
|
+
fail: "无法取消你的邮件订阅。"
|
|
50
|
+
users:
|
|
51
|
+
create:
|
|
52
|
+
success: "成功创建用户。"
|
|
53
|
+
update:
|
|
54
|
+
success: "成功更新用户。"
|
|
55
|
+
roles:
|
|
56
|
+
update:
|
|
57
|
+
success: "成功更新权限。"
|
|
58
|
+
navigations:
|
|
59
|
+
destroy:
|
|
60
|
+
success: "成功删除导航列表。"
|
|
61
|
+
|
|
62
|
+
simple_form:
|
|
63
|
+
labels:
|
|
64
|
+
site:
|
|
65
|
+
post_slug_style: "文章地址类型"
|
|
66
|
+
ga_tracking_id: "Google Analytics 追踪 ID"
|
|
67
|
+
comment:
|
|
68
|
+
content: "内容留言"
|
|
69
|
+
user:
|
|
70
|
+
storytime_name: "名字"
|
|
71
|
+
|
|
72
|
+
footer:
|
|
73
|
+
attribute: '由 <a href="http://www.github.com/FlyoverWorks/storytime" target="_blank">Storytime</a>支持。'
|
|
74
|
+
|
|
75
|
+
dashboard:
|
|
76
|
+
admin:
|
|
77
|
+
unconfigured_model: "你在试图访问一个包含未在Storytime中配置模型的管理员页面。"
|
|
78
|
+
sites:
|
|
79
|
+
new: "设置你的站点"
|
|
80
|
+
root_post_id_label: "首页"
|
|
81
|
+
root_post_id_hint: "选择一个页面或博客在Storytime的位置显示。留空来使用应用程序试图。"
|
|
82
|
+
subscription_email_from_label: "订阅邮件发件人的电子邮件"
|
|
83
|
+
edit: "站点设置"
|
|
84
|
+
basic_info: "基本信息"
|
|
85
|
+
permissions: "权限"
|
|
86
|
+
save_permissions: "保存"
|
|
87
|
+
save_button: "保存"
|
|
88
|
+
layout_hint: "留空使用Storytime默认站点布局"
|
|
89
|
+
domain_hint: "输入你的站点域名 (例如 www.example.com)"
|
|
90
|
+
users:
|
|
91
|
+
users_header: "用户"
|
|
92
|
+
create_new_user: "新建"
|
|
93
|
+
edit_user_button: "编辑"
|
|
94
|
+
edit_user_header: "编辑用户"
|
|
95
|
+
email: "电子邮件"
|
|
96
|
+
name: "名字"
|
|
97
|
+
role: "角色"
|
|
98
|
+
actions: "操作"
|
|
99
|
+
media:
|
|
100
|
+
media_header: "媒体"
|
|
101
|
+
select_media: "选择媒体"
|
|
102
|
+
select_media_by_url: "按照网址:"
|
|
103
|
+
select_media_from_file: "选择"
|
|
104
|
+
posts:
|
|
105
|
+
autosaves:
|
|
106
|
+
available: "有一个自动保存的 %{resource} 比下面的版本要新。"
|
|
107
|
+
view_autosave: "查看自动保存"
|
|
108
|
+
select_or_create: "选择一个资源 %{resource} 进行编辑"
|
|
109
|
+
create_post: "新建一个"
|
|
110
|
+
additional_fields: "附加字段"
|
|
111
|
+
advanced_settings: "高级设置"
|
|
112
|
+
featured_images: "特色图片"
|
|
113
|
+
remove_image: "删除图片"
|
|
114
|
+
new:
|
|
115
|
+
header: "新 %{resource}"
|
|
116
|
+
navigations:
|
|
117
|
+
create:
|
|
118
|
+
success: "你的导航列表成功创建。"
|
|
119
|
+
update:
|
|
120
|
+
success: "你的导航列表成功更新。"
|
|
121
|
+
|
|
122
|
+
layout:
|
|
123
|
+
title: "Storytime"
|
|
124
|
+
subscribe_to: "订阅 %{site_name}"
|
|
125
|
+
subscribe_modal_msg: "订阅我们的邮件列表收到关于 %{site_name} 的最新消息!"
|
|
126
|
+
|
|
127
|
+
pagination:
|
|
128
|
+
first: "<i class='fa fa-caret-left'></i><i class='fa fa-caret-left'></i>"
|
|
129
|
+
previous: "<i class='fa fa-caret-left'></i>"
|
|
130
|
+
next: "<i class='fa fa-caret-right'></i>"
|
|
131
|
+
last: "<i class='fa fa-caret-right'></i><i class='fa fa-caret-right'></i>"
|
|
132
|
+
|
|
133
|
+
storytime:
|
|
134
|
+
dashboard:
|
|
135
|
+
navigations:
|
|
136
|
+
index:
|
|
137
|
+
header: "导航列表"
|
|
138
|
+
new:
|
|
139
|
+
header: "新建导航列表"
|
|
140
|
+
edit:
|
|
141
|
+
header: "编辑导航列表"
|
data/config/routes.rb
CHANGED
|
@@ -49,18 +49,16 @@ Storytime::Engine.routes.draw do
|
|
|
49
49
|
end
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
mount StorytimeAdmin::Engine => Storytime.dashboard_namespace_path
|
|
53
|
-
|
|
54
52
|
get "/", to: "blog_homepage#show", constraints: Storytime::Constraints::BlogHomepageConstraint.new
|
|
55
53
|
get "/", to: "homepage#show", constraints: Storytime::Constraints::PageHomepageConstraint.new
|
|
56
54
|
|
|
57
55
|
resources :blogs, only: :show, path: "/", constraints: Storytime::Constraints::BlogConstraint.new
|
|
58
|
-
get '/*id', to: 'pages#show', constraints: Storytime::Constraints::PageConstraint.new
|
|
56
|
+
get '/*id', to: 'pages#show', as: :page, constraints: Storytime::Constraints::PageConstraint.new
|
|
59
57
|
resources :posts, only: [], concerns: :commentable
|
|
60
58
|
|
|
61
59
|
Storytime.post_types.each do |post_type|
|
|
62
60
|
constraints ->(request){ request.params[:component_1] != "assets" } do
|
|
63
|
-
resources post_type.split("::").last.tableize, path: "(/:component_1(/:component_2(/:component_3)))/", only: :show, controller: "posts"
|
|
61
|
+
resources post_type.split("::").last.tableize.to_sym, path: "(/:component_1(/:component_2(/:component_3)))/", only: :show, controller: "posts"
|
|
64
62
|
end
|
|
65
63
|
end
|
|
66
64
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class AddStorytimeRoleIdToUsers < ActiveRecord::Migration
|
|
1
|
+
class AddStorytimeRoleIdToUsers < ActiveRecord::Migration[4.2]
|
|
2
2
|
def change
|
|
3
3
|
add_column Storytime.user_class.table_name.to_sym, :storytime_role_id, :integer
|
|
4
4
|
add_index Storytime.user_class.table_name.to_sym, :storytime_role_id
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class AddTitleAndContentIndexToStorytimePost < ActiveRecord::Migration
|
|
1
|
+
class AddTitleAndContentIndexToStorytimePost < ActiveRecord::Migration[4.2]
|
|
2
2
|
def up
|
|
3
3
|
if Storytime.search_adapter == Storytime::PostgresSearchAdapter
|
|
4
4
|
execute "CREATE INDEX posts_title_contentx ON storytime_posts USING gin(to_tsvector('english', coalesce(title, '') || ' ' || coalesce(content, '')));"
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
class AddNotificationFieldsToStorytimePost < ActiveRecord::Migration
|
|
1
|
+
class AddNotificationFieldsToStorytimePost < ActiveRecord::Migration[4.2]
|
|
2
2
|
def change
|
|
3
3
|
add_column :storytime_posts, :notifications_enabled, :boolean, default: false
|
|
4
4
|
add_column :storytime_posts, :notifications_sent_at, :datetime
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
class SanitizeExistingStorytimeSnippets < ActiveRecord::Migration[4.2]
|
|
2
|
+
# Snippet content was previously stored unsanitized and rendered with `raw`,
|
|
3
|
+
# allowing stored XSS. Re-run the sanitizer over every existing snippet so
|
|
4
|
+
# rows created before the before_save callback are scrubbed too.
|
|
5
|
+
def up
|
|
6
|
+
return if Storytime.post_sanitizer.blank?
|
|
7
|
+
|
|
8
|
+
Storytime::Snippet.reset_column_information
|
|
9
|
+
Storytime::Snippet.find_each do |snippet|
|
|
10
|
+
next if snippet.content.blank?
|
|
11
|
+
|
|
12
|
+
cleaned = Storytime.post_sanitizer.call(snippet.content)
|
|
13
|
+
next if cleaned == snippet.content
|
|
14
|
+
|
|
15
|
+
snippet.update_columns(content: cleaned)
|
|
16
|
+
end
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def down
|
|
20
|
+
# Sanitization is not reversible; stripped markup cannot be restored.
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -27,8 +27,6 @@ module Storytime
|
|
|
27
27
|
end
|
|
28
28
|
|
|
29
29
|
def automated
|
|
30
|
-
`bin/spring stop`
|
|
31
|
-
|
|
32
30
|
defaults = storytime_defaults
|
|
33
31
|
self.destination_root = File.expand_path("./")
|
|
34
32
|
|
|
@@ -57,8 +55,6 @@ module Storytime
|
|
|
57
55
|
end
|
|
58
56
|
|
|
59
57
|
def interactive
|
|
60
|
-
`bin/spring stop`
|
|
61
|
-
|
|
62
58
|
begin
|
|
63
59
|
require File.expand_path('config/environment.rb')
|
|
64
60
|
rescue LoadError
|
|
@@ -112,20 +108,6 @@ module Storytime
|
|
|
112
108
|
init_hash[:enable_user_class] = true
|
|
113
109
|
end
|
|
114
110
|
|
|
115
|
-
# Admin Models
|
|
116
|
-
if yes? "Do you want to enable certain models to be accessible to CRUD operations within the Storytime admin dashboard? [y/n] (n)", :yellow
|
|
117
|
-
admin_models = ask "Enter a comma separated list of the models that you want to be CRUD accessible within the admin dashboard:", :yellow
|
|
118
|
-
|
|
119
|
-
unless admin_models.blank?
|
|
120
|
-
admin_models = admin_models.gsub(" ", "").split(",")
|
|
121
|
-
|
|
122
|
-
admin_models.each do |model|
|
|
123
|
-
say "Creating a StorytimeAdmin controller for #{model}...", :cyan
|
|
124
|
-
`bin/rails g storytime_admin:resource #{model}`
|
|
125
|
-
end
|
|
126
|
-
end
|
|
127
|
-
end
|
|
128
|
-
|
|
129
111
|
# Dashboard Namespace Path
|
|
130
112
|
if no? "Do you want to use /storytime as the location of the dashboard? [y/n] (y)", :yellow
|
|
131
113
|
dashboard_namespace_path = ask "Path of Storytime's dashboard, relative to Storytime's mount point, #{mount_point}, within the host app? (/storytime)", :yellow
|
|
@@ -222,8 +204,8 @@ module Storytime
|
|
|
222
204
|
end
|
|
223
205
|
|
|
224
206
|
def check_user_model(user_class)
|
|
225
|
-
unless File.
|
|
226
|
-
unless File.
|
|
207
|
+
unless File.exist?("app/models/#{user_class.underscore}.rb")
|
|
208
|
+
unless File.exist?("config/initializers/devise.rb")
|
|
227
209
|
say "Devise initializer not found... trying to generate one.", :red
|
|
228
210
|
|
|
229
211
|
`bin/rails generate devise:install`
|