diff --git a/doc/app/ApplicationController.html b/doc/app/ApplicationController.html new file mode 100644 index 0000000..b73cfb6 --- /dev/null +++ b/doc/app/ApplicationController.html @@ -0,0 +1,198 @@ + + + + + + + Class: ApplicationController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

ApplicationController

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/ApplicationHelper.html b/doc/app/ApplicationHelper.html new file mode 100644 index 0000000..05cf608 --- /dev/null +++ b/doc/app/ApplicationHelper.html @@ -0,0 +1,362 @@ + + + + + + + Module: ApplicationHelper + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + + + + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

ApplicationHelper

+ +
+

+encoding: UTF-8 +

+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + camelCaseString(phrase) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/helpers/application_helper.rb, line 26
+26:   def camelCaseString phrase

+27:   phrase.gsub!(/^[a-z]|\s+[a-z]/) { |a| a.upcase }

+28:   return phrase

+29: end
+
+ +
+ + + + +
+ + +
+ + +
+ + get_album_info(album, artist) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/helpers/application_helper.rb, line 17
+17:   def get_album_info album, artist

+18:     @result = LastFM::Album.getInfo(album, artist)

+19:     @result.album

+20:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + trimString(str, length) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/helpers/application_helper.rb, line 22
+22:   def trimString str, length

+23:     truncate str, :length => length.to_i, :omission => "…"

+24:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + validate_img_url(image, type, size) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/helpers/application_helper.rb, line 4
+ 4:   def validate_img_url image, type, size

+ 5:     @attr = (type=="gallery") ? "name" : "size"

+ 6:     image.each do |img|

+ 7:       if img[@attr] == size.to_s

+ 8:         if img["#text"].blank?

+ 9:           return "/images/placeholder/#{type.to_s}.png"

+10:         end

+11:         return img["#text"]

+12:       end

+13:     end

+14:         

+15:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/Artist.html b/doc/app/Artist.html new file mode 100644 index 0000000..bd3d63f --- /dev/null +++ b/doc/app/Artist.html @@ -0,0 +1,198 @@ + + + + + + + Class: Artist + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+ +
+
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

Artist

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/ArtistsController.html b/doc/app/ArtistsController.html new file mode 100644 index 0000000..c0cdccb --- /dev/null +++ b/doc/app/ArtistsController.html @@ -0,0 +1,453 @@ + + + + + + + Class: ArtistsController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

ArtistsController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + album_info() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/artists_controller.rb, line 46
+46:   def album_info

+47:     @album = LastFM::Album.getInfo CGI.unescape(params[:album]), CGI.unescape(params[:artist])

+48:     LastFM::Request.run_queue!

+49: 

+50:     render :partial=>"album_info", :locals=>{:album=>@album}

+51:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + index() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/artists_controller.rb, line 25
+25:   def index

+26:     redirect_to :root

+27:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + more_albums() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/artists_controller.rb, line 38
+38:   def more_albums

+39:     prepare params

+40:     @albums = LastFM::Artist.getTopAlbums params[:q], @@limit[:albums], (params[:size] / @@limit[:albums] + 1)

+41:     LastFM::Request.run_queue!

+42: 

+43:     render :partial=>"more_albums", :locals=>{:albums=>@albums}

+44:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + more_tracks() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/artists_controller.rb, line 30
+30:   def more_tracks

+31:     prepare params

+32:     @tracks = LastFM::Artist.getTopTracks params[:q], @@limit[:tracks], (params[:size] / @@limit[:tracks] + 1)

+33:     LastFM::Request.run_queue!

+34:    

+35:     render :partial=>"more_tracks", :locals=>{:tracks=>@tracks}

+36:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + prepare(params) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/artists_controller.rb, line 53
+53:   def prepare params

+54:     params[:q] = CGI.unescape params[:q]

+55:     params[:size] = params[:size].to_i

+56:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + show() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/artists_controller.rb, line 7
+ 7:   def show

+ 8:     artist = CGI.unescape params[:artist]

+ 9:     

+10:     @artist = LastFM::Artist.getInfo artist

+11:     @tracks = LastFM::Artist.getTopTracks artist, @@limit[:tracks]

+12:     @albums = LastFM::Artist.getTopAlbums artist, @@limit[:albums]

+13:     @related= LastFM::Artist.getSimilar artist, @@limit[:similar]

+14: 

+15:     LastFM::Request.run_queue!

+16:     

+17:     render :partial=>"show", :locals=>{

+18:       :artist=>@artist,

+19:       :tracks=>@tracks,

+20:       :albums=>@albums,

+21:       :related=>@related

+22:     }

+23:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/ChartsController.html b/doc/app/ChartsController.html new file mode 100644 index 0000000..ff80042 --- /dev/null +++ b/doc/app/ChartsController.html @@ -0,0 +1,291 @@ + + + + + + + Class: ChartsController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

ChartsController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + index() + click to toggle source + +
+ +
+ + + + + +
+
+   # File app/controllers/charts_controller.rb, line 3
+3:   def index

+4:     @charts = LastFM::Chart.getTopArtists 20

+5:     LastFM::Request.run_queue!

+6: 

+7:     render :partial=>"index"

+8:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + more() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/charts_controller.rb, line 11
+11:   def more

+12:     params[:size] = params[:size].to_i

+13:     

+14:     @charts = LastFM::Chart.getTopArtists 20, (params[:size] / 20 + 1)

+15:     LastFM::Request.run_queue!

+16: 

+17:     render :partial=>"more_charts", :locals=>{:charts=>@charts}

+18:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/DeviseAuth.html b/doc/app/DeviseAuth.html new file mode 100644 index 0000000..6b0b886 --- /dev/null +++ b/doc/app/DeviseAuth.html @@ -0,0 +1,199 @@ + + + + + + + Module: DeviseAuth + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+
    + +
+
+
+ + +
+ +
+ + + + + + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

DeviseAuth

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/DeviseAuth/RegistrationsController.html b/doc/app/DeviseAuth/RegistrationsController.html new file mode 100644 index 0000000..d726297 --- /dev/null +++ b/doc/app/DeviseAuth/RegistrationsController.html @@ -0,0 +1,335 @@ + + + + + + + Class: DeviseAuth::RegistrationsController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+ + + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

DeviseAuth::RegistrationsController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + create() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/devise_auth/registrations_controller.rb, line 12
+12:   def create

+13:     build_resource

+14: 

+15:     if resource.save

+16:       if resource.active_for_authentication?

+17:         set_flash_message :notice, :signed_up if is_navigational_format?

+18:         sign_in(resource_name, resource)

+19:         redirect_to user_path(resource)

+20:       else

+21:         set_flash_message :notice, :inactive_signed_up, :reason => resource.inactive_message.to_s if is_navigational_format?

+22:         expire_session_data_after_sign_in!

+23:         redirect_to user_path(resource)

+24:       end

+25:     else

+26:       clean_up_passwords(resource)

+27:       respond_with_navigational(resource) { render :partial => "devise/registrations/new" }

+28:     end

+29:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + edit() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/devise_auth/registrations_controller.rb, line 8
+ 8:   def edit

+ 9:     render :partial => "devise/registrations/edit"

+10:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + new() + click to toggle source + +
+ +
+ + + + + +
+
+   # File app/controllers/devise_auth/registrations_controller.rb, line 3
+3:   def new

+4:     resource = build_resource({})

+5:     respond_with_navigational(resource) { render :partial => "devise/registrations/new" }

+6:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/DeviseAuth/SessionsController.html b/doc/app/DeviseAuth/SessionsController.html new file mode 100644 index 0000000..f93112d --- /dev/null +++ b/doc/app/DeviseAuth/SessionsController.html @@ -0,0 +1,288 @@ + + + + + + + Class: DeviseAuth::SessionsController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+ + + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

DeviseAuth::SessionsController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + create() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/devise_auth/sessions_controller.rb, line 9
+ 9:   def create

+10:     resource = warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#new")

+11:     set_flash_message(:notice, :signed_in) if is_navigational_format?

+12:     sign_in(resource_name, resource)

+13:     redirect_to "/#!/home", :partial => "devise/registrations/new"

+14:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + new() + click to toggle source + +
+ +
+ + + + + +
+
+   # File app/controllers/devise_auth/sessions_controller.rb, line 3
+3:   def new

+4:     resource = build_resource

+5:     clean_up_passwords(resource)

+6:     respond_with_navigational(resource, stub_options(resource)){ render :partial => "devise/sessions/new" }

+7:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/HomeController.html b/doc/app/HomeController.html new file mode 100644 index 0000000..f9d6e82 --- /dev/null +++ b/doc/app/HomeController.html @@ -0,0 +1,250 @@ + + + + + + + Class: HomeController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

HomeController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + show() + click to toggle source + +
+ +
+ + + + + +
+
+   # File app/controllers/home_controller.rb, line 3
+3:   def show

+4:     @charts = LastFM::Chart.getTopArtists 10

+5:     LastFM::Request.run_queue!

+6: 

+7:     render :partial=>"index"

+8:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/LastFM.html b/doc/app/LastFM.html new file mode 100644 index 0000000..6cbbd46 --- /dev/null +++ b/doc/app/LastFM.html @@ -0,0 +1,225 @@ + + + + + + + Module: LastFM + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+ + + +
+ +
+ + + + + + +
+

Namespace

+ +
+ + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

LastFM

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/LastFM/Album.html b/doc/app/LastFM/Album.html new file mode 100644 index 0000000..fc7b6f7 --- /dev/null +++ b/doc/app/LastFM/Album.html @@ -0,0 +1,335 @@ + + + + + + + Class: LastFM::Album + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+ +
+
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

LastFM::Album

+ +
+ +
+ + + + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + getInfo(album, artist) + click to toggle source + +
+ +
+ +

+return: album name, artist, (top)tags, tracks ( name, duration (in sec) ) +mbid (album), release date, image urls ( different sizes ) +

+ + + +
+
+    # File lib/last_fm/album.rb, line 14
+14:     def self.getInfo album, artist

+15:       RedisQueryable.look_up_key(:artist, { :hashable => [album, artist] }) do

+16:         album_request "getInfo", "album", album, artist do |info|

+17:           info = LastFM::Validator.validate_mash info, "tracks"

+18:           info = Hashie::Mash.new({ :tracks => [] }) if info.blank?

+19:           update_results [current_class_name, __method__], info

+20:           RedisQueryable.store :artist, { :hashable => [album, artist] }, info.to_json

+21:         end

+22:       end

+23:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getTopTags(album, artist) + click to toggle source + +
+ +
+ +

+return: tags ( name, tag´s last.fm-url ) ordered by popularity +

+ + + +
+
+    # File lib/last_fm/album.rb, line 26
+26:     def self.getTopTags album, artist

+27:       album_request "getTopTags", "toptags", album, artist

+28:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + search(query, limit = nil, page = nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/album.rb, line 5
+ 5:     def self.search query, limit = nil, page = nil

+ 6:       album_request "search", "albummatches", query, nil, limit, page do |result|

+ 7:         result = LastFM::Validator.validate_mash result

+ 8:         result = Hashie::Mash.new({ :album => [] }) if result.blank?

+ 9:         update_results [current_class_name, __method__], result

+10:       end

+11:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/LastFM/Artist.html b/doc/app/LastFM/Artist.html new file mode 100644 index 0000000..71b4537 --- /dev/null +++ b/doc/app/LastFM/Artist.html @@ -0,0 +1,509 @@ + + + + + + + Class: LastFM::Artist + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+ +
+
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

LastFM::Artist

+ +
+ +
+ + + + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + getImages(artist, limit = nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/artist.rb, line 63
+63:     def self.getImages artist, limit = nil

+64:       artist_request "getImages", "images", artist, limit do |images|

+65:         images = LastFM::Validator.validate_mash images, "image"

+66:         images = Hashie::Mash.new({ :image => [] }) if images.total == "0"

+67:         update_results [current_class_name, __method__], images

+68:       end

+69:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getInfo(artist) + click to toggle source + +
+ +
+ +

+return: artist name, tags, similar artists, artist bio (summary / long), +mbid, image urls ( different sizes ) +

+ + + +
+
+    # File lib/last_fm/artist.rb, line 14
+14:     def self.getInfo artist

+15:       RedisQueryable.look_up_key(:artist, { :hashable => artist, :type => :info }) do

+16:         artist_request "getInfo", "artist", artist do |info|

+17:           info = LastFM::Validator.validate_mash info, "tag", "image"

+18:           update_results [current_class_name, __method__], info

+19:           RedisQueryable.store :artist, { :hashable => artist, :type => :info }, info.to_json

+20:         end

+21:       end

+22:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getSimilar(artist, limit = nil, page = nil) + click to toggle source + +
+ +
+ +

+return: artists ( name, mbid, image urls ( different sizes ) ) +

+ + + +
+
+    # File lib/last_fm/artist.rb, line 25
+25:     def self.getSimilar artist, limit = nil, page = nil

+26:       RedisQueryable.look_up_key(:artist, { :hashable => artist, :type => :similar }) do

+27:         artist_request "getSimilar", "similarartists", artist, limit do |similar|

+28:           similar = LastFM::Validator.validate_mash similar, "tag", "image"

+29:           update_results [current_class_name, __method__], similar

+30:           RedisQueryable.store :artist, { :hashable => artist, :type => :similar }, similar.to_json

+31:         end

+32:       end

+33:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getTopAlbums(artist, limit = nil, page = nil) + click to toggle source + +
+ +
+ +

+return: albums ( name, mbid, album url, image urls ( different sizes ) ) +ordered by popularity +

+ + + +
+
+    # File lib/last_fm/artist.rb, line 52
+52:     def self.getTopAlbums artist, limit = nil, page = nil

+53:       RedisQueryable.look_up_key(:artist, { :hashable => artist, :type => :albums, :page => page }) do

+54:         artist_request "getTopAlbums", "topalbums", artist, limit, page do |albums|

+55:           albums = LastFM::Validator.validate_mash albums, "album"

+56:           albums = Hashie::Mash.new({ :album => [] }) if albums.total == "0"

+57:           update_results [current_class_name, __method__], albums

+58:           RedisQueryable.store :artist, { :hashable => artist, :type => :albums, :page => page }, albums.to_json

+59:         end

+60:       end

+61:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getTopTags(artist) + click to toggle source + +
+ +
+ +

+return: tags ( name, tag´s last.fm-url ) ordered by popularity +

+ + + +
+
+    # File lib/last_fm/artist.rb, line 36
+36:     def self.getTopTags artist

+37:       artist_request "getTopTags", "toptags", artist

+38:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getTopTracks(artist, limit = nil, page = nil) + click to toggle source + +
+ +
+ +

+return: tracks ( name, image urls ( different sizes ) ) ordered by +popularity +

+ + + +
+
+    # File lib/last_fm/artist.rb, line 41
+41:     def self.getTopTracks artist, limit = nil, page = nil

+42:       RedisQueryable.look_up_key(:artist, { :hashable => artist, :type => :tracks, :page => page }) do

+43:         artist_request "getTopTracks", "toptracks", artist, limit, page do |tracks|

+44:           tracks = LastFM::Validator.validate_mash tracks, "tag", "image"

+45:           update_results [current_class_name, __method__], tracks

+46:           RedisQueryable.store :artist, { :hashable => artist, :type => :tracks, :page => page }, tracks.to_json

+47:         end

+48:       end

+49:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + search(query, limit = nil, page = nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/artist.rb, line 5
+ 5:     def self.search query, limit = nil, page = nil

+ 6:       artist_request "search", "artistmatches", query, limit, page do |result|

+ 7:         result = LastFM::Validator.validate_mash result

+ 8:         result = Hashie::Mash.new({ :artist => [] }) if result.blank?

+ 9:         update_results [current_class_name, __method__], result

+10:       end

+11:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/LastFM/Chart.html b/doc/app/LastFM/Chart.html new file mode 100644 index 0000000..bf22022 --- /dev/null +++ b/doc/app/LastFM/Chart.html @@ -0,0 +1,295 @@ + + + + + + + Class: LastFM::Chart + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+ +
+
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

LastFM::Chart

+ +
+ +
+ + + + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + getTopArtists(limit = nil, page = nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/chart.rb, line 4
+ 4:     def self.getTopArtists limit = nil, page = nil

+ 5:       RedisQueryable.look_up_key(:chart, { :type => :artists, :page => page }) do

+ 6:         chart_request "getTopArtists", "artists", limit, page do |artists|

+ 7:           artists = LastFM::Validator.validate_mash artists, "image"

+ 8:           update_results [current_class_name, __method__], artists

+ 9:           RedisQueryable.store :chart, { :type => :artists, :page => page }, artists.to_json

+10:         end

+11:       end

+12:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getTopTracks(limit = nil, page = nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/chart.rb, line 14
+14:     def self.getTopTracks limit = nil, page = nil

+15:       RedisQueryable.look_up_key(:chart, { :type => :tracks, :page => page }) do

+16:         chart_request "getTopTracks", "tracks", limit, page do |tracks|

+17:           tracks = LastFM::Validator.validate_mash tracks

+18:           update_results [current_class_name, __method__], tracks

+19:           RedisQueryable.store :chart, { :type => :tracks, :page => page }, tracks.to_json

+20:         end

+21:       end

+22:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/LastFM/Request.html b/doc/app/LastFM/Request.html new file mode 100644 index 0000000..68ddb3f --- /dev/null +++ b/doc/app/LastFM/Request.html @@ -0,0 +1,716 @@ + + + + + + + Class: LastFM::Request + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

LastFM::Request

+ +
+ +
+ + + + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + album_request(method, node, q, artist = nil, limit = nil, page = nil, &block) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 42
+42:     def self.album_request method, node, q, artist = nil, limit = nil, page = nil, &block

+43:       request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :album => q, :artist => artist, :limit => limit, :page => page )

+44:       create_and_queue_request method, node, block, request_params

+45:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + api_key=(key) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 13
+13:     def self.api_key=(key)

+14:       @@api_key = key

+15:       @@default_params[:api_key] = key

+16:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + artist_request(method, node, q, limit = nil, page = nil, &block) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 37
+37:     def self.artist_request method, node, q, limit = nil, page = nil, &block

+38:       request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :artist => q, :limit => limit, :page => page )

+39:       create_and_queue_request method, node, block, request_params

+40:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + base_uri() + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 18
+18:     def self.base_uri

+19:       @@base_uri

+20:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + chart_request(method, node, limit = nil, page = nil, &block) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 52
+52:     def self.chart_request method, node, limit = nil, page = nil, &block

+53:       request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :limit => limit, :page => page )

+54:       create_and_queue_request method, node, block, request_params

+55:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + default_params() + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 22
+22:     def self.default_params

+23:       @@default_params

+24:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + results(keys = nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 26
+26:     def self.results keys = nil

+27:       return @@results if keys.nil?

+28:       @@results[("#{keys[0]}_#{keys[1]}".to_sym)]

+29:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + run_queue!() + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 31
+31:     def self.run_queue!

+32:       puts "=> lastfm: Started request queue"

+33:       @@hydra.run

+34:       puts "=> lastfm: Queue finished"

+35:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + track_request(method, node, q, artist = nil, limit = nil, page = nil, &block) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 47
+47:     def self.track_request method, node, q, artist = nil, limit = nil, page = nil, &block

+48:       request_params = default_params.merge( :method => "#{current_class_name}.#{method}", :track => q, :artist => artist, :limit => limit, :page => page )

+49:       create_and_queue_request method, node, block, request_params

+50:     end
+
+ +
+ + + + +
+ + +
+ +
+

Protected Class Methods

+ + +
+ + +
+ + current_class_name() + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 63
+63:     def self.current_class_name

+64:       self.name.split('::').last.downcase!

+65:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + update_results(keys, hash) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 59
+59:     def self.update_results keys, hash

+60:       @@results[("#{keys[0]}_#{keys[1]}".to_sym)].update hash

+61:     end
+
+ +
+ + + + +
+ + +
+ +
+

Private Class Methods

+ + +
+ + +
+ + create_and_queue_request(method, node, block, request_params) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 69
+69:     def self.create_and_queue_request method, node, block, request_params

+70:       request = Typhoeus::Request.new(base_uri, :params => request_params) # :timeout => APP_CONFIG["request_timeout"],

+71:       handle_response request, method, node, block

+72: 

+73:       puts "=> lastfm: '#{current_class_name}.#{method}' request is queued" if @@hydra.queue request

+74:       @@results["#{current_class_name}_#{method}".to_sym] = Hashie::Mash.new

+75:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + handle_response(request, method, node, block) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/request.rb, line 77
+77:     def self.handle_response request, method, node, block

+78:       request.on_complete do |response|

+79:         if response.success?

+80:           puts "=> lastfm: '#{current_class_name}.#{method}' (#{response.time}s)"

+81:           

+82:           hash = Hashie::Mash.new(JSON.parse(response.body))

+83:           hash = method.to_s == "search" ? hash.results.send(node.to_sym) : hash.send(node.to_sym)

+84:           

+85:           update_results [current_class_name, method], hash if hash.present? and block.nil?

+86:           block.call( hash ) unless block.nil?

+87:           

+88:         elsif response.timed_out?

+89:           puts "=> lastfm: '#{current_class_name}.#{method}' timed out"

+90:         end

+91:       end

+92:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/LastFM/Track.html b/doc/app/LastFM/Track.html new file mode 100644 index 0000000..29144f2 --- /dev/null +++ b/doc/app/LastFM/Track.html @@ -0,0 +1,367 @@ + + + + + + + Class: LastFM::Track + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+ +
+
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

LastFM::Track

+ +
+ +
+ + + + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + getInfo(track, artist) + click to toggle source + +
+ +
+ +

+return: track name, id, (top)tags, artist, duration (in msec), album ( +artist, title, image urls ( different sizes) ), mbid +

+ + + +
+
+    # File lib/last_fm/track.rb, line 13
+13:     def self.getInfo track, artist

+14:       track_request "getInfo", nil, track, artist

+15:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getSimilar(track, artist, limit = nil) + click to toggle source + +
+ +
+ +

+return: tracks ( name, artist (name, mbid), duration (in msec), image urls +(sometimes) ) +

+ + + +
+
+    # File lib/last_fm/track.rb, line 18
+18:     def self.getSimilar track, artist, limit = nil

+19:       track_request "getSimilar", "similartracks", track, artist, limit

+20:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + getTopTags(track, artist) + click to toggle source + +
+ +
+ +

+return: tags ( name, tag´s last.fm-url ) ordered by popularity +

+ + + +
+
+    # File lib/last_fm/track.rb, line 23
+23:     def self.getTopTags track, artist

+24:       track_request "getTopTags", "toptags", track, artist

+25:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + search(query, limit = nil, page = nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/track.rb, line 4
+ 4:     def self.search query, limit = nil, page = nil

+ 5:       track_request "search", "trackmatches", query, nil, limit, page do |result|

+ 6:         result = LastFM::Validator.validate_mash result

+ 7:         result = Hashie::Mash.new({ :track => [] }) if result.blank?

+ 8:         update_results [current_class_name, __method__], result

+ 9:       end

+10:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/LastFM/Validator.html b/doc/app/LastFM/Validator.html new file mode 100644 index 0000000..ca076bf --- /dev/null +++ b/doc/app/LastFM/Validator.html @@ -0,0 +1,257 @@ + + + + + + + Module: LastFM::Validator + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

LastFM::Validator

+ +
+ +
+ + + + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + validate_mash(mash, *args) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/last_fm/validator.rb, line 5
+ 5:     def self.validate_mash mash, *args

+ 6:       args.flatten!

+ 7:       

+ 8:       return [] if mash.blank?

+ 9:       

+10:       mash.each do |key, value|

+11:         if args.include? key.to_s || value.is_a?(Array)

+12:           mash[key] = Array.wrap value

+13:           mash[key].map do |mashie|

+14:             validate_mash mashie, args

+15:           end

+16:         elsif value.is_a? Hashie::Mash

+17:           mash[key] = validate_mash mash[key], args

+18:         end

+19:         mash[key] = "" if value.blank? && value.is_a?(String)

+20:         mash[key] = [] if value.blank? && value.is_a?(Array)

+21:       end

+22:       

+23:       return mash

+24:     end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/Playlist.html b/doc/app/Playlist.html new file mode 100644 index 0000000..29248d4 --- /dev/null +++ b/doc/app/Playlist.html @@ -0,0 +1,198 @@ + + + + + + + Class: Playlist + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

Playlist

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/PlaylistsTracks.html b/doc/app/PlaylistsTracks.html new file mode 100644 index 0000000..ef46176 --- /dev/null +++ b/doc/app/PlaylistsTracks.html @@ -0,0 +1,198 @@ + + + + + + + Class: PlaylistsTracks + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

PlaylistsTracks

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/RedisQueryable.html b/doc/app/RedisQueryable.html new file mode 100644 index 0000000..a92c312 --- /dev/null +++ b/doc/app/RedisQueryable.html @@ -0,0 +1,459 @@ + + + + + + + Module: RedisQueryable + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

RedisQueryable

+ +
+ +
+ + + +
+

Constants

+
+ +
VALID_NAMESPACES
+ +
+ + +
EXPIRATION
+ +
+ + +
+
+ + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + get(namespace, key_hash) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/redis_queryable.rb, line 18
+18:   def self.get namespace, key_hash

+19:     key = build_key key_hash.values

+20:     redis = switch_to_namespace namespace

+21:     json = redis.get key

+22:     Hashie::Mash.new(JSON.parse(json))

+23:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + look_up_key(namespace, key_hash, &block) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/redis_queryable.rb, line 25
+25:   def self.look_up_key namespace, key_hash, &block

+26:     if exists_key? namespace, key_hash

+27:       get namespace, key_hash

+28:     else

+29:       block.call

+30:     end

+31:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + store(namespace, key_hash, value) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/redis_queryable.rb, line 10
+10:   def self.store namespace, key_hash, value

+11:     key = build_key key_hash.values

+12:     redis = switch_to_namespace namespace

+13: 

+14:     expires = key_hash.has_key?(:type) ? EXPIRATION[namespace][key_hash[:type]] : EXPIRATION[namespace]

+15:     redis.setex key, expires.to_i.days, value

+16:   end
+
+ +
+ + + + +
+ + +
+ +
+

Private Class Methods

+ + +
+ + +
+ + build_key(key_array) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/redis_queryable.rb, line 42
+42:   def self.build_key key_array

+43:     key_array.flatten.map do |value|

+44:       value.is_a?(String) ? Digest::SHA1.hexdigest(value) : value.to_s

+45:     end.join(":")

+46:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + exists_key?(namespace, key_hash) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/redis_queryable.rb, line 36
+36:   def self.exists_key? namespace, key_hash

+37:     key = build_key key_hash.values

+38:     redis = switch_to_namespace namespace

+39:     redis.exists key

+40:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + switch_to_namespace(namespace) + click to toggle source + +
+ +
+ + + + + +
+
+    # File lib/redis_queryable.rb, line 48
+48:   def self.switch_to_namespace namespace

+49:     return Redis::Namespace.new(namespace, :redis => $redis) if VALID_NAMESPACES.include? namespace

+50:     $redis

+51:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/SearchController.html b/doc/app/SearchController.html new file mode 100644 index 0000000..2c2a695 --- /dev/null +++ b/doc/app/SearchController.html @@ -0,0 +1,338 @@ + + + + + + + Class: SearchController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

SearchController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + autocomplete() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/search_controller.rb, line 21
+21:   def autocomplete

+22:     q = params[:q].to_s.lstrip

+23: 

+24:     @artists = $sevendigital_client.artist.search q, { :pagesize=>5 }

+25: 

+26:     render :partial=>"autocomplete", :locals=>{ :artists=>@artists }

+27:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + more_artists() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/search_controller.rb, line 29
+29:   def more_artists

+30:     @artists = LastFM::Artist.search params[:q].to_s.lstrip, @@limit[:artists], (params[:size].to_i / @@limit[:artists] + 1)

+31:     LastFM::Request.run_queue!

+32: 

+33:     render :partial=>"more_artists", :locals=>{:artists=>@artists}

+34:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + show() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/search_controller.rb, line 5
+ 5:   def show

+ 6:     @q = params[:id].to_s.lstrip

+ 7:     

+ 8:     @artists = LastFM::Artist.search @q, @@limit[:artists]

+ 9:     @tracks = LastFM::Track.search @q, @@limit[:tracks]

+10:     @albums = LastFM::Album.search @q, @@limit[:albums]

+11: 

+12:     LastFM::Request.run_queue!

+13:     

+14:     render :partial=>"show", :locals=>{

+15:       :artist=>@artist,

+16:       :tracks=>@tracks,

+17:       :albums=>@albums

+18:     }

+19:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/Track.html b/doc/app/Track.html new file mode 100644 index 0000000..4f8e3d8 --- /dev/null +++ b/doc/app/Track.html @@ -0,0 +1,198 @@ + + + + + + + Class: Track + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+ +
+
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

Track

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/TracksController.html b/doc/app/TracksController.html new file mode 100644 index 0000000..5d26117 --- /dev/null +++ b/doc/app/TracksController.html @@ -0,0 +1,286 @@ + + + + + + + Class: TracksController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

TracksController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + index() + click to toggle source + +
+ +
+ + + + + +
+
+   # File app/controllers/tracks_controller.rb, line 2
+2:   def index

+3:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + search_video() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/tracks_controller.rb, line 5
+ 5:   def search_video

+ 6:     

+ 7:     @video = @youtube_client.videos_by(:query => "#{CGI.unescape(params[:artist])} #{CGI.unescape(params[:track])} official", :page => 1, :per_page => 1, :order_by => "relevance")

+ 8:     @id = @video.videos.first.unique_id

+ 9:     

+10:     render :partial=>"video_id", :locals=>{:id=>@id}

+11:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/User.html b/doc/app/User.html new file mode 100644 index 0000000..591585d --- /dev/null +++ b/doc/app/User.html @@ -0,0 +1,333 @@ + + + + + + + Class: User + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+ +
+
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

User

+ +
+ +
+ + + + + + + + + +
+

Public Class Methods

+ + +
+ + +
+ + find_for_facebook_oauth(access_token, signed_in_resource=nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/models/user.rb, line 21
+21:   def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)

+22:     data = access_token['extra']['user_hash']

+23:     if user = User.find_by_email(data["email"])

+24:       user

+25:     else # Create a user with a stub password. 

+26:       User.create!(:email => data["email"], :password => Devise.friendly_token[0,20]) 

+27:     end

+28:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + find_for_open_id(access_token, signed_in_resource=nil) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/models/user.rb, line 30
+30:   def self.find_for_open_id(access_token, signed_in_resource=nil)

+31:     data = access_token['user_info']

+32:     if user = User.find_by_email(data["email"])

+33:       user

+34:     else # Create a user with a stub password.

+35:       User.create!(:email => data["email"], :password => Devise.friendly_token[0,20])

+36:     end

+37:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + new_with_session(params, session) + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/models/user.rb, line 13
+13:   def self.new_with_session(params, session)

+14:     super.tap do |user|

+15:       if data = session["devise.facebook_data"] && session["devise.facebook_data"]["extra"]["user_hash"]

+16:         user.email = data["email"]

+17:       end

+18:     end

+19:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/Users.html b/doc/app/Users.html new file mode 100644 index 0000000..a4bc7ca --- /dev/null +++ b/doc/app/Users.html @@ -0,0 +1,197 @@ + + + + + + + Module: Users + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+
+
    + +
+
+
+ + +
+ +
+ + + + + + +
+

Namespace

+ +
+ + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

Users

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/Users/OmniauthCallbacksController.html b/doc/app/Users/OmniauthCallbacksController.html new file mode 100644 index 0000000..5cc2bcc --- /dev/null +++ b/doc/app/Users/OmniauthCallbacksController.html @@ -0,0 +1,336 @@ + + + + + + + Class: Users::OmniauthCallbacksController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+ + + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

Users::OmniauthCallbacksController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + facebook() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/users/omniauth_callbacks_controller.rb, line 3
+ 3:   def facebook

+ 4:     # You need to implement the method below in your model

+ 5:     @user = User.find_for_facebook_oauth(env["omniauth.auth"], current_user)

+ 6: 

+ 7:     if @user.persisted?

+ 8:       flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Facebook"

+ 9:       sign_in_and_redirect @user, :event => :authentication

+10:     else

+11:       session["devise.facebook_data"] = env["omniauth.auth"]

+12:       redirect_to new_user_registration_url

+13:     end

+14:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + open_id() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/users/omniauth_callbacks_controller.rb, line 16
+16:   def open_id

+17:     # You need to implement the method below in your model

+18:     @user = User.find_for_open_id(env["omniauth.auth"], current_user)

+19:     if @user.persisted?

+20:       flash[:notice] = I18n.t "devise.omniauth_callbacks.success", :kind => "Google"

+21:       sign_in_and_redirect @user, :event => :authentication

+22:     else

+23:       session["devise.open:id_data"] = env["openid.ext1"]

+24:       redirect_to new_user_registration_url

+25:     end

+26:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + passthru() + click to toggle source + +
+ +
+ + + + + +
+
+    # File app/controllers/users/omniauth_callbacks_controller.rb, line 28
+28:   def passthru

+29:     render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false

+30:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/UsersController.html b/doc/app/UsersController.html new file mode 100644 index 0000000..e1ec194 --- /dev/null +++ b/doc/app/UsersController.html @@ -0,0 +1,249 @@ + + + + + + + Class: UsersController + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

UsersController

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + show() + click to toggle source + +
+ +
+ + + + + +
+
+   # File app/controllers/users_controller.rb, line 2
+2:   def show

+3:     @user = User.find params[:id]

+4:     puts @user.inspect

+5:     render :partial => "show", :locals => { :user => @user }

+6:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/UsersHelper.html b/doc/app/UsersHelper.html new file mode 100644 index 0000000..76e4bf8 --- /dev/null +++ b/doc/app/UsersHelper.html @@ -0,0 +1,241 @@ + + + + + + + Module: UsersHelper + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + + + + + + + +
+

Methods

+ +
+ + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

UsersHelper

+ +
+ +
+ + + + + + + + + +
+

Public Instance Methods

+ + +
+ + +
+ + validate_avatar_url(url) + click to toggle source + +
+ +
+ + + + + +
+
+   # File app/helpers/users_helper.rb, line 3
+3:   def validate_avatar_url url

+4:     return url if url.present? and FileTest.exists? url

+5:     "examples/user-big.jpg"

+6:   end
+
+ +
+ + + + +
+ + +
+ + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/YoutubeVideoRating.html b/doc/app/YoutubeVideoRating.html new file mode 100644 index 0000000..33aea44 --- /dev/null +++ b/doc/app/YoutubeVideoRating.html @@ -0,0 +1,198 @@ + + + + + + + Class: YoutubeVideoRating + + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+
+

In Files

+ +
+ + +
+ +
+ + + +
+

Parent

+ + + +
+ + + + + + + + + + +
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

YoutubeVideoRating

+ +
+ +
+ + + + + + + + + + +
+ + +
+ +

Disabled; run with --debug to generate this.

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + + diff --git a/doc/app/app/controllers/application_controller_rb.html b/doc/app/app/controllers/application_controller_rb.html new file mode 100644 index 0000000..f8428e1 --- /dev/null +++ b/doc/app/app/controllers/application_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: application_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-12 16:26:41 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/artists_controller_rb.html b/doc/app/app/controllers/artists_controller_rb.html new file mode 100644 index 0000000..6819fa2 --- /dev/null +++ b/doc/app/app/controllers/artists_controller_rb.html @@ -0,0 +1,54 @@ + + + + + + + + File: artists_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-12 16:22:34 +0200
+ + +
Requires
+
+
    + +
  • uri
  • + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/charts_controller_rb.html b/doc/app/app/controllers/charts_controller_rb.html new file mode 100644 index 0000000..4eec18a --- /dev/null +++ b/doc/app/app/controllers/charts_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: charts_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-12 01:46:19 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/devise_auth/registrations_controller_rb.html b/doc/app/app/controllers/devise_auth/registrations_controller_rb.html new file mode 100644 index 0000000..bc54481 --- /dev/null +++ b/doc/app/app/controllers/devise_auth/registrations_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: registrations_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/devise_auth/sessions_controller_rb.html b/doc/app/app/controllers/devise_auth/sessions_controller_rb.html new file mode 100644 index 0000000..5277ea0 --- /dev/null +++ b/doc/app/app/controllers/devise_auth/sessions_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: sessions_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/home_controller_rb.html b/doc/app/app/controllers/home_controller_rb.html new file mode 100644 index 0000000..73233cd --- /dev/null +++ b/doc/app/app/controllers/home_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: home_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 00:41:53 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/search_controller_rb.html b/doc/app/app/controllers/search_controller_rb.html new file mode 100644 index 0000000..95a3e1d --- /dev/null +++ b/doc/app/app/controllers/search_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: search_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 01:00:15 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/tracks_controller_rb.html b/doc/app/app/controllers/tracks_controller_rb.html new file mode 100644 index 0000000..67fc2fe --- /dev/null +++ b/doc/app/app/controllers/tracks_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: tracks_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-09 06:14:15 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/users/omniauth_callbacks_controller_rb.html b/doc/app/app/controllers/users/omniauth_callbacks_controller_rb.html new file mode 100644 index 0000000..0da18ff --- /dev/null +++ b/doc/app/app/controllers/users/omniauth_callbacks_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: omniauth_callbacks_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-06 14:10:23 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/controllers/users_controller_rb.html b/doc/app/app/controllers/users_controller_rb.html new file mode 100644 index 0000000..7147ed2 --- /dev/null +++ b/doc/app/app/controllers/users_controller_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: users_controller.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/helpers/application_helper_rb.html b/doc/app/app/helpers/application_helper_rb.html new file mode 100644 index 0000000..b88e026 --- /dev/null +++ b/doc/app/app/helpers/application_helper_rb.html @@ -0,0 +1,55 @@ + + + + + + + + File: application_helper.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-08 22:33:20 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+

+encoding: UTF-8 +

+ +
+ +
+ + + diff --git a/doc/app/app/helpers/users_helper_rb.html b/doc/app/app/helpers/users_helper_rb.html new file mode 100644 index 0000000..7eb8da8 --- /dev/null +++ b/doc/app/app/helpers/users_helper_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: users_helper.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/models/artist_rb.html b/doc/app/app/models/artist_rb.html new file mode 100644 index 0000000..2f5c2bc --- /dev/null +++ b/doc/app/app/models/artist_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: artist.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-06 14:10:23 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/models/playlist_rb.html b/doc/app/app/models/playlist_rb.html new file mode 100644 index 0000000..96e6527 --- /dev/null +++ b/doc/app/app/models/playlist_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: playlist.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/models/playlists_tracks_rb.html b/doc/app/app/models/playlists_tracks_rb.html new file mode 100644 index 0000000..a04f74e --- /dev/null +++ b/doc/app/app/models/playlists_tracks_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: playlists_tracks.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-06 14:10:23 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/models/track_rb.html b/doc/app/app/models/track_rb.html new file mode 100644 index 0000000..e80bc2f --- /dev/null +++ b/doc/app/app/models/track_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: track.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-08 03:11:10 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/models/user_rb.html b/doc/app/app/models/user_rb.html new file mode 100644 index 0000000..e9aa1c4 --- /dev/null +++ b/doc/app/app/models/user_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: user.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/app/models/youtube_video_rating_rb.html b/doc/app/app/models/youtube_video_rating_rb.html new file mode 100644 index 0000000..437c3e8 --- /dev/null +++ b/doc/app/app/models/youtube_video_rating_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: youtube_video_rating.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-06 14:10:23 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/created.rid b/doc/app/created.rid new file mode 100644 index 0000000..7806ac3 --- /dev/null +++ b/doc/app/created.rid @@ -0,0 +1,27 @@ +Mon, 13 Jun 2011 14:50:55 +0200 +doc/README_FOR_APP Mon, 02 May 2011 20:00:11 +0200 +app/controllers/application_controller.rb Sun, 12 Jun 2011 16:26:41 +0200 +app/controllers/artists_controller.rb Sun, 12 Jun 2011 16:22:34 +0200 +app/controllers/charts_controller.rb Sun, 12 Jun 2011 01:46:19 +0200 +app/controllers/devise_auth/registrations_controller.rb Fri, 10 Jun 2011 02:24:59 +0200 +app/controllers/devise_auth/sessions_controller.rb Fri, 10 Jun 2011 02:24:59 +0200 +app/controllers/home_controller.rb Fri, 10 Jun 2011 00:41:53 +0200 +app/controllers/search_controller.rb Fri, 10 Jun 2011 01:00:15 +0200 +app/controllers/tracks_controller.rb Thu, 09 Jun 2011 06:14:15 +0200 +app/controllers/users/omniauth_callbacks_controller.rb Mon, 06 Jun 2011 14:10:23 +0200 +app/controllers/users_controller.rb Fri, 10 Jun 2011 02:24:59 +0200 +app/helpers/application_helper.rb Wed, 08 Jun 2011 22:33:20 +0200 +app/helpers/users_helper.rb Fri, 10 Jun 2011 02:24:59 +0200 +app/models/artist.rb Mon, 06 Jun 2011 14:10:23 +0200 +app/models/playlist.rb Fri, 10 Jun 2011 02:24:59 +0200 +app/models/playlists_tracks.rb Mon, 06 Jun 2011 14:10:23 +0200 +app/models/track.rb Wed, 08 Jun 2011 03:11:10 +0200 +app/models/user.rb Fri, 10 Jun 2011 02:24:59 +0200 +app/models/youtube_video_rating.rb Mon, 06 Jun 2011 14:10:23 +0200 +lib/last_fm/album.rb Fri, 10 Jun 2011 02:24:59 +0200 +lib/last_fm/artist.rb Fri, 10 Jun 2011 02:24:59 +0200 +lib/last_fm/chart.rb Fri, 10 Jun 2011 02:24:59 +0200 +lib/last_fm/request.rb Mon, 13 Jun 2011 14:46:39 +0200 +lib/last_fm/track.rb Fri, 10 Jun 2011 00:41:53 +0200 +lib/last_fm/validator.rb Wed, 08 Jun 2011 03:11:10 +0200 +lib/redis_queryable.rb Fri, 10 Jun 2011 02:24:59 +0200 diff --git a/doc/app/doc/README_FOR_APP.html b/doc/app/doc/README_FOR_APP.html new file mode 100644 index 0000000..fee587a --- /dev/null +++ b/doc/app/doc/README_FOR_APP.html @@ -0,0 +1,144 @@ + + + + + + + + File: README_FOR_APP [Rails Application Documentation] + + + + + + + + + + +
+
+
+

+ Home + Classes + Methods +

+
+
+ +
+ + +
+

Files

+ +
+ + + + + +
+
+ +
+

+Use this README file to introduce your application and point to useful +places in the API for learning more. Run “rake doc:app” to +generate API documentation for your models, controllers, helpers, and +libraries. +

+ +
+ +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + + diff --git a/doc/app/images/brick.png b/doc/app/images/brick.png new file mode 100644 index 0000000..7851cf3 Binary files /dev/null and b/doc/app/images/brick.png differ diff --git a/doc/app/images/brick_link.png b/doc/app/images/brick_link.png new file mode 100644 index 0000000..9ebf013 Binary files /dev/null and b/doc/app/images/brick_link.png differ diff --git a/doc/app/images/bug.png b/doc/app/images/bug.png new file mode 100644 index 0000000..2d5fb90 Binary files /dev/null and b/doc/app/images/bug.png differ diff --git a/doc/app/images/bullet_black.png b/doc/app/images/bullet_black.png new file mode 100644 index 0000000..5761970 Binary files /dev/null and b/doc/app/images/bullet_black.png differ diff --git a/doc/app/images/bullet_toggle_minus.png b/doc/app/images/bullet_toggle_minus.png new file mode 100644 index 0000000..b47ce55 Binary files /dev/null and b/doc/app/images/bullet_toggle_minus.png differ diff --git a/doc/app/images/bullet_toggle_plus.png b/doc/app/images/bullet_toggle_plus.png new file mode 100644 index 0000000..9ab4a89 Binary files /dev/null and b/doc/app/images/bullet_toggle_plus.png differ diff --git a/doc/app/images/date.png b/doc/app/images/date.png new file mode 100644 index 0000000..783c833 Binary files /dev/null and b/doc/app/images/date.png differ diff --git a/doc/app/images/find.png b/doc/app/images/find.png new file mode 100644 index 0000000..1547479 Binary files /dev/null and b/doc/app/images/find.png differ diff --git a/doc/app/images/loadingAnimation.gif b/doc/app/images/loadingAnimation.gif new file mode 100644 index 0000000..82290f4 Binary files /dev/null and b/doc/app/images/loadingAnimation.gif differ diff --git a/doc/app/images/macFFBgHack.png b/doc/app/images/macFFBgHack.png new file mode 100644 index 0000000..c6473b3 Binary files /dev/null and b/doc/app/images/macFFBgHack.png differ diff --git a/doc/app/images/package.png b/doc/app/images/package.png new file mode 100644 index 0000000..da3c2a2 Binary files /dev/null and b/doc/app/images/package.png differ diff --git a/doc/app/images/page_green.png b/doc/app/images/page_green.png new file mode 100644 index 0000000..de8e003 Binary files /dev/null and b/doc/app/images/page_green.png differ diff --git a/doc/app/images/page_white_text.png b/doc/app/images/page_white_text.png new file mode 100644 index 0000000..813f712 Binary files /dev/null and b/doc/app/images/page_white_text.png differ diff --git a/doc/app/images/page_white_width.png b/doc/app/images/page_white_width.png new file mode 100644 index 0000000..1eb8809 Binary files /dev/null and b/doc/app/images/page_white_width.png differ diff --git a/doc/app/images/plugin.png b/doc/app/images/plugin.png new file mode 100644 index 0000000..6187b15 Binary files /dev/null and b/doc/app/images/plugin.png differ diff --git a/doc/app/images/ruby.png b/doc/app/images/ruby.png new file mode 100644 index 0000000..f763a16 Binary files /dev/null and b/doc/app/images/ruby.png differ diff --git a/doc/app/images/tag_green.png b/doc/app/images/tag_green.png new file mode 100644 index 0000000..83ec984 Binary files /dev/null and b/doc/app/images/tag_green.png differ diff --git a/doc/app/images/wrench.png b/doc/app/images/wrench.png new file mode 100644 index 0000000..5c8213f Binary files /dev/null and b/doc/app/images/wrench.png differ diff --git a/doc/app/images/wrench_orange.png b/doc/app/images/wrench_orange.png new file mode 100644 index 0000000..565a933 Binary files /dev/null and b/doc/app/images/wrench_orange.png differ diff --git a/doc/app/images/zoom.png b/doc/app/images/zoom.png new file mode 100644 index 0000000..908612e Binary files /dev/null and b/doc/app/images/zoom.png differ diff --git a/doc/app/index.html b/doc/app/index.html new file mode 100644 index 0000000..6158d4f --- /dev/null +++ b/doc/app/index.html @@ -0,0 +1,244 @@ + + + + + + + + Rails Application Documentation + + + + + + + + + + + + +

Rails Application Documentation

+ + +

This is the API documentation for 'Rails Application Documentation'.

+ + + + +

Files

+ + + +

Classes/Modules

+ + +

Methods

+ + +
+

[Validate]

+

Generated with the Darkfish + Rdoc Generator 1.1.6.

+
+ + diff --git a/doc/app/js/darkfish.js b/doc/app/js/darkfish.js new file mode 100644 index 0000000..84565c1 --- /dev/null +++ b/doc/app/js/darkfish.js @@ -0,0 +1,116 @@ +/** + * + * Darkfish Page Functions + * $Id: darkfish.js 53 2009-01-07 02:52:03Z deveiant $ + * + * Author: Michael Granger + * + */ + +/* Provide console simulation for firebug-less environments */ +if (!("console" in window) || !("firebug" in console)) { + var names = ["log", "debug", "info", "warn", "error", "assert", "dir", "dirxml", + "group", "groupEnd", "time", "timeEnd", "count", "trace", "profile", "profileEnd"]; + + window.console = {}; + for (var i = 0; i < names.length; ++i) + window.console[names[i]] = function() {}; +}; + + +/** + * Unwrap the first element that matches the given @expr@ from the targets and return them. + */ +$.fn.unwrap = function( expr ) { + return this.each( function() { + $(this).parents( expr ).eq( 0 ).after( this ).remove(); + }); +}; + + +function showSource( e ) { + var target = e.target; + var codeSections = $(target). + parents('.method-detail'). + find('.method-source-code'); + + $(target). + parents('.method-detail'). + find('.method-source-code'). + slideToggle(); +}; + +function hookSourceViews() { + $('.method-description,.method-heading').click( showSource ); +}; + +function toggleDebuggingSection() { + $('.debugging-section').slideToggle(); +}; + +function hookDebuggingToggle() { + $('#debugging-toggle img').click( toggleDebuggingSection ); +}; + +function hookQuickSearch() { + $('.quicksearch-field').each( function() { + var searchElems = $(this).parents('.section').find( 'li' ); + var toggle = $(this).parents('.section').find('h3 .search-toggle'); + // console.debug( "Toggle is: %o", toggle ); + var qsbox = $(this).parents('form').get( 0 ); + + $(this).quicksearch( this, searchElems, { + noSearchResultsIndicator: 'no-class-search-results', + focusOnLoad: false + }); + $(toggle).click( function() { + // console.debug( "Toggling qsbox: %o", qsbox ); + $(qsbox).toggle(); + }); + }); +}; + +function highlightTarget( anchor ) { + console.debug( "Highlighting target '%s'.", anchor ); + + $("a[name=" + anchor + "]").each( function() { + if ( !$(this).parent().parent().hasClass('target-section') ) { + console.debug( "Wrapping the target-section" ); + $('div.method-detail').unwrap( 'div.target-section' ); + $(this).parent().wrap( '
' ); + } else { + console.debug( "Already wrapped." ); + } + }); +}; + +function highlightLocationTarget() { + console.debug( "Location hash: %s", window.location.hash ); + if ( ! window.location.hash || window.location.hash.length == 0 ) return; + + var anchor = window.location.hash.substring(1); + console.debug( "Found anchor: %s; matching %s", anchor, "a[name=" + anchor + "]" ); + + highlightTarget( anchor ); +}; + +function highlightClickTarget( event ) { + console.debug( "Highlighting click target for event %o", event.target ); + try { + var anchor = $(event.target).attr( 'href' ).substring(1); + console.debug( "Found target anchor: %s", anchor ); + highlightTarget( anchor ); + } catch ( err ) { + console.error( "Exception while highlighting: %o", err ); + }; +}; + + +$(document).ready( function() { + hookSourceViews(); + hookDebuggingToggle(); + hookQuickSearch(); + highlightLocationTarget(); + + $('ul.link-list a').bind( "click", highlightClickTarget ); +}); diff --git a/doc/app/js/jquery.js b/doc/app/js/jquery.js new file mode 100644 index 0000000..afe9e74 --- /dev/null +++ b/doc/app/js/jquery.js @@ -0,0 +1,32 @@ +/* + * jQuery 1.2.6 - New Wave Javascript + * + * Copyright (c) 2008 John Resig (jquery.com) + * Dual licensed under the MIT (MIT-LICENSE.txt) + * and GPL (GPL-LICENSE.txt) licenses. + * + * $Date: 2008-09-25 09:50:52 -0700 (Thu, 25 Sep 2008) $ + * $Rev: 38 $ + */ +(function(){var _jQuery=window.jQuery,_$=window.$;var jQuery=window.jQuery=window.$=function(selector,context){return new jQuery.fn.init(selector,context);};var quickExpr=/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/,isSimple=/^.[^:#\[\.]*$/,undefined;jQuery.fn=jQuery.prototype={init:function(selector,context){selector=selector||document;if(selector.nodeType){this[0]=selector;this.length=1;return this;}if(typeof selector=="string"){var match=quickExpr.exec(selector);if(match&&(match[1]||!context)){if(match[1])selector=jQuery.clean([match[1]],context);else{var elem=document.getElementById(match[3]);if(elem){if(elem.id!=match[3])return jQuery().find(selector);return jQuery(elem);}selector=[];}}else +return jQuery(context).find(selector);}else if(jQuery.isFunction(selector))return jQuery(document)[jQuery.fn.ready?"ready":"load"](selector);return this.setArray(jQuery.makeArray(selector));},jquery:"1.2.6",size:function(){return this.length;},length:0,get:function(num){return num==undefined?jQuery.makeArray(this):this[num];},pushStack:function(elems){var ret=jQuery(elems);ret.prevObject=this;return ret;},setArray:function(elems){this.length=0;Array.prototype.push.apply(this,elems);return this;},each:function(callback,args){return jQuery.each(this,callback,args);},index:function(elem){var ret=-1;return jQuery.inArray(elem&&elem.jquery?elem[0]:elem,this);},attr:function(name,value,type){var options=name;if(name.constructor==String)if(value===undefined)return this[0]&&jQuery[type||"attr"](this[0],name);else{options={};options[name]=value;}return this.each(function(i){for(name in options)jQuery.attr(type?this.style:this,name,jQuery.prop(this,options[name],type,i,name));});},css:function(key,value){if((key=='width'||key=='height')&&parseFloat(value)<0)value=undefined;return this.attr(key,value,"curCSS");},text:function(text){if(typeof text!="object"&&text!=null)return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(text));var ret="";jQuery.each(text||this,function(){jQuery.each(this.childNodes,function(){if(this.nodeType!=8)ret+=this.nodeType!=1?this.nodeValue:jQuery.fn.text([this]);});});return ret;},wrapAll:function(html){if(this[0])jQuery(html,this[0].ownerDocument).clone().insertBefore(this[0]).map(function(){var elem=this;while(elem.firstChild)elem=elem.firstChild;return elem;}).append(this);return this;},wrapInner:function(html){return this.each(function(){jQuery(this).contents().wrapAll(html);});},wrap:function(html){return this.each(function(){jQuery(this).wrapAll(html);});},append:function(){return this.domManip(arguments,true,false,function(elem){if(this.nodeType==1)this.appendChild(elem);});},prepend:function(){return this.domManip(arguments,true,true,function(elem){if(this.nodeType==1)this.insertBefore(elem,this.firstChild);});},before:function(){return this.domManip(arguments,false,false,function(elem){this.parentNode.insertBefore(elem,this);});},after:function(){return this.domManip(arguments,false,true,function(elem){this.parentNode.insertBefore(elem,this.nextSibling);});},end:function(){return this.prevObject||jQuery([]);},find:function(selector){var elems=jQuery.map(this,function(elem){return jQuery.find(selector,elem);});return this.pushStack(/[^+>] [^+>]/.test(selector)||selector.indexOf("..")>-1?jQuery.unique(elems):elems);},clone:function(events){var ret=this.map(function(){if(jQuery.browser.msie&&!jQuery.isXMLDoc(this)){var clone=this.cloneNode(true),container=document.createElement("div");container.appendChild(clone);return jQuery.clean([container.innerHTML])[0];}else +return this.cloneNode(true);});var clone=ret.find("*").andSelf().each(function(){if(this[expando]!=undefined)this[expando]=null;});if(events===true)this.find("*").andSelf().each(function(i){if(this.nodeType==3)return;var events=jQuery.data(this,"events");for(var type in events)for(var handler in events[type])jQuery.event.add(clone[i],type,events[type][handler],events[type][handler].data);});return ret;},filter:function(selector){return this.pushStack(jQuery.isFunction(selector)&&jQuery.grep(this,function(elem,i){return selector.call(elem,i);})||jQuery.multiFilter(selector,this));},not:function(selector){if(selector.constructor==String)if(isSimple.test(selector))return this.pushStack(jQuery.multiFilter(selector,this,true));else +selector=jQuery.multiFilter(selector,this);var isArrayLike=selector.length&&selector[selector.length-1]!==undefined&&!selector.nodeType;return this.filter(function(){return isArrayLike?jQuery.inArray(this,selector)<0:this!=selector;});},add:function(selector){return this.pushStack(jQuery.unique(jQuery.merge(this.get(),typeof selector=='string'?jQuery(selector):jQuery.makeArray(selector))));},is:function(selector){return!!selector&&jQuery.multiFilter(selector,this).length>0;},hasClass:function(selector){return this.is("."+selector);},val:function(value){if(value==undefined){if(this.length){var elem=this[0];if(jQuery.nodeName(elem,"select")){var index=elem.selectedIndex,values=[],options=elem.options,one=elem.type=="select-one";if(index<0)return null;for(var i=one?index:0,max=one?index+1:options.length;i=0||jQuery.inArray(this.name,value)>=0);else if(jQuery.nodeName(this,"select")){var values=jQuery.makeArray(value);jQuery("option",this).each(function(){this.selected=(jQuery.inArray(this.value,values)>=0||jQuery.inArray(this.text,values)>=0);});if(!values.length)this.selectedIndex=-1;}else +this.value=value;});},html:function(value){return value==undefined?(this[0]?this[0].innerHTML:null):this.empty().append(value);},replaceWith:function(value){return this.after(value).remove();},eq:function(i){return this.slice(i,i+1);},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments));},map:function(callback){return this.pushStack(jQuery.map(this,function(elem,i){return callback.call(elem,i,elem);}));},andSelf:function(){return this.add(this.prevObject);},data:function(key,value){var parts=key.split(".");parts[1]=parts[1]?"."+parts[1]:"";if(value===undefined){var data=this.triggerHandler("getData"+parts[1]+"!",[parts[0]]);if(data===undefined&&this.length)data=jQuery.data(this[0],key);return data===undefined&&parts[1]?this.data(parts[0]):data;}else +return this.trigger("setData"+parts[1]+"!",[parts[0],value]).each(function(){jQuery.data(this,key,value);});},removeData:function(key){return this.each(function(){jQuery.removeData(this,key);});},domManip:function(args,table,reverse,callback){var clone=this.length>1,elems;return this.each(function(){if(!elems){elems=jQuery.clean(args,this.ownerDocument);if(reverse)elems.reverse();}var obj=this;if(table&&jQuery.nodeName(this,"table")&&jQuery.nodeName(elems[0],"tr"))obj=this.getElementsByTagName("tbody")[0]||this.appendChild(this.ownerDocument.createElement("tbody"));var scripts=jQuery([]);jQuery.each(elems,function(){var elem=clone?jQuery(this).clone(true)[0]:this;if(jQuery.nodeName(elem,"script"))scripts=scripts.add(elem);else{if(elem.nodeType==1)scripts=scripts.add(jQuery("script",elem).remove());callback.call(obj,elem);}});scripts.each(evalScript);});}};jQuery.fn.init.prototype=jQuery.fn;function evalScript(i,elem){if(elem.src)jQuery.ajax({url:elem.src,async:false,dataType:"script"});else +jQuery.globalEval(elem.text||elem.textContent||elem.innerHTML||"");if(elem.parentNode)elem.parentNode.removeChild(elem);}function now(){return+new Date;}jQuery.extend=jQuery.fn.extend=function(){var target=arguments[0]||{},i=1,length=arguments.length,deep=false,options;if(target.constructor==Boolean){deep=target;target=arguments[1]||{};i=2;}if(typeof target!="object"&&typeof target!="function")target={};if(length==i){target=this;--i;}for(;i-1;}},swap:function(elem,options,callback){var old={};for(var name in options){old[name]=elem.style[name];elem.style[name]=options[name];}callback.call(elem);for(var name in options)elem.style[name]=old[name];},css:function(elem,name,force){if(name=="width"||name=="height"){var val,props={position:"absolute",visibility:"hidden",display:"block"},which=name=="width"?["Left","Right"]:["Top","Bottom"];function getWH(){val=name=="width"?elem.offsetWidth:elem.offsetHeight;var padding=0,border=0;jQuery.each(which,function(){padding+=parseFloat(jQuery.curCSS(elem,"padding"+this,true))||0;border+=parseFloat(jQuery.curCSS(elem,"border"+this+"Width",true))||0;});val-=Math.round(padding+border);}if(jQuery(elem).is(":visible"))getWH();else +jQuery.swap(elem,props,getWH);return Math.max(0,val);}return jQuery.curCSS(elem,name,force);},curCSS:function(elem,name,force){var ret,style=elem.style;function color(elem){if(!jQuery.browser.safari)return false;var ret=defaultView.getComputedStyle(elem,null);return!ret||ret.getPropertyValue("color")=="";}if(name=="opacity"&&jQuery.browser.msie){ret=jQuery.attr(style,"opacity");return ret==""?"1":ret;}if(jQuery.browser.opera&&name=="display"){var save=style.outline;style.outline="0 solid black";style.outline=save;}if(name.match(/float/i))name=styleFloat;if(!force&&style&&style[name])ret=style[name];else if(defaultView.getComputedStyle){if(name.match(/float/i))name="float";name=name.replace(/([A-Z])/g,"-$1").toLowerCase();var computedStyle=defaultView.getComputedStyle(elem,null);if(computedStyle&&!color(elem))ret=computedStyle.getPropertyValue(name);else{var swap=[],stack=[],a=elem,i=0;for(;a&&color(a);a=a.parentNode)stack.unshift(a);for(;i]*?)\/>/g,function(all,front,tag){return tag.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?all:front+">";});var tags=jQuery.trim(elem).toLowerCase(),div=context.createElement("div");var wrap=!tags.indexOf("",""]||!tags.indexOf("",""]||tags.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
"]||!tags.indexOf("",""]||(!tags.indexOf("",""]||!tags.indexOf("",""]||jQuery.browser.msie&&[1,"div
","
"]||[0,"",""];div.innerHTML=wrap[1]+elem+wrap[2];while(wrap[0]--)div=div.lastChild;if(jQuery.browser.msie){var tbody=!tags.indexOf(""&&tags.indexOf("=0;--j)if(jQuery.nodeName(tbody[j],"tbody")&&!tbody[j].childNodes.length)tbody[j].parentNode.removeChild(tbody[j]);if(/^\s/.test(elem))div.insertBefore(context.createTextNode(elem.match(/^\s*/)[0]),div.firstChild);}elem=jQuery.makeArray(div.childNodes);}if(elem.length===0&&(!jQuery.nodeName(elem,"form")&&!jQuery.nodeName(elem,"select")))return;if(elem[0]==undefined||jQuery.nodeName(elem,"form")||elem.options)ret.push(elem);else +ret=jQuery.merge(ret,elem);});return ret;},attr:function(elem,name,value){if(!elem||elem.nodeType==3||elem.nodeType==8)return undefined;var notxml=!jQuery.isXMLDoc(elem),set=value!==undefined,msie=jQuery.browser.msie;name=notxml&&jQuery.props[name]||name;if(elem.tagName){var special=/href|src|style/.test(name);if(name=="selected"&&jQuery.browser.safari)elem.parentNode.selectedIndex;if(name in elem&¬xml&&!special){if(set){if(name=="type"&&jQuery.nodeName(elem,"input")&&elem.parentNode)throw"type property can't be changed";elem[name]=value;}if(jQuery.nodeName(elem,"form")&&elem.getAttributeNode(name))return elem.getAttributeNode(name).nodeValue;return elem[name];}if(msie&¬xml&&name=="style")return jQuery.attr(elem.style,"cssText",value);if(set)elem.setAttribute(name,""+value);var attr=msie&¬xml&&special?elem.getAttribute(name,2):elem.getAttribute(name);return attr===null?undefined:attr;}if(msie&&name=="opacity"){if(set){elem.zoom=1;elem.filter=(elem.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(value)+''=="NaN"?"":"alpha(opacity="+value*100+")");}return elem.filter&&elem.filter.indexOf("opacity=")>=0?(parseFloat(elem.filter.match(/opacity=([^)]*)/)[1])/100)+'':"";}name=name.replace(/-([a-z])/ig,function(all,letter){return letter.toUpperCase();});if(set)elem[name]=value;return elem[name];},trim:function(text){return(text||"").replace(/^\s+|\s+$/g,"");},makeArray:function(array){var ret=[];if(array!=null){var i=array.length;if(i==null||array.split||array.setInterval||array.call)ret[0]=array;else +while(i)ret[--i]=array[i];}return ret;},inArray:function(elem,array){for(var i=0,length=array.length;i*",this).remove();while(this.firstChild)this.removeChild(this.firstChild);}},function(name,fn){jQuery.fn[name]=function(){return this.each(fn,arguments);};});jQuery.each(["Height","Width"],function(i,name){var type=name.toLowerCase();jQuery.fn[type]=function(size){return this[0]==window?jQuery.browser.opera&&document.body["client"+name]||jQuery.browser.safari&&window["inner"+name]||document.compatMode=="CSS1Compat"&&document.documentElement["client"+name]||document.body["client"+name]:this[0]==document?Math.max(Math.max(document.body["scroll"+name],document.documentElement["scroll"+name]),Math.max(document.body["offset"+name],document.documentElement["offset"+name])):size==undefined?(this.length?jQuery.css(this[0],type):null):this.css(type,size.constructor==String?size:size+"px");};});function num(elem,prop){return elem[0]&&parseInt(jQuery.curCSS(elem[0],prop,true),10)||0;}var chars=jQuery.browser.safari&&parseInt(jQuery.browser.version)<417?"(?:[\\w*_-]|\\\\.)":"(?:[\\w\u0128-\uFFFF*_-]|\\\\.)",quickChild=new RegExp("^>\\s*("+chars+"+)"),quickID=new RegExp("^("+chars+"+)(#)("+chars+"+)"),quickClass=new RegExp("^([#.]?)("+chars+"*)");jQuery.extend({expr:{"":function(a,i,m){return m[2]=="*"||jQuery.nodeName(a,m[2]);},"#":function(a,i,m){return a.getAttribute("id")==m[2];},":":{lt:function(a,i,m){return im[3]-0;},nth:function(a,i,m){return m[3]-0==i;},eq:function(a,i,m){return m[3]-0==i;},first:function(a,i){return i==0;},last:function(a,i,m,r){return i==r.length-1;},even:function(a,i){return i%2==0;},odd:function(a,i){return i%2;},"first-child":function(a){return a.parentNode.getElementsByTagName("*")[0]==a;},"last-child":function(a){return jQuery.nth(a.parentNode.lastChild,1,"previousSibling")==a;},"only-child":function(a){return!jQuery.nth(a.parentNode.lastChild,2,"previousSibling");},parent:function(a){return a.firstChild;},empty:function(a){return!a.firstChild;},contains:function(a,i,m){return(a.textContent||a.innerText||jQuery(a).text()||"").indexOf(m[3])>=0;},visible:function(a){return"hidden"!=a.type&&jQuery.css(a,"display")!="none"&&jQuery.css(a,"visibility")!="hidden";},hidden:function(a){return"hidden"==a.type||jQuery.css(a,"display")=="none"||jQuery.css(a,"visibility")=="hidden";},enabled:function(a){return!a.disabled;},disabled:function(a){return a.disabled;},checked:function(a){return a.checked;},selected:function(a){return a.selected||jQuery.attr(a,"selected");},text:function(a){return"text"==a.type;},radio:function(a){return"radio"==a.type;},checkbox:function(a){return"checkbox"==a.type;},file:function(a){return"file"==a.type;},password:function(a){return"password"==a.type;},submit:function(a){return"submit"==a.type;},image:function(a){return"image"==a.type;},reset:function(a){return"reset"==a.type;},button:function(a){return"button"==a.type||jQuery.nodeName(a,"button");},input:function(a){return/input|select|textarea|button/i.test(a.nodeName);},has:function(a,i,m){return jQuery.find(m[3],a).length;},header:function(a){return/h\d/i.test(a.nodeName);},animated:function(a){return jQuery.grep(jQuery.timers,function(fn){return a==fn.elem;}).length;}}},parse:[/^(\[) *@?([\w-]+) *([!*$^~=]*) *('?"?)(.*?)\4 *\]/,/^(:)([\w-]+)\("?'?(.*?(\(.*?\))?[^(]*?)"?'?\)/,new RegExp("^([:.#]*)("+chars+"+)")],multiFilter:function(expr,elems,not){var old,cur=[];while(expr&&expr!=old){old=expr;var f=jQuery.filter(expr,elems,not);expr=f.t.replace(/^\s*,\s*/,"");cur=not?elems=f.r:jQuery.merge(cur,f.r);}return cur;},find:function(t,context){if(typeof t!="string")return[t];if(context&&context.nodeType!=1&&context.nodeType!=9)return[];context=context||document;var ret=[context],done=[],last,nodeName;while(t&&last!=t){var r=[];last=t;t=jQuery.trim(t);var foundToken=false,re=quickChild,m=re.exec(t);if(m){nodeName=m[1].toUpperCase();for(var i=0;ret[i];i++)for(var c=ret[i].firstChild;c;c=c.nextSibling)if(c.nodeType==1&&(nodeName=="*"||c.nodeName.toUpperCase()==nodeName))r.push(c);ret=r;t=t.replace(re,"");if(t.indexOf(" ")==0)continue;foundToken=true;}else{re=/^([>+~])\s*(\w*)/i;if((m=re.exec(t))!=null){r=[];var merge={};nodeName=m[2].toUpperCase();m=m[1];for(var j=0,rl=ret.length;j=0;if(!not&&pass||not&&!pass)tmp.push(r[i]);}return tmp;},filter:function(t,r,not){var last;while(t&&t!=last){last=t;var p=jQuery.parse,m;for(var i=0;p[i];i++){m=p[i].exec(t);if(m){t=t.substring(m[0].length);m[2]=m[2].replace(/\\/g,"");break;}}if(!m)break;if(m[1]==":"&&m[2]=="not")r=isSimple.test(m[3])?jQuery.filter(m[3],r,true).r:jQuery(r).not(m[3]);else if(m[1]==".")r=jQuery.classFilter(r,m[2],not);else if(m[1]=="["){var tmp=[],type=m[3];for(var i=0,rl=r.length;i=0)^not)tmp.push(a);}r=tmp;}else if(m[1]==":"&&m[2]=="nth-child"){var merge={},tmp=[],test=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(m[3]=="even"&&"2n"||m[3]=="odd"&&"2n+1"||!/\D/.test(m[3])&&"0n+"+m[3]||m[3]),first=(test[1]+(test[2]||1))-0,last=test[3]-0;for(var i=0,rl=r.length;i=0)add=true;if(add^not)tmp.push(node);}r=tmp;}else{var fn=jQuery.expr[m[1]];if(typeof fn=="object")fn=fn[m[2]];if(typeof fn=="string")fn=eval("false||function(a,i){return "+fn+";}");r=jQuery.grep(r,function(elem,i){return fn(elem,i,m,r);},not);}}return{r:r,t:t};},dir:function(elem,dir){var matched=[],cur=elem[dir];while(cur&&cur!=document){if(cur.nodeType==1)matched.push(cur);cur=cur[dir];}return matched;},nth:function(cur,result,dir,elem){result=result||1;var num=0;for(;cur;cur=cur[dir])if(cur.nodeType==1&&++num==result)break;return cur;},sibling:function(n,elem){var r=[];for(;n;n=n.nextSibling){if(n.nodeType==1&&n!=elem)r.push(n);}return r;}});jQuery.event={add:function(elem,types,handler,data){if(elem.nodeType==3||elem.nodeType==8)return;if(jQuery.browser.msie&&elem.setInterval)elem=window;if(!handler.guid)handler.guid=this.guid++;if(data!=undefined){var fn=handler;handler=this.proxy(fn,function(){return fn.apply(this,arguments);});handler.data=data;}var events=jQuery.data(elem,"events")||jQuery.data(elem,"events",{}),handle=jQuery.data(elem,"handle")||jQuery.data(elem,"handle",function(){if(typeof jQuery!="undefined"&&!jQuery.event.triggered)return jQuery.event.handle.apply(arguments.callee.elem,arguments);});handle.elem=elem;jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];handler.type=parts[1];var handlers=events[type];if(!handlers){handlers=events[type]={};if(!jQuery.event.special[type]||jQuery.event.special[type].setup.call(elem)===false){if(elem.addEventListener)elem.addEventListener(type,handle,false);else if(elem.attachEvent)elem.attachEvent("on"+type,handle);}}handlers[handler.guid]=handler;jQuery.event.global[type]=true;});elem=null;},guid:1,global:{},remove:function(elem,types,handler){if(elem.nodeType==3||elem.nodeType==8)return;var events=jQuery.data(elem,"events"),ret,index;if(events){if(types==undefined||(typeof types=="string"&&types.charAt(0)=="."))for(var type in events)this.remove(elem,type+(types||""));else{if(types.type){handler=types.handler;types=types.type;}jQuery.each(types.split(/\s+/),function(index,type){var parts=type.split(".");type=parts[0];if(events[type]){if(handler)delete events[type][handler.guid];else +for(handler in events[type])if(!parts[1]||events[type][handler].type==parts[1])delete events[type][handler];for(ret in events[type])break;if(!ret){if(!jQuery.event.special[type]||jQuery.event.special[type].teardown.call(elem)===false){if(elem.removeEventListener)elem.removeEventListener(type,jQuery.data(elem,"handle"),false);else if(elem.detachEvent)elem.detachEvent("on"+type,jQuery.data(elem,"handle"));}ret=null;delete events[type];}}});}for(ret in events)break;if(!ret){var handle=jQuery.data(elem,"handle");if(handle)handle.elem=null;jQuery.removeData(elem,"events");jQuery.removeData(elem,"handle");}}},trigger:function(type,data,elem,donative,extra){data=jQuery.makeArray(data);if(type.indexOf("!")>=0){type=type.slice(0,-1);var exclusive=true;}if(!elem){if(this.global[type])jQuery("*").add([window,document]).trigger(type,data);}else{if(elem.nodeType==3||elem.nodeType==8)return undefined;var val,ret,fn=jQuery.isFunction(elem[type]||null),event=!data[0]||!data[0].preventDefault;if(event){data.unshift({type:type,target:elem,preventDefault:function(){},stopPropagation:function(){},timeStamp:now()});data[0][expando]=true;}data[0].type=type;if(exclusive)data[0].exclusive=true;var handle=jQuery.data(elem,"handle");if(handle)val=handle.apply(elem,data);if((!fn||(jQuery.nodeName(elem,'a')&&type=="click"))&&elem["on"+type]&&elem["on"+type].apply(elem,data)===false)val=false;if(event)data.shift();if(extra&&jQuery.isFunction(extra)){ret=extra.apply(elem,val==null?data:data.concat(val));if(ret!==undefined)val=ret;}if(fn&&donative!==false&&val!==false&&!(jQuery.nodeName(elem,'a')&&type=="click")){this.triggered=true;try{elem[type]();}catch(e){}}this.triggered=false;}return val;},handle:function(event){var val,ret,namespace,all,handlers;event=arguments[0]=jQuery.event.fix(event||window.event);namespace=event.type.split(".");event.type=namespace[0];namespace=namespace[1];all=!namespace&&!event.exclusive;handlers=(jQuery.data(this,"events")||{})[event.type];for(var j in handlers){var handler=handlers[j];if(all||handler.type==namespace){event.handler=handler;event.data=handler.data;ret=handler.apply(this,arguments);if(val!==false)val=ret;if(ret===false){event.preventDefault();event.stopPropagation();}}}return val;},fix:function(event){if(event[expando]==true)return event;var originalEvent=event;event={originalEvent:originalEvent};var props="altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target timeStamp toElement type view wheelDelta which".split(" ");for(var i=props.length;i;i--)event[props[i]]=originalEvent[props[i]];event[expando]=true;event.preventDefault=function(){if(originalEvent.preventDefault)originalEvent.preventDefault();originalEvent.returnValue=false;};event.stopPropagation=function(){if(originalEvent.stopPropagation)originalEvent.stopPropagation();originalEvent.cancelBubble=true;};event.timeStamp=event.timeStamp||now();if(!event.target)event.target=event.srcElement||document;if(event.target.nodeType==3)event.target=event.target.parentNode;if(!event.relatedTarget&&event.fromElement)event.relatedTarget=event.fromElement==event.target?event.toElement:event.fromElement;if(event.pageX==null&&event.clientX!=null){var doc=document.documentElement,body=document.body;event.pageX=event.clientX+(doc&&doc.scrollLeft||body&&body.scrollLeft||0)-(doc.clientLeft||0);event.pageY=event.clientY+(doc&&doc.scrollTop||body&&body.scrollTop||0)-(doc.clientTop||0);}if(!event.which&&((event.charCode||event.charCode===0)?event.charCode:event.keyCode))event.which=event.charCode||event.keyCode;if(!event.metaKey&&event.ctrlKey)event.metaKey=event.ctrlKey;if(!event.which&&event.button)event.which=(event.button&1?1:(event.button&2?3:(event.button&4?2:0)));return event;},proxy:function(fn,proxy){proxy.guid=fn.guid=fn.guid||proxy.guid||this.guid++;return proxy;},special:{ready:{setup:function(){bindReady();return;},teardown:function(){return;}},mouseenter:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseover",jQuery.event.special.mouseenter.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseover",jQuery.event.special.mouseenter.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseenter";return jQuery.event.handle.apply(this,arguments);}},mouseleave:{setup:function(){if(jQuery.browser.msie)return false;jQuery(this).bind("mouseout",jQuery.event.special.mouseleave.handler);return true;},teardown:function(){if(jQuery.browser.msie)return false;jQuery(this).unbind("mouseout",jQuery.event.special.mouseleave.handler);return true;},handler:function(event){if(withinElement(event,this))return true;event.type="mouseleave";return jQuery.event.handle.apply(this,arguments);}}}};jQuery.fn.extend({bind:function(type,data,fn){return type=="unload"?this.one(type,data,fn):this.each(function(){jQuery.event.add(this,type,fn||data,fn&&data);});},one:function(type,data,fn){var one=jQuery.event.proxy(fn||data,function(event){jQuery(this).unbind(event,one);return(fn||data).apply(this,arguments);});return this.each(function(){jQuery.event.add(this,type,one,fn&&data);});},unbind:function(type,fn){return this.each(function(){jQuery.event.remove(this,type,fn);});},trigger:function(type,data,fn){return this.each(function(){jQuery.event.trigger(type,data,this,true,fn);});},triggerHandler:function(type,data,fn){return this[0]&&jQuery.event.trigger(type,data,this[0],false,fn);},toggle:function(fn){var args=arguments,i=1;while(i=0){var selector=url.slice(off,url.length);url=url.slice(0,off);}callback=callback||function(){};var type="GET";if(params)if(jQuery.isFunction(params)){callback=params;params=null;}else{params=jQuery.param(params);type="POST";}var self=this;jQuery.ajax({url:url,type:type,dataType:"html",data:params,complete:function(res,status){if(status=="success"||status=="notmodified")self.html(selector?jQuery("
").append(res.responseText.replace(//g,"")).find(selector):res.responseText);self.each(callback,[res.responseText,status,res]);}});return this;},serialize:function(){return jQuery.param(this.serializeArray());},serializeArray:function(){return this.map(function(){return jQuery.nodeName(this,"form")?jQuery.makeArray(this.elements):this;}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password/i.test(this.type));}).map(function(i,elem){var val=jQuery(this).val();return val==null?null:val.constructor==Array?jQuery.map(val,function(val,i){return{name:elem.name,value:val};}):{name:elem.name,value:val};}).get();}});jQuery.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(i,o){jQuery.fn[o]=function(f){return this.bind(o,f);};});var jsc=now();jQuery.extend({get:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data=null;}return jQuery.ajax({type:"GET",url:url,data:data,success:callback,dataType:type});},getScript:function(url,callback){return jQuery.get(url,null,callback,"script");},getJSON:function(url,data,callback){return jQuery.get(url,data,callback,"json");},post:function(url,data,callback,type){if(jQuery.isFunction(data)){callback=data;data={};}return jQuery.ajax({type:"POST",url:url,data:data,success:callback,dataType:type});},ajaxSetup:function(settings){jQuery.extend(jQuery.ajaxSettings,settings);},ajaxSettings:{url:location.href,global:true,type:"GET",timeout:0,contentType:"application/x-www-form-urlencoded",processData:true,async:true,data:null,username:null,password:null,accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(s){s=jQuery.extend(true,s,jQuery.extend(true,{},jQuery.ajaxSettings,s));var jsonp,jsre=/=\?(&|$)/g,status,data,type=s.type.toUpperCase();if(s.data&&s.processData&&typeof s.data!="string")s.data=jQuery.param(s.data);if(s.dataType=="jsonp"){if(type=="GET"){if(!s.url.match(jsre))s.url+=(s.url.match(/\?/)?"&":"?")+(s.jsonp||"callback")+"=?";}else if(!s.data||!s.data.match(jsre))s.data=(s.data?s.data+"&":"")+(s.jsonp||"callback")+"=?";s.dataType="json";}if(s.dataType=="json"&&(s.data&&s.data.match(jsre)||s.url.match(jsre))){jsonp="jsonp"+jsc++;if(s.data)s.data=(s.data+"").replace(jsre,"="+jsonp+"$1");s.url=s.url.replace(jsre,"="+jsonp+"$1");s.dataType="script";window[jsonp]=function(tmp){data=tmp;success();complete();window[jsonp]=undefined;try{delete window[jsonp];}catch(e){}if(head)head.removeChild(script);};}if(s.dataType=="script"&&s.cache==null)s.cache=false;if(s.cache===false&&type=="GET"){var ts=now();var ret=s.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+ts+"$2");s.url=ret+((ret==s.url)?(s.url.match(/\?/)?"&":"?")+"_="+ts:"");}if(s.data&&type=="GET"){s.url+=(s.url.match(/\?/)?"&":"?")+s.data;s.data=null;}if(s.global&&!jQuery.active++)jQuery.event.trigger("ajaxStart");var remote=/^(?:\w+:)?\/\/([^\/?#]+)/;if(s.dataType=="script"&&type=="GET"&&remote.test(s.url)&&remote.exec(s.url)[1]!=location.host){var head=document.getElementsByTagName("head")[0];var script=document.createElement("script");script.src=s.url;if(s.scriptCharset)script.charset=s.scriptCharset;if(!jsonp){var done=false;script.onload=script.onreadystatechange=function(){if(!done&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){done=true;success();complete();head.removeChild(script);}};}head.appendChild(script);return undefined;}var requestDone=false;var xhr=window.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest();if(s.username)xhr.open(type,s.url,s.async,s.username,s.password);else +xhr.open(type,s.url,s.async);try{if(s.data)xhr.setRequestHeader("Content-Type",s.contentType);if(s.ifModified)xhr.setRequestHeader("If-Modified-Since",jQuery.lastModified[s.url]||"Thu, 01 Jan 1970 00:00:00 GMT");xhr.setRequestHeader("X-Requested-With","XMLHttpRequest");xhr.setRequestHeader("Accept",s.dataType&&s.accepts[s.dataType]?s.accepts[s.dataType]+", */*":s.accepts._default);}catch(e){}if(s.beforeSend&&s.beforeSend(xhr,s)===false){s.global&&jQuery.active--;xhr.abort();return false;}if(s.global)jQuery.event.trigger("ajaxSend",[xhr,s]);var onreadystatechange=function(isTimeout){if(!requestDone&&xhr&&(xhr.readyState==4||isTimeout=="timeout")){requestDone=true;if(ival){clearInterval(ival);ival=null;}status=isTimeout=="timeout"&&"timeout"||!jQuery.httpSuccess(xhr)&&"error"||s.ifModified&&jQuery.httpNotModified(xhr,s.url)&&"notmodified"||"success";if(status=="success"){try{data=jQuery.httpData(xhr,s.dataType,s.dataFilter);}catch(e){status="parsererror";}}if(status=="success"){var modRes;try{modRes=xhr.getResponseHeader("Last-Modified");}catch(e){}if(s.ifModified&&modRes)jQuery.lastModified[s.url]=modRes;if(!jsonp)success();}else +jQuery.handleError(s,xhr,status);complete();if(s.async)xhr=null;}};if(s.async){var ival=setInterval(onreadystatechange,13);if(s.timeout>0)setTimeout(function(){if(xhr){xhr.abort();if(!requestDone)onreadystatechange("timeout");}},s.timeout);}try{xhr.send(s.data);}catch(e){jQuery.handleError(s,xhr,null,e);}if(!s.async)onreadystatechange();function success(){if(s.success)s.success(data,status);if(s.global)jQuery.event.trigger("ajaxSuccess",[xhr,s]);}function complete(){if(s.complete)s.complete(xhr,status);if(s.global)jQuery.event.trigger("ajaxComplete",[xhr,s]);if(s.global&&!--jQuery.active)jQuery.event.trigger("ajaxStop");}return xhr;},handleError:function(s,xhr,status,e){if(s.error)s.error(xhr,status,e);if(s.global)jQuery.event.trigger("ajaxError",[xhr,s,e]);},active:0,httpSuccess:function(xhr){try{return!xhr.status&&location.protocol=="file:"||(xhr.status>=200&&xhr.status<300)||xhr.status==304||xhr.status==1223||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpNotModified:function(xhr,url){try{var xhrRes=xhr.getResponseHeader("Last-Modified");return xhr.status==304||xhrRes==jQuery.lastModified[url]||jQuery.browser.safari&&xhr.status==undefined;}catch(e){}return false;},httpData:function(xhr,type,filter){var ct=xhr.getResponseHeader("content-type"),xml=type=="xml"||!type&&ct&&ct.indexOf("xml")>=0,data=xml?xhr.responseXML:xhr.responseText;if(xml&&data.documentElement.tagName=="parsererror")throw"parsererror";if(filter)data=filter(data,type);if(type=="script")jQuery.globalEval(data);if(type=="json")data=eval("("+data+")");return data;},param:function(a){var s=[];if(a.constructor==Array||a.jquery)jQuery.each(a,function(){s.push(encodeURIComponent(this.name)+"="+encodeURIComponent(this.value));});else +for(var j in a)if(a[j]&&a[j].constructor==Array)jQuery.each(a[j],function(){s.push(encodeURIComponent(j)+"="+encodeURIComponent(this));});else +s.push(encodeURIComponent(j)+"="+encodeURIComponent(jQuery.isFunction(a[j])?a[j]():a[j]));return s.join("&").replace(/%20/g,"+");}});jQuery.fn.extend({show:function(speed,callback){return speed?this.animate({height:"show",width:"show",opacity:"show"},speed,callback):this.filter(":hidden").each(function(){this.style.display=this.oldblock||"";if(jQuery.css(this,"display")=="none"){var elem=jQuery("<"+this.tagName+" />").appendTo("body");this.style.display=elem.css("display");if(this.style.display=="none")this.style.display="block";elem.remove();}}).end();},hide:function(speed,callback){return speed?this.animate({height:"hide",width:"hide",opacity:"hide"},speed,callback):this.filter(":visible").each(function(){this.oldblock=this.oldblock||jQuery.css(this,"display");this.style.display="none";}).end();},_toggle:jQuery.fn.toggle,toggle:function(fn,fn2){return jQuery.isFunction(fn)&&jQuery.isFunction(fn2)?this._toggle.apply(this,arguments):fn?this.animate({height:"toggle",width:"toggle",opacity:"toggle"},fn,fn2):this.each(function(){jQuery(this)[jQuery(this).is(":hidden")?"show":"hide"]();});},slideDown:function(speed,callback){return this.animate({height:"show"},speed,callback);},slideUp:function(speed,callback){return this.animate({height:"hide"},speed,callback);},slideToggle:function(speed,callback){return this.animate({height:"toggle"},speed,callback);},fadeIn:function(speed,callback){return this.animate({opacity:"show"},speed,callback);},fadeOut:function(speed,callback){return this.animate({opacity:"hide"},speed,callback);},fadeTo:function(speed,to,callback){return this.animate({opacity:to},speed,callback);},animate:function(prop,speed,easing,callback){var optall=jQuery.speed(speed,easing,callback);return this[optall.queue===false?"each":"queue"](function(){if(this.nodeType!=1)return false;var opt=jQuery.extend({},optall),p,hidden=jQuery(this).is(":hidden"),self=this;for(p in prop){if(prop[p]=="hide"&&hidden||prop[p]=="show"&&!hidden)return opt.complete.call(this);if(p=="height"||p=="width"){opt.display=jQuery.css(this,"display");opt.overflow=this.style.overflow;}}if(opt.overflow!=null)this.style.overflow="hidden";opt.curAnim=jQuery.extend({},prop);jQuery.each(prop,function(name,val){var e=new jQuery.fx(self,opt,name);if(/toggle|show|hide/.test(val))e[val=="toggle"?hidden?"show":"hide":val](prop);else{var parts=val.toString().match(/^([+-]=)?([\d+-.]+)(.*)$/),start=e.cur(true)||0;if(parts){var end=parseFloat(parts[2]),unit=parts[3]||"px";if(unit!="px"){self.style[name]=(end||1)+unit;start=((end||1)/e.cur(true))*start;self.style[name]=start+unit;}if(parts[1])end=((parts[1]=="-="?-1:1)*end)+start;e.custom(start,end,unit);}else +e.custom(start,val,"");}});return true;});},queue:function(type,fn){if(jQuery.isFunction(type)||(type&&type.constructor==Array)){fn=type;type="fx";}if(!type||(typeof type=="string"&&!fn))return queue(this[0],type);return this.each(function(){if(fn.constructor==Array)queue(this,type,fn);else{queue(this,type).push(fn);if(queue(this,type).length==1)fn.call(this);}});},stop:function(clearQueue,gotoEnd){var timers=jQuery.timers;if(clearQueue)this.queue([]);this.each(function(){for(var i=timers.length-1;i>=0;i--)if(timers[i].elem==this){if(gotoEnd)timers[i](true);timers.splice(i,1);}});if(!gotoEnd)this.dequeue();return this;}});var queue=function(elem,type,array){if(elem){type=type||"fx";var q=jQuery.data(elem,type+"queue");if(!q||array)q=jQuery.data(elem,type+"queue",jQuery.makeArray(array));}return q;};jQuery.fn.dequeue=function(type){type=type||"fx";return this.each(function(){var q=queue(this,type);q.shift();if(q.length)q[0].call(this);});};jQuery.extend({speed:function(speed,easing,fn){var opt=speed&&speed.constructor==Object?speed:{complete:fn||!fn&&easing||jQuery.isFunction(speed)&&speed,duration:speed,easing:fn&&easing||easing&&easing.constructor!=Function&&easing};opt.duration=(opt.duration&&opt.duration.constructor==Number?opt.duration:jQuery.fx.speeds[opt.duration])||jQuery.fx.speeds.def;opt.old=opt.complete;opt.complete=function(){if(opt.queue!==false)jQuery(this).dequeue();if(jQuery.isFunction(opt.old))opt.old.call(this);};return opt;},easing:{linear:function(p,n,firstNum,diff){return firstNum+diff*p;},swing:function(p,n,firstNum,diff){return((-Math.cos(p*Math.PI)/2)+0.5)*diff+firstNum;}},timers:[],timerId:null,fx:function(elem,options,prop){this.options=options;this.elem=elem;this.prop=prop;if(!options.orig)options.orig={};}});jQuery.fx.prototype={update:function(){if(this.options.step)this.options.step.call(this.elem,this.now,this);(jQuery.fx.step[this.prop]||jQuery.fx.step._default)(this);if(this.prop=="height"||this.prop=="width")this.elem.style.display="block";},cur:function(force){if(this.elem[this.prop]!=null&&this.elem.style[this.prop]==null)return this.elem[this.prop];var r=parseFloat(jQuery.css(this.elem,this.prop,force));return r&&r>-10000?r:parseFloat(jQuery.curCSS(this.elem,this.prop))||0;},custom:function(from,to,unit){this.startTime=now();this.start=from;this.end=to;this.unit=unit||this.unit||"px";this.now=this.start;this.pos=this.state=0;this.update();var self=this;function t(gotoEnd){return self.step(gotoEnd);}t.elem=this.elem;jQuery.timers.push(t);if(jQuery.timerId==null){jQuery.timerId=setInterval(function(){var timers=jQuery.timers;for(var i=0;ithis.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var done=true;for(var i in this.options.curAnim)if(this.options.curAnim[i]!==true)done=false;if(done){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(jQuery.css(this.elem,"display")=="none")this.elem.style.display="block";}if(this.options.hide)this.elem.style.display="none";if(this.options.hide||this.options.show)for(var p in this.options.curAnim)jQuery.attr(this.elem.style,p,this.options.orig[p]);}if(done)this.options.complete.call(this.elem);return false;}else{var n=t-this.startTime;this.state=n/this.options.duration;this.pos=jQuery.easing[this.options.easing||(jQuery.easing.swing?"swing":"linear")](this.state,n,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update();}return true;}};jQuery.extend(jQuery.fx,{speeds:{slow:600,fast:200,def:400},step:{scrollLeft:function(fx){fx.elem.scrollLeft=fx.now;},scrollTop:function(fx){fx.elem.scrollTop=fx.now;},opacity:function(fx){jQuery.attr(fx.elem.style,"opacity",fx.now);},_default:function(fx){fx.elem.style[fx.prop]=fx.now+fx.unit;}}});jQuery.fn.offset=function(){var left=0,top=0,elem=this[0],results;if(elem)with(jQuery.browser){var parent=elem.parentNode,offsetChild=elem,offsetParent=elem.offsetParent,doc=elem.ownerDocument,safari2=safari&&parseInt(version)<522&&!/adobeair/i.test(userAgent),css=jQuery.curCSS,fixed=css(elem,"position")=="fixed";if(elem.getBoundingClientRect){var box=elem.getBoundingClientRect();add(box.left+Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),box.top+Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));add(-doc.documentElement.clientLeft,-doc.documentElement.clientTop);}else{add(elem.offsetLeft,elem.offsetTop);while(offsetParent){add(offsetParent.offsetLeft,offsetParent.offsetTop);if(mozilla&&!/^t(able|d|h)$/i.test(offsetParent.tagName)||safari&&!safari2)border(offsetParent);if(!fixed&&css(offsetParent,"position")=="fixed")fixed=true;offsetChild=/^body$/i.test(offsetParent.tagName)?offsetChild:offsetParent;offsetParent=offsetParent.offsetParent;}while(parent&&parent.tagName&&!/^body|html$/i.test(parent.tagName)){if(!/^inline|table.*$/i.test(css(parent,"display")))add(-parent.scrollLeft,-parent.scrollTop);if(mozilla&&css(parent,"overflow")!="visible")border(parent);parent=parent.parentNode;}if((safari2&&(fixed||css(offsetChild,"position")=="absolute"))||(mozilla&&css(offsetChild,"position")!="absolute"))add(-doc.body.offsetLeft,-doc.body.offsetTop);if(fixed)add(Math.max(doc.documentElement.scrollLeft,doc.body.scrollLeft),Math.max(doc.documentElement.scrollTop,doc.body.scrollTop));}results={top:top,left:left};}function border(elem){add(jQuery.curCSS(elem,"borderLeftWidth",true),jQuery.curCSS(elem,"borderTopWidth",true));}function add(l,t){left+=parseInt(l,10)||0;top+=parseInt(t,10)||0;}return results;};jQuery.fn.extend({position:function(){var left=0,top=0,results;if(this[0]){var offsetParent=this.offsetParent(),offset=this.offset(),parentOffset=/^body|html$/i.test(offsetParent[0].tagName)?{top:0,left:0}:offsetParent.offset();offset.top-=num(this,'marginTop');offset.left-=num(this,'marginLeft');parentOffset.top+=num(offsetParent,'borderTopWidth');parentOffset.left+=num(offsetParent,'borderLeftWidth');results={top:offset.top-parentOffset.top,left:offset.left-parentOffset.left};}return results;},offsetParent:function(){var offsetParent=this[0].offsetParent;while(offsetParent&&(!/^body|html$/i.test(offsetParent.tagName)&&jQuery.css(offsetParent,'position')=='static'))offsetParent=offsetParent.offsetParent;return jQuery(offsetParent);}});jQuery.each(['Left','Top'],function(i,name){var method='scroll'+name;jQuery.fn[method]=function(val){if(!this[0])return;return val!=undefined?this.each(function(){this==window||this==document?window.scrollTo(!i?val:jQuery(window).scrollLeft(),i?val:jQuery(window).scrollTop()):this[method]=val;}):this[0]==window||this[0]==document?self[i?'pageYOffset':'pageXOffset']||jQuery.boxModel&&document.documentElement[method]||document.body[method]:this[0][method];};});jQuery.each(["Height","Width"],function(i,name){var tl=i?"Left":"Top",br=i?"Right":"Bottom";jQuery.fn["inner"+name]=function(){return this[name.toLowerCase()]()+num(this,"padding"+tl)+num(this,"padding"+br);};jQuery.fn["outer"+name]=function(margin){return this["inner"+name]()+num(this,"border"+tl+"Width")+num(this,"border"+br+"Width")+(margin?num(this,"margin"+tl)+num(this,"margin"+br):0);};});})(); \ No newline at end of file diff --git a/doc/app/js/quicksearch.js b/doc/app/js/quicksearch.js new file mode 100644 index 0000000..70dbd33 --- /dev/null +++ b/doc/app/js/quicksearch.js @@ -0,0 +1,114 @@ +/** + * + * JQuery QuickSearch - Hook up a form field to hide non-matching elements. + * $Id: quicksearch.js 53 2009-01-07 02:52:03Z deveiant $ + * + * Author: Michael Granger + * + */ +jQuery.fn.quicksearch = function( target, searchElems, options ) { + // console.debug( "Quicksearch fn" ); + + var settings = { + delay: 250, + clearButton: false, + highlightMatches: false, + focusOnLoad: false, + noSearchResultsIndicator: null + }; + if ( options ) $.extend( settings, options ); + + return jQuery(this).each( function() { + // console.debug( "Creating a new quicksearch on %o for %o", this, searchElems ); + new jQuery.quicksearch( this, searchElems, settings ); + }); +}; + + +jQuery.quicksearch = function( searchBox, searchElems, settings ) { + var timeout; + var boxdiv = $(searchBox).parents('div').eq(0); + + function init() { + setupKeyEventHandlers(); + focusOnLoad(); + }; + + function setupKeyEventHandlers() { + // console.debug( "Hooking up the 'keypress' event to %o", searchBox ); + $(searchBox). + unbind( 'keyup' ). + keyup( function(e) { return onSearchKey( e.keyCode ); }); + $(searchBox). + unbind( 'keypress' ). + keypress( function(e) { + switch( e.which ) { + // Execute the search on Enter, Tab, or Newline + case 9: + case 13: + case 10: + clearTimeout( timeout ); + e.preventDefault(); + doQuickSearch(); + break; + + // Allow backspace + case 8: + return true; + break; + + // Only allow valid search characters + default: + return validQSChar( e.charCode ); + } + }); + }; + + function focusOnLoad() { + if ( !settings.focusOnLoad ) return false; + $(searchBox).focus(); + }; + + function onSearchKey ( code ) { + clearTimeout( timeout ); + // console.debug( "...scheduling search." ); + timeout = setTimeout( doQuickSearch, settings.delay ); + }; + + function validQSChar( code ) { + var c = String.fromCharCode( code ); + return ( + (c == ':') || + (c >= 'a' && c <= 'z') || + (c >= 'A' && c <= 'Z') + ); + }; + + function doQuickSearch() { + var searchText = searchBox.value; + var pat = new RegExp( searchText, "im" ); + var shownCount = 0; + + if ( settings.noSearchResultsIndicator ) { + $('#' + settings.noSearchResultsIndicator).hide(); + } + + // All elements start out hidden + $(searchElems).each( function(index) { + var str = $(this).text(); + + if ( pat.test(str) ) { + shownCount += 1; + $(this).fadeIn(); + } else { + $(this).hide(); + } + }); + + if ( shownCount == 0 && settings.noSearchResultsIndicator ) { + $('#' + settings.noSearchResultsIndicator).slideDown(); + } + }; + + init(); +}; diff --git a/doc/app/js/thickbox-compressed.js b/doc/app/js/thickbox-compressed.js new file mode 100644 index 0000000..3a3fdae --- /dev/null +++ b/doc/app/js/thickbox-compressed.js @@ -0,0 +1,10 @@ +/* + * Thickbox 3 - One Box To Rule Them All. + * By Cody Lindley (http://www.codylindley.com) + * Copyright (c) 2007 cody lindley + * Licensed under the MIT License: http://www.opensource.org/licenses/mit-license.php +*/ + +var tb_pathToImage = "../images/loadingAnimation.gif"; + +eval(function(p,a,c,k,e,r){e=function(c){return(c35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('$(o).2S(9(){1u(\'a.18, 3n.18, 3i.18\');1w=1p 1t();1w.L=2H});9 1u(b){$(b).s(9(){6 t=X.Q||X.1v||M;6 a=X.u||X.23;6 g=X.1N||P;19(t,a,g);X.2E();H P})}9 19(d,f,g){3m{3(2t o.v.J.2i==="2g"){$("v","11").r({A:"28%",z:"28%"});$("11").r("22","2Z");3(o.1Y("1F")===M){$("v").q("<4 5=\'B\'><4 5=\'8\'>");$("#B").s(G)}}n{3(o.1Y("B")===M){$("v").q("<4 5=\'B\'><4 5=\'8\'>");$("#B").s(G)}}3(1K()){$("#B").1J("2B")}n{$("#B").1J("2z")}3(d===M){d=""}$("v").q("<4 5=\'K\'><1I L=\'"+1w.L+"\' />");$(\'#K\').2y();6 h;3(f.O("?")!==-1){h=f.3l(0,f.O("?"))}n{h=f}6 i=/\\.2s$|\\.2q$|\\.2m$|\\.2l$|\\.2k$/;6 j=h.1C().2h(i);3(j==\'.2s\'||j==\'.2q\'||j==\'.2m\'||j==\'.2l\'||j==\'.2k\'){1D="";1G="";14="";1z="";1x="";R="";1n="";1r=P;3(g){E=$("a[@1N="+g+"]").36();25(D=0;((D&1d;&1d;2T &2R;"}n{1D=E[D].Q;1G=E[D].u;14="<1e 5=\'1U\'>&1d;&1d;&2O; 2N"}}n{1r=1b;1n="1t "+(D+1)+" 2L "+(E.1c)}}}S=1p 1t();S.1g=9(){S.1g=M;6 a=2x();6 x=a[0]-1M;6 y=a[1]-1M;6 b=S.z;6 c=S.A;3(b>x){c=c*(x/b);b=x;3(c>y){b=b*(y/c);c=y}}n 3(c>y){b=b*(y/c);c=y;3(b>x){c=c*(x/b);b=x}}13=b+30;1a=c+2G;$("#8").q("<1I 5=\'2F\' L=\'"+f+"\' z=\'"+b+"\' A=\'"+c+"\' 23=\'"+d+"\'/>"+"<4 5=\'2D\'>"+d+"<4 5=\'2C\'>"+1n+14+R+"<4 5=\'2A\'>1l 1k 1j 1s");$("#Z").s(G);3(!(14==="")){9 12(){3($(o).N("s",12)){$(o).N("s",12)}$("#8").C();$("v").q("<4 5=\'8\'>");19(1D,1G,g);H P}$("#1U").s(12)}3(!(R==="")){9 1i(){$("#8").C();$("v").q("<4 5=\'8\'>");19(1z,1x,g);H P}$("#1X").s(1i)}o.1h=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}n 3(I==3k){3(!(R=="")){o.1h="";1i()}}n 3(I==3j){3(!(14=="")){o.1h="";12()}}};16();$("#K").C();$("#1L").s(G);$("#8").r({Y:"T"})};S.L=f}n{6 l=f.2r(/^[^\\?]+\\??/,\'\');6 m=2p(l);13=(m[\'z\']*1)+30||3h;1a=(m[\'A\']*1)+3g||3f;W=13-30;V=1a-3e;3(f.O(\'2j\')!=-1){1E=f.1B(\'3d\');$("#15").C();3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"<4 5=\'2e\'>1l 1k 1j 1s ")}n{$("#B").N();$("#8").q(" ")}}n{3($("#8").r("Y")!="T"){3(m[\'1A\']!="1b"){$("#8").q("<4 5=\'2f\'><4 5=\'1H\'>"+d+"<4 5=\'2e\'>1l 1k 1j 1s<4 5=\'F\' J=\'z:"+W+"p;A:"+V+"p\'>")}n{$("#B").N();$("#8").q("<4 5=\'F\' 3c=\'3b\' J=\'z:"+W+"p;A:"+V+"p;\'>")}}n{$("#F")[0].J.z=W+"p";$("#F")[0].J.A=V+"p";$("#F")[0].3a=0;$("#1H").11(d)}}$("#Z").s(G);3(f.O(\'37\')!=-1){$("#F").q($(\'#\'+m[\'26\']).1T());$("#8").24(9(){$(\'#\'+m[\'26\']).q($("#F").1T())});16();$("#K").C();$("#8").r({Y:"T"})}n 3(f.O(\'2j\')!=-1){16();3($.1q.35){$("#K").C();$("#8").r({Y:"T"})}}n{$("#F").34(f+="&1y="+(1p 33().32()),9(){16();$("#K").C();1u("#F a.18");$("#8").r({Y:"T"})})}}3(!m[\'1A\']){o.21=9(e){3(e==M){I=2w.2v}n{I=e.2u}3(I==27){G()}}}}31(e){}}9 1m(){$("#K").C();$("#8").r({Y:"T"})}9 G(){$("#2Y").N("s");$("#Z").N("s");$("#8").2X("2W",9(){$(\'#8,#B,#1F\').2V("24").N().C()});$("#K").C();3(2t o.v.J.2i=="2g"){$("v","11").r({A:"1Z",z:"1Z"});$("11").r("22","")}o.1h="";o.21="";H P}9 16(){$("#8").r({2U:\'-\'+20((13/2),10)+\'p\',z:13+\'p\'});3(!(1V.1q.2Q&&1V.1q.2P<7)){$("#8").r({38:\'-\'+20((1a/2),10)+\'p\'})}}9 2p(a){6 b={};3(!a){H b}6 c=a.1B(/[;&]/);25(6 i=0;i + + + + + + + File: album.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/lib/last_fm/artist_rb.html b/doc/app/lib/last_fm/artist_rb.html new file mode 100644 index 0000000..2cabce9 --- /dev/null +++ b/doc/app/lib/last_fm/artist_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: artist.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/lib/last_fm/chart_rb.html b/doc/app/lib/last_fm/chart_rb.html new file mode 100644 index 0000000..2d4d6b4 --- /dev/null +++ b/doc/app/lib/last_fm/chart_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: chart.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/lib/last_fm/request_rb.html b/doc/app/lib/last_fm/request_rb.html new file mode 100644 index 0000000..c9df5d2 --- /dev/null +++ b/doc/app/lib/last_fm/request_rb.html @@ -0,0 +1,56 @@ + + + + + + + + File: request.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-13 14:46:39 +0200
+ + +
Requires
+
+
    + +
  • json
  • + +
  • hashie
  • + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/lib/last_fm/track_rb.html b/doc/app/lib/last_fm/track_rb.html new file mode 100644 index 0000000..d5a0b18 --- /dev/null +++ b/doc/app/lib/last_fm/track_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: track.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 00:41:53 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/lib/last_fm/validator_rb.html b/doc/app/lib/last_fm/validator_rb.html new file mode 100644 index 0000000..88493f5 --- /dev/null +++ b/doc/app/lib/last_fm/validator_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: validator.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-08 03:11:10 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/lib/redis_queryable_rb.html b/doc/app/lib/redis_queryable_rb.html new file mode 100644 index 0000000..8471ead --- /dev/null +++ b/doc/app/lib/redis_queryable_rb.html @@ -0,0 +1,52 @@ + + + + + + + + File: redis_queryable.rb [Rails Application Documentation] + + + + + + + + + + +
+
+
Last Modified
+
2011-06-10 02:24:59 +0200
+ + +
Requires
+
+
    + +
+
+ + + +
+
+ +
+ +
+

Description

+ +
+ +
+ + + diff --git a/doc/app/rdoc.css b/doc/app/rdoc.css new file mode 100644 index 0000000..ffe9960 --- /dev/null +++ b/doc/app/rdoc.css @@ -0,0 +1,706 @@ +/* + * "Darkfish" Rdoc CSS + * $Id: rdoc.css 54 2009-01-27 01:09:48Z deveiant $ + * + * Author: Michael Granger + * + */ + +/* Base Green is: #6C8C22 */ + +*{ padding: 0; margin: 0; } + +body { + background: #efefef; + font: 14px "Helvetica Neue", Helvetica, Tahoma, sans-serif; +} +body.class, body.module, body.file { + margin-left: 40px; +} +body.file-popup { + font-size: 90%; + margin-left: 0; +} + +h1 { + font-size: 300%; + text-shadow: rgba(135,145,135,0.65) 2px 2px 3px; + color: #6C8C22; +} +h2,h3,h4 { margin-top: 1.5em; } + +:link, +:visited { + color: #6C8C22; + text-decoration: none; +} +:link:hover, +:visited:hover { + border-bottom: 1px dotted #6C8C22; +} + +pre { + background: #ddd; + padding: 0.5em 0; +} + + +/* @group Generic Classes */ + +.initially-hidden { + display: none; +} + +.quicksearch-field { + width: 98%; + background: #ddd; + border: 1px solid #aaa; + height: 1.5em; + -webkit-border-radius: 4px; +} +.quicksearch-field:focus { + background: #f1edba; +} + +.missing-docs { + font-size: 120%; + background: white url(images/wrench_orange.png) no-repeat 4px center; + color: #ccc; + line-height: 2em; + border: 1px solid #d00; + opacity: 1; + padding-left: 20px; + text-indent: 24px; + letter-spacing: 3px; + font-weight: bold; + -webkit-border-radius: 5px; + -moz-border-radius: 5px; +} + +.target-section { + border: 2px solid #dcce90; + border-left-width: 8px; + padding: 0 1em; + background: #fff3c2; +} + +/* @end */ + + +/* @group Index Page, Standalone file pages */ +body.indexpage { + margin: 1em 3em; +} +body.indexpage p, +body.indexpage div, +body.file p { + margin: 1em 0; +} + +.indexpage ul, +.file #documentation ul { + line-height: 160%; + list-style: none; +} +.indexpage ul :link, +.indexpage ul :visited { + font-size: 16px; +} + +.indexpage li, +.file #documentation li { + padding-left: 20px; + background: url(images/bullet_black.png) no-repeat left 4px; +} +.indexpage li.module { + background: url(images/package.png) no-repeat left 4px; +} +.indexpage li.class { + background: url(images/ruby.png) no-repeat left 4px; +} +.indexpage li.file { + background: url(images/page_white_text.png) no-repeat left 4px; +} +.file li p, +.indexpage li p { + margin: 0 0; +} + +/* @end */ + +/* @group Top-Level Structure */ + +.class #metadata, +.file #metadata, +.module #metadata { + float: left; + width: 260px; +} + +.class #documentation, +.file #documentation, +.module #documentation { + margin: 2em 1em 5em 300px; + min-width: 340px; +} + +.file #metadata { + margin: 0.8em; +} + +#validator-badges { + clear: both; + margin: 1em 1em 2em; +} + +/* @end */ + +/* @group Metadata Section */ +#metadata .section { + background-color: #dedede; + -moz-border-radius: 5px; + -webkit-border-radius: 5px; + border: 1px solid #aaa; + margin: 0 8px 16px; + font-size: 90%; + overflow: hidden; +} +#metadata h3.section-header { + margin: 0; + padding: 2px 8px; + background: #ccc; + color: #666; + -moz-border-radius-topleft: 4px; + -moz-border-radius-topright: 4px; + -webkit-border-top-left-radius: 4px; + -webkit-border-top-right-radius: 4px; + border-bottom: 1px solid #aaa; +} +#metadata #home-section h3.section-header { + border-bottom: 0; +} + +#metadata ul, +#metadata dl, +#metadata p { + padding: 8px; + list-style: none; +} + +#file-metadata ul { + padding-left: 28px; + list-style-image: url(images/page_green.png); +} + +dl.svninfo { + color: #666; + margin: 0; +} +dl.svninfo dt { + font-weight: bold; +} + +ul.link-list li { + white-space: nowrap; +} +ul.link-list .type { + font-size: 8px; + text-transform: uppercase; + color: white; + background: #969696; + padding: 2px 4px; + -webkit-border-radius: 5px; +} + +/* @end */ + + +/* @group Project Metadata Section */ +#project-metadata { + margin-top: 3em; +} + +.file #project-metadata { + margin-top: 0em; +} + +#project-metadata .section { + border: 1px solid #aaa; +} +#project-metadata h3.section-header { + border-bottom: 1px solid #aaa; + position: relative; +} +#project-metadata h3.section-header .search-toggle { + position: absolute; + right: 5px; +} + + +#project-metadata form { + color: #777; + background: #ccc; + padding: 8px 8px 16px; + border-bottom: 1px solid #bbb; +} +#project-metadata fieldset { + border: 0; +} + +#no-class-search-results { + margin: 0 auto 1em; + text-align: center; + font-size: 14px; + font-weight: bold; + color: #aaa; +} + +/* @end */ + + +/* @group Documentation Section */ +#description { + font-size: 100%; + color: #333; +} + +#description p { + margin: 1em 0.4em; +} + +#description li p { + margin: 0; +} + +#description ul { + margin-left: 1.5em; +} +#description ul li { + line-height: 1.4em; +} + +#description dl, +#documentation dl { + margin: 8px 1.5em; + border: 1px solid #ccc; +} +#description dl { + font-size: 14px; +} + +#description dt, +#documentation dt { + padding: 2px 4px; + font-weight: bold; + background: #ddd; +} +#description dd, +#documentation dd { + padding: 2px 12px; +} +#description dd + dt, +#documentation dd + dt { + margin-top: 0.7em; +} + +#documentation .section { + font-size: 90%; +} +#documentation h3.section-header { + margin-top: 2em; + padding: 0.75em 0.5em; + background-color: #dedede; + color: #333; + font-size: 150%; + border: 1px solid #bbb; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +#constants-list > dl, +#attributes-list > dl { + margin: 1em 0 2em; + border: 0; +} +#constants-list > dl dt, +#attributes-list > dl dt { + padding-left: 0; + font-weight: bold; + font-family: Monaco, "Andale Mono"; + background: inherit; +} +#constants-list > dl dt a, +#attributes-list > dl dt a { + color: inherit; +} +#constants-list > dl dd, +#attributes-list > dl dd { + margin: 0 0 1em 0; + padding: 0; + color: #666; +} + +/* @group Method Details */ + +#documentation .method-source-code { + display: none; +} + +#documentation .method-detail { + margin: 0.5em 0; + padding: 0.5em 0; + cursor: pointer; +} +#documentation .method-detail:hover { + background-color: #f1edba; +} +#documentation .method-heading { + position: relative; + padding: 2px 4px 0 20px; + font-size: 125%; + font-weight: bold; + color: #333; + background: url(images/brick.png) no-repeat left bottom; +} +#documentation .method-heading :link, +#documentation .method-heading :visited { + color: inherit; +} +#documentation .method-click-advice { + position: absolute; + top: 2px; + right: 5px; + font-size: 10px; + color: #9b9877; + visibility: hidden; + padding-right: 20px; + line-height: 20px; + background: url(images/zoom.png) no-repeat right top; +} +#documentation .method-detail:hover .method-click-advice { + visibility: visible; +} + +#documentation .method-alias .method-heading { + color: #666; + background: url(images/brick_link.png) no-repeat left bottom; +} + +#documentation .method-description, +#documentation .aliases { + margin: 0 20px; + line-height: 1.2em; + color: #666; +} +#documentation .aliases { + padding-top: 4px; + font-style: italic; + cursor: default; +} +#documentation .method-description p { + padding: 0; +} +#documentation .method-description p + p { + margin-bottom: 0.5em; +} +#documentation .method-description ul { + margin-left: 1.5em; +} + +#documentation .attribute-method-heading { + background: url(images/tag_green.png) no-repeat left bottom; +} +#documentation #attribute-method-details .method-detail:hover { + background-color: transparent; + cursor: default; +} +#documentation .attribute-access-type { + font-size: 60%; + text-transform: uppercase; + vertical-align: super; + padding: 0 2px; +} +/* @end */ + +/* @end */ + + + +/* @group Source Code */ + +div.method-source-code { + background: #262626; + color: #efefef; + margin: 1em; + padding: 0.5em; + border: 1px dashed #999; + overflow: hidden; +} + +div.method-source-code pre { + background: inherit; + padding: 0; + color: white; + overflow: auto; +} + +/* @group Ruby keyword styles */ + +.ruby-constant { color: #7fffd4; background: transparent; } +.ruby-keyword { color: #00ffff; background: transparent; } +.ruby-ivar { color: #eedd82; background: transparent; } +.ruby-operator { color: #00ffee; background: transparent; } +.ruby-identifier { color: #ffdead; background: transparent; } +.ruby-node { color: #ffa07a; background: transparent; } +.ruby-comment { color: #b22222; font-weight: bold; background: transparent; } +.ruby-regexp { color: #ffa07a; background: transparent; } +.ruby-value { color: #7fffd4; background: transparent; } + +/* @end */ +/* @end */ + + +/* @group File Popup Contents */ + +.file #metadata, +.file-popup #metadata { +} + +.file-popup dl { + font-size: 80%; + padding: 0.75em; + background-color: #dedede; + color: #333; + border: 1px solid #bbb; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} +.file dt { + font-weight: bold; + padding-left: 22px; + line-height: 20px; + background: url(images/page_white_width.png) no-repeat left top; +} +.file dt.modified-date { + background: url(images/date.png) no-repeat left top; +} +.file dt.requires { + background: url(images/plugin.png) no-repeat left top; +} +.file dt.scs-url { + background: url(images/wrench.png) no-repeat left top; +} + +.file dl dd { + margin: 0 0 1em 0; +} +.file #metadata dl dd ul { + list-style: circle; + margin-left: 20px; + padding-top: 0; +} +.file #metadata dl dd ul li { +} + + +.file h2 { + margin-top: 2em; + padding: 0.75em 0.5em; + background-color: #dedede; + color: #333; + font-size: 120%; + border: 1px solid #bbb; + -moz-border-radius: 3px; + -webkit-border-radius: 3px; +} + +/* @end */ + + + + +/* @group ThickBox Styles */ +#TB_window { + font: 12px Arial, Helvetica, sans-serif; + color: #333333; +} + +#TB_secondLine { + font: 10px Arial, Helvetica, sans-serif; + color:#666666; +} + +#TB_window :link, +#TB_window :visited { color: #666666; } +#TB_window :link:hover, +#TB_window :visited:hover { color: #000; } +#TB_window :link:active, +#TB_window :visited:active { color: #666666; } +#TB_window :link:focus, +#TB_window :visited:focus { color: #666666; } + +#TB_overlay { + position: fixed; + z-index:100; + top: 0px; + left: 0px; + height:100%; + width:100%; +} + +.TB_overlayMacFFBGHack {background: url(images/macFFBgHack.png) repeat;} +.TB_overlayBG { + background-color:#000; + filter:alpha(opacity=75); + -moz-opacity: 0.75; + opacity: 0.75; +} + +* html #TB_overlay { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_window { + position: fixed; + background: #ffffff; + z-index: 102; + color:#000000; + display:none; + border: 4px solid #525252; + text-align:left; + top:50%; + left:50%; +} + +* html #TB_window { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_window img#TB_Image { + display:block; + margin: 15px 0 0 15px; + border-right: 1px solid #ccc; + border-bottom: 1px solid #ccc; + border-top: 1px solid #666; + border-left: 1px solid #666; +} + +#TB_caption{ + height:25px; + padding:7px 30px 10px 25px; + float:left; +} + +#TB_closeWindow{ + height:25px; + padding:11px 25px 10px 0; + float:right; +} + +#TB_closeAjaxWindow{ + padding:7px 10px 5px 0; + margin-bottom:1px; + text-align:right; + float:right; +} + +#TB_ajaxWindowTitle{ + float:left; + padding:7px 0 5px 10px; + margin-bottom:1px; + font-size: 22px; +} + +#TB_title{ + background-color: #6C8C22; + color: #dedede; + height:40px; +} +#TB_title :link, +#TB_title :visited { + color: white !important; + border-bottom: 1px dotted #dedede; +} + +#TB_ajaxContent{ + clear:both; + padding:2px 15px 15px 15px; + overflow:auto; + text-align:left; + line-height:1.4em; +} + +#TB_ajaxContent.TB_modal{ + padding:15px; +} + +#TB_ajaxContent p{ + padding:5px 0px 5px 0px; +} + +#TB_load{ + position: fixed; + display:none; + height:13px; + width:208px; + z-index:103; + top: 50%; + left: 50%; + margin: -6px 0 0 -104px; /* -height/2 0 0 -width/2 */ +} + +* html #TB_load { /* ie6 hack */ +position: absolute; +margin-top: expression(0 - parseInt(this.offsetHeight / 2) + (TBWindowMargin = document.documentElement && document.documentElement.scrollTop || document.body.scrollTop) + 'px'); +} + +#TB_HideSelect{ + z-index:99; + position:fixed; + top: 0; + left: 0; + background-color:#fff; + border:none; + filter:alpha(opacity=0); + -moz-opacity: 0; + opacity: 0; + height:100%; + width:100%; +} + +* html #TB_HideSelect { /* ie6 hack */ + position: absolute; + height: expression(document.body.scrollHeight > document.body.offsetHeight ? document.body.scrollHeight : document.body.offsetHeight + 'px'); +} + +#TB_iframeContent{ + clear:both; + border:none; + margin-bottom:-1px; + margin-top:1px; + _margin-bottom:1px; +} + +/* @end */ + +/* @group Debugging Section */ + +#debugging-toggle { + text-align: center; +} +#debugging-toggle img { + cursor: pointer; +} + +#rdoc-debugging-section-dump { + display: none; + margin: 0 2em 2em; + background: #ccc; + border: 1px solid #999; +} + + + +/* @end */