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 @@
1module 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
30end
lib/docs/filters/knockout/entries.rb+38−0
@@ -0,0 +1,38 @@
1module 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
38end
lib/docs/scrapers/knockout.rb+32−0
@@ -0,0 +1,32 @@
1module 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
32end