From a889bf28e4d2eb85582e31418121992dc0dd4888 Mon Sep 17 00:00:00 2001 From: Tobias Klika Date: Sun, 8 May 2011 16:59:06 +0200 Subject: [PATCH] ADDED: Home site with Top Artists/Tracks; CHANGED: Search Bar --- app/controllers/home_controller.rb | 7 + app/helpers/home_helper.rb | 2 + app/views/home/index.html.haml | 47 ++++ config/initializers/lastfm_api_key.rb | 1 + config/routes.rb | 4 +- lib/LastFM/Chart.rb | 12 + lib/LastFM/LastFMRequest.rb | 4 + ...utes-is-a-mashup-of-lastfm-and-youtube.png | Bin 0 -> 31976 bytes public/images/cnt/sign-up.png | Bin 0 -> 13339 bytes public/images/ico/navigate.png | Bin 0 -> 3724 bytes public/index.html | 239 ------------------ public/javascripts/application.js | 35 +++ public/stylesheets/layout.css | 61 ++++- test/functional/home_controller_test.rb | 9 + test/unit/helpers/home_helper_test.rb | 4 + 15 files changed, 180 insertions(+), 245 deletions(-) create mode 100644 app/controllers/home_controller.rb create mode 100644 app/helpers/home_helper.rb create mode 100644 app/views/home/index.html.haml create mode 100644 lib/LastFM/Chart.rb create mode 100644 public/images/cnt/9minutes-is-a-mashup-of-lastfm-and-youtube.png create mode 100644 public/images/cnt/sign-up.png create mode 100644 public/images/ico/navigate.png delete mode 100644 public/index.html create mode 100644 test/functional/home_controller_test.rb create mode 100644 test/unit/helpers/home_helper_test.rb diff --git a/app/controllers/home_controller.rb b/app/controllers/home_controller.rb new file mode 100644 index 0000000..d4948a0 --- /dev/null +++ b/app/controllers/home_controller.rb @@ -0,0 +1,7 @@ +class HomeController < ApplicationController + def index + @tracks = LastFM::Chart.getTopTracks 25 + @artists = LastFM::Chart.getTopArtists 10 + end + +end diff --git a/app/helpers/home_helper.rb b/app/helpers/home_helper.rb new file mode 100644 index 0000000..23de56a --- /dev/null +++ b/app/helpers/home_helper.rb @@ -0,0 +1,2 @@ +module HomeHelper +end diff --git a/app/views/home/index.html.haml b/app/views/home/index.html.haml new file mode 100644 index 0000000..85085a2 --- /dev/null +++ b/app/views/home/index.html.haml @@ -0,0 +1,47 @@ +#home + = image_tag "cnt/9minutes-is-a-mashup-of-lastfm-and-youtube.png", :class=>"right" + = link_to image_tag("cnt/sign-up.png", :class=>"left"), '#' + %br.clean + %br + %br + .right + %h2.headline.small + %span.left Top Tracks + .navigate + %a.left + %a.right + %ul.songs.short{:count=>"5"} + - @tracks.track.each_with_index do |track, i| + %li + = image_tag "ico/play.png", :class=>"play" + = image_tag "ico/add.png", :class=>"add" + %span + %span= (i+1).to_s+"." + = track.name + =raw " by " + = link_to trimString(track.artist.name, 50), :controller=>"artists",:action=>"show",:id=>CGI.escape(track.artist.name) + .left + %h2.headline.small + %span.left Top Artists + .navigate + %a.left + %a.right + %ul.artists.big{:count=>"2"} + - @artists.artist.each do |artist| + %li + = link_to :controller=>:artists,:action=>:show,:id=>CGI.escape(artist.name) do + = image_tag validate_img_url(artist.image, "artist", :extralarge) + %p + = trimString(artist.name, 30) + %br>< + =raw "#{artist.listeners} Listeners, #{artist.playcount} Plays" + %br.clean + .bottom + %hr + %p.left + =raw "©2011 by 9minutes" + = link_to "Home", "#" + = link_to "Terms of Service", "#" + = link_to "Contact", "#" + = link_to "About", "#" + \ No newline at end of file diff --git a/config/initializers/lastfm_api_key.rb b/config/initializers/lastfm_api_key.rb index 5c268fe..8dd9b36 100644 --- a/config/initializers/lastfm_api_key.rb +++ b/config/initializers/lastfm_api_key.rb @@ -2,5 +2,6 @@ require 'LastFM/LastFMRequest' require 'LastFM/Artist' require 'LastFM/Album' require 'LastFM/Track' +require 'LastFM/Chart' LastFM::LastFMRequest::api_key = '4c32e360f68553ec8fdca3711456b4f9' \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 5ba63ff..5f85ada 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -1,6 +1,8 @@ Nineminutes::Application.routes.draw do + resources :artists, :constraints => { :id => /.*/ } resources :search + resources :home # The priority is based upon order of creation: # first created -> highest priority. @@ -50,7 +52,7 @@ Nineminutes::Application.routes.draw do # You can have the root of your site routed with "root" # just remember to delete public/index.html. - # root :to => "welcome#index" + root :to => "home#index" # See how all your routes lay out with "rake routes" diff --git a/lib/LastFM/Chart.rb b/lib/LastFM/Chart.rb new file mode 100644 index 0000000..aaff786 --- /dev/null +++ b/lib/LastFM/Chart.rb @@ -0,0 +1,12 @@ +module LastFM + class Chart < LastFMRequest + def self.getTopArtists limit = nil, page = nil + chart_request "getTopArtists", "artists", limit, page + end + + def self.getTopTracks limit = nil, page = nil + chart_request "getTopTracks", "tracks", limit, page + end + end + +end \ No newline at end of file diff --git a/lib/LastFM/LastFMRequest.rb b/lib/LastFM/LastFMRequest.rb index 2e34199..3a1451e 100644 --- a/lib/LastFM/LastFMRequest.rb +++ b/lib/LastFM/LastFMRequest.rb @@ -45,6 +45,10 @@ module LastFM def self.track_request method, node, q, artist = nil, limit = nil, page = nil prepare_result method, node, get('/', :query => { :method => "track.#{method.to_s}", :track => q, :artist => artist, :limit => limit, :page => page }) end + + def self.chart_request method, node, limit = nil, page = nil + prepare_result method, node, get('/', :query => { :method => "chart.#{method.to_s}", :limit => limit, :page => page }) + end private diff --git a/public/images/cnt/9minutes-is-a-mashup-of-lastfm-and-youtube.png b/public/images/cnt/9minutes-is-a-mashup-of-lastfm-and-youtube.png new file mode 100644 index 0000000000000000000000000000000000000000..c2e753f6efbca8d12ad5d6165a8d3671a6613a76 GIT binary patch literal 31976 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 literal 0 HcmV?d00001 diff --git a/public/images/cnt/sign-up.png b/public/images/cnt/sign-up.png new file mode 100644 index 0000000000000000000000000000000000000000..536734f94474be438f959ff72009985f66a7aa88 GIT binary patch literal 13339 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 - - - Ruby on Rails: Welcome aboard - - - - -
- - -
- - - - -
-

Getting started

-

Here’s how to get rolling:

- -
    -
  1. -

    Use rails generate to create your models and controllers

    -

    To see all available options, run it without parameters.

    -
  2. - -
  3. -

    Set up a default route and remove or rename this file

    -

    Routes are set up in config/routes.rb.

    -
  4. - -
  5. -

    Create your database

    -

    Run rake db:migrate to create your database. If you're not using SQLite (the default), edit config/database.yml with your username and password.

    -
  6. -
-
-
- - -
- - diff --git a/public/javascripts/application.js b/public/javascripts/application.js index 3cb2f3d..832152a 100644 --- a/public/javascripts/application.js +++ b/public/javascripts/application.js @@ -10,6 +10,9 @@ $(document).ready(function(){ initPictureOverlay(); initArtistDescription(); + + initTopMusic(); + navigateTopMusic(); }); $(window).load(function() { @@ -48,6 +51,38 @@ function initPictureOverlay(){ } +function initTopMusic(){ + $('#home .songs li').each(function(){ + if($(this).parent().children().index(this)>=5) $(this).hide(); + }); + $('#home .artists li').each(function(){ + if($(this).parent().children().index(this)>=2) $(this).hide(); + }); +} + +function navigateTopMusic(){ + $('#home .navigate a').live('click', function(){ + $selector = $(this).closest("h2").next("ul"); + $id = $selector.children("li:visible").first(); + $start = $id.parent().children().index($id); + $count = parseInt($selector.attr("count")); + $size = $selector.children().size(); + + if($(this).hasClass("left")) { + $start -= $count; + if($start < 0) return; + } + else { + $start += $count; + if($start >= $size) return; + } + + $selector.children().hide(); + for($i=$start;$i<$start+$count;$i++) + $selector.children("li:eq("+$i+")").show(); + }); +} + function ajj(){ /* $('#myajax').load('/artists', function() { diff --git a/public/stylesheets/layout.css b/public/stylesheets/layout.css index b10164b..d556a53 100644 --- a/public/stylesheets/layout.css +++ b/public/stylesheets/layout.css @@ -66,13 +66,13 @@ a { text-decoration: none; color: #7d8791; } margin: 0 auto; } #head { height: 140px; } -#head h1 { padding-top: 60px; float: left; } +#head h1 { padding-top: 55px; float: left; } #search_form { position: relative; } #search_form .wrap { width: 400px; /* 300 + 28*/ height: 38px; - margin-top: 60px; + margin-top: 50px; border: 1px solid #dfe4e8; border-radius: 7px; -moz-border-radius: 7px; @@ -108,7 +108,7 @@ a { text-decoration: none; color: #7d8791; } #search_form .selection { position: absolute; - right: 50px; top: 65px; + right: 50px; top: 55px; font-family: AauxNextBold, "Segoe UI", Arial, sans-serif; font-size: 14px; color: #868f98; @@ -119,6 +119,7 @@ a { text-decoration: none; color: #7d8791; } width: 65px; height: 29px; line-height: 29px; display: block; + opacity: 0.85; } #search_form .selection > span { text-transform: uppercase;} #search_form .box @@ -182,8 +183,10 @@ a { text-decoration: none; color: #7d8791; } .headline { - color: #7d8791; + color: #363d3f; font-size: 32px; + overflow: hidden; + vertical-align: middle; } .headline, .headline span { @@ -539,4 +542,52 @@ div[wheel] > div { display: none; opacity: 0.0; position: relative; } } .overlay.album .mid li span { color: White; font-family: AauxNextMedium, "Segoe UI", Arial, sans-serif;} .overlay.album .mid li:first-child { border-top: 0; } -.overlay.album .mid li:last-child { border-bottom: 0; } \ No newline at end of file +.overlay.album .mid li:last-child { border-bottom: 0; } + + + + + + + + +.navigate +{ + width: 44px; + height: 20px; + float: left; + margin-top: 5px; + padding-left: 10px; +} +.navigate .left, .navigate .right +{ + width: 20px; + height: 20px; + background: url('../images/ico/navigate.png') 0 0; + cursor: pointer; +} +.navigate .right { background-position: -24px 0;} +.blocked +{ + opacity: 0.5; + cursor: default!important; +} + +#home .bottom hr +{ + margin-top: 40px; + background: White; + height: 1px; + border: 0; +} +#home .bottom { font-size: 12px; } +#home .bottom a +{ + margin-left: 10px; + color: #cbd3d9; +} +#home .bottom a:first-child { margin-left: 20px;} +#home .bottom a:hover +{ + color: #40474c; +} \ No newline at end of file diff --git a/test/functional/home_controller_test.rb b/test/functional/home_controller_test.rb new file mode 100644 index 0000000..0d9bb47 --- /dev/null +++ b/test/functional/home_controller_test.rb @@ -0,0 +1,9 @@ +require 'test_helper' + +class HomeControllerTest < ActionController::TestCase + test "should get index" do + get :index + assert_response :success + end + +end diff --git a/test/unit/helpers/home_helper_test.rb b/test/unit/helpers/home_helper_test.rb new file mode 100644 index 0000000..4740a18 --- /dev/null +++ b/test/unit/helpers/home_helper_test.rb @@ -0,0 +1,4 @@ +require 'test_helper' + +class HomeHelperTest < ActionView::TestCase +end