History

Merge pull request #1483 from yads/fix-ember-docs

update Ember docs to latest version

Simon Legner committed 5 years ago

Commit eca99702 parents 4c6c270 5c99f2c4 files · +71 −63Browse 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 +26 −34
  4. lib/docs/scrapers/ember.rb +30 −20
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', '.old-version-warning').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+26−34
@@ -2,60 +2,52 @@ 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 == 'Function'
21+ '3. Functions'
22+ elsif at_css('h1').content.start_with?('Package')
23+ '2. Packages'
3324 else
34− name.split('.').first
25+ name = name.remove(' (methods)').remove(' (properties)').remove(' (events)')
26+ # Reference gets sorted to the top by default, need to have it with other classes so add a zero width space
27+ name == 'Reference' ? 'Reference​' : name
3528 end
3629 else
37− if node = at_css('li.toc-level-0.selected > a')
38− "Guide: #{node.content.strip}"
39− else
40− 'Guide'
41− end
30+ '1. Guide'
4231 end
4332 end
4433
34+ def include_default_entry?
35+ return false if name == 'Function' # these should be included in the corresponding Package page
36+
37+ super
38+ end
39+
4540 def additional_entries
46− return [] unless base_url.path.start_with?('/api')
41+ return [] unless base_url.host.start_with?('api')
4742
4843 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')
44+ next unless heading = node.at_css('> h3[data-anchor]')
45+
5146 name = heading.at_css('span').content.strip
5247
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
48+ next if name.start_with?('_') # exclude private methods/properties
5749
58− name.prepend "#{self.name.remove(/ \(.*/)}."
50+ name.prepend "#{self.name.remove(/ \(.*/)}." unless self.name == 'Function'
5951 name << '()' if node['class'].include?('method')
6052 name << ' (event)' if node['class'].include?('event')
6153
lib/docs/scrapers/ember.rb+30−20
@@ -1,3 +1,5 @@
1+# frozen_string_literal: true
2+
13 module Docs
24 class Ember < UrlScraper
35 include MultipleBaseUrls
@@ -5,12 +7,6 @@ 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/'
13− ]
1410 self.links = {
1511 home: 'https://emberjs.com/',
1612 code: 'https://github.com/emberjs/ember.js'
@@ -21,10 +17,10 @@ module Docs · 4 unmodified lines
2117 options[:trailing_slash] = false
2218
2319 options[:container] = ->(filter) do
24− if filter.base_url.path.start_with?('/api')
25− 'main article'
26− else
20+ if filter.base_url.host.start_with?('api')
2721 'main'
22+ else
23+ 'main article'
2824 end
2925 end
3026
@@ -39,26 +35,40 @@ module Docs · 8 unmodified lines
3935 options[:skip_patterns] = [
4036 /\._/,
4137 /contributing/,
42− /classes\/String/,
43− /namespaces\/Ember/,
44− /namespaces\/DS/
38+ /tutorial/,
39+ /js-primer/,
40+ /in-depth-topics$/,
41+ /managing-dependencies$/
4542 ]
4643
4744 options[:attribution] = <<-HTML
48− &copy; 2017 Yehuda Katz, Tom Dale and Ember.js contributors<br>
45+ &copy; 2020 Yehuda Katz, Tom Dale and Ember.js contributors<br>
4946 Licensed under the MIT License.
5047 HTML
5148
52− def initial_urls
53− %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
57− )
49+ options[:decode_and_clean_paths] = true # handle paths like @ember/application
50+
51+ version '3' do
52+ self.release = '3.25.0'
53+ self.base_urls = %w[
54+ https://guides.emberjs.com/v3.25.0/
55+ https://api.emberjs.com/ember/3.25/
56+ https://api.emberjs.com/ember-data/3.25/
57+ ]
58+ end
59+
60+ version '2' do
61+ self.release = '2.18.0'
62+ self.base_urls = %w[
63+ https://guides.emberjs.com/v2.18.0/
64+ https://api.emberjs.com/ember/2.18/
65+ https://api.emberjs.com/ember-data/2.18/
66+ ]
67+ options[:skip_patterns].push(/handlebars-basics$/)
5868 end
5969
6070 def get_latest_version(opts)
61− doc = fetch_doc('https://emberjs.com/api/ember/release', opts)
71+ doc = fetch_doc('https://api.emberjs.com/ember/release', opts)
6272 doc.at_css('.sidebar > .select-container .ember-power-select-selected-item').content.strip
6373 end
6474 end