Merge branch 'reposting' of github.com:diaspora/diaspora

This commit is contained in:
danielvincent 2010-09-22 15:50:09 -07:00
commit 16ef43df09
11 changed files with 139 additions and 26 deletions

View file

@ -52,7 +52,7 @@ class AlbumsController < ApplicationController
data = clean_hash(params[:album]) data = clean_hash(params[:album])
if current_user.update_or_repost( @album, data ) if current_user.update_post( @album, data )
flash[:notice] = "Album #{@album.name} successfully edited." flash[:notice] = "Album #{@album.name} successfully edited."
respond_with @album respond_with @album
else else

View file

@ -88,7 +88,7 @@ class PhotosController < ApplicationController
data = clean_hash(params) data = clean_hash(params)
if current_user.update_or_repost( @photo, data[:photo] ) if current_user.update_post( @photo, data[:photo] )
flash[:notice] = "Photo successfully updated." flash[:notice] = "Photo successfully updated."
respond_with @photo respond_with @photo
else else

View file

@ -122,13 +122,9 @@ class User
post post
end end
def update_or_repost( post, post_hash = {} ) def update_post( post, post_hash = {} )
if self.owns? post if self.owns? post
if post_hash[:aspect_ids] post.update_attributes(post_hash)
repost(post, post_hash[:aspect_ids]) if validate_aspect_permissions post_hash[:aspect_ids]
else
post.update_attributes!(post_hash)
end
end end
end end

View file

@ -10,7 +10,7 @@
= f.error_messages = f.error_messages
%p %p
%label{:for => "status_message_message"} Message %label{:for => "status_message_message"} Message
= f.text_area :message, :rows => 2 = f.text_area :message, :rows => 2, :value => params[:prefill]
%ul.aspect_selector{ :style => "display:none;"} %ul.aspect_selector{ :style => "display:none;"}
going to... going to...

View file

@ -0,0 +1,27 @@
-# Copyright (c) 2010, Diaspora Inc. This file is
-# licensed under the Affero General Public License version 3. See
-# the COPYRIGHT file.
:javascript
$(".reshare_button").toggle(function(e){
e.preventDefault();
$(this).parent(".reshare_pane").children(".reshare_box").fadeIn(200);
}, function(e) {
e.preventDefault();
$(this).parent(".reshare_pane").children(".reshare_box").fadeOut(200);
});
.reshare_pane
%span.reshare_button
= link_to "Reshare", "#"
%ul.reshare_box
- for aspect in current_user.aspects_with_post( post.id )
%li.currently_sharing= aspect.name
- for aspect in current_user.aspects
- unless aspect.posts.include? post
%li.aspect_to_share= link_to aspect, :controller => "aspects", :action => "show", :id => aspect.id, :prefill => post.message

View file

@ -22,3 +22,5 @@
- if current_user.owns?(post) - if current_user.owns?(post)
.destroy_link .destroy_link
= link_to 'Delete', status_message_path(post), :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "delete" = link_to 'Delete', status_message_path(post), :confirm => 'Are you sure?', :method => :delete, :remote => true, :class => "delete"
= render "shared/reshare", :post => post, :current_user => current_user

View file

@ -7,7 +7,7 @@
Diaspora::Application.routes.draw do Diaspora::Application.routes.draw do
resources :people, :only => [:index, :show, :destroy] resources :people, :only => [:index, :show, :destroy]
resources :users, :except => [:create, :new, :show] resources :users, :except => [:create, :new, :show]
resources :status_messages, :only => [:create, :destroy, :show] resources :status_messages
resources :comments, :except => [:index] resources :comments, :except => [:index]
resources :requests, :except => [:edit, :update] resources :requests, :except => [:edit, :update]
resources :photos, :except => [:index] resources :photos, :except => [:index]

View file

@ -41,6 +41,12 @@ $(document).ready(function(){
} }
); );
$("#publisher textarea").keydown( function(e) {
if (e.shiftKey && e.keyCode == 13) {
$("#publisher form").submit();
}
});
});//end document ready });//end document ready

View file

@ -171,6 +171,41 @@ li.message {
li.message .content div.info .time a { li.message .content div.info .time a {
color: #666666; } color: #666666; }
.reshare_pane {
margin-left: 5px;
margin-right: 5px;
display: inline;
position: relative; }
.reshare_pane ul.reshare_box {
width: 150px;
display: none;
z-index: 10;
position: absolute;
margin-top: 5px;
padding: 0;
background-color: #fafafa;
list-style: none;
border: 5px solid #666666;
-webkit-box-shadow: 0 0 5px #666666;
-moz-box-shadow: 0 0 5px #666666;
text-shadow: 0 2px white;
color: black; }
.reshare_pane ul.reshare_box > li {
font-weight: bold;
padding: 8px;
padding-right: 15px;
border-top: 1px solid white;
border-bottom: 1px solid #cccccc; }
.reshare_pane ul.reshare_box > li:first-child {
border-top: none; }
.reshare_pane ul.reshare_box > li:last-child {
border-bottom: none; }
.reshare_pane ul.reshare_box > li a {
display: block;
height: 100%; }
.reshare_pane ul.reshare_box > li a:hover {
background-color: #eeeeee; }
form { form {
position: relative; position: relative;
font-size: 120%; font-size: 120%;
@ -270,6 +305,9 @@ ul.comment_set {
.destroy_link a, .request_button a { .destroy_link a, .request_button a {
color: #999999; color: #999999;
font-weight: normal; } font-weight: normal; }
.destroy_link a:hover, .request_button a:hover {
text-decoration: underline;
background: none; }
.destroy_link { .destroy_link {
display: none; display: none;

View file

@ -225,6 +225,59 @@ li.message
a a
:color #666 :color #666
.reshare_pane
:margin
:left 5px
:right 5px
:display inline
:position relative
ul.reshare_box
:width 150px
:display none
:z-index 10
:position absolute
:margin
:top 5px
:padding 0
:background
:color #fafafa
:list
:style none
:border 5px solid #666
:-webkit-box-shadow 0 0 5px #666
:-moz-box-shadow 0 0 5px #666
:text-shadow 0 2px #fff
:color #000
> li
:font
:weight bold
:padding 8px
:right 15px
:border
:top 1px solid #fff
:bottom 1px solid #ccc
&:first-child
:border
:top none
&:last-child
:border
:bottom none
a
:display block
:height 100%
&:hover
:background
:color #eee
form form
:position relative :position relative
@ -360,6 +413,10 @@ ul.comment_set
:color #999 :color #999
:font :font
:weight normal :weight normal
&:hover
:text
:decoration underline
:background none
.destroy_link .destroy_link
:display none :display none

View file

@ -65,27 +65,14 @@ describe User do
end end
end end
describe '#update_or_repost' do describe '#update_post' do
let!(:album) { user.post(:album, :name => "Profile Photos", :to => aspect.id) } let!(:album) { user.post(:album, :name => "Profile Photos", :to => aspect.id) }
it 'should repost' do
update_hash = { :aspect_ids => aspect1.id }
user.should_receive(:repost).with(album, update_hash[:aspect_ids]).and_return album
user.update_or_repost( album, update_hash )
end
it 'should update fields' do it 'should update fields' do
update_hash = { :name => "Other Photos" } update_hash = { :name => "Other Photos" }
user.update_or_repost( album, update_hash ) user.update_post( album, update_hash )
album.name.should == "Other Photos" album.name.should == "Other Photos"
end end
it 'should reject posting to an external aspect' do
update_hash = { :aspect_ids => [aspect3.id] }
proc{
user.update_or_repost( album, update_hash )
}.should raise_error /Cannot post to an aspect you do not own./
end
end end
end end