Compare commits

..

15 commits

Author SHA1 Message Date
Uģis Ozols
48cdc50e31 Merge pull request #233 from resolve/comment_mailer
Remove seemingly hacky comment_mailer model.
2012-05-14 21:57:47 -07:00
Uģis Ozols
e1d6eb4ef1 Merge pull request #232 from resolve/deprecations
Fixed deprecation warnings
2012-05-14 20:58:48 -07:00
Philip Arndt
7856e98f6a Do we really need a model called comment_mailer? 2012-05-15 12:25:49 +12:00
Philip Arndt
6359997b05 fixed deprecation warnings 2012-05-15 12:22:31 +12:00
Philip Arndt
940046daf6 Incrementing version to 2.0.4 as I wasn't up to date with git when I pushed that last gem :( 2012-05-14 16:59:06 +12:00
Philip Arndt
b335ea5482 Increment version to 2.0.3 2012-05-14 16:58:11 +12:00
Pete Higgins
172134f971 Fix MassAssignmentSecurity::Error in integration test. 2012-04-20 14:43:35 +03:00
Matt Garrison
e9406d2693 Adding attr_accessible for Rails 3.2 mass assignment fixes. 2012-04-20 14:41:13 +03:00
Uģis Ozols
6cbf130c83 Notification recipients should be specified using :to instead of :recipients. Fixes #226. 2012-04-19 17:43:11 +03:00
Philip Arndt
01fa464c33 Merge pull request #222 from wakeless/fix-page-caching-2-0
Fix page caching on index when pages param is present.
2012-04-10 21:20:04 -07:00
Michael Gall
87b9aacb98 Fix page caching on index when pages param is present.
fixes #145

Conflicts:

	app/controllers/refinery/blog/posts_controller.rb
2012-04-11 14:16:29 +10:00
Philip Arndt
93c2726f0b We can now depend on refinerycms ~> 2.0.3 and mark this as version 2.0.2 2012-04-06 22:29:27 +12:00
Philip Arndt
5b0828b408 Specify a minimum version of refinerycms and Gemfile it so that it can be used to test the next release. 2012-03-27 12:53:32 +13:00
Philip Arndt
822c933f56 Update seo_meta dependency to ~> 1.3.0 2012-03-27 12:13:07 +13:00
Uģis Ozols
bb900f1995 Add rake db:seed to install steps. 2012-03-09 17:07:41 +02:00
38 changed files with 83 additions and 275 deletions

View file

@ -10,11 +10,9 @@ notifications:
env:
- DB=postgresql
- DB=mysql
matrix:
allow_failures:
- rvm: rbx-19mode
rvm:
- 1.8.7
- 1.9.2
- 1.9.3
- rbx-19mode
- rbx
- jruby

View file

@ -2,14 +2,12 @@ source "http://rubygems.org"
gemspec
gem 'refinerycms', :git => 'git://github.com/resolve/refinerycms.git'
gem 'refinerycms-i18n', :git => 'git://github.com/parndt/refinerycms-i18n.git'
gem 'refinerycms-settings', :git => 'git://github.com/parndt/refinerycms-settings.git'
gem 'refinerycms', '~> 2.0.3'
group :development, :test do
require 'rbconfig'
gem 'refinerycms-testing', :git => 'git://github.com/resolve/refinerycms.git'
gem 'refinerycms-testing', '~> 2.0.0'
platforms :jruby do
gem 'activerecord-jdbcsqlite3-adapter'

View file

@ -57,7 +57,7 @@ module Refinery
unless request.xhr?
redirect_to :back
else
render "/shared/message"
render :partial => "/shared/message"
end
end
else

View file

@ -23,7 +23,7 @@ module Refinery
@comment = Comment.new
@canonical = url_for(:locale => ::Refinery::I18n.default_frontend_locale) if canonical?
@post.increment!(:access_count, 1)
respond_with (@post) do |format|
@ -60,7 +60,7 @@ module Refinery
date = "#{params[:month]}/#{params[:year]}"
@archive_date = Time.parse(date)
@date_title = @archive_date.strftime('%B %Y')
@posts = Post.live.by_month(@archive_date).page(params[:page])
@posts = Post.live.by_archive(@archive_date).page(params[:page])
else
date = "01/#{params[:year]}"
@archive_date = Time.parse(date)
@ -76,7 +76,6 @@ module Refinery
@posts = Post.tagged_with(@tag_name).page(params[:page])
end
protected
def canonical?
::Refinery.i18n_enabled? && ::Refinery::I18n.default_frontend_locale != ::Refinery::I18n.current_frontend_locale
end

View file

@ -14,7 +14,7 @@ module Refinery
attr_accessible :title
def post_count
posts.live.count
posts.select(&:live?).count
end
# how many items to show per page

View file

@ -49,19 +49,14 @@ module Refinery
end
def friendly_id_source
custom_url.presence || title
custom_url.present? ? custom_url : title
end
class << self
def by_month(date)
def by_archive(date)
where(:published_at => date.beginning_of_month..date.end_of_month)
end
def by_archive(date)
Refinery.deprecate("Refinery::Blog::Post.by_archive(date)", {:replacement => "Refinery::Blog::Post.by_month(date)", :when => 2.2 })
by_month(date)
end
def by_year(date)
where(:published_at => date.beginning_of_year..date.end_of_year)
end

View file

@ -1 +1 @@
<%= render "form" %>
<%= render :partial => "form" %>

View file

@ -1,4 +1,4 @@
<%= render '/refinery/blog/admin/submenu' %>
<%= render :partial => '/refinery/blog/admin/submenu' %>
<div id='records'>
<% if searching? %>
<h2><%= t('results_for', :scope => 'refinery.admin.search',
@ -13,7 +13,7 @@
<% if @categories.any? %>
<%= will_paginate @categories %>
<%= render "sortable_list" %>
<%= render :partial => "sortable_list" %>
<%= will_paginate @categories %>
<% else %>

View file

@ -1 +1 @@
<%= render "form" %>
<%= render :partial => "form" %>

View file

@ -1,4 +1,4 @@
<%= render '/refinery/blog/admin/submenu' %>
<%= render :partial => '/refinery/blog/admin/submenu' %>
<div id='records'>
<% if searching? %>
<h2><%= t('results_for', :scope => 'shared.admin.search', :query => params[:search]) %></h2>
@ -18,7 +18,7 @@
<% if @comments.any? %>
<%= will_paginate @comments %>
<%= render "sortable_list" %>
<%= render :partial => "sortable_list" %>
<%= will_paginate @comments %>
<% else %>

View file

@ -9,13 +9,6 @@
<%= f.label :title -%>
<%= f.text_field :title, :class => 'larger widest' -%>
</div>
<div class="field">
<p>
<%= f.check_box :draft %>
<%= f.label :draft, t('.save_as_draft'), :class => "stripped" %>
</p>
</div>
<div class='field'>
<div id='page-tabs' class='clearfix ui-tabs ui-widget ui-widget-content ui-corner-all'>
@ -57,6 +50,10 @@
:id => 'toggle_advanced_options',
:title => t('.toggle_advanced_options') %>
</p>
<span id='draft_field'>
<%= f.check_box :draft %>
<%= f.label :draft, t('.save_as_draft'), :class => "stripped" %>
</span>
</div>
<div id='more_options' style="display:none;">
<div class="hemisquare">

View file

@ -2,12 +2,8 @@
<span class='title'>
<%= post.title %>
<span class="preview">
<%= post.published_at.try(:strftime, '%b %d, %Y') || 'draft' %>
<%= " by #{post.author.username}" if post.author.present? %>
<% if post.draft? %>
<span class="label notice"><%= t('refinery.blog.admin.posts.post.draft') %></span>
<% else %>
<%= post.published_at.strftime('%b %d, %Y') %>
<% end %>
</span>
</span>
<span class='actions'>

View file

@ -1 +1 @@
<%= render "form" %>
<%= render :partial => "form" %>

View file

@ -1,4 +1,4 @@
<%= render '/refinery/blog/admin/submenu' %>
<%= render :partial => '/refinery/blog/admin/submenu' %>
<div id='records'>
<% if searching? %>
<h2><%= t('results_for', :scope => 'refinery.admin.search', :query => params[:search]) %></h2>
@ -13,7 +13,7 @@
<% if @posts.any? %>
<%= will_paginate @posts %>
<%= render "sortable_list" %>
<%= render :partial => "sortable_list" %>
<%= will_paginate @posts %>
<% else %>

View file

@ -1 +1 @@
<%= render "form" %>
<%= render :partial => "form" %>

View file

@ -1,4 +1,4 @@
<%= render '/refinery/blog/admin/submenu' %>
<%= render :partial => '/refinery/blog/admin/submenu' %>
<div id='records'>
<% if searching? %>
<h2><%= t('results_for', :scope => 'refinery.admin.search',
@ -13,7 +13,7 @@
<% if @posts.any? %>
<%= will_paginate @posts %>
<%= render "sortable_list" %>
<%= render :partial => "sortable_list" %>
<%= will_paginate @posts %>
<% else %>

View file

@ -14,8 +14,8 @@
<% end %>
<% content_for :side_body do %>
<%= render "/refinery/blog/shared/categories" %>
<%= render :partial => "/refinery/blog/shared/categories" %>
<% end %>
<%= render "/refinery/content_page" %>
<%= render :partial => "/refinery/content_page" %>
<% content_for :stylesheets, stylesheet_link_tag('refinery/blog/frontend') %>

View file

@ -33,5 +33,5 @@
<span class="st_sharethis" displayText="ShareThis"></span>
<% end %>
</article>
<%= render '/refinery/draft_page_message' unless @post.nil? or @post.live? -%>
<%= render :partial => '/refinery/draft_page_message' unless @post.nil? or @post.live? -%>
<%= render 'nav' if next_or_previous?(@post) %>

View file

@ -11,7 +11,7 @@
<% end %>
<% end %>
<%= render '/refinery/blog/shared/body_content_right' %>
<%= render :partial => '/refinery/blog/shared/body_content_right' %>
<%= render "/refinery/content_page" %>
<%= render :partial => "/refinery/content_page" %>
<% content_for :stylesheets, stylesheet_link_tag('refinery/blog/frontend') %>

View file

@ -11,10 +11,10 @@
<% end %>
<% end %>
<% content_for :side_body_prepend do -%>
<% content_for :body_content_right_prepend do -%>
<%= raw @page.content_for(Refinery::Pages.default_parts.second.to_sym) %>
<% end if Refinery::Pages.default_parts.many? -%>
<%= render '/refinery/blog/shared/body_content_right' %>
<%= render :partial => '/refinery/blog/shared/body_content_right' %>
<%= render "/refinery/content_page" %>
<%= render :partial => "/refinery/content_page" %>
<% content_for :stylesheets, stylesheet_link_tag('refinery/blog/frontend') %>

View file

@ -8,7 +8,7 @@
<% end %>
<% end %>
<%= render '/refinery/blog/shared/body_content_right' %>
<%= render :partial => '/refinery/blog/shared/body_content_right' %>
<%= render :partial => "/refinery/content_page", :locals => { :remove_automatic_sections => true } %>
@ -17,5 +17,5 @@
<%# enable AJAX'd post nav at your own risk until html5 history API implemented. %>
<%#= javascript_include_tag('refinery/blog/frontend') %>
<script src="http://w.sharethis.com/button/buttons.js"></script>
<script>stLight.options({publisher:'<%= Refinery::Blog.share_this_key %>'});</script>
<script>stLight.options({publisher:'<%= Blog::Post::ShareThis.key %>'});</script>
<% end if Refinery::Blog::Post::ShareThis.enabled? %>

View file

@ -13,7 +13,7 @@
<% end %>
<% end %>
<%= render '/refinery/blog/shared/body_content_right' %>
<%= render :partial => '/refinery/blog/shared/body_content_right' %>
<%= render "/refinery/content_page" %>
<%= render :partial => "/refinery/content_page" %>
<% content_for :stylesheets, stylesheet_link_tag('refinery/blog/frontend') %>

View file

@ -1,9 +1,9 @@
<% content_for :side_body do %>
<%= yield(:side_body_prepend) %>
<%= render "/refinery/blog/shared/rss_feed" %>
<%= render "/refinery/blog/shared/categories" %>
<%= render "/refinery/blog/shared/tags" %>
<%= render "/refinery/blog/shared/posts" %>
<%= yield(:body_content_right_prepend) %>
<%= render :partial => "/refinery/blog/shared/rss_feed" %>
<%= render :partial => "/refinery/blog/shared/categories" %>
<%= render :partial => "/refinery/blog/shared/tags" %>
<%= render :partial => "/refinery/blog/shared/posts" %>
<%= blog_archive_widget %>
<%= yield(:side_body_append) %>
<%= yield(:body_content_right_append) %>
<% end %>

View file

@ -30,9 +30,7 @@
</section>
<footer>
<p>
<% if blog_post_teaser_enabled? && post.custom_teaser.present? %>
<%= link_to t('read_more', :scope => 'refinery.blog.shared.posts'), refinery.blog_post_path(post) %>
<% end %>
<%= link_to t('read_more', :scope => 'refinery.blog.shared.posts'), refinery.blog_post_path(post) if blog_post_teaser_enabled? %>
</p>
<aside class='comment_count'>
<% if Refinery::Blog::Post.comments_allowed? %>

View file

@ -57,7 +57,6 @@ en:
view_live_html: 'View this blog post live <br/><em>(opens in a new window)</em>'
edit: Edit this blog post
delete: Remove this blog post forever
draft: Draft
settings:
notification_recipients:
value: Send notifications to

View file

@ -1,167 +0,0 @@
sv:
refinery:
plugins:
refinerycms_blog:
title: Blogg
blog:
admin:
categories:
category:
edit: Editera kategori
delete: Radera kategori
index:
no_items_yet: 'Det finns inga kategorier än. Klicka på "%{create}" för att lägga till den första kategorin.'
comments:
approved: 'Kommentaren från "%{author}" Har godkänts.'
comment:
view_live_html: 'Visa kommentaren på webbplatsen. <br/><em>(öppnas i ett nytt fönster)</em>'
read: Läs denna kommentar
reject: Avslå kommentar
approve: Godkänn kommentar
rejected: 'Kommentaren från "%{author}" har avslagits.'
index:
no_items_yet: 'Det finns inga %{type} kommentarer.'
show:
comment: Kommentar
blog_post: Blogg post
from: Postat av
date: Postat
message: Kommentar
details: Detaljer
age: Ålder
actions: Actions
back: Tillbaka till alla kommentarer
reject: Avslå denna kommentar
approve: Godkänn denna kommentar
posts:
form:
advanced_options: Avancerat
toggle_advanced_options: Klicka för att ställa in metataggar och menyinställningar
save_as_draft: Spara som utkast
published_at: Publiceringsdatum
custom_url: Anpassad URL
custom_url_help: Skapa URL för bloggposten med denna text istället för ttieln
source_url: Källans URL
source_url_help: Sparar URL för postens källa
source_url_title: Källhänvisning (titel)
source_url_title_help: Källhänvisning för posten (URL).
author: Författare
author_help: Ställ in författare för denna post.
copy_body: Kopiera innehåll i posten till en teaser.
copy_body_help: Kopierar inneållet i posten till en teaser, lämna tom om du vill att det ska ske automatiskt.
index:
no_items_yet: 'Det finns inga poster än. Klicka "%{create}" för att lägga till din första post.'
uncategorized:
no_items_yet: 'Det finns inga okategoriserade poster.'
post:
view_live_html: 'Visa denna post i en webbläsare <br/><em>(öppnas i ett nytt fönster)</em>'
edit: Redigera denna bloggpost
delete: Ta bort denna bloggpost
draft: Utkast
settings:
notification_recipients:
value: Skicka notis till
explanation: 'Varje gång någon kommenterar på en post, skickas ett mail om kommentaren.'
hint: 'När en kommentar läggs till, så skickar vi en notis till dig.'
example: "Lägg till epostadress(er) i detta format: kalle@home.se, pelle@work.com"
updated: 'Notiser har blivit skickade till: "%{recipients}"'
submenu:
categories:
title: Kategorier
manage: Hantera
new: Skapa ny kategori
comments:
title: Kommentarer
title_with_count: 'Det finns (%{new_count} nya kommentarer)'
new: Ny
unmoderated: Ny
approved: Godkänd
rejected: Avslagen
posts:
title: Poster
manage: Hantera poster
new: Skapa ny post
uncategorized: Okategoriserade poster
settings:
title: Inställningar
moderation: Moderering
update_notified: Uppdarea vilka som får notiser
comments: Kommentarer
teasers: Teasers
comment_mailer:
notification:
greeting: Hej!
you_recieved_new_comment: Du har fått en ny kommentar på bloggenYou just received a new comment on your website.
comment_starts: --- kommentar ---
comment_ends: --- // kommentar ---
from: Från
email: E-post
message: Meddelande
closing_line: Vänliga hälsningar
ps: 'P.S. Alla dina kommentarer finns lagrade i bloggsektionen av ditt CMS i undermenyn kommentarer, om du vill se dem senare.'
shared:
categories:
title: Kategorier
rss_feed:
title: RSS
subscribe: Prenumerera
posts:
other: Övriga poster
created_at: 'Postat den %{when}'
read_more: Läs mer
comments:
singular: Kommentar
none: Inga kommentarer
archives: Arkiv
tags:
title: "Taggar"
categories:
show:
no_posts: Det finns inga poster än.
posts:
post:
filed_in: Kategoriserat som
comment: kommentar
comments:
by: 'Postad av %{who}'
time_ago: 'för %{time} sedan'
thank_you: 'Tack för din kommentar.'
thank_you_moderated: 'Tack för din kommentar. Ditt meddelande har placerats i modereringskön och kommer snart att bli publicerat.'
index:
no_blog_articles_yet: Det finns inga bloggposter än.
show:
blog_home: Blogg hem
comments:
title: Kommentarer
add: Kommentera
other: Andra bloggposter
filed_in: Kategoriserat i
tagged: Taggar
submit: Skicka kommentar
name: Namn
email: E-post
message: Meddelande
by: av
source: Källa
tagged:
no_blog_articles_yet: Det finns inga bloggposter än.
posts_tagged: Poster taggade med
archive:
blog_archive_for: 'Arkiv för %{date}'
no_blog_articles_posted: 'Det finns inga artiklar för %{date}.'
activerecord:
models:
refinery/blog_category: Kategori
refinery/blog_comment: Kommentarer
refinery/blog_post: Bloggposter
attributes:
refinery/blog_category:
title: Titel
refinery/blog_comment:
name: Namn
email: E-post
message: Meddelande
refinery/blog_post:
title: Titel
body: Innehåll
teaser: Teaser

View file

@ -45,7 +45,7 @@ class CreateBlogStructure < ActiveRecord::Migration
drop_table Refinery::Blog::Post.table_name
drop_table Refinery::Blog::Comment.table_name
drop_table Refinery::Blog::Category.table_name
drop_table Refinery::Category.table_name
drop_table Refinery::Categorization.table_name
end

View file

@ -2,7 +2,6 @@ require 'refinerycms-core'
require 'refinerycms-settings'
require 'filters_spam'
require 'rails_autolink'
require 'acts_as_indexed'
module Refinery
autoload :BlogGenerator, 'generators/refinery/blog/blog_generator'

View file

@ -2,17 +2,16 @@ module Refinery
module Blog
class Version
@major = 2
@minor = 1
@tiny = 0
@build = 'dev'
@minor = 0
@tiny = 4
class << self
attr_reader :major, :minor, :tiny, :build
attr_reader :major, :minor, :tiny
def to_s
[@major, @minor, @tiny, @build].compact.join('.')
[@major, @minor, @tiny].compact.join('.')
end
end
end
end
end
end

View file

@ -11,7 +11,7 @@ Options:
## Requirements
Refinery CMS version 2.0.1 or above.
Refinery CMS version 2.0.0 or above.
## Install
@ -52,9 +52,3 @@ Run the test suite with [Guard](https://github.com/guard/guard)
Or just with rake spec
$ bundle exec rake spec
## More Information
* Check out our [Website](http://refinerycms.com/)
* Documentation is available in the [guides](http://refinerycms.com/guides)
* Questions can be asked on our [Google Group](http://group.refinerycms.org)
* Questions can also be asked in our IRC room, [#refinerycms on freenode](irc://irc.freenode.net/refinerycms)

View file

@ -18,10 +18,13 @@ Gem::Specification.new do |s|
s.test_files = `git ls-files -- spec/*`.split("\n")
# Runtime dependencies
s.add_dependency 'refinerycms-core', '~> 2.1.0.dev'
s.add_dependency 'refinerycms-settings', '~> 2.1.0.dev'
s.add_dependency 'refinerycms-core', '~> 2.0.3'
s.add_dependency 'refinerycms-settings', '~> 2.0.1'
s.add_dependency 'filters_spam', '~> 0.2'
s.add_dependency 'acts-as-taggable-on'
s.add_dependency 'seo_meta', '~> 1.3.0'
s.add_dependency 'rails_autolink', '~> 1.0.7'
end
s.add_dependency 'rails_autolink'
# Development dependencies
s.add_development_dependency 'refinerycms-testing', '~> 2.0.0'
end

View file

@ -53,7 +53,7 @@ module Refinery
end
end
describe "by_month" do
describe "by_archive" do
before do
@post1 = FactoryGirl.create(:blog_post, :published_at => Date.new(2011, 3, 11))
@post2 = FactoryGirl.create(:blog_post, :published_at => Date.new(2011, 3, 12))
@ -65,22 +65,22 @@ module Refinery
it "returns all posts from specified month" do
#check for this month
date = "03/2011"
described_class.by_month(Time.parse(date)).count.should be == 2
described_class.by_month(Time.parse(date)).should == [@post2, @post1]
described_class.by_archive(Time.parse(date)).count.should be == 2
described_class.by_archive(Time.parse(date)).should == [@post2, @post1]
end
end
describe ".published_dates_older_than" do
before do
@post1 = FactoryGirl.create(:blog_post, :published_at => Time.utc(2012, 05, 01, 15, 20))
@post2 = FactoryGirl.create(:blog_post, :published_at => Time.utc(2012, 05, 01, 15, 30))
@post1 = FactoryGirl.create(:blog_post, :published_at => Time.now - 2.months)
@post2 = FactoryGirl.create(:blog_post, :published_at => Time.now - 1.month)
FactoryGirl.create(:blog_post, :published_at => Time.now)
end
it "returns all published dates older than the argument" do
expected = [@post2.published_at, @post1.published_at]
described_class.published_dates_older_than(5.minutes.ago).should eq(expected)
described_class.published_dates_older_than(1.day.ago).should eq(expected)
end
end
@ -128,7 +128,7 @@ module Refinery
describe "#next" do
before do
FactoryGirl.create(:blog_post, :published_at => Time.now.advance(:days => -1))
FactoryGirl.create(:blog_post, :published_at => Time.now.advance(:minutes => -1))
@post = FactoryGirl.create(:blog_post)
end
@ -140,7 +140,7 @@ module Refinery
describe "#prev" do
before do
FactoryGirl.create(:blog_post)
@post = FactoryGirl.create(:blog_post, :published_at => Time.now.advance(:days => -1))
@post = FactoryGirl.create(:blog_post, :published_at => Time.now.advance(:minutes => -1))
end
it "returns previous article when called on current article" do

View file

@ -1,8 +1,8 @@
require 'spec_helper'
describe "Categories admin" do
refinery_login_with :refinery_user
login_refinery_user
let(:title) { "lol" }
it "can create categories" do

View file

@ -4,8 +4,8 @@ module Refinery
module Blog
module Admin
describe Comment do
refinery_login_with :refinery_user
login_refinery_user
describe "#index" do
context "when has no new unapproved comments" do
before(:each) do
@ -118,4 +118,4 @@ module Refinery
end
end
end
end
end

View file

@ -1,8 +1,8 @@
require 'spec_helper'
describe "Blog menu entry" do
refinery_login_with :refinery_user
login_refinery_user
it "is highlighted when managing the blog" do
visit refinery.admin_root_path

View file

@ -4,8 +4,8 @@ module Refinery
module Blog
module Admin
describe Post do
refinery_login_with :refinery_user
login_refinery_user
let!(:blog_category) { FactoryGirl.create(:blog_category, :title => "Video Games") }
context "when no blog posts" do
@ -172,4 +172,4 @@ module Refinery
end
end
end
end
end

View file

@ -2,8 +2,8 @@ require "spec_helper"
module Refinery
describe "BlogCategories" do
refinery_login_with :refinery_user
login_refinery_user
context "has one category and post" do
before(:each) do
@post = FactoryGirl.create(:blog_post, :title => "Refinery CMS blog post")

View file

@ -2,8 +2,8 @@ require "spec_helper"
module Refinery
describe "Blog::Posts" do
refinery_login_with :refinery_user
login_refinery_user
context "when has blog posts" do
let!(:blog_post) { FactoryGirl.create(:blog_post, :title => "Refinery CMS blog post") }