History

Add Knockout.js documentation

Thibaut committed 12 years ago

Commit ece6ff81 parent 6b0390d14 files · +121 −-1Browse files

Showing the changes to lib/docs (3 of 14 files). Show all

Unified · Split

3 files
  1. lib/docs/filters/knockout/clean_html.rb +30 −0
  2. lib/docs/filters/knockout/entries.rb +38 −0
  3. lib/docs/scrapers/knockout.rb +32 −0
lib/docs/filters/knockout/clean_html.rb+30−0
@@ -0,0 +1,30 @@
1+module Docs
2+ class Knockout
3+ class CleanHtmlFilter < Filter
4+ def call
5+ root_page? ? root : other
6+
7+ css('pre > code').each do |node|
8+ node.before(node.children).remove
9+ end
10+
11+ doc
12+ end
13+
14+ def root
15+ @doc = at_css '.content'
16+ at_css('h1').content = 'Knockout.js'
17+ end
18+
19+ def other
20+ css('h1 ~ h1').each do |node|
21+ node.name = 'h2'
22+ end
23+
24+ css('.liveExample').each do |node|
25+ node.content = 'Live examples are not available on DevDocs, sorry.'
26+ end
27+ end
28+ end
29+ end
30+end
lib/docs/filters/knockout/entries.rb+38−0
@@ -0,0 +1,38 @@
1+module Docs
2+ class Knockout
3+ class EntriesFilter < Docs::EntriesFilter
4+ NAME_BY_SLUG = {
5+ 'custom-bindings' => 'Custom bindings',
6+ 'custom-bindings-controlling-descendant-bindings' => 'Descendant bindings',
7+ 'custom-bindings-for-virtual-elements' => 'Virtual elements',
8+ 'binding-preprocessing' => 'Binding preprocessing',
9+ 'json-data' => 'JSON data',
10+ 'extenders' => 'Extending observables',
11+ 'unobtrusive-event-handling' => 'Event handling',
12+ 'fn' => 'Custom functions' }
13+
14+ def get_name
15+ return NAME_BY_SLUG[slug] if NAME_BY_SLUG.has_key?(slug)
16+ name = at_css('h1').content.strip
17+ name.sub! 'The ', ''
18+ name.sub! %r{"(.+?)"}, '\1'
19+ name.gsub!(/ [A-Z]/) { |str| str.downcase! }
20+ name
21+ end
22+
23+ def get_type
24+ if name =~ /observable/i || slug =~ /extender/
25+ 'Observables'
26+ elsif slug.include?('binding') && !name.end_with?('binding')
27+ 'Binding'
28+ elsif slug.include? 'binding'
29+ 'Bindings'
30+ elsif slug.include? 'plugin'
31+ 'Plugins'
32+ else
33+ 'Miscellaneous'
34+ end
35+ end
36+ end
37+ end
38+end
lib/docs/scrapers/knockout.rb+32−0
@@ -0,0 +1,32 @@
1+module Docs
2+ class Knockout < UrlScraper
3+ self.name = 'Knockout.js'
4+ self.slug = 'knockout'
5+ self.type = 'knockout'
6+ self.version = '3.0.0'
7+ self.base_url = 'http://knockoutjs.com/documentation/'
8+ self.root_path = 'introduction.html'
9+
10+ html_filters.push 'knockout/clean_html', 'knockout/entries'
11+
12+ options[:follow_links] = ->(filter) { filter.root_page? }
13+ options[:container] = ->(filter) { filter.root_page? ? '#wrapper' : '.content' }
14+
15+ options[:only] = %w(
16+ json-data.html
17+ extenders.html
18+ throttle-extender.html
19+ unobtrusive-event-handling.html
20+ fn.html)
21+
22+ options[:only_patterns] = [
23+ /observable/i,
24+ /binding/,
25+ /plugin/]
26+
27+ options[:attribution] = <<-HTML
28+ &copy; Steven Sanderson, the Knockout.js team, and other contributors<br>
29+ Licensed under the MIT License.
30+ HTML
31+ end
32+end