History

update Ember docs to latest version

* fix ember parsing to handle current guides/docs

Vadim Kazakov committed 5 years ago

Commit cc32a351 parent 38e07244 files · +60 −59Browse files

Unified · Split

4 files
  1. assets/javascripts/templates/pages/about_tmpl.coffee +1 −1
  2. lib/docs/filters/ember/clean_html.rb +14 −8
  3. lib/docs/filters/ember/entries.rb +24 −34
  4. lib/docs/scrapers/ember.rb +21 −16
assets/javascripts/templates/pages/about_tmpl.coffee+1−1
@@ -273,7 +273,7 @@ credits = [ · 272 unmodified lines
273273 'https://www.gnu.org/licenses/gpl-3.0.html'
274274 ], [
275275 'Ember.js',
276− '2017 Yehuda Katz, Tom Dale and Ember.js contributors',
276+ '2020 Yehuda Katz, Tom Dale and Ember.js contributors',
277277 'MIT',
278278 'https://raw.githubusercontent.com/emberjs/ember.js/master/LICENSE'
279279 ], [
lib/docs/filters/ember/clean_html.rb+14−8
@@ -2,8 +2,14 @@ module Docs · 1 unmodified line
22 class Ember
33 class CleanHtmlFilter < Filter
44 def call
5− css('hr', '.edit-page').remove
5+ css('hr', '.edit-page', '.heading__link__edit', 'aside').remove
66
7+ base_url.host.start_with?('api') ? api : guide
8+
9+ doc
10+ end
11+
12+ def api
713 # Remove code highlighting
814 css('.highlight').each do |node|
915 node.before(%(<div class="pre-title"><code>#{node.at_css('thead').content.strip}</code></div>)) if node.at_css('thead')
@@ -13,12 +19,6 @@ module Docs · 3 unmodified lines
1319 node['data-language'] = node['data-language'].sub(/(hbs|handlebars)/, 'html')
1420 end
1521
16− base_url.path.start_with?('/api') ? api : guide
17−
18− doc
19− end
20−
21− def api
2222 css('h1 .access').each do |node|
2323 node.replace(" (#{node.content})")
2424 end
@@ -72,7 +72,13 @@ module Docs · 47 unmodified lines
7272 end
7373
7474 def guide
75− @doc = at_css('article')
75+ # Remove code highlighting
76+ css('.filename').each do |node|
77+ node.content = node.at_css('pre code').content
78+ node.name = 'pre'
79+ node['data-language'] = node['class'][/(javascript|js|html|hbs|handlebars)/, 1]
80+ node['data-language'] = node['data-language'].sub(/(hbs|handlebars)/, 'html')
81+ end
7682
7783 if root_page?
7884 at_css('h1').content = 'Ember.js'
lib/docs/filters/ember/entries.rb+24−34
@@ -2,60 +2,50 @@ module Docs · 1 unmodified line
22 class Ember
33 class EntriesFilter < Docs::EntriesFilter
44 def get_name
5− if base_url.path.start_with?('/api')
6− name = at_css('h1').child.content.strip
7− # Remove "Ember." prefix if the next character is uppercase
8− name.sub! %r{\AEmber\.([A-Z])(?!EATURES)}, '\1'
5+ name = at_css('h1').content
6+ if base_url.host.start_with?('api')
7+ name.gsub!('Package', '')
8+ name.gsub!('Class', '')
9+ name.strip!
910 name << ' (methods)' if subpath.end_with?('/methods')
1011 name << ' (properties)' if subpath.end_with?('/properties')
1112 name << ' (events)' if subpath.end_with?('/events')
12− name
13− else
14− name = at_css('article h1').content.remove('Edit Page').strip
15− name = at_css('li.toc-level-0.selected > a').content if name == 'Introduction'
16− name
1713 end
14+ name
1815 end
1916
2017 def get_type
21− if base_url.path.start_with?('/api')
18+ if base_url.host.start_with?('api')
2219 name = self.name.remove(/ \(.*/)
23− if name =~ /\A[a-z\-]+\z/
24− 'Modules'
25− elsif name.start_with?('DS')
26− 'Data'
27− elsif name.start_with?('RSVP')
28− 'RSVP'
29− elsif name.start_with?('Test')
30− 'Test'
31− elsif name.start_with?('Ember')
32− name.split('.')[0..1].join('.')
20+ if name.start_with?('@') || name == 'rsvp'
21+ 'Packages'
22+ elsif name == 'Function'
23+ 'Functions'
3324 else
34− name.split('.').first
25+ 'Classes'
3526 end
3627 else
37− if node = at_css('li.toc-level-0.selected > a')
38− "Guide: #{node.content.strip}"
39− else
40− 'Guide'
41− end
28+ 'Guide'
4229 end
4330 end
4431
32+ def include_default_entry?
33+ return false if name == 'Function' # these should be included in the corresponding Package page
34+
35+ super
36+ end
37+
4538 def additional_entries
46− return [] unless base_url.path.start_with?('/api')
39+ return [] unless base_url.host.start_with?('api')
4740
4841 css('section').each_with_object [] do |node, entries|
49− next unless heading = node.at_css('h3[data-anchor]')
50− next if node.at_css('.github-link').content.include?('Inherited')
42+ next unless heading = node.at_css('> h3[data-anchor]')
43+
5144 name = heading.at_css('span').content.strip
5245
53− # Give their own type to "Ember.platform", "Ember.run", etc.
54− if self.type != 'Data' && name.include?('.')
55− type = "#{self.name.remove(/ \(.*/)}.#{name.split('.').first}"
56− end
46+ next if name.start_with?('_') # exclude private methods/properties
5747
58− name.prepend "#{self.name.remove(/ \(.*/)}."
48+ name.prepend "#{self.name.remove(/ \(.*/)}." unless self.name == 'Function'
5949 name << '()' if node['class'].include?('method')
6050 name << ' (event)' if node['class'].include?('event')
6151
lib/docs/scrapers/ember.rb+21−16
@@ -1,3 +1,5 @@
1+# frozen_string_literal: true
2+
13 module Docs
24 class Ember < UrlScraper
35 include MultipleBaseUrls
@@ -5,11 +7,11 @@ module Docs · 1 unmodified line
57 self.name = 'Ember.js'
68 self.slug = 'ember'
79 self.type = 'ember'
8− self.release = '2.15.0'
9− self.base_urls = [
10− 'https://guides.emberjs.com/v2.15.0/',
11− 'https://emberjs.com/api/ember/2.15/',
12− 'https://emberjs.com/api/ember-data/2.14/'
10+ self.release = '3.25.0'
11+ self.base_urls = %w[
12+ https://guides.emberjs.com/v3.25.0/
13+ https://api.emberjs.com/ember/3.25/
14+ https://api.emberjs.com/ember-data/3.25/
1315 ]
1416 self.links = {
1517 home: 'https://emberjs.com/',
@@ -21,10 +23,10 @@ module Docs · 5 unmodified lines
2123 options[:trailing_slash] = false
2224
2325 options[:container] = ->(filter) do
24− if filter.base_url.path.start_with?('/api')
25− 'main article'
26− else
26+ if filter.base_url.host.start_with?('api')
2727 'main'
28+ else
29+ 'main article'
2830 end
2931 end
3032
@@ -39,26 +41,29 @@ module Docs · 8 unmodified lines
3941 options[:skip_patterns] = [
4042 /\._/,
4143 /contributing/,
42− /classes\/String/,
43− /namespaces\/Ember/,
44− /namespaces\/DS/
44+ /tutorial/,
45+ /js-primer/,
46+ /in-depth-topics$/,
47+ /managing-dependencies$/
4548 ]
4649
4750 options[:attribution] = <<-HTML
48− &copy; 2017 Yehuda Katz, Tom Dale and Ember.js contributors<br>
51+ &copy; 2020 Yehuda Katz, Tom Dale and Ember.js contributors<br>
4952 Licensed under the MIT License.
5053 HTML
5154
55+ options[:decode_and_clean_paths] = true # handle paths like @ember/application
56+
5257 def initial_urls
5358 %w(
54− https://guides.emberjs.com/v2.15.0/
55− https://emberjs.com/api/ember/2.15/classes/Ember
56− https://emberjs.com/api/ember-data/2.14/classes/DS
59+ https://guides.emberjs.com/v3.25.0/
60+ https://api.emberjs.com/ember/3.25/
61+ https://api.emberjs.com/ember-data/3.25/
5762 )
5863 end
5964
6065 def get_latest_version(opts)
61− doc = fetch_doc('https://emberjs.com/api/ember/release', opts)
66+ doc = fetch_doc('https://api.emberjs.com/ember/release', opts)
6267 doc.at_css('.sidebar > .select-container .ember-power-select-selected-item').content.strip
6368 end
6469 end