Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP

Comparing changes

Choose two branches to see what’s changed or to start a new pull request. If you need to, you can also compare across forks.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also compare across forks.
base fork: atwam/loox
base: 1b11f40fc4
...
head fork: atwam/loox
compare: e0abff1cff
  • 4 commits
  • 52 files changed
  • 0 commit comments
  • 1 contributor
Commits on Oct 28, 2010
coutud Fix typos in README bacfe4d
Commits on Nov 03, 2010
coutud More progress toward some basic functionality
 - Display search results from solr
 - Home made config for solr schema, added solr tasks directly as rake task
 - Some changes to element config and searchable setup
 - Updated .gitignore
385b6a7
Commits on Oct 03, 2012
coutud Last commit before machine change c6e44b7
coutud Ignore solr files e0abff1
Showing with 2,626 additions and 245 deletions.
  1. +8 −0 .gitignore
  2. 0  .yardoc/checksums
  3. BIN  .yardoc/objects/root.dat
  4. BIN  .yardoc/proxy_types
  5. +10 −2 Gemfile
  6. +112 −64 Gemfile.lock
  7. +2 −2 README.textile
  8. +0 −10 app/controllers/main_controller.rb
  9. +24 −0 app/controllers/search_controller.rb
  10. +8 −0 app/helpers/application_helper.rb
  11. +2 −0  app/helpers/search_helper.rb
  12. +16 −6 app/models/element.rb
  13. +2 −2 app/models/parser.rb
  14. +2 −0  app/models/parser/basic_file.rb
  15. +12 −10 app/views/collections/index.html.haml
  16. +11 −4 app/views/collections/show.html.haml
  17. +1 −1  app/views/elements/show.html.haml
  18. +51 −46 app/views/layouts/application.html.haml
  19. +49 −0 app/views/main/_blog.html.haml
  20. +2 −48 app/views/main/index.html.haml
  21. +0 −12 app/views/main/search.html.haml
  22. +32 −0 app/views/search/_search_results.html.haml
  23. +19 −0 app/views/search/_view_details.html.haml
  24. +9 −0 app/views/search/_view_list.html.haml
  25. +12 −0 app/views/search/_view_tree.html.haml
  26. +4 −0 app/views/search/index.html.haml
  27. +4 −2 app/views/shared/_search.html.haml
  28. +2 −0  config/environments/development.rb
  29. +2 −2 config/routes.rb
  30. +81 −0 doc/_index.html
  31. +36 −0 doc/class_list.html
  32. +1 −0  doc/css/common.css
  33. +53 −0 doc/css/full_list.css
  34. +307 −0 doc/css/style.css
  35. +38 −0 doc/file_list.html
  36. +13 −0 doc/frames.html
  37. +202 −0 doc/js/app.js
  38. +149 −0 doc/js/full_list.js
  39. +154 −0 doc/js/jquery.js
  40. +35 −0 doc/method_list.html
  41. +45 −0 fields.readme
  42. +3 −0  launchers.readme
  43. +1 −1  lib/parser/image/std_image_parser.rb
  44. +346 −0 lib/tasks/freebase.rake
  45. +83 −0 lib/tasks/solr.rake
  46. +275 −0 public/stylesheets/sass/default.css
  47. +65 −33 public/stylesheets/sass/default.scss
  48. +211 −0 script/import_freebase.rb
  49. +106 −0 script/import_freebase.sh
  50. +14 −0 script/test_progress.rb
  51. +8 −0 test/functional/search_controller_test.rb
  52. +4 −0 test/unit/helpers/search_helper_test.rb
View
8 .gitignore
@@ -4,3 +4,11 @@ log/*.log
tmp/**/*
*.pid
*.swp
+forgery/
+log
+public/stylesheets/default.css
+
+.sass-cache/
+db/solr
+tmpdata
+vendor/solr
View
0  .yardoc/checksums
No changes.
View
BIN  .yardoc/objects/root.dat
Binary file not shown
View
BIN  .yardoc/proxy_types
Binary file not shown
View
12 Gemfile
@@ -11,11 +11,10 @@ gem 'rails', '~> 3.0'
gem "haml"
gem "hpricot"
gem "jquery-rails"
+gem "will_paginate", "~> 3.0.pre2"
# Deploy with Capistrano
# gem 'capistrano'
-# To use debugger
-# gem 'ruby-debug'
# Bundle the extra gems:
gem "mongoid", "2.0.0.beta.17"
@@ -46,7 +45,16 @@ group :test do
gem "rspec-rails", ">= 2.0.0.beta.20"
end
group :development do
+ # To use debugger
+ gem 'ruby-debug19'
+
+ gem 'ansi'
gem 'rb-inotify'
+
+ # Needed for freebase import
+ gem 'bzip2-ruby'
+ gem 'em-http-request'
+
gem "wirble"
gem "rdoc"
end
View
176 Gemfile.lock
@@ -5,7 +5,7 @@ GIT
shared-mime-info (0.1)
PATH
- remote: /home/wam/Dev/forks/sunspot_mongoid
+ remote: ~/Dev/forks/sunspot_mongoid
specs:
sunspot_mongoid (0.3.2)
mongoid
@@ -16,49 +16,68 @@ GEM
remote: http://rubygems.org/
specs:
abstract (1.0.0)
- actionmailer (3.0.0)
- actionpack (= 3.0.0)
- mail (~> 2.2.5)
- actionpack (3.0.0)
- activemodel (= 3.0.0)
- activesupport (= 3.0.0)
+ actionmailer (3.0.3)
+ actionpack (= 3.0.3)
+ mail (~> 2.2.9)
+ actionpack (3.0.3)
+ activemodel (= 3.0.3)
+ activesupport (= 3.0.3)
builder (~> 2.1.2)
erubis (~> 2.6.6)
- i18n (~> 0.4.1)
+ i18n (~> 0.4)
rack (~> 1.2.1)
- rack-mount (~> 0.6.12)
- rack-test (~> 0.5.4)
+ rack-mount (~> 0.6.13)
+ rack-test (~> 0.5.6)
tzinfo (~> 0.3.23)
- activemodel (3.0.0)
- activesupport (= 3.0.0)
+ activemodel (3.0.3)
+ activesupport (= 3.0.3)
builder (~> 2.1.2)
- i18n (~> 0.4.1)
- activerecord (3.0.0)
- activemodel (= 3.0.0)
- activesupport (= 3.0.0)
- arel (~> 1.0.0)
+ i18n (~> 0.4)
+ activerecord (3.0.3)
+ activemodel (= 3.0.3)
+ activesupport (= 3.0.3)
+ arel (~> 2.0.2)
tzinfo (~> 0.3.23)
- activeresource (3.0.0)
- activemodel (= 3.0.0)
- activesupport (= 3.0.0)
- activesupport (3.0.0)
- arel (1.0.1)
- activesupport (~> 3.0.0)
- awesome_print (0.2.1)
+ activeresource (3.0.3)
+ activemodel (= 3.0.3)
+ activesupport (= 3.0.3)
+ activesupport (3.0.3)
+ addressable (2.2.3)
+ ansi (1.2.2)
+ archive-tar-minitar (0.5.2)
+ arel (2.0.7)
+ awesome_print (0.3.1)
bson (1.0.4)
bson_ext (1.0.4)
builder (2.1.2)
+ bzip2-ruby (0.2.7)
+ columnize (0.3.2)
diff-lcs (1.1.2)
+ em-http-request (0.3.0)
+ addressable (>= 2.0.0)
+ escape_utils
+ eventmachine (>= 0.12.9)
erubis (2.6.6)
abstract (>= 1.0.0)
escape (0.0.4)
- haml (3.0.18)
- i18n (0.4.1)
- json (1.4.6)
- mail (2.2.5)
+ escape_utils (0.1.9)
+ eventmachine (0.12.10)
+ ffi (1.0.5)
+ rake (>= 0.8.7)
+ haml (3.0.25)
+ hpricot (0.8.3)
+ i18n (0.5.0)
+ jquery-rails (0.2.6)
+ rails (~> 3.0)
+ thor (~> 0.14.4)
+ json (1.5.0)
+ linecache19 (0.5.11)
+ ruby_core_source (>= 0.1.4)
+ mail (2.2.14)
activesupport (>= 2.3.6)
- mime-types
- treetop (>= 1.4.5)
+ i18n (>= 0.4.0)
+ mime-types (~> 1.16)
+ treetop (~> 1.4.8)
mime-types (1.16)
mongo (1.0.7)
bson (>= 1.0.4)
@@ -68,27 +87,31 @@ GEM
mongo (= 1.0.7)
tzinfo (~> 0.3.22)
will_paginate (~> 3.0.pre)
+ nokogiri (1.4.4)
polyglot (0.3.1)
+ pr_geohash (1.0.0)
rack (1.2.1)
rack-mount (0.6.13)
rack (>= 1.0.0)
- rack-test (0.5.4)
+ rack-test (0.5.7)
rack (>= 1.0)
- rails (3.0.0)
- actionmailer (= 3.0.0)
- actionpack (= 3.0.0)
- activerecord (= 3.0.0)
- activeresource (= 3.0.0)
- activesupport (= 3.0.0)
- bundler (~> 1.0.0)
- railties (= 3.0.0)
- railties (3.0.0)
- actionpack (= 3.0.0)
- activesupport (= 3.0.0)
- rake (>= 0.8.4)
- thor (~> 0.14.0)
+ rails (3.0.3)
+ actionmailer (= 3.0.3)
+ actionpack (= 3.0.3)
+ activerecord (= 3.0.3)
+ activeresource (= 3.0.3)
+ activesupport (= 3.0.3)
+ bundler (~> 1.0)
+ railties (= 3.0.3)
+ railties (3.0.3)
+ actionpack (= 3.0.3)
+ activesupport (= 3.0.3)
+ rake (>= 0.8.7)
+ thor (~> 0.14.4)
rake (0.8.7)
- rdoc (2.5.11)
+ rb-inotify (0.8.4)
+ ffi (>= 0.5.0)
+ rdoc (3.4)
resque-mongo (1.9.8.1)
json (>= 1.1.0)
mongo (>= 1.0.0)
@@ -97,29 +120,46 @@ GEM
rmagick (2.13.1)
rsolr (0.12.1)
builder (>= 2.1.2)
- rspec (2.0.0.beta.20)
- rspec-core (= 2.0.0.beta.20)
- rspec-expectations (= 2.0.0.beta.20)
- rspec-mocks (= 2.0.0.beta.20)
- rspec-core (2.0.0.beta.20)
- rspec-expectations (2.0.0.beta.20)
- diff-lcs (>= 1.1.2)
- rspec-mocks (2.0.0.beta.20)
- rspec-rails (2.0.0.beta.20)
- rspec (= 2.0.0.beta.20)
+ rspec (2.4.0)
+ rspec-core (~> 2.4.0)
+ rspec-expectations (~> 2.4.0)
+ rspec-mocks (~> 2.4.0)
+ rspec-core (2.4.0)
+ rspec-expectations (2.4.0)
+ diff-lcs (~> 1.1.2)
+ rspec-mocks (2.4.0)
+ rspec-rails (2.4.1)
+ actionpack (~> 3.0)
+ activesupport (~> 3.0)
+ railties (~> 3.0)
+ rspec (~> 2.4.0)
+ ruby-debug-base19 (0.11.24)
+ columnize (>= 0.3.1)
+ linecache19 (>= 0.5.11)
+ ruby_core_source (>= 0.1.4)
+ ruby-debug19 (0.11.6)
+ columnize (>= 0.3.1)
+ linecache19 (>= 0.5.11)
+ ruby-debug-base19 (>= 0.11.19)
ruby-mp3info (0.6.13)
- sinatra (1.0)
- rack (>= 1.0)
- sunspot (1.1.0)
+ ruby_core_source (0.1.4)
+ archive-tar-minitar (>= 0.5.2)
+ sinatra (1.1.2)
+ rack (~> 1.1)
+ tilt (~> 1.2)
+ sunspot (1.2.1)
escape (= 0.0.4)
+ pr_geohash (~> 1.0)
rsolr (= 0.12.1)
- sunspot_rails (1.1.0)
- sunspot (= 1.1.0)
- thor (0.14.0)
- treetop (1.4.8)
+ sunspot_rails (1.2.1)
+ nokogiri
+ sunspot (= 1.2.1)
+ thor (0.14.6)
+ tilt (1.2.2)
+ treetop (1.4.9)
polyglot (>= 0.3.1)
- tzinfo (0.3.23)
- vegas (0.1.7)
+ tzinfo (0.3.24)
+ vegas (0.1.8)
rack (>= 1.0.0)
will_paginate (3.0.pre2)
wirble (0.1.3)
@@ -128,18 +168,26 @@ PLATFORMS
ruby
DEPENDENCIES
+ ansi
awesome_print
bson_ext (= 1.0.4)
+ bzip2-ruby
+ em-http-request
haml
+ hpricot
+ jquery-rails
mongoid (= 2.0.0.beta.17)
rails (~> 3.0)
+ rb-inotify
rdoc
resque-mongo
rmagick
rspec
rspec-rails (>= 2.0.0.beta.20)
+ ruby-debug19
ruby-mp3info
shared-mime-info!
sunspot
sunspot_mongoid!
+ will_paginate (~> 3.0.pre2)
wirble
View
4 README.textile
@@ -25,7 +25,7 @@ Workers are the basic object called to work on queues and are stored in @/lib/wo
It creates/loads the element if it exists and call any @BaseParser@ or subclass on it. This worker is the initial/main crawler for the collection.
Parsers should be quick for this worker, to avoid blocking the crawl of the collection (basically filesystem parsers)
* @ParseQueue@ and subclasses are used to simply parse a specific queue. They will watch for the queue and run specific classes of parsers on it.
-* The main example of a @ParseQueue@ worker is the @FileChanger@ worker, which is used by default to parse (using any subclass of @Parser::FileCHangeParser@)
+* The main example of a @ParseQueue@ worker is the @FileChanger@ worker, which is used by default to parse (using any subclass of @Parser::FileChangeParser@)
files that have been marked as changed. These include slower parsers
h3. Parsers
@@ -37,4 +37,4 @@ Parsers are stored in both @/app/models/parser@ (for basic parsers, like filesys
Parsers will only be called if they exist as documents in the mongoid database.
Adding a parser is very simple : in rails console :
-@ MyParserType.create(:mime_types => ["/audio/"], :priority => 0)
+@ MyParserType.create(:mime_types => ["/audio/"], :priority => 0)@
View
10 app/controllers/main_controller.rb
@@ -1,14 +1,4 @@
class MainController < ApplicationController
def index
end
-
- def search
- @query = params[:q]
- @search = Sunspot.search(Element) do
- keywords params[:q] do
- highlight
- end
- end
- render :layout=>false
- end
end
View
24 app/controllers/search_controller.rb
@@ -0,0 +1,24 @@
+class SearchController < ApplicationController
+ def index
+ @query = params[:q]
+
+ if @query.blank?
+ render :text=>""
+ return
+ end
+
+ @search = Sunspot.search(Element) do
+ keywords params[:q] do
+ highlight
+ end
+ facet :media
+ if params[:media]
+ with(:media, params[:media])
+ end
+ end
+
+ if request.xhr?
+ render :partial=>'search_results', :locals=>{:search=>@search, :query=>@query}
+ end
+ end
+end
View
8 app/helpers/application_helper.rb
@@ -1,2 +1,10 @@
module ApplicationHelper
+ #
+ # Returns _params_ hash without the _symbol_ pair.
+ # It's only a copy, _params_ remains unchanged
+ def params_remove(params, symbol)
+ url_hash = params.dup
+ url_hash.delete(symbol)
+ url_hash
+ end
end
View
2  app/helpers/search_helper.rb
@@ -0,0 +1,2 @@
+module SearchHelper
+end
View
22 app/models/element.rb
@@ -1,3 +1,7 @@
+# We have to explicitely require shared-mime-info since MIME is a module
+# and rails autoloading seems to struggle loading it properly
+require 'shared-mime-info'
+
class Element
include Mongoid::Document
include Sunspot::Mongoid
@@ -14,7 +18,7 @@ class Element
# A hash of the file, nil when directories.
# Should be almost surely unique for the file
field :content_hash
- # List of fields to index in the search engine
+ # List of fields to index in full_text in the search engine
field :indexed_fields, :type=>Array, :default => []
index :path, :unique => true
@@ -48,24 +52,30 @@ def children
self.class.where(:parent_id=>id)
end
+ def mime_type
+ MIME[self[:mime_type]]
+ end
+
#
# Search definitions and related stuff
# Note : Sunspot::Rails defaults apply here : auto_index is true, auto_remove is true
#
searchable do
- text :name
+ text :name, :stored => true
text :indexed_fields do
self[:indexed_fields] = (self[:indexed_fields] || []).uniq
self[:indexed_fields].collect{|field| self[field]}.compact.join(' -- ')
end
- string :mime_types do
- # Return the whole mime_types hierarchy
- # MIME[self[:mime_type]].parents
- self[:mime_type].split('/').first
+ string :mime_type, :stored => true
+ string :media do
+ self[:mime_type] && self[:mime_type].split('/').first
end
+
+ # TODO: Add size index
+
# dynamic_text :custom_fields do
# self[:indexed_fields] = (self[:indexed_fields] || []).uniq
# h = self[:indexed_fields].inject({}) do |hash, field|
View
4 app/models/parser.rb
@@ -5,7 +5,7 @@ class Parser
# Priority to be used for the parser
# Smaller numbers get called before high numbers
#
- field :priority, :type=>Integer
+ field :priority, :type=>Integer, :default=>100
#
# Limit to only files with these mime_types.
# This gives a hint to the analyze worker but doesn't ensure that your parser will only
@@ -27,7 +27,7 @@ def self.all_for_mime_type(mime_type)
all
else
any_in(
- :mime_types => [ Regexp.new(mime_type || ""), nil ]
+ :mime_types => mime_type.split("/").inject([]) {|a,e| a.empty? ? [e] : a << a.last + "/" + e} << nil
)
end
end
View
2  app/models/parser/basic_file.rb
@@ -5,6 +5,8 @@
# Define fields :
# size : integer, size of the field in bytes
# mime_type : string, magic-guessed mime_type
+# mtime : last modification time for the file
+# content_hash : a sha1 digest of the size and the first 50k of file content
#
#
require 'digest/sha1'
View
22 app/views/collections/index.html.haml
@@ -1,15 +1,17 @@
%h1 Listing collections
-%table
- %tr
- %th Name
- %th Path
- %th
- - @collections.each do |collection|
+%table.full
+ %thead
%tr
- %td= collection.name
- %td= collection.base_path
- %td
- = link_to 'Show', collection
+ %th Name
+ %th Path
+ %th
+ %tbody
+ - @collections.each do |collection|
+ %tr
+ %td= collection.name
+ %td= collection.base_path
+ %td
+ = link_to 'Show', collection
- content_for :sidebar do
.box
View
15 app/views/collections/show.html.haml
@@ -7,7 +7,14 @@
%p
= link_to 'Base element', @collection.base_element
-= link_to 'Edit', edit_collection_path(@collection)
-= link_to 'Crawl', enqueue_collection_path(@collection), :method=>:post
-= link_to 'Destroy', @collection, :confirm => 'Are you sure ?', :method=>:delete
-= link_to 'Back', collections_path
+- content_for :sidebar do
+ .box
+ %h4= @collection.name
+ %em= @collection.base_path
+ .contentarea
+ %ul.linklist
+ %li= link_to 'Edit', edit_collection_path(@collection)
+ %li= link_to 'Crawl', enqueue_collection_path(@collection), :method=>:post
+ %li= link_to 'Destroy', @collection, :confirm => 'Are you sure ?', :method=>:delete
+ %hr
+ %li= link_to 'Back to collections', collections_path
View
2  app/views/elements/show.html.haml
@@ -8,5 +8,5 @@
%li= link_to child.name, child
%h2 Attributes
-%p= ap @element.attributes
+%p= ap @element.attributes.reject{|k,v| k.to_s.start_with?("blob/")}
%p= link_to @element.col, collection_url(@element.col)
View
97 app/views/layouts/application.html.haml
@@ -19,60 +19,65 @@
%h1
Loox
%sup 0.0a
- %h2 I can tell your disk is a mess by the way it is.
+ %h2 I can tell your disk is a mess because of the way it is.
#menu
= render :partial => 'layouts/menu'
- #headerpic
- = render :partial => 'shared/search'
+ - if content_for?(:search)
+ #headerpic
+ = yield :search
#menubottom
#content
- / Normal content: Stuff that's not going to be put in the left or right column.
- /
+ - if content_for?(:sidebar)
+ / Primary content: Stuff that goes in the primary content column (by default, the left column)
+ .primarycontainer
+ .primarycontent
+ / Primary content area start
+ = yield
+ / Primary content area end
+ / Secondary content: Stuff that goes in the secondary content column (by default, the narrower right column)
+ .secondarycontent
+ / Secondary content area start
+ = yield :sidebar
+ / HINT: Set any div's class to "box" to encapsulate it in (you guessed it) a box
+ - else
#normalcontent
- %h3
- %strong Zenlike
- %sup 1.0
- %span by NodeThirtyThree
- .contentarea
- / Normal content area start
- %img.left{:alt => "A chinese lion statue", :src => "/images/pic1.jpg"}/
- %p
- Zenlike
+ = yield
+ /
+ %h3
+ %strong Zenlike
%sup 1.0
- is a free, lightweight, tableless, fluid W3C-compliant website design by
- = succeed "." do
- %a{:href => "http://www.nodethirtythree.com/"} NodeThirtyThree Design
- All photos came from
- %a{:href => "http://www.pdphoto.org/"} PDPhoto
- and the background texture is from
- = succeed "." do
- %a{:href => "http://www.mayang.com/textures/"} Mayang's texture site
- You're free to dissect, manipulate and use it to your heart's content. We only ask that you link back to
- %a{:href => "http://www.nodethirtythree.com/"} our site
- in some way. If you find this design useful, feel free to let us know :)
- %p
- You can find more of our free work at this site or
- = succeed "," do
+ %span by NodeThirtyThree
+ .contentarea
+ / Normal content area start
+ %img.left{:alt => "A chinese lion statue", :src => "/images/pic1.jpg"}/
+ %p
+ Zenlike
+ %sup 1.0
+ is a free, lightweight, tableless, fluid W3C-compliant website design by
+ = succeed "." do
+ %a{:href => "http://www.nodethirtythree.com/"} NodeThirtyThree Design
+ All photos came from
+ %a{:href => "http://www.pdphoto.org/"} PDPhoto
+ and the background texture is from
+ = succeed "." do
+ %a{:href => "http://www.mayang.com/textures/"} Mayang's texture site
+ You're free to dissect, manipulate and use it to your heart's content. We only ask that you link back to
%a{:href => "http://www.nodethirtythree.com/"} our site
- or some of our commercial work on
- = succeed "," do
- %a{:href => "http://www.4templates.com/?aff=n33"} 4Templates.com
- a commercial website template site.
- / Normal content area end
- / .divider1
- / Primary content: Stuff that goes in the primary content column (by default, the left column)
- #primarycontainer
- #primarycontent
- / Primary content area start
- = yield
- / Primary content area end
- / Secondary content: Stuff that goes in the secondary content column (by default, the narrower right column)
- #secondarycontent
- / Secondary content area start
- = yield :sidebar
- / HINT: Set any div's class to "box" to encapsulate it in (you guessed it) a box
+ in some way. If you find this design useful, feel free to let us know :)
+ %p
+ You can find more of our free work at this site or
+ = succeed "," do
+ %a{:href => "http://www.nodethirtythree.com/"} our site
+ or some of our commercial work on
+ = succeed "," do
+ %a{:href => "http://www.4templates.com/?aff=n33"} 4Templates.com
+ a commercial website template site.
+ / Normal content area end
+ .divider1
#footer
- .left © 2010 Loox
+ .left
+ © 2010 Loox
+ = link_to "Resque", resque_url
.right
Design by
%a{:href => "http://www.nodethirtythree.com/"} NodeThirtyThree Design
View
49 app/views/main/_blog.html.haml
@@ -0,0 +1,49 @@
+.post
+ %h4 Lorem Ipsum Veroeros
+ .contentarea
+ .details
+ Posted by
+ %a{:href => "#"} Jane Doe
+ on September 25, 2006
+ %p Volutpat at varius sed sollicitudin et, arcu. Vivamus viverra. Nullam turpis. Vestibulum sed etiam. Lorem ipsum sit amet dolore. Nulla facilisi. Sed tortor. Aenean felis. Quisque eros. Cras lobortis commodo metus. Vestibulum vel purus. In eget odio in sapien adipiscing blandit. Quisque augue tortor, facilisis sit amet, aliquam, suscipit vitae, cursus sed, arcu lorem ipsum dolor sit amet.
+ %ul.controls
+ %li
+ %a.printerfriendly{:href => "#"} Printer Friendly
+ %li
+ %a.comments{:href => "#"} Comments (18)
+ %li
+ %a.more{:href => "#"} Read More
+.divider2
+.post
+ %h4 Consequat Odio Vestibulum
+ .contentarea
+ .details
+ Posted by
+ %a{:href => "#"} Jane Doe
+ on September 25, 2006
+ %img.left{:alt => "A chinese dragon", :src => "/images/pic3.jpg"}/
+ %p Aenean felis quisque eros. Cras lobortis commodo lorem ipsum dolor. Vestibulum vel purus. In eget odio in sapien adipiscing blandit. Lorem ipsum dolor sit amet consequat etiam sed dolore.
+ %ul.controls
+ %li
+ %a.printerfriendly{:href => "#"} Printer Friendly
+ %li
+ %a.comments{:href => "#"} Comments (18)
+ %li
+ %a.more{:href => "#"} Read More
+.divider2
+.post
+ %h4 Adipiscing Nullam
+ .contentarea
+ .details
+ Posted by
+ %a{:href => "#"} Jane Doe
+ on September 25, 2006
+ %p Eget odio in sapien adipiscing blandit. Quisque augue tortor, facilisis sit amet, aliquam, suscipit vitae, cursus sed, arcu lorem ipsum dolor sit amet felis quisque eros. Cras lobortis commodo lorem ipsum dolor. Vestibulum vel purus. In eget odio in sapien adipiscing blandit. Quisque augue tortor, facilisis sit amet, aliquam, suscipit lorem ipsum dolor.
+ %ul.controls
+ %li
+ %a.printerfriendly{:href => "#"} Printer Friendly
+ %li
+ %a.comments{:href => "#"} Comments (18)
+ %li
+ %a.more{:href => "#"} Read More
+
View
50 app/views/main/index.html.haml
@@ -1,49 +1,3 @@
#results
-.post
- %h4 Lorem Ipsum Veroeros
- .contentarea
- .details
- Posted by
- %a{:href => "#"} Jane Doe
- on September 25, 2006
- %p Volutpat at varius sed sollicitudin et, arcu. Vivamus viverra. Nullam turpis. Vestibulum sed etiam. Lorem ipsum sit amet dolore. Nulla facilisi. Sed tortor. Aenean felis. Quisque eros. Cras lobortis commodo metus. Vestibulum vel purus. In eget odio in sapien adipiscing blandit. Quisque augue tortor, facilisis sit amet, aliquam, suscipit vitae, cursus sed, arcu lorem ipsum dolor sit amet.
- %ul.controls
- %li
- %a.printerfriendly{:href => "#"} Printer Friendly
- %li
- %a.comments{:href => "#"} Comments (18)
- %li
- %a.more{:href => "#"} Read More
-.divider2
-.post
- %h4 Consequat Odio Vestibulum
- .contentarea
- .details
- Posted by
- %a{:href => "#"} Jane Doe
- on September 25, 2006
- %img.left{:alt => "A chinese dragon", :src => "/images/pic3.jpg"}/
- %p Aenean felis quisque eros. Cras lobortis commodo lorem ipsum dolor. Vestibulum vel purus. In eget odio in sapien adipiscing blandit. Lorem ipsum dolor sit amet consequat etiam sed dolore.
- %ul.controls
- %li
- %a.printerfriendly{:href => "#"} Printer Friendly
- %li
- %a.comments{:href => "#"} Comments (18)
- %li
- %a.more{:href => "#"} Read More
-.divider2
-.post
- %h4 Adipiscing Nullam
- .contentarea
- .details
- Posted by
- %a{:href => "#"} Jane Doe
- on September 25, 2006
- %p Eget odio in sapien adipiscing blandit. Quisque augue tortor, facilisis sit amet, aliquam, suscipit vitae, cursus sed, arcu lorem ipsum dolor sit amet felis quisque eros. Cras lobortis commodo lorem ipsum dolor. Vestibulum vel purus. In eget odio in sapien adipiscing blandit. Quisque augue tortor, facilisis sit amet, aliquam, suscipit lorem ipsum dolor.
- %ul.controls
- %li
- %a.printerfriendly{:href => "#"} Printer Friendly
- %li
- %a.comments{:href => "#"} Comments (18)
- %li
- %a.more{:href => "#"} Read More
+- content_for :search do
+ = render :partial => 'shared/search'
View
12 app/views/main/search.html.haml
@@ -1,12 +0,0 @@
-%h2= @query
-%ul
- - @search.each_hit_with_result do |hit, element|
- %li
- - if highlight = hit.highlight(:name)
- = hit.highlight(:name).format {|f| content_tag(:em, f)}
- - else
- = hit.stored(:name)
- .details
- = element.full_path
-
-
View
32 app/views/search/_search_results.html.haml
@@ -0,0 +1,32 @@
+.primarycontainer
+ .primarycontent
+ %h1 Results for #{query}
+ %p Your search returned #{pluralize search.total, "result"}
+ .search-results
+ - case params[:view] || 'list'
+ - when 'list'
+ = render :partial=>'view_list', :locals=>{:search=>search}
+ - when 'tree'
+ = render :partial=>'view_browse', :locals=>{:search=>search}
+ - when 'details'
+ = render :partial=>'view_details', :locals=>{:search=>search}
+ .pagination
+ = will_paginate(search.hits)
+.secondarycontent
+ .box
+ %h4 View
+ .contentarea
+ %ul.linklist
+ %li= link_to "List", url_for({:view=>'list'}.update(params))
+ %li= link_to "Browse", url_for({:view=>'browse'}.update(params))
+ %li= link_to "Details", url_for({:view=>'details'}.update(params))
+ %h4 Categories
+ .contentarea
+ - if params[:media]
+ %p Found #{search.total} results in category #{params[:media]}
+ %ul.linklist
+ %li= link_to "See all categories", url_for(params_remove(params, :media))
+ - else
+ %ul.linklist
+ - search.facet(:media).rows.each do |row|
+ %li= link_to "#{row.value} (#{row.count})", url_for({:media=>row.value}.update(params))
View
19 app/views/search/_view_details.html.haml
@@ -0,0 +1,19 @@
+%table
+ %thead
+ %tr
+ %th Name
+ %th Path
+ %th Type
+ %th Size
+ %tbody
+ - search.each_hit_with_result do |hit, element|
+ %tr
+ %td
+ - if highlight = hit.highlight(:name)
+ != hit.highlight(:name).format {|f| "<span class=\"highlight\">" + h(f) + "</span>"}
+ - else
+ = element.name
+ %td= File.dirname(element.full_path)
+ %td= element.mime_type
+ %td= element[:size]
+
View
9 app/views/search/_view_list.html.haml
@@ -0,0 +1,9 @@
+%ul
+ - search.each_hit_with_result do |hit, element|
+ %li
+ - if highlight = hit.highlight(:name)
+ != hit.highlight(:name).format {|f| "<span class=\"highlight\">" + h(f) + "</span>"}
+ - else
+ = element.name
+ .details
+ = element.full_path
View
12 app/views/search/_view_tree.html.haml
@@ -0,0 +1,12 @@
+- previous_path = nil
+%ul
+ - search.each_hit_with_result do |hit, element|
+ - if File.dirname(element.full_path) == previous_path
+ .details
+ - if highlight = hit.highlight(:name)
+ != hit.highlight(:name).format {|f| "<span class=\"highlight\">" + h(f) + "</span>"}
+ - else
+ = element.name
+ - else
+ %li= previous_path = File.dirname(element.full_path)
+
View
4 app/views/search/index.html.haml
@@ -0,0 +1,4 @@
+#results
+ = render :partial=>'search_results', :locals=>{:search=>@search, :query=>@query}
+- content_for :search do
+ = render :partial => 'shared/search'
View
6 app/views/shared/_search.html.haml
@@ -1,12 +1,14 @@
-%form{:action => "", :method => "post"}
- #search
+#search
+ - form_tag search_url, :method=>:get do
%input.text#searchbox{:name => "q", :type => "text", :autocomplete=>'off'}/
%input.submit{:type => "submit", :value => "Search"}/
:javascript
$(document).ready(function() {
+ $("#searchbox").focus();
$("#searchbox").searchbox({
url: '#{search_url}',
param: 'q',
dom_id: '#results'
});
+
});
View
2  config/environments/development.rb
@@ -16,4 +16,6 @@
# Don't care if the mailer can't send
config.action_mailer.raise_delivery_errors = false
+
+ config.active_support.deprecation = :log
end
View
4 config/routes.rb
@@ -1,10 +1,10 @@
Loox::Application.routes.draw do |map|
# The priority is based upon order of creation:
# first created -> highest priority.
- match '/resque', :to=>Resque::Server.new, :anchor=>false
+ match '/resque', :to=>Resque::Server.new, :anchor=>false, :as => :resque
root :to => "main#index"
- match 'search' => 'main#search', :as => :search
+ match 'search' => 'search#index', :as => :search
# Sample of regular route:
# match 'products/:id' => 'catalog#view'
View
81 doc/_index.html
@@ -0,0 +1,81 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+ <head>
+ <meta name="Content-Type" content="text/html; charset=utf-8" />
+<title>Documentation by YARD 0.6.1</title>
+<link rel="stylesheet" href="css/style.css" type="text/css" media="screen" charset="utf-8" />
+<link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
+
+<script type="text/javascript" charset="utf-8">
+ relpath = '';
+ if (relpath != '') relpath += '/';
+</script>
+<script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+<script type="text/javascript" charset="utf-8" src="js/app.js"></script>
+
+ </head>
+ <body>
+ <script type="text/javascript" charset="utf-8">
+ if (window.top.frames.main) document.body.className = 'frames';
+ </script>
+
+ <div id="header">
+ <div id="menu">
+
+
+ <span class="title"></span>
+
+
+ <div class="noframes"><span class="title">(</span><a href="." target="_top">no frames</a><span class="title">)</span></div>
+</div>
+
+ <div id="search">
+ <a id="class_list_link" href="#">Class List</a>
+ <a id="method_list_link" href="#">Method List</a>
+ <a id ="file_list_link" href="#">File List</a>
+</div>
+
+ <div class="clear"></div>
+ </div>
+
+ <iframe id="search_frame"></iframe>
+
+ <div id="content"><div id="listing">
+ <h1 class="noborder title">Documentation by YARD 0.6.1</h1>
+ <h1 class="alphaindex">Alphabetic Index</h1>
+
+
+ <h2>File Listing</h2>
+ <ul id="files">
+
+
+ <li class="r1"><a href="index.html" title="README">README</a></li>
+
+
+ </ul>
+
+ <div class="clear"></div>
+
+ <h2>Namespace Listing A-Z</h2>
+
+
+
+
+ <table>
+ <tr>
+ <td valign='top' width="33%">
+
+ </td>
+ </tr>
+ </table>
+</div></div>
+
+ <div id="footer">
+ Generated on Wed Jan 12 00:00:09 2011 by
+ <a href="http://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
+ 0.6.1 (ruby-1.9.2).
+</div>
+
+ </body>
+</html>
View
36 doc/class_list.html
@@ -0,0 +1,36 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+ <head>
+ <meta name="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
+ <base id="base_target" target="_parent" />
+ </head>
+ <body>
+ <script type="text/javascript" charset="utf-8">
+ if (window.top.frames.main) {
+ document.getElementById('base_target').target = 'main';
+ document.body.className = 'frames';
+ }
+ </script>
+ <div id="content">
+ <h1 id="full_list_header">Class List</h1>
+ <div id="nav">
+ <a target="_self" href="class_list.html">Classes</a> |
+ <a target="_self" href="method_list.html">Methods</a> |
+ <a target="_self" href="file_list.html">Files</a>
+ </div>
+ <div id="search">Search: <input type="text" /></div>
+
+ <ul id="full_list" class="class">
+ <li><span class='object_link'><a href="top-level-namespace.html" title=" (root)">Top Level Namespace</a></span></li>
+
+
+ </ul>
+ </div>
+ </body>
+</html>
+
View
1  doc/css/common.css
@@ -0,0 +1 @@
+/* Override this file with custom rules */
View
53 doc/css/full_list.css
@@ -0,0 +1,53 @@
+body {
+ margin: 0;
+ font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
+ font-size: 13px;
+ height: 101%;
+ overflow-x: hidden;
+}
+
+h1 { padding: 12px 10px; padding-bottom: 0; margin: 0; font-size: 1.4em; }
+.clear { clear: both; }
+#search { position: absolute; right: 5px; top: 9px; padding-left: 24px; }
+#content.insearch #search, #content.insearch #noresults { background: url(data:image/gif;base64,R0lGODlhEAAQAPYAAP///wAAAPr6+pKSkoiIiO7u7sjIyNjY2J6engAAAI6OjsbGxjIyMlJSUuzs7KamppSUlPLy8oKCghwcHLKysqSkpJqamvT09Pj4+KioqM7OzkRERAwMDGBgYN7e3ujo6Ly8vCoqKjY2NkZGRtTU1MTExDw8PE5OTj4+PkhISNDQ0MrKylpaWrS0tOrq6nBwcKysrLi4uLq6ul5eXlxcXGJiYoaGhuDg4H5+fvz8/KKiohgYGCwsLFZWVgQEBFBQUMzMzDg4OFhYWBoaGvDw8NbW1pycnOLi4ubm5kBAQKqqqiQkJCAgIK6urnJyckpKSjQ0NGpqatLS0sDAwCYmJnx8fEJCQlRUVAoKCggICLCwsOTk5ExMTPb29ra2tmZmZmhoaNzc3KCgoBISEiIiIgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH/C05FVFNDQVBFMi4wAwEAAAAh/hpDcmVhdGVkIHdpdGggYWpheGxvYWQuaW5mbwAh+QQJCAAAACwAAAAAEAAQAAAHaIAAgoMgIiYlg4kACxIaACEJCSiKggYMCRselwkpghGJBJEcFgsjJyoAGBmfggcNEx0flBiKDhQFlIoCCA+5lAORFb4AJIihCRbDxQAFChAXw9HSqb60iREZ1omqrIPdJCTe0SWI09GBACH5BAkIAAAALAAAAAAQABAAAAdrgACCgwc0NTeDiYozCQkvOTo9GTmDKy8aFy+NOBA7CTswgywJDTIuEjYFIY0JNYMtKTEFiRU8Pjwygy4ws4owPyCKwsMAJSTEgiQlgsbIAMrO0dKDGMTViREZ14kYGRGK38nHguHEJcvTyIEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDAggPg4iJAAMJCRUAJRIqiRGCBI0WQEEJJkWDERkYAAUKEBc4Po1GiKKJHkJDNEeKig4URLS0ICImJZAkuQAhjSi/wQyNKcGDCyMnk8u5rYrTgqDVghgZlYjcACTA1sslvtHRgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCQARAtOUoQRGRiFD0kJUYWZhUhKT1OLhR8wBaaFBzQ1NwAlkIszCQkvsbOHL7Y4q4IuEjaqq0ZQD5+GEEsJTDCMmIUhtgk1lo6QFUwJVDKLiYJNUd6/hoEAIfkECQgAAAAsAAAAABAAEAAAB2iAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4uen4ICCA+IkIsDCQkVACWmhwSpFqAABQoQF6ALTkWFnYMrVlhWvIKTlSAiJiVVPqlGhJkhqShHV1lCW4cMqSkAR1ofiwsjJyqGgQAh+QQJCAAAACwAAAAAEAAQAAAHZ4AAgoOEhYaCJSWHgxGDJCSMhREZGIYYGY2ElYebi56fhyWQniSKAKKfpaCLFlAPhl0gXYNGEwkhGYREUywag1wJwSkHNDU3D0kJYIMZQwk8MjPBLx9eXwuETVEyAC/BOKsuEjYFhoEAIfkECQgAAAAsAAAAABAAEAAAB2eAAIKDhIWGgiUlh4MRgyQkjIURGRiGGBmNhJWHm4ueICImip6CIQkJKJ4kigynKaqKCyMnKqSEK05StgAGQRxPYZaENqccFgIID4KXmQBhXFkzDgOnFYLNgltaSAAEpxa7BQoQF4aBACH5BAkIAAAALAAAAAAQABAAAAdogACCg4SFggJiPUqCJSWGgkZjCUwZACQkgxGEXAmdT4UYGZqCGWQ+IjKGGIUwPzGPhAc0NTewhDOdL7Ykji+dOLuOLhI2BbaFETICx4MlQitdqoUsCQ2vhKGjglNfU0SWmILaj43M5oEAOwAAAAAAAAAAAA==) no-repeat center left; }
+#full_list { padding: 0; list-style: none; margin-left: 0; }
+#full_list ul { padding: 0; }
+#full_list li { padding: 5px; padding-left: 12px; margin: 0; font-size: 1.1em; list-style: none; }
+#noresults { padding: 7px 12px; }
+#content.insearch #noresults { margin-left: 7px; }
+ul.collapsed ul, ul.collapsed li { display: none; }
+li a.toggle { cursor: default; position: relative; left: -5px; top: 4px; text-indent: -999px; width: 10px; height: 9px; margin-left: -10px; display: block; float: left; background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAASCAYAAABb0P4QAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAAK8AAACvABQqw0mAAAABx0RVh0U29mdHdhcmUAQWRvYmUgRmlyZXdvcmtzIENTM5jWRgMAAAAVdEVYdENyZWF0aW9uIFRpbWUAMy8xNC8wOeNZPpQAAAE2SURBVDiNrZTBccIwEEXfelIAHUA6CZ24BGaWO+FuzZAK4k6gg5QAdGAq+Bxs2Yqx7BzyL7Llp/VfzZeQhCTc/ezuGzKKnKSzpCxXJM8fwNXda3df5RZETlIt6YUzSQDs93sl8w3wBZxCCE10GM1OcWbWjB2mWgEH4Mfdyxm3PSepBHibgQE2wLe7r4HjEidpnXMYdQPKEMJcsZ4zs2POYQOcaPfwMVOo58zsAdMt18BuoVDPxUJRacELbXv3hUIX2vYmOUvi8C8ydz/ThjXrqKqqLbDIAdsCKBd+Wo7GWa7o9qzOQHVVVXeAbs+yHHCH4aTsaCOQqunmUy1yBUAXkdMIfMlgF5EXLo2OpV/c/Up7jG4hhHcYLgWzAZXUc2b2ixsfvc/RmNNfOXD3Q/oeL9axJE1yT9IOoUu6MGUkAAAAAElFTkSuQmCC) no-repeat bottom left; }
+li.collapsed a.toggle { opacity: 0.5; cursor: default; background-position: top left; }
+li { color: #888; cursor: pointer; }
+li.deprecated { text-decoration: line-through; font-style: italic; }
+li.r1 { background: #f0f0f0; }
+li.r2 { background: #fafafa; }
+li:hover { background: #ddd; }
+li small:before { content: "("; }
+li small:after { content: ")"; }
+li small.search_info { display: none; }
+a:link, a:visited { text-decoration: none; color: #05a; }
+li.clicked { background: #05a; color: #ccc; }
+li.clicked a:link, li.clicked a:visited { color: #eee; }
+li.clicked a.toggle { opacity: 0.5; background-position: bottom right; }
+li.collapsed.clicked a.toggle { background-position: top right; }
+#search input { border: 1px solid #bbb; -moz-border-radius: 3px; -webkit-border-radius: 3px; }
+#nav { margin-left: 10px; font-size: 0.9em; display: none; color: #aaa; }
+#nav a:link, #nav a:visited { color: #358; }
+#nav a:hover { background: transparent; color: #5af; }
+
+.frames #content h1 { margin-top: 0; }
+.frames li { white-space: nowrap; cursor: normal; }
+.frames li small { display: block; font-size: 0.8em; }
+.frames li small:before { content: ""; }
+.frames li small:after { content: ""; }
+.frames li small.search_info { display: none; }
+.frames #search { width: 170px; position: static; margin: 3px; margin-left: 10px; font-size: 0.9em; color: #888; padding-left: 0; padding-right: 24px; }
+.frames #content.insearch #search { background-position: center right; }
+.frames #search input { width: 110px; }
+.frames #nav { display: block; }
+
+#full_list.insearch li { display: none; }
+#full_list.insearch li.found { display: list-item; padding-left: 10px; }
+#full_list.insearch li a.toggle { display: none; }
+#full_list.insearch li small.search_info { display: block; }
View
307 doc/css/style.css
@@ -0,0 +1,307 @@
+body {
+ padding: 0 20px;
+ font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
+ font-size: 13px;
+}
+body.frames { padding: 0 5px; }
+h1 { font-size: 25px; margin: 1em 0 0.5em; padding-top: 4px; border-top: 1px dotted #d5d5d5; }
+h1.noborder { border-top: 0px; margin-top: 0; padding-top: 4px; }
+h1.title { margin-bottom: 10px; }
+h1.alphaindex { margin-top: 0; font-size: 22px; }
+h2 {
+ padding: 0;
+ padding-bottom: 3px;
+ border-bottom: 1px #aaa solid;
+ font-size: 1.4em;
+ margin: 1.8em 0 0.5em;
+}
+h2 small { font-weight: normal; font-size: 0.7em; display: block; float: right; }
+.clear { clear: both; }
+.inline { display: inline; }
+.inline p:first-child { display: inline; }
+.docstring h1, .docstring h2, .docstring h3, .docstring h4 { padding: 0; border: 0; border-bottom: 1px dotted #bbb; }
+.docstring h1 { font-size: 1.2em; }
+.docstring h2 { font-size: 1.1em; }
+.docstring h3, .docstring h4 { font-size: 1em; border-bottom: 0; padding-top: 10px; }
+.docstring .object_link { font-family: monospace; }
+
+.note {
+ color: #222;
+ -moz-border-radius: 3px; -webkit-border-radius: 3px;
+ background: #e3e4e3; border: 1px solid #d5d5d5; padding: 7px 10px;
+ display: block;
+}
+.note.todo { background: #ffffc5; border-color: #ececaa; }
+.note.returns_void { background: #efefef; }
+.note.deprecated { background: #ffe5e5; border-color: #e9dada; }
+.note.private { background: #ffffc5; border-color: #ececaa; }
+.note.title { text-transform: lowercase; padding: 1px 5px; margin-left: 5px; font-size: 0.9em; font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif; display: inline; }
+h1 .note.title { font-size: 0.5em; font-weight: normal; padding: 3px 5px; position: relative; top: -3px; text-transform: capitalize; }
+.note.title.constructor { color: #fff; background: #6a98d6; border-color: #6689d6; }
+.note.title.writeonly { color: #fff; background: #45a638; border-color: #2da31d; }
+.note.title.readonly { color: #fff; background: #6a98d6; border-color: #6689d6; }
+.note.title.private { background: #d5d5d5; border-color: #c5c5c5; }
+
+h3.inherited {
+ font-style: italic;
+ font-family: "Lucida Sans", "Lucida Grande", Verdana, Arial, sans-serif;
+ font-weight: normal;
+ padding: 0;
+ margin: 0;
+ margin-top: 12px;
+ margin-bottom: 3px;
+ font-size: 13px;
+}
+p.inherited {
+ padding: 0;
+ margin: 0;
+ margin-left: 25px;
+}
+
+dl.box {
+ width: 520px;
+ font-size: 1em;
+}
+dl.box dt {
+ float: left;
+ display: block;
+ width: 100px;
+ margin: 0;
+ text-align: right;
+ font-weight: bold;
+ border: 1px solid #aaa;
+ border-width: 1px 0px 0px 1px;
+ padding: 6px 0;
+ padding-right: 10px;
+}
+dl.box dd {
+ float: left;
+ display: block;
+ width: 380px;
+ margin: 0;
+ padding: 6px 0;
+ padding-right: 20px;
+ border: 1px solid #aaa;
+ border-width: 1px 1px 0 0;
+}
+dl.box .last {
+ border-bottom: 1px solid #aaa;
+}
+dl.box .r1 { background: #eee; }
+
+ul.toplevel { list-style: none; padding-left: 0; font-size: 1.1em; }
+#files { padding-left: 15px; font-size: 1.1em; }
+
+#files { padding: 0; }
+#files li { list-style: none; display: inline; padding: 7px 12px; line-height: 35px; }
+
+dl.constants { margin-left: 40px; }
+dl.constants dt { font-weight: bold; font-size: 1.1em; margin-bottom: 5px; }
+dl.constants dd { width: 75%; white-space: pre; font-family: monospace; margin-bottom: 18px; }
+
+.summary_desc { margin-left: 32px; display: block; font-family: sans-serif; }
+.summary_desc tt { font-size: 0.9em; }
+dl.constants .note { padding: 2px 6px; padding-right: 12px; margin-top: 6px; }
+dl.constants .docstring { margin-left: 32px; font-size: 0.9em; font-weight: normal; }
+dl.constants .tags { padding-left: 32px; font-size: 0.9em; line-height: 0.8em; }
+dl.constants .discussion *:first-child { margin-top: 0; }
+dl.constants .discussion *:last-child { margin-bottom: 0; }
+
+.method_details { border-top: 1px dotted #aaa; margin-top: 15px; padding-top: 0; }
+.method_details.first { border: 0; }
+p.signature {
+ font-size: 1.1em; font-weight: normal; font-family: Monaco, Consolas, Courier, monospace;
+ padding: 6px 10px; margin-top: 18px;
+ background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
+}
+p.signature tt { font-family: Monaco, Consolas, Courier, monospace; }
+p.signature .overload { display: block; }
+p.signature .extras { font-weight: normal; font-family: sans-serif; color: #444; font-size: 1em; }
+p.signature .aliases { display: block; font-weight: normal; font-size: 0.9em; font-family: sans-serif; margin-top: 0px; color: #555; }
+p.signature .aliases .names { font-family: Monaco, Consolas, Courier, monospace; font-weight: bold; color: #000; font-size: 1.2em; }
+
+.tags h3 { font-size: 1em; margin-bottom: 0; }
+.tags ul { margin-top: 5px; padding-left: 30px; list-style: square; }
+.tags ul li { margin-bottom: 3px; }
+.tags ul .name { font-family: monospace; font-weight: bold; }
+.tags ul .note { padding: 3px 6px; }
+.tags { margin-bottom: 12px; }
+
+.tags .examples h3 { margin-bottom: 10px; }
+.tags .examples h4 { padding: 0; margin: 0; margin-left: 15px; font-weight: bold; font-size: 0.9em; }
+
+.tags .overload .overload_item { list-style: none; margin-bottom: 25px; }
+.tags .overload .overload_item .signature {
+ padding: 2px 8px;
+ background: #e5e8ff; border: 1px solid #d8d8e5; -moz-border-radius: 3px; -webkit-border-radius: 3px;
+}
+.tags .overload .signature { margin-left: -15px; font-family: monospace; display: block; font-size: 1.1em; }
+.tags .overload .docstring { margin-top: 15px; }
+
+.defines { display: none; }
+
+#method_missing_details .notice.this { position: relative; top: -8px; color: #888; padding: 0; margin: 0; }
+
+.showSource { font-size: 0.9em; }
+.showSource a:link, .showSource a:visited { text-decoration: none; color: #666; }
+
+#content a:link, #content a:visited { text-decoration: none; color: #05a; }
+#content a:hover { background: #ffffa5; }
+.docstring { margin-right: 6em; }
+
+ul.summary {
+ list-style: none;
+ font-family: monospace;
+ font-size: 1em;
+ line-height: 1.5em;
+}
+ul.summary a:link, ul.summary a:visited {
+ text-decoration: none; font-size: 1.1em;
+}
+ul.summary li { margin-bottom: 5px; }
+.summary .summary_signature {
+ padding: 1px 10px;
+ background: #eaeaff; border: 1px solid #dfdfe5;
+ -moz-border-radius: 3px; -webkit-border-radius: 3px;
+}
+.summary_signature:hover { background: #eeeeff; cursor: pointer; }
+ul.summary.compact li { display: inline; margin-right: 5px; line-height: 2.6em;}
+ul.summary.compact .summary_signature { padding: 5px 7px; padding-right: 4px; }
+#content .summary_signature:hover a:link,
+#content .summary_signature:hover a:visited {
+ background: transparent;
+ color: #48f;
+}
+
+p.inherited a { font-family: monospace; font-size: 0.9em; }
+p.inherited { word-spacing: 5px; font-size: 1.2em; }
+
+p.children { font-size: 1.2em; }
+p.children a { font-size: 0.9em; }
+p.children strong { font-size: 0.8em; }
+p.children strong.modules { padding-left: 5px; }
+
+ul.fullTree { display: none; padding-left: 0; list-style: none; margin-left: 0; margin-bottom: 10px; }
+ul.fullTree ul { margin-left: 0; padding-left: 0; list-style: none; }
+ul.fullTree li { text-align: center; padding-top: 18px; padding-bottom: 12px; background: url(data:image/gif;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAKT2lDQ1BQaG90b3Nob3AgSUNDIHByb2ZpbGUAAHjanVNnVFPpFj333vRCS4iAlEtvUhUIIFJCi4AUkSYqIQkQSoghodkVUcERRUUEG8igiAOOjoCMFVEsDIoK2AfkIaKOg6OIisr74Xuja9a89+bN/rXXPues852zzwfACAyWSDNRNYAMqUIeEeCDx8TG4eQuQIEKJHAAEAizZCFz/SMBAPh+PDwrIsAHvgABeNMLCADATZvAMByH/w/qQplcAYCEAcB0kThLCIAUAEB6jkKmAEBGAYCdmCZTAKAEAGDLY2LjAFAtAGAnf+bTAICd+Jl7AQBblCEVAaCRACATZYhEAGg7AKzPVopFAFgwABRmS8Q5ANgtADBJV2ZIALC3AMDOEAuyAAgMADBRiIUpAAR7AGDIIyN4AISZABRG8lc88SuuEOcqAAB4mbI8uSQ5RYFbCC1xB1dXLh4ozkkXKxQ2YQJhmkAuwnmZGTKBNA/g88wAAKCRFRHgg/P9eM4Ors7ONo62Dl8t6r8G/yJiYuP+5c+rcEAAAOF0ftH+LC+zGoA7BoBt/qIl7gRoXgugdfeLZrIPQLUAoOnaV/Nw+H48PEWhkLnZ2eXk5NhKxEJbYcpXff5nwl/AV/1s+X48/Pf14L7iJIEyXYFHBPjgwsz0TKUcz5IJhGLc5o9H/LcL//wd0yLESWK5WCoU41EScY5EmozzMqUiiUKSKcUl0v9k4t8s+wM+3zUAsGo+AXuRLahdYwP2SycQWHTA4vcAAPK7b8HUKAgDgGiD4c93/+8//UegJQCAZkmScQAAXkQkLlTKsz/HCAAARKCBKrBBG/TBGCzABhzBBdzBC/xgNoRCJMTCQhBCCmSAHHJgKayCQiiGzbAdKmAv1EAdNMBRaIaTcA4uwlW4Dj1wD/phCJ7BKLyBCQRByAgTYSHaiAFiilgjjggXmYX4IcFIBBKLJCDJiBRRIkuRNUgxUopUIFVIHfI9cgI5h1xGupE7yAAygvyGvEcxlIGyUT3UDLVDuag3GoRGogvQZHQxmo8WoJvQcrQaPYw2oefQq2gP2o8+Q8cwwOgYBzPEbDAuxsNCsTgsCZNjy7EirAyrxhqwVqwDu4n1Y8+xdwQSgUXACTYEd0IgYR5BSFhMWE7YSKggHCQ0EdoJNwkDhFHCJyKTqEu0JroR+cQYYjIxh1hILCPWEo8TLxB7iEPENyQSiUMyJ7mQAkmxpFTSEtJG0m5SI+ksqZs0SBojk8naZGuyBzmULCAryIXkneTD5DPkG+Qh8lsKnWJAcaT4U+IoUspqShnlEOU05QZlmDJBVaOaUt2ooVQRNY9aQq2htlKvUYeoEzR1mjnNgxZJS6WtopXTGmgXaPdpr+h0uhHdlR5Ol9BX0svpR+iX6AP0dwwNhhWDx4hnKBmbGAcYZxl3GK+YTKYZ04sZx1QwNzHrmOeZD5lvVVgqtip8FZHKCpVKlSaVGyovVKmqpqreqgtV81XLVI+pXlN9rkZVM1PjqQnUlqtVqp1Q61MbU2epO6iHqmeob1Q/pH5Z/YkGWcNMw09DpFGgsV/jvMYgC2MZs3gsIWsNq4Z1gTXEJrHN2Xx2KruY/R27iz2qqaE5QzNKM1ezUvOUZj8H45hx+Jx0TgnnKKeX836K3hTvKeIpG6Y0TLkxZVxrqpaXllirSKtRq0frvTau7aedpr1Fu1n7gQ5Bx0onXCdHZ4/OBZ3nU9lT3acKpxZNPTr1ri6qa6UbobtEd79up+6Ynr5egJ5Mb6feeb3n+hx9L/1U/W36p/VHDFgGswwkBtsMzhg8xTVxbzwdL8fb8VFDXcNAQ6VhlWGX4YSRudE8o9VGjUYPjGnGXOMk423GbcajJgYmISZLTepN7ppSTbmmKaY7TDtMx83MzaLN1pk1mz0x1zLnm+eb15vft2BaeFostqi2uGVJsuRaplnutrxuhVo5WaVYVVpds0atna0l1rutu6cRp7lOk06rntZnw7Dxtsm2qbcZsOXYBtuutm22fWFnYhdnt8Wuw+6TvZN9un2N/T0HDYfZDqsdWh1+c7RyFDpWOt6azpzuP33F9JbpL2dYzxDP2DPjthPLKcRpnVOb00dnF2e5c4PziIuJS4LLLpc+Lpsbxt3IveRKdPVxXeF60vWdm7Obwu2o26/uNu5p7ofcn8w0nymeWTNz0MPIQ+BR5dE/C5+VMGvfrH5PQ0+BZ7XnIy9jL5FXrdewt6V3qvdh7xc+9j5yn+M+4zw33jLeWV/MN8C3yLfLT8Nvnl+F30N/I/9k/3r/0QCngCUBZwOJgUGBWwL7+Hp8Ib+OPzrbZfay2e1BjKC5QRVBj4KtguXBrSFoyOyQrSH355jOkc5pDoVQfujW0Adh5mGLw34MJ4WHhVeGP45wiFga0TGXNXfR3ENz30T6RJZE3ptnMU85ry1KNSo+qi5qPNo3ujS6P8YuZlnM1VidWElsSxw5LiquNm5svt/87fOH4p3iC+N7F5gvyF1weaHOwvSFpxapLhIsOpZATIhOOJTwQRAqqBaMJfITdyWOCnnCHcJnIi/RNtGI2ENcKh5O8kgqTXqS7JG8NXkkxTOlLOW5hCepkLxMDUzdmzqeFpp2IG0yPTq9MYOSkZBxQqohTZO2Z+pn5mZ2y6xlhbL+xW6Lty8elQfJa7OQrAVZLQq2QqboVFoo1yoHsmdlV2a/zYnKOZarnivN7cyzytuQN5zvn//tEsIS4ZK2pYZLVy0dWOa9rGo5sjxxedsK4xUFK4ZWBqw8uIq2Km3VT6vtV5eufr0mek1rgV7ByoLBtQFr6wtVCuWFfevc1+1dT1gvWd+1YfqGnRs+FYmKrhTbF5cVf9go3HjlG4dvyr+Z3JS0qavEuWTPZtJm6ebeLZ5bDpaql+aXDm4N2dq0Dd9WtO319kXbL5fNKNu7g7ZDuaO/PLi8ZafJzs07P1SkVPRU+lQ27tLdtWHX+G7R7ht7vPY07NXbW7z3/T7JvttVAVVN1WbVZftJ+7P3P66Jqun4lvttXa1ObXHtxwPSA/0HIw6217nU1R3SPVRSj9Yr60cOxx++/p3vdy0NNg1VjZzG4iNwRHnk6fcJ3/ceDTradox7rOEH0x92HWcdL2pCmvKaRptTmvtbYlu6T8w+0dbq3nr8R9sfD5w0PFl5SvNUyWna6YLTk2fyz4ydlZ19fi753GDborZ752PO32oPb++6EHTh0kX/i+c7vDvOXPK4dPKy2+UTV7hXmq86X23qdOo8/pPTT8e7nLuarrlca7nuer21e2b36RueN87d9L158Rb/1tWeOT3dvfN6b/fF9/XfFt1+cif9zsu72Xcn7q28T7xf9EDtQdlD3YfVP1v+3Njv3H9qwHeg89HcR/cGhYPP/pH1jw9DBY+Zj8uGDYbrnjg+OTniP3L96fynQ89kzyaeF/6i/suuFxYvfvjV69fO0ZjRoZfyl5O/bXyl/erA6xmv28bCxh6+yXgzMV70VvvtwXfcdx3vo98PT+R8IH8o/2j5sfVT0Kf7kxmTk/8EA5jz/GMzLdsAAAAgY0hSTQAAeiUAAICDAAD5/wAAgOkAAHUwAADqYAAAOpgAABdvkl/FRgAAAHtJREFUeNqMzrEJAkEURdGzuhgZbSoYWcAWoBVsB4JgZAGmphsZCZYzTQgWNCYrDN9RvMmHx+X916SUBFbo8CzD1idXrLErw1mQttgXtyrOcQ/Ny5p4Qh+2XqLYYazsPWNTiuMkRxa4vcV+evuNAUOLIx5+c2hyzv7hNQC67Q+/HHmlEwAAAABJRU5ErkJggg==) no-repeat top center; }
+ul.fullTree li:first-child { padding-top: 0; background: transparent; }
+ul.fullTree li:last-child { padding-bottom: 0; }
+.showAll ul.fullTree { display: block; }
+.showAll .inheritName { display: none; }
+
+#search { position: absolute; right: 14px; top: 0px; }
+#search a:link, #search a:visited {
+ display: block; float: left; margin-right: 4px;
+ padding: 8px 10px; text-decoration: none; color: #05a;
+ border: 1px solid #d8d8e5;
+ -moz-border-radius-bottomleft: 3px; -moz-border-radius-bottomright: 3px;
+ -webkit-border-bottom-left-radius: 3px; -webkit-border-bottom-right-radius: 3px;
+ background: #eaf0ff;
+ -webkit-box-shadow: -1px 1px 3px #ddd;
+}
+#search a:hover { background: #f5faff; color: #06b; }
+#search a.active {
+ background: #568; padding-bottom: 20px; color: #fff; border: 1px solid #457;
+ -moz-border-radius-topleft: 5px; -moz-border-radius-topright: 5px;
+ -webkit-border-top-left-radius: 5px; -webkit-border-top-right-radius: 5px;
+}
+#search a.inactive { color: #999; }
+.frames #search { display: none; }
+.inheritanceTree, .toggleDefines { float: right; }
+
+#menu { font-size: 1.3em; color: #bbb; top: -5px; position: relative; }
+#menu .title, #menu a { font-size: 0.7em; }
+#menu .title a { font-size: 1em; }
+#menu .title { color: #555; }
+#menu a:link, #menu a:visited { color: #333; text-decoration: none; border-bottom: 1px dotted #bbd; }
+#menu a:hover { color: #05a; }
+#menu .noframes { display: none; }
+.frames #menu .noframes { display: inline; float: right; }
+
+#footer { margin-top: 15px; border-top: 1px solid #ccc; text-align: center; padding: 7px 0; color: #999; }
+#footer a:link, #footer a:visited { color: #444; text-decoration: none; border-bottom: 1px dotted #bbd; }
+#footer a:hover { color: #05a; }
+
+#listing ul.alpha { font-size: 1.1em; }
+#listing ul.alpha { margin: 0; padding: 0; padding-bottom: 10px; list-style: none; }
+#listing ul.alpha li.letter { font-size: 1.4em; padding-bottom: 10px; }
+#listing ul.alpha ul { margin: 0; padding-left: 15px; }
+#listing ul small { color: #666; font-size: 0.7em; }
+
+li.r1 { background: #f0f0f0; }
+li.r2 { background: #fafafa; }
+
+#search_frame {
+ z-index: 9999;
+ background: #fff;
+ display: none;
+ position: absolute;
+ top: 36px;
+ right: 18px;
+ width: 500px;
+ height: 80%;
+ overflow-y: scroll;
+ border: 1px solid #999;
+ border-collapse: collapse;
+ -webkit-box-shadow: -7px 5px 25px #aaa;
+ -moz-box-shadow: -7px 5px 25px #aaa;
+ -moz-border-radius: 2px;
+ -webkit-border-radius: 2px;
+}
+
+#content ul.summary li.deprecated a:link,
+#content ul.summary li.deprecated a:visited { text-decoration: line-through; font-style: italic; }
+
+#toc {
+ padding: 20px; padding-right: 30px; border: 1px solid #ddd; float: right; background: #fff; margin-left: 20px; margin-bottom: 20px;
+ max-width: 300px;
+ -webkit-box-shadow: -2px 2px 6px #bbb;
+ -moz-box-shadow: -2px 2px 6px #bbb;
+ z-index: 5000;
+ position: relative;
+}
+#toc.nofloat { float: none; max-width: none; border: none; padding: 0; margin: 20px 0; -webkit-box-shadow: none; -moz-box-shadow: none; }
+#toc.nofloat.hidden { padding: 0; background: 0; margin-bottom: 5px; }
+#toc .title { margin: 0; }
+#toc ol { padding-left: 1.8em; }
+#toc li { font-size: 1.1em; line-height: 1.7em; }
+#toc > ol > li { font-size: 1.1em; font-weight: bold; }
+#toc ol > ol { font-size: 0.9em; }
+#toc ol ol > ol { padding-left: 2.3em; }
+#toc ol + li { margin-top: 0.3em; }
+#toc.hidden { padding: 10px; background: #f6f6f6; -webkit-box-shadow: none; -moz-box-shadow: none; }
+#filecontents h1 + #toc.nofloat { margin-top: 0; }
+
+/* syntax highlighting */
+.source_code { display: none; padding: 3px 8px; border-left: 8px solid #ddd; margin-top: 5px; }
+#filecontents pre.code, .docstring pre.code, .source_code pre { font-family: monospace; }
+#filecontents pre.code, .docstring pre.code { display: block; }
+.source_code .lines { padding-right: 12px; color: #555; text-align: right; }
+#filecontents pre.code, .docstring pre.code,
+.tags .example { padding: 5px 12px; margin-top: 4px; border: 1px solid #eef; background: #f5f5ff; }
+pre.code { color: #000; }
+pre.code .info.file { color: #555; }
+pre.code .val { color: #036A07; }
+pre.code .tstring_content,
+pre.code .heredoc_beg, pre.code .heredoc_end,
+pre.code .qwords_beg, pre.code .qwords_end,
+pre.code .tstring, pre.code .dstring { color: #036A07; }
+pre.code .fid, pre.code .id.new, pre.code .id.to_s,
+pre.code .id.to_sym, pre.code .id.to_f,
+pre.code .dot + pre.code .id,
+pre.code .id.to_i pre.code .id.each { color: #0085FF; }
+pre.code .comment { color: #0066FF; }
+pre.code .const, pre.code .constant { color: #585CF6; }
+pre.code .symbol { color: #C5060B; }
+pre.code .kw,
+pre.code .label,
+pre.code .id.require,
+pre.code .id.extend,
+pre.code .id.include { color: #0000FF; }
+pre.code .ivar { color: #318495; }
+pre.code .gvar,
+pre.code .id.backref,
+pre.code .id.nth_ref { color: #6D79DE; }
+pre.code .regexp, .dregexp { color: #036A07; }
+pre.code a { border-bottom: 1px dotted #bbf; }
+
View
38 doc/file_list.html
@@ -0,0 +1,38 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html>
+ <head>
+ <meta name="Content-Type" content="text/html; charset=utf-8" />
+ <link rel="stylesheet" href="css/full_list.css" type="text/css" media="screen" charset="utf-8" />
+ <link rel="stylesheet" href="css/common.css" type="text/css" media="screen" charset="utf-8" />
+ <script type="text/javascript" charset="utf-8" src="js/jquery.js"></script>
+ <script type="text/javascript" charset="utf-8" src="js/full_list.js"></script>
+ <base id="base_target" target="_parent" />
+ </head>
+ <body>
+ <script type="text/javascript" charset="utf-8">
+ if (window.top.frames.main) {
+ document.getElementById('base_target').target = 'main';
+ document.body.className = 'frames';
+ }
+ </script>
+ <div id="content">
+ <h1 id="full_list_header">File List</h1>
+ <div id="nav">
+ <a target="_self" href="class_list.html">Classes</a> |
+ <a target="_self" href="method_list.html">Methods</a> |
+ <a target="_self" href="file_list.html">Files</a>
+ </div>
+ <div id="search">Search: <input type="text" /></div>
+
+ <ul id="full_list" class="files">
+
+
+ <li class="r1"><a href="index.html" title="README">README</a></li>
+
+
+ </ul>
+ </div>
+ </body>
+</html>
+
View
13 doc/frames.html
@@ -0,0 +1,13 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
+
+<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
+<head>
+ <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
+ <title>Documentation by YARD 0.6.1</title>
+</head>
+<frameset cols="20%,*">
+ <frame name="list" src="class_list.html" />
+ <frame name="main" src="index.html" />
+</frameset>
+</html>
View
202 doc/js/app.js
@@ -0,0 +1,202 @@
+function createSourceLinks() {
+ $('.method_details_list .source_code').
+ before("<span class='showSource'>[<a href='#' class='toggleSource'>View source</a>]</span>");
+ $('.toggleSource').toggle(function() {
+ $(this).parent().next().slideDown(100);
+ $(this).text("Hide source");
+ },
+ function() {
+ $(this).parent().next().slideUp(100);
+ $(this).text("View source");
+ });
+}
+
+function createDefineLinks() {
+ var tHeight = 0;
+ $('.defines').after(" <a href='#' class='toggleDefines'>more...</a>");
+ $('.toggleDefines').toggle(function() {
+ tHeight = $(this).parent().prev().height();
+ $(this).prev().show();
+ $(this).parent().prev().height($(this).parent().height());
+ $(this).text("(less)");
+ },
+ function() {
+ $(this).prev().hide();
+ $(this).parent().prev().height(tHeight);
+ $(this).text("more...")
+ });
+}
+
+function createFullTreeLinks() {
+ var tHeight = 0;
+ $('.inheritanceTree').toggle(function() {
+ tHeight = $(this).parent().prev().height();
+ $(this).parent().toggleClass('showAll');
+ $(this).text("(hide)");
+ $(this).parent().prev().height($(this).parent().height());
+ },
+ function() {
+ $(this).parent().toggleClass('showAll');
+ $(this).parent().prev().height(tHeight);
+ $(this).text("show all")
+ });
+}
+
+function fixBoxInfoHeights() {
+ $('dl.box dd.r1, dl.box dd.r2').each(function() {
+ $(this).prev().height($(this).height());
+ });
+}
+
+function searchFrameLinks() {
+ $('#method_list_link').click(function() {
+ toggleSearchFrame(this, relpath + 'method_list.html');
+ });
+
+ $('#class_list_link').click(function() {
+ toggleSearchFrame(this, relpath + 'class_list.html');
+ });
+
+ $('#file_list_link').click(function() {
+ toggleSearchFrame(this, relpath + 'file_list.html');
+ });
+}
+
+function toggleSearchFrame(id, link) {
+ var frame = $('#search_frame');
+ $('#search a').removeClass('active').addClass('inactive');
+ if (frame.attr('src') == link && frame.css('display') != "none") {
+ frame.slideUp(100);
+ $('#search a').removeClass('active inactive');
+ }
+ else {
+ $(id).addClass('active').removeClass('inactive');
+ frame.attr('src', link).slideDown(100);
+ }
+}
+
+function linkSummaries() {
+ $('.summary_signature').click(function() {
+ document.location = $(this).find('a').attr('href');
+ });
+}
+
+function framesInit() {
+ if (window.top.frames.main) {
+ document.body.className = 'frames';
+ $('#menu .noframes a').attr('href', document.location);
+ $('html head title', window.parent.document).text($('html head title').text());
+ }
+}
+
+function keyboardShortcuts() {
+ if (window.top.frames.main) return;
+ $(document).keypress(function(evt) {
+ if (evt.altKey || evt.ctrlKey || evt.metaKey || evt.shiftKey) return;
+ if (evt.originalTarget.nodeName == "INPUT" ||
+ evt.originalTarget.nodeName == "TEXTAREA") return;
+ switch (evt.charCode) {
+ case 67: case 99: $('#class_list_link').click(); break; // 'c'
+ case 77: case 109: $('#method_list_link').click(); break; // 'm'
+ case 70: case 102: $('#file_list_link').click(); break; // 'f'
+ }
+ });
+}
+
+function summaryToggle() {
+ $('.summary_toggle').click(function() {
+ localStorage.summaryCollapsed = $(this).text();
+ $(this).text($(this).text() == "collapse" ? "expand" : "collapse");
+ var next = $(this).parent().parent().next();
+ if (next.hasClass('compact')) {
+ next.toggle();
+ next.next().toggle();
+ }
+ else if (next.hasClass('summary')) {
+ var list = $('<ul class="summary compact" />');
+ list.html(next.html());
+ list.find('.summary_desc, .note').remove();
+ list.find('a').each(function() {
+ $(this).html($(this).find('strong').html());
+ $(this).parent().html($(this)[0].outerHTML);
+ });
+ next.before(list);
+ next.toggle();
+ }
+ return false;
+ });
+ if (localStorage) {
+ if (localStorage.summaryCollapsed == "collapse") $('.summary_toggle').click();
+ else localStorage.summaryCollapsed = "expand";
+ }
+}
+
+function fixOutsideWorldLinks() {
+ $('a').each(function() {
+ if (window.location.host != this.host) this.target = '_parent';
+ });
+}
+
+function generateTOC() {
+ if ($('#filecontents').length == 0) return;
+ var _toc = $('<ol class="top"></ol>');
+ var show = false;
+ var toc = _toc;
+ var counter = 0;
+ var tags = ['h2', 'h3', 'h4', 'h5', 'h6'];
+ if ($('#filecontents h1').length > 1) tags.unshift('h1');
+ for (i in tags) { tags[i] = '#filecontents ' + tags[i] }
+ var lastTag = parseInt(tags[0][1]);
+ $(tags.join(', ')).each(function() {
+ if (this.id == "filecontents") return;
+ show = true;
+ var thisTag = parseInt(this.tagName[1]);
+ if (this.id.length == 0) {
+ var proposedId = $(this).text().replace(/[^a-z0-9:'"\.()=-]/ig, '_');
+ if ($('#' + proposedId).length > 0) proposedId += counter++;
+ this.id = proposedId;
+ }
+ if (thisTag > lastTag) {
+ for (var i = 0; i < thisTag - lastTag; i++) {
+ var tmp = $('<ol/>'); toc.append(tmp); toc = tmp;
+ }
+ }
+ if (thisTag < lastTag) {
+ for (var i = 0; i < lastTag - thisTag; i++) toc = toc.parent();
+ }
+ toc.append('<li><a href="#' + this.id + '">' + $(this).text() + '</a></li>');
+ lastTag = thisTag;
+ });
+ if (!show) return;
+ html = '<div id="toc"><p class="title"><a class="hide_toc" href="#"><strong>Table of Contents</strong></a> <small>(<a href="#" class="float_toc">left</a>)</small></p></div>';
+ $('#content').prepend(html);
+ $('#toc').append(_toc);
+ $('#toc .hide_toc').toggle(function() {
+ $('#toc .top').slideUp('fast');
+ $('#toc').toggleClass('hidden');
+ $('#toc .title small').toggle();
+ }, function() {
+ $('#toc .top').slideDown('fast');
+ $('#toc').toggleClass('hidden');
+ $('#toc .title small').toggle();
+ });
+ $('#toc .float_toc').toggle(function() {
+ $(this).text('float');
+ $('#toc').toggleClass('nofloat');
+ }, function() {
+ $(this).text('left')
+ $('#toc').toggleClass('nofloat');
+ });
+}
+
+$(framesInit);
+$(createSourceLinks);
+$(createDefineLinks);
+$(createFullTreeLinks);
+$(fixBoxInfoHeights);
+$(searchFrameLinks);
+$(linkSummaries);
+$(keyboardShortcuts);
+$(summaryToggle);
+$(fixOutsideWorldLinks);
+$(generateTOC);
View
149 doc/js/full_list.js
@@ -0,0 +1,149 @@
+var inSearch = null;
+var searchIndex = 0;
+var searchCache = [];
+var searchString = '';
+
+function fullListSearch() {
+ // generate cache
+ searchCache = [];
+ $('#full_list li').each(function() {
+ var link = $(this).find('.object_link a');
+ searchCache.push({name:link.text(), node:$(this), link:link});
+ });
+
+ $('#search input').keyup(function() {
+ searchString = this.value.toLowerCase();
+ if (searchString == "") {
+ clearTimeout(inSearch);
+ inSearch = null;
+ $('#full_list, #content').removeClass('insearch');
+ $('#full_list li').removeClass('found').each(function() {
+
+ var link = $(this).find('.object_link a');
+ link.text(link.text());
+ });
+ if (clicked) {
+ clicked.parents('ul').each(function() {
+ $(this).removeClass('collapsed').prev().removeClass('collapsed');
+ });
+ }
+ highlight();
+ }
+ else {
+ if (inSearch) clearTimeout(inSearch);
+ searchIndex = 0;
+ lastRowClass = '';
+ $('#full_list, #content').addClass('insearch');
+ $('#noresults').text('');
+ searchItem();
+ }
+ });
+
+ $('#search input').focus();
+ $('#full_list').after("<div id='noresults'></div>")
+}
+
+var lastRowClass = '';
+function searchItem() {
+ for (var i = 0; i < searchCache.length / 50; i++) {
+ var item = searchCache[searchIndex];
+ if (item.name.toLowerCase().indexOf(searchString) == -1) {
+ item.node.removeClass('found');
+ }
+ else {
+ item.node.css('padding-left', '10px').addClass('found');
+ item.node.removeClass(lastRowClass).addClass(lastRowClass == 'r1' ? 'r2' : 'r1');
+ lastRowClass = item.node.hasClass('r1') ? 'r1' : 'r2';
+ item.link.html(item.name.replace(new RegExp("(" +
+ searchString.replace(/([\/.*+?|()\[\]{}\\])/g, "\\$1") + ")", "ig"),
+ '<strong>$1</strong>'));
+ }
+
+ if (searchCache.length == searchIndex + 1) {
+ return searchDone();
+ }
+ else {
+ searchIndex++;
+ }
+ }
+ inSearch = setTimeout('searchItem()', 0);
+}
+
+function searchDone() {
+ highlight(true);
+ if ($('#full_list li:visible').size() == 0) {
+ $('#noresults').text('No results were found.').hide().fadeIn();
+ }
+ else {
+ $('#noresults').text('');
+ }
+ $('#content').removeClass('insearch');
+ clearTimeout(inSearch);
+ inSearch = null;
+}
+
+clicked = null;
+function linkList() {
+ $('#full_list li, #full_list li a:last').click(function(evt) {
+ if ($(this).hasClass('toggle')) return true;
+ if (this.tagName.toLowerCase() == "li") {
+ var toggle = $(this).children('a.toggle');
+ if (toggle.size() > 0 && evt.pageX < toggle.offset().left) {
+ toggle.click();
+ return false;
+ }
+ }
+ if (clicked) clicked.removeClass('clicked');
+ var win = window.top.frames.main ? window.top.frames.main : window.parent;
+ if (this.tagName.toLowerCase() == "a") {
+ clicked = $(this).parent('li').addClass('clicked');
+ win.location = this.href;
+ }
+ else {
+ clicked = $(this).addClass('clicked');
+ win.location = $(this).find('a:last').attr('href');
+ }
+ return false;
+ });
+}
+
+function collapse() {
+ if (!$('#full_list').hasClass('class')) return;
+ $('#full_list.class a.toggle').click(function() {
+ $(this).parent().toggleClass('collapsed').next().toggleClass('collapsed');
+ highlight();
+ return false;
+ });
+ $('#full_list.class ul').each(function() {
+ $(this).addClass('collapsed').prev().addClass('collapsed');
+ });
+ $('#full_list.class').children().removeClass('collapsed');
+ highlight();
+}
+
+function highlight(no_padding) {
+ var n = 1;
+ $('#full_list li:visible').each(function() {
+ var next = n == 1 ? 2 : 1;
+ $(this).removeClass("r" + next).addClass("r" + n);
+ if (!no_padding && $('#full_list').hasClass('class')) {
+ $(this).css('padding-left', (10 + $(this).parents('ul').size() * 15) + 'px');
+ }
+ n = next;
+ });
+}
+
+function escapeShortcut() {
+ $(document).keydown(function(evt) {
+ if (evt.which == 27) {
+ $('#search_frame', window.top.document).slideUp(100);
+ $('#search a', window.top.document).removeClass('active inactive')
+ $(window.top).focus();
+ }
+ });
+}
+
+$(escapeShortcut);
+$(fullListSearch);
+$(linkList);
+$(collapse);
View
154 doc/js/jquery.js
@@ -0,0 +1,154 @@
+/*!
+ * jQuery JavaScript Library v1.4.2
+ * http://jquery.com/
+ *
+ * Copyright 2010, John Resig
+ * Dual licensed under the MIT or GPL Version 2 licenses.
+ * http://jquery.org/license
+ *
+ * Includes Sizzle.js
+ * http://sizzlejs.com/
+ * Copyright 2010, The Dojo Foundation
+ * Released under the MIT, BSD, and GPL Licenses.
+ *
+ * Date: Sat Feb 13 22:33:48 2010 -0500
+ */
+(function(A,w){function ma(){if(!c.isReady){try{s.documentElement.doScroll("left")}catch(a){setTimeout(ma,1);return}c.ready()}}function Qa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function X(a,b,d,f,e,j){var i=a.length;if(typeof b==="object"){for(var o in b)X(a,o,b[o],f,e,d);return a}if(d!==w){f=!j&&f&&c.isFunction(d);for(o=0;o<i;o++)e(a[o],b,f?d.call(a[o],o,e(a[o],b)):d,j);return a}return i?
+e(a[0],b):w}function J(){return(new Date).getTime()}function Y(){return false}function Z(){return true}function na(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function oa(a){var b,d=[],f=[],e=arguments,j,i,o,k,n,r;i=c.data(this,"events");if(!(a.liveFired===this||!i||!i.live||a.button&&a.type==="click")){a.liveFired=this;var u=i.live.slice(0);for(k=0;k<u.length;k++){i=u[k];i.origType.replace(O,"")===a.type?f.push(i.selector):u.splice(k--,1)}j=c(a.target).closest(f,a.currentTarget);n=0;for(r=
+j.length;n<r;n++)for(k=0;k<u.length;k++){i=u[k];if(j[n].selector===i.selector){o=j[n].elem;f=null;if(i.preType==="mouseenter"||i.preType==="mouseleave")f=c(a.relatedTarget).closest(i.selector)[0];if(!f||f!==o)d.push({elem:o,handleObj:i})}}n=0;for(r=d.length;n<r;n++){j=d[n];a.currentTarget=j.elem;a.data=j.handleObj.data;a.handleObj=j.handleObj;if(j.handleObj.origHandler.apply(j.elem,e)===false){b=false;break}}return b}}function pa(a,b){return"live."+(a&&a!=="*"?a+".":"")+b.replace(/\./g,"`").replace(/ /g,
+"&")}function qa(a){return!a||!a.parentNode||a.parentNode.nodeType===11}function ra(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var f=c.data(a[d++]),e=c.data(this,f);if(f=f&&f.events){delete e.handle;e.events={};for(var j in f)for(var i in f[j])c.event.add(this,j,f[j][i],f[j][i].data)}}})}function sa(a,b,d){var f,e,j;b=b&&b[0]?b[0].ownerDocument||b[0]:s;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===s&&!ta.test(a[0])&&(c.support.checkClone||!ua.test(a[0]))){e=
+true;if(j=c.fragments[a[0]])if(j!==1)f=j}if(!f){f=b.createDocumentFragment();c.clean(a,b,f,d)}if(e)c.fragments[a[0]]=j?f:1;return{fragment:f,cacheable:e}}function K(a,b){var d={};c.each(va.concat.apply([],va.slice(0,b)),function(){d[this]=a});return d}function wa(a){return"scrollTo"in a&&a.document?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var c=function(a,b){return new c.fn.init(a,b)},Ra=A.jQuery,Sa=A.$,s=A.document,T,Ta=/^[^<]*(<[\w\W]+>)[^>]*$|^#([\w-]+)$/,Ua=/^.[^:#\[\.,]*$/,Va=/\S/,
+Wa=/^(\s|\u00A0)+|(\s|\u00A0)+$/g,Xa=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,P=navigator.userAgent,xa=false,Q=[],L,$=Object.prototype.toString,aa=Object.prototype.hasOwnProperty,ba=Array.prototype.push,R=Array.prototype.slice,ya=Array.prototype.indexOf;c.fn=c.prototype={init:function(a,b){var d,f;if(!a)return this;if(a.nodeType){this.context=this[0]=a;this.length=1;return this}if(a==="body"&&!b){this.context=s;this[0]=s.body;this.selector="body";this.length=1;return this}if(typeof a==="string")if((d=Ta.exec(a))&&
+(d[1]||!b))if(d[1]){f=b?b.ownerDocument||b:s;if(a=Xa.exec(a))if(c.isPlainObject(b)){a=[s.createElement(a[1])];c.fn.attr.call(a,b,true)}else a=[f.createElement(a[1])];else{a=sa([d[1]],[f]);a=(a.cacheable?a.fragment.cloneNode(true):a.fragment).childNodes}return c.merge(this,a)}else{if(b=s.getElementById(d[2])){if(b.id!==d[2])return T.find(a);this.length=1;this[0]=b}this.context=s;this.selector=a;return this}else if(!b&&/^\w+$/.test(a)){this.selector=a;this.context=s;a=s.getElementsByTagName(a);return c.merge(this,
+a)}else return!b||b.jquery?(b||T).find(a):c(b).find(a);else if(c.isFunction(a))return T.ready(a);if(a.selector!==w){this.selector=a.selector;this.context=a.context}return c.makeArray(a,this)},selector:"",jquery:"1.4.2",length:0,size:function(){return this.length},toArray:function(){return R.call(this,0)},get:function(a){return a==null?this.toArray():a<0?this.slice(a)[0]:this[a]},pushStack:function(a,b,d){var f=c();c.isArray(a)?ba.apply(f,a):c.merge(f,a);f.prevObject=this;f.context=this.context;if(b===
+"find")f.selector=this.selector+(this.selector?" ":"")+d;else if(b)f.selector=this.selector+"."+b+"("+d+")";return f},each:function(a,b){return c.each(this,a,b)},ready:function(a){c.bindReady();if(c.isReady)a.call(s,c);else Q&&Q.push(a);return this},eq:function(a){return a===-1?this.slice(a):this.slice(a,+a+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(R.apply(this,arguments),"slice",R.call(arguments).join(","))},map:function(a){return this.pushStack(c.map(this,
+function(b,d){return a.call(b,d,b)}))},end:function(){return this.prevObject||c(null)},push:ba,sort:[].sort,splice:[].splice};c.fn.init.prototype=c.fn;c.extend=c.fn.extend=function(){var a=arguments[0]||{},b=1,d=arguments.length,f=false,e,j,i,o;if(typeof a==="boolean"){f=a;a=arguments[1]||{};b=2}if(typeof a!=="object"&&!c.isFunction(a))a={};if(d===b){a=this;--b}for(;b<d;b++)if((e=arguments[b])!=null)for(j in e){i=a[j];o=e[j];if(a!==o)if(f&&o&&(c.isPlainObject(o)||c.isArray(o))){i=i&&(c.isPlainObject(i)||
+c.isArray(i))?i:c.isArray(o)?[]:{};a[j]=c.extend(f,i,o)}else if(o!==w)a[j]=o}return a};c.extend({noConflict:function(a){A.$=Sa;if(a)A.jQuery=Ra;return c},isReady:false,ready:function(){if(!c.isReady){if(!s.body)return setTimeout(c.ready,13);c.isReady=true;if(Q){for(var a,b=0;a=Q[b++];)a.call(s,c);Q=null}c.fn.triggerHandler&&c(s).triggerHandler("ready")}},bindReady:function(){if(!xa){xa=true;if(s.readyState==="complete")return c.ready();if(s.addEventListener){s.addEventListener("DOMContentLoaded",
+L,false);A.addEventListener("load",c.ready,false)}else if(s.attachEvent){s.attachEvent("onreadystatechange",L);A.attachEvent("onload",c.ready);var a=false;try{a=A.frameElement==null}catch(b){}s.documentElement.doScroll&&a&&ma()}}},isFunction:function(a){return $.call(a)==="[object Function]"},isArray:function(a){return $.call(a)==="[object Array]"},isPlainObject:function(a){if(!a||$.call(a)!=="[object Object]"||a.nodeType||a.setInterval)return false;if(a.constructor&&!aa.call(a,"constructor")&&!aa.call(a.constructor.prototype,
+"isPrototypeOf"))return false;var b;for(b in a);return b===w||aa.call(a,b)},isEmptyObject:function(a){for(var b in a)return false;return true},error:function(a){throw a;},parseJSON:function(a){if(typeof a!=="string"||!a)return null;a=c.trim(a);if(/^[\],:{}\s]*$/.test(a.replace(/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,"@").replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,"]").replace(/(?:^|:|,)(?:\s*\[)+/g,"")))return A.JSON&&A.JSON.parse?A.JSON.parse(a):(new Function("return "+
+a))();else c.error("Invalid JSON: "+a)},noop:function(){},globalEval:function(a){if(a&&Va.test(a)){var b=s.getElementsByTagName("head")[0]||s.documentElement,d=s.createElement("script");d.type="text/javascript";if(c.support.scriptEval)d.appendChild(s.createTextNode(a));else d.text=a;b.insertBefore(d,b.firstChild);b.removeChild(d)}},nodeName:function(a,b){return a.nodeName&&a.nodeName.toUpperCase()===b.toUpperCase()},each:function(a,b,d){var f,e=0,j=a.length,i=j===w||c.isFunction(a);if(d)if(i)for(f in a){if(b.apply(a[f],
+d)===false)break}else for(;e<j;){if(b.apply(a[e++],d)===false)break}else if(i)for(f in a){if(b.call(a[f],f,a[f])===false)break}else for(d=a[0];e<j&&b.call(d,e,d)!==false;d=a[++e]);return a},trim:function(a){return(a||"").replace(Wa,"")},makeArray:function(a,b){b=b||[];if(a!=null)a.length==null||typeof a==="string"||c.isFunction(a)||typeof a!=="function"&&a.setInterval?ba.call(b,a):c.merge(b,a);return b},inArray:function(a,b){if(b.indexOf)return b.indexOf(a);for(var d=0,f=b.length;d<f;d++)if(b[d]===
+a)return d;return-1},merge:function(a,b){var d=a.length,f=0;if(typeof b.length==="number")for(var e=b.length;f<e;f++)a[d++]=b[f];else for(;b[f]!==w;)a[d++]=b[f++];a.length=d;return a},grep:function(a,b,d){for(var f=[],e=0,j=a.length;e<j;e++)!d!==!b(a[e],e)&&f.push(a[e]);return f},map:function(a,b,d){for(var f=[],e,j=0,i=a.length;j<i;j++){e=b(a[j],j,d);if(e!=null)f[f.length]=e}return f.concat.apply([],f)},guid:1,proxy:function(a,b,d){if(arguments.length===2)if(typeof b==="string"){d=a;a=d[b];b=w}else if(b&&
+!c.isFunction(b)){d=b;b=w}if(!b&&a)b=function(){return a.apply(d||this,arguments)};if(a)b.guid=a.guid=a.guid||b.guid||c.guid++;return b},uaMatch:function(a){a=a.toLowerCase();a=/(webkit)[ \/]([\w.]+)/.exec(a)||/(opera)(?:.*version)?[ \/]([\w.]+)/.exec(a)||/(msie) ([\w.]+)/.exec(a)||!/compatible/.test(a)&&/(mozilla)(?:.*? rv:([\w.]+))?/.exec(a)||[];return{browser:a[1]||"",version:a[2]||"0"}},browser:{}});P=c.uaMatch(P);if(P.browser){c.browser[P.browser]=true;c.browser.version=P.version}if(c.browser.webkit)c.browser.safari=
+true;if(ya)c.inArray=function(a,b){return ya.call(b,a)};T=c(s);if(s.addEventListener)L=function(){s.removeEventListener("DOMContentLoaded",L,false);c.ready()};else if(s.attachEvent)L=function(){if(s.readyState==="complete"){s.detachEvent("onreadystatechange",L);c.ready()}};(function(){c.support={};var a=s.documentElement,b=s.createElement("script"),d=s.createElement("div"),f="script"+J();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
+var e=d.getElementsByTagName("*"),j=d.getElementsByTagName("a")[0];if(!(!e||!e.length||!j)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(j.getAttribute("style")),hrefNormalized:j.getAttribute("href")==="/a",opacity:/^0.55$/.test(j.style.opacity),cssFloat:!!j.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:s.createElement("select").appendChild(s.createElement("option")).selected,
+parentNode:d.removeChild(d.appendChild(s.createElement("div"))).parentNode===null,deleteExpando:true,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null};b.type="text/javascript";try{b.appendChild(s.createTextNode("window."+f+"=1;"))}catch(i){}a.insertBefore(b,a.firstChild);if(A[f]){c.support.scriptEval=true;delete A[f]}try{delete b.test}catch(o){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function k(){c.support.noCloneEvent=
+false;d.detachEvent("onclick",k)});d.cloneNode(true).fireEvent("onclick")}d=s.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=s.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var k=s.createElement("div");k.style.width=k.style.paddingLeft="1px";s.body.appendChild(k);c.boxModel=c.support.boxModel=k.offsetWidth===2;s.body.removeChild(k).style.display="none"});a=function(k){var n=
+s.createElement("div");k="on"+k;var r=k in n;if(!r){n.setAttribute(k,"return;");r=typeof n[k]==="function"}return r};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=e=j=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var G="jQuery"+J(),Ya=0,za={};c.extend({cache:{},expando:G,noData:{embed:true,object:true,
+applet:true},data:function(a,b,d){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var f=a[G],e=c.cache;if(!f&&typeof b==="string"&&d===w)return null;f||(f=++Ya);if(typeof b==="object"){a[G]=f;e[f]=c.extend(true,{},b)}else if(!e[f]){a[G]=f;e[f]={}}a=e[f];if(d!==w)a[b]=d;return typeof b==="string"?a[b]:a}},removeData:function(a,b){if(!(a.nodeName&&c.noData[a.nodeName.toLowerCase()])){a=a==A?za:a;var d=a[G],f=c.cache,e=f[d];if(b){if(e){delete e[b];c.isEmptyObject(e)&&c.removeData(a)}}else{if(c.support.deleteExpando)delete a[c.expando];
+else a.removeAttribute&&a.removeAttribute(c.expando);delete f[d]}}}});c.fn.extend({data:function(a,b){if(typeof a==="undefined"&&this.length)return c.data(this[0]);else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===w){var f=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(f===w&&this.length)f=c.data(this[0],a);return f===w&&d[1]?this.data(d[0]):f}else return this.trigger("setData"+d[1]+"!",[d[0],b]).each(function(){c.data(this,
+a,b)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var f=c.data(a,b);if(!d)return f||[];if(!f||c.isArray(d))f=c.data(a,b,c.makeArray(d));else f.push(d);return f}},dequeue: