storytime 2.1.5 → 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.
Files changed (236) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/test.yml +54 -0
  3. data/.gitignore +2 -1
  4. data/.ruby-version +1 -1
  5. data/.tool-versions +1 -0
  6. data/Gemfile +5 -3
  7. data/Gemfile.lock +414 -425
  8. data/Guardfile +1 -1
  9. data/app/assets/fonts/storytime-icons.eot +0 -0
  10. data/app/assets/fonts/storytime-icons.svg +23 -0
  11. data/app/assets/fonts/storytime-icons.ttf +0 -0
  12. data/app/assets/fonts/storytime-icons.woff +0 -0
  13. data/app/assets/javascripts/storytime/application.js +1 -8
  14. data/app/assets/javascripts/storytime/off_canvas.coffee +16 -0
  15. data/app/assets/javascripts/storytime/wysiwyg.js.coffee +9 -7
  16. data/app/assets/stylesheets/storytime/_buttons.scss +33 -0
  17. data/app/assets/stylesheets/storytime/_list-group.scss +1 -1
  18. data/app/assets/stylesheets/storytime/application.scss +14 -2
  19. data/app/assets/stylesheets/storytime/icons.scss +5 -5
  20. data/app/assets/stylesheets/storytime/leather/_buttons.scss +31 -0
  21. data/app/assets/stylesheets/storytime/leather/_devise.scss +72 -0
  22. data/app/assets/stylesheets/storytime/leather/_grid.scss +19 -0
  23. data/app/assets/stylesheets/storytime/leather/_list_groups.scss +33 -0
  24. data/app/assets/stylesheets/storytime/leather/_nav_menus.scss +125 -0
  25. data/app/assets/stylesheets/storytime/leather/_navbar_transparent.scss +23 -0
  26. data/app/assets/stylesheets/storytime/leather/_off_canvas.scss +109 -0
  27. data/app/assets/stylesheets/storytime/leather/_scroll_panels.scss +85 -0
  28. data/app/assets/stylesheets/storytime/leather/_toggle_columns.scss +23 -0
  29. data/app/assets/stylesheets/storytime/leather/_typography.scss +12 -0
  30. data/app/assets/stylesheets/storytime/leather/_utilities.scss +54 -0
  31. data/app/assets/stylesheets/storytime/leather/_variables.scss +8 -0
  32. data/app/assets/stylesheets/storytime/posts.scss +9 -1
  33. data/app/controllers/storytime/application_controller.rb +1 -1
  34. data/app/controllers/storytime/dashboard/blog_posts_controller.rb +5 -3
  35. data/app/controllers/storytime/dashboard/blogs_controller.rb +1 -1
  36. data/app/controllers/storytime/dashboard/media_controller.rb +4 -4
  37. data/app/controllers/storytime/dashboard/memberships_controller.rb +1 -1
  38. data/app/controllers/storytime/dashboard/pages_controller.rb +26 -6
  39. data/app/controllers/storytime/dashboard/posts_controller.rb +30 -5
  40. data/app/controllers/storytime/dashboard/subscriptions_controller.rb +1 -1
  41. data/app/controllers/storytime/pages_controller.rb +31 -1
  42. data/app/controllers/storytime/posts_controller.rb +1 -1
  43. data/app/controllers/storytime/subscriptions_controller.rb +5 -1
  44. data/app/helpers/storytime/application_helper.rb +0 -4
  45. data/app/models/concerns/storytime/post_featured_images.rb +2 -2
  46. data/app/models/concerns/storytime/post_partial_inheritance.rb +2 -2
  47. data/app/models/storytime/autosave.rb +1 -1
  48. data/app/models/storytime/comment.rb +1 -1
  49. data/app/models/storytime/media.rb +1 -1
  50. data/app/models/storytime/membership.rb +2 -2
  51. data/app/models/storytime/post.rb +7 -3
  52. data/app/models/storytime/site.rb +4 -6
  53. data/app/models/storytime/snippet.rb +12 -1
  54. data/app/models/storytime/subscription.rb +2 -2
  55. data/app/models/storytime/version.rb +1 -1
  56. data/app/policies/storytime/post_policy.rb +1 -1
  57. data/app/views/storytime/dashboard/_navigation.html.erb +0 -9
  58. data/app/views/storytime/dashboard/blog_posts/_form.html.erb +5 -1
  59. data/app/views/storytime/dashboard/blogs/edit.json.jbuilder +1 -1
  60. data/app/views/storytime/dashboard/blogs/index.json.jbuilder +1 -1
  61. data/app/views/storytime/dashboard/blogs/new.json.jbuilder +1 -1
  62. data/app/views/storytime/dashboard/media/_gallery.html.erb +1 -1
  63. data/app/views/storytime/dashboard/media/_modal.html.erb +2 -2
  64. data/app/views/storytime/dashboard/media/show.json.jbuilder +1 -1
  65. data/app/views/storytime/dashboard/memberships/_edit.html.erb +1 -1
  66. data/app/views/storytime/dashboard/memberships/_index.html.erb +3 -3
  67. data/app/views/storytime/dashboard/memberships/_new.html.erb +1 -1
  68. data/app/views/storytime/dashboard/memberships/edit.json.jbuilder +1 -1
  69. data/app/views/storytime/dashboard/memberships/index.json.jbuilder +1 -1
  70. data/app/views/storytime/dashboard/memberships/new.json.jbuilder +1 -1
  71. data/app/views/storytime/dashboard/memberships/save.json.jbuilder +1 -1
  72. data/app/views/storytime/dashboard/pages/_form.html.erb +1 -1
  73. data/app/views/storytime/dashboard/posts/_directory.html.erb +18 -0
  74. data/app/views/storytime/dashboard/posts/_form.html.erb +1 -1
  75. data/app/views/storytime/dashboard/posts/_list.html.erb +2 -26
  76. data/app/views/storytime/dashboard/posts/_new_button.html.erb +1 -1
  77. data/app/views/storytime/dashboard/posts/_post.html.erb +28 -0
  78. data/app/views/storytime/dashboard/posts/_sorts.html.erb +21 -0
  79. data/app/views/storytime/dashboard/posts/index.html.erb +5 -3
  80. data/app/views/storytime/dashboard/roles/_form.html.erb +1 -1
  81. data/app/views/storytime/dashboard/roles/edit.json.jbuilder +1 -1
  82. data/app/views/storytime/dashboard/sites/_form.html.erb +1 -1
  83. data/app/views/storytime/dashboard/sites/site.json.jbuilder +1 -1
  84. data/app/views/storytime/dashboard/snippets/_index.html.erb +1 -1
  85. data/app/views/storytime/dashboard/snippets/edit.json.jbuilder +1 -1
  86. data/app/views/storytime/dashboard/snippets/index.json.jbuilder +1 -1
  87. data/app/views/storytime/dashboard/snippets/new.json.jbuilder +1 -1
  88. data/app/views/storytime/dashboard/subscriptions/_form.html.erb +1 -1
  89. data/app/views/storytime/dashboard/subscriptions/_index.html.erb +2 -2
  90. data/app/views/storytime/dashboard/subscriptions/form.json.jbuilder +1 -1
  91. data/app/views/storytime/dashboard/subscriptions/index.json.jbuilder +1 -1
  92. data/app/views/storytime/dashboard/versions/_versions_info.html.erb +1 -1
  93. data/app/views/storytime/posts/show.html.erb +6 -0
  94. data/app/views/storytime/sites/_google_analytics_code.html.erb +5 -8
  95. data/config/initializers/assets.rb +2 -1
  96. data/config/initializers/friendly_id.rb +1 -1
  97. data/config/initializers/url_for_patch.rb +19 -8
  98. data/config/locales/devise.zh-CN.yml +59 -0
  99. data/config/locales/kaminari.zh-CN.yml +17 -0
  100. data/config/locales/simple_form.zh-CN.yml +26 -0
  101. data/config/locales/zh-CN.yml +141 -0
  102. data/config/routes.rb +2 -4
  103. data/db/migrate/20140501174341_create_storytime_posts.rb +1 -1
  104. data/db/migrate/20140509191309_create_friendly_id_slugs.rb +1 -1
  105. data/db/migrate/20140511200849_create_storytime_media.rb +1 -1
  106. data/db/migrate/20140513161233_create_storytime_sites.rb +1 -1
  107. data/db/migrate/20140514200234_create_storytime_tags.rb +1 -1
  108. data/db/migrate/20140514200304_create_storytime_taggings.rb +1 -1
  109. data/db/migrate/20140516141252_create_storytime_versions.rb +1 -1
  110. data/db/migrate/20140521190606_create_storytime_roles.rb +1 -1
  111. data/db/migrate/20140521191048_add_storytime_role_id_to_users.rb +1 -1
  112. data/db/migrate/20140521191728_create_storytime_permissions.rb +1 -1
  113. data/db/migrate/20140521191744_create_storytime_actions.rb +1 -1
  114. data/db/migrate/20140813014447_create_storytime_comments.rb +1 -1
  115. data/db/migrate/20140813130534_add_storytime_name_to_users.rb +1 -1
  116. data/db/migrate/20140916183056_create_storytime_autosaves.rb +1 -1
  117. data/db/migrate/20141020213343_add_secondary_media_id_to_storytime_post.rb +1 -1
  118. data/db/migrate/20141021073356_create_storytime_snippets.rb +1 -1
  119. data/db/migrate/20141111164439_create_storytime_subscriptions.rb +1 -1
  120. data/db/migrate/20150122200805_add_title_and_content_index_to_storytime_post.rb +1 -1
  121. data/db/migrate/20150128185746_seed_new_actions_and_permissions.rb +1 -1
  122. data/db/migrate/20150129215308_add_site_id_to_storytime_subscription.rb +1 -1
  123. data/db/migrate/20150206201847_add_site_id_to_storytime_post.rb +1 -1
  124. data/db/migrate/20150206201919_add_site_id_to_storytime_snippet.rb +1 -1
  125. data/db/migrate/20150206201931_add_site_id_to_storytime_tag.rb +1 -1
  126. data/db/migrate/20150206205256_add_notification_fields_to_storytime_post.rb +1 -1
  127. data/db/migrate/20150216211257_add_subdomain_to_storytime_sites.rb +1 -1
  128. data/db/migrate/20150216225045_add_site_to_storytime_media.rb +1 -1
  129. data/db/migrate/20150219210528_remove_root_page_content_from_storytime_sites.rb +1 -1
  130. data/db/migrate/20150220184902_add_blog_id_to_posts.rb +1 -1
  131. data/db/migrate/20150224192138_add_homepage_path_to_storytime_sites.rb +1 -1
  132. data/db/migrate/20150224193151_add_subscription_email_from_to_storytime_sites.rb +1 -1
  133. data/db/migrate/20150224193551_add_layout_to_storytime_sites.rb +1 -1
  134. data/db/migrate/20150224194559_add_disqus_forum_shortname_to_storytime_sites.rb +1 -1
  135. data/db/migrate/20150224212453_remove_homepage_path_from_storytime_sites.rb +1 -1
  136. data/db/migrate/20150225143516_add_site_id_to_storytime_autosaves.rb +1 -1
  137. data/db/migrate/20150225143826_add_site_id_to_storytime_comments.rb +1 -1
  138. data/db/migrate/20150225145119_add_site_id_to_storytime_versions.rb +1 -1
  139. data/db/migrate/20150225145316_add_site_id_to_storytime_taggings.rb +1 -1
  140. data/db/migrate/20150225145608_update_storytime_site_id_columns.rb +1 -1
  141. data/db/migrate/20150225164232_add_site_id_to_storytime_permissions.rb +1 -1
  142. data/db/migrate/20150225212917_create_storytime_memberships.rb +1 -1
  143. data/db/migrate/20150225213535_create_memberships_for_storytime_users.rb +1 -1
  144. data/db/migrate/20150226201739_add_custom_domain_to_storytime_sites.rb +1 -1
  145. data/db/migrate/20150302171500_add_site_id_to_storytime_media.rb +1 -1
  146. data/db/migrate/20150302171722_set_site_layout.rb +1 -1
  147. data/db/migrate/20150302185138_remove_storytime_role_id_from_users.rb +1 -1
  148. data/db/migrate/20150302192525_transfer_posts_to_blogs.rb +1 -1
  149. data/db/migrate/20150302192759_seed_permissions.rb +1 -1
  150. data/db/migrate/20150331162329_add_discourse_name_to_storytime_sites.rb +1 -1
  151. data/db/migrate/20150402161427_remove_subdomain_from_storytime_site.rb +1 -1
  152. data/db/migrate/20150520181115_create_storytime_navigations.rb +1 -1
  153. data/db/migrate/20150520185227_create_storytime_links.rb +1 -1
  154. data/db/migrate/20150520190700_add_position_to_storytime_links.rb +1 -1
  155. data/db/migrate/20150529192058_add_url_to_storytime_links.rb +1 -1
  156. data/db/migrate/20260408001637_add_canonical_url_to_storytime_posts.rb +5 -0
  157. data/db/migrate/20260701000000_sanitize_existing_storytime_snippets.rb +22 -0
  158. data/lib/storytime/cli/install.rb +2 -20
  159. data/lib/storytime/concerns/action_controller_extension.rb +36 -0
  160. data/lib/storytime/constraints/page_constraint.rb +8 -2
  161. data/lib/storytime/engine.rb +4 -5
  162. data/lib/storytime/migrators/v1.rb +3 -3
  163. data/lib/storytime/post_notifier.rb +1 -1
  164. data/lib/storytime/post_url_handler.rb +18 -5
  165. data/lib/storytime/storytime_helpers.rb +4 -0
  166. data/lib/storytime/version.rb +1 -1
  167. data/lib/storytime.rb +1 -1
  168. data/spec/controllers/dashboard_controller_spec.rb +5 -6
  169. data/spec/dummy/app/assets/config/manifest.js +3 -0
  170. data/spec/dummy/config/database.yml +3 -3
  171. data/spec/dummy/config/initializers/devise.rb +1 -1
  172. data/spec/dummy/db/migrate/20140530185250_devise_create_users.rb +1 -1
  173. data/spec/dummy/db/migrate/20150127172846_create_widgets.rb +1 -1
  174. data/spec/dummy/db/migrate/20150206203824_add_video_url_to_storytime_posts.rb +1 -1
  175. data/spec/dummy/db/schema.rb +226 -244
  176. data/spec/factories/action_factories.rb +3 -3
  177. data/spec/factories/comment_factories.rb +1 -1
  178. data/spec/factories/media_factories.rb +1 -1
  179. data/spec/factories/membership_factories.rb +1 -1
  180. data/spec/factories/navigation_factories.rb +3 -3
  181. data/spec/factories/permission_factories.rb +1 -1
  182. data/spec/factories/post_factories.rb +2 -2
  183. data/spec/factories/role_factories.rb +11 -11
  184. data/spec/factories/site_factories.rb +3 -3
  185. data/spec/factories/snippet_factories.rb +1 -1
  186. data/spec/factories/subscription_factories.rb +1 -1
  187. data/spec/factories/user_factories.rb +2 -2
  188. data/spec/factories/widget_factories.rb +2 -2
  189. data/spec/features/blogs_spec.rb +7 -7
  190. data/spec/features/comments_spec.rb +11 -11
  191. data/spec/features/dashboard/media_spec.rb +17 -11
  192. data/spec/features/dashboard/memberships_spec.rb +13 -19
  193. data/spec/features/dashboard/navigations_spec.rb +1 -1
  194. data/spec/features/dashboard/pages_spec.rb +8 -8
  195. data/spec/features/dashboard/posts_spec.rb +19 -19
  196. data/spec/features/dashboard/sites_spec.rb +1 -1
  197. data/spec/features/dashboard/snippets_spec.rb +3 -3
  198. data/spec/features/dashboard/subscription_spec.rb +2 -2
  199. data/spec/features/pages_spec.rb +3 -3
  200. data/spec/features/posts_spec.rb +2 -2
  201. data/spec/features/subscription_spec.rb +3 -3
  202. data/spec/importers/wordpress_spec.rb +1 -1
  203. data/spec/lib/mysql_fulltext_search_adapter_spec.rb +3 -3
  204. data/spec/lib/mysql_search_adapter_spec.rb +3 -3
  205. data/spec/lib/postgres_search_adapter_spec.rb +3 -3
  206. data/spec/lib/sqlite3_search_adapter_spec.rb +3 -3
  207. data/spec/lib/storytime/constraints/page_constraint_spec.rb +40 -0
  208. data/spec/lib/storytime_helpers_spec.rb +2 -2
  209. data/spec/models/navigation_spec.rb +3 -3
  210. data/spec/models/post_spec.rb +29 -29
  211. data/spec/models/snippet_spec.rb +31 -0
  212. data/spec/models/subscription_spec.rb +4 -4
  213. data/spec/models/tagging_spec.rb +14 -14
  214. data/spec/models/version_spec.rb +29 -29
  215. data/spec/policies/comment_policy_spec.rb +11 -11
  216. data/spec/policies/post_policy_spec.rb +13 -13
  217. data/spec/requests/pages_spec.rb +37 -0
  218. data/spec/requests/routings_spec.rb +14 -15
  219. data/spec/spec_helper.rb +8 -15
  220. data/spec/support/domains.rb +2 -2
  221. data/spec/support/feature_macros.rb +5 -5
  222. data/spec/support/pundit_matcher.rb +3 -3
  223. data/storytime.gemspec +15 -20
  224. data/vendor/assets/javascripts/codemirror/addons/edit/closebrackets.js +195 -0
  225. data/vendor/assets/javascripts/codemirror/addons/edit/closetag.js +169 -0
  226. data/vendor/assets/javascripts/codemirror/addons/fold/xml-fold.js +182 -0
  227. data/vendor/assets/javascripts/codemirror.js +8922 -0
  228. data/vendor/assets/javascripts/medium-editor.min.js +3 -3
  229. data/vendor/assets/stylesheets/codemirror/themes/solarized.css +169 -0
  230. data/vendor/assets/stylesheets/codemirror.css +347 -0
  231. metadata +94 -134
  232. data/config/initializers/storytime_admin.rb +0 -5
  233. data/config/spring.rb +0 -1
  234. data/spec/dummy/app/controllers/storytime_admin/widgets_controller.rb +0 -5
  235. data/spec/dummy/db/development.sqlite3 +0 -0
  236. data/spec/dummy/db/test.sqlite3 +0 -0
@@ -1,7 +1,7 @@
1
1
  module Storytime
2
2
  class Version < ActiveRecord::Base
3
3
  include Storytime::ScopedToSite
4
- belongs_to :user, class_name: Storytime.user_class
4
+ belongs_to :user, class_name: Storytime.user_class.to_s
5
5
  belongs_to :versionable, polymorphic: true
6
6
  end
7
7
  end
@@ -81,7 +81,7 @@ module Storytime
81
81
  end
82
82
 
83
83
  def permitted_attributes
84
- attrs = [:title, :draft_content, :draft_version_id, :excerpt, :featured_media_id, :secondary_media_id, :slug, :published_at_date, :notifications_enabled, :published_at_time, {:tag_list => []}]
84
+ attrs = [:title, :draft_content, :draft_version_id, :excerpt, :featured_media_id, :secondary_media_id, :slug, :published_at_date, :notifications_enabled, :published_at_time, :canonical_url, {:tag_list => []}]
85
85
  attrs << :published if publish?
86
86
  attrs
87
87
  end
@@ -103,15 +103,6 @@
103
103
  <ul class="nav nav-menu-nav">
104
104
  <li><%= link_to icon("plus", "New Blog"), [storytime, :new, :dashboard, :blog], class: "storytime-modal-trigger", remote: true %></li>
105
105
  </ul>
106
-
107
- <% if Pundit.policy(current_user, :admin).manage? && StorytimeAdmin.models.length > 0 %>
108
- <h4 class="nav-menu-divider">Admin</h4>
109
- <ul class="nav nav-menu-nav">
110
- <% StorytimeAdmin.models.sort.each do |model| %>
111
- <%= nav_item model.pluralize.titleize, [storytime_admin, *polymorphic_route_components(model)], nav_id: [:admin, model] %>
112
- <% end %>
113
- </ul>
114
- <% end %>
115
106
  </div>
116
107
  </nav>
117
108
  <div id='off-canvas-overlay'></div>
@@ -5,7 +5,7 @@
5
5
  <div class="row">
6
6
  <div class="col-md-8 col-md-offset-2">
7
7
  <ul class="list-group" style="margin: 0;">
8
- <%= render partial: 'storytime/dashboard/versions/version.html.erb', collection: @post.versions.order(created_at: :desc), locals: { versionable: @post } %>
8
+ <%= render partial: 'storytime/dashboard/versions/version', collection: @post.versions.order(created_at: :desc), locals: { versionable: @post } %>
9
9
  </ul>
10
10
  <%= link_to "Done", '#', class: "btn btn-primary btn-outline pull-right", style: "margin-top: 10px; margin-right: 15px;", data: { toggle: 'collapse', target: '#versions-panel' } %>
11
11
  </div>
@@ -49,6 +49,10 @@
49
49
  <%= f.input :published_at, as: :date_time_picker, label: "Publish Date/Time", input_html: { style: "display: inline;" } %>
50
50
  </div>
51
51
  </div>
52
+
53
+ <div class="post_field post_canonical_url">
54
+ <%= f.input :canonical_url, required: false, label: "Canonical URL", placeholder: "https://example.com/original-post", hint: "Optional. Set this if the post was originally published elsewhere." %>
55
+ </div>
52
56
 
53
57
  <hr>
54
58
 
@@ -1 +1 @@
1
- json.html(render partial: "form.html.erb")
1
+ json.html(render partial: "form", formats: [:html])
@@ -1 +1 @@
1
- json.html(render partial: "storytime/dashboard/blogs/blog.html.erb", collection: Storytime::Blog.all)
1
+ json.html(render partial: "storytime/dashboard/blogs/blog", collection: Storytime::Blog.all, formats: [:html])
@@ -1 +1 @@
1
- json.html(render partial: "form.html.erb")
1
+ json.html(render partial: "form", formats: [:html])
@@ -3,7 +3,7 @@
3
3
  <% @media.in_groups_of(5, false) do |media_row| %>
4
4
  <div class="row">
5
5
  <% media_row.each do |media| %>
6
- <%= render partial: "storytime/dashboard/media/media.html.erb", locals: { media: media } %>
6
+ <%= render "storytime/dashboard/media/media", media: media %>
7
7
  <% end %>
8
8
  </div>
9
9
  <% end %>
@@ -15,8 +15,8 @@
15
15
  </div>
16
16
 
17
17
  <div>
18
- <%= render "storytime/dashboard/media/form.html.erb" %>
19
- <div id="media_gallery_container"><%= render "storytime/dashboard/media/gallery.html.erb" %></div>
18
+ <%= render "storytime/dashboard/media/form" %>
19
+ <div id="media_gallery_container"><%= render "storytime/dashboard/media/gallery" %></div>
20
20
  </div>
21
21
  </div>
22
22
  <div class='modal-footer'>
@@ -1,2 +1,2 @@
1
1
  json.(@media, :id, :file_url, :user_id, :created_at)
2
- json.html render(partial: "storytime/dashboard/media/media.html.erb", locals: {media: @media})
2
+ json.html render(partial: "storytime/dashboard/media/media", locals: {media: @media}, formats: [:html])
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
  <div class="scroll-panel-body">
11
11
 
12
- <%= render 'storytime/dashboard/settings_tabs.html.erb' %>
12
+ <%= render 'storytime/dashboard/settings_tabs' %>
13
13
 
14
14
  <input type="hidden" value="<%= params[:controller].camelize %>" id="storytime-modal-controller">
15
15
  <input type="hidden" value="<%= params[:action].camelize %>" id="storytime-modal-action">
@@ -8,7 +8,7 @@
8
8
  </div>
9
9
  <div class="scroll-panel-body">
10
10
 
11
- <%= render 'storytime/dashboard/settings_tabs.html.erb' %>
11
+ <%= render 'storytime/dashboard/settings_tabs' %>
12
12
 
13
13
  <input type="hidden" value="<%= params[:controller].camelize %>" id="storytime-modal-controller">
14
14
  <input type="hidden" value="<%= params[:action].camelize %>" id="storytime-modal-action">
@@ -24,14 +24,14 @@
24
24
  </h4>
25
25
  </div>
26
26
  <div id="collapseListGroup1" class="panel-collapse collapse" role="tabpanel" aria-labelledby="collapseListGroupHeading1">
27
- <%= render "storytime/dashboard/memberships/form.html.erb" %>
27
+ <%= render "storytime/dashboard/memberships/form" %>
28
28
  </div>
29
29
  </div>
30
30
  </div>
31
31
  <% end %>
32
32
 
33
33
  <ul class="list-group list-group-button-links">
34
- <%= render partial: 'storytime/dashboard/memberships/membership.html.erb', collection: @memberships %>
34
+ <%= render partial: 'storytime/dashboard/memberships/membership', collection: @memberships %>
35
35
  </ul>
36
36
 
37
37
  <%= paginate @memberships, remote: true %>
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
  <div class="scroll-panel-body">
11
11
 
12
- <%= render 'storytime/dashboard/settings_tabs.html.erb' %>
12
+ <%= render 'storytime/dashboard/settings_tabs' %>
13
13
 
14
14
  <%= f.input :storytime_name %>
15
15
  <%= f.input :email %>
@@ -1,2 +1,2 @@
1
1
  json.(@membership)
2
- json.html(render partial: "edit.html.erb")
2
+ json.html(render partial: "edit", formats: [:html])
@@ -1,2 +1,2 @@
1
1
  json.(@memberships)
2
- json.html(render partial: "storytime/dashboard/memberships/index.html.erb")
2
+ json.html(render partial: "storytime/dashboard/memberships/index", formats: [:html])
@@ -1,2 +1,2 @@
1
1
  json.(@membership)
2
- json.html(render partial: "new.html.erb")
2
+ json.html(render partial: "new", formats: [:html])
@@ -1 +1 @@
1
- json.html(render partial: "storytime/dashboard/memberships/index.html.erb")
1
+ json.html(render partial: "storytime/dashboard/memberships/index", formats: [:html])
@@ -5,7 +5,7 @@
5
5
  <div class="row">
6
6
  <div class="col-md-8 col-md-offset-2">
7
7
  <ul class="list-group" style="margin: 0;">
8
- <%= render partial: 'storytime/dashboard/versions/version.html.erb', collection: @post.versions.order(created_at: :desc), locals: { versionable: @post } %>
8
+ <%= render partial: 'storytime/dashboard/versions/version', collection: @post.versions.order(created_at: :desc), locals: { versionable: @post } %>
9
9
  </ul>
10
10
  <%= link_to "Done", '#', class: "btn btn-primary btn-outline pull-right", style: "margin-top: 10px; margin-right: 15px;", data: { toggle: 'collapse', target: '#versions-panel' } %>
11
11
  </div>
@@ -0,0 +1,18 @@
1
+ <li class="list-group-item">
2
+ <%= link_to [
3
+ storytime,
4
+ :dashboard,
5
+ Storytime::Page,
6
+ dir: [params[:dir], directory].compact.join("/"),
7
+ published: params[:published],
8
+ draft: params[:draft]
9
+ ],
10
+ id: "",
11
+ class: "list-group-link" do %>
12
+ <div class="row">
13
+ <div class="col-md-8">
14
+ <h4><%= icon("folder-open-o") %> <%= directory %></h4>
15
+ </div>
16
+ </div>
17
+ <% end %>
18
+ </li>
@@ -5,7 +5,7 @@
5
5
  <div class="row">
6
6
  <div class="col-md-8 col-md-offset-2">
7
7
  <ul class="list-group" style="margin: 0;">
8
- <%= render partial: 'storytime/dashboard/versions/version.html.erb', collection: @post.versions.order(created_at: :desc), locals: { versionable: @post } %>
8
+ <%= render partial: 'storytime/dashboard/versions/version', collection: @post.versions.order(created_at: :desc), locals: { versionable: @post } %>
9
9
  </ul>
10
10
  <%= link_to "Done", '#', class: "btn btn-primary btn-outline pull-right", style: "margin-top: 10px; margin-right: 15px;", data: { toggle: 'collapse', target: '#versions-panel' } %>
11
11
  </div>
@@ -1,26 +1,2 @@
1
- <% @posts.each do |post| %>
2
- <li class="list-group-item" id="<%= post.class.to_s.downcase.split("::").last %>_<%= post.id %>">
3
- <%= link_to [:edit, :dashboard, post], id: "", class: "list-group-link" do %>
4
- <div class="row">
5
- <div class="col-md-8">
6
- <h4><%= post.title %></h4>
7
- </div>
8
- </div>
9
-
10
- <p class="text-muted">
11
- <% if post.published? && post.published_at <= Time.now %>
12
- Published <%= time_ago_in_words post.published_at %> ago
13
- <% elsif post.published? %>
14
- <span class="label label-warning">Draft</span>
15
- Scheduled to publish on <%= post.published_at.strftime("%B %e at %l:%M %p") %>
16
- <% else %>
17
- <span class="label label-warning">Draft</span>
18
- Last edited <%= time_ago_in_words post.updated_at %> ago
19
- <% end %>
20
- </p>
21
- <% end %>
22
- <div class="list-group-actions">
23
- <%= delete_resource_link post, [:dashboard, post] %>
24
- </div>
25
- </li>
26
- <% end %>
1
+ <%= render collection: @directories, partial: "storytime/dashboard/posts/directory" %>
2
+ <%= render collection: @posts, partial: "storytime/dashboard/posts/post" %>
@@ -4,7 +4,7 @@
4
4
  </button>
5
5
  <ul class="dropdown-menu dropdown-menu-right" role="menu">
6
6
  <% Storytime.post_types.reject{|type| %w[Storytime::Post Storytime::Page Storytime::Blog].include? type }.each do |post_type| %>
7
- <li><%= link_to "#{post_type.split('::').last.titleize}", [:new, :dashboard, @blog, post_type.split("::").last.tableize.singularize] %></li>
7
+ <li><%= link_to "#{post_type.split('::').last.titleize}", [:new, :dashboard, @blog, post_type.split("::").last.tableize.singularize.to_sym] %></li>
8
8
  <% end %>
9
9
  </ul>
10
10
  </div>
@@ -0,0 +1,28 @@
1
+ <li class="list-group-item" id="<%= post.class.to_s.downcase.split("::").last %>_<%= post.id %>">
2
+ <%= link_to [:edit, :dashboard, post], id: "", class: "list-group-link" do %>
3
+ <div class="row">
4
+ <div class="col-md-8">
5
+ <h4><%= post.title %></h4>
6
+ </div>
7
+ </div>
8
+
9
+ <div class="row post-row-subtext">
10
+ <div class="col-md-6"><%= "/#{post.slug}" %></div>
11
+
12
+ <div class="col-md-6 text-muted text-right">
13
+ <% if post.published? && post.published_at <= Time.now %>
14
+ Published <%= time_ago_in_words post.published_at %> ago
15
+ <% elsif post.published? %>
16
+ <span class="label label-warning">Draft</span>
17
+ Scheduled to publish on <%= post.published_at.strftime("%B %e at %l:%M %p") %>
18
+ <% else %>
19
+ <span class="label label-warning">Draft</span>
20
+ Last edited <%= time_ago_in_words post.updated_at %> ago
21
+ <% end %>
22
+ </div>
23
+ </div>
24
+ <% end %>
25
+ <div class="list-group-actions">
26
+ <%= delete_resource_link post, [:dashboard, post] %>
27
+ </div>
28
+ </li>
@@ -0,0 +1,21 @@
1
+ <li class="pull-right">
2
+ <div class="btn-group margin-right" style="margin-right: 10px;">
3
+ <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
4
+ Sort <span class="caret"></span>
5
+ </button>
6
+ <ul class="dropdown-menu dropdown-menu-right" role="menu" style="top: 125%;">
7
+ <li>
8
+ <%= link_to "Title", { sort: "title" } %>
9
+ </li>
10
+ <li>
11
+ <%= link_to "Slug", { sort: "slug" } %>
12
+ </li>
13
+ <li>
14
+ <%= link_to "Publish Date", { sort: "published_at" } %>
15
+ </li>
16
+ <li>
17
+ <%= link_to "Creation Date", { sort: "created_at" } %>
18
+ </li>
19
+ </ul>
20
+ </div>
21
+ </li>
@@ -5,7 +5,7 @@
5
5
  <%= link_to "#", class: "btn btn-default btn-icon pull-left visible-xs visible-sm", data: { toggle: "off-canvas", target: "#dashboard-nav" } do %>
6
6
  <i class="icon-st-icons-st-logo"></i>
7
7
  <% end %>
8
-
8
+
9
9
  <% if @blog %>
10
10
  <div class="pull-right">
11
11
 
@@ -61,8 +61,10 @@
61
61
  <%= link_to "Published", [:dashboard, current_post_type, published: 'true'] %>
62
62
  <% end %>
63
63
  </li>
64
+
65
+ <%= render "storytime/dashboard/posts/sorts" %>
64
66
  </ul>
65
- <ul class="list-group list-group-button-links">
67
+ <ul class="list-group list-group-button-links post-list">
66
68
  <%= render 'list' %>
67
69
  </ul>
68
70
  <div class="pagination-wrapper">
@@ -70,4 +72,4 @@
70
72
  </div>
71
73
  </div>
72
74
  </div>
73
- </div>
75
+ </div>
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
  <div class="scroll-panel-body">
11
11
 
12
- <%= render 'storytime/dashboard/settings_tabs.html.erb' %>
12
+ <%= render 'storytime/dashboard/settings_tabs' %>
13
13
 
14
14
  <table class="table table-hover">
15
15
  <thead>
@@ -1 +1 @@
1
- json.html render(partial: "storytime/dashboard/roles/form.html.erb")
1
+ json.html render(partial: "storytime/dashboard/roles/form", formats: [:html])
@@ -12,7 +12,7 @@
12
12
  <input type="hidden" value="<%= params[:controller].camelize %>" id="storytime-modal-controller">
13
13
  <input type="hidden" value="<%= params[:action].camelize %>" id="storytime-modal-action">
14
14
 
15
- <%= render 'storytime/dashboard/settings_tabs.html.erb' %>
15
+ <%= render 'storytime/dashboard/settings_tabs' %>
16
16
 
17
17
  <%= f.error_notification %>
18
18
  <%= f.input :title %>
@@ -1,2 +1,2 @@
1
1
  json.(@site)
2
- json.html render(partial: "storytime/dashboard/sites/form.html.erb")
2
+ json.html render(partial: "storytime/dashboard/sites/form", formats: [:html])
@@ -9,7 +9,7 @@
9
9
  <div class="scroll-panel-body">
10
10
 
11
11
  <ul class="list-group list-group-button-links">
12
- <%= render partial: 'snippet.html.erb', collection: @snippets %>
12
+ <%= render partial: 'snippet', collection: @snippets %>
13
13
  </ul>
14
14
 
15
15
  <%= paginate @snippets, param_name: "page_number", remote: true %>
@@ -1 +1 @@
1
- json.html(render partial: "form.html.erb")
1
+ json.html(render partial: "form", formats: [:html])
@@ -1,4 +1,4 @@
1
1
  if @snippet.present?
2
2
  json.(@snippet, :id, :content, :created_at)
3
3
  end
4
- json.html(render partial: "index.html.erb")
4
+ json.html(render partial: "index", formats: [:html])
@@ -1 +1 @@
1
- json.html(render partial: "form.html.erb")
1
+ json.html(render partial: "form", formats: [:html])
@@ -9,7 +9,7 @@
9
9
  </div>
10
10
  <div class="scroll-panel-body">
11
11
 
12
- <%= render 'storytime/dashboard/settings_tabs.html.erb' %>
12
+ <%= render 'storytime/dashboard/settings_tabs', formats: [:html] %>
13
13
 
14
14
  <%= f.input :site_id, as: :hidden, input_html: { value: @current_storytime_site.id } %>
15
15
  <%= f.input :email %>
@@ -8,10 +8,10 @@
8
8
  </div>
9
9
  <div class="scroll-panel-body">
10
10
 
11
- <%= render 'storytime/dashboard/settings_tabs.html.erb' %>
11
+ <%= render 'storytime/dashboard/settings_tabs' %>
12
12
 
13
13
  <ul class="list-group list-group-button-links">
14
- <%= render partial: 'subscription.html.erb', collection: @subscriptions %>
14
+ <%= render partial: 'subscription', collection: @subscriptions %>
15
15
  </ul>
16
16
 
17
17
  <%= paginate @subscriptions, param_name: "page_number", remote: true %>
@@ -1 +1 @@
1
- json.html(render partial: "form.html.erb")
1
+ json.html(render partial: "form", formats: [:html])
@@ -1 +1 @@
1
- json.html(render partial: "index.html.erb")
1
+ json.html(render partial: "index", formats: [:html])
@@ -4,7 +4,7 @@
4
4
  </div>
5
5
  <div id="versions-panel" class="collapse">
6
6
  <ul class="list-group" style="margin: 0;">
7
- <%= render partial: 'storytime/dashboard/versions/version.html.erb', collection: versionable.versions.order(created_at: :desc), locals: {versionable: versionable } %>
7
+ <%= render partial: 'storytime/dashboard/versions/version', collection: versionable.versions.order(created_at: :desc), locals: {versionable: versionable } %>
8
8
  </ul>
9
9
  </div>
10
10
  </div>
@@ -1,3 +1,9 @@
1
+ <% if @post.canonical_url.present? %>
2
+ <% content_for :head do %>
3
+ <link rel="canonical" href="<%= @post.canonical_url %>">
4
+ <% end %>
5
+ <% end %>
6
+
1
7
  <div class="container">
2
8
  <% if params[:preview] %>
3
9
  <div class="alert alert-info" role="alert">Currently viewing a preview of "<%= @post.title %>".</div>
@@ -1,13 +1,10 @@
1
1
  <% unless @current_storytime_site.nil? || @current_storytime_site.ga_tracking_id.blank? %>
2
+ <script async src="https://www.googletagmanager.com/gtag/js?id=<%= @current_storytime_site.ga_tracking_id %>"></script>
2
3
  <script>
3
- (function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
4
- (i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
5
- m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
6
- })(window,document,'script','//www.google-analytics.com/analytics.js','ga');
7
-
8
- ga('create', '<%= @current_storytime_site.ga_tracking_id %>', {'allowAnchor': true});
9
-
10
- ga('send', 'pageview', { 'page': location.pathname + location.search + location.hash});
4
+ window.dataLayer = window.dataLayer || [];
5
+ function gtag(){dataLayer.push(arguments);}
6
+ gtag('js', new Date());
11
7
 
8
+ gtag('config', '<%= @current_storytime_site.ga_tracking_id %>');
12
9
  </script>
13
10
  <% end %>
@@ -1 +1,2 @@
1
- Rails.application.config.assets.precompile += %w( chosen-sprite.png chosen-sprite@2x.png tidy.js )
1
+ Rails.application.config.assets.precompile += %w( chosen-sprite.png chosen-sprite@2x.png tidy.js )
2
+ Rails.application.config.assets.precompile += %w( *.svg *.eot *.woff *.woff2 *.ttf )
@@ -17,7 +17,7 @@ FriendlyId.defaults do |config|
17
17
  config.use :reserved
18
18
 
19
19
  config.reserved_words = %w(new edit index session login logout users admin
20
- stylesheets assets javascripts images)
20
+ stylesheets assets javascripts images fonts)
21
21
 
22
22
  # ## Friendly Finders
23
23
  #
@@ -1,14 +1,25 @@
1
- module ActionDispatch
2
- module Routing
3
- class RouteSet
1
+ if Rails::VERSION::MAJOR < 5 || (Rails::VERSION::MAJOR == 5 && Rails::VERSION::MINOR == 0)
2
+ module ActionDispatch
3
+ module Routing
4
+ class RouteSet
4
5
 
5
- def url_for_with_storytime(options, route_name = nil, url_strategy = UNKNOWN)
6
- Storytime::PostUrlHandler.handle_url(options)
7
- url_for_without_storytime(options, route_name, url_strategy)
8
- end
6
+ if Rails::VERSION::MAJOR == 4 && Rails::VERSION::MINOR == 1
7
+ def url_for_with_storytime(options = {})
8
+ Storytime::PostUrlHandler.handle_url(options)
9
+ url_for_without_storytime(options)
10
+ end
11
+ else
12
+ def url_for_with_storytime(options, route_name = nil, url_strategy = UNKNOWN)
13
+ Storytime::PostUrlHandler.handle_url(options)
14
+ url_for_without_storytime(options, route_name, url_strategy)
15
+ end
16
+ end
9
17
 
10
- alias_method_chain :url_for, :storytime
18
+ alias_method_chain :url_for, :storytime
11
19
 
20
+ end
12
21
  end
13
22
  end
23
+ else
24
+ ActionDispatch::Routing::RouteSet.prepend(Storytime::PostUrlHandler)
14
25
  end
@@ -0,0 +1,59 @@
1
+ # Additional translations at https://github.com/plataformatec/devise/wiki/I18n
2
+
3
+ zh-CN:
4
+ devise:
5
+ confirmations:
6
+ confirmed: "你的电子邮件地址以被成功确认。"
7
+ send_instructions: "你在几分钟后会收到一封电子邮件告诉你如何确认你的电子邮件地址。"
8
+ send_paranoid_instructions: "如果我们的数据库中保存有你的电子邮件地址,你会在几分钟内收到一封邮件告诉你如何确认的电子邮件。"
9
+ failure:
10
+ already_authenticated: "你已经登录。"
11
+ inactive: "你的帐户还未激活。"
12
+ invalid: "非法的 %{authentication_keys} 或密码。"
13
+ locked: "你的帐号已被锁定。"
14
+ last_attempt: "你还有最后一次尝试机会,如果再次失败你的帐号将被锁定。"
15
+ not_found_in_database: "非法的 %{authentication_keys} 或密码。"
16
+ timeout: "你的登录超时,请重新登录。"
17
+ unauthenticated: "你需要登录或注册才能继续操作。"
18
+ unconfirmed: "你需要确认你的电子邮件地址才能继续。"
19
+ mailer:
20
+ confirmation_instructions:
21
+ subject: "帐户确认指南"
22
+ reset_password_instructions:
23
+ subject: "重置密码指南"
24
+ unlock_instructions:
25
+ subject: "Pivorak: 解锁指南"
26
+ omniauth_callbacks:
27
+ failure: "由于%{reason},无法从%{kind} 认证。"
28
+ success: "成功从 %{kind} 认证帐户。"
29
+ passwords:
30
+ no_token: "如果没有密码重置邮件无法访问这个页面。如果你是从密码重置邮件访问过来的,请确认输入的网址完整。"
31
+ send_instructions: "在几分钟内你会收到一封密码重置邮件。"
32
+ send_paranoid_instructions: "如果我们的数据库中保存有你的电子邮件地址,你会在几分钟内收到一封如何恢复密码的邮件。"
33
+ updated: "你的密码已被成功更改,你现在已经登录。"
34
+ updated_not_active: "你的密码已被成功更改。"
35
+ registrations:
36
+ destroyed: "再见!你的帐户已被成功取消。希望能再次见到你。"
37
+ signed_up: "欢迎!你已经成功注册。"
38
+ signed_up_but_inactive: "你已经成功注册。但是由于你的帐户未激活,你仍无法登录。"
39
+ signed_up_but_locked: "你已经成功注册。但是由于你的帐户被锁定,你仍无法登录。"
40
+ signed_up_but_unconfirmed: "我们已向你的邮箱发送了一封确认邮件。请单击邮件中的链接激活你的帐户。"
41
+ update_needs_confirmation: "你已经成功更新帐户,但我们需要验证你的电子邮件地址。请检查你的邮件并确认你的子邮件地址。"
42
+ updated: "你的帐户已被成功更新。"
43
+ sessions:
44
+ signed_in: "成功登录。"
45
+ signed_out: "成功注销。"
46
+ unlocks:
47
+ send_instructions: "在几分钟内你会收到一封如何解锁帐户的邮件。"
48
+ send_paranoid_instructions: "如果你的帐户存在,在几分钟内你会收到一封如何解锁帐户的邮件。"
49
+ unlocked: "你的帐户已被成功解锁,请重新登录。"
50
+ errors:
51
+ messages:
52
+ already_confirmed: "已确认,请尝试登录"
53
+ confirmation_period_expired: "需要在 %{period} 内确认,请重新注册"
54
+ expired: "已过期,请重新注册"
55
+ not_found: "未找到"
56
+ not_locked: "未被锁定"
57
+ not_saved:
58
+ one: "出现一个错误导致 %{resource} 不能被保存:"
59
+ other: "出现 %{count} 个错误导致 %{resource} 不能被保存:"
@@ -0,0 +1,17 @@
1
+ zh-CN:
2
+ views:
3
+ pagination:
4
+ first: "&laquo;"
5
+ last: "&raquo;"
6
+ previous: "&lsaquo;"
7
+ next: "&rsaquo;"
8
+ truncate: "&hellip;"
9
+ helpers:
10
+ page_entries_info:
11
+ one_page:
12
+ display_entries:
13
+ zero: "未找到 %{entry_name}"
14
+ one: "显示 <b>1</b> 条 %{entry_name}"
15
+ other: "显示 <b>所有 %{count}</b> 条 %{entry_name}"
16
+ more_pages:
17
+ display_entries: "显示 %{entry_name} <b>%{first}&nbsp;-&nbsp;%{last}</b> 共 <b>%{total}</b>"
@@ -0,0 +1,26 @@
1
+ zh-CN:
2
+ simple_form:
3
+ "yes": '是'
4
+ "no": '否'
5
+ required:
6
+ text: '必添'
7
+ mark: '*'
8
+ # You can uncomment the line below if you need to overwrite the whole required html.
9
+ # When using html, text and mark won't be used.
10
+ # html: '<abbr title="required">*</abbr>'
11
+ error_notification:
12
+ default_message: "请检查如下问题:"
13
+ # Labels and hints examples
14
+ # labels:
15
+ # defaults:
16
+ # password: 'Password'
17
+ # user:
18
+ # new:
19
+ # email: 'E-mail to sign in.'
20
+ # edit:
21
+ # email: 'E-mail.'
22
+ # hints:
23
+ # defaults:
24
+ # username: 'User name to sign in.'
25
+ # password: 'No special characters, please.'
26
+