publify_core 9.2.10 → 10.0.0

Sign up to get free protection for your applications and to get access to all the features.
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