Add share_with fancybox on search page, fix a couple of queries
This commit is contained in:
parent
b22398951e
commit
3b727dc887
12 changed files with 130 additions and 78 deletions
|
|
@ -11,7 +11,7 @@ class AspectsController < ApplicationController
|
|||
def index
|
||||
@posts = current_user.visible_posts(:_type => "StatusMessage").paginate :page => params[:page], :per_page => 15, :order => 'created_at DESC'
|
||||
@post_hashes = hashes_for_posts @posts
|
||||
@contacts = current_user.contacts(:pending => false)
|
||||
@contacts = Contact.all(:user_id => current_user.id, :pending => false)
|
||||
@aspect_hashes = hashes_for_aspects @aspects.all, @contacts, :limit => 8
|
||||
@aspect = :all
|
||||
|
||||
|
|
@ -62,7 +62,7 @@ class AspectsController < ApplicationController
|
|||
unless @aspect
|
||||
render :file => "#{Rails.root}/public/404.html", :layout => false, :status => 404
|
||||
else
|
||||
@aspect_contacts = hashes_for_contacts @aspect.contacts(:pending => false)
|
||||
@aspect_contacts = hashes_for_contacts Contact.all(:user_id => current_user.id, :aspect_ids.in => [@aspect.id], :pending => false)
|
||||
@aspect_contacts_count = @aspect_contacts.count
|
||||
|
||||
@posts = @aspect.posts.find_all_by__type("StatusMessage", :order => 'created_at desc').paginate :page => params[:page], :per_page => 15
|
||||
|
|
|
|||
|
|
@ -113,6 +113,22 @@ class PeopleController < ApplicationController
|
|||
end
|
||||
end
|
||||
|
||||
def share_with
|
||||
@person = Person.find(params[:id].to_id)
|
||||
@contact = current_user.contact_for(@person)
|
||||
@aspects_with_person = []
|
||||
|
||||
if @contact
|
||||
@aspects_with_person = @contact.aspects
|
||||
end
|
||||
|
||||
@aspects_without_person = @aspects.reject do |aspect|
|
||||
@aspects_with_person.include?(aspect)
|
||||
end
|
||||
|
||||
render :layout => nil
|
||||
end
|
||||
|
||||
private
|
||||
def hashes_for_posts posts
|
||||
post_ids = posts.map{|p| p.id}
|
||||
|
|
|
|||
|
|
@ -34,12 +34,12 @@ class Profile
|
|||
validates_length_of :first_name, :maximum => 32
|
||||
validates_length_of :last_name, :maximum => 32
|
||||
|
||||
|
||||
before_save :strip_names
|
||||
|
||||
attr_accessible :first_name, :last_name, :image_url, :image_url_medium,
|
||||
:image_url_small, :birthday, :gender, :bio, :searchable, :date
|
||||
|
||||
|
||||
def person
|
||||
self._parent_document
|
||||
end
|
||||
|
|
|
|||
|
|
@ -37,23 +37,14 @@
|
|||
= link_to "edit aspect membership", "#", :id=> "edit_contact_aspects"
|
||||
|
||||
.edit{:class => ("hidden" if contact)}
|
||||
.contact_list#aspects_list
|
||||
%ul
|
||||
- for aspect in aspects_with_person
|
||||
%li{:data=>{:guid=>aspect.id}}
|
||||
%span.name
|
||||
= link_to aspect.name, aspect
|
||||
.right
|
||||
= aspect_membership_button(aspect.id, contact, person)
|
||||
|
||||
- for aspect in aspects_without_person
|
||||
%li{:data=>{:guid=>aspect.id}}
|
||||
%span.name
|
||||
= link_to aspect.name, aspect
|
||||
.right
|
||||
= aspect_membership_button(aspect.id, contact, person)
|
||||
= render :partial => 'people/share_with_pane',
|
||||
:locals => {:person => person,
|
||||
:contact => contact,
|
||||
:aspects_with_person => aspects_with_person,
|
||||
:aspects_without_person => aspects_without_person}
|
||||
|
||||
.right
|
||||
= link_to "done editing", "#", :id => "done_contact_aspects"
|
||||
- if contact
|
||||
.right
|
||||
= link_to "done editing", "#", :id => "done_contact_aspects"
|
||||
= link_to t('people.profile_sidebar.remove_contact'), person, :confirm => t('are_you_sure'), :method => :delete
|
||||
|
|
|
|||
|
|
@ -4,22 +4,27 @@
|
|||
|
||||
%li.message{:id => person.id}
|
||||
|
||||
.right{:style=>"display:inline;"}
|
||||
- if person.owner_id == current_user.id
|
||||
= t('.thats_you')
|
||||
- elsif contact && !contact.pending
|
||||
= t('.already_connected')
|
||||
- elsif (contact && contact.pending) || request
|
||||
= t('.pending_request')
|
||||
- else
|
||||
- single_aspect_form ||= nil
|
||||
= link_to "start sharing",
|
||||
{:controller => "people",
|
||||
:action => "share_with",
|
||||
:id => person.id},
|
||||
:class => 'button share_with_button'
|
||||
|
||||
= person_image_link(person)
|
||||
|
||||
.content
|
||||
%span.from
|
||||
=person_link(person)
|
||||
|
||||
.right{:style=>"display:inline;"}
|
||||
- if person.owner_id == current_user.id
|
||||
= t('.thats_you')
|
||||
- elsif contact && !contact.pending
|
||||
= t('.already_connected')
|
||||
- elsif (contact && contact.pending) || request
|
||||
= link_to t('.pending_request'), aspects_manage_path
|
||||
- else
|
||||
- single_aspect_form ||= nil
|
||||
= render(:partial => request_partial(single_aspect_form), :locals => {:aspects => aspects, :destination_handle => person.diaspora_handle})
|
||||
|
||||
.info
|
||||
= person.diaspora_handle
|
||||
|
|
|
|||
|
|
@ -5,6 +5,9 @@
|
|||
- content_for :page_title do
|
||||
= t('search')
|
||||
|
||||
- content_for :head do
|
||||
= include_javascripts :people
|
||||
|
||||
.span-24.last
|
||||
- if params[:q].blank?
|
||||
%h2
|
||||
|
|
@ -17,7 +20,7 @@
|
|||
|
||||
|
||||
.span-15.append-1
|
||||
|
||||
|
||||
- if @hashes.empty?
|
||||
%p
|
||||
=t('.no_one_found')
|
||||
|
|
|
|||
|
|
@ -3,17 +3,17 @@
|
|||
-# the COPYRIGHT file.
|
||||
|
||||
%li.message{:data=>{:guid=>post.id}}
|
||||
- if person.owner_id == current_user.id
|
||||
.right.controls
|
||||
- reshare_aspects = aspects_without_post(aspects, post)
|
||||
- unless reshare_aspects.empty?
|
||||
= render 'shared/reshare', :aspects => reshare_aspects, :post => post
|
||||
= link_to t('delete'), status_message_path(post), :confirm => t('are_you_sure'), :method => :delete, :remote => true, :class => "delete"
|
||||
|
||||
= person_image_link(person, :size => :thumb_small)
|
||||
|
||||
.content
|
||||
.from
|
||||
- if person.owner_id == current_user.id
|
||||
.right
|
||||
- reshare_aspects = aspects_without_post(aspects, post)
|
||||
- unless reshare_aspects.empty?
|
||||
= render 'shared/reshare', :aspects => reshare_aspects, :post => post
|
||||
= link_to t('delete'), status_message_path(post), :confirm => t('are_you_sure'), :method => :delete, :remote => true, :class => "delete"
|
||||
|
||||
%h4
|
||||
=person_link(person)
|
||||
|
||||
|
|
|
|||
|
|
@ -28,6 +28,8 @@ javascripts:
|
|||
- public/javascripts/vendor/jquery-ui-1.8.6.custom.min.js
|
||||
- public/javascripts/aspect-edit.js
|
||||
- public/javascripts/contact-list.js
|
||||
people:
|
||||
- public/javascripts/contact-list.js
|
||||
photos:
|
||||
- public/javascripts/photo-show.js
|
||||
|
||||
|
|
|
|||
|
|
@ -8,6 +8,10 @@ Diaspora::Application.routes.draw do
|
|||
resources :requests, :only => [:destroy, :create]
|
||||
resources :services
|
||||
resources :posts, :only => [:show], :path => '/p/'
|
||||
|
||||
|
||||
|
||||
match '/people/share_with' => 'people#share_with', :as => 'share_with'
|
||||
resources :people do
|
||||
resources :status_messages
|
||||
resources :photos
|
||||
|
|
|
|||
|
|
@ -3,7 +3,7 @@
|
|||
* the COPYRIGHT file.
|
||||
*/
|
||||
var View = {
|
||||
initialize: function() {
|
||||
initialize: function() {
|
||||
/* Buttons */
|
||||
$("input[type='submit']").addClass("button");
|
||||
|
||||
|
|
@ -45,7 +45,7 @@ var View = {
|
|||
$(this.newRequest.selector)
|
||||
.live("submit", this.newRequest.submit);
|
||||
|
||||
/* Button fancyboxes */
|
||||
/* Button fancyboxes */
|
||||
$(this.fancyBoxButtons.selectors.join(", "))
|
||||
.fancybox({
|
||||
'titleShow': false,
|
||||
|
|
@ -67,34 +67,35 @@ var View = {
|
|||
.click(this.userMenu.removeFocus)
|
||||
.click(this.reshareButton.removeFocus);
|
||||
},
|
||||
|
||||
|
||||
addAspectButton: {
|
||||
click: function() {
|
||||
$("#aspect_name").focus();
|
||||
},
|
||||
selector: ".add_aspect_button"
|
||||
},
|
||||
|
||||
fancyBoxButtons: {
|
||||
|
||||
fancyBoxButtons: {
|
||||
selectors: [
|
||||
".add_aspect_button",
|
||||
".manage_aspect_contacts_button",
|
||||
".invite_user_button",
|
||||
".add_photo_button",
|
||||
".remove_person_button",
|
||||
".question_mark"
|
||||
".question_mark",
|
||||
".share_with_button"
|
||||
]
|
||||
},
|
||||
|
||||
|
||||
debug: {
|
||||
click: function() {
|
||||
click: function() {
|
||||
$("#debug_more").toggle("fast");
|
||||
},
|
||||
selector: "#debug_info"
|
||||
},
|
||||
|
||||
flashes: {
|
||||
animate: function() {
|
||||
flashes: {
|
||||
animate: function() {
|
||||
var $this = $(View.flashes.selector);
|
||||
$this.animate({
|
||||
top: 0
|
||||
|
|
@ -108,10 +109,10 @@ var View = {
|
|||
|
||||
gettingStarted: {
|
||||
click: function() {
|
||||
var $this = $(this);
|
||||
$this.animate({
|
||||
var $this = $(this);
|
||||
$this.animate({
|
||||
left: parseInt($this.css("left"), 30) === 0 ? -$this.outerWidth() : 0
|
||||
}, function() {
|
||||
}, function() {
|
||||
$this.css("left", "1000px");
|
||||
});
|
||||
},
|
||||
|
|
@ -120,7 +121,7 @@ var View = {
|
|||
|
||||
newRequest: {
|
||||
submit: function() {
|
||||
$(this).hide().parent().find(".message").removeClass("hidden");
|
||||
$(this).hide().parent().find(".message").removeClass("hidden");
|
||||
},
|
||||
selector: ".new_request"
|
||||
},
|
||||
|
|
@ -135,18 +136,18 @@ var View = {
|
|||
},
|
||||
|
||||
search: {
|
||||
blur: function() {
|
||||
blur: function() {
|
||||
$(this).removeClass("active");
|
||||
},
|
||||
focus: function() {
|
||||
focus: function() {
|
||||
$(this).addClass("active");
|
||||
},
|
||||
selector: "#q"
|
||||
},
|
||||
|
||||
|
||||
tooltips: {
|
||||
addAspect: {
|
||||
bind: function() {
|
||||
addAspect: {
|
||||
bind: function() {
|
||||
$(".add_aspect_button", "#aspect_nav").tipsy({
|
||||
gravity:"w"
|
||||
});
|
||||
|
|
@ -154,7 +155,7 @@ var View = {
|
|||
},
|
||||
|
||||
avatars: {
|
||||
bind: function() {
|
||||
bind: function() {
|
||||
$("#left_pane img.avatar, #manage_aspect_zones img.avatar").tipsy({
|
||||
live: true
|
||||
});
|
||||
|
|
@ -162,7 +163,7 @@ var View = {
|
|||
},
|
||||
|
||||
public_badge: {
|
||||
bind: function() {
|
||||
bind: function() {
|
||||
$(".public_badge img").tipsy({
|
||||
live: true
|
||||
});
|
||||
|
|
@ -170,7 +171,7 @@ var View = {
|
|||
},
|
||||
|
||||
whatIsThis: {
|
||||
bind: function() {
|
||||
bind: function() {
|
||||
$(".what_is_this").tipsy({
|
||||
live: true,
|
||||
delayIn: 400
|
||||
|
|
@ -178,9 +179,9 @@ var View = {
|
|||
}
|
||||
},
|
||||
|
||||
bindAll: function() {
|
||||
bindAll: function() {
|
||||
for(var element in this) {
|
||||
if(element !== "bindAll") {
|
||||
if(element !== "bindAll") {
|
||||
this[element].bind();
|
||||
}
|
||||
};
|
||||
|
|
@ -197,10 +198,10 @@ var View = {
|
|||
},
|
||||
|
||||
userMenu: {
|
||||
click: function() {
|
||||
click: function() {
|
||||
$(this).toggleClass("active");
|
||||
},
|
||||
removeFocus: function(evt) {
|
||||
removeFocus: function(evt) {
|
||||
var $target = $(evt.target);
|
||||
if(!$target.closest("#user_menu").length) {
|
||||
$(View.userMenu.selector).removeClass("active");
|
||||
|
|
@ -210,7 +211,7 @@ var View = {
|
|||
},
|
||||
|
||||
webFingerForm: {
|
||||
submit: function(evt) {
|
||||
submit: function(evt) {
|
||||
$(evt.currentTarget).siblings("#loader").show();
|
||||
$("#request_result li:first").hide();
|
||||
},
|
||||
|
|
@ -218,7 +219,7 @@ var View = {
|
|||
}
|
||||
};
|
||||
|
||||
$(function() {
|
||||
/* Make sure this refers to View, not the document */
|
||||
$(function() {
|
||||
/* Make sure this refers to View, not the document */
|
||||
View.initialize.apply(View);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -617,20 +617,22 @@ ul.comments
|
|||
a
|
||||
:padding 3px
|
||||
|
||||
li.message .from .right
|
||||
li.message .right
|
||||
:display none
|
||||
:position absolute
|
||||
:right 12px
|
||||
:font
|
||||
:size 12px
|
||||
:color #999
|
||||
a
|
||||
:color #999
|
||||
|
||||
&.controls
|
||||
:font
|
||||
:weight normal
|
||||
&:hover
|
||||
:text
|
||||
:decoration underline
|
||||
:size 12px
|
||||
:color #999
|
||||
a
|
||||
:color #999
|
||||
:font
|
||||
:weight normal
|
||||
&:hover
|
||||
:text
|
||||
:decoration underline
|
||||
|
||||
li.message:hover
|
||||
.right
|
||||
|
|
@ -2041,3 +2043,22 @@ h3,h4
|
|||
.aspect_badge
|
||||
:top -0.2em
|
||||
|
||||
#share_with
|
||||
:min-width 400px
|
||||
:max-width 400px
|
||||
|
||||
.share_with_header
|
||||
:min-height 100px
|
||||
|
||||
.avatar
|
||||
:width 100px
|
||||
:height 100px
|
||||
:float left
|
||||
h3,p
|
||||
:padding
|
||||
:left 120px
|
||||
h3
|
||||
:margin 0
|
||||
|
||||
#aspects_list
|
||||
:height auto
|
||||
|
|
|
|||
|
|
@ -14,6 +14,15 @@ describe PeopleController do
|
|||
sign_in :user, user
|
||||
end
|
||||
|
||||
describe '#share_with' do
|
||||
before do
|
||||
@person = Factory.create(:person)
|
||||
end
|
||||
it 'succeeds' do
|
||||
get :share_with, :id => @person.id
|
||||
response.should be_success
|
||||
end
|
||||
end
|
||||
describe '#hashes_from_people' do
|
||||
before do
|
||||
@everyone = []
|
||||
|
|
@ -127,14 +136,14 @@ describe PeopleController do
|
|||
get :show, :id => user.id
|
||||
response.should redirect_to people_path
|
||||
end
|
||||
|
||||
|
||||
it "renders the show page of a contact" do
|
||||
user2 = make_user
|
||||
connect_users(user, aspect, user2, user2.aspects.create(:name => 'Neuroscience'))
|
||||
get :show, :id => user2.person.id
|
||||
response.should be_success
|
||||
end
|
||||
|
||||
|
||||
it "renders the show page of a non-contact" do
|
||||
user2 = make_user
|
||||
get :show, :id => user2.person.id
|
||||
|
|
|
|||
Loading…
Reference in a new issue