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

This commit is contained in:
Sarah Mei 2010-10-14 20:51:59 -07:00
commit 85865bc9b1
31 changed files with 638 additions and 1107 deletions

7
.gitignore vendored
View file

@ -4,8 +4,13 @@ config/fb_config.yml
config/initializers/secret_token.rb
.bundle
# Uploded files and local files
# Generated files
log/*
public/stylesheets/application.css
public/stylesheets/sessions.css
public/stylesheets/ui.css
# Uploded files and local files
public/uploads/*
public/source.tar
tmp/**/*

View file

@ -33,7 +33,7 @@ class RequestsController < ApplicationController
aspect = current_user.aspect_by_id(params[:request][:aspect_id])
begin
rel_hash = relationship_flow(params[:request][:destination_url])
rel_hash = relationship_flow(params[:request][:destination_url].strip)
rescue Exception => e
raise e unless e.message.include? "not found"
flash[:error] = I18n.t 'requests.create.error'

View file

@ -80,7 +80,8 @@ class UsersController < ApplicationController
private
def prep_image_url(params)
url = APP_CONFIG[:pod_url].chop if APP_CONFIG[:pod_url][-1,1] == '/'
url = APP_CONFIG[:pod_url].dup
url.chop! if APP_CONFIG[:pod_url][-1,1] == '/'
if params[:profile][:image_url].empty?
params[:profile].delete(:image_url)
else

View file

@ -27,7 +27,6 @@ class Request
before_validation :clean_link
scope :for_user, lambda{ |user| where(:destination_url => user.person.receive_url) }
scope :from_user, lambda{ |user| where(:destination_url.ne => user.person.receive_url) }
def self.instantiate(options = {})
person = options[:from]
@ -48,6 +47,7 @@ class Request
protected
def clean_link
if self.destination_url
self.destination_url = self.destination_url.strip
self.destination_url = 'http://' + self.destination_url unless self.destination_url.match('https?://')
self.destination_url = self.destination_url + '/' if self.destination_url[-1,1] != '/'
end

View file

@ -268,8 +268,24 @@ class User
###Invitations############
def invite_user( opts = {} )
if self.invites > 0
invited_user = User.invite!(:email => opts[:email], :inviter => self)
aspect_id = opts.delete(:aspect_id)
if aspect_id == nil
raise "Must invite into aspect"
elsif !(self.aspects.find_by_id(aspect_id))
raise "Must invite to your aspect"
end
request = Request.instantiate(
:to => "http://local_request.example.com",
:from => self.person,
:into => aspect_id
)
invited_user = User.invite!(:email => opts[:email], :request => request, :inviter => self)
self.invites = self.invites - 1
self.pending_requests << request
request.save
self.save!
invited_user
else
@ -279,11 +295,14 @@ class User
def self.invite!(attributes={})
inviter = attributes.delete(:inviter)
request = attributes.delete(:request)
invitable = find_or_initialize_with_error_by(:email, attributes.delete(:email))
invitable.attributes = attributes
if invitable.inviters.include?(inviter)
raise "You already invited this person"
else
invitable.pending_requests << request
invitable.inviters << inviter
end

View file

@ -8,9 +8,6 @@
$("#add_album_button").fancybox();
});
= content_for :page_title do
= link_to "◂ #{t('.home')}", aspects_path, :aspect => params[:aspect]
- content_for :left_pane do
= render "shared/aspect_friends"
@ -31,6 +28,3 @@
#pagination
= will_paginate @albums
#content_bottom
.back
= link_to "⇧ #{t('.home')}", root_path

View file

@ -0,0 +1,20 @@
-# Copyright (c) 2010, Diaspora Inc. This file is
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
#no_posts.empty_message{:style => ("display:none" unless @posts.count == 0)}
.null_arrow ⇧
%h3=t('.start_talking')
#no_friends.empty_message{:style => ("display:none" unless @friends.count == 0)}
- if (@aspect == :all) || (@aspect == :public)
%h3=t('.nobody')
%h4= link_to t('.add_friend'), aspects_manage_path
%h4= link_to t('.invite'), aspects_manage_path
- else
%h3=t('.nobody_in_aspect', :aspect_name => @aspect.name)
%h4= link_to t('.add_friend_to', :aspect_name => @aspect.name), "#add_request_pane", :class => "add_request_button"
%h4= link_to t('.invite', :aspect_name => @aspect.name), "#invite_user_pane", :class => "invite_user_button", :class => "invite_user_button", :title => t('.invite')

View file

@ -2,18 +2,18 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
- content_for :page_title do
= link_to t('.photos'), albums_path(:aspect => @aspect)
- content_for :left_pane do
= render "shared/aspect_friends"
- content_for :publish do
= render "shared/publisher", :aspect_ids => :all, :broadcast => true
= render 'aspects/empty_messages'
%ul#stream
- for post in @posts
= render type_partial(post), :post => post unless post.class == Album
#pagination
= will_paginate @posts

View file

@ -2,18 +2,18 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
- content_for :page_title do
= link_to t('.photos'), albums_path(:aspect => @aspect)
- content_for :left_pane do
= render "shared/aspect_friends"
- content_for :publish do
= render "shared/publisher", :aspect_ids => :all
= render 'aspects/empty_messages'
%ul#stream
- for post in @posts
= render type_partial(post), :post => post unless post.class == Album
#pagination
= will_paginate @posts

View file

@ -4,5 +4,6 @@
%p
= f.label :email
= f.text_field :email
= f.hidden_field :aspect_id, :value => @aspect.id
%p= f.submit "Send an invitation"
/= link_to "Home", after_sign_in_path_for(resource_name)

View file

@ -37,9 +37,10 @@
});
function processRetraction(post_id){
$('#' + post_id ).fadeOut(500, function(){
$(this).remove;
});
$('#' + post_id ).fadeOut(500).remove();
if($("#stream")[0].childElementCount == 0){
$("#no_posts").fadeIn(200);
}
}
function processComment(post_id, html){
@ -59,13 +60,22 @@
function processPost(className, html, aspectIds){
if(onPageForAspects(aspectIds)){
var addPostToStream = function (html){
$("#stream").prepend(
$(html).fadeIn("fast", function(){
$("#stream label:first").inFieldLabels();
})
);
)
};
if( $("#no_posts").is(":visible") ){
$("#no_posts").fadeOut(400, addPostToStream(html)).hide();
} else {
addPostToStream(html);
}
}
}
function processPhotoInAlbum(photoHash){
if (location.href.indexOf(photoHash['album_id']) == -1){

View file

@ -11,6 +11,8 @@
%meta{"http-equiv"=>"Content-Type", :content=>"text/html; charset=utf-8"}/
= stylesheet_link_tag "blueprint/screen", :media => 'screen'
= stylesheet_link_tag "blueprint/print", :media => 'print'
= stylesheet_link_tag "application", "ui"
= stylesheet_link_tag "/../javascripts/fancybox/jquery.fancybox-1.3.1"

View file

@ -2,7 +2,9 @@
-# licensed under the Affero General Public License version 3 or later. See
-# the COPYRIGHT file.
#friend_pictures
#left_pane
#friend_pictures
= owner_image_link
- for friend in @friends
= person_image_link(friend)
@ -22,10 +24,19 @@
%br
= link_to t('.add_friends'), aspects_manage_path
%br
= link_to "Invite a friend!", "#invite_user_pane", :id => "invite_user_button", :class => "invite_user_button", :title => "Invite a friend"
%br
= "You have #{@invites} invites."
.yo{ :style => "display:none;"}
%br
%br
%ul
%li= link_to 'stream', aspect_path(@aspect)
%li= link_to t('.photos'), albums_path(:aspect => @aspect)
%br
%h4 Invites
= link_to "Invite a friend!", "#invite_user_pane", :class => "invite_user_button", :class => "invite_user_button", :title => "Invite a friend"
%br
= "You have #{@invites} invites."
.yo{ :style => "display:none;"}
#invite_user_pane
= render "invitations/new"

View file

@ -5,8 +5,13 @@
%h2 Account
%h3 Change Password
= link_to "invite friends", new_user_invitation_path(current_user)
%br
%br
%br
%h3 Change Password
= form_for @user do |f|
= f.error_messages
@ -23,12 +28,14 @@
= f.submit 'Change password'
%h3 Export Data
= link_to "download my xml", users_export_path, :class => "button"
= link_to "download my photos", users_export_photos_path, :class => "button"
%h3 Close Account
%br
%br
%br
%h3 Close Account
= link_to "Close Account", current_user,
:confirm => "Are you sure?", :method => :delete,
:class => "button"

View file

@ -4,8 +4,6 @@
%h2 Profile
= link_to new_user_invitation_path(current_user)
= form_for @user do |f|
= f.error_messages

View file

@ -1,7 +1,3 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
fr-informal:
errors:
messages:
@ -22,19 +18,29 @@ fr-informal:
signed_in: 'Connecté avec succès.'
signed_out: 'Déconnecté avec succès.'
passwords:
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant des instructions texpliquant comment réinitialiser ton mot de passe.'
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant les instructions pour réinitialiser ton mot de passe.'
updated: 'Ton mot de passe a été modifié avec succès. Tu es à présent connecté.'
confirmations:
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant des instructions texpliquant comment confirmer ton compte.'
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant les instructions pour confirmer ton compte.'
confirmed: 'Ton compte a été confirmé avec succès. Tu es à présent connecté.'
registrations:
signed_up: 'Tu tes inscrit avec succès. Si activée, une confirmation a été envoyée sur ton adresse e-mail.'
signed_up: 'Tu tes inscrit avec succès. Si cette dernière est activée, une confirmation a été envoyée sur ton adresse e-mail.'
updated: 'Tu as mis à jour ton compte avec succès.'
destroyed: 'Au revoir ! Ton compte a été résilié avec succès. Nous espérons te revoir très bientôt.'
unlocks:
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant des instructions texpliquant comment déverrouiller ton compte.'
send_instructions: 'Tu vas recevoir dans quelques minutes un e-mail contenant les instructions pour déverrouiller ton compte.'
unlocked: 'Ton compte a été déverrouillé avec succès. Tu es à présent connecté.'
invitations:
send_instructions: 'Ton invitation a été envoyée.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Ton mot de passe a été réglé avec succès. Tu es à présent connecté.'
mailer:
confirmation_instructions: 'Instructions de confirmation'
reset_password_instructions: 'Réinitialiser les instructions du mot de passe'
unlock_instructions: 'Instructions de déverrouillage'
confirmation_instructions:
subject: 'Instructions de confirmation'
reset_password_instructions:
subject: 'Instructions de réinitialisation du mot de passe'
unlock_instructions:
subject: 'Instructions de déverrouillage'
invitation:
subject: 'Un ami souhaite que tu rejoignes Diaspora !'

View file

@ -1,7 +1,3 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
fr:
errors:
messages:
@ -14,7 +10,7 @@ fr:
unauthenticated: 'Vous devez vous connecter ou vous inscrire avant de continuer.'
unconfirmed: 'Vous devez confirmer votre compte avant de continuer.'
locked: 'Votre compte est verrouillé.'
invalid: 'E-mail ou mot de passe invalide.'
invalid: 'Adresse e-mail ou mot de passe invalide.'
invalid_token: 'Jeton dauthentification invalide.'
timeout: 'Votre session a expiré, veuillez vous connecter de nouveau afin de continuer.'
inactive: 'Votre compte na pas encore été activé.'
@ -22,19 +18,29 @@ fr:
signed_in: 'Connecté avec succès.'
signed_out: 'Déconnecté avec succès.'
passwords:
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant des instructions vous expliquant comment réinitialiser votre mot de passe.'
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant les instructions pour réinitialiser votre mot de passe.'
updated: 'Votre mot de passe a été modifié avec succès. Vous êtes à présent connecté.'
confirmations:
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant des instructions vous expliquant comment confirmer votre compte.'
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant les instructions pour confirmer votre compte.'
confirmed: 'Votre compte a été confirmé avec succès. Vous êtes à présent connecté.'
registrations:
signed_up: 'Vous vous êtes inscrit avec succès. Si activée, une confirmation a été envoyée sur votre adresse e-mail.'
signed_up: 'Vous vous êtes inscrit avec succès. Si cette dernière est activée, une confirmation a été envoyée sur votre adresse e-mail.'
updated: 'Vous avez mis à jour votre compte avec succès.'
destroyed: 'Au revoir ! Votre compte a été résilié avec succès. Nous espérons vous revoir très bientôt.'
unlocks:
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant des instructions vous expliquant comment déverrouiller votre compte.'
send_instructions: 'Vous allez recevoir dans quelques minutes un e-mail contenant les instructions pour déverrouiller votre compte.'
unlocked: 'Votre compte a été déverrouillé avec succès. Vous êtes à présent connecté.'
invitations:
send_instructions: 'Votre invitation a été envoyée.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Votre mot de passe a été réglé avec succès. Vous êtes à présent connecté.'
mailer:
confirmation_instructions: 'Instructions de confirmation'
reset_password_instructions: 'Réinitialiser les instructions du mot de passe'
unlock_instructions: 'Instructions de déverrouillage'
confirmation_instructions:
subject: 'Instructions de confirmation'
reset_password_instructions:
subject: 'Instructions de réinitialisation du mot de passe'
unlock_instructions:
subject: 'Instructions de déverrouillage'
invitation:
subject: 'Un ami souhaite que vous rejoigniez Diaspora !'

View file

@ -0,0 +1,40 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
tr:
errors:
messages:
not_found: "bulunmadi"
already_confirmed: "zaten doğrulandı"
not_locked: "kilitlenmedi"
devise:
failure:
unauthenticated: "Devam etmeden once bir hesap açtırmalı veya hesabınızla giriş yapmalısınız."
unconfirmed: "Hesabınızı doğrulamalısınız devam etmeden once."
locked: "Hesabınız kilitlenmiştir."
invalid: "Yanlış email veya şifre."
invalid_token: "Yanlış authentikasyon tılsımı."
timeout: "Zamanınız sona erdi, lütfen tekrar giriş yapın devam etmek için."
inactive: "Hesabınız aktive edilmemiştir daha."
sessions:
signed_in: "Başarıyla giriş yaptınız."
signed_out: "Başarıyla çıkıs yaptınız."
passwords:
send_instructions: "Kisa bir süre içersinde şifrenizi nasıl yeniliyceğinizi açıklıyan bir email alıcaksınız."
updated: "Şifreniz değistirilmiştir. Şu anda giriş yapmış oluyorsunuz."
confirmations:
send_instructions: "Kısa bir süre içersinde hesabınızı nasıl dogruluycaginiza dair bir email alicaksiniz."
confirmed: "Hesabınız dogrulanmıstır. Şu anda giriş yapmış oluyorsunuz."
registrations:
signed_up: "Basarıyla kayıt yaptınız. Dogrulama emaili size gonderilmistir."
updated: "Heabinizi başarili olarak yenilediniz."
destroyed: "Hoşçakal! Hesabiniz yok edildi. Umuyoruz sizi tekrar gorüceğiz yakınlarda."
unlocks:
send_instructions: "Kisa bir süre içersinde hesabınızı nasıl kilit altinda çikarabiliceginize dair bir email alıcaksınız."
unlocked: "Heabiniz kilit altindan çıkartılmıstır. Şu anda giriş yapmıs oluyorsunuz"
mailer:
confirmation_instructions: "Doğrulama talimatları"
reset_password_instructions: "Yeni şifre kurma talimatları"
unlock_instructions: "Kilit altından çıkarma talimatları"

View file

@ -38,6 +38,7 @@ en:
share: "Share"
aspect_friends:
add_friends: "add friends"
photos: "photos"
albums:
album:
you: "you"
@ -69,10 +70,13 @@ en:
friends_albums: "Friends Albums"
your_albums: "Your Albums"
aspects:
index:
photos: "photos"
show:
photos: "photos"
empty_messages:
start_talking: "Nobody has said anything yet. Get the conversation started!"
nobody: "We know you have friends, bring them to Diaspora!"
nobody_in_aspect: "Your aspect '%{aspect_name}' is empty."
add_friend: "Add a friend"
add_friend_to: "Add a someone to %{aspect_name}"
invite: "Invite a someone to join Diaspora!"
manage:
add_a_new_aspect: "Add a new aspect"
add_a_new_friend: "Add a new friend"

View file

@ -21,7 +21,7 @@ fr-informal:
people:
helper:
results_for: " résultats concernant %{params}"
people_on_pod_are_aware_of: " personnes agissant comme des automates sont conscients de"
people_on_pod_are_aware_of: " personnes agissant comme des automates sont au courant"
layouts:
application:
edit_profile: "éditer le profil"
@ -52,7 +52,7 @@ fr-informal:
edit:
editing: "Édition"
updated: "mis à jour"
are_you_sure: "Es-tu sûr(e)?"
are_you_sure: "Es-tu sûr(e) ?"
delete_album: "Supprimer lalbum"
cancel: "Annuler"
index:
@ -84,17 +84,18 @@ fr-informal:
add_a_new_aspect: "Ajouter un nouvel aspect"
create: "Créer"
create:
success:"Clique sur le symbole plus situé sur le côté gauche afin que Diaspora détermine qui peut voir ton nouvel aspect."
success: "Clique sur le symbole plus situé sur le côté gauche afin que Diaspora détermine qui peut voir ton nouvel aspect."
failure: "La création de laspect a échoué."
destroy:
success: "%{name} a été supprimé avec succès."
update:
success: "Ton aspect, %{name}, a été édité avec succès."
move_friends:
failure: "Lédition de laspect concernant lami %{real_name} a échoué."
failure: "Lédition de laspect concernant ton ami %{real_name} a échoué."
success: "Les aspects ont été édités avec succès."
move_friend:
error: "ne fonctionne pas %{inspect}"
notice: "Tu montres à présent à ton ami un aspect différent au tien."
failure: "ne fonctionne pas %{inspect}"
success: "Tu montres à présent à ton ami un aspect différent au tiens."
helper:
remove: "supprimer"
aspect_not_empty: "Laspect nest pas vide"
@ -106,12 +107,14 @@ fr-informal:
update_profile: "Mettre à jour le profil"
home: "Accueil"
diaspora_username: "NOM DUTILISATEUR DIASPORA"
info: "Information"
info: "Informations"
picture: "Image"
editing_profile: "Édition du profil"
albums: "Albums"
you_dont_have_any_photos: "Tu nas aucune photo ! Rends-toi sur la page"
page_to_upload_some: "afin den transférer quelques-unes."
or: "ou"
destroy: "Compte clôturé avec succès."
comments:
comment:
ago: "il y a"
@ -132,25 +135,33 @@ fr-informal:
delete_photo: "Supprimer la photo"
photo:
show_comments: "afficher les commentaires"
posted_a_new_photo_to: "a publié une nouvelle photo sur"
posted_a_new_photo_to: "a publié une nouvelle photo dans"
new:
new_photo: "Nouvelle photo"
back_to_list: "Retourner à la liste"
post_it: "publie-la !"
post_it: "la publier !"
create:
runtime_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que ta ceinture de sécurité est bien attachée ?"
integrity_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que cétait bien une image ?"
type_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que limage était bien ajoutée ?"
type_error: "Le transfert de la photo a échoué. Es-tu sûr(e) que limage a bien été ajoutée ?"
update:
notice: "La photo a été mise à jour avec succès."
error: "Échec de lédition de la photo."
error: "Lédition de la photo a échoué."
destroy:
notice: "Photo supprimée."
notice: "La photo a été supprimée."
registrations:
new:
sign_up: "Inscription"
create:
success: "Tu as rejoint Diaspora !"
invitations:
create:
sent: 'Ton invitation a été envoyée.'
no_more: 'Tu nas plus dinvitation.'
already_sent: 'Tu as déjà invité cette personne.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Ton mot de passe a été réglé avec succès. Tu es à présent connecté.'
status_messages:
new_status_message:
tell_me_something_good: "dis-moi quelque chose de bien"
@ -164,14 +175,14 @@ fr-informal:
comments: "commentaires"
are_you_sure: "Es-tu sûr(e) ?"
destroy: "Détruire"
view_all: "Tout voir"
view_all: "Tout afficher"
message: "Message"
owner: "Propriétaire"
helper:
no_message_to_display: "Aucun message à afficher."
people:
person:
add_friend: "ajouter un ami"
add_friend: "ajouter en ami"
pending_request: "requête en attente"
index:
add_friend: "ajouter un ami"
@ -186,13 +197,13 @@ fr-informal:
show:
last_seen: "dernière connexion : %{how_long_ago}"
friends_since: "amis depuis : %{how_long_ago}"
save: "sauvegarder"
save: "sauver"
are_you_sure: "Es-tu sûr(e) ?"
remove_friend: "supprimer un ami"
remove_friend: "supprimer de mes amis"
requests:
new_request:
add_a_new_friend_to: "Ajouter un ami à"
enter_a_diaspora_username: "Saisi un nom dutilisateur Diaspora :"
add_a_new_friend_to: "Ajouter un nouvel ami à"
enter_a_diaspora_username: "Saisis un nom dutilisateur Diaspora :"
your_diaspora_username_is: "Ton nom dutilisateur Diaspora est : %{diaspora_handle}"
friends_username: "Nom dutilisateur de lami"
destroy:
@ -201,6 +212,6 @@ fr-informal:
ignore: "Requête dami ignorée."
create:
error: "Aucun résultat Diaspora na été trouvé avec cette adresse e-mail !"
already_friends: "Tu es déjà ami avec %{destination_url}!"
already_friends: "Vous êtes déjà amis avec %{destination_url}!"
success: "Une requête dami a été envoyée à %{destination_url}."
horribly_wrong: "Quelque chose dhorrible sest produit."

View file

@ -2,42 +2,42 @@
# licensed under the Affero General Public License version 3 or later. See
# the COPYRIGHT file.
# Localization file for French. Add more files in this directory for other locales.
# Localization file for French (Formal Honorifics). Add more files in this directory for other locales.
# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
fr:
hello: "Bonjour tout le monde"
application:
helper:
unknown_person: "unknown person"
new_requests: "new requests"
unknown_person: "personne inconnue"
new_requests: "nouvelles requêtes"
dashboards:
helper:
home: "home"
home: "accueil"
error_messages:
helper:
invalid_fields: "Invalid Fields"
correct_the_following_errors_and_try_again: "Correct the following errors and try again."
invalid_fields: "Champs invalides"
correct_the_following_errors_and_try_again: "Corrigez les erreurs suivantes, puis réessayez."
people:
helper:
results_for: " resultados para %{params}"
people_on_pod_are_aware_of: " gente en pod estan al tanto de "
results_for: " résultats concernant %{params}"
people_on_pod_are_aware_of: " personnes agissant comme des automates sont au courant"
layouts:
application:
edit_profile: "Éditez votre profil"
logout: "Déconnexion"
edit_profile: "éditer le profil"
logout: "déconnexion"
shared:
aspect_nav:
all_aspects: "Tous les Aspects"
manage: "Gérez"
manage_your_aspects: "Gérez vos Aspects"
all_aspects: "Tous les aspects"
manage: "Gérer"
manage_your_aspects: "Gérer vos aspects"
sub_header:
all_aspects: "Tous les Aspects"
manage_aspects: "Gérez vos Aspects"
all_aspects: "Tous les aspects"
manage_aspects: "Gérer les aspects"
publisher:
share: "Partager"
aspect_friends:
add_friends: "Ajouter des amis"
add_friends: "ajouter des amis"
albums:
album:
you: "vous"
@ -52,22 +52,22 @@ fr:
edit:
editing: "Édition"
updated: "mis à jour"
are_you_sure: "Êtes-vous sûr?"
delete_album: "Supprimer l'album"
are_you_sure: "Êtes-vous sûr(e) ?"
delete_album: "Supprimer lalbum"
cancel: "Annuler"
index:
home: "accueil"
new_album: "Nouvel album"
helper:
friends_albums: "Friends Albums"
your_albums: "Your Albums"
create:
success: "Tu as créé un album nommé %{name}."
success: "Vous avez créé un album nommé %{name}."
update:
success: "Lalbum %{name} a été édité avec succès."
failure: "Lédition de lalbum %{name} a échoué."
destroy:
success: "Lalbum %{name} a été supprimé."
helper:
friends_albums: "Albums damis"
your_albums: "Vos albums"
aspects:
index:
photos: "photos"
@ -75,8 +75,8 @@ fr:
photos: "photos"
manage:
add_a_new_aspect: "Ajouter un nouvel aspect"
add_a_new_friend: "Ajouter un nouvel amis"
show: "Voir"
add_a_new_friend: "Ajouter un nouvel ami"
show: "Afficher"
update_aspects: "Mettre à jour les aspects"
requests: "Requêtes"
ignore_remove: "Ignorer/Supprimer"
@ -84,7 +84,21 @@ fr:
add_a_new_aspect: "Ajouter un nouvel aspect"
create: "Créer"
create:
success:"Cliquez sur plus situé sur le côté gauche afin den informer Diaspora qui peut voir votre nouvel aspect."
success: "Cliquez sur le symbole plus situé sur le côté gauche afin que Diaspora détermine qui peut voir votre nouvel aspect."
failure: "La création de laspect a échoué."
destroy:
success: "%{name} a été supprimé avec succès."
update:
success: "Votre aspect, %{name}, a été édité avec succès."
move_friends:
failure: "Lédition de laspect concernant votre ami %{real_name} a échoué."
success: "Les aspects ont été édités avec succès."
move_friend:
failure: "ne fonctionne pas %{inspect}"
success: "Vous montrez à présent à votre ami un aspect différent au vôtre."
helper:
remove: "supprimer"
aspect_not_empty: "Laspect nest pas vide"
users:
edit:
editing_profile: "Édition du profil"
@ -93,12 +107,14 @@ fr:
update_profile: "Mettre à jour le profil"
home: "Accueil"
diaspora_username: "NOM DUTILISATEUR DIASPORA"
info: "Information"
info: "Informations"
picture: "Image"
editing_profile: "Édition du profil"
albums: "Albums"
you_dont_have_any_photos: "Vous navez aucune photo ! Rendez-vous sur la page"
page_to_upload_some: "afin den transférer quelques-unes."
or: "ou"
destroy: "Compte clôturé avec succès."
comments:
comment:
ago: "il y a"
@ -111,22 +127,41 @@ fr:
next: "suivant"
edit_photo: "Éditer la photo"
delete_photo: "Supprimer la photo"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
comments: "commentaires"
edit:
editing: "Édition"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
delete_photo: "Supprimer la photo"
photo:
show_comments: "afficher les commentaires"
posted_a_new_photo_to: "a publié une nouvelle photo sur"
posted_a_new_photo_to: "a publié une nouvelle photo dans"
new:
new_photo: "Nouvelle photo"
back_to_list: "Retourner à la liste"
post_it: "publiez-la !"
post_it: "la publier !"
create:
runtime_error: "Le transfert de la photo a échoué. Êtes-vous sûr(e) que votre ceinture de sécurité est bien attachée ?"
integrity_error: "Le transfert de la photo a échoué. Êtes-vous sûr(e) que cétait bien une image ?"
type_error: "Le transfert de la photo a échoué. Êtes-vous sûr(e) que limage a bien été ajoutée ?"
update:
notice: "La photo a été mise à jour avec succès."
error: "Lédition de la photo a échoué."
destroy:
notice: "La photo a été supprimée."
registrations:
new:
sign_up: "Inscription"
create:
success: "Vous avez rejoint Diaspora !"
invitations:
create:
sent: 'Votre invitation a été envoyée.'
no_more: 'Vous navez plus dinvitation.'
already_sent: 'Vous avez déjà invité cette personne.'
invitation_token_invalid: 'Le jeton dinvitation fourni nest pas valide !'
updated: 'Votre mot de passe a été réglé avec succès. Vous êtes à présent connecté.'
status_messages:
new_status_message:
tell_me_something_good: "dites-moi quelque chose de bien"
@ -134,16 +169,21 @@ fr:
status_message:
show_comments: "afficher les commentaires"
delete: "Supprimer"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
show:
status_message: "Message détat"
comments: "commentaires"
are_you_sure: "Êtes-vous sûr ?"
are_you_sure: "Êtes-vous sûr(e) ?"
destroy: "Détruire"
view_all: "Tout voir"
view_all: "Tout afficher"
message: "Message"
owner: "Propriétaire"
helper:
no_message_to_display: "Aucun message à afficher."
people:
person:
add_friend: "ajouter en ami"
pending_request: "requête en attente"
index:
add_friend: "ajouter un ami"
real_name: "nom réel"
@ -157,6 +197,21 @@ fr:
show:
last_seen: "dernière connexion : %{how_long_ago}"
friends_since: "amis depuis : %{how_long_ago}"
save: "sauvegarder"
are_you_sure: "Êtes-vous sûr ?"
remove_friend: "supprimer un ami"
save: "sauver"
are_you_sure: "Êtes-vous sûr(e) ?"
remove_friend: "supprimer de mes amis"
requests:
new_request:
add_a_new_friend_to: "Ajouter un nouvel ami à"
enter_a_diaspora_username: "Saisissez un nom dutilisateur Diaspora :"
your_diaspora_username_is: "Votre nom dutilisateur Diaspora est : %{diaspora_handle}"
friends_username: "Nom dutilisateur de lami"
destroy:
success: "Vous êtes à présent amis."
error: "Veuillez sélectionner un aspect !"
ignore: "Requête dami ignorée."
create:
error: "Aucun résultat Diaspora na été trouvé avec cette adresse e-mail !"
already_friends: "Vous êtes déjà amis avec %{destination_url}!"
success: "Une requête dami a été envoyée à %{destination_url}."
horribly_wrong: "Quelque chose dhorrible sest produit."

View file

@ -0,0 +1,208 @@
# Copyright (c) 2010, Diaspora Inc. This file is
# licensed under the Affero General Public License version 3. See
# the COPYRIGHT file.
# Sample localization file for English. Add more files in this directory for other locales.
# See http://github.com/svenfuchs/rails-i18n/tree/master/rails%2Flocale for starting points.
tr:
hello: "Merhaba dünya"
application:
helper:
unknown_person: "bilinmiyen insanlar"
new_requests: "yeni istekler"
dashboards:
helper:
home: "ev"
error_messages:
helper:
invalid_fields: "Yanliș Bölümler"
correct_the_following_errors_and_try_again: "Alttaki yanlișlari düzeltin ve tekrar deneyin."
people:
helper:
results_for: "%{params} için sonuçlar"
people_on_pod_are_aware_of: " bu podda bizim bildiğimiz kişiler."
layouts:
application:
edit_profile: "profili düzelt"
logout: ık"
shared:
aspect_nav:
all_aspects: "Bütün Yanlar"
manage: "Düzenle"
manage_your_aspects: "Bütün yanları düzenle"
sub_header:
all_aspects: "Bütün Yanlar"
manage_aspects: "Yanları Düzenle"
publisher:
share: "Paylaş"
aspect_friends:
add_friends: "Arkadaş ekle"
albums:
album:
you: "sen"
new_album:
create: "yarat"
add_a_new_album: "Yeni albüm ekle"
show:
edit_album: "Albümü düzelt"
albums: "albümler"
updated: "düzeltildi"
by: "tarafından"
edit:
editing: "düzeltiyor"
updated: "düzeltildi"
are_you_sure: "Eminmisin?"
delete_album: "Sil Albümü"
cancel: "Vazgeç"
index:
home: "Ev"
new_album: "Yeni Albüm"
create:
success: "Yeni bir album yarattınız %{name} isminde."
update:
success: "Albüm %{name} başarı ile eklenmiştir."
failure: "Albüm %{name} yı düzeltme başarılı değil."
destroy:
success: "Albüm %{name} silinmistir."
helper:
friends_albums: "Arkadaşların Albümleri"
your_albums: "Sizin Albümleriniz"
aspects:
index:
photos: "resimler"
show:
photos: "resimler"
manage:
add_a_new_aspect: "Yeni bir yan ekle"
add_a_new_friend: "Yeni bir arkadaş ekle"
show: "Show"
update_aspects: "Yanlari düzelt"
requests: "Ricalar"
ignore_remove: "Goz ardi et/çıkart"
new_aspect:
add_a_new_aspect: "Yeni bir yan ekle"
create: "Yarat"
create:
success: "Sol taraftaki arti ya tıklıyarak Diasporaya sizin yeni yanınızı kimlerin görebileceğini belirtin."
failure: "Yan yaratimi basarılı değildi."
destroy:
success: "%{name} basarıyla yaratıldı."
update:
success: "Sizin yanınız, %{name}, başariyla düzeltildi."
move_friends:
failure: "Yan düzeltimi arkadisınız %{real_name} icin başarisizdi."
success: "Yanlar başariyla düzeltildi."
move_friend:
failure: "%{inspect} islemedi."
success: "Simdi siz arkadaşlarınıza başka bir yanınızı gosteriyorsunuz."
helper:
remove: "cikart"
aspect_not_empty: "Yan bos değil"
users:
edit:
editing_profile: "Profili düzeltiliyor"
profile:
cancel: "Vazgeç"
update_profile: "düzelt Profili"
home: "Ev"
diaspora_username: "DIASPORA ISMINIZ"
info: "Bilgi"
picture: "Resim"
editing_profile: "Profili düzeltmek"
albums: "Albümler"
you_dont_have_any_photos: "Hicbir fotorafiniz yok! Şuraya gidin"
page_to_upload_some: "yuklemek icin."
or: "veya"
comments:
comment:
ago: "once"
new_comment:
comment: "Yorum"
photos:
show:
prev: "once"
full_size: "tam büyüklük"
next: "sonra"
edit_photo: "düzelt Fotoyu"
delete_photo: "Sil Fotoyu"
are_you_sure: "Eminmisiniz?"
comments: "yorumlar"
edit:
editing: "düzeltiliyor"
are_you_sure: "Eminmisiniz?"
delete_photo: "Sil Fotoyu"
photo:
show_comments: "göster yorumları"
posted_a_new_photo_to: "yeni bir foto koydu "
new:
new_photo: "Yeni Foto"
back_to_list: "Listeye Geri Git"
post_it: "ekle!"
create:
runtime_error: "Fotoyu yukleme başarısızdı. Emniyet kemeriniz takılımıydı?"
integrity_error: "Fotoyu yukleme başarısızdı. Resim olduğundan eminmisınız?"
type_error: "Fotoyu yukleme başarısızdı. Bir resim yuklediğinize eminmisiniz?"
update:
notice: "Resim başarıyla eklendi."
error: "Fotoyu düzeltme basarısızdı."
destroy:
notice: "Foto silindi."
registrations:
new:
sign_up: "Katıl"
create:
success: "Diasporaya katıldınız!"
status_messages:
new_status_message:
tell_me_something_good: "bana iyi bir şey söyle"
oh_yeah: "tabi ya!"
status_message:
show_comments: "göster yorumları"
delete: "Sil"
are_you_sure: "Eminmisiniz?"
show:
status_message: "Status Mesaji"
comments: "yorumlar"
are_you_sure: "Eminmisiniz?"
destroy: "Yok et"
view_all: "Hepsine bak"
message: "Mesaj"
owner: "Sahibi"
helper:
no_message_to_display: "Gosterilcek bir mesaj yok."
people:
person:
add_friend: "Arkadaş ekle"
pending_request: "bekletilen rica"
index:
add_friend: "Arkadaş ekle"
real_name: "esas ismi"
diaspora_handle: "diaspora ismi"
thats_you: "o sensin!"
friend_request_pending: "Arkadaş ricasi bekletiliyor"
you_have_a_friend_request_from_this_person: "siz bir arkadaş isteği aldiniz bu kişiden"
new:
new_person: "Yeni Kişi"
back_to_list: "Listeye geri dön"
show:
last_seen: "son gorüldü: %{how_long_ago}"
friends_since: "Arkadaş süreci: %{how_long_ago}"
save: "sakla"
are_you_sure: "Eminmisiniz?"
remove_friend: "çikart arkadaşlıktan"
requests:
new_request:
add_a_new_friend_to: "Buna yeni bir arkadaş ekle"
enter_a_diaspora_username: "Bir Diaspora ismi gir:"
your_diaspora_username_is: "Sizin Diaspora isminiz: %{diaspora_handle}"
friends_username: "Arkadaşin Diaspora ismi"
destroy:
success: "Siz şimdi arkadaşsınız."
error: "Lutfen bir yan seçiniz!"
ignore: "Arkadaş isteğini reddettiniz."
create:
error: "Diaspora cekirdeği bulunmadı bu emailde!"
already_friends: "Siz zaten arakadaşsınız %{destination_url} ile!"
success: "%{destination_url} için arakadaş olma isteği gonderilmiştir."
horribly_wrong: "Bir şey muhtemalan yanliş gitti."

View file

@ -40,4 +40,4 @@ user2.person.save!
aspect = user.aspect(:name => "other dudes")
request = user.send_friend_request_to(user2, aspect)
reversed_request = user2.accept_friend_request( request.id, user2.aspect(:name => "presidents").id )
user.receive reversed_request.to_diaspora_xml
user.receive reversed_request.to_diaspora_xml, user2.person

View file

@ -41,6 +41,6 @@ user2.person.save!
aspect = user.aspect(:name => "other dudes")
request = user.send_friend_request_to(user2, aspect)
reversed_request = user2.accept_friend_request( request.id, user2.aspect(:name => "presidents").id )
user.receive reversed_request.to_diaspora_xml
user.receive reversed_request.to_diaspora_xml, user2.person
user.aspect(:name => "Presidents")

View file

@ -27,8 +27,8 @@ $(document).ready(function(){
//buttons//////
$("#add_aspect_button").fancybox({ 'titleShow' : false });
$("#add_request_button").fancybox({ 'titleShow': false });
$("#invite_user_button").fancybox({ 'titleShow': false });
$(".add_request_button").fancybox({ 'titleShow': false });
$(".invite_user_button").fancybox({ 'titleShow': false });
$(".add_request_button").fancybox({ 'titleShow': false });
$("input[type='submit']").addClass("button");

View file

@ -1,744 +0,0 @@
@font-face {
font-family: "BrandonGrotesqueLightRegular";
src: url("brandongrotesque_light/Brandon_light-webfont.eot");
src: local("☺"), url("brandongrotesque_light/Brandon_light-webfont.woff") format("woff"), url("brandongrotesque_light/Brandon_light-webfont.ttf") format("truetype"), url("brandongrotesque_light/Brandon_light-webfont.svg#webfont") format("svg");
font {
weight: normal;
style: normal; } }
body {
padding: 2em;
margin: 0; }
a {
color: #107fc9;
text-decoration: none; }
a:hover {
color: #22aae0; }
a:active {
color: #005d9c; }
h1, h2, h3, h4 {
color: #444444; }
h3 {
font-size: 18px; }
.avatar {
width: 50px;
height: 50px; }
#flash_notice,
#flash_error,
#flash_alert {
z-index: 100;
position: fixed;
color: white;
top: -100px;
left: 0;
width: 100%;
padding: 1em;
box-shadow: 0 1px 2px #333333;
-moz-box-shadow: 0 1px 2px #333333;
-webkit-box-shadow: 0 1px 2px #333333;
font-weight: bold; }
#flash_notice {
background-color: rgba(127, 255, 36, 0.85);
border-bottom: solid 1px #66cc66;
text-shadow: 0 1px #66cc66; }
#flash_error,
#flash_alert {
background-color: rgba(208, 49, 43, 0.85);
border-bottom: solid 1px #cc6666;
text-shadow: 0 1px #cc6666; }
.fieldWithErrors {
display: inline; }
.error_messages {
width: 400px;
border: 2px solid #cf0000;
padding: 0;
padding-bottom: 12px;
margin-bottom: 20px;
background-color: #f0f0f0;
font-size: 12px; }
.error_messages h2 {
text-align: left;
padding: 5px 5px 5px 15px;
margin: 0;
font-weight: bold;
font-size: 12px;
background-color: #cc0000; }
.error_messages p {
margin: 8px 10px; }
.error_messages ul {
margin: 0; }
header {
z-index: 4;
position: relative;
margin: -2em;
margin-bottom: 2em;
color: black;
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#666666), to(#222222));
background: -moz-linear-gradient(19% 75% 90deg, #222222, #666666);
background-color: #666666;
padding: 0;
padding-top: 5px;
border-bottom: 1px solid #cccccc; }
header a {
color: #999999; }
header a:hover {
background: none;
color: #eeeeee; }
header #diaspora_text {
display: inline;
font-family: "BrandonGrotesqueLightRegular";
font-size: 16px;
border: none;
color: white; }
header #session_action {
position: absolute;
display: inline;
top: 0;
right: 0; }
header #session_action ul {
list-style: none;
padding: 0;
margin: 0;
display: inline; }
header #session_action ul li {
display: inline;
margin-right: 1em; }
header #session_action ul li:last-child {
margin-right: 0; }
header #aspect_header {
-webkit-box-shadow: 0px -4px 6px -2px #777777;
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#f7f7f7), to(#eeeeee));
background: -moz-linear-gradient(19% 75% 90deg, #eeeeee, #f7f7f7);
background-color: #eeeeee;
border-top: 1px solid white;
padding: 20px 0; }
header #aspect_header h1 {
text-shadow: 0 1px 0 white; }
header #aspect_header a {
color: #444444; }
header #aspect_header a:hover {
background: none;
color: #999999; }
header #aspect_header .page_title {
text-transform: uppercase;
text-shadow: 0 1px 0 white; }
ul#stream {
margin: 0;
padding: 0; }
ul#stream > li {
min-height: 50px;
list-style: none;
padding: 12px 0;
border-bottom: 1px solid #eeeeee; }
ul#stream > li:hover {
background-color: #fafafa;
border-bottom: 1px solid #dddddd; }
ul#stream > li:hover .destroy_link {
display: inline; }
ul#stream .right {
top: 0; }
li.message {
position: relative;
line-height: 19px;
font-family: "Arial", "Helvetica", sans-serif;
color: #777777; }
li.message .avatar {
float: left;
margin-right: 15px; }
li.message .delete:hover {
background: #eeeeee; }
li.message .content {
max-width: 610px;
margin-top: -4px;
padding-left: 65px;
color: #444444;
font-weight: normal;
font-size: 14px; }
li.message .content .from {
font-family: "Helvetica neue", Arial, Helvetica, sans-serif;
text-shadow: 0 1px white; }
li.message .content .from .aspect {
cursor: default;
display: inline;
color: #bbbbbb;
font-size: 12px; }
li.message .content .from .aspect a {
font-weight: normal;
color: #bbbbbb; }
li.message .content .from .aspect a:hover {
text-decoration: underline; }
li.message .content .from .aspect a:active {
color: #999999; }
li.message .content .from .aspect ul {
display: inline;
margin: 0;
padding: 0;
list-style: none; }
li.message .content .from .aspect ul li {
display: inline; }
li.message .content .from .aspect ul li:after {
content: ","; }
li.message .content .from .aspect ul li:last-child:after {
content: ""; }
li.message .content .from a {
font-weight: bold; }
li.message .content div.info {
color: #444444;
font-size: 13px; }
li.message .content div.info a {
color: #cccccc; }
li.message .content div.info .time {
font-weight: bold;
margin-right: 5px; }
li.message .content div.info .time a {
color: #bbbbbb; }
li.message:hover div.info a, li.message:hover .time a {
color: #107fc9; }
li.message:hover div.info a:hover, li.message:hover .time a:hover {
color: #22aae0; }
li.message:hover div.info a:active, li.message:hover .time a:active {
color: #005d9c; }
.destroy_link .reshare_pane .reshare_button a.inactive {
color: #cccccc;
cursor: default; }
.destroy_link .reshare_pane .reshare_button a.inactive:hover {
text-decoration: none; }
.destroy_link .reshare_pane {
margin-left: 5px;
margin-right: 5px;
display: inline;
position: relative; }
.destroy_link .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; }
.destroy_link .reshare_pane ul.reshare_box > li {
font-weight: bold;
color: #cccccc;
border-top: 1px solid white;
border-bottom: 1px solid #cccccc; }
.destroy_link .reshare_pane ul.reshare_box > li:first-child {
border-top: none; }
.destroy_link .reshare_pane ul.reshare_box > li:last-child {
border-bottom: none; }
.destroy_link .reshare_pane ul.reshare_box > li a {
display: block;
height: 100%;
padding: 2px 5px; }
.destroy_link .reshare_pane ul.reshare_box > li a:hover {
background-color: #eeeeee;
text-decoration: none; }
.destroy_link .reshare_pane ul.reshare_box > li a:active {
background-color: #cccccc; }
form {
position: relative;
font-size: 120%;
margin: 1em;
margin-left: 0em; }
#user_name {
margin-bottom: 20px; }
#user_name img {
margin-right: 10px;
display: inline-block;
float: left;
height: 40px; }
#user_name h1 {
margin-bottom: 7px;
line-height: 18px; }
#user_name h1 a {
color: black; }
#user_name span {
size: small;
font-weight: normal;
color: #999999; }
#user_name #latest_message_time {
font-style: italic; }
#user_name ul {
display: inline;
margin: 0;
padding: 0;
list-style: none; }
#user_name ul > li {
display: inline;
margin-right: 1em; }
#stream div.comments {
display: none; }
#stream div.comments .avatar {
width: 35px;
height: 35px;
margin-right: 10px; }
input.comment_submit {
display: none;
margin-right: -10px; }
ul.comment_set {
margin: 0;
margin-top: 1em;
padding: 0;
list-style: none;
max-width: 610px; }
ul.comment_set textarea {
width: 100%; }
ul.comment_set li.comment {
margin-bottom: 0.5em;
background-color: rgba(10, 81, 109, 0.05);
padding: 0.6em;
border-bottom: 1px solid #dddddd; }
ul.comment_set li.comment .content {
color: #777777;
margin-top: -2px;
padding-left: 45px;
font-size: 12px;
line-height: 18px; }
ul.comment_set li.comment .content .from a {
color: #444444; }
ul.comment_set li.comment .content div.time {
color: #bbbbbb;
font-size: 11px;
font-weight: bold; }
ul.comment_set li.comment form {
margin-top: -5px;
margin-bottom: 0;
font-size: 1em; }
ul.comment_set li.comment form textarea {
font-size: 1em; }
.profile_photo img {
height: 150px;
width: 150px; }
#profile ul {
list-style-type: none;
margin: 0;
padding: 0; }
#stream img.person_picture, #profile img.person_picture,
.comments img.person_picture {
border-radius: 3px;
-webkit-border-radius: 3px;
-moz-border-radius: 3px;
display: inline block;
height: 30px;
display: absolute;
float: left;
margin-right: 10px; }
.pagination a {
padding: 3px; }
li.message .from .destroy_link {
display: none;
position: absolute;
right: 0;
font-size: 12px; }
li.message .from .destroy_link a {
color: #999999;
font-weight: normal; }
li.message .from .destroy_link a:hover {
text-decoration: underline; }
.request_buttons {
position: absolute;
right: 0;
display: inline;
list-style: none;
margin: 0;
padding: 0; }
.request_buttons > li {
display: inline; }
.request_buttons > li:first-child {
margin-right: 1em; }
#show_photo {
text-align: center;
min-height: 200px; }
#show_photo img {
max-width: 100%; }
#show_photo .caption {
margin-top: 10px;
margin-bottom: 25px;
font-size: larger; }
#debug_info {
margin-top: 20px;
color: #cccccc; }
#debug_info h5 {
color: #cccccc; }
input[type='text'],
input[type='password'],
textarea {
font-family: "Arial", "Helvetica", sans-serif;
font-size: 14px;
padding: 0.3em;
display: block;
width: 66%;
border: 1px solid #cccccc;
height: auto;
border-radius: 5px;
-webkit-border-radius: 5px;
-moz-border-radius: 5px; }
.submit_block {
text-align: right;
font-size: 12px; }
form p {
position: relative;
padding: 0;
margin: 0; }
label {
font-family: "Arial", "Helvetica", sans-serif;
font-weight: normal;
color: #999999;
position: absolute;
top: 3px;
left: 0.48em;
text-shadow: 0 1px 1px #eeeeee; }
#publisher {
color: #999999;
position: relative; }
#publisher .avatar {
float: left;
margin-right: 15px; }
#publisher p {
position: absolute;
left: 0;
top: 0; }
#publisher form {
display: inline; }
#publisher form input[type='submit'] {
display: block;
margin-right: 20px;
width: 100%; }
#publisher textarea {
width: 570px;
height: 42px;
margin-top: 0;
margin-bottom: 0; }
#publisher .buttons {
float: right; }
#image_picker .small_photo {
height: 100px;
position: relative;
display: inline-block;
margin-right: 1em;
margin-bottom: 1em; }
#image_picker .small_photo img {
border-radius: 3px; }
#image_picker .small_photo input[type='checkbox'] {
position: absolute; }
#image_picker .selected {
-webkit-box-shadow: 0 3px 6px black;
-moz-box-shadow: 0 3px 6px black;
border: 1px solid white; }
/* cycle it! */
.album {
position: relative;
height: 200px;
width: 200px;
display: inline-block; }
.album img {
width: 200px;
height: 200px; }
.album .name {
position: absolute;
z-index: 6;
padding: 1em;
background: rgba(0, 0, 0, 0.8);
bottom: 20px;
font-size: 18px;
text-shadow: 0 2px 0 black; }
.album .name .time {
font-size: 12px; }
.album .name .time a {
font-weight: normal; }
.album div.image_cycle img {
display: none; }
.field_with_submit input[type='text'] {
width: 82%;
display: inline; }
h1.big_text {
position: relative;
line-height: auto;
border-bottom: 1px solid #666666; }
h1.big_text .right {
top: -6px; }
#content_bottom .right {
top: -5px; }
.right {
display: inline;
float: right; }
.back {
font-size: 12px;
font-weight: normal; }
#content_bottom {
position: relative;
line-height: 36px;
margin: 0;
margin-top: 25px;
margin-bottom: 25px;
min-height: 36px;
border-top: 1px solid #999999;
border-bottom: 2px solid #eeeeee; }
.show_post_comments ul.comment_set {
width: 100%; }
.sub_header {
position: relative;
text-align: center;
font-style: italic;
margin-bottom: 20px;
color: #999999; }
.image_thumb {
display: inline-block;
width: 100px;
min-width: 100px;
height: 100px;
min-height: 100px; }
.image_thumb img {
display: none; }
.image_cycle img {
display: none; }
#aspect_nav {
color: black;
margin-top: 8px;
margin-bottom: 1px;
font-family: "Arial", "Helvetica", sans-serif; }
#aspect_nav #aspect_manage_button {
display: inline; }
#aspect_nav #aspect_manage_button a {
color: #999999; }
#aspect_nav ul {
margin: 0;
padding: 0;
list-style: none; }
#aspect_nav ul > li {
padding: 0;
display: inline;
margin-right: 2px; }
#aspect_nav ul > li a {
text-shadow: 0 1px 0 #444444;
line-height: 22px;
padding: 3px 8px;
padding-bottom: 3px;
color: #999999; }
#aspect_nav ul > li a:hover {
background-color: #4e4e4e;
color: #cccccc; }
#aspect_nav ul > li.selected a {
-webkit-border-radius: 5px 5px 0 0;
-moz-border-radius: 5px 5px 0 0;
-webkit-box-shadow: 0px -4px 6px -2px #777777;
-moz-box-shadow: 0px -4px 6px -2px #777777;
text-shadow: 0 1px 0 white;
padding-top: 4px;
padding-bottom: 5px;
line-height: 18px;
font-weight: bold;
background-color: #eeeeee;
background: -webkit-gradient(linear, 0% 0%, 0% 100%, from(white), to(#f7f7f7));
background: -moz-linear-gradient(19% 75% 90deg, #f7f7f7, white);
border: 1px solid white;
border-bottom: 1px solid #f7f7f7;
color: #444444; }
#aspect_nav ul > li.selected a:hover {
background-color: #efefef; }
#aspect_nav ul > li.selected a a {
color: black; }
#aspect_nav .new_requests {
color: red; }
#global_search {
display: inline;
position: relative;
opacity: 0.5; }
#global_search form {
display: inline; }
#global_search form input {
display: inline;
font-size: 12px;
border: none; }
#global_search form input[type='text'] {
width: 200px;
padding: 2px; }
#global_search form label {
font-size: 12px;
margin-top: -3px; }
.aspect,
.requests,
.remove {
list-style: none; }
.aspect h3,
.requests h3,
.remove h3 {
display: inline-block; }
.aspect .tip,
.requests .tip,
.remove .tip {
display: none;
color: #999999;
margin-left: 0.5em; }
.aspect .edit_name_field:hover .tip,
.requests .edit_name_field:hover .tip,
.remove .edit_name_field:hover .tip {
display: inline; }
.aspect .aspect_name,
.requests .aspect_name,
.remove .aspect_name {
position: relative; }
.aspect .aspect_name ul.tools,
.requests .aspect_name ul.tools,
.remove .aspect_name ul.tools {
position: absolute;
top: 5px;
right: 0;
display: inline;
padding: 0;
margin: 0;
list-style: none; }
.aspect .aspect_name ul.tools li,
.requests .aspect_name ul.tools li,
.remove .aspect_name ul.tools li {
display: inline;
margin-right: 1em; }
.aspect .aspect_name ul.tools li:last-child,
.requests .aspect_name ul.tools li:last-child,
.remove .aspect_name ul.tools li:last-child {
margin-right: 0; }
.aspect .grey,
.requests .grey,
.remove .grey {
color: #999999;
cursor: default;
text-shadow: 0 1px white; }
.aspect ul.dropzone,
.requests ul.dropzone,
.remove ul.dropzone {
min-height: 20px;
margin: 0;
margin-bottom: 25px;
background-color: #efefef;
border: 1px solid #cccccc;
list-style: none;
padding: 15px; }
.aspect ul.dropzone.active,
.requests ul.dropzone.active,
.remove ul.dropzone.active {
background-color: #fafafa; }
.aspect .person,
.aspect .requested_person,
.requests .person,
.requests .requested_person,
.remove .person,
.remove .requested_person {
display: inline-block;
padding: 5px;
cursor: move;
margin: 5px;
z-index: 10;
text-align: center;
width: 125px;
height: 120px; }
.aspect .person img,
.aspect .requested_person img,
.requests .person img,
.requests .requested_person img,
.remove .person img,
.remove .requested_person img {
height: 100px;
width: 100px;
display: inline-block; }
.aspect .person:active,
.aspect .requested_person:active,
.requests .person:active,
.requests .requested_person:active,
.remove .person:active,
.remove .requested_person:active {
z-index: 20;
color: #666666; }
.aspect .person:active img,
.aspect .requested_person:active img,
.requests .person:active img,
.requests .requested_person:active img,
.remove .person:active img,
.remove .requested_person:active img {
-webkit-box-shadow: 0 1px 3px #333333;
-moz-box-shadow: 0 2px 4px #333333;
opacity: 0.9; }
ul#settings_nav {
list-style: none;
padding: 0;
marign: 0;
font-size: larger; }
ul#settings_nav > li a {
font-size: smaller;
display: block;
height: 100%;
border-bottom: 1px solid #eeeeee;
padding: 2px; }
.settings_pane {
display: none; }
#fancybox-close:hover {
background-color: transparent; }
#friend_pictures {
margin-top: 12px;
line-height: 1em; }
#friend_pictures img {
margin-right: -1px;
width: 35px;
height: 35px; }
#thumbnails {
line-height: 14px; }
#aspect_list {
margin: 0;
padding: 0; }

View file

@ -114,7 +114,7 @@ header
:bottom 1px solid #ccc
a
:color #999
:color #CCC
&:hover
:background none
@ -266,8 +266,8 @@ li.message
:size 14px
div.info
:color #444
:font-size 13px
:color #999
:font-size smaller
a
:color #ccc
.time
@ -768,12 +768,12 @@ h1.big_text
:padding 3px 8px
:bottom 3px
:color #999
:color #CCC
&:hover
:background
:color #4e4e4e
:color #ccc
:color #eee
&.selected a
:-webkit-border-radius 5px 5px 0 0
@ -964,3 +964,48 @@ ul#settings_nav
#aspect_list
:margin 0
:padding 0
#left_pane
ul
:margin 0
:padding 0
:list
:style none
li a
:display block
:padding 3px
:border
:bottom 1px solid #ccc
&:hover
&:after
:content ""
.empty_message
:margin
:top 12px
:bottom 12px
:text
:align center
:color #777
h3
:color #777
:margin
:left 70px
:padding 2em
:bottom 0.7em
:width 520px
:border 2px dashed #777
:border-radius 5px
.null_arrow
:margin
:top -14px
:font
:size 80px
:display inline-block

View file

@ -1,123 +0,0 @@
@font-face {
font-family: "BrandonGrotesqueLightRegular";
src: url("brandongrotesque_light/Brandon_light-webfont.eot");
src: local("☺"), url("brandongrotesque_light/Brandon_light-webfont.woff") format("woff"), url("brandongrotesque_light/Brandon_light-webfont.ttf") format("truetype"), url("brandongrotesque_light/Brandon_light-webfont.svg#webfont") format("svg");
font {
weight: normal;
style: normal; } }
#flash_notice,
#flash_error,
#flash_alert {
z-index: 100;
top: 32px;
position: absolute;
color: black;
width: 400px;
margin: 0 0 0 -200px;
left: 50%;
text-align: center;
font-size: 14px;
padding: 3px 0; }
#flash_notice {
background-color: #ccffcc;
border: solid 1px #66cc66; }
#flash_error,
#flash_alert {
background-color: #ffcccc;
border: solid 1px #cc6666; }
.fieldWithErrors {
display: inline; }
.error_messages {
width: 400px;
border: 2px solid #cf0000;
padding: 0;
padding-bottom: 12px;
margin-bottom: 20px;
background-color: #f0f0f0;
font-size: 12px; }
.error_messages h2 {
text-align: left;
padding: 5px 5px 5px 15px;
margin: 0;
font-weight: bold;
font-size: 12px;
background-color: #cc0000; }
.error_messages p {
margin: 8px 10px; }
.error_messages ul {
margin: 0; }
/* via blueprint */
html {
font-size: 100.01%; }
/* via blueprint */
body {
font-size: 75%;
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
color: #222222;
background: white;
margin-left: 100px; }
/* via blueprint */
input[type=text],
input[type=password],
textarea, select {
background-color: white;
border: 1px solid #bbbbbb; }
/* via blueprint */
input[type=text]:focus,
input[type=password]:focus,
input.text:focus,
input.title:focus,
textarea:focus, select:focus {
border-color: #666666; }
#huge_text {
font-size: 40px;
font-family: "BrandonGrotesqueLightRegular";
line-height: 120px;
color: #333333;
text-shadow: 0 1px 1px #999999; }
input {
font-size: 14px; }
form p {
position: relative;
padding: 0; }
label {
color: #999999;
position: absolute;
padding-top: 7px;
left: 8px;
font-size: 14px;
font-weight: normal; }
input[type='text'],
input[type='password'] {
font-family: "Helvetica Neue", Arial, Helvetica, sans-serif;
padding: 0.3em;
width: 395px;
border-top: 1px solid #999999; }
#user {
display: inline;
width: 500px; }
#user .username {
width: 200px;
display: inline; }
#user .username input {
display: inline;
width: 200px; }
#user .user_network {
width: 200px;
display: inline;
font-size: 18px; }

View file

@ -1,73 +0,0 @@
.button, .button_set {
font-family: "Lucida Grande", sans-serif;
font-style: normal;
display: inline;
padding: 4px;
font-size: 12px;
line-height: 100%;
text-shadow: 0 1px 0 white;
min-height: 10px;
background: -webkit-gradient(linear, 0% 29%, 0% 85%, from(#fcfcfc), to(#f6f6f6));
background: -moz-linear-gradient(top, #fcfcfc, #f6f6f6);
border: 1px solid #eeeeee;
border-bottom: 1px solid #999999;
border-left: 1px solid #cccccc;
border-right: 1px solid #cccccc;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
cursor: pointer;
box-shadow: 0 1px 1px #eeeeee;
-webkit-box-shadow: 0 1px 1px #eeeeee;
-moz-box-shadow: 0 1px 1px #eeeeee;
font-weight: normal;
color: #666666; }
.button:hover, .button_set:hover {
color: #666666;
background: -webkit-gradient(linear, 0% 29%, 0% 85%, from(#fafafa), to(#f0f0f0));
background: -moz-linear-gradient(top, #fafafa, #f0f0f0); }
.button:active, .button_set:active {
color: #666666;
background: -webkit-gradient(linear, 0% 29%, 0% 85%, from(#f0f0f0), to(#fafafa));
background: -moz-linear-gradient(top, #f0f0f0, #fafafa);
border-top: 1px solid #cccccc; }
ul.button_set {
padding-left: 0;
padding-right: 0; }
ul.button_set > li {
padding: 5px;
display: inline;
height: 100%;
border-left: 1px solid #cccccc;
border-right: 1px solid white;
margin-left: -3px;
margin-right: -3px; }
ul.button_set > li:first-child {
margin-left: 0;
border-left: none; }
ul.button_set > li:last-child {
margin-right: 0;
border-right: none; }
.button .selected, .button_set .selected {
background: -webkit-gradient(linear, 0% 29%, 0% 85%, from(#f0f0f0), to(#fafafa));
background: -moz-linear-gradient(top, #f0f0f0, #fafafa);
border-top: 1px solid #aaaaaa; }
.right {
position: absolute;
right: 0; }
.contextual_pane {
z-index: 20;
position: absolute;
display: none;
background-color: white;
border: 4px solid black;
border-radius: 3px;
-moz-border-radius: 3px;
-webkit-border-radius: 3px;
box-shadow: 0 0 5px black;
-webkit-box-shadow: 0 0 10px black;
padding: 2em; }

View file

@ -38,4 +38,11 @@ describe Request do
Request.for_user(user).all.count.should == 1
end
it 'should strip the destination url' do
person_request = Request.new
person_request.destination_url = " http://google.com/ "
person_request.send(:clean_link)
person_request.destination_url.should == "http://google.com/"
end
end

View file

@ -6,58 +6,79 @@ require 'spec_helper'
describe User do
let(:inviter) {Factory.create :user}
let(:aspect) {inviter.aspect(:name => "awesome")}
let(:another_user) {Factory.create :user}
let(:wrong_aspect) {another_user.aspect(:name => "super")}
let(:inviter_with_3_invites) {Factory.create :user, :invites => 3}
let!(:invited_user) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter)}
let(:invited_user1) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter_with_3_invites)}
let(:invited_user2) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter_with_3_invites)}
let(:invited_user3) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter_with_3_invites)}
let(:aspect2) {inviter_with_3_invites.aspect(:name => "Jersey Girls")}
let!(:invited_user1) { create_user_with_invitation("abc", :email => "email@example.com", :inviter => inviter)}
context "creating invites" do
before do
deliverable = Object.new
deliverable.stub!(:deliver)
::Devise.mailer.stub!(:invitation).and_return(deliverable)
end
context "creating invites" do
it 'requires an apect' do
proc{inviter.invite_user(:email => "maggie@example.com")}.should raise_error /Must invite into aspect/
end
it 'requires your aspect' do
proc{inviter.invite_user(:email => "maggie@example.com", :aspect_id => wrong_aspect.id)}.should raise_error /Must invite to your aspect/
end
it 'creates a user' do
inviter
lambda {
inviter.invite_user(:email => "joe@example.com")
inviter.invite_user(:email => "joe@example.com", :aspect_id => aspect.id )
}.should change(User, :count).by(1)
end
it 'sends email to the invited user' do
::Devise.mailer.should_receive(:invitation).once
inviter.invite_user(:email => "ian@example.com")
inviter.invite_user(:email => "ian@example.com", :aspect_id => aspect.id)
end
it 'adds the inviter to the invited_user' do
invited_user = inviter.invite_user(:email => "marcy@example.com")
invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
invited_user.reload
invited_user.inviters.include?(inviter).should be_true
end
it 'adds a pending request to the invited user' do
invited_user = inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
invited_user.reload
invited_user.pending_requests.find_by_callback_url(inviter.receive_url).nil?.should == false
end
it 'adds a pending request to the inviter' do
inviter.invite_user(:email => "marcy@example.com", :aspect_id => aspect.id)
inviter.reload
inviter.pending_requests.find_by_callback_url(inviter.receive_url).nil?.should == false
end
end
context "limit on invites" do
it 'does not invite users after 3 invites' do
User.stub!(:invite!).and_return(invited_user1,invited_user2,invited_user3)
inviter_with_3_invites.invite_user(:email => "email1@example.com")
inviter_with_3_invites.invite_user(:email => "email2@example.com")
inviter_with_3_invites.invite_user(:email => "email3@example.com")
proc{inviter_with_3_invites.invite_user(:email => "email4@example.com")}.should raise_error /You have no invites/
inviter_with_3_invites.invite_user(:email => "email1@example.com", :aspect_id => aspect2.id)
inviter_with_3_invites.invite_user(:email => "email2@example.com", :aspect_id => aspect2.id)
inviter_with_3_invites.invite_user(:email => "email3@example.com", :aspect_id => aspect2.id)
proc{inviter_with_3_invites.invite_user(:email => "email4@example.com", :aspect_id => aspect2.id)}.should raise_error /You have no invites/
end
it 'does not invite people I already invited' do
pending "this is really weird to test without the actual method working"
User.stub!(:invite!).and_return(invited_user1,invited_user1)
inviter_with_3_invites.invite_user(:email => "email1@example.com")
proc{inviter_with_3_invites.invite_user(:email => "email1@example.com")}.should raise_error /You already invited that person/
inviter_with_3_invites.invite_user(:email => "email1@example.com", :aspect_id => aspect2.id)
proc{inviter_with_3_invites.invite_user(:email => "email1@example.com", :aspect_id => aspect2.id)}.should raise_error /You already invited this person/
end
end
context "the acceptance of an invitation" do
it "should create the person with the passed in params" do
person_count = Person.count
u = invited_user.accept_invitation!(:invitation_token => "abc",
u = invited_user1.accept_invitation!(:invitation_token => "abc",
:username => "user",
:password => "secret",
:password_confirmation => "secret",