Ver Fonte

Update React documentation (16.0.0)

Thibaut Courouble há 8 anos atrás
pai
commit
e4d841d595

+ 39 - 1
assets/javascripts/vendor/prism.js

@@ -1,4 +1,4 @@
-/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+d+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+crystal+rust+scss+sql+typescript */
+/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+d+elixir+erlang+go+java+json+kotlin+lua+nginx+nim+perl+php+python+jsx+crystal+rust+scss+sql+typescript */
 var _self = (typeof window !== 'undefined')
 	? window   // if in browser
 	: (
@@ -1681,6 +1681,44 @@ Prism.languages.python= {
 	'punctuation' : /[{}[\];(),.:]/
 };
 
+(function(Prism) {
+
+var javascript = Prism.util.clone(Prism.languages.javascript);
+
+Prism.languages.jsx = Prism.languages.extend('markup', javascript);
+Prism.languages.jsx.tag.pattern= /<\/?[\w\.:-]+\s*(?:\s+(?:[\w\.:-]+(?:=(?:("|')(\\?[\s\S])*?\1|[^\s'">=]+|(\{[\s\S]*?\})))?|\{\.{3}\w+\}))*\s*\/?>/i;
+
+Prism.languages.jsx.tag.inside['attr-value'].pattern = /=(?!\{)(?:('|")[\s\S]*?(\1)|[^\s>]+)/i;
+
+Prism.languages.insertBefore('inside', 'attr-name', {
+	'spread': {
+		pattern: /\{\.{3}\w+\}/,
+		inside: {
+			'punctuation': /\{|\}|\./,
+			'attr-value': /\w+/
+		}
+	}
+}, Prism.languages.jsx.tag);
+
+var jsxExpression = Prism.util.clone(Prism.languages.jsx);
+
+delete jsxExpression.punctuation
+
+jsxExpression = Prism.languages.insertBefore('jsx', 'operator', {
+  'punctuation': /=(?={)|[{}[\];(),.:]/
+}, { jsx: jsxExpression });
+
+Prism.languages.insertBefore('inside', 'attr-value',{
+	'script': {
+		// Allow for one level of nesting
+		pattern: /=(\{(?:\{[^}]*\}|[^}])+\})/i,
+		inside: jsxExpression,
+		'alias': 'language-javascript'
+	}
+}, Prism.languages.jsx.tag);
+
+}(Prism));
+
 (function(Prism) {
 	Prism.languages.crystal = Prism.languages.extend('ruby', {
 		keyword: [

+ 11 - 43
lib/docs/filters/react/clean_html.rb

@@ -2,59 +2,27 @@ module Docs
   class React
     class CleanHtmlFilter < Filter
       def call
-        @doc = at_css('.inner-content, article.withtoc')
+        @doc = at_css('article')
 
         if root_page?
-          at_css('h1').content = context[:root_title]
+          at_css('h1').content = 'React Documentation'
         end
 
-        css('.docs-prevnext', '.hash-link', '.edit-page-link', '.edit-github', 'a.hash', '.edit-page-block', 'a.show', 'a.hide', 'hr').remove
-
-        css('table h1', 'table h2', 'table h3').each do |node|
-          table = node
-          table = table.parent until table.name == 'table'
-          table.replace(node)
-        end
-
-        css('a.anchor', 'a.hashref').each do |node|
-          node.parent['id'] ||= node['name'] || node['id']
-        end
-
-        css('.highlight').each do |node|
-          node.name = 'pre'
-          node.css('.gutter').remove
-          node['data-language'] = node.at_css('[data-lang]').try(:[], 'data-lang') || 'js'
-          node.content = node.content.strip
-        end
-
-        css('table.highlighttable').each do |node|
-          node.replace(node.at_css('pre.highlight'))
+        css('header', 'div[class^="css-"]', '.gatsby-resp-image-link span').each do |node|
+          node.before(node.children).remove
         end
 
-        css('.prism').each do |node|
-          node.name = 'pre'
-          node['data-language'] = node['class'][/(?<=language\-)(\w+)/]
+        css('.gatsby-highlight > pre').each do |node|
           node.content = node.content
+          node['data-language'] = node['class'][/(?<=gatsby\-code\-)(\w+)/]
+          node.remove_attribute('class')
+          node.parent.replace(node)
         end
 
-        css('blockquote > p:first-child').each do |node|
-          node.remove if node.content.strip == 'Note:'
-        end
-
-        css('h3#props', 'h3#methods').each { |node| node.name = 'h2' }
-        css('h4.propTitle').each { |node| node.name = 'h3' }
-
-        css('> div > div', '> div', 'div > span', '.props', '.prop').each do |node|
-          node.before(node.children).remove
-        end
-
-        css('a pre', 'h3 .propType').each do |node|
-          node.name = 'code'
-        end
+        css('a.anchor', 'a:contains("Edit this page")', 'hr').remove
 
-        css('a[target]').each do |node|
-          node.remove_attribute('target')
-        end
+        css('a').remove_attr('rel').remove_attr('target').remove_attr('class').remove_attr('style')
+        css('img').remove_attr('style').remove_attr('srcset').remove_attr('sizes').remove_attr('class')
 
         doc
       end

+ 11 - 26
lib/docs/filters/react/entries.rb

@@ -2,28 +2,24 @@ module Docs
   class React
     class EntriesFilter < Docs::EntriesFilter
       def get_name
-        at_css('h1').children.select(&:text?).map(&:content).join.strip
+        at_css('article h1').content
       end
 
       def get_type
-        link = at_css('.nav-docs-section .active, .toc .active')
-        return 'Miscellaneous' unless link
-        section = link.ancestors('.nav-docs-section, section').first
-        type = section.at_css('h3').content.strip
-        type
+        link = at_css("nav a[href='#{result[:path].split('/').last}']")
+        link.ancestors('ul').last.previous_element.content
       end
 
       def additional_entries
         entries = []
 
-        css('.inner-content h3 code, .inner-content h4 code').each do |node|
-          name = node.content
-          name.remove! %r{[#\(\)]}
-          name.remove! %r{\w+\:}
-          name.strip!
-          name = 'createFragmentobject' if name.include?('createFragmentobject')
-          id = name.parameterize
-          node.parent['id'] = id
+        css('article h3 code, article h4 code').each do |node|
+          next if node.previous.try(:content).present?
+          name = node.content.strip
+          # name.remove! %r{[#\(\)]}
+          # name.remove! %r{\w+\:}
+          # name.strip!
+          # name = 'createFragmentobject' if name.include?('createFragmentobject')
           type = if slug == 'react-component'
             'Reference: Component'
           elsif slug == 'react-api'
@@ -31,18 +27,7 @@ module Docs
           else
             'Reference'
           end
-          entries << [name, id, type]
-        end
-
-        css('.apiIndex a pre').each do |node| # relay
-          next unless node.parent['href'].start_with?('#')
-          id = node.parent['href'].remove('#')
-          name = node.content.strip
-          sep = name.start_with?('static') ? '.' : '#'
-          name.remove! %r{(abstract|static) }
-          name.sub! %r{\(.*\)}, '()'
-          name.prepend(self.name + sep)
-          entries << [name, id]
+          entries << [name, node.parent['id'], type]
         end
 
         entries

+ 13 - 13
lib/docs/scrapers/react.rb

@@ -1,29 +1,29 @@
 module Docs
   class React < UrlScraper
     self.name = 'React'
-    self.type = 'react'
-    self.release = '15.6.1'
-    self.base_url = 'https://facebook.github.io/react/docs/'
+    self.type = 'simple'
+    self.release = '16.0.0'
+    self.base_url = 'https://reactjs.org/docs/'
     self.root_path = 'hello-world.html'
     self.links = {
-      home: 'https://facebook.github.io/react/',
+      home: 'https://reactjs.org/',
       code: 'https://github.com/facebook/react'
     }
 
     html_filters.push 'react/entries', 'react/clean_html'
 
-    options[:root_title] = 'React Documentation'
-    options[:container] = '.documentationContent'
+    options[:skip] = %w(
+      codebase-overview.html
+      design-principles.html
+      how-to-contribute.html
+      implementation-notes.html
+    )
 
     options[:replace_paths] = {
-      'top-level-api.html' => 'react-api.html',
-      'working-with-the-browser.html' => 'refs-and-the-dom.html',
-      'interactivity-and-dynamic-uis.html' => 'state-and-lifecycle.html',
       'more-about-refs.html' => 'refs-and-the-dom.html',
-      'advanced-performance.html' => 'optimizing-performance.html',
-      'component-api.html' => 'react-component.html',
-      'component-specs.html' => 'react-component.html',
-      'multiple-components.html' => 'composition-vs-inheritance.html',
+      'interactivity-and-dynamic-uis.html' => 'state-and-lifecycle.html',
+      'working-with-the-browser.html' => 'refs-and-the-dom.html',
+      'top-level-api.html' => 'react-api.html',
     }
 
     options[:attribution] = <<-HTML