diff --git a/app/controllers/albums_controller.rb b/app/controllers/albums_controller.rb index c6cf7a829..d3cad54e2 100644 --- a/app/controllers/albums_controller.rb +++ b/app/controllers/albums_controller.rb @@ -52,7 +52,7 @@ class AlbumsController < ApplicationController data = clean_hash(params[:album]) - if @album.update_attributes data + if current_user.update_post( @album, data ) flash[:notice] = "Album #{@album.name} successfully edited." respond_with @album else diff --git a/app/controllers/photos_controller.rb b/app/controllers/photos_controller.rb index afc193413..d0cb1871e 100644 --- a/app/controllers/photos_controller.rb +++ b/app/controllers/photos_controller.rb @@ -88,7 +88,7 @@ class PhotosController < ApplicationController data = clean_hash(params) - if @photo.update_attributes data[:photo] + if current_user.update_post( @photo, data[:photo] ) flash[:notice] = "Photo successfully updated." respond_with @photo else diff --git a/app/models/user.rb b/app/models/user.rb index 06652a494..8f74e2233 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -122,6 +122,12 @@ class User post end + def update_post( post, post_hash = {} ) + if self.owns? post + post.update_attributes(post_hash) + end + end + def validate_aspect_permissions(aspect_ids) aspect_ids = [aspect_ids.to_s] if aspect_ids.is_a? BSON::ObjectId diff --git a/app/views/shared/_publisher.haml b/app/views/shared/_publisher.haml index 4645ec65c..130f136a9 100644 --- a/app/views/shared/_publisher.haml +++ b/app/views/shared/_publisher.haml @@ -10,7 +10,7 @@ = f.error_messages %p %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;"} going to... diff --git a/app/views/shared/_reshare.haml b/app/views/shared/_reshare.haml new file mode 100644 index 000000000..0b4120d52 --- /dev/null +++ b/app/views/shared/_reshare.haml @@ -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 diff --git a/app/views/status_messages/_status_message.html.haml b/app/views/status_messages/_status_message.html.haml index dcee761d1..33764453f 100644 --- a/app/views/status_messages/_status_message.html.haml +++ b/app/views/status_messages/_status_message.html.haml @@ -17,8 +17,10 @@ \-- = link_to "show comments (#{post.comments.count})", '#', :class => "show_post_comments" - = render "comments/comments", :post => post + = render "comments/comments", :post => post - if current_user.owns?(post) .destroy_link = 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 + diff --git a/config/app_config_example.yml b/config/app_config.yml.example similarity index 100% rename from config/app_config_example.yml rename to config/app_config.yml.example diff --git a/config/initializers/_load_app_config.rb b/config/initializers/_load_app_config.rb index 521f9f0a0..e739941e9 100644 --- a/config/initializers/_load_app_config.rb +++ b/config/initializers/_load_app_config.rb @@ -8,10 +8,10 @@ end if File.exist? "#{Rails.root}/config/app_config.yml" all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml" - all_envs = load_config_yaml "#{Rails.root}/config/app_config_example.yml" unless all_envs + all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml.example" unless all_envs else - puts "WARNING: No config/app_config.yml found! Look at config/app_config_example.yml for help." - all_envs = load_config_yaml "#{Rails.root}/config/app_config_example.yml" + puts "WARNING: No config/app_config.yml found! Look at config/app_config.yml.example for help." + all_envs = load_config_yaml "#{Rails.root}/config/app_config.yml.example" end if all_envs[Rails.env.to_s] diff --git a/config/routes.rb b/config/routes.rb index ae757499c..0ac115b76 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -7,7 +7,7 @@ Diaspora::Application.routes.draw do resources :people, :only => [:index, :show, :destroy] resources :users, :except => [:create, :new, :show] - resources :status_messages, :only => [:create, :destroy, :show] + resources :status_messages resources :comments, :except => [:index] resources :requests, :except => [:edit, :update] resources :photos, :except => [:index] diff --git a/db/seeds/backer.rb b/db/seeds/backer.rb index 8fa72f23d..20fe90fdf 100644 --- a/db/seeds/backer.rb +++ b/db/seeds/backer.rb @@ -42,7 +42,7 @@ def create end def set_app_config username - current_config = YAML.load(File.read(Rails.root.join('config', 'app_config_example.yml'))) + current_config = YAML.load(File.read(Rails.root.join('config', 'app_config.yml.example'))) current_config[Rails.env.to_s] ||= {} current_config[Rails.env.to_s]['pod_url'] = "#{username}.joindiaspora.com" current_config['default']['pod_url'] = "#{username}.joindiaspora.com" diff --git a/db/seeds/dev.rb b/db/seeds/dev.rb index 4ffa947e7..e2d8a5495 100644 --- a/db/seeds/dev.rb +++ b/db/seeds/dev.rb @@ -7,7 +7,7 @@ require 'config/environment' def set_app_config username - current_config = YAML.load(File.read(Rails.root.join('config', 'app_config_example.yml'))) + current_config = YAML.load(File.read(Rails.root.join('config', 'app_config.yml.example'))) current_config[Rails.env.to_s] ||= {} current_config[Rails.env.to_s]['pod_url'] = "#{username}.joindiaspora.com" current_config['default']['pod_url'] = "#{username}.joindiaspora.com" diff --git a/db/seeds/tom.rb b/db/seeds/tom.rb index 50d41eb91..cc3000d0b 100644 --- a/db/seeds/tom.rb +++ b/db/seeds/tom.rb @@ -7,7 +7,7 @@ require 'config/environment' def set_app_config username - current_config = YAML.load(File.read(Rails.root.join('config', 'app_config_example.yml'))) + current_config = YAML.load(File.read(Rails.root.join('config', 'app_config.yml.example'))) current_config[Rails.env.to_s] ||= {} current_config[Rails.env.to_s]['pod_url'] = "#{username}.joindiaspora.com" current_config['default']['pod_url'] = "#{username}.joindiaspora.com" diff --git a/public/javascripts/view.js b/public/javascripts/view.js index 4713c7164..092d69f16 100644 --- a/public/javascripts/view.js +++ b/public/javascripts/view.js @@ -41,6 +41,12 @@ $(document).ready(function(){ } ); + $("#publisher textarea").keydown( function(e) { + if (e.shiftKey && e.keyCode == 13) { + $("#publisher form").submit(); + } + }); + });//end document ready diff --git a/public/stylesheets/application.css b/public/stylesheets/application.css index 9e8561cc2..82bbd8b6d 100644 --- a/public/stylesheets/application.css +++ b/public/stylesheets/application.css @@ -171,6 +171,41 @@ li.message { li.message .content div.info .time a { 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 { position: relative; font-size: 120%; @@ -270,6 +305,9 @@ ul.comment_set { .destroy_link a, .request_button a { color: #999999; font-weight: normal; } + .destroy_link a:hover, .request_button a:hover { + text-decoration: underline; + background: none; } .destroy_link { display: none; diff --git a/public/stylesheets/sass/application.sass b/public/stylesheets/sass/application.sass index 88145b6df..7c77a0b79 100644 --- a/public/stylesheets/sass/application.sass +++ b/public/stylesheets/sass/application.sass @@ -225,6 +225,59 @@ li.message a :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 :position relative @@ -360,6 +413,10 @@ ul.comment_set :color #999 :font :weight normal + &:hover + :text + :decoration underline + :background none .destroy_link :display none diff --git a/spec/models/user/posting_spec.rb b/spec/models/user/posting_spec.rb index da52ed849..d307e7a43 100644 --- a/spec/models/user/posting_spec.rb +++ b/spec/models/user/posting_spec.rb @@ -64,6 +64,16 @@ describe User do aspect1.posts.count.should be 1 end end + + describe '#update_post' do + let!(:album) { user.post(:album, :name => "Profile Photos", :to => aspect.id) } + + it 'should update fields' do + update_hash = { :name => "Other Photos" } + user.update_post( album, update_hash ) + album.name.should == "Other Photos" + end + end end context 'dispatching' do diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index 2249ae0b1..1608bbe58 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -7,54 +7,41 @@ require File.dirname(__FILE__) + '/../spec_helper' describe User do - before do - @user = Factory.create(:user) - @aspect = @user.aspect(:name => 'heroes') - end + let(:user) { Factory(:user) } + let(:aspect) { user.aspect(:name => 'heroes') } describe '#diaspora_handle' do it 'uses the pod config url to set the diaspora_handle' do - @user.diaspora_handle.should == @user.username + "@example.org" + user.diaspora_handle.should == user.username + "@example.org" end end - - - describe 'profiles' do + context 'profiles' do it 'should be able to update their profile and send it to their friends' do - Factory.create(:person) + updated_profile = { :profile => { + :first_name => 'bob', + :last_name => 'billytown', + :image_url => "http://clown.com"} } - updated_profile = {:profile => {:first_name => 'bob', :last_name => 'billytown', :image_url => "http://clown.com"}} - - @user.update_profile(updated_profile).should == true - @user.profile.image_url.should == "http://clown.com" + user.update_profile(updated_profile).should be true + user.profile.image_url.should == "http://clown.com" end end - describe 'aspects' do - it 'should delete an empty aspect' do - @user.aspects.include?(@aspect).should == true - @user.drop_aspect(@aspect) - @user.reload + context 'aspects' do + let(:user2) { Factory(:user) } + let(:aspect2) { user2.aspect(:name => 'stuff') } - @user.aspects.include?(@aspect).should == false + it 'should delete an empty aspect' do + user.drop_aspect(aspect) + user.aspects.include?(aspect).should == false end it 'should not delete an aspect with friends' do - user2 = Factory.create(:user) - aspect2 = user2.aspect(:name => 'stuff') - user2.reload - aspect2.reload - - friend_users(@user, Aspect.find_by_id(@aspect.id), user2, Aspect.find_by_id(aspect2.id)) - @aspect.reload - - @user.aspects.include?(@aspect).should == true - - proc{@user.drop_aspect(@aspect)}.should raise_error /Aspect not empty/ - - @user.reload - @user.aspects.include?(@aspect).should == true + friend_users(user, Aspect.find_by_id(aspect.id), user2, Aspect.find_by_id(aspect2.id)) + aspect.reload + proc{user.drop_aspect(aspect)}.should raise_error /Aspect not empty/ + user.aspects.include?(aspect).should == true end end