From: Tom Hughes Date: Sat, 27 Feb 2010 18:11:04 +0000 (+0000) Subject: Rework the user details screen to be less crap... Highlights include: X-Git-Tag: live~5096^2~246 X-Git-Url: https://git.openstreetmap.org/rails.git/commitdiff_plain/acd72861ed8ad46d759a6e509f3e7c459db1a4f5?ds=sidebyside Rework the user details screen to be less crap... Highlights include: - Map is smaller and placed to the side with lists of friends and nearby users (now excluding friends) beside it. - Map includes friends as well as nearby users. - Friend and nearby user lists include photos and links to friend/unfriend as appropriate. - OAuth settings link moved up with all the other links in the main navigation bar. The addition of friends to the map also carries through to the user settings page. --- diff --git a/app/controllers/user_controller.rb b/app/controllers/user_controller.rb index c181da305..5b6222a98 100644 --- a/app/controllers/user_controller.rb +++ b/app/controllers/user_controller.rb @@ -287,7 +287,11 @@ class UserController < ApplicationController flash[:warning] = t 'user.make_friend.already_a_friend', :name => name end - redirect_to :controller => 'user', :action => 'view' + if params[:referer] + redirect_to params[:referer] + else + redirect_to :controller => 'user', :action => 'view' + end end end @@ -302,7 +306,11 @@ class UserController < ApplicationController flash[:error] = t 'user.remove_friend.not_a_friend', :name => friend.display_name end - redirect_to :controller => 'user', :action => 'view' + if params[:referer] + redirect_to params[:referer] + else + redirect_to :controller => 'user', :action => 'view' + end end end diff --git a/app/views/user/_contact.html.erb b/app/views/user/_contact.html.erb new file mode 100644 index 000000000..be1c24106 --- /dev/null +++ b/app/views/user/_contact.html.erb @@ -0,0 +1,31 @@ + + + <% if contact.image %> + <%= image_tag url_for_file_column(contact, "image"), :class => "user_thumbnail" %> + <% else %> + <%= image_tag "anon_small.png" %> + <% end %> + + + <%= link_to h(contact.display_name), :controller => 'user', :action => 'view', :display_name => contact.display_name %> + <% if contact.home_lon and contact.home_lat %> + <% distance = @this_user.distance(contact) %> + <% if distance < 1 %> + (<%= t 'user.view.m away', :count => (distance * 1000).round %>) + <% else %> + (<%= t 'user.view.km away', :count => distance.round %>) + <% end %> + <% end %> + + + + + <%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => contact.display_name %> + | + <% if @user.is_friends_with?(contact) %> + <%= link_to t('user.view.remove as friend'), :controller => 'user', :action => 'remove_friend', :display_name => contact.display_name, :referer => request.request_uri %> + <% else %> + <%= link_to t('user.view.add as friend'), :controller => 'user', :action => 'make_friend', :display_name => contact.display_name, :referer => request.request_uri %> + <% end %> + + diff --git a/app/views/user/_friend_map.html.erb b/app/views/user/_map.html.erb similarity index 58% rename from app/views/user/_friend_map.html.erb rename to app/views/user/_map.html.erb index a73bb53b8..17f4ed344 100644 --- a/app/views/user/_friend_map.html.erb +++ b/app/views/user/_map.html.erb @@ -1,14 +1,23 @@ -<% nearest_str = "" %> -<% if !@user.home_lat.nil? and !@user.home_lon.nil? %> - <% if !@user.nearby.empty? %> - <% @user.nearby.each do |nearby| %> - <% nearest_str += "nearest.push( { 'display_name' : '#{escape_javascript(nearby.display_name)}', 'home_lat' : #{nearby.home_lat}, 'home_lon' : #{nearby.home_lon} } );\n" %> + <% if @user.home_lat.nil? or @user.home_lon.nil? %> @@ -47,17 +56,25 @@ setMapCenter(centre, zoom); <% if marker %> - marker = addMarkerToMap(new OpenLayers.LonLat(<%= mlon %>, <%= mlat %>), null, "<%= t 'user.friend_map.your location' %>"); + marker = addMarkerToMap(new OpenLayers.LonLat(<%= mlon %>, <%= mlat %>), null, "<%= t 'user.map.your location' %>"); <% end %> var near_icon = OpenLayers.Marker.defaultIcon(); near_icon.url = OpenLayers.Util.getImagesLocation() + "marker-green.png";; var i = nearest.length; while( i-- ) { - var description = i18n('<%= t 'user.friend_map.nearby mapper'%>', { nearby_user: ''+nearest[i].display_name+'' }); + var description = i18n('<%= t 'user.map.nearby mapper'%>', { nearby_user: ''+nearest[i].display_name+'' }); var nearmarker = addMarkerToMap(new OpenLayers.LonLat(nearest[i].home_lon, nearest[i].home_lat), near_icon.clone(), description); } + var friend_icon = OpenLayers.Marker.defaultIcon(); + friend_icon.url = OpenLayers.Util.getImagesLocation() + "marker-blue.png";; + var i = friends.length; + while( i-- ) { + var description = i18n('<%= t 'user.map.friend'%>', { friend_user: ''+friends[i].display_name+'' }); + var friendmarker = addMarkerToMap(new OpenLayers.LonLat(friends[i].home_lon, friends[i].home_lat), friend_icon.clone(), description); + } + if (document.getElementById('updatehome')) { map.events.register("click", map, setHome); } @@ -77,7 +94,7 @@ removeMarkerFromMap(marker); } - marker = addMarkerToMap(lonlat, null, "<%= t 'user.friend_map.your location' %>"); + marker = addMarkerToMap(lonlat, null, "<%= t 'user.map.your location' %>"); } } diff --git a/app/views/user/account.html.erb b/app/views/user/account.html.erb index 881750c36..92c37056b 100644 --- a/app/views/user/account.html.erb +++ b/app/views/user/account.html.erb @@ -59,7 +59,7 @@ <% else %> - + @@ -96,7 +96,7 @@
<%= image_tag url_for_file_column(@user, "image") %><%= image_tag url_for_file_column(@user, "image"), :class => "user_image" %> <%= radio_button_tag "image_action", "keep", true %> <%= t 'user.account.keep image' %>
<% end %> -<%= render :partial => 'friend_map' %> +<%= render :partial => 'map' %> <% unless @user.data_public? %> diff --git a/app/views/user/view.html.erb b/app/views/user/view.html.erb index 372bd660d..865c38959 100644 --- a/app/views/user/view.html.erb +++ b/app/views/user/view.html.erb @@ -1,148 +1,124 @@ <% if @this_user.image %> -<%= image_tag url_for_file_column(@this_user, "image"), :align => "right", :float => "left" %> + <%= image_tag url_for_file_column(@this_user, "image"), :style => "float: right; margin-top: 19px", :class => "user_image" %> <% end %> +

<%= h(@this_user.display_name) %> + <% UserRole::ALL_ROLES.each do |role| %> -<% if @user and @user.administrator? %> -<% if @this_user.has_role? role %> -<%= link_to(image_tag("roles/#{role}.png", :size => "20x20", :border => 0, :alt => t("user.view.role.revoke.#{role}"), :title => t("user.view.role.revoke.#{role}")), :controller => 'user_roles', :action => 'revoke', :display_name => @this_user.display_name, :role => role) %> -<% else %> -<%= link_to(image_tag("roles/blank_#{role}.png", :size => "20x20", :border => 0, :alt => t("user.view.role.grant.#{role}"), :title => t("user.view.role.grant.#{role}")), :controller => 'user_roles', :action => 'grant', :display_name => @this_user.display_name, :role => role) %> -<% end %> -<% elsif @this_user.has_role? role %> -<%= image_tag("roles/#{role}.png", :size => "20x20", :border => 0, :alt => t("user.view.role.#{role}"), :title => t("user.view.role.#{role}")) %> -<% end %> + <% if @user and @user.administrator? %> + <% if @this_user.has_role? role %> + <%= link_to(image_tag("roles/#{role}.png", :size => "20x20", :border => 0, :alt => t("user.view.role.revoke.#{role}"), :title => t("user.view.role.revoke.#{role}")), :controller => 'user_roles', :action => 'revoke', :display_name => @this_user.display_name, :role => role) %> + <% else %> + <%= link_to(image_tag("roles/blank_#{role}.png", :size => "20x20", :border => 0, :alt => t("user.view.role.grant.#{role}"), :title => t("user.view.role.grant.#{role}")), :controller => 'user_roles', :action => 'grant', :display_name => @this_user.display_name, :role => role) %> + <% end %> + <% elsif @this_user.has_role? role %> + <%= image_tag("roles/#{role}.png", :size => "20x20", :border => 0, :alt => t("user.view.role.#{role}"), :title => t("user.view.role.#{role}")) %> + <% end %> <% end %>

+
-<% if @user and @this_user.id == @user.id %> - -<%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %> -| <%= link_to t('user.view.new diary entry'), :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %> -| <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %> -| <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %> -| <%= link_to t('user.view.my settings'), :controller => 'user', :action => 'account', :display_name => @user.display_name %> -| <%= link_to t('user.view.blocks on me'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @user.display_name %> -<% if @user and @user.moderator? %> -| <%= link_to t('user.view.blocks by me'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @user.display_name %> -<% end %> -<% else %> - -<%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @this_user.display_name %> -| <%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %> -| <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %> -| <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'view', :display_name => @this_user.display_name %> -| <% if @user and @user.is_friends_with?(@this_user) %> - <%= link_to t('user.view.remove as friend'), :controller => 'user', :action => 'remove_friend', :display_name => @this_user.display_name %> -<% else %> - <%= link_to t('user.view.add as friend'), :controller => 'user', :action => 'make_friend', :display_name => @this_user.display_name %> -<% end %> -| <%= link_to t('user.view.block_history'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @this_user.display_name %> -<% if @this_user.moderator? %> -| <%= link_to t('user.view.moderator_history'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @this_user.display_name %> -<% end %> -<% if @user and @user.moderator? %> -| <%= link_to t('user.view.create_block'), :controller => 'user_blocks', :action => 'new', :display_name => @this_user.display_name %> -<% end %> -<% end %> -<% if @user and @user.administrator? %> -
-<% if @this_user.active? %> -<%= link_to t('user.view.deactivate_user'), {:controller => 'user', :action => 'deactivate', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> -<% else %> -<%= link_to t('user.view.activate_user'), {:controller => 'user', :action => 'activate', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> -<% end %> -<% if @this_user.visible? %> -| <%= link_to t('user.view.hide_user'), {:controller => 'user', :action => 'hide', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> -| <%= link_to t('user.view.delete_user'), {:controller => 'user', :action => 'delete', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> -<% else %> -| <%= link_to t('user.view.unhide_user'), {:controller => 'user', :action => 'unhide', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> -<% end %> -<% end %> + <% if @user and @this_user.id == @user.id %> + + <%= link_to t('user.view.my diary'), :controller => 'diary_entry', :action => 'list', :display_name => @user.display_name %> + | + <%= link_to t('user.view.new diary entry'), :controller => 'diary_entry', :action => 'new', :display_name => @user.display_name %> + | + <%= link_to t('user.view.my edits'), :controller => 'changeset', :action => 'list', :display_name => @user.display_name %> + | + <%= link_to t('user.view.my traces'), :controller => 'trace', :action=>'mine' %> + | + <%= link_to t('user.view.my settings'), :controller => 'user', :action => 'account', :display_name => @user.display_name %> + | + <%= link_to t('user.view.oauth settings'), :controller => 'oauth_clients', :action => 'index' %> + | + <%= link_to t('user.view.blocks on me'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @user.display_name %> + <% if @user and @user.moderator? %> + | <%= link_to t('user.view.blocks by me'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @user.display_name %> + <% end %> + <% else %> + + <%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @this_user.display_name %> + | + <%= link_to t('user.view.diary'), :controller => 'diary_entry', :action => 'list', :display_name => @this_user.display_name %> + | + <%= link_to t('user.view.edits'), :controller => 'changeset', :action => 'list', :display_name => @this_user.display_name %> + | + <%= link_to t('user.view.traces'), :controller => 'trace', :action => 'view', :display_name => @this_user.display_name %> + | + <% if @user and @user.is_friends_with?(@this_user) %> + <%= link_to t('user.view.remove as friend'), :controller => 'user', :action => 'remove_friend', :display_name => @this_user.display_name %> + <% else %> + <%= link_to t('user.view.add as friend'), :controller => 'user', :action => 'make_friend', :display_name => @this_user.display_name %> + <% end %> + | + <%= link_to t('user.view.block_history'), :controller => 'user_blocks', :action => 'blocks_on', :display_name => @this_user.display_name %> + <% if @this_user.moderator? %> + | <%= link_to t('user.view.moderator_history'), :controller => 'user_blocks', :action => 'blocks_by', :display_name => @this_user.display_name %> + <% end %> + <% if @user and @user.moderator? %> + | <%= link_to t('user.view.create_block'), :controller => 'user_blocks', :action => 'new', :display_name => @this_user.display_name %> + <% end %> + <% end %> + <% if @user and @user.administrator? %> +
+ <% if @this_user.active? %> + <%= link_to t('user.view.deactivate_user'), {:controller => 'user', :action => 'deactivate', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> + <% else %> + <%= link_to t('user.view.activate_user'), {:controller => 'user', :action => 'activate', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> + <% end %> + | + <% if @this_user.visible? %> + <%= link_to t('user.view.hide_user'), {:controller => 'user', :action => 'hide', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> + | + <%= link_to t('user.view.delete_user'), {:controller => 'user', :action => 'delete', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> + <% else %> + <%= link_to t('user.view.unhide_user'), {:controller => 'user', :action => 'unhide', :display_name => @this_user.display_name}, {:confirm => t('user.view.confirm')} %> + <% end %> + <% end %>

<%= t 'user.view.mapper since' %> <%= l @this_user.creation_time %> <%= t 'user.view.ago', :time_in_words_ago => time_ago_in_words(@this_user.creation_time) %>

<% if @user and @user.administrator? %> -

<%= t 'user.view.email address' %> <%= @this_user.email %>

-

<%= t 'user.view.created from' %> <%= @this_user.creation_ip %>

+

<%= t 'user.view.email address' %> <%= @this_user.email %>

+

<%= t 'user.view.created from' %> <%= @this_user.creation_ip %>

<% end %>

<%= t 'user.view.description' %>

-
<%= htmlize(@this_user.description) %>
-<% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %> -

<%= t 'user.view.user location' %>

- - <%= t 'user.view.no home location' %> - <% if @user and @this_user.id == @user.id %> - <%= t 'user.view.if set location', :settings_link => (link_to t('user.view.settings_link_text'), :controller => 'user', :action => 'account', :display_name => @user.display_name) %> - <% end %> -<% else %> +
<%= htmlize(@this_user.description) %>
- <% if @user and @this_user.id == @user.id %> -

<%= t 'user.view.your friends' %>

- <% if @this_user.friends.empty? %> - <%= t 'user.view.no friends' %> +<% if @user and @this_user.id == @user.id %> +
+ <% if @this_user.home_lat.nil? or @this_user.home_lon.nil? %> +

+ <%= t 'user.view.if set location', :settings_link => (link_to t('user.view.settings_link_text'), :controller => 'user', :action => 'account', :display_name => @user.display_name) %> +

<% else %> - - <% @this_user.friends.each do |friend| %> - <% @friend = User.find_by_id(friend.friend_user_id) %> - - - - - - - <%end%> -
- <% if @friend.image %> - <%= image_tag url_for_file_column(@friend, "image") %> - <% end %> - <%= link_to h(@friend.display_name), :controller => 'user', :action => 'view', :display_name => @friend.display_name %> - <% if @friend.home_lon and @friend.home_lat %> - <% distance = @this_user.distance(@friend) %> - <% if distance < 1 %> - <%= t 'user.view.m away', :count => (distance * 1000).round %> - <% else %> - <%= t 'user.view.km away', :count => distance.round %> - <% end %> - <% end %> - (<%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => @friend.display_name %>)
- <%end%> -
- <%end%> + <%= render :partial => 'map' %> + <% end %> +
+ <% friends = @this_user.friends.collect { |f| f.befriendee } %> + <% nearby = @this_user.nearby - friends %> - <% if @user and @this_user.id == @user.id %> -

<%= t 'user.view.nearby users' %>

- <% if @this_user.nearby.empty? %> - <%= t 'user.view.no nearby users' %> - <% else %> +

<%= t 'user.view.your friends' %>

-
- <%= render :partial => 'friend_map' %> - - <% @this_user.nearby.each do |nearby| %> - - - - - - <% end %> -
<%= link_to h(nearby.display_name), :controller => 'user', :action => 'view', :display_name => nearby.display_name %> - <% distance = @this_user.distance(nearby) %> - <% if distance < 1 %> - <%= t 'user.view.m away', :count => (distance * 1000).round %> - <% else %> - <%= t 'user.view.km away', :count => distance.round %> - <% end %> - (<%= link_to t('user.view.send message'), :controller => 'message', :action => 'new', :display_name => nearby.display_name %>)
- <% end %> + <% if friends.empty? %> + <%= t 'user.view.no friends' %> + <% else %> + + <%= render :partial => "contact", :collection => friends %> +
<% end %> -<% end %> -
-
-<% if @user and @this_user.id == @user.id %> -<%= link_to t('user.view.my_oauth_details'), :controller => 'oauth_clients', :action => 'index' %> +

<%= t 'user.view.nearby users' %>

+ + <% if nearby.empty? %> + <%= t 'user.view.no nearby users' %> + <% else %> + + <%= render :partial => "contact", :collection => nearby %> +
+ <% end %> <% end %> diff --git a/config/locales/en.yml b/config/locales/en.yml index 47847680f..1e6e49dba 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -1397,6 +1397,7 @@ en: my edits: my edits my traces: my traces my settings: my settings + oauth settings: oauth settings blocks on me: blocks on me blocks by me: blocks by me send message: send message @@ -1411,16 +1412,14 @@ en: created from: "Created from:" description: Description user location: User location - no home location: "No home location has been set." - if set location: "If you set your location, a pretty map and stuff will appear below. You can set your home location on your {{settings_link}} page." + if set location: "If you set your location, a pretty map and stuff will appear here. You can set your home location on your {{settings_link}} page." settings_link_text: settings your friends: Your friends no friends: You have not added any friends yet. km away: "{{count}}km away" m away: "{{count}}m away" - nearby users: "Nearby users:" - no nearby users: "There are no users who admit to mapping nearby yet." - my_oauth_details: "View my OAuth details" + nearby users: "Other nearby users" + no nearby users: "There are no other users who admit to mapping nearby yet." role: administrator: "This user is an administrator" moderator: "This user is a moderator" @@ -1439,9 +1438,10 @@ en: unhide_user: "unhide this user" delete_user: "delete this user" confirm: "Confirm" - friend_map: + map: your location: Your location nearby mapper: "Nearby mapper: [[nearby_user]]" + friend: "Friend: [[friend_user]]" account: title: "Edit account" my settings: My settings diff --git a/public/images/anon_large.png b/public/images/anon_large.png new file mode 100644 index 000000000..761aa6081 Binary files /dev/null and b/public/images/anon_large.png differ diff --git a/public/images/anon_small.png b/public/images/anon_small.png new file mode 100644 index 000000000..0f3e49eb4 Binary files /dev/null and b/public/images/anon_small.png differ diff --git a/public/stylesheets/common.css b/public/stylesheets/common.css index 738a16e62..d2fdea511 100644 --- a/public/stylesheets/common.css +++ b/public/stylesheets/common.css @@ -704,3 +704,13 @@ input[type="submit"] { abbr.geo { border-bottom: none; } + +img.user_image { + width: 100px; + height: 100px; +} + +img.user_thumbnail { + width: 50px; + height: 50px; +}