publify_core 9.0.1 → 9.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of publify_core might be problematic. Click here for more details.

Files changed (81) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +5 -0
  3. data/app/controllers/admin/base_controller.rb +0 -11
  4. data/app/controllers/admin/content_controller.rb +7 -18
  5. data/app/controllers/admin/dashboard_controller.rb +1 -2
  6. data/app/controllers/admin/feedback_controller.rb +1 -0
  7. data/app/controllers/admin/notes_controller.rb +1 -1
  8. data/app/controllers/admin/pages_controller.rb +6 -19
  9. data/app/controllers/admin/profiles_controller.rb +11 -3
  10. data/app/controllers/admin/seo_controller.rb +1 -3
  11. data/app/controllers/admin/sidebar_controller.rb +0 -2
  12. data/app/controllers/admin/users_controller.rb +2 -2
  13. data/app/controllers/comments_controller.rb +6 -10
  14. data/app/controllers/setup_controller.rb +1 -2
  15. data/app/helpers/admin/base_helper.rb +1 -2
  16. data/app/helpers/base_helper.rb +2 -19
  17. data/app/helpers/xml_helper.rb +1 -1
  18. data/app/models/article.rb +4 -12
  19. data/app/models/blog.rb +9 -17
  20. data/app/models/content.rb +6 -16
  21. data/app/models/feedback.rb +2 -1
  22. data/app/models/meta_sidebar.rb +0 -2
  23. data/app/models/note.rb +2 -3
  24. data/app/models/page.rb +1 -2
  25. data/app/models/ping.rb +1 -1
  26. data/app/models/post_type.rb +1 -3
  27. data/app/models/redirect.rb +3 -2
  28. data/app/models/redirection.rb +1 -1
  29. data/app/models/resource.rb +1 -1
  30. data/app/models/sidebar.rb +1 -1
  31. data/app/models/static_sidebar.rb +0 -2
  32. data/app/models/tag.rb +1 -1
  33. data/app/models/text_filter.rb +1 -1
  34. data/app/models/trigger.rb +2 -2
  35. data/app/models/user.rb +1 -1
  36. data/app/services/title_builder.rb +7 -11
  37. data/app/uploaders/resource_uploader.rb +1 -3
  38. data/app/views/admin/content/_form.html.erb +1 -1
  39. data/app/views/admin/content/autosave.js.erb +2 -2
  40. data/app/views/admin/pages/_form.html.erb +6 -6
  41. data/app/views/admin/seo/_general.html.erb +1 -1
  42. data/app/views/admin/seo/_permalinks.html.erb +2 -2
  43. data/app/views/admin/users/_form.html.erb +2 -2
  44. data/app/views/articles/view_page.html.erb +1 -1
  45. data/app/views/shared/_atom_header.atom.builder +1 -3
  46. data/app/views/shared/_atom_item_article.atom.builder +9 -13
  47. data/app/views/shared/_google_analytics.html.erb +8 -0
  48. data/app/views/shared/_page_header.html.erb +1 -1
  49. data/app/views/shared/_rss_item_article.rss.builder +2 -3
  50. data/config/initializers/mime_types.rb +1 -1
  51. data/config/locales/da.yml +1 -3
  52. data/config/locales/de.yml +1 -3
  53. data/config/locales/en.yml +1 -3
  54. data/config/locales/es-MX.yml +1 -3
  55. data/config/locales/fr.yml +1 -3
  56. data/config/locales/he.yml +1 -3
  57. data/config/locales/it.yml +1 -3
  58. data/config/locales/ja.yml +1 -3
  59. data/config/locales/lt.yml +1 -3
  60. data/config/locales/nb-NO.yml +1 -3
  61. data/config/locales/nl.yml +1 -3
  62. data/config/locales/pl.yml +193 -195
  63. data/config/locales/pt-BR.yml +1 -3
  64. data/config/locales/ro.yml +1 -3
  65. data/config/locales/ru.yml +1 -3
  66. data/config/locales/zh-CN.yml +1 -3
  67. data/config/locales/zh-TW.yml +1 -3
  68. data/config/routes.rb +1 -1
  69. data/db/migrate/113_initial_schema.rb +0 -2
  70. data/db/migrate/114_fixes_buggy_articles_and_notes.rb +1 -1
  71. data/db/migrate/115_drops_categories_for_tags.rb +3 -4
  72. data/db/migrate/20150807134129_simplify_redirect_relations.rb +1 -3
  73. data/db/migrate/20150808052637_add_blog_ids.rb +5 -1
  74. data/db/seeds.rb +1 -3
  75. data/lib/format.rb +1 -11
  76. data/lib/publify_core/version.rb +1 -1
  77. data/lib/spam_protection.rb +3 -4
  78. data/lib/text_filter_plugin.rb +3 -4
  79. data/lib/theme.rb +1 -3
  80. data/lib/transforms.rb +0 -2
  81. metadata +87 -80
data/app/models/blog.rb CHANGED
@@ -5,7 +5,7 @@
5
5
  # Once upon a time, there were plans to make publify handle multiple blogs,
6
6
  # but it never happened and publify is now firmly single-blog.
7
7
  #
8
- class Blog < ActiveRecord::Base
8
+ class Blog < ApplicationRecord
9
9
  include ConfigManager
10
10
  include Rails.application.routes.url_helpers
11
11
 
@@ -73,16 +73,16 @@ class Blog < ActiveRecord::Base
73
73
  setting :meta_keywords, :string, ''
74
74
  setting :google_analytics, :string, ''
75
75
  setting :rss_description, :boolean, false
76
- setting :rss_description_text, :string, <<EOS.strip_heredoc
76
+ setting :rss_description_text, :string, <<-HTML.strip_heredoc
77
77
  <hr />
78
78
  <p><small>Original article written by %author% and published on <a href='%blog_url%'>%blog_name%</a>
79
79
  | <a href='%permalink_url%'>direct link to this article</a>
80
80
  | If you are reading this article anywhere other than on <a href='%blog_url%'>%blog_name%</a>,
81
81
  it has been illegally reproduced and without proper authorization.</small></p>
82
- EOS
82
+ HTML
83
83
  setting :permalink_format, :string, '/%year%/%month%/%day%/%title%'
84
84
  setting :robots, :string, 'User-agent: *\nAllow: /\nDisallow: /admin\n'
85
- setting :humans, :string, <<EOS.strip_heredoc
85
+ setting :humans, :string, <<-TEXT.strip_heredoc
86
86
  /* TEAM */
87
87
  Your title: Your name.
88
88
  Site: email, link to a contact form, etc.
@@ -90,7 +90,7 @@ EOS
90
90
 
91
91
  /* SITE */
92
92
  Software: Publify [http://publify.co] #{PublifyCore::VERSION}
93
- EOS
93
+ TEXT
94
94
  setting :index_categories, :boolean, true # deprecated but still needed for backward compatibility
95
95
  setting :unindex_categories, :boolean, false
96
96
  setting :index_tags, :boolean, true # deprecated but still needed for backward compatibility
@@ -179,9 +179,7 @@ EOS
179
179
  host: host_with_port,
180
180
  script_name: root_path)
181
181
  cache_key = merged_opts.values.prepend('blog-urlfor-withbaseurl').join('-')
182
- unless Rails.cache.exist?(cache_key)
183
- Rails.cache.write(cache_key, super(merged_opts))
184
- end
182
+ Rails.cache.write(cache_key, super(merged_opts)) unless Rails.cache.exist?(cache_key)
185
183
  Rails.cache.read(cache_key)
186
184
  else
187
185
  raise "Invalid URL in url_for: #{options.inspect}"
@@ -219,13 +217,9 @@ EOS
219
217
  end
220
218
 
221
219
  def permalink_has_identifier
222
- unless permalink_format =~ /(%title%)/
223
- errors.add(:base, I18n.t('errors.permalink_need_a_title'))
224
- end
220
+ errors.add(:base, I18n.t('errors.permalink_need_a_title')) unless permalink_format =~ /(%title%)/
225
221
 
226
- if permalink_format =~ /\.(atom|rss)$/
227
- errors.add(:permalink_format, I18n.t('errors.cant_end_with_rss_or_atom'))
228
- end
222
+ errors.add(:permalink_format, I18n.t('errors.cant_end_with_rss_or_atom')) if permalink_format =~ /\.(atom|rss)$/
229
223
  end
230
224
 
231
225
  def root_path
@@ -258,9 +252,7 @@ EOS
258
252
 
259
253
  def split_base_url
260
254
  unless @split_base_url
261
- unless base_url =~ /(https?):\/\/([^\/]*)(.*)/
262
- raise "Invalid base_url: #{base_url}"
263
- end
255
+ raise "Invalid base_url: #{base_url}" unless base_url =~ %r{(https?)://([^/]*)(.*)}
264
256
  @split_base_url = { protocol: Regexp.last_match[1], host_with_port: Regexp.last_match[2], root_path: Regexp.last_match[3].gsub(%r{/$}, '') }
265
257
  end
266
258
  @split_base_url
@@ -1,7 +1,7 @@
1
1
  require 'set'
2
2
  require 'uri'
3
3
 
4
- class Content < ActiveRecord::Base
4
+ class Content < ApplicationRecord
5
5
  include ContentBase
6
6
 
7
7
  belongs_to :text_filter, optional: true
@@ -18,11 +18,7 @@ class Content < ActiveRecord::Base
18
18
 
19
19
  scope :user_id, ->(user_id) { where('user_id = ?', user_id) }
20
20
  scope :published, -> { where(state: 'published'). order(default_order) }
21
- scope :published_at, ->(time_params) {
22
- published.
23
- where(published_at: PublifyTime.delta(*time_params)).
24
- order('published_at DESC')
25
- }
21
+ scope :published_at, ->(time_params) { published.where(published_at: PublifyTime.delta(*time_params)) }
26
22
  scope :not_published, -> { where.not(state: 'published') }
27
23
  scope :drafts, -> { where(state: 'draft').order('created_at DESC') }
28
24
  scope :no_draft, -> { where.not(state: 'draft').order('published_at DESC') }
@@ -93,17 +89,11 @@ class Content < ActiveRecord::Base
93
89
  def self.search_with(params)
94
90
  params ||= {}
95
91
  scoped = unscoped
96
- if params[:searchstring].present?
97
- scoped = scoped.searchstring(params[:searchstring])
98
- end
92
+ scoped = scoped.searchstring(params[:searchstring]) if params[:searchstring].present?
99
93
 
100
- if params[:published_at].present? && /(\d\d\d\d)-(\d\d)/ =~ params[:published_at]
101
- scoped = scoped.published_at_like(params[:published_at])
102
- end
94
+ scoped = scoped.published_at_like(params[:published_at]) if params[:published_at].present? && /(\d\d\d\d)-(\d\d)/ =~ params[:published_at]
103
95
 
104
- if params[:user_id].present? && params[:user_id].to_i > 0
105
- scoped = scoped.user_id(params[:user_id])
106
- end
96
+ scoped = scoped.user_id(params[:user_id]) if params[:user_id].present? && params[:user_id].to_i > 0
107
97
 
108
98
  if params[:published].present?
109
99
  scoped = scoped.published if params[:published].to_s == '1'
@@ -117,7 +107,7 @@ class Content < ActiveRecord::Base
117
107
  self[:whiteboard] ||= {}
118
108
  end
119
109
 
120
- def get_rss_description
110
+ def rss_description
121
111
  return '' unless blog.rss_description
122
112
 
123
113
  rss_desc = blog.rss_description_text
@@ -3,7 +3,7 @@
3
3
  require 'aasm'
4
4
  require 'akismet'
5
5
 
6
- class Feedback < ActiveRecord::Base
6
+ class Feedback < ApplicationRecord
7
7
  self.table_name = 'feedback'
8
8
 
9
9
  belongs_to :text_filter, optional: true
@@ -68,6 +68,7 @@ class Feedback < ActiveRecord::Base
68
68
  end
69
69
  end
70
70
 
71
+ # FIXME: Inline this method
71
72
  def self.paginated(page, per_page)
72
73
  page(page).per(per_page)
73
74
  end
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  class MetaSidebar < Sidebar
4
2
  description "This widget just displays links to Publify main site, this blog's admin and RSS."
5
3
 
data/app/models/note.rb CHANGED
@@ -113,8 +113,7 @@ class Note < Content
113
113
  action: 'show',
114
114
  permalink: permalink,
115
115
  anchor: anchor,
116
- only_path: only_path
117
- )
116
+ only_path: only_path)
118
117
  end
119
118
 
120
119
  def short_link
@@ -123,7 +122,7 @@ class Note < Content
123
122
  end
124
123
 
125
124
  def prefix
126
- blog.shortener_url.sub(/^https?\:\/\//, '')
125
+ blog.shortener_url.sub(%r{^https?://}, '')
127
126
  end
128
127
 
129
128
  def published?
data/app/models/page.rb CHANGED
@@ -26,8 +26,7 @@ class Page < Content
26
26
  action: 'view_page',
27
27
  name: name,
28
28
  anchor: anchor,
29
- only_path: only_path
30
- )
29
+ only_path: only_path)
31
30
  end
32
31
 
33
32
  def publish!
data/app/models/ping.rb CHANGED
@@ -1,3 +1,3 @@
1
- class Ping < ActiveRecord::Base
1
+ class Ping < ApplicationRecord
2
2
  belongs_to :article
3
3
  end
@@ -1,6 +1,4 @@
1
- # coding: utf-8
2
-
3
- class PostType < ActiveRecord::Base
1
+ class PostType < ApplicationRecord
4
2
  validates :name, uniqueness: true
5
3
  validates :name, presence: true
6
4
  validate :name_is_not_read
@@ -1,4 +1,4 @@
1
- class Redirect < ActiveRecord::Base
1
+ class Redirect < ApplicationRecord
2
2
  belongs_to :contents, optional: true, touch: true
3
3
  belongs_to :blog
4
4
 
@@ -8,7 +8,8 @@ class Redirect < ActiveRecord::Base
8
8
 
9
9
  def full_to_path
10
10
  path = to_path
11
- return path if path =~ /^(https?):\/\/([^\/]*)(.*)/
11
+ # FIXME: Unify HTTP URI matchers
12
+ return path if path =~ %r{^(https?)://([^/]*)(.*)}
12
13
  url_root = blog.root_path
13
14
  path = File.join(url_root, path) unless url_root.nil? || path[0, url_root.length] == url_root
14
15
  path
@@ -1,4 +1,4 @@
1
- class Redirection < ActiveRecord::Base
1
+ class Redirection < ApplicationRecord
2
2
  belongs_to :content
3
3
  belongs_to :redirect
4
4
  end
@@ -1,7 +1,7 @@
1
1
  require 'carrierwave'
2
2
  require 'carrierwave/orm/activerecord'
3
3
 
4
- class Resource < ActiveRecord::Base
4
+ class Resource < ApplicationRecord
5
5
  belongs_to :blog
6
6
  belongs_to :content, optional: true
7
7
 
@@ -1,7 +1,7 @@
1
1
  require 'sidebar_field'
2
2
 
3
3
  # This class cannot be autoloaded since other sidebar classes depend on it.
4
- class Sidebar < ActiveRecord::Base
4
+ class Sidebar < ApplicationRecord
5
5
  serialize :config, Hash
6
6
 
7
7
  belongs_to :blog
@@ -1,5 +1,3 @@
1
- # coding: utf-8
2
-
3
1
  class StaticSidebar < Sidebar
4
2
  DEFAULT_TEXT = '
5
3
  <ul>
data/app/models/tag.rb CHANGED
@@ -1,4 +1,4 @@
1
- class Tag < ActiveRecord::Base
1
+ class Tag < ApplicationRecord
2
2
  belongs_to :blog
3
3
  has_and_belongs_to_many :contents, order: 'created_at DESC'
4
4
 
@@ -1,6 +1,6 @@
1
1
  require 'net/http'
2
2
 
3
- class TextFilter < ActiveRecord::Base
3
+ class TextFilter < ApplicationRecord
4
4
  serialize :filters, Array
5
5
  serialize :params, Hash
6
6
 
@@ -1,4 +1,4 @@
1
- class Trigger < ActiveRecord::Base
1
+ class Trigger < ApplicationRecord
2
2
  belongs_to :pending_item, polymorphic: true
3
3
 
4
4
  class << self
@@ -9,7 +9,7 @@ class Trigger < ActiveRecord::Base
9
9
  end
10
10
 
11
11
  def fire
12
- where('due_at <= ?', Time.now).destroy_all
12
+ where('due_at <= ?', Time.zone.now).destroy_all
13
13
  true
14
14
  end
15
15
 
data/app/models/user.rb CHANGED
@@ -2,7 +2,7 @@ require 'digest/sha1'
2
2
 
3
3
  # Publify user.
4
4
  # TODO: Should belong to a blog
5
- class User < ActiveRecord::Base
5
+ class User < ApplicationRecord
6
6
  ADMIN = 'admin'.freeze
7
7
  PUBLISHER = 'publisher'.freeze
8
8
  CONTRIBUTOR = 'contributor'.freeze
@@ -18,10 +18,10 @@ class TitleBuilder
18
18
 
19
19
  def substitute_time(s, settings)
20
20
  # Other
21
- s = s.gsub('%currentdate%', Time.now.strftime(settings.date_format))
22
- s = s.gsub('%currenttime%', Time.now.strftime(settings.time_format))
23
- s = s.gsub('%currentmonth%', Time.now.strftime('%B'))
24
- s = s.gsub('%currentyear%', Time.now.year.to_s)
21
+ s = s.gsub('%currentdate%', Time.zone.now.strftime(settings.date_format))
22
+ s = s.gsub('%currenttime%', Time.zone.now.strftime(settings.time_format))
23
+ s = s.gsub('%currentmonth%', Time.zone.now.strftime('%B'))
24
+ s = s.gsub('%currentyear%', Time.zone.now.year.to_s)
25
25
  s
26
26
  end
27
27
 
@@ -34,13 +34,9 @@ class TitleBuilder
34
34
  s = s.gsub('%author%', item.name) if s =~ /%author%/ && item.respond_to?(:name)
35
35
  s = s.gsub('%body%', item.body) if s =~ /%body%/ && item.respond_to?(:body)
36
36
 
37
- if s =~ /%categories%/ && item.respond_to?(:categories)
38
- s = s.gsub('%categories%', item.categories.map(&:name).join(', '))
39
- end
37
+ s = s.gsub('%categories%', item.categories.map(&:name).join(', ')) if s =~ /%categories%/ && item.respond_to?(:categories)
40
38
 
41
- if s =~ /%tags%/ && item.respond_to?(:tags)
42
- s = s.gsub('%tags%', item.tags.map(&:display_name).join(', '))
43
- end
39
+ s = s.gsub('%tags%', item.tags.map(&:display_name).join(', ')) if s =~ /%tags%/ && item.respond_to?(:tags)
44
40
 
45
41
  s
46
42
  end
@@ -70,7 +66,7 @@ class TitleBuilder
70
66
  format << '%B ' if params[:month]
71
67
  format << '%Y' if params[:year]
72
68
 
73
- string.gsub('%date%', Time.mktime(*params.values_at(:year, :month, :day)).strftime(format))
69
+ string.gsub('%date%', Time.zone.local(*params.values_at(:year, :month, :day)).strftime(format))
74
70
  end
75
71
 
76
72
  def parse_page(_string, params)
@@ -34,9 +34,7 @@ class ResourceUploader < CarrierWave::Uploader::Base
34
34
  def check_image_content_type!(new_file)
35
35
  if image?(new_file)
36
36
  magic_type = mime_magic_content_type(new_file)
37
- if magic_type != new_file.content_type
38
- raise CarrierWave::IntegrityError, 'has MIME type mismatch'
39
- end
37
+ raise CarrierWave::IntegrityError, 'has MIME type mismatch' if magic_type != new_file.content_type
40
38
  end
41
39
  end
42
40
 
@@ -25,7 +25,7 @@
25
25
  <div class="row">
26
26
  <div class="col-md-2" id="quicktags-block">
27
27
  <div id="quicktags" class="pull-right">
28
- <script type="text/javascript">edToolbar('article_body_and_extended', '<%= @article.text_filter %>');</script>
28
+ <script type="text/javascript">edToolbar('article_body_and_extended', '<%= @article.text_filter.name %>');</script>
29
29
  </div>
30
30
  </div>
31
31
  <div class="col-md-8">
@@ -1,5 +1,5 @@
1
1
  $('#autosave').html('<%= hidden_field_tag('article[id]', @article.id) %>');
2
2
  $('#preview_link').replaceWith('<%= link_to('Preview', {:controller => '/articles', :action => 'preview', :id => @article.id}, {:target => 'new', :class => 'btn btn-default'}); %>');
3
3
  <% if @article.state.to_s.downcase == "draft" %>
4
- $("#article_published_at").val(<% Time.now() %>);
5
- <% end %>
4
+ $("#article_published_at").val(<% Time.zone.now() %>);
5
+ <% end %>
@@ -18,7 +18,7 @@
18
18
  <span class='pull-right'>
19
19
  <%= link_to(t('.cancel'), {action: 'index'}, {class: 'btn btn-default'}) %>
20
20
  <!-- Button trigger modal -->
21
- <button class="btn btn-success" data-toggle="modal" data-target="#publish">
21
+ <button class="btn btn-success" data-toggle="modal" type="button" data-target="#publish">
22
22
  <%= controller.action_name == "new" ? t(".publish") : t(".save") %>
23
23
  </button>
24
24
  </span>
@@ -34,7 +34,7 @@
34
34
  <div class='row'>
35
35
  <div class='col-md-2' id='quicktags-block'>
36
36
  <div id='quicktags' class='pull-right'>
37
- <script type="text/javascript">edToolbar('page_body', '<%= @page.text_filter %>');</script>
37
+ <script type="text/javascript">edToolbar('page_body', '<%= @page.text_filter.name %>');</script>
38
38
  </div>
39
39
  </div>
40
40
 
@@ -69,11 +69,11 @@
69
69
  <fieldset>
70
70
  <legend><%= t(".publish_settings") %></legend>
71
71
  <div class='control-group'>
72
- <%= t(".status") %>: <strong><%= (@page.published?) ? t(".published") : t(".offline") %></strong>
72
+ <%= t(".status") %>: <strong><%= @page.state %></strong>
73
73
  <%= toggle_element('status') %>
74
74
  <div id='status' class='collapse'>
75
75
  <label for="page_published" class='checkbox'>
76
- <%= check_box 'page', 'published?' %>
76
+ <%= check_box 'page', 'state', {}, 'published', '' %>
77
77
  <%= t(".online")%>
78
78
  </label>
79
79
  <p><span class='btn btn-default btn-mini'><%= toggle_element 'status', "OK" %></span></p>
@@ -82,8 +82,8 @@
82
82
  <div class='control-group'>
83
83
  <%= t(".article_filter") %>: <strong><%= @page.text_filter.description %></strong> <%= toggle_element 'text_filter' %>
84
84
  <div id='text_filter' class='collapse'>
85
- <select name="page[text_filter]" id="text_filter" class='form-control'>
86
- <%= options_for_select text_filter_options, @page.text_filter %>
85
+ <select name="page[text_filter_id]" id="text_filter" class='form-control'>
86
+ <%= options_for_select text_filter_options_with_id, @page.text_filter.id %>
87
87
  </select>
88
88
  <p><span class='btn btn-mini btn-default'><%= toggle_element 'text_filter', "OK" %></span></p>
89
89
  </div>
@@ -33,7 +33,7 @@
33
33
  </label>
34
34
  </div>
35
35
  <small class='help-block'><%= t('.this_will_display') %></small>
36
- <%= Article.first.get_rss_description if Article.first %>
36
+ <%= Article.first.rss_description if Article.first %>
37
37
  </div>
38
38
  </div>
39
39
  <div class='form-group'>
@@ -12,12 +12,12 @@
12
12
  <%= radio_button(:setting, :permalink_format, '/%year%/%month%/%day%/%title%') %>
13
13
  <%= t(".date_and_title") %>
14
14
  </label>
15
- <small class='help-block'><%= "#{this_blog.base_url}/#{Time.now.strftime('%Y/%m/%d')}/sample-article" %></small>
15
+ <small class='help-block'><%= "#{this_blog.base_url}/#{Time.zone.now.strftime('%Y/%m/%d')}/sample-article" %></small>
16
16
  <label for="setting_permalink_format_yearmonthtitle">
17
17
  <%= radio_button(:setting, :permalink_format, '/%year%/%month%/%title%') %>
18
18
  <%= t(".month_and_title") %>
19
19
  </label>
20
- <small class='help-block'><%= "#{this_blog.base_url}/#{Time.now.strftime('%Y/%m')}/sample-article" %></small>
20
+ <small class='help-block'><%= "#{this_blog.base_url}/#{Time.zone.now.strftime('%Y/%m')}/sample-article" %></small>
21
21
  <label for="setting_permalink_format_title">
22
22
  <%= radio_button(:setting, :permalink_format, '/%title%') %> <%= t(".title_only") %>
23
23
  </label>
@@ -87,9 +87,9 @@
87
87
  </div>
88
88
  <% end %>
89
89
  <div class='form-group'>
90
- <label class='control-label col-sm-2' for="text_filter"><%= t('.article_filter') %></label>
90
+ <label class='control-label col-sm-2' for="text_filter_id"><%= t('.article_filter') %></label>
91
91
  <div class='col-sm-5'>
92
- <select name="user[text_filter_id]" id="text_filter" class='form-control'>
92
+ <select name="user[text_filter_id]" id="text_filter_id" class='form-control'>
93
93
  <%= options_for_select text_filter_options_with_id, user.text_filter.id %>
94
94
  </select>
95
95
  </div>
@@ -1,3 +1,3 @@
1
1
  <div id="viewpage" >
2
- <%= html @page %>
2
+ <%= raw html @page %>
3
3
  </div>