Skip to content

Commit

Permalink
d3
Browse files Browse the repository at this point in the history
  • Loading branch information
kkxlkkxllb committed May 18, 2013
1 parent 9905126 commit 627e97c
Show file tree
Hide file tree
Showing 12 changed files with 121 additions and 721 deletions.
33 changes: 22 additions & 11 deletions app/assets/javascripts/backbone/views/veggie/chat_view.coffee
Expand Up @@ -15,6 +15,13 @@ class window.Veggie.ChatView extends Backbone.View
else
@dispatcher = new WebSocketRails('localhost:3000/websocket')

@dispatcher.on_open = (data) ->
uid = window.current_member.get("_id")
@notify_channel = this.subscribe("notify_" + uid)
@notify_channel.bind "invite_course", (data) ->
$("#courses .headline").after JST["widget/notice"](msg: data)


$(document).bind "keyup",(event) ->
if event.keyCode is 13
$content = $("#chat_content")
Expand All @@ -25,7 +32,6 @@ class window.Veggie.ChatView extends Backbone.View
else if wc > 17
Utils.flash("#{wc} 个词太长啦,发言简短更显才气!","error")
else
console.log content
self.send_message(content)
$content.val("").focus()

Expand Down Expand Up @@ -100,15 +106,20 @@ class window.Veggie.ChatView extends Backbone.View
if $target.length isnt 0
uid = $target.attr("uid")
msg = $.trim $(".message",@$el).text()
$.post "/members/send_invite",target: uid, msg: msg, (data) =>
if data.status is 0
@close_invite()
setTimeout( ->
$("#invite .uname").text("")
$target.remove()
Utils.flash("邀请将在您的微博上发出,您的好友一旦接受邀请,小柒会立即通知您",'success',$wrap)
,1000)
else
Utils.flash("啊呀,邀请失败啦","error",$wrap)
cid = window.route.active_view.current_course.get("_id")
$.post "/members/send_invite",
target: uid
msg: msg
course_id: cid
(data) =>
if data.status is 0
@close_invite()
setTimeout( ->
$("#invite .uname").text("")
$target.remove()
Utils.flash("邀请将在您的微博上发出,您的好友一旦接受邀请,小柒会立即通知您",'success',$wrap)
,1000)
else
Utils.flash("啊呀,邀请失败啦","error",$wrap)
else
Utils.flash("你还没有选择要邀请哪一个好友呢","error",@$el)
Expand Up @@ -53,7 +53,7 @@ class window.Veggie.DashboardView extends Veggie.View
if step = $.jStorage.get "course_#{cid}"
$("#imagine").jmpress "goTo","#" + step
$("#imagine").show()
$("#icontrol").addClass 'active'
$("#icontrol").show().addClass 'active'
@$el.css "height":"100%"
keyup: (event) ->
switch event.keyCode
Expand Down
5 changes: 5 additions & 0 deletions app/assets/javascripts/lab/d3.min.js

Large diffs are not rendered by default.

694 changes: 0 additions & 694 deletions app/assets/javascripts/lab/three.min.js

This file was deleted.

5 changes: 5 additions & 0 deletions app/assets/javascripts/templates/widget/notice.hamlc
@@ -0,0 +1,5 @@
.form.alert
%span.icon-bolt
%span.icon-remove-circle.close
%strong
= @msg
47 changes: 38 additions & 9 deletions app/controllers/members_controller.rb
Expand Up @@ -57,7 +57,7 @@ def profile
# friendship status
def invite_list
if p = current_member.has_provider?("weibo")
has_invites = current_member.invites.collect(&:target)
has_invites = current_member.invites.outside.collect(&:target)
@friends = Wali::Friend.new(p).bilateral.select do |x|
has_invites.exclude?(x["id"].to_s)
end
Expand Down Expand Up @@ -134,23 +134,52 @@ def update

# invite
# @target: uid
# @cname 课程名
# @msg
# @provider 'weibo'
# @course_id
# @style common / teach
def send_invite
provider = params[:provider] || "weibo"
target = params[:target]
message = params[:msg].gsub(/\s+/,' ') + " " + $config[:domain]
invite = current_member.invites.new(:target => target,:provider => provider)
if invite.save and p = current_member.has_provider?(provider)
HardWorker::SendInviteJob.perform_async(message,p._id)
render_json 0,"ok"

# 检查被邀请者是否已经存在
if p = Authorization.where(:provider => provider,:uid => params[:target]).first
member = p.member
# 相互添加好友并通知
current_member.friend_ids << member._id
current_member.save
member.friend_ids << current_member._id
member.save
# 新建站内邀请
current_member.invites.create(:target => member._id,:course_id => params[:course_id])
render_json 1,"new friend"
else
render_json -1,"error"
args = params.slice(:target,:course_id).merge!(:provider => provider)
message = params[:msg].gsub(/\s+/,' ') + " " + $config[:host]
# 新建站外邀请
invite = current_member.invites.new(args)
if invite.save and p = current_member.has_provider?(provider)
HardWorker::SendInviteJob.perform_async(message,p._id)
render_json 0,"send invite by #{provider}"
else
render_json -1,"error"
end
end

end

# 向已存在好友发起邀请
# @_id
# @course_id
def invite_friend
@friend = Member.find(params[:_id])
if @friend.has_checkin?(params[:course_id])
render_json -1,"already checkin"
else
current_member.invites.create(:target => @friend._id,:course_id => params[:course_id])
render_json 0,"ok"
end
end

# like
# @obj [Song,Quote,Person]
# @_id
Expand Down
6 changes: 4 additions & 2 deletions app/controllers/words_controller.rb
Expand Up @@ -4,8 +4,10 @@ class WordsController < ApplicationController
def fetch
word = Onion::Word.new(params[:title]).insert(:skip_exist => 1)
if @uw = current_member.has_u_word(word)
synsets = Onion::Word.wordnet(params[:title],:synset)
synsets.delete(params[:title])
# 联想同义词,提供wordnet参考,由老师编辑添加
# 联想好友们的发音,图片
synsets = []
#Onion::Word.wordnet(params[:title],:synset)
data = @uw.as_json.merge({:imagine => true,:synsets => synsets})
else
data = word.as_json
Expand Down
19 changes: 17 additions & 2 deletions app/models/invite.rb
Expand Up @@ -3,9 +3,24 @@ class Invite

field :target
field :provider
field :course_id

belongs_to :member
validates :target, :uniqueness => {:scope => [:member_id,:provider]},:presence => true
validates :target, :uniqueness => {:scope => [:member_id,:course_id]},:presence => true

scope :outside, -> { where(:provider.exists => true)}
scope :inside, -> { where(:provider.exists => false)}

after_create :push_notify

# 站内邀请发送push
# 通知 target,member想和你一起学习某课
def push_notify
if provider.nil?
cname = Course.find(course_id).title
message = t("invite.common",:uname => member.name,:cname => cname)
WebsocketRails["notify_#{target}"].trigger "invite_course",message
end
end

scope :weibo, -> {where(:provider => 'weibo')}
end
6 changes: 6 additions & 0 deletions app/models/member.rb
Expand Up @@ -27,6 +27,7 @@ class Member
field :role
field :uid
field :gem, :type => Integer, :default => 0
field :friend_ids, :type => Array

has_many :authorizations,:dependent => :destroy
has_many :courses
Expand Down Expand Up @@ -68,6 +69,11 @@ def checked_courses
Course.where(:_id.in => cids)
end

def invited_courses
cids = Invite.inside.where(:target => self._id).collect(&:course_id).uniq
Course.where(:_id.in => cids)
end

def has_checkin?(course_id)
course_grades.where(:course_id => course_id).any?
end
Expand Down
1 change: 1 addition & 0 deletions config/routes.rb
Expand Up @@ -59,6 +59,7 @@
get "friend"
get "invite_list"
post "like"
post "invite_friend"
end

#mobile
Expand Down
5 changes: 3 additions & 2 deletions lib/eva.rb
Expand Up @@ -8,10 +8,11 @@ def initialize(member)
class Course < Base
def list
# 推荐课程,在已发布课程中做推荐筛选
recommands = ::Course.open.limit(10)
recommands = ::Course.open.limit(2)
# 正在学习的课程,学完并通过考核的课程不显示
checked = @member.checked_courses
list = (checked + recommands).uniq
invited = @member.invited_courses
list = (checked + recommands + invited).uniq
result = []
list.each_with_index do |c,i|
result << c.as_json.merge!(:has_checkin => (i < checked.length))
Expand Down
19 changes: 19 additions & 0 deletions lib/hard_worker.rb
Expand Up @@ -13,6 +13,25 @@ def perform(id, opts={})
provider = Authorization.find(id)
self.logger(provider.user_name)
Wali::Greet.new(provider,opts).deliver
invites = Invite.where(:provider => provider.provider,:target => provider.uid)
if invites.any?
member = provider.member
invites.each do |invite|
# 每个当前用户相关邀请的发起人的好友名单中加入当前用户
# 并获赠 2 gem
# 通知 owner 有新朋友接受了邀请,并获得了奖励
owner = invite.member
owner.friend_ids << member._id
owner.gem += 2
owner.save
# 当前被邀请用户免费登记受邀课程,并加好友
# 通知受邀者成功接受了多少个邀请,并新增了多少好友
member.friend_ids << owner._id
member.course_grades << CourseGrade.new(:course_id => invite.course_id)
member.save

end
end
end
end

Expand Down

0 comments on commit 627e97c

Please sign in to comment.