Add new feature #46
This commit is contained in:
parent
70e9e1c43f
commit
560229b101
|
@ -1,9 +1,11 @@
|
||||||
//= require jquery
|
//= require jquery
|
||||||
//= require jquery_ujs
|
//= require jquery_ujs
|
||||||
//= require turbolinks
|
//= require turbolinks
|
||||||
|
//= require action_cable
|
||||||
//= require foundation
|
//= require foundation
|
||||||
//= require js.cookie
|
//= require js.cookie
|
||||||
//= require 'jquery.html5-fileupload'
|
//= require 'jquery.html5-fileupload'
|
||||||
|
//= require cable
|
||||||
//= require_tree .
|
//= require_tree .
|
||||||
|
|
||||||
$(document).on('turbolinks:load', function(){
|
$(document).on('turbolinks:load', function(){
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
@App ||= {}
|
|
@ -0,0 +1,12 @@
|
||||||
|
$(document).on 'turbolinks:load', ->
|
||||||
|
$('#alert-container .close-button').click ()->
|
||||||
|
$('#alert-container').hide()
|
||||||
|
|
||||||
|
if $('#blog-show-page').length > 0
|
||||||
|
window.App.cable ||= ActionCable.createConsumer()
|
||||||
|
if window.App.comment_channel
|
||||||
|
window.App.comment_channel.unsubscribe()
|
||||||
|
window.App.comment_channel = window.App.cable.subscriptions.create { channel: "CommentChannel", post_id: $('#blog-show-page').data('post_id') },
|
||||||
|
received: (data)->
|
||||||
|
if data['not'] != Cookies.get('cable_id')
|
||||||
|
$.get( $('#blog-show-page').data('url') )
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading.
|
||||||
|
module ApplicationCable
|
||||||
|
class Channel < ActionCable::Channel::Base
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,5 @@
|
||||||
|
# Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading.
|
||||||
|
module ApplicationCable
|
||||||
|
class Connection < ActionCable::Connection::Base
|
||||||
|
end
|
||||||
|
end
|
|
@ -0,0 +1,6 @@
|
||||||
|
# Be sure to restart your server when you modify this file. Action Cable runs in a loop that does not support auto reloading.
|
||||||
|
class CommentChannel < ApplicationCable::Channel
|
||||||
|
def subscribed
|
||||||
|
stream_from "comment_post_#{params[:post_id]}"
|
||||||
|
end
|
||||||
|
end
|
|
@ -17,6 +17,7 @@ class BlogsController < ApplicationController
|
||||||
end
|
end
|
||||||
|
|
||||||
def show
|
def show
|
||||||
|
cookies[:cable_id] = SecureRandom.uuid
|
||||||
@post = Post.find(params[:id])
|
@post = Post.find(params[:id])
|
||||||
@post.visited
|
@post.visited
|
||||||
@prev = Post.where('created_at < ?', @post.created_at).order(created_at: :desc).first
|
@prev = Post.where('created_at < ?', @post.created_at).order(created_at: :desc).first
|
||||||
|
|
|
@ -15,12 +15,18 @@ class CommentsController < ApplicationController
|
||||||
|
|
||||||
if @comment.save
|
if @comment.save
|
||||||
@comments = @post.comments.order(created_at: :desc)
|
@comments = @post.comments.order(created_at: :desc)
|
||||||
|
ActionCable.server.broadcast "comment_post_#{@comment.post.id}", { not: cookies[:cable_id] }
|
||||||
render :create_ok
|
render :create_ok
|
||||||
else
|
else
|
||||||
render :create_fail
|
render :create_fail
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def refresh
|
||||||
|
@post = Post.find(params[:blog_id])
|
||||||
|
@comments = @post.comments.order(created_at: :desc)
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def comment_params
|
def comment_params
|
||||||
params.require(:comment).permit(:content, :name, :email)
|
params.require(:comment).permit(:content, :name, :email)
|
||||||
|
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
- content_for(:title) do
|
- content_for(:title) do
|
||||||
| #{@post.title}
|
| #{@post.title}
|
||||||
.row.blog-wrapper
|
.row.blog-wrapper#blog-show-page data-url=refresh_blog_comments_path(@post) data-post_id=@post.id
|
||||||
.small-12.large-9.large-centered.columns
|
.small-12.large-9.large-centered.columns
|
||||||
= render partial: "post", :locals=> { post: @post }
|
= render partial: "post", :locals=> { post: @post }
|
||||||
.comment-field
|
.comment-field
|
||||||
|
|
|
@ -0,0 +1 @@
|
||||||
|
$('.comment-diag').replaceWith('<%= j render partial: 'comment_content', locals: { comments: @comments }%>');
|
|
@ -10,6 +10,7 @@ html
|
||||||
= favicon_link_tag 'favicon.png', type: 'image/png'
|
= favicon_link_tag 'favicon.png', type: 'image/png'
|
||||||
= javascript_include_tag "application", 'data-turbolinks-track' => "reload"
|
= javascript_include_tag "application", 'data-turbolinks-track' => "reload"
|
||||||
= csrf_meta_tags
|
= csrf_meta_tags
|
||||||
|
= action_cable_meta_tag
|
||||||
body data-whatinput="mouse"
|
body data-whatinput="mouse"
|
||||||
- if content_for?(:main)
|
- if content_for?(:main)
|
||||||
= yield(:main)
|
= yield(:main)
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
production:
|
||||||
|
adapter: redis
|
||||||
|
url: redis://localhost:6379/wblog_cable
|
||||||
|
|
||||||
|
development:
|
||||||
|
adapter: async
|
||||||
|
|
||||||
|
test:
|
||||||
|
adapter: async
|
|
@ -46,7 +46,7 @@ WBlog::Application.configure do
|
||||||
config.log_level = :info
|
config.log_level = :info
|
||||||
|
|
||||||
# Prepend all log lines with the following tags.
|
# Prepend all log lines with the following tags.
|
||||||
# config.log_tags = [ :subdomain, :uuid ]
|
config.log_tags = [ :request_id ]
|
||||||
|
|
||||||
# Use a different logger for distributed setups.
|
# Use a different logger for distributed setups.
|
||||||
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
|
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
|
||||||
|
@ -59,7 +59,10 @@ WBlog::Application.configure do
|
||||||
|
|
||||||
# Precompile additional assets.
|
# Precompile additional assets.
|
||||||
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
# application.js, application.css, and all non-JS/CSS in app/assets folder are already added.
|
||||||
config.assets.precompile += %w( vendor/modernizr.js )
|
# config.assets.precompile += %w( )
|
||||||
|
|
||||||
|
config.action_cable.url = 'wss://example.com/cable'
|
||||||
|
config.action_cable.allowed_request_origins = [ 'http://example.com', /http:\/\/example.*/ ]
|
||||||
|
|
||||||
# Ignore bad email addresses and do not raise email delivery errors.
|
# Ignore bad email addresses and do not raise email delivery errors.
|
||||||
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
|
# Set this to true and configure the email server for immediate delivery to raise delivery errors.
|
||||||
|
|
|
@ -4,7 +4,11 @@ WBlog::Application.routes.draw do
|
||||||
collection do
|
collection do
|
||||||
get :rss
|
get :rss
|
||||||
end
|
end
|
||||||
resources :comments, only: [:index, :create]
|
resources :comments, only: [:index, :create] do
|
||||||
|
collection do
|
||||||
|
get :refresh
|
||||||
|
end
|
||||||
|
end
|
||||||
resources :likes, only: [:index, :create, :destroy] do
|
resources :likes, only: [:index, :create, :destroy] do
|
||||||
member do
|
member do
|
||||||
get :is_liked
|
get :is_liked
|
||||||
|
@ -42,4 +46,6 @@ WBlog::Application.routes.draw do
|
||||||
get '/mobile' => 'home#mobile'
|
get '/mobile' => 'home#mobile'
|
||||||
|
|
||||||
root 'blogs#index'
|
root 'blogs#index'
|
||||||
|
|
||||||
|
mount ActionCable.server => '/cable'
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue