diff --git a/app/controllers/comments_controller.rb b/app/controllers/comments_controller.rb index b8f051e57..5b39a1008 100644 --- a/app/controllers/comments_controller.rb +++ b/app/controllers/comments_controller.rb @@ -3,6 +3,7 @@ # the COPYRIGHT file. class CommentsController < ApplicationController + include ApplicationHelper before_filter :authenticate_user! respond_to :html @@ -15,7 +16,14 @@ class CommentsController < ApplicationController @comment = current_user.comment(text, :on => target) if target if @comment Rails.logger.info("event=comment_create user=#{current_user.inspect} status=success comment=#{@comment.inspect}") - render :nothing => true, :status => 201 + + respond_to do |format| + format.js{ render :json => { :post_id => @comment.post_id, + :comment_id => @comment.id, + :html => render_to_string(:partial => type_partial(@comment), :locals => {:post => @comment, :current_user => current_user})}, + :status => 201 } + format.html{ render :nothing => true, :status => 201 } + end else render :nothing => true, :status => 401 end diff --git a/app/controllers/status_messages_controller.rb b/app/controllers/status_messages_controller.rb index 54487dbeb..d4992fb25 100644 --- a/app/controllers/status_messages_controller.rb +++ b/app/controllers/status_messages_controller.rb @@ -26,9 +26,18 @@ class StatusMessagesController < ApplicationController for photo in photos current_user.dispatch_post(photo, :to => params[:status_message][:to]) end + + respond_to do |format| + format.js{ render :json => { :post_id => @status_message.id, + :html => render_to_string(:partial => 'shared/stream_element', :locals => {:post => @status_message, :current_user => current_user})}, + :status => 201 } + format.html{ respond_with @status_message } + end + else + respond_to do |format| + format.js{ render :status => 401 } + end end - - render :nothing => true end diff --git a/app/helpers/dashboards_helper.rb b/app/helpers/dashboards_helper.rb index 57d64397c..a5cf68cd5 100644 --- a/app/helpers/dashboards_helper.rb +++ b/app/helpers/dashboards_helper.rb @@ -4,6 +4,6 @@ module DashboardsHelper def title_for_page - I18n.t('dashboards.helper.home') + I18n.t('_home') end end diff --git a/app/helpers/sockets_helper.rb b/app/helpers/sockets_helper.rb index d646f0e4e..214665ef3 100644 --- a/app/helpers/sockets_helper.rb +++ b/app/helpers/sockets_helper.rb @@ -23,13 +23,14 @@ module SocketsHelper Rails.logger.error("web socket view rendering failed for object #{object.inspect}.") raise e end - action_hash = {:class =>object.class.to_s.underscore.pluralize, :html => v, :post_id => obj_id(object)} + action_hash = {:class =>object.class.to_s.underscore.pluralize, :html => v, :post_id => obj_id(object)} action_hash.merge! opts if object.is_a? Photo action_hash[:photo_hash] = object.thumb_hash end if object.is_a? Comment + action_hash[:comment_id] = object.id action_hash[:my_post?] = (object.post.person.owner.id == uid) action_hash[:notification] = notification(object) end diff --git a/app/models/user.rb b/app/models/user.rb index 269804111..44190e99b 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -382,8 +382,8 @@ class User def seed_aspects - self.aspects.create(:name => "Family") - self.aspects.create(:name => "Work") + self.aspects.create(:name => I18n.t('aspects.seed.family')) + self.aspects.create(:name => I18n.t('aspects.seed.work')) end def as_json(opts={}) diff --git a/app/views/aspects/index.html.haml b/app/views/aspects/index.html.haml index 6331458a6..be12ea3db 100644 --- a/app/views/aspects/index.html.haml +++ b/app/views/aspects/index.html.haml @@ -4,11 +4,11 @@ .span-24.last %h2{:style => "position:relative;"} - Home + = t('_home') .right %span.description = current_user.diaspora_handle - = info_text("This is your diaspora handle. Like an email address, you can give this to people to reach you.") + = info_text(t('.handle_explanation')) .span-15.last = render 'aspects/no_contacts_message', :aspect => @aspect, :contact_count => @contacts.count diff --git a/app/views/aspects/index.mobile.haml b/app/views/aspects/index.mobile.haml index 95c790844..51b700fe0 100644 --- a/app/views/aspects/index.mobile.haml +++ b/app/views/aspects/index.mobile.haml @@ -1,13 +1,9 @@ +-# Copyright (c) 2010, Diaspora Inc. This file is +-# licensed under the Affero General Public License version 3 or later. See +-# the COPYRIGHT file. + %div{:data => {:role => 'content'}} %div{:data => {:role => 'fieldcontain'}} =render 'shared/publisher', :aspect => @aspect = render 'shared/stream', :posts => @posts - -/%div{:data => {:role => 'footer', :id => 'footer-toolbar', :position => 'fixed'}} -/ %div{:data => {:role => 'navbar'}} -/ %ul -/ %li{:class => 'ui-btn-active'} -/ = link_to 'posts', '#' -/ %li -/ =link_to 'contacts', '#' diff --git a/app/views/comments/_comment.html.haml b/app/views/comments/_comment.html.haml index f84d4b6d5..fe94bd6fd 100644 --- a/app/views/comments/_comment.html.haml +++ b/app/views/comments/_comment.html.haml @@ -2,7 +2,7 @@ -# licensed under the Affero General Public License version 3 or later. See -# the COPYRIGHT file. -%li.comment +%li.comment{:data=>{:guid=>post.id}} = person_image_link(post.person) .content .from diff --git a/app/views/devise/confirmations/new.html.haml b/app/views/devise/confirmations/new.html.haml index 548a024bc..04965f756 100644 --- a/app/views/devise/confirmations/new.html.haml +++ b/app/views/devise/confirmations/new.html.haml @@ -6,5 +6,5 @@ %br/ = f.text_field :email %p - = f.submit "Resend confirmation instructions" + = f.submit t('.resend_confirmation') = render :partial => "devise/shared/links" diff --git a/app/views/devise/passwords/edit.html.haml b/app/views/devise/passwords/edit.html.haml index 025c214b0..267436a63 100644 --- a/app/views/devise/passwords/edit.html.haml +++ b/app/views/devise/passwords/edit.html.haml @@ -11,5 +11,5 @@ %br/ = f.password_field :password_confirmation %p - = f.submit "Change my password" + = f.submit t('.change_password') = render :partial => "devise/shared/links" diff --git a/app/views/devise/sessions/new.html.haml b/app/views/devise/sessions/new.haml similarity index 100% rename from app/views/devise/sessions/new.html.haml rename to app/views/devise/sessions/new.haml diff --git a/app/views/devise/shared/_links.haml b/app/views/devise/shared/_links.haml index ef8b2c6e1..9d0c4d843 100644 --- a/app/views/devise/shared/_links.haml +++ b/app/views/devise/shared/_links.haml @@ -8,8 +8,8 @@ = link_to t('.forgot_your_password'), new_password_path(resource_name) %br/ - if devise_mapping.confirmable? && controller_name != 'confirmations' - = link_to "Didn't receive confirmation instructions?", new_confirmation_path(resource_name) + = link_to t('.receive_confirmation'), new_confirmation_path(resource_name) %br/ - if devise_mapping.lockable? && resource_class.unlock_strategy_enabled?(:email) && controller_name != 'unlocks' - = link_to "Didn't receive unlock instructions?", new_unlock_path(resource_name) + = link_to t('.receive_unlock'), new_unlock_path(resource_name) %br/ diff --git a/app/views/devise/unlocks/new.html.haml b/app/views/devise/unlocks/new.html.haml index 24b7eb862..6fff589eb 100644 --- a/app/views/devise/unlocks/new.html.haml +++ b/app/views/devise/unlocks/new.html.haml @@ -6,5 +6,5 @@ %br/ = f.text_field :email %p - = f.submit "Resend unlock instructions" + = f.submit t('.resend_unlock') = render :partial => "devise/shared/links" diff --git a/app/views/home/show.html.haml b/app/views/home/show.haml similarity index 61% rename from app/views/home/show.html.haml rename to app/views/home/show.haml index 39f6ff848..554e0a766 100644 --- a/app/views/home/show.html.haml +++ b/app/views/home/show.haml @@ -13,27 +13,20 @@ #why.span-22.prepend-1.last .span-7 %h2 - Choice + = t('.choice') %p - Diaspora allows you to sort your connections into groups called Aspects. - Unique to Diaspora, Aspects ensure your photos, stories and jokes are shared - with only the people you want them to be. + = t('.choice_explanation') .span-7 %h2 - Ownership + = t('.ownership') %p - You own your pictures, and you shouldn’t have to give that up just in order - to share them. You maintain ownership of everything you share on Diaspora, - giving you full control over how it is distributed. - + = t('.ownership_explanation') .span-7 %h2 - Simplicity + = t('.simplicity') %p - Diaspora makes sharing clean and easy – this goes doubly so for privacy. - Innherently private, Diaspora doesn’t have pages of settings and options to - wade through to keep your profile secure and to your liking. + = t('.simplicity_explanation') .span-22.prepend-1.last @@ -47,12 +40,12 @@ #info_links.span-22.prepend-1.last .span-10 %h3 - Learn about how to host your own Diaspora server + = t('.learn_about_host') .span-11 %h3 - Learn more about Diaspora as an open source project. + = t('.learn_about_open_source') .span-24.last{:style=>"text-align:center;"} diff --git a/app/views/invitations/edit.html.haml b/app/views/invitations/edit.html.haml index 957432bb5..1eac967f6 100644 --- a/app/views/invitations/edit.html.haml +++ b/app/views/invitations/edit.html.haml @@ -10,5 +10,5 @@ = f.password_field :password_confirmation = f.hidden_field :invitation_token - = f.submit 'sign_up' + = f.submit t('.sign_up') = render :partial => "devise/shared/links" diff --git a/app/views/layouts/_header.html.haml b/app/views/layouts/_header.html.haml index 4749e3511..4c3bbc1e1 100644 --- a/app/views/layouts/_header.html.haml +++ b/app/views/layouts/_header.html.haml @@ -33,13 +33,13 @@ #aspect_nav %ul %li{:class => ("selected" if @aspect == :all)} - = link_to ((@request_count == 0)? "Home" : "Home (#{@request_count})"), root_path, :class => new_request(@request_count) + = link_to ((@request_count == 0)? t('_home') : "#{t('_home')} (#{@request_count})"), root_path, :class => new_request(@request_count) - for aspect in @aspects %li{:class => ("selected" if current_aspect?(aspect))} = link_for_aspect aspect %li - = link_to '+', '#add_aspect_pane', :class => "add_aspect_button", :title => t('.add_a_new_aspect') + = link_to '+', '#add_aspect_pane', :class => "add_aspect_button", :title => t('aspects.manage.add_a_new_aspect') .fancybox_content #add_aspect_pane diff --git a/app/views/people/_profile_sidebar.html.haml b/app/views/people/_profile_sidebar.html.haml index 954fcc92b..0f678a460 100644 --- a/app/views/people/_profile_sidebar.html.haml +++ b/app/views/people/_profile_sidebar.html.haml @@ -10,7 +10,7 @@ }); $('.delete').bind('ajax:failure', function() { - alert("Cannot remove #{person.real_name} from last aspect."); + alert("#{t('.cannot_remove', :name => person.real_name)}"); }); }); @@ -30,7 +30,7 @@ - for aspect in @aspects_with_person %li = link_to aspect.name, aspect - = link_to "x", {:controller => "aspects", :action => "remove_from_aspect", :person_id => person.id, :aspect_id => aspect.id}, :confirm => "Remove #{person.real_name} from #{aspect}?", :remote => true, :class => "delete" + = link_to "x", {:controller => "aspects", :action => "remove_from_aspect", :person_id => person.id, :aspect_id => aspect.id}, :confirm => t('.remove_from', :name => person.real_name, :aspect => aspect), :remote => true, :class => "delete" -if is_contact || person == current_user.person diff --git a/app/views/photos/_new_photo.haml b/app/views/photos/_new_photo.haml index a9b6bc29c..f17a3a0b4 100644 --- a/app/views/photos/_new_photo.haml +++ b/app/views/photos/_new_photo.haml @@ -18,6 +18,12 @@ var progress = Math.round(loaded / total * 100 ); $('#fileInfo').text(fileName + ' ' + progress + '%'); }, + + messages: { + typeError: "#{t('.invalid_ext')}", + sizeError: "#{t('.size_error')}", + emptyError: "#{t('.empty')}" + }, onSubmit: function(id, fileName){ $('#file-upload').addClass("loading"); diff --git a/app/views/photos/show.html.haml b/app/views/photos/show.html.haml index 8a12ac3be..c94cfb7a9 100644 --- a/app/views/photos/show.html.haml +++ b/app/views/photos/show.html.haml @@ -43,7 +43,7 @@ .photo_options{:data=>{:actor=>"#{@photo.person.owner.id}",:actor_person=>"#{@photo.person.id}",:image_url=>"#{@photo.url(:thumb_large)}"}} = link_to t('.make_profile_photo'), '#', :class => 'make_profile_photo' | - = link_to 'edit', '#', :id => "edit_photo_toggle" + = link_to t('.edit'), '#', :id => "edit_photo_toggle" -else = image_tag @photo.url(:scaled_full) @@ -55,7 +55,7 @@ -if @ownership #photo_edit_options - %h4 Edit photo description / delete photo + %h4= t('.edit_delete_photo') %p = form_for @photo, :remote => true do |p| = p.text_field :caption, :value => @photo.caption @@ -67,8 +67,8 @@ - if @photo.status_message_id #original_post_info %h4{:style=>"position:relative;"} - Original Post - = link_to 'view', @photo.status_message + = t('.original_post') + = link_to t('.view'), @photo.status_message %p = @photo.status_message.message @@ -77,7 +77,7 @@ - for photo in @photo.status_message.photos = link_to (image_tag photo.url(:thumb_small)), object_path(photo) - %h4 Comments + %h4= t('_comments') - if @photo.status_message_id %div{:id => 'status_message_stream', :class => 'stream show'} diff --git a/app/views/requests/_new_request_to_person.haml b/app/views/requests/_new_request_to_person.haml index b1fbee6c9..52f207b74 100644 --- a/app/views/requests/_new_request_to_person.haml +++ b/app/views/requests/_new_request_to_person.haml @@ -8,4 +8,4 @@ = request.hidden_field :to, :value => destination_handle = request.submit t('people.person.add_contact'), :disable_with => t('requests.create.sending') .message.hidden - %i sent! + %i= t('.sent') diff --git a/app/views/shared/_add_contact.html.haml b/app/views/shared/_add_contact.html.haml index ced70b7af..fb6fd8480 100644 --- a/app/views/shared/_add_contact.html.haml +++ b/app/views/shared/_add_contact.html.haml @@ -3,14 +3,14 @@ -# the COPYRIGHT file. -%h3 Add a new contact +%h3= t('aspects.manage.add_a_new_contact') = form_tag(person_by_handle_path, :id => "new_request_to_#{aspect.id}", :class => "webfinger_form", :remote => true) do =t('.enter_a_diaspora_username') %br %i= t '.your_diaspora_username_is', :diaspora_handle => current_user.diaspora_handle - = search_field_tag :diaspora_handle,'', :id => "request_d_handle_to_#{aspect.id}", :results => 5, :placeholder => "Diaspora handle" + = search_field_tag :diaspora_handle,'', :id => "request_d_handle_to_#{aspect.id}", :results => 5, :placeholder => t('.diaspora_handle') = hidden_field_tag :aspect_id, aspect.id - if defined?(getting_started) @@ -18,13 +18,13 @@ - if defined?(manage) = hidden_field_tag :manage, true - = submit_tag t('.create_request') + = submit_tag t('requests.manage_aspect_contacts.create_request') %br #loader.hidden= image_tag 'ajax-loader.gif' %ul#request_result{:aspect_id => aspect.id} %li.error.hidden #message - = link_to "Know their email address? You should invite them", "#invite_user_pane", :class => "invite_user_button" + = link_to t('requests.manage_aspect_contacts.know_email'), "#invite_user_pane", :class => "invite_user_button" %br .yo{ :style => "display:none;"} #invite_user_pane diff --git a/app/views/shared/_aspect_contacts.haml b/app/views/shared/_aspect_contacts.haml index a2b726a61..c01d80fab 100644 --- a/app/views/shared/_aspect_contacts.haml +++ b/app/views/shared/_aspect_contacts.haml @@ -25,13 +25,13 @@ $("#edit_aspect_pane").addClass("active"); $(".contact_pictures").fadeOut(200, function(){ $("#edit_aspect_pane").fadeIn(200); - trigger.html("done editing"); + trigger.html("#{t('.done_editing')}"); }); }, fadeOut: function(){ var trigger = $("#edit_aspect_trigger"); - trigger.html("edit aspect"); + trigger.html("#{t('.edit_aspect')}"); $("#edit_aspect_pane").removeClass("active"); $("#edit_aspect_pane").fadeOut(200, function(){ @@ -51,9 +51,9 @@ #new_request_pane{:class => "everyone"} %h1.new_request - if @request_count > 1 - = link_to "#{@request_count} new requests!", aspects_manage_path + = link_to t('.new_requests', :count => @request_count), aspects_manage_path - else - = link_to "#{@request_count} new request!", aspects_manage_path + = link_to t('.new_request', :count => @request_count), aspects_manage_path #left_pane{:class => ("everyone" if aspect == :all)} - if aspect == :all @@ -62,26 +62,26 @@ %h2{:style=>"position:relative;margin-bottom:0;"} = aspect .right - = link_to "edit aspect", "#", :id => "edit_aspect_trigger", :class => "button" + = link_to t('.edit_aspect'), "#", :id => "edit_aspect_trigger", :class => "button" %span.aspect_contact_count{:style=>"color:#999;font-size:14px;"} = aspect.contacts.count - if aspect.contacts.count == 1 - contact + = t('.contact') - else - contacts + = t('.contacts') - unless aspect == :all #edit_aspect_pane - if @contacts.count > 0 - %h3 Add an existing contact + %h3= t('.add_existing') = render 'shared/contact_list', :aspect => aspect, :contacts => @contacts, :manage => defined?(manage) = render 'shared/add_contact', :aspect => aspect - %h3 Aspect settings + %h3= t('.aspect_settings') .big_buttons - = button_to "Remove Aspect", aspect, :method => "delete", :confirm => "Remove aspect?" + = button_to t('.remove_aspect'), aspect, :method => "delete", :confirm => t('.confirm_remove_aspect') .contact_pictures - for contact in contacts @@ -89,7 +89,7 @@ - if aspect == :all && @contacts.count == 0 %h4 - You currently have no contacts. Find your contacts here. + = t('.no_contacts') = form_tag(people_path, :method => 'get') do = text_field_tag 'q', nil, :placeholder => t('search'), :type => 'search', :results => 5 @@ -101,9 +101,9 @@ %br %h3{:style=>"position:relative;"} - Aspects + = t('.aspects') .right{:style=>"font-size:12px;top:7px;"} - = link_to 'add aspect', '#add_aspect_pane', :class => "add_aspect_button" + = link_to t('.add_aspect'), '#add_aspect_pane', :class => "add_aspect_button" - for user_aspect in current_user.aspects @@ -111,7 +111,7 @@ %h4.aspect_title_right{:style => "margin-bottom:0;"} = link_to user_aspect, user_aspect %span{:style=>"font-size:12px;color:#888;"} - = "#{user_aspect.contacts.count} contacts" + = "#{user_aspect.contacts.count} #{t('.contacts')}" - if user_aspect.contacts.count > 0 - for aspect_contact in user_aspect.contacts[0..8] @@ -124,7 +124,7 @@ %br %br - %h3 Invites - %p invite people to join Diaspora. + %h3= t('.invites') + %p= t('.invite_people') = render "shared/invitations", :invites => @invites diff --git a/app/views/shared/_author_info.html.haml b/app/views/shared/_author_info.html.haml index 9cebe4f87..65ba39764 100644 --- a/app/views/shared/_author_info.html.haml +++ b/app/views/shared/_author_info.html.haml @@ -13,5 +13,5 @@ - for aspect in current_user.aspects_with_post( post.id ) %li= link_to aspect.name, aspect #person_nav_links - = link_to t('.view_profile'), person_path(person) + = link_to t('layouts.header.view_profile'), person_path(person) = link_to t('_photos'), person_photos_path(person) diff --git a/app/views/shared/_contact_list.html.haml b/app/views/shared/_contact_list.html.haml index 29aae463c..9b998dced 100644 --- a/app/views/shared/_contact_list.html.haml +++ b/app/views/shared/_contact_list.html.haml @@ -45,7 +45,7 @@ }); $('.remove').live('ajax:failure', function(data, html, xhr) { - alert("Cannot remove person from last aspect."); + alert("#{t('.cannot_remove')}"); }); $('.add').live('ajax:success', function(data, html, xhr) { diff --git a/app/views/shared/_publisher.haml b/app/views/shared/_publisher.haml index 265991084..7551a55c6 100644 --- a/app/views/shared/_publisher.haml +++ b/app/views/shared/_publisher.haml @@ -27,11 +27,11 @@ %ul#photodropzone = status.error_messages #file-upload.button - add photos + = t('.add_photos') %p %params - = status.label :message, t('.post_a_message_to', :aspect => (aspect == :all ? "all contacts" : aspect)) + = status.label :message, t('.post_a_message_to', :aspect => (aspect == :all ? t('.all_contacts') : aspect)) = status.text_area :message, :rows => 2, :value => params[:prefill] = status.hidden_field :to, :value => (aspect == :all ? aspect : aspect.id) diff --git a/app/views/status_messages/show.html.haml b/app/views/status_messages/show.html.haml index 3ffde4d07..5aa7c9104 100644 --- a/app/views/status_messages/show.html.haml +++ b/app/views/status_messages/show.html.haml @@ -19,7 +19,7 @@ = link_to t('.destroy'), @status_message, :confirm => t('are_you_sure'), :method => :delete .span-9.last - %h4{:style=>"margin-bottom:5px;"} Comments + %h4{:style=>"margin-bottom:5px;"}= t('_comments') %div{:class => 'stream show', :id => 'status_message_stream'} %li.message{:data=>{:guid=>@status_message.id}} = render "comments/comments", :post => @status_message diff --git a/app/views/users/getting_started.html.haml b/app/views/users/getting_started.html.haml index 68e822261..8b2a5b617 100644 --- a/app/views/users/getting_started.html.haml +++ b/app/views/users/getting_started.html.haml @@ -12,7 +12,7 @@ $(".aspects li").find(".delete").live("click", function(){ var aspectElement = $(this).parent("li"); - if (confirm("are you sure?")){ + if (confirm(#{t('are_you_sure')})){ aspectElement.fadeOut(300, function(){aspectElement.remove();}); } }); diff --git a/app/views/users/getting_started/_step_1.html.haml b/app/views/users/getting_started/_step_1.html.haml index 038d9a724..c24bc0519 100644 --- a/app/views/users/getting_started/_step_1.html.haml +++ b/app/views/users/getting_started/_step_1.html.haml @@ -5,7 +5,7 @@ = form_for @person, :html => { :multipart => true } do |person| %h3 - = t('.your_profile') + = t('people.edit.your_profile') .description = t('people.edit.info_available_to') diff --git a/app/views/users/getting_started/_step_4.html.haml b/app/views/users/getting_started/_step_4.html.haml index 99c6c5512..d749110ed 100644 --- a/app/views/users/getting_started/_step_4.html.haml +++ b/app/views/users/getting_started/_step_4.html.haml @@ -31,7 +31,7 @@ = t('.user_menu') %p = t('.manage_aspects') - %b #{t('shared.aspect_nav.manage')} + %b #{t('.manage')} = t('.tab_also_added') .submit_block diff --git a/chef/cookbooks/centos/recipes/bootstrap.rb b/chef/cookbooks/centos/recipes/bootstrap.rb index aa70e84cd..9c4914279 100644 --- a/chef/cookbooks/centos/recipes/bootstrap.rb +++ b/chef/cookbooks/centos/recipes/bootstrap.rb @@ -28,4 +28,4 @@ def harden_ruby(ruby_string) end -harden_ruby("ree") +harden_ruby("ruby-1.8.7-p302") diff --git a/chef/cookbooks/centos/recipes/main.rb b/chef/cookbooks/centos/recipes/main.rb index 46188b0b5..10ba973ab 100644 --- a/chef/cookbooks/centos/recipes/main.rb +++ b/chef/cookbooks/centos/recipes/main.rb @@ -12,7 +12,7 @@ def harden_ruby(ruby_string) end -harden_ruby("ree") +harden_ruby("ruby-1.8.7-p302") include_recipe "centos::image_magick" include_recipe "centos::mongo_db" diff --git a/config/assets.yml b/config/assets.yml index 4a194cd3f..5a14264ae 100644 --- a/config/assets.yml +++ b/config/assets.yml @@ -17,7 +17,6 @@ javascripts: mobile: - public/javascripts/vendor/jquery144.min.js - public/javascripts/custom-mobile-scripting.js - - public/javascripts/rails.js - public/javascripts/vendor/jquery-ui-1.8.6.custom.min.js - public/javascripts/vendor/jquery_mobile_a2.min.js - public/javascripts/mobile.js diff --git a/config/deploy_config.yml b/config/deploy_config.yml index 6538e273c..06a6747e1 100644 --- a/config/deploy_config.yml +++ b/config/deploy_config.yml @@ -6,7 +6,7 @@ cross_server: deploy_to: '/usr/local/app/diaspora' user: 'root' repo: 'git://github.com/diaspora/diaspora.git' - branch: 'homepage' + branch: 'master' default_env: 'development' servers: tom: diff --git a/config/locales/devise/devise.en.yml b/config/locales/devise/devise.en.yml index c6cec0c6c..77ead1831 100644 --- a/config/locales/devise/devise.en.yml +++ b/config/locales/devise/devise.en.yml @@ -27,12 +27,16 @@ en: passwords: send_instructions: 'You will receive an email with instructions about how to reset your password in a few minutes.' updated: 'Your password was changed successfully. You are now signed in.' + edit: + change_password: "Change my password" new: forgot_password: "Forgot your password?" send_password_instructions: "Send me reset password instructions" confirmations: send_instructions: 'You will receive an email with instructions about how to confirm your account in a few minutes.' confirmed: 'Your account was successfully confirmed. You are now signed in.' + new: + resend_confirmation: "Resend confirmation instructions" registrations: signed_up: 'You have signed up successfully. If enabled, a confirmation was sent to your e-mail.' updated: 'You updated your account successfully.' @@ -40,6 +44,8 @@ en: unlocks: send_instructions: 'You will receive an email with instructions about how to unlock your account in a few minutes.' unlocked: 'Your account was successfully unlocked. You are now signed in.' + new: + resend_unlock: "Resend unlock instructions" invitations: send_instructions: 'Your invitation has been sent.' invitation_token_invalid: 'The invitation token provided is not valid!' @@ -76,4 +82,5 @@ en: sign_in: 'Sign in' sign_up: 'Sign up' forgot_your_password: 'Forgot your password?' - + receive_confirmation: "Didn't receive confirmation instructions?" + receive_unlock: "Didn't receive unlock instructions?" diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml index 1c83c2506..1c87e20ad 100644 --- a/config/locales/diaspora/en.yml +++ b/config/locales/diaspora/en.yml @@ -26,6 +26,8 @@ en: back: "Back" the_world: "the world" search: "Search" + _home: "Home" + _comments: "Comments" activemodel: errors: @@ -60,10 +62,6 @@ en: blog: "blog" developers: "developers" login: "login" - add_a_new_aspect: "add a new aspect" - manage: "Manage" - manage_your_aspects: "Manage your Aspects" - everyone: "Everyone" application: powered_by: "POWERED BY DIASPORA*" shared: @@ -77,27 +75,35 @@ en: share_with_all: "Share with all aspects" share_with: "Share with %{aspect}" all: "all" + add_photos: "add photos" + all_contacts: "all contacts" aspect_contacts: - add_contacts: "add contacts" - everyone: "Everyone" add_to: "add to %{aspect}" - add_a_new_contact_to: "Add a new contact to" + done_editing: "done editing" + new_requests: "%{count} new requests!" + new_request: "%{count} new request!" + edit_aspect: "edit aspect" + contact: "contact" + contacts: "contacts" + add_existing: "Add an existing contact" + aspect_settings: "Aspect settings" + remove_aspect: "Remove Aspect" + confirm_remove_aspect: "Remove aspect?" + no_contacts: "You currently have no contacts. Find your contacts here." + aspects: "Aspects" + add_aspect: "add aspect" + invites: "Invites" + invite_people: "invite people to join Diaspora." add_contact: enter_a_diaspora_username: "Enter a Diaspora username:" your_diaspora_username_is: "Your Diaspora username is: %{diaspora_handle}" contact_username: "Contact's username" create_request: "Find by Diaspora handle" invitations: - invites: "Invites" invite_someone: "Invite someone" invitations_left: "(%{count} left)" reshare: reshare: "Reshare" - author_info: - view_profile: "View profile" - status_messages: "status messages" - viewing: "viewing" - all: "all" public_explain: title: "You are about to post a public message!" outside: "Public messages will be available for others outside of Diaspora to see." @@ -107,8 +113,7 @@ en: new: "New %{type} from %{from}" contact_list: search_contacts: "Search contacts" - add_to: "Add %{name} to %{aspect}" - remove_from: "Remove %{name} from %{aspect}" + cannot_remove: "Cannot remove person from last aspect. (If you want to disconnect from this person you must remove contact.)" aspects: no_contacts_message: nobody: "We know you know people — bring them to Diaspora!" @@ -149,6 +154,11 @@ en: remove_from_aspect: success: "Successfully removed person from aspect" failure: "Failed to remove person from aspect" + seed: + family: "Family" + work: "Work" + index: + handle_explanation: "This is your diaspora handle. Like an email address, you can give this to people to reach you." users: edit: invite_contacts: "Invite contacts" @@ -169,8 +179,6 @@ en: finished: "Finished!" skip: "skip getting started" save_and_continue: "Save and continue" - step_1: - your_profile: "Your Profile" step_2: your_aspects: "Your aspects" description: "Tell Diaspora what different aspects of you are seen by different contacts. You can manage these later by clicking the manage tab on the top right. Your aspects are unique to you, and not visible by others." @@ -189,6 +197,7 @@ en: manage_aspects: "You can manage your aspects any time by clicking the" tab_also_added: "tab. Your contacts can also be added while on a particular aspect page, as well." finish: "Finish" + manage: "Manage" update: password_changed: "Password Changed" password_not_changed: "Password Change Failed" @@ -203,13 +212,12 @@ en: photos: show: delete_photo: "Delete Photo" - prev: "prev" - full_size: "full size" - next: "next" - edit_photo: "Edit Photo" - add_a_description: "Add a description" make_profile_photo: "make profile photo" update_photo: "Update Photo" + view: "view" + edit: "edit" + edit_delete_photo: "Edit photo description / delete photo" + original_post: "Original Post" edit: editing: "Editing" photo: @@ -228,9 +236,6 @@ en: destroy: notice: "Photo deleted." new_photo: - drop: "Drop photos here to upload" - upload: "Upload a photo" - failed: "Failed" invalid_ext: "{file} has invalid extension. Only {extensions} are allowed." size_error: "{file} is too large, maximum file size is {sizeLimit}." empty: "{file} is empty, please select files again without it." @@ -263,6 +268,8 @@ en: send_invitation: "Send invitation" check_token: not_found: "Invitation token not found" + edit: + sign_up: "sign_up" status_messages: new_status_message: tell_me_something_good: "tell me something good" @@ -305,11 +312,12 @@ en: profile_sidebar: remove_contact: "remove contact" edit_my_profile: "Edit my profile" - last_seen: "last seen: %{how_long_ago}" bio: "bio" gender: "gender" born: "born" in_aspects: "in aspects" + cannot_remove: "Cannot remove %{name} from last aspect. (If you want to disconnect from this person you must remove contact.)" + remove_from: "Remove %{name} from %{aspect}?" helper: results_for: " results for %{params}" people_on_pod_are_aware_of: " people on pod are aware of" @@ -329,7 +337,8 @@ en: create: sending: "Sending..." sent: "You've asked to share with %{name}. They should see it next time they log in to Diaspora." - tried: "we tried our best to send a message to %{account}" + new_request_to_person: + sent: "sent!" services: index: logged_in_as: "logged in as" @@ -341,9 +350,6 @@ en: success: "Authentication successful." destroy: success: "Successfully destroyed authentication." - dashboards: - helper: - home: "Home" notifier: hello: "Hello %{name}!" love: "love," @@ -362,3 +368,11 @@ en: share_what_you_want: "Share what you want, with who you want." already_account: "already have an account?" login_here: "log in here" + choice: "Choice" + choice_explanation: "Diaspora lets you sort your connections into groups called aspects. Unique to Diaspora, aspects ensure that your photos, stories and jokes are shared only with the people you intend." + ownership: "Ownership" + ownership_explanation: "You own your pictures, and you shouldn’t have to give that up just to share them. You maintain ownership of everything you share on Diaspora, giving you full control over how it's distributed." + simplicity: "Simplicity" + simplicity_explanation: "Diaspora makes sharing clean and easy – and this goes for privacy too. Inherently private, Diaspora doesn’t make you wade through pages of settings and options just to keep your profile secure." + learn_about_host: "Learn about how to host your own Diaspora server" + learn_about_open_source: "Learn more about Diaspora as an open source project." diff --git a/public/javascripts/custom-mobile-scripting.js b/public/javascripts/custom-mobile-scripting.js index e435105d3..6d7583b6a 100644 --- a/public/javascripts/custom-mobile-scripting.js +++ b/public/javascripts/custom-mobile-scripting.js @@ -1,7 +1,7 @@ -$(document).bind("mobileinit", function(){ - $.extend( $.mobile , { - - ajaxLinksEnabled : false - ajaxFormsEnabled : false - }); -}); +// $(document).bind("mobileinit", function(){ +// $.extend( $.mobile , { +// +// ajaxLinksEnabled : false +// ajaxFormsEnabled : false +// }); +// }); diff --git a/public/javascripts/stream.js b/public/javascripts/stream.js index a3495e720..1a8e9b31b 100644 --- a/public/javascripts/stream.js +++ b/public/javascripts/stream.js @@ -6,6 +6,7 @@ $(document).ready(function(){ var $stream = $(".stream"); + var $publisher = $("#publisher"); // expand all comments on page load $(".stream:not('.show')").find('.comments').each(function(index) { var comments = $(this); @@ -51,6 +52,22 @@ $(document).ready(function(){ } }); + $(".new_status_message").bind('ajax:success', function(data, json, xhr){ + json = $.parseJSON(json); + WebSocketReceiver.addPostToStream(json['post_id'],json['html']); + }); + $(".new_status_message").bind('ajax:failure', function(data, html, xhr){ + alert('failed to post message!'); + }); + + $(".new_comment").live('ajax:success', function(data, json, xhr){ + json = $.parseJSON(json); + WebSocketReceiver.processComment(json['post_id'],json['comment_id'],json['html'],false); + }); + $(".new_comment").live('ajax:failure', function(data, html, xhr){ + alert('failed to post message!'); + }); + });//end document ready diff --git a/public/javascripts/vendor/jquery_mobile_a2.js b/public/javascripts/vendor/jquery_mobile_a2.js new file mode 100644 index 000000000..6b9484d23 --- /dev/null +++ b/public/javascripts/vendor/jquery_mobile_a2.js @@ -0,0 +1,3541 @@ +/*! + * jQuery Mobile v1.0a2 + * http://jquerymobile.com/ + * + * Copyright 2010, jQuery Project + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + */ +/*! + * jQuery UI Widget @VERSION + * + * Copyright 2010, AUTHORS.txt (http://jqueryui.com/about) + * Dual licensed under the MIT or GPL Version 2 licenses. + * http://jquery.org/license + * + * http://docs.jquery.com/UI/Widget + */ +(function( $, undefined ) { + +// jQuery 1.4+ +if ( $.cleanData ) { + var _cleanData = $.cleanData; + $.cleanData = function( elems ) { + for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) { + $( elem ).triggerHandler( "remove" ); + } + _cleanData( elems ); + }; +} else { + var _remove = $.fn.remove; + $.fn.remove = function( selector, keepData ) { + return this.each(function() { + if ( !keepData ) { + if ( !selector || $.filter( selector, [ this ] ).length ) { + $( "*", this ).add( [ this ] ).each(function() { + $( this ).triggerHandler( "remove" ); + }); + } + } + return _remove.call( $(this), selector, keepData ); + }); + }; +} + +$.widget = function( name, base, prototype ) { + var namespace = name.split( "." )[ 0 ], + fullName; + name = name.split( "." )[ 1 ]; + fullName = namespace + "-" + name; + + if ( !prototype ) { + prototype = base; + base = $.Widget; + } + + // create selector for plugin + $.expr[ ":" ][ fullName ] = function( elem ) { + return !!$.data( elem, name ); + }; + + $[ namespace ] = $[ namespace ] || {}; + $[ namespace ][ name ] = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } + }; + + var basePrototype = new base(); + // we need to make the options hash a property directly on the new instance + // otherwise we'll modify the options hash on the prototype that we're + // inheriting from +// $.each( basePrototype, function( key, val ) { +// if ( $.isPlainObject(val) ) { +// basePrototype[ key ] = $.extend( {}, val ); +// } +// }); + basePrototype.options = $.extend( true, {}, basePrototype.options ); + $[ namespace ][ name ].prototype = $.extend( true, basePrototype, { + namespace: namespace, + widgetName: name, + widgetEventPrefix: $[ namespace ][ name ].prototype.widgetEventPrefix || name, + widgetBaseClass: fullName + }, prototype ); + + $.widget.bridge( name, $[ namespace ][ name ] ); +}; + +$.widget.bridge = function( name, object ) { + $.fn[ name ] = function( options ) { + var isMethodCall = typeof options === "string", + args = Array.prototype.slice.call( arguments, 1 ), + returnValue = this; + + // allow multiple hashes to be passed on init + options = !isMethodCall && args.length ? + $.extend.apply( null, [ true, options ].concat(args) ) : + options; + + // prevent calls to internal methods + if ( isMethodCall && options.charAt( 0 ) === "_" ) { + return returnValue; + } + + if ( isMethodCall ) { + this.each(function() { + var instance = $.data( this, name ); + if ( !instance ) { + throw "cannot call methods on " + name + " prior to initialization; " + + "attempted to call method '" + options + "'"; + } + if ( !$.isFunction( instance[options] ) ) { + throw "no such method '" + options + "' for " + name + " widget instance"; + } + var methodValue = instance[ options ].apply( instance, args ); + if ( methodValue !== instance && methodValue !== undefined ) { + returnValue = methodValue; + return false; + } + }); + } else { + this.each(function() { + var instance = $.data( this, name ); + if ( instance ) { + instance.option( options || {} )._init(); + } else { + $.data( this, name, new object( options, this ) ); + } + }); + } + + return returnValue; + }; +}; + +$.Widget = function( options, element ) { + // allow instantiation without initializing for simple inheritance + if ( arguments.length ) { + this._createWidget( options, element ); + } +}; + +$.Widget.prototype = { + widgetName: "widget", + widgetEventPrefix: "", + options: { + disabled: false + }, + _createWidget: function( options, element ) { + // $.widget.bridge stores the plugin instance, but we do it anyway + // so that it's stored even before the _create function runs + $.data( element, this.widgetName, this ); + this.element = $( element ); + this.options = $.extend( true, {}, + this.options, + this._getCreateOptions(), + options ); + + var self = this; + this.element.bind( "remove." + this.widgetName, function() { + self.destroy(); + }); + + this._create(); + this._trigger( "create" ); + this._init(); + }, + _getCreateOptions: function() { + var options = {}; + if ( $.metadata ) { + options = $.metadata.get( element )[ this.widgetName ]; + } + return options; + }, + _create: function() {}, + _init: function() {}, + + destroy: function() { + this.element + .unbind( "." + this.widgetName ) + .removeData( this.widgetName ); + this.widget() + .unbind( "." + this.widgetName ) + .removeAttr( "aria-disabled" ) + .removeClass( + this.widgetBaseClass + "-disabled " + + "ui-state-disabled" ); + }, + + widget: function() { + return this.element; + }, + + option: function( key, value ) { + var options = key; + + if ( arguments.length === 0 ) { + // don't return a reference to the internal hash + return $.extend( {}, this.options ); + } + + if (typeof key === "string" ) { + if ( value === undefined ) { + return this.options[ key ]; + } + options = {}; + options[ key ] = value; + } + + this._setOptions( options ); + + return this; + }, + _setOptions: function( options ) { + var self = this; + $.each( options, function( key, value ) { + self._setOption( key, value ); + }); + + return this; + }, + _setOption: function( key, value ) { + this.options[ key ] = value; + + if ( key === "disabled" ) { + this.widget() + [ value ? "addClass" : "removeClass"]( + this.widgetBaseClass + "-disabled" + " " + + "ui-state-disabled" ) + .attr( "aria-disabled", value ); + } + + return this; + }, + + enable: function() { + return this._setOption( "disabled", false ); + }, + disable: function() { + return this._setOption( "disabled", true ); + }, + + _trigger: function( type, event, data ) { + var callback = this.options[ type ]; + + event = $.Event( event ); + event.type = ( type === this.widgetEventPrefix ? + type : + this.widgetEventPrefix + type ).toLowerCase(); + data = data || {}; + + // copy original event properties over to the new event + // this would happen if we could call $.event.fix instead of $.Event + // but we don't have a way to force an event to be fixed multiple times + if ( event.originalEvent ) { + for ( var i = $.event.props.length, prop; i; ) { + prop = $.event.props[ --i ]; + event[ prop ] = event.originalEvent[ prop ]; + } + } + + this.element.trigger( event, data ); + + return !( $.isFunction(callback) && + callback.call( this.element[0], event, data ) === false || + event.isDefaultPrevented() ); + } +}; + +})( jQuery ); +/* +* jQuery Mobile Framework : widget factory extentions for mobile +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($, undefined ) { + +$.widget( "mobile.widget", { + _getCreateOptions: function() { + var elem = this.element, + options = {}; + $.each( this.options, function( option ) { + var value = elem.data( option.replace( /[A-Z]/g, function( c ) { + return "-" + c.toLowerCase(); + } ) ); + if ( value !== undefined ) { + options[ option ] = value; + } + }); + return options; + } +}); + +})( jQuery ); +/* +* jQuery Mobile Framework : support tests +* Copyright (c) jQuery Project +* Dual licensed under the MIT (MIT-LICENSE.txt) and GPL (GPL-LICENSE.txt) licenses. +* Note: Code is in draft form and is subject to change +*/ +(function($, undefined ) { + +// test whether a CSS media type or query applies +$.media = (function() { + // TODO: use window.matchMedia once at least one UA implements it + var cache = {}, + $html = $( "html" ), + testDiv = $( "