diff --git a/assets/stylesheets/pages/_angular.scss b/assets/stylesheets/pages/_angular.scss index 2ce3a57f..ceb66861 100644 --- a/assets/stylesheets/pages/_angular.scss +++ b/assets/stylesheets/pages/_angular.scss @@ -1,24 +1,25 @@ ._angular { padding-left: 1rem; - h1, h2, > h3, .banner, .badges { margin-left: -1rem; } + h1, h2, > h3, .banner, .badges, .breadcrumbs { margin-left: -1rem; } ._mobile & { padding-left: 0; - h1, h2, > h3, .banner, .badges { margin-left: 0; } + h1, h2, > h3, .banner, .badges, .breadcrumbs { margin-left: 0; } } h2 { @extend %block-heading; } > h3 { @extend %block-label, %label-blue; } .code-example > h4, .pre-title { @extend %pre-heading; } - p > code, .status-badge { @extend %label; } + p > code, dd > code, .status-badge { @extend %label; } - .l-sub-section, .alert, .banner { @extend %note; } + .l-sub-section, .alert, .banner, .breadcrumbs { @extend %note; } .banner { @extend %note-green; } .alert.is-important { @extend %note-red; } - .alert.is-helpful { @extend %note-blue; } + .alert.is-helpful, .breadcrumbs { @extend %note-blue; } + .breadcrumbs { padding-left: 2em; } td > h3, .l-sub-section > h3, .l-sub-section > h4, .alert > h3, .alert > h4, .row-margin > h3 { margin-top: .25rem; diff --git a/lib/docs/filters/angular/clean_html.rb b/lib/docs/filters/angular/clean_html.rb index 31816319..94534503 100644 --- a/lib/docs/filters/angular/clean_html.rb +++ b/lib/docs/filters/angular/clean_html.rb @@ -9,7 +9,7 @@ module Docs node.to_html end.join(' ') badges = %(
#{badges}
) - container.child.before(at_css('header.hero h1')).before(badges).before(css('header.hero + .banner')) + container.child.before(at_css('header.hero h1')).before(badges).before(css('header.hero + .banner, header.hero .breadcrumbs')) @doc = container title = at_css('h1').content.strip @@ -17,6 +17,8 @@ module Docs at_css('h1').content = result[:entries].first.name elsif title == 'Angular' at_css('h1').content = slug.split('/').last.gsub('-', ' ') + elsif at_css('.breadcrumbs') && title != result[:entries].first.name + at_css('h1').content = result[:entries].first.name end css('pre.no-bg-with-indent').each do |node| @@ -28,9 +30,9 @@ module Docs node.parent.content = node.parent.css('code, pre').map(&:content).join("\n") end - css('button.verbose', 'button.verbose + .l-verbose-section', 'a[id=top]', 'a[href="#top"]').remove + css('button.verbose', 'button.verbose + .l-verbose-section', 'a[id=top]', 'a[href="#top"]', '.sidebar').remove - css('.c10', '.showcase', '.showcase-content', '.l-main-section', 'div.div', 'div[flex]', 'code-tabs', 'md-card', 'md-card-content', 'div:not([class])', 'footer', '.card-row', '.card-row-container', 'figure', 'blockquote', 'exported', 'defined', 'div.ng-scope', '.code-example header').each do |node| + css('.c10', '.showcase', '.showcase-content', '.l-main-section', 'div.div', 'div[flex]', 'code-tabs', 'md-card', 'md-card-content', 'div:not([class])', 'footer', '.card-row', '.card-row-container', 'figure', 'blockquote', 'exported', 'defined', 'div.ng-scope', '.code-example header', 'section.desc', '.row', '.dart-api-entry-main', '.main-content', 'section.summary', 'span.signature').each do |node| node.before(node.children).remove end @@ -44,6 +46,12 @@ module Docs css('pre.prettyprint').each do |node| node.content = node.content.strip + node['data-language'] = 'dart' if node['class'].include?('dart') + end + + css('.multi-line-signature').each do |node| + node.name = 'pre' + node.content = node.content.strip end css('a[id]:empty').each do |node| diff --git a/lib/docs/filters/angular/entries.rb b/lib/docs/filters/angular/entries.rb index a783e674..ce655ad4 100644 --- a/lib/docs/filters/angular/entries.rb +++ b/lib/docs/filters/angular/entries.rb @@ -3,7 +3,7 @@ module Docs class EntriesFilter < Docs::EntriesFilter def get_name if slug.start_with?('tutorial') || slug.start_with?('guide') - name = at_css('.nav-list-item.is-selected').content.strip + name = at_css('.nav-list-item.is-selected, header.hero h1').content.strip else name = at_css('header.hero h1').content.strip end @@ -18,7 +18,11 @@ module Docs end end - name << '()' if at_css('.hero-subtitle').try(:content) == 'Function' + subtitle = at_css('.hero-subtitle').try(:content) + breadcrumbs = css('.breadcrumbs li').map(&:content)[2..-2] + + name.prepend "#{breadcrumbs.join('.')}#" if breadcrumbs.present? && breadcrumbs[0] != name + name << '()' if %w(Function Method Constructor).include?(subtitle) name end @@ -46,7 +50,10 @@ module Docs private def mod - @mod ||= slug[/api\/([\w\-]+)\//, 1] + return @mod if defined?(@mod) + @mod = slug[/api\/([\w\-\.]+)\//, 1] + @mod.remove! 'angular2.' if @mod + @mod end end end diff --git a/lib/docs/scrapers/angular.rb b/lib/docs/scrapers/angular.rb index 3d5a64d6..2f29445f 100644 --- a/lib/docs/scrapers/angular.rb +++ b/lib/docs/scrapers/angular.rb @@ -36,7 +36,7 @@ module Docs stub 'api/' do capybara = load_capybara_selenium capybara.app_host = 'https://angular.io' - capybara.visit('/docs/ts/latest/api/') + capybara.visit(URL.parse(self.base_url).path + 'api/') capybara.execute_script('return document.body.innerHTML') end @@ -45,6 +45,16 @@ module Docs self.base_url = 'https://angular.io/docs/ts/latest/' end + version '2 Dart' do + self.release = '2.1.2' + self.base_url = 'https://angular.io/docs/dart/latest/' + + options[:skip_patterns] += [/angular2\.compiler/] + options[:skip_link] = ->(link) do + link.parent['class'].try(:include?, 'inherited') || link.parent.parent['class'].try(:include?, 'inherited') + end + end + private def parse(string)