public
Description: The kick ass (non-commercial) home for musicians and their music
Homepage: http://alonetone.com
Clone URL: git://github.com/sudara/alonetone.git
big commit. GEO stuff. tweaks up the wazoo. popular user tracks on user 
home. wow.
sudara (author)
Tue May 27 17:55:15 -0700 2008
commit  7daba51c97e6bec53f57783e3962e4a4031fc401
tree    f65cab271da9f37f557a65305a21dd01d1fafaa9
parent  9adfa30738a75c021a5e6b7404cce2662f5ac0e2
...
48
49
50
 
51
52
53
...
48
49
50
51
52
53
54
0
@@ -48,6 +48,7 @@ class PlaylistsController < ApplicationController
0
   # GET /playlists/1.xml
0
   def show
0
     @page_title = "\"#{@playlist.title}\" by #{@user.name}"
0
+ @single = true
0
     respond_to do |format|
0
       format.html # show.html.erb
0
       format.xml
...
20
21
22
 
23
24
25
26
 
27
28
29
...
20
21
22
23
24
25
26
 
27
28
29
30
0
@@ -20,10 +20,11 @@ class SessionsController < ApplicationController
0
   end
0
   
0
   def destroy
0
+ previous_page = session[:return_to]
0
     reset_session
0
     cookies.delete :auth_token
0
     flash[:ok] = "Goodbye, see you soon..."
0
- redirect_to :back
0
+ redirect_to (previous_page || root_path)
0
   end
0
 
0
   protected
...
11
12
13
14
 
15
16
17
...
23
24
25
 
 
 
26
27
28
...
37
38
39
40
 
 
 
41
42
 
43
44
 
45
46
47
...
11
12
13
 
14
15
16
17
...
23
24
25
26
27
28
29
30
31
...
40
41
42
 
43
44
45
46
 
47
48
 
49
50
51
52
0
@@ -11,7 +11,7 @@ class UsersController < ApplicationController
0
   def index
0
     @page_title = "Musicians and Listeners: #{params[:sort] ? params[:sort].titleize : ''}"
0
     @tab = 'browse'
0
- @users = User.paginate_by_params(params)
0
+ @users = User.paginate_by_params(params) unless params[:sort] == 'map'
0
     flash[:info] = "Want to see your pretty face show up here?<br/> Edit <a href='#{edit_user_path(current_user)}'>your profile</a>" unless current_user = :false || current_user.has_pic?
0
     respond_to do |format|
0
       format.html do
0
@@ -23,6 +23,9 @@ class UsersController < ApplicationController
0
         @users = User.search(params[:q], :limit => 25)
0
         render :xml => @users.to_xml
0
       end
0
+ format.rss do
0
+ @users = User.geocoded.find(:all, :limit => 500)
0
+ end
0
       format.js do
0
           render :partial => 'users.html.erb'
0
       end
0
@@ -37,11 +40,13 @@ class UsersController < ApplicationController
0
       format.html do
0
         @page_title = @user.name + "'s latest music and playlists"
0
         @tab = 'your_stuff' if current_user == @user
0
- @assets = @user.assets.find(:all, :limit => 5)
0
+
0
+ @popular_tracks = @user.assets.find(:all, :limit => 4, :order => 'assets.listens_count DESC')
0
+ @assets = @user.assets.find(:all, :limit => 4)
0
         @playlists = @user.playlists.public.find(:all)
0
- @listens = @user.listens.find(:all, :limit =>5)
0
+ @listens = @user.listens.find(:all, :limit =>4)
0
         @track_plays = @user.track_plays.from_user.find(:all, :limit =>10)
0
- @favorites = Track.favorites.find_all_by_user_id(@user.id, :limit => 5)
0
+ @favorites = Track.favorites.find_all_by_user_id(@user.id, :limit => 4)
0
         
0
         @comments = @user.comments.public.find(:all, :limit => 10) unless display_private_comments_of?(@user)
0
         @comments = @user.comments.include_private.find(:all, :limit => 10) if display_private_comments_of?(@user)
...
1
2
3
4
 
5
6
7
...
34
35
36
37
38
39
40
41
 
 
42
43
44
...
1
2
3
 
4
5
6
7
...
34
35
36
 
 
 
 
 
37
38
39
40
41
0
@@ -1,7 +1,7 @@
0
 module UsersHelper
0
   
0
   def website_for(user)
0
- link_to "#{user.name}'s website", ('http://'+h(user.website))
0
+ "#{user.name}'s website " + (link_to "#{user.website}", ('http://'+h(user.website)))
0
   end
0
   
0
   def myspace_for(user)
0
@@ -34,11 +34,8 @@ module UsersHelper
0
     logged_in? && current_user.present?(:settings) && current_user.settings.present?('hide_notice') && current_user.settings['hide_notice'].present?(notice)
0
   end
0
   
0
- def setting(symbol_or_string)
0
- if logged_in? && current_user.settings
0
- return current_user.settings[symbol_or_string.to_sym]
0
- end
0
- false
0
+ def setting(symbol_or_string, user=current_user)
0
+ logged_in? && user.settings && user.settings[symbol_or_string.to_sym]
0
   end
0
   
0
   def favorite_toggle(asset)
...
1
2
3
4
 
 
5
6
7
...
1
2
 
 
3
4
5
6
7
0
@@ -1,7 +1,7 @@
0
 class Comment < ActiveRecord::Base
0
   
0
- named_scope :public, {:conditions => {:spam => false, :private => :false},:order => 'created_at DESC'}
0
- named_scope :include_private, {:conditions =>{:spam => false}, :order => 'created_at DESC'}
0
+ named_scope :public, {:conditions => {:spam => false, :private => :false},:order => 'created_at DESC', :include => [:commenter => :pic]}
0
+ named_scope :include_private, {:conditions =>{:spam => false}, :order => 'created_at DESC', :include => [:commenter => :pic]}
0
   
0
   belongs_to :commentable, :polymorphic => true
0
 
...
43
44
45
46
 
47
48
49
...
43
44
45
 
46
47
48
49
0
@@ -43,7 +43,7 @@ class Playlist < ActiveRecord::Base
0
     is_mix? ? 'mix' : 'album'
0
   end
0
   
0
- def cover(size)
0
+ def cover(size=nil)
0
     return dummy_pic(size) unless self.pic && !self.pic.new_record?
0
     self.pic.public_filename(size)
0
   end
...
6
7
8
9
 
 
 
10
11
12
...
18
19
20
 
 
 
21
22
23
24
25
26
27
 
28
29
30
...
90
91
92
93
 
94
95
96
...
155
156
157
158
 
159
160
161
...
167
168
169
170
 
171
172
173
...
252
253
254
 
 
 
 
 
255
256
257
...
6
7
8
 
9
10
11
12
13
14
...
20
21
22
23
24
25
26
27
28
29
30
31
 
32
33
34
35
...
95
96
97
 
98
99
100
101
...
160
161
162
 
163
164
165
166
...
172
173
174
 
175
176
177
178
...
257
258
259
260
261
262
263
264
265
266
267
0
@@ -6,7 +6,9 @@ class User < ActiveRecord::Base
0
   
0
   named_scope :musicians, {:conditions => ['assets_count > ?',0], :order => 'assets_count DESC', :include => :pic}
0
   named_scope :activated, {:conditions => {:activation_code => nil}, :order => 'created_at DESC', :include => :pic}
0
- named_scope :recently_seen, {:order => 'last_seen_at DESC', :include => :pic}
0
+ named_scope :recently_seen, {:order => 'last_seen_at DESC', :include => :pic}
0
+ named_scope :with_location, {:conditions => ['users.country != ""'], :order => 'last_seen_at DESC', :include => :pic}
0
+ named_scope :geocoded, {:conditions => ['users.lat != ""'], :order => 'last_seen_at DESC', :include => :pic}
0
   
0
   # Can create music
0
   has_many :assets, :dependent => :destroy, :order => 'created_at DESC'
0
@@ -18,13 +20,16 @@ class User < ActiveRecord::Base
0
   belongs_to :facebook_account
0
   has_many :tracks
0
   
0
+ acts_as_mappable
0
+ before_validation :geocode_address
0
+
0
   has_many :source_files
0
   
0
   # Can listen to music, and have that tracked
0
   has_many :listens, :foreign_key => 'listener_id', :include => :asset, :order => 'listens.created_at DESC'
0
     
0
   # Can have their music listened to
0
- has_many :track_plays, :foreign_key => 'track_owner_id', :class_name => 'Listen', :include => :asset, :order => 'listens.created_at DESC'
0
+ has_many :track_plays, :foreign_key => 'track_owner_id', :class_name => 'Listen', :include => [:asset], :order => 'listens.created_at DESC'
0
   
0
   # And therefore have listeners
0
   has_many :listeners, :through => :track_plays, :uniq => true
0
@@ -90,7 +95,7 @@ class User < ActiveRecord::Base
0
   end
0
   
0
   def favorites
0
- self.playlists.favorites.first
0
+ self.playlists.favorites.find(:first)
0
   end
0
   
0
   def has_pic?
0
@@ -155,7 +160,7 @@ class User < ActiveRecord::Base
0
     when 'dedicated_listeners'
0
       @entries = WillPaginate::Collection.create((params[:page] || 1), 15) do |pager|
0
         # returns an array, like so: [User, number_of_listens]
0
- result = Listen.count(:all, :include => :listener, :order => 'count_all DESC', :conditions => 'listener_id != ""', :group => :listener, :limit => pager.per_page, :offset => pager.offset)
0
+ result = Listen.count(:all, :order => 'count_all DESC', :conditions => 'listener_id != ""', :group => :listener, :limit => pager.per_page, :offset => pager.offset)
0
 
0
         # inject the result array into the paginated collection:
0
         pager.replace(result)
0
@@ -167,7 +172,7 @@ class User < ActiveRecord::Base
0
       end
0
     when 'last_uploaded'
0
      @entries = WillPaginate::Collection.create((params[:page] || 1), 15) do |pager|
0
- distinct_users = Asset.find(:all, :select => 'DISTINCT user_id', :order => 'assets.created_at DESC', :limit => pager.per_page, :offset => pager.offset)
0
+ distinct_users = Asset.find(:all, :select => 'DISTINCT user_id', :include => [:user => :pic], :order => 'assets.created_at DESC', :limit => pager.per_page, :offset => pager.offset)
0
               
0
         pager.replace(distinct_users.collect(&:user)) # only send back the users
0
         
0
@@ -252,6 +257,11 @@ class User < ActiveRecord::Base
0
   
0
   alias_method :reset_token!, :reset_login_key!
0
   
0
+ def geocode_address
0
+ return unless city && country
0
+ geo=GeoKit::Geocoders::MultiGeocoder.geocode([city, country].compact.join(', '))
0
+ self.lat, self.lng = geo.lat,geo.lng if geo.success
0
+ end
0
   protected
0
   
0
   def make_first_user_admin
...
2
3
4
 
 
 
 
 
 
 
 
 
5
6
7
8
...
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
0
@@ -2,6 +2,15 @@
0
   %h2.box.static
0
     How do I?...
0
   .static_content
0
+ We're just starting to get a series of tutorials going.
0
+ %br
0
+ %br
0
+ Having trouble figuring something out? Let us know, so we can make this site
0
+ awesome and easier to use for everyone. You are not alone!
0
+ %br
0
+ %br
0
+ Click the "Say Something!" bubble in the very bottom right and let us know!
0
+
0
     %ul
0
       %li
0
         = link_to 'Get my songs on itunes?', :action => 'itunes'
0
\ No newline at end of file
...
25
26
27
 
 
 
28
 
29
30
31
...
25
26
27
28
29
30
31
32
33
34
35
0
@@ -25,7 +25,11 @@
0
 
0
       <div class="info">
0
      <div class="cover">
0
+ <% if @single %>
0
+ <%= link_to(image_tag('jewel-case-125.png'), @playlist.cover, :class => 'jewel_case_125', :rel => 'facebox') %>
0
+ <% else %>
0
      <%= link_to(image_tag('jewel-case-125.png'), edit_or_show(@user.login, @playlist), :class => 'jewel_case_125') %>
0
+ <% end %>
0
               <%= image_tag(@playlist.cover(:large), :class => 'cover_125') %>
0
         </div>
0
         
...
1
 
2
3
4
...
 
1
2
3
4
0
@@ -1,4 +1,4 @@
0
-<div class="box">
0
+<div id="user_comments" class="box">
0
   <h2 class="box">Latest Comments</h2>
0
   <%= link_to 'view all', comments_path(@user.login), :class => 'view_all' %>
0
   <%= render :partial => 'shared/comment', :collection => comments %>
...
6
7
8
9
 
10
11
12
...
6
7
8
 
9
10
11
12
0
@@ -6,7 +6,7 @@
0
 
0
   <div id="footer_right">
0
     <div id="bug_report">
0
- We LOVE your feedback: <%= link_to "Say something!", "#", :id => 'creative', :class => 'feedback' %> <%= link_to(image_tag('icons/comment.png'), '#', :id => 'footer_comment_icon', :class => 'feedback') %>
0
+ We LOVE <%= link_to 'your feedback', user_reports_path%>. <%= link_to "Say something!", "#", :id => 'creative', :class => 'feedback' %> <%= link_to(image_tag('icons/comment.png'), '#', :id => 'footer_comment_icon', :class => 'feedback') %>
0
     </div>
0
   </div>
0
 
...
14
15
16
17
 
18
19
20
 
21
22
23
...
14
15
16
 
17
18
19
 
20
21
22
23
0
@@ -14,10 +14,10 @@
0
      <%= user_nav_item "Latest", user_home_path(@user), :title => "#{h @user.name}'s latest stuff on alonetone" %>
0
      <%= user_nav_item "Tracks", user_tracks_path(@user), :title => "#{h @user.name}'s uploaded mp3s on alonetone" if @user.assets_count > 0 %>
0
      <%= user_nav_item "Albums & Playlists", user_playlists_path(@user), :title => "#{h @user.name}'s albums and playlists on alonetone" if @user.has_public_playlists? || (authorized_as(@user) && @user.playlists.include_private.count > 0) %>
0
- <%= user_nav_item "Favorites", user_playlist_path(@user, @user.favorites) if @user.favorites %>
0
+ <%= user_nav_item "Favorites", user_playlist_path(@user, @user.favorites),:title => "#{h @user.name}'s favorite tracks on alonetone" if @user.favorites %>
0
      <%= user_nav_item "Profile", profile_path(@user), :title => "#{h @user.name}'s profile on alonetone" if @user.bio %>
0
   
0
- <%= user_nav_item "Email", "mailto://#{@user.email}",:added_class => "contact" if admin? %>
0
+ <%= user_nav_item "Email", "mailto:#{@user.email}",:added_class => "contact" if admin? %>
0
       <%= user_nav_item "Myspace", "http://myspace.com/#{@user.myspace}",:added_class => "contact" if @user.present?(:myspace)%>
0
       <%= user_nav_item "iTunes", "http://#{@user.itunes}",:added_class => "contact" if @user.present?(:itunes) %>
0
       <%= user_nav_item "Sudo", sudo_user_path(@user),:added_class => "contact" if (admin? || @sudo)%>
...
18
19
20
21
22
 
 
 
 
23
24
25
...
18
19
20
 
 
21
22
23
24
25
26
27
0
@@ -18,8 +18,10 @@
0
   <div id="recently_uploaded">
0
      
0
     <% @users.each do |user| %>
0
- <div class="alonetoner">
0
-
0
+ <% if user.try(:first) %>
0
+ <% user = user.first %>
0
+ <% end %>
0
+ <div class="alonetoner">
0
          <%= user_image_link(user) %><br/>
0
          <%= link_to h(user.name), user_home_path(user) %>
0
         </div>
...
13
14
15
 
 
16
17
 
18
19
20
21
22
 
 
 
23
 
24
25
26
...
13
14
15
16
17
18
 
19
20
21
22
23
 
24
25
26
27
28
29
30
31
0
@@ -13,14 +13,19 @@
0
        <%= user_nav_item "monster uploaders", {:action => 'index', :sort => 'monster_uploaders'} %>
0
        <%= user_nav_item "dedicated listeners", {:action => 'index', :sort => 'dedicated_listeners'}%>
0
        <%= user_nav_item "recently joined", {:action => 'index', :sort => 'recently_joined'} %>
0
+ <%= user_nav_item "on the map!", {:action => 'index', :sort => 'map'} %>
0
+
0
       </ul>
0
- <%= will_paginate @users %>
0
+ <%= will_paginate @users if @users%>
0
     </div>
0
   </div>
0
   
0
   <div id="recently_uploaded">
0
-
0
+ <% if params[:sort] == 'map'%>
0
+ <%= render :partial => 'map' %>
0
+ <% else %>
0
     <%= render :partial => 'shared/user', :collection => @users %>
0
+ <% end %>
0
     <div class="clear"> </div>
0
   </div>
0
 
...
64
65
66
67
 
68
69
 
70
71
72
...
64
65
66
 
67
68
 
69
70
71
72
0
@@ -64,9 +64,9 @@
0
     </div>
0
     
0
     <div class="static_content">
0
- Display most popular tracks (in place of latest tracks)<br/>
0
+ Display most popular tracks on your home page?<br/>
0
       <%= select_tag('user[settings][most_popular]',
0
- options_for_select([['nope, stick with the latest','false'], ['oh, pretty please!','true']],
0
+ options_for_select([['nope, stick with just the latest','false'], ['oh, pretty please!','true']],
0
            setting(:most_popular))) %>
0
     </div>
0
     
...
1
 
...
 
1
0
@@ -1 +1 @@
0
-<%= render :partial => 'users'%>
0
+<%= render :partial => 'users' %>
...
6
7
8
9
 
10
11
12
13
14
15
 
 
16
17
 
18
19
20
21
22
 
 
 
 
23
24
25
26
27
28
29
...
6
7
8
 
9
10
11
12
13
14
 
15
16
17
 
18
19
 
 
 
 
20
21
22
23
24
25
26
 
27
28
29
0
@@ -6,24 +6,24 @@
0
     <%= link_to "change playlist order", sort_user_playlists_path(@user), :id => 'sort_playlist_button', :class => 'sort button' if authorized? && @user.playlists.public.size > 1 %>
0
     </div>
0
     <% if @user.has_public_playlists? %>
0
- <h2>Latest Playlists by <%=@user.name%></h2>
0
+ <h2 id="user_latest_playlists">Latest Playlists by <%=@user.name%></h2>
0
      <%= render :partial => 'shared/carousel' %>
0
       <div class="clear"> </div>
0
     <% end %>
0
   
0
     <% content_for :left do %>
0
- <%= render :partial => 'latest' if @user.assets_count > 0 %>
0
+ <%= render :partial => 'popular' if @popular_tracks && setting('most_popular', @user)%>
0
+ <%= render :partial => 'latest' if @user.assets_count > 0 %>
0
   
0
- <%= render :partial => 'favorites' if present?(@favorites) %>
0
+ <%= render :partial => 'favorites' if present?(@favorites) %>
0
   
0
- <%= render :partial => 'listens' if @listens.size > 0 %>
0
- <%= image_tag @user.track_plays_graph if authorized? %>
0
- <%= render :partial => 'track_plays' if authorized? && @user.listens_count > 0 %>
0
- <% end %>
0
+ <%= render :partial => 'listens' if @listens.size > 0 %>
0
+ <%= image_tag @user.track_plays_graph if authorized? %>
0
+ <%= render :partial => 'track_plays' if authorized? && @user.listens_count > 0 %>
0
+ <% end %>
0
   
0
    <% content_for :right do %>
0
    <%= render :partial => 'shared/comments' if @comments.size > 0 %>
0
-
0
    <% end %>  
0
     
0
     
...
36
37
38
39
40
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
...
36
37
38
 
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
0
@@ -36,4 +36,28 @@ WillPaginate::ViewHelpers.pagination_options[:inner_window] = 2
0
 WillPaginate::ViewHelpers.pagination_options[:outer_window] = 0
0
 
0
 # Take advantage of rails 2.1
0
-ActiveRecord::Base.partial_updates = true
0
\ No newline at end of file
0
+ActiveRecord::Base.partial_updates = true
0
+
0
+
0
+# These defaults are used in GeoKit::Mappable.distance_to and in acts_as_mappable
0
+GeoKit::default_units = :miles
0
+GeoKit::default_formula = :sphere
0
+
0
+# This is the timeout value in seconds to be used for calls to the geocoder web
0
+# services. For no timeout at all, comment out the setting. The timeout unit
0
+# is in seconds.
0
+GeoKit::Geocoders::timeout = 2
0
+
0
+# This is your Google Maps geocoder key.
0
+# See http://www.google.com/apis/maps/signup.html
0
+# and http://www.google.com/apis/maps/documentation/#Geocoding_Examples
0
+GeoKit::Geocoders::google = RAILS_ENV == 'development' ? 'ABQIAAAAnfs7bKE82qgb3Zc2YyS-oBT2yXp_ZAY8_ufC3CFXhHIE1NvwkxSySz_REpPq-4WZA27OwgbtyR3VcA' : 'ABQIAAAAb7vQ1d8XHrxuF5AJr8c-oxTbnWe9oX1zcTcDyLcGskh9JPynnBQ3ngxc6atkyQFihW5nLKpXFQ58gQ'
0
+
0
+
0
+# This is the order in which the geocoders are called in a failover scenario
0
+# If you only want to use a single geocoder, put a single symbol in the array.
0
+# Valid symbols are :google, :yahoo, :us, and :ca.
0
+# Be aware that there are Terms of Use restrictions on how you can use the
0
+# various geocoders. Make sure you read up on relevant Terms of Use for each
0
+# geocoder you are going to use.
0
+GeoKit::Geocoders::provider_order = [:google]
...
46
47
48
 
 
 
 
 
 
 
 
49
50
...
46
47
48
49
50
51
52
53
54
55
56
57
58
0
@@ -46,4 +46,12 @@ class Object
0
       end
0
     end
0
   end
0
+end
0
+
0
+class Array
0
+ # If +number+ is greater than the size of the array, the method
0
+ # will simply return the array itself sorted randomly
0
+ def randomly_pick(number)
0
+ sort_by{ rand }.slice(0...number)
0
+ end
0
 end
0
\ No newline at end of file
...
380
381
382
 
 
 
 
 
 
 
 
 
 
 
 
383
...
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
0
@@ -380,4 +380,16 @@ a.add_to_favorites, a.favorited
0
     a
0
       img
0
         :margin-bottom 5px
0
+
0
+#map
0
+ :margin-top -40px
0
+ :background transparent url(../images/facebox/loading.gif) no-repeat center center
0
+ :background-color = !playlist_box_silver
0
+ p
0
+ :color = !text_color
0
+ #iwsw
0
+ img
0
+ :float left
0
+ :padding-right 10px
0
+ :padding-bottom 10px
0
     
...
93
94
95
96
97
98
99
 
 
 
100
101
102
...
104
105
106
107
 
108
109
110
111
112
113
 
114
115
116
...
118
119
120
121
 
122
123
124
...
93
94
95
 
 
 
 
96
97
98
99
100
101
...
103
104
105
 
106
107
108
109
110
111
 
112
113
114
115
...
117
118
119
 
120
121
122
123
0
@@ -93,10 +93,9 @@ h2.box_title
0
   :text-shadow rgba(255,246,211,0.55) 2px 2px 1px
0
 
0
 // iconified headers
0
-#latest_playlists
0
- h2
0
- :background url(../images/icons/playlists.png) no-repeat left center
0
- :padding-left 35px
0
+#latest_playlists h2, h2#user_latest_playlists
0
+ :background url(../images/icons/playlists.png) no-repeat left center
0
+ :padding-left 35px
0
     
0
 #user-index #static_header h1.static
0
   :background-image url(../images/icons/user.png)
0
@@ -104,13 +103,13 @@ h2.box_title
0
   :background-position -4px -3px
0
   :padding-left 27px
0
   
0
-h2#latest_uploaded
0
+h2#latest_uploaded, #user_latest h2
0
   :background-image url(../images/icons/latest.png)
0
   :background-repeat no-repeat
0
   :background-position 15px 10px
0
   :text-indent 51px
0
   
0
-h2#kicking_ass
0
+h2#kicking_ass, #user_popular h2
0
   :background-image url(../images/icons/stars.png)
0
   :background-repeat no-repeat
0
   :background-position 15px 10px
0
@@ -118,7 +117,7 @@ h2#kicking_ass
0
   
0
 h2#recently_favorited
0
   
0
-h2#latest_comments
0
+h2#latest_comments, #user_comments h2
0
   :background-image url(../images/icons/comment.png)
0
   :background-repeat no-repeat
0
   :background-position 15px 10px

Comments

    No one has commented yet.