Merge branch 'master' of github.com:diaspora/diaspora_rails
This commit is contained in:
commit
f7e4f1db32
20 changed files with 119 additions and 84 deletions
|
|
@ -1,6 +1,7 @@
|
|||
class ApplicationController < ActionController::Base
|
||||
protect_from_forgery :except => :receive
|
||||
layout 'application'
|
||||
|
||||
before_filter :set_friends
|
||||
|
||||
layout :layout_by_resource
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
class BlogsController < ApplicationController
|
||||
before_filter :authenticate_user!
|
||||
|
||||
|
||||
def index
|
||||
@blogs = Blog.paginate :page => params[:page], :order => 'created_at DESC'
|
||||
end
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@ class Comment
|
|||
include MongoMapper::Document
|
||||
include ROXML
|
||||
xml_accessor :text
|
||||
|
||||
xml_accessor :person, :as => Person
|
||||
|
||||
key :text, String
|
||||
key :target, String
|
||||
|
|
|
|||
|
|
@ -4,7 +4,8 @@ class Person
|
|||
|
||||
xml_accessor :email
|
||||
xml_accessor :url
|
||||
|
||||
xml_accessor :profile, :as => Profile
|
||||
|
||||
key :email, String
|
||||
key :url, String
|
||||
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ class Post
|
|||
include Diaspora::Webhooks
|
||||
|
||||
xml_accessor :_id
|
||||
xml_accessor :person, :as => Person
|
||||
|
||||
key :person_id, ObjectId
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
class Profile
|
||||
include MongoMapper::Document
|
||||
|
||||
include ROXML
|
||||
|
||||
xml_accessor :first_name
|
||||
xml_accessor :last_name
|
||||
|
||||
key :first_name, String
|
||||
key :last_name, String
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
%li.comment{:id => comment.id}
|
||||
%span.from
|
||||
= link_to_person comment.person
|
||||
= comment.text
|
||||
= auto_link comment.text
|
||||
%div.time
|
||||
= "#{time_ago_in_words(comment.updated_at)} ago"
|
||||
|
|
|
|||
11
app/views/js/_google_a_js.haml
Normal file
11
app/views/js/_google_a_js.haml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
:javascript
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-17207587-1']);
|
||||
_gaq.push(['_setDomainName', '#{root_url}']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
27
app/views/js/_websocket_js.haml
Normal file
27
app/views/js/_websocket_js.haml
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
- if user_signed_in?
|
||||
- unless request.user_agent.include? "Safari" ||"Chrome"
|
||||
= javascript_include_tag 'FABridge', 'swfobject', 'web_socket'
|
||||
:javascript
|
||||
WebSocket.__swfLocation = "/javascripts/WebSocketMain.swf";
|
||||
:javascript
|
||||
$(document).ready(function(){
|
||||
function debug(str){ $("#debug").append("<p>" + str); };
|
||||
|
||||
ws = new WebSocket("ws://#{request.host}:8080/");
|
||||
ws.onmessage = function(evt) {
|
||||
var obj = jQuery.parseJSON(evt.data);
|
||||
debug("got a " + obj['class']);
|
||||
if((location.href.indexOf(obj['class']) != -1 ) || (location.pathname == '/')) {
|
||||
$("#stream").prepend(
|
||||
$(obj['html']).fadeIn("fast", function(){
|
||||
$("#stream label:first").inFieldLabels();
|
||||
}
|
||||
)
|
||||
);
|
||||
};
|
||||
};
|
||||
ws.onclose = function() { debug("socket closed"); };
|
||||
ws.onopen = function() {
|
||||
ws.send(location.pathname);
|
||||
debug("connected...");
|
||||
};});
|
||||
|
|
@ -2,7 +2,8 @@
|
|||
%html
|
||||
%head
|
||||
%title
|
||||
= "diaspora"
|
||||
= "diaspora "
|
||||
= "- #{User.first.real_name}" if User.first
|
||||
%meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
|
||||
%meta{"http-equiv"=> "X-UA-Compatible", :content =>"chrome=1" }
|
||||
|
||||
|
|
@ -11,73 +12,12 @@
|
|||
/= javascript_include_tag"http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"
|
||||
= javascript_include_tag 'jquery142', 'rails', 'view', 'publisher'
|
||||
= javascript_include_tag 'tiny_mce/tiny_mce.js','jquery.infieldlabel'
|
||||
:javascript
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-17207587-1']);
|
||||
_gaq.push(['_setDomainName', '#{root_url}']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
|
||||
- unless request.user_agent.include? "Safari" ||"Chrome"
|
||||
= javascript_include_tag 'FABridge', 'swfobject', 'web_socket'
|
||||
:javascript
|
||||
WebSocket.__swfLocation = "/javascripts/WebSocketMain.swf";
|
||||
|
||||
= render "js/google_a_js"
|
||||
= render "js/websocket_js"
|
||||
|
||||
= csrf_meta_tag
|
||||
= yield(:head)
|
||||
|
||||
- if user_signed_in?
|
||||
:javascript
|
||||
$(document).ready(function(){
|
||||
function debug(str){ $("#debug").append("<p>" + str); };
|
||||
|
||||
ws = new WebSocket("ws://#{request.host}:8080/");
|
||||
ws.onmessage = function(evt) {
|
||||
var obj = jQuery.parseJSON(evt.data);
|
||||
debug("got a " + obj['class']);
|
||||
if((location.href.indexOf(obj['class']) != -1 ) || (location.pathname == '/')) {
|
||||
$("#stream").prepend(
|
||||
$(obj['html']).fadeIn("fast", function(){
|
||||
$("#stream label:first").inFieldLabels();
|
||||
}
|
||||
)
|
||||
);
|
||||
};
|
||||
};
|
||||
ws.onclose = function() { debug("socket closed"); };
|
||||
ws.onopen = function() {
|
||||
ws.send(location.pathname);
|
||||
debug("connected...");
|
||||
};
|
||||
|
||||
|
||||
$("#stream li").hover(function() {
|
||||
$(this).children(".destroy_link").fadeIn(0);
|
||||
}, function() {
|
||||
$(this).children(".destroy_link").fadeOut(0);
|
||||
});
|
||||
|
||||
// in field label plugin
|
||||
|
||||
$(".show_post_comments").click( function() {
|
||||
if( $(this).hasClass( "visible" )) {
|
||||
$(this).html($(this).html().replace("hide", "show"));
|
||||
$(this).parents("li").children(".comments").fadeOut(100);
|
||||
} else {
|
||||
$(this).html($(this).html().replace("show", "hide"));
|
||||
$(this).parents("li").children(".comments").fadeIn(100);
|
||||
}
|
||||
$(this).toggleClass( "visible" );
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
= javascript_include_tag 'satisfaction' , 'satisfaction-display'
|
||||
%body
|
||||
|
|
|
|||
|
|
@ -18,10 +18,13 @@
|
|||
.container
|
||||
- flash.each do |name, msg|
|
||||
= content_tag :div, msg, :id => "flash_#{name}"
|
||||
|
||||
%div#huge_text
|
||||
welcome back,
|
||||
%span
|
||||
= User.first.real_name.downcase
|
||||
- if User.first
|
||||
%div#huge_text
|
||||
welcome back,
|
||||
%span
|
||||
= User.first.real_name.downcase
|
||||
-else
|
||||
%div#huge_text
|
||||
you need to add a user first!
|
||||
|
||||
= yield
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
%li.message{:id => post.id, :class => ("mine" if mine?(post))}
|
||||
%span.from
|
||||
= link_to_person post.person
|
||||
= post.message
|
||||
= auto_link post.message
|
||||
|
||||
%div.time
|
||||
= link_to(how_long_ago(post), status_message_path(post))
|
||||
|
|
|
|||
11
config/app_config.yml
Normal file
11
config/app_config.yml
Normal file
|
|
@ -0,0 +1,11 @@
|
|||
development:
|
||||
debug: true
|
||||
socket_port: 8080
|
||||
|
||||
test:
|
||||
debug: false
|
||||
socket_port: 8081
|
||||
|
||||
production:
|
||||
debug: false
|
||||
socket_port: 8080
|
||||
2
config/initializers/load_app_config.rb
Normal file
2
config/initializers/load_app_config.rb
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
raw_config = File.read("#{Rails.root}/config/app_config.yml")
|
||||
APP_CONFIG = YAML.load(raw_config)[Rails.env].symbolize_keys
|
||||
|
|
@ -11,7 +11,10 @@ module WebSocket
|
|||
SocketRenderer.instantiate_view
|
||||
end
|
||||
|
||||
EventMachine::WebSocket.start(:host => "0.0.0.0", :port => 8080, :debug =>true) do |ws|
|
||||
EventMachine::WebSocket.start(
|
||||
:host => "0.0.0.0",
|
||||
:port => APP_CONFIG[:socket_port],
|
||||
:debug =>APP_CONFIG[:debug]) do |ws|
|
||||
ws.onopen {
|
||||
sid = @channel.subscribe { |msg| ws.send msg }
|
||||
|
||||
|
|
@ -25,6 +28,4 @@ module WebSocket
|
|||
def self.update_clients(object)
|
||||
@channel.push(SocketRenderer.view_hash(object).to_json) if @channel
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
|
|
|||
|
|
@ -53,4 +53,23 @@ $(document).ready(function(){
|
|||
$('#flash_notice, #flash_error, #flash_alert').delay(1500).slideUp(130);
|
||||
|
||||
|
||||
$("#stream li").hover(function() {
|
||||
$(this).children(".destroy_link").fadeIn(0);
|
||||
}, function() {
|
||||
$(this).children(".destroy_link").fadeOut(0);
|
||||
});
|
||||
|
||||
// in field label plugin
|
||||
|
||||
$(".show_post_comments").live('click', function() {
|
||||
if( $(this).hasClass( "visible" )) {
|
||||
$(this).html($(this).html().replace("hide", "show"));
|
||||
$(this).parents("li").children(".comments").fadeOut(100);
|
||||
} else {
|
||||
$(this).html($(this).html().replace("show", "hide"));
|
||||
$(this).parents("li").children(".comments").fadeIn(100);
|
||||
}
|
||||
$(this).toggleClass( "visible" );
|
||||
});
|
||||
|
||||
});//end document ready
|
||||
|
|
|
|||
|
|
@ -64,10 +64,10 @@ header {
|
|||
border: none;
|
||||
top: 10px; }
|
||||
header #session_action {
|
||||
position: absolute;
|
||||
right: 300px;
|
||||
float: right;
|
||||
font-size: 110%;
|
||||
top: 7px; }
|
||||
top: 7px;
|
||||
padding-right: 10px; }
|
||||
header #session_action a {
|
||||
color: #cccccc;
|
||||
border: none; }
|
||||
|
|
|
|||
|
|
@ -71,14 +71,14 @@ header
|
|||
:top 10px
|
||||
|
||||
#session_action
|
||||
:position absolute
|
||||
:right 300px
|
||||
:float right
|
||||
:font
|
||||
:size 110%
|
||||
:top 7px
|
||||
a
|
||||
:color #ccc
|
||||
:border none
|
||||
:padding-right 10px
|
||||
|
||||
#show_filters
|
||||
:z-index 100
|
||||
|
|
|
|||
|
|
@ -13,4 +13,14 @@ describe Person do
|
|||
friend.valid?.should == false
|
||||
|
||||
end
|
||||
it 'should serialize to xml' do
|
||||
friend_one = Factory.create(:friend)
|
||||
xml = friend_one.to_xml.to_s
|
||||
(xml.include? "friend").should == true
|
||||
end
|
||||
it 'should have a profile in its xml' do
|
||||
user = Factory.create(:user)
|
||||
xml = user.to_xml.to_s
|
||||
(xml.include? "first_name").should == true
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -77,6 +77,11 @@ describe Post do
|
|||
friend_posts.count.should == 2
|
||||
end
|
||||
end
|
||||
|
||||
describe 'xml' do
|
||||
it 'should serialize to xml with its person' do
|
||||
message = Factory.create(:status_message, :person => @user)
|
||||
(message.to_xml.to_s.include? @user.email).should == true
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue