publify_core 9.2.10 → 10.0.0

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 (119) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +57 -18
  3. data/app/assets/javascripts/lang/ar_AR.js +17 -0
  4. data/app/controllers/admin/{content_controller.rb → articles_controller.rb} +24 -24
  5. data/app/controllers/admin/dashboard_controller.rb +3 -3
  6. data/app/controllers/admin/feedback_controller.rb +23 -23
  7. data/app/controllers/admin/pages_controller.rb +2 -2
  8. data/app/controllers/admin/post_types_controller.rb +10 -4
  9. data/app/controllers/admin/redirects_controller.rb +10 -6
  10. data/app/controllers/admin/resources_controller.rb +2 -2
  11. data/app/controllers/admin/sidebar_controller.rb +2 -2
  12. data/app/controllers/admin/tags_controller.rb +5 -3
  13. data/app/controllers/admin/themes_controller.rb +1 -2
  14. data/app/controllers/admin/users_controller.rb +5 -3
  15. data/app/controllers/articles_controller.rb +5 -5
  16. data/app/controllers/authors_controller.rb +2 -2
  17. data/app/controllers/base_controller.rb +0 -3
  18. data/app/controllers/feedback_controller.rb +3 -3
  19. data/app/controllers/tags_controller.rb +3 -3
  20. data/app/helpers/authors_helper.rb +1 -1
  21. data/app/helpers/base_helper.rb +6 -6
  22. data/app/models/ability.rb +1 -1
  23. data/app/models/archives_sidebar.rb +3 -3
  24. data/app/models/article.rb +13 -13
  25. data/app/models/blog.rb +3 -6
  26. data/app/models/content.rb +1 -3
  27. data/app/models/content_base.rb +2 -13
  28. data/app/models/feedback.rb +1 -2
  29. data/app/models/meta_sidebar.rb +1 -1
  30. data/app/models/note.rb +2 -2
  31. data/app/models/redirect.rb +0 -1
  32. data/app/models/sidebar.rb +1 -1
  33. data/app/models/static_sidebar.rb +1 -1
  34. data/app/models/tag.rb +7 -8
  35. data/app/models/tag_sidebar.rb +3 -3
  36. data/app/models/text_filter.rb +17 -43
  37. data/app/models/user.rb +2 -2
  38. data/app/services/title_builder.rb +4 -4
  39. data/app/views/admin/{content → articles}/_article_list.html.erb +3 -3
  40. data/app/views/admin/{content → articles}/_form.html.erb +11 -1
  41. data/app/views/admin/{content → articles}/index.html.erb +1 -1
  42. data/app/views/admin/dashboard/_drafts.html.erb +2 -2
  43. data/app/views/admin/dashboard/_overview.html.erb +1 -1
  44. data/app/views/admin/dashboard/_welcome.html.erb +4 -4
  45. data/app/views/admin/dashboard/index.html.erb +0 -7
  46. data/app/views/admin/feedback/article.html.erb +12 -6
  47. data/app/views/admin/feedback/edit.html.erb +14 -2
  48. data/app/views/admin/feedback/index.html.erb +6 -7
  49. data/app/views/admin/pages/_form.html.erb +13 -14
  50. data/app/views/admin/seo/show.html.erb +12 -1
  51. data/app/views/admin/shared/_menu.html.erb +5 -4
  52. data/app/views/admin/tags/_index_and_form.html.erb +2 -1
  53. data/app/views/articles/_comment_errors.html.erb +11 -1
  54. data/app/views/articles/read.html.erb +1 -1
  55. data/app/views/layouts/administration.html.erb +9 -17
  56. data/config/i18n-tasks.yml +8 -1
  57. data/config/initializers/devise.rb +1 -1
  58. data/config/locales/ar.yml +885 -0
  59. data/config/locales/da.yml +12 -12
  60. data/config/locales/de.yml +12 -12
  61. data/config/locales/en.yml +12 -12
  62. data/config/locales/es-MX.yml +12 -12
  63. data/config/locales/fr.yml +12 -12
  64. data/config/locales/he.yml +12 -12
  65. data/config/locales/it.yml +12 -12
  66. data/config/locales/ja.yml +13 -13
  67. data/config/locales/lt.yml +12 -12
  68. data/config/locales/{nb-NO.yml → nb.yml} +13 -13
  69. data/config/locales/nl.yml +13 -13
  70. data/config/locales/pl.yml +12 -12
  71. data/config/locales/pt-BR.yml +12 -12
  72. data/config/locales/ro.yml +12 -12
  73. data/config/locales/ru.yml +13 -13
  74. data/config/locales/sidebars.ar.yml +20 -0
  75. data/config/locales/{sidebars.nb-NO.yml → sidebars.nb.yml} +1 -1
  76. data/config/locales/zh-CN.yml +12 -12
  77. data/config/locales/zh-TW.yml +12 -12
  78. data/config/routes.rb +2 -2
  79. data/db/migrate/20150807134129_simplify_redirect_relations.rb +1 -0
  80. data/db/migrate/20150808052637_add_blog_ids.rb +3 -1
  81. data/db/migrate/20160605103918_replace_profile_id_with_string.rb +1 -0
  82. data/db/migrate/20160701062604_add_blog_id_to_resources.rb +2 -0
  83. data/db/migrate/20190208152646_move_text_filter_to_name.rb +17 -17
  84. data/db/migrate/20221007091049_remove_table_sitealizer.rb +19 -0
  85. data/db/migrate/20221010092846_remove_page_caches_table.rb +15 -0
  86. data/db/migrate/20221012163214_remove_itunes_fields_from_resources.rb +14 -0
  87. data/db/seeds.rb +0 -4
  88. data/lib/publify_core/content_text_helpers.rb +11 -0
  89. data/lib/publify_core/lang.rb +1 -1
  90. data/lib/publify_core/testing_support/factories/articles.rb +55 -0
  91. data/lib/publify_core/testing_support/factories/blogs.rb +24 -0
  92. data/lib/publify_core/testing_support/factories/comments.rb +40 -0
  93. data/lib/publify_core/testing_support/factories/contents.rb +7 -0
  94. data/lib/publify_core/testing_support/factories/notes.rb +17 -0
  95. data/lib/publify_core/testing_support/factories/pages.rb +13 -0
  96. data/lib/publify_core/testing_support/factories/post_types.rb +8 -0
  97. data/lib/publify_core/testing_support/factories/redirects.rb +9 -0
  98. data/lib/publify_core/testing_support/factories/resources.rb +16 -0
  99. data/lib/publify_core/testing_support/factories/sequences.rb +12 -0
  100. data/lib/publify_core/testing_support/factories/sidebars.rb +10 -0
  101. data/lib/publify_core/testing_support/factories/tags.rb +9 -0
  102. data/lib/publify_core/testing_support/factories/trackbacks.rb +13 -0
  103. data/lib/publify_core/testing_support/factories/users.rb +43 -0
  104. data/lib/publify_core/version.rb +1 -1
  105. data/lib/publify_core.rb +3 -3
  106. data/lib/publify_textfilter_markdown.rb +8 -9
  107. data/lib/publify_textfilter_markdown_smartquotes.rb +20 -0
  108. data/lib/publify_textfilter_twitterfilter.rb +36 -18
  109. data/lib/sidebar_field.rb +2 -2
  110. data/lib/sidebar_registry.rb +0 -12
  111. data/lib/text_filter_plugin.rb +23 -30
  112. metadata +213 -105
  113. data/lib/publify_core/testing_support/factories.rb +0 -240
  114. data/lib/publify_textfilter_textile.rb +0 -24
  115. data/lib/tasks/i18n.rake +0 -9
  116. /data/app/views/admin/{content → articles}/autosave.js.erb +0 -0
  117. /data/app/views/admin/{content → articles}/edit.html.erb +0 -0
  118. /data/app/views/admin/{content → articles}/index.js.erb +0 -0
  119. /data/app/views/admin/{content → articles}/new.html.erb +0 -0
@@ -19,14 +19,8 @@ zh-TW:
19
19
  attributes:
20
20
  title:
21
21
  blank: can't be blank
22
- template:
23
- body: ''
24
- header: ''
25
22
  admin:
26
- base:
27
- not_allowed: Error, you are not allowed to perform this action
28
- successfully_deleted: This %{name} was deleted successfully
29
- content:
23
+ articles:
30
24
  access_granted:
31
25
  error: Error, you are not allowed to perform this action
32
26
  article_list:
@@ -85,6 +79,11 @@ zh-TW:
85
79
  withdrawn: Withdrawn
86
80
  update:
87
81
  success: Article was successfully updated
82
+ base:
83
+ not_allowed: Error, you are not allowed to perform this action
84
+ successfully_created: "%{name} was successfully created."
85
+ successfully_deleted: This %{name} was deleted successfully
86
+ successfully_updated: "%{name} was successfully updated."
88
87
  dashboard:
89
88
  comment:
90
89
  by: By
@@ -95,9 +94,6 @@ zh-TW:
95
94
  no_drafts_yet: No drafts yet, why don't you write one
96
95
  your_drafts: Your drafts
97
96
  index:
98
- textile_deprecated_html: The Textile text filter has been deprecated and will
99
- be removed soon. Some of your content still uses this filter. Run the <code>publify:textile_to_markdown</code>
100
- rake task to convert it to Markdown, or convert your content manually.
101
97
  welcome_back: 歡迎回來, %{user_name}!
102
98
  overview:
103
99
  change_your_blog_presentation: 修改你的部落格外觀
@@ -155,14 +151,17 @@ zh-TW:
155
151
  feedback:
156
152
  article:
157
153
  action_or_other_html: "%{first_action} 或 %{second_action}"
154
+ actions: Actions
158
155
  add_a_comment: Add a comment
159
156
  author: 作者
160
157
  cancel: 取消
161
158
  comments_for_html: 做出評論 %{title}
159
+ content: Content
160
+ created_at: Created at
162
161
  email: Email
163
162
  no_feedback: There is no feedback yet. Why don't you create some?
164
163
  save: 存檔
165
- select_all: Select all
164
+ status: 身分
166
165
  url: Url
167
166
  your_comment: Your comment
168
167
  bulkops:
@@ -209,7 +208,6 @@ zh-TW:
209
208
  no_feedback: There is no feedback yet. Why don't you create some?
210
209
  presumed_ham: Presumed ham
211
210
  presumed_spam: Presumed spam
212
- select_all: Select all
213
211
  spam: Spam
214
212
  status: 身分
215
213
  unapproved_comments: Unapproved comments
@@ -563,6 +561,7 @@ zh-TW:
563
561
  sidebar_plugins: Sidebar plugins
564
562
  tags: 標示標籤
565
563
  titles: Titles
564
+ view_blog: View blog
566
565
  write: Write
567
566
  twitter_alert:
568
567
  fill_the_twitter_credentials: fill in the OAuth credentials
@@ -775,6 +774,7 @@ zh-TW:
775
774
  helper:
776
775
  at: at
777
776
  langs:
777
+ ar_AR: Arabic
778
778
  da_DK: Danish
779
779
  de_DE: German
780
780
  en_US: English (US)
data/config/routes.rb CHANGED
@@ -81,8 +81,8 @@ Rails.application.routes.draw do
81
81
  namespace :admin do
82
82
  root "dashboard#index", as: "dashboard"
83
83
 
84
- resources :content, only: [:index, :new, :edit, :create, :update, :destroy],
85
- format: false do
84
+ resources :articles, only: [:index, :new, :edit, :create, :update, :destroy],
85
+ format: false do
86
86
  collection do
87
87
  get "auto_complete_for_article_keywords"
88
88
  post "autosave"
@@ -2,6 +2,7 @@
2
2
 
3
3
  class SimplifyRedirectRelations < ActiveRecord::Migration[4.2]
4
4
  class Redirect < ActiveRecord::Base; end
5
+
5
6
  class Redirection < ActiveRecord::Base; end
6
7
 
7
8
  def up
@@ -2,7 +2,9 @@
2
2
 
3
3
  class AddBlogIds < ActiveRecord::Migration[4.2]
4
4
  class Blog < ActiveRecord::Base; end
5
+
5
6
  class Content < ActiveRecord::Base; end
7
+
6
8
  class Sidebar < ActiveRecord::Base; end
7
9
 
8
10
  def up
@@ -22,7 +24,7 @@ class AddBlogIds < ActiveRecord::Migration[4.2]
22
24
  def down
23
25
  if adapter_name == "PostgreSQL"
24
26
  indexes(:contents).each do |index|
25
- remove_index(:contents, name: index.name) if /blog_id/.match?(index.name)
27
+ remove_index(:contents, name: index.name) if index.name.include?("blog_id")
26
28
  end
27
29
  else
28
30
  begin
@@ -3,6 +3,7 @@
3
3
  class ReplaceProfileIdWithString < ActiveRecord::Migration[4.2]
4
4
  class Profile < ActiveRecord::Base
5
5
  end
6
+
6
7
  class User < ActiveRecord::Base
7
8
  end
8
9
 
@@ -2,7 +2,9 @@
2
2
 
3
3
  class AddBlogIdToResources < ActiveRecord::Migration[4.2]
4
4
  class Blog < ActiveRecord::Base; end
5
+
5
6
  class Content < ActiveRecord::Base; end
7
+
6
8
  class Resource < ActiveRecord::Base; end
7
9
 
8
10
  def up
@@ -46,23 +46,23 @@ class MoveTextFilterToName < ActiveRecord::Migration[5.2]
46
46
  end
47
47
 
48
48
  def down
49
- TextFilter.
50
- create_with(description: "None", markup: "none", filters: [], params: {}).
51
- find_or_create_by!(name: "none")
52
- TextFilter.
53
- create_with(description: "Markdown", markup: "markdown", filters: [], params: {}).
54
- find_or_create_by!(name: "markdown")
55
- TextFilter.
56
- create_with(description: "SmartyPants", markup: "none", filters: [:smartypants],
57
- params: {}).
58
- find_or_create_by!(name: "smartypants")
59
- TextFilter.
60
- create_with(description: "Markdown with SmartyPants", markup: "markdown",
61
- filters: [:smartypants], params: {}).
62
- find_or_create_by!(name: "markdown smartypants")
63
- TextFilter.
64
- create_with(description: "Textile", markup: "textile", filters: [], params: {}).
65
- find_or_create_by!(name: "textile")
49
+ TextFilter
50
+ .create_with(description: "None", markup: "none", filters: [], params: {})
51
+ .find_or_create_by!(name: "none")
52
+ TextFilter
53
+ .create_with(description: "Markdown", markup: "markdown", filters: [], params: {})
54
+ .find_or_create_by!(name: "markdown")
55
+ TextFilter
56
+ .create_with(description: "SmartyPants", markup: "none", filters: [:smartypants],
57
+ params: {})
58
+ .find_or_create_by!(name: "smartypants")
59
+ TextFilter
60
+ .create_with(description: "Markdown with SmartyPants", markup: "markdown",
61
+ filters: [:smartypants], params: {})
62
+ .find_or_create_by!(name: "markdown smartypants")
63
+ TextFilter
64
+ .create_with(description: "Textile", markup: "textile", filters: [], params: {})
65
+ .find_or_create_by!(name: "textile")
66
66
 
67
67
  Content.find_each do |content|
68
68
  filter_name = content.text_filter_name
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RemoveTableSitealizer < ActiveRecord::Migration[6.1]
4
+ def up
5
+ drop_table :sitealizer
6
+ end
7
+
8
+ def down
9
+ create_table :sitealizer do |t|
10
+ t.string :path
11
+ t.string :ip
12
+ t.string :referer
13
+ t.string :language
14
+ t.string :user_agent
15
+ t.datetime :created_at
16
+ t.date :created_on
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RemovePageCachesTable < ActiveRecord::Migration[6.1]
4
+ def up
5
+ drop_table :page_caches
6
+ end
7
+
8
+ def down
9
+ create_table :page_caches do |t|
10
+ t.string :name
11
+ end
12
+
13
+ add_index :page_caches, :name
14
+ end
15
+ end
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ class RemoveItunesFieldsFromResources < ActiveRecord::Migration[6.1]
4
+ def change
5
+ remove_column :resources, :itunes_metadata, :boolean
6
+ remove_column :resources, :itunes_author, :string
7
+ remove_column :resources, :itunes_subtitle, :string
8
+ remove_column :resources, :itunes_duration, :integer
9
+ remove_column :resources, :itunes_summary, :text
10
+ remove_column :resources, :itunes_keywords, :string
11
+ remove_column :resources, :itunes_category, :string
12
+ remove_column :resources, :itunes_explicit, :boolean
13
+ end
14
+ end
data/db/seeds.rb CHANGED
@@ -19,7 +19,3 @@ unless blog.sidebars.any?
19
19
  StaticSidebar.create!(active_position: 3, blog_id: blog.id)
20
20
  MetaSidebar.create!(active_position: 4, blog_id: blog.id)
21
21
  end
22
-
23
- unless File.directory?("#{::Rails.root}/public/files")
24
- Dir.mkdir("#{::Rails.root}/public/files")
25
- end
@@ -0,0 +1,11 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "rails_autolink/helpers"
4
+
5
+ module PublifyCore
6
+ class ContentTextHelpers
7
+ include ActionView::Helpers::UrlHelper
8
+ include ActionView::Helpers::TextHelper
9
+ include ActionView::Helpers::SanitizeHelper
10
+ end
11
+ end
@@ -4,6 +4,6 @@ module PublifyCore
4
4
  module Lang
5
5
  LIST = [:da_DK, :de_DE, :en_US, :es_MX, :fr_FR, :he_IL, :it_IT, :ja_JP,
6
6
  :lt_LT, :nb_NO, :nl_NL, :pl_PL, :ro_RO, :ru_RU, :zh_TW, :zh_CN,
7
- :pt_BR].freeze
7
+ :pt_BR, :ar_AR].freeze
8
8
  end
9
9
  end
@@ -0,0 +1,55 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :article do
5
+ title { "A big article" }
6
+ body { "A content with several data" }
7
+ extended { "extended content for fun" }
8
+ guid
9
+ published_at { Time.zone.now }
10
+ user
11
+ allow_comments { true }
12
+ state { :published }
13
+ allow_pings { true }
14
+ text_filter_name { "markdown" }
15
+
16
+ after :build do |article|
17
+ article.blog ||= Blog.first || create(:blog)
18
+ end
19
+
20
+ after :stub do |article|
21
+ article.blog ||= Blog.first || create(:blog)
22
+ end
23
+
24
+ trait :with_tags do
25
+ keywords { "a tag" }
26
+ end
27
+ end
28
+
29
+ factory :unpublished_article, parent: :article do
30
+ published_at { nil }
31
+ state { :draft }
32
+ end
33
+
34
+ factory :full_article, parent: :article do
35
+ after :create do |article|
36
+ article.resources << create(:resource)
37
+ article.tags << create(:tag)
38
+ end
39
+ end
40
+
41
+ factory :utf8article, parent: :article do
42
+ title { "ルビー" }
43
+ permalink { "ルビー" }
44
+ end
45
+
46
+ factory :second_article, parent: :article do
47
+ title { "Another big article" }
48
+ end
49
+
50
+ factory :article_with_accent_in_html, parent: :article do
51
+ title { "article with accent" }
52
+ body { "&eacute;coute The future is cool!" }
53
+ permalink { "article-with-accent" }
54
+ end
55
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :blog do
5
+ base_url { "http://test.host/blog" }
6
+ hide_extended_on_rss { true }
7
+ blog_name { "test blog" }
8
+ limit_article_display { 2 }
9
+ sp_url_limit { 3 }
10
+ plugin_avatar { "" }
11
+ blog_subtitle { "test subtitle" }
12
+ limit_rss_display { 10 }
13
+ geourl_location { "" }
14
+ default_allow_pings { false }
15
+ send_outbound_pings { false }
16
+ sp_global { true }
17
+ default_allow_comments { true }
18
+ email_from { "scott@sigkill.org" }
19
+ sp_article_auto_close { 0 }
20
+ permalink_format { "/%year%/%month%/%day%/%title%" }
21
+ rss_description_text { "rss description text" }
22
+ lang { "en_US" }
23
+ end
24
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :comment do
5
+ article
6
+ author { "Bob Foo" }
7
+ url { "http://fakeurl.com" }
8
+ body { "Comment body" }
9
+ guid
10
+ state { "ham" }
11
+
12
+ factory :unconfirmed_comment do
13
+ state { "presumed_ham" }
14
+ end
15
+
16
+ factory :published_comment do
17
+ state { "ham" }
18
+ end
19
+
20
+ factory :not_published_comment do
21
+ state { "spam" }
22
+ end
23
+
24
+ factory :ham_comment do
25
+ state { "ham" }
26
+ end
27
+
28
+ factory :presumed_ham_comment do
29
+ state { "presumed_ham" }
30
+ end
31
+
32
+ factory :presumed_spam_comment do
33
+ state { "presumed_spam" }
34
+ end
35
+
36
+ factory :spam_comment do
37
+ state { "spam" }
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :content do
5
+ blog { Blog.first || create(:blog) }
6
+ end
7
+ end
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :note do
5
+ body { "this is a note" }
6
+ published_at { Time.zone.now }
7
+ user
8
+ state { "published" }
9
+ text_filter_name { "markdown" }
10
+ guid
11
+ blog { Blog.first || create(:blog) }
12
+ end
13
+
14
+ factory :unpublished_note, parent: :note do
15
+ state { "draft" }
16
+ end
17
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :page do
5
+ name { FactoryBot.generate(:name) }
6
+ title { "Page One Title" }
7
+ body { FactoryBot.generate(:body) }
8
+ published_at { Time.zone.now }
9
+ user
10
+ blog { Blog.first || create(:blog) }
11
+ state { "published" }
12
+ end
13
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :post_type do
5
+ name { "foobar" }
6
+ description { "Some description" }
7
+ end
8
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :redirect do
5
+ from_path { "foo/bar" }
6
+ to_path { "/someplace/else" }
7
+ blog { Blog.first || create(:blog) }
8
+ end
9
+ end
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :resource do
5
+ upload { PublifyCore::TestingSupport::UploadFixtures.file_upload }
6
+ mime { "image/jpeg" }
7
+ size { 110 }
8
+ blog { Blog.first || create(:blog) }
9
+ end
10
+
11
+ factory :avatar, parent: :resource do
12
+ upload { "avatar.jpg" }
13
+ mime { "image/jpeg" }
14
+ size { 600 }
15
+ end
16
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ sequence(:name) { |n| "name_#{n}" }
5
+ sequence(:body) { |n| "body #{n}" * ((n % 5) + 3) }
6
+ sequence(:user) { |n| "user#{n}" }
7
+ sequence(:email) { |n| "user#{n}@example.com" }
8
+ sequence(:guid) { |n| "deadbeef#{n}" }
9
+ sequence(:label) { |n| "lab_#{n}" }
10
+ sequence(:file_name) { |f| "file_name_#{f}" }
11
+ sequence(:time) { |n| Time.new(2012, 3, 26, 19, 56).in_time_zone - n }
12
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :sidebar do
5
+ active_position { 1 }
6
+ config { { "title" => "Links", "body" => "some links" } }
7
+ type { "StaticSidebar" }
8
+ blog { Blog.first || create(:blog) }
9
+ end
10
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :tag do |tag|
5
+ tag.name { FactoryBot.generate(:name) }
6
+ tag.display_name { |a| a.name } # rubocop:disable Style/SymbolProc
7
+ blog { Blog.first || create(:blog) }
8
+ end
9
+ end
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :trackback do
5
+ state { "ham" }
6
+ article
7
+ blog_name { "Trackback Blog" }
8
+ title { "Trackback Entry" }
9
+ url { "http://www.example.com" }
10
+ excerpt { "This is an excerpt" }
11
+ guid { "dsafsadffsdsf" }
12
+ end
13
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ FactoryBot.define do
4
+ factory :user do
5
+ login { FactoryBot.generate(:user) }
6
+ email { generate(:email) }
7
+ name { "Bond" }
8
+ nickname { "James Bond" }
9
+ notify_via_email { false }
10
+ notify_on_new_articles { false }
11
+ notify_on_comments { false }
12
+ password { "top-Secret12!$#" }
13
+ state { "active" }
14
+ profile { User::CONTRIBUTOR }
15
+
16
+ trait :without_twitter do
17
+ twitter { nil }
18
+ association :resource, nil
19
+ end
20
+
21
+ trait :with_a_full_profile do
22
+ description { "I am a poor lonesone factory generated user" }
23
+ url { "http://myblog.net" }
24
+ msn { "random@mail.com" }
25
+ aim { "randomaccount" }
26
+ yahoo { "anotherrandomaccount" }
27
+ twitter { "@random" }
28
+ jabber { "random@account.com" }
29
+ end
30
+
31
+ trait :as_admin do
32
+ profile { User::ADMIN }
33
+ end
34
+
35
+ trait :as_publisher do
36
+ profile { User::PUBLISHER }
37
+ end
38
+
39
+ trait :as_contributor do
40
+ profile { User::CONTRIBUTOR }
41
+ end
42
+ end
43
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PublifyCore
4
- VERSION = "9.2.10"
4
+ VERSION = "10.0.0"
5
5
  end
data/lib/publify_core.rb CHANGED
@@ -7,13 +7,13 @@ require "devise_zxcvbn"
7
7
  require "publify_core/version"
8
8
  require "publify_core/engine"
9
9
  require "publify_core/lang"
10
+ require "publify_core/content_text_helpers"
10
11
 
11
12
  require "carrierwave"
12
- require "dynamic_form"
13
13
  require "jquery-rails"
14
14
  require "jquery-ui-rails"
15
15
  require "kaminari"
16
- require "rails_autolink"
16
+ require "rails-i18n"
17
17
  require "rails-timeago"
18
18
  require "recaptcha/rails"
19
19
  require "sassc-rails"
@@ -22,8 +22,8 @@ require "email_notify"
22
22
  require "publify_guid"
23
23
  require "publify_textfilter_none"
24
24
  require "publify_textfilter_markdown"
25
+ require "publify_textfilter_markdown_smartquotes"
25
26
  require "publify_textfilter_smartypants"
26
- require "publify_textfilter_textile"
27
27
  require "publify_textfilter_twitterfilter"
28
28
  require "publify_time"
29
29
  require "sidebar_registry"
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require "text_filter_plugin"
4
- require "bluecloth"
4
+ require "commonmarker"
5
5
 
6
6
  # TODO: Move to a different namespace
7
7
  class PublifyApp
@@ -9,7 +9,7 @@ class PublifyApp
9
9
  class Markdown < TextFilterPlugin::Markup
10
10
  plugin_display_name "Markdown"
11
11
  plugin_description "Markdown markup language from" \
12
- ' <a href="http://daringfireball.com/">Daring Fireball</a>'
12
+ ' <a href="http://daringfireball.com/">Daring Fireball</a>'
13
13
 
14
14
  def self.help_text
15
15
  <<~TXT
@@ -19,9 +19,9 @@ class PublifyApp
19
19
  available from the author's site, but here's a short summary:
20
20
 
21
21
  * **Paragraphs**: Start a new paragraph by skipping a line.
22
- * **Italics**: Put text in *italics* by enclosing it in either \* or
23
- \_: `*italics*` turns into *italics*.
24
- * **Bold**: Put text in **bold** by enclosing it in two \*s:
22
+ * **Italics**: Put text in *italics* by enclosing it in either * or
23
+ _: `*italics*` turns into *italics*.
24
+ * **Bold**: Put text in **bold** by enclosing it in two *s:
25
25
  `**bold**` turns into **bold**.
26
26
  * **Pre-formatted text**: Enclosing a short block of text in
27
27
  backquotes (&#96;) displays it in a monospaced font and converts HTML
@@ -46,11 +46,10 @@ class PublifyApp
46
46
  end
47
47
 
48
48
  def self.filtertext(text)
49
- # FIXME: Workaround for BlueCloth not interpreting <publify:foo> as an
50
- # HTML tag. See <http://deveiate.org/projects/BlueCloth/ticket/70>.
49
+ # FIXME: Workaround for <publify:foo> not being interpreted as an HTML tag.
51
50
  escaped_macros = text.gsub(%r{(</?publify):}, '\1X')
52
- html = BlueCloth.new(escaped_macros).to_html.gsub(%r{</?notextile>}, "")
53
- html.gsub(%r{(</?publify)X}, '\1:')
51
+ html = CommonMarker.render_html(escaped_macros, :UNSAFE)
52
+ html.gsub(%r{(</?publify)X}, '\1:').strip
54
53
  end
55
54
  end
56
55
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "text_filter_plugin"
4
+ require "publify_textfilter_markdown"
5
+
6
+ module PublifyTextfilter
7
+ class MarkdownSmartquotes < PublifyApp::Textfilter::Markdown
8
+ plugin_display_name "Markdown with smart quotes"
9
+ plugin_description "Markdown markup language from" \
10
+ ' <a href="http://daringfireball.com/">Daring Fireball</a>' \
11
+ " with automatic use of typographically correct quotes and dashes"
12
+
13
+ def self.filtertext(text)
14
+ # FIXME: Workaround for <publify:foo> not being interpreted as an HTML tag.
15
+ escaped_macros = text.gsub(%r{(</?publify):}, '\1X')
16
+ html = CommonMarker.render_doc(escaped_macros, :SMART).to_html(:UNSAFE)
17
+ html.gsub(%r{(</?publify)X}, '\1:').strip
18
+ end
19
+ end
20
+ end