diff --git a/assets/images/docs.png b/assets/images/docs.png
index d84bec93..e5fcbd0d 100644
Binary files a/assets/images/docs.png and b/assets/images/docs.png differ
diff --git a/assets/images/docs@2x.png b/assets/images/docs@2x.png
index de70a95a..285a61eb 100644
Binary files a/assets/images/docs@2x.png and b/assets/images/docs@2x.png differ
diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json
index d67f87eb..3ac79b10 100644
--- a/assets/javascripts/news.json
+++ b/assets/javascripts/news.json
@@ -1,5 +1,8 @@
[
[
+ "2016-11-20",
+ "New documentations: Yarn, Immutable.js and Async"
+ ], [
"2016-10-10",
"New documentations: scikit-learn and Statsmodels"
], [
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 3ac46435..19a3dd2e 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -99,6 +99,11 @@ credits = [
'2016 The Apache Software Foundation
Apache and the Apache feather logo are trademarks of The Apache Software Foundation.',
'Apache',
'https://www.apache.org/licenses/LICENSE-2.0'
+ ], [
+ 'Async',
+ '2010-2016 Caolan McMahon',
+ 'MIT',
+ 'https://raw.githubusercontent.com/caolan/async/master/LICENSE'
], [
'Backbone.js',
'2010-2016 Jeremy Ashkenas, DocumentCloud',
@@ -254,6 +259,11 @@ credits = [
'2005-2016 Haxe Foundation',
'MIT',
'http://haxe.org/foundation/open-source.html'
+ ], [
+ 'Immutable.js',
+ '2014-2016 Facebook, Inc.',
+ 'BSD',
+ 'https://raw.githubusercontent.com/facebook/immutable-js/master/LICENSE'
], [
'InfluxData',
'2015 InfluxData, Inc.',
@@ -569,6 +579,11 @@ credits = [
'2012-2016 Tobias Koppers',
'MIT',
'https://raw.githubusercontent.com/webpack/webpack/master/LICENSE'
+ ], [
+ 'Yarn',
+ '2016 Yarn Contributors',
+ 'BSD',
+ 'https://raw.githubusercontent.com/yarnpkg/yarn/master/LICENSE'
], [
'Yii',
'2008-2016 by Yii Software LLC',
diff --git a/assets/javascripts/views/pages/simple.coffee b/assets/javascripts/views/pages/simple.coffee
index 89e63acc..3a860cd8 100644
--- a/assets/javascripts/views/pages/simple.coffee
+++ b/assets/javascripts/views/pages/simple.coffee
@@ -8,6 +8,7 @@ class app.views.SimplePage extends app.views.BasePage
app.views.AngularPage =
app.views.AngularjsPage =
+app.views.AsyncPage =
app.views.BootstrapPage =
app.views.BowerPage =
app.views.CPage =
@@ -22,6 +23,7 @@ app.views.ElixirPage =
app.views.EmberPage =
app.views.ExpressPage =
app.views.GoPage =
+app.views.ImmutablePage =
app.views.InfluxdataPage =
app.views.KnockoutPage =
app.views.KotlinPage =
@@ -59,5 +61,6 @@ app.views.UnderscorePage =
app.views.VagrantPage =
app.views.VuePage =
app.views.WebpackPage =
+app.views.YarnPage =
app.views.YiiPage =
app.views.SimplePage
diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss
index 719f6c53..407d1bc0 100644
--- a/assets/stylesheets/application-dark.css.scss
+++ b/assets/stylesheets/application-dark.css.scss
@@ -34,6 +34,7 @@
'pages/angular',
'pages/angularjs',
'pages/apache',
+ 'pages/async',
'pages/bootstrap',
'pages/c',
'pages/cakephp',
diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss
index 61a340de..1d7798f1 100644
--- a/assets/stylesheets/application.css.scss
+++ b/assets/stylesheets/application.css.scss
@@ -34,6 +34,7 @@
'pages/angular',
'pages/angularjs',
'pages/apache',
+ 'pages/async',
'pages/bootstrap',
'pages/c',
'pages/cakephp',
diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss
index c481c560..21df3ac3 100644
--- a/assets/stylesheets/global/_icons.scss
+++ b/assets/stylesheets/global/_icons.scss
@@ -56,6 +56,7 @@
%icon-close-white { background-position: -2rem -5rem; }
%icon-back { background-position: -3rem -5rem; @extend %darkIconFix !optional; }
+._icon-async:before { background-position: -6rem 0; @extend %darkIconFix !optional; }
._icon-http:before { background-position: -7rem 0; @extend %darkIconFix !optional; }
._icon-jquery:before { background-position: -8rem 0; @extend %darkIconFix !optional; }
._icon-underscore:before { background-position: -9rem 0; @extend %darkIconFix !optional; }
@@ -72,6 +73,8 @@
._icon-angularjs:before { background-position: -9rem -1rem; }
._icon-coffeescript:before { background-position: 0 -2rem; @extend %darkIconFix !optional; }
._icon-ember:before { background-position: -1rem -2rem; }
+._icon-yarn:before { background-position: -2rem -2rem; }
+._icon-immutable:before { background-position: -3rem -2rem; @extend %darkIconFix !optional; }
._icon-jqueryui:before { background-position: -4rem -2rem; }
._icon-jquerymobile:before { background-position: -5rem -2rem; }
._icon-lodash:before { background-position: -6rem -2rem; }
diff --git a/assets/stylesheets/pages/_async.scss b/assets/stylesheets/pages/_async.scss
new file mode 100644
index 00000000..09d018f5
--- /dev/null
+++ b/assets/stylesheets/pages/_async.scss
@@ -0,0 +1,15 @@
+._async {
+ @extend %simple;
+
+ h3 > .type-signature {
+ float: right;
+ color: $textColorLight;
+ }
+
+ h3 > .signature-attributes {
+ font-size: .75rem;
+ font-weight: normal;
+ font-style: italic;
+ color: $textColorLighter;
+ }
+}
diff --git a/assets/stylesheets/pages/_simple.scss b/assets/stylesheets/pages/_simple.scss
index 0205a6f6..f86fe1e4 100644
--- a/assets/stylesheets/pages/_simple.scss
+++ b/assets/stylesheets/pages/_simple.scss
@@ -25,6 +25,7 @@
._gnu,
._grunt,
._haxe,
+._immutable,
._influxdata,
._less,
._lodash,
@@ -35,6 +36,7 @@
._redux,
._sinon,
._typescript,
-._webpack {
+._webpack,
+._yarn {
@extend %simple;
}
diff --git a/lib/docs/filters/async/clean_html.rb b/lib/docs/filters/async/clean_html.rb
new file mode 100644
index 00000000..c62c259f
--- /dev/null
+++ b/lib/docs/filters/async/clean_html.rb
@@ -0,0 +1,30 @@
+module Docs
+ class Async
+ class CleanHtmlFilter < Filter
+ def call
+ @doc = at_css('#main-container')
+
+ at_css('footer').remove
+
+ css('section', 'header', 'article', '.container-overview', 'span.signature', 'div.description').each do |node|
+ node.before(node.children).remove
+ end
+
+ css('h3', 'h4', 'h5').each do |node|
+ node.name = node.name.sub(/\d/) { |i| i.to_i - 1 }
+ end
+
+ css('dd ul').each do |node|
+ node.replace(node.css('li').map(&:inner_html).join(' '))
+ end
+
+ css('pre').each do |node|
+ node['data-language'] = 'javascript'
+ node.content = node.content
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/async/entries.rb b/lib/docs/filters/async/entries.rb
new file mode 100644
index 00000000..9a638be5
--- /dev/null
+++ b/lib/docs/filters/async/entries.rb
@@ -0,0 +1,22 @@
+module Docs
+ class Async
+ class EntriesFilter < Docs::EntriesFilter
+ def additional_entries
+ type = nil
+ entries = []
+
+ css('.nav.methods li').each do |node|
+ if node['class'] == 'toc-header'
+ type = node.content
+ else
+ name = node.content
+ id = node.at_css('a')['href'].remove('#')
+ entries << [name, id, type]
+ end
+ end
+
+ entries
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/immutable/clean_html.rb b/lib/docs/filters/immutable/clean_html.rb
new file mode 100644
index 00000000..b1e29e60
--- /dev/null
+++ b/lib/docs/filters/immutable/clean_html.rb
@@ -0,0 +1,48 @@
+module Docs
+ class Immutable
+ class CleanHtmlFilter < Filter
+ def call
+ css('section', 'span', 'div[data-reactid]').each do |node|
+ node.before(node.children).remove
+ end
+
+ css('.codeBlock').each do |node|
+ node.name = 'pre'
+ node.content = node.content
+ node['data-language'] = 'js'
+ end
+
+ css('*[data-reactid]').remove_attr('data-reactid')
+ css('a[target]').remove_attr('target')
+
+ css('a[href^="#"]').each do |node|
+ node['href'] = node['href'].sub(/\A#\//, '#').gsub('/', '.').downcase
+ end
+
+ type = type_id = nil
+ css('*').each do |node|
+ if node.name == 'h1'
+ node['id'] = type_id = node.content.strip.downcase
+ type = node.content.strip
+ elsif node.name == 'h3'
+ node['id'] = node.content.strip.downcase
+ node['id'] = node['id'].remove('()') unless node['id'] == "#{type_id}()"
+
+ unless node['id'].start_with?(type_id)
+ node.content = "#{type}##{node.content}"
+ node['id'] = "#{type_id}.#{node['id']}" unless node['id'].start_with?("#{type_id}.")
+ end
+ end
+ end
+
+ css('h4.groupTitle').each do |node|
+ node.name = 'h2'
+ end
+
+ css('*[class]').remove_attr('class')
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/immutable/entries.rb b/lib/docs/filters/immutable/entries.rb
new file mode 100644
index 00000000..0ef05a75
--- /dev/null
+++ b/lib/docs/filters/immutable/entries.rb
@@ -0,0 +1,23 @@
+module Docs
+ class Immutable
+ class EntriesFilter < Docs::EntriesFilter
+ def additional_entries
+ entries = []
+ type = nil
+
+ css('*').each do |node|
+ if node.name == 'h1'
+ name = node.content
+ type = node.content.split('.').first
+ entries << [name, node['id'], type]
+ elsif node.name == 'h3'
+ name = node.content
+ entries << [name, node['id'], type]
+ end
+ end
+
+ entries
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/marionette/clean_html.rb b/lib/docs/filters/marionette/clean_html.rb
index 3a23b73f..8eceaf59 100644
--- a/lib/docs/filters/marionette/clean_html.rb
+++ b/lib/docs/filters/marionette/clean_html.rb
@@ -12,7 +12,11 @@ module Docs
end
def other
- css('#source + h2', '#improve', '#source', '.glyphicon', 'p > br').remove
+ css('#source + h2', '#improve', '#source', '.glyphicon').remove
+
+ css('p > br').each do |node|
+ node.replace(' ')
+ end
css('pre > code').each do |node|
node.parent['data-language'] = node['class'][/lang-(\w+)/, 1] if node['class']
diff --git a/lib/docs/filters/npm/clean_html.rb b/lib/docs/filters/npm/clean_html.rb
index c86dcdfd..ad5d0374 100644
--- a/lib/docs/filters/npm/clean_html.rb
+++ b/lib/docs/filters/npm/clean_html.rb
@@ -17,6 +17,11 @@ module Docs
node.inner_html = node.inner_html.gsub(/<\/div>(?!\n|\z)/, "\n")
end
+ css('h1 + h1.subtitle').each do |node|
+ node.name = 'p'
+ node.inner_html += '.'
+ end
+
css('pre').each do |node|
node.content = node.content
end
diff --git a/lib/docs/filters/react/clean_html.rb b/lib/docs/filters/react/clean_html.rb
index ef6ea35f..e903d679 100644
--- a/lib/docs/filters/react/clean_html.rb
+++ b/lib/docs/filters/react/clean_html.rb
@@ -8,7 +8,7 @@ module Docs
at_css('h1').content = context[:root_title]
end
- css('.docs-prevnext', '.hash-link', '.edit-page-link', '.edit-github', 'a.hash', '.edit-page-block', 'a.show', 'a.hide').remove
+ 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
diff --git a/lib/docs/filters/react/entries.rb b/lib/docs/filters/react/entries.rb
index c70defe5..9488432b 100644
--- a/lib/docs/filters/react/entries.rb
+++ b/lib/docs/filters/react/entries.rb
@@ -1,69 +1,33 @@
module Docs
class React
class EntriesFilter < Docs::EntriesFilter
- API_SLUGS = %w(
- docs/top-level-api
- docs/component-api
- docs/component-specs
- )
-
- REPLACE_TYPES = {
- 'Quick Start' => 'Guides',
- 'User Guide' => 'Guides',
- 'The Basics' => 'Getting Started',
- 'apis' => 'APIs',
- 'components' => 'Components'
- }
-
def get_name
at_css('h1').children.select(&:text?).map(&:content).join.strip
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 = REPLACE_TYPES[type] || type
- type += ": #{name}" if type == 'Components'
type
end
def additional_entries
- if API_SLUGS.include?(slug)
- css('.inner-content h3, .inner-content h4').map do |node|
- name = node.content
- name.remove! %r{[#\(\)]}
- name.remove! %r{\w+\:}
- id = node.at_css('.anchor')['name']
- type = slug.include?('component') ? 'Component' : 'React'
- [name, id, type]
- end
- else
- entries = []
-
- css('.props > .prop > .propTitle', '.props > .prop > .methodTitle').each do |node| # react-native
- name = node.children.find(&:text?).try(:content)
- next if name.blank?
- sep = node.content.include?('static') ? '.' : '#'
- name.prepend(self.name + sep)
- name << '()' if node['class'].include?('methodTitle')
- id = node.at_css('.anchor')['name']
- entries << [name, id]
+ css('.inner-content h3 code, .inner-content h4 code').each_with_object([]) do |node, entries|
+ name = node.content
+ name.remove! %r{[#\(\)]}
+ name.remove! %r{\w+\:}
+ name.strip!
+ name = 'createFragmentobject' if name.include?('createFragmentobject')
+ id = node.parent.at_css('.anchor')['name']
+ type = if slug == 'react-component'
+ 'Reference: Component'
+ elsif slug == 'react-api'
+ 'Reference: React'
+ else
+ 'Reference'
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]
- end
-
- entries
+ entries << [name, id, type]
end
end
end
diff --git a/lib/docs/filters/yarn/clean_html.rb b/lib/docs/filters/yarn/clean_html.rb
new file mode 100644
index 00000000..6aceb70a
--- /dev/null
+++ b/lib/docs/filters/yarn/clean_html.rb
@@ -0,0 +1,56 @@
+module Docs
+ class Yarn
+ class CleanHtmlFilter < Filter
+ def call
+ root_page? ? root : other
+ doc
+ end
+
+ def root
+ @doc = at_css('.hero + .container')
+
+ at_css('.row').remove
+ css('> .container', 'hr').remove
+
+ css('.row', '.col-lg-4', '.card-block').each do |node|
+ node.before(node.children).remove
+ end
+
+ css('a.card').each do |node|
+ node.at_css('.float-right').replace %(
Read more)
+ node.before(node.children).remove
+ end
+ end
+
+ def other
+ @doc = at_css('.guide')
+
+ css('a.toc', '.nav-tabs', '#select-platform', '.guide-controls + .list-group', '.guide-controls').remove
+
+ css('.guide-content', '.tabs', '.tab-content').each do |node|
+ node.before(node.children).remove
+ end
+
+ unless at_css('h2')
+ css('h3', 'h4', 'h5').each do |node|
+ node.name = node.name.sub(/\d/) { |i| i.to_i - 1 }
+ end
+ end
+
+ unless at_css('h3')
+ css('h4', 'h5').each do |node|
+ node.name = node.name.sub(/\d/) { |i| i.to_i - 1 }
+ end
+ end
+
+ css('div.highlighter-rouge').each do |node|
+ node['data-language'] = node['class'][/language-(\w+)/, 1] if node['class']
+ node.content = node.content.strip
+ node.name = 'pre'
+ end
+
+ css('.highlighter-rouge').remove_attr('class')
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/yarn/entries.rb b/lib/docs/filters/yarn/entries.rb
new file mode 100644
index 00000000..809bb1a6
--- /dev/null
+++ b/lib/docs/filters/yarn/entries.rb
@@ -0,0 +1,21 @@
+module Docs
+ class Yarn
+ class EntriesFilter < Docs::EntriesFilter
+ def get_name
+ name = at_css('h1').content
+
+ unless type == 'CLI'
+ name.prepend "#{css('.guide-nav a').to_a.index(at_css('.guide-nav a.active')) + 1}. "
+ end
+
+ name
+ end
+
+ def get_type
+ type = at_css('.guide-nav a').content.strip
+ type.remove! ' Introduction'
+ type
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/angular.rb b/lib/docs/scrapers/angular.rb
index 2f29445f..f7860638 100644
--- a/lib/docs/scrapers/angular.rb
+++ b/lib/docs/scrapers/angular.rb
@@ -20,7 +20,8 @@ module Docs
options[:replace_paths] = {
'testing/index.html' => 'guide/testing.html',
'guide/glossary.html' => 'glossary.html',
- 'tutorial' => 'tutorial/'
+ 'tutorial' => 'tutorial/',
+ 'api' => 'api/'
}
options[:fix_urls] = -> (url) do
@@ -41,12 +42,12 @@ module Docs
end
version '2 TypeScript' do
- self.release = '2.1.2'
+ self.release = '2.2.1'
self.base_url = 'https://angular.io/docs/ts/latest/'
end
version '2 Dart' do
- self.release = '2.1.2'
+ self.release = '2.2.1'
self.base_url = 'https://angular.io/docs/dart/latest/'
options[:skip_patterns] += [/angular2\.compiler/]
diff --git a/lib/docs/scrapers/async.rb b/lib/docs/scrapers/async.rb
new file mode 100644
index 00000000..150478fa
--- /dev/null
+++ b/lib/docs/scrapers/async.rb
@@ -0,0 +1,21 @@
+module Docs
+ class Async < UrlScraper
+ self.type = 'async'
+ self.release = '2.1.2'
+ self.base_url = 'https://caolan.github.io/async/'
+ self.root_path = 'docs.html'
+ self.links = {
+ home: 'https://caolan.github.io/async/',
+ code: 'https://github.com/caolan/async'
+ }
+
+ html_filters.push 'async/entries', 'async/clean_html'
+
+ options[:skip_links] = true
+
+ options[:attribution] = <<-HTML
+ © 2010–2016 Caolan McMahon
+ Licensed under the MIT License.
+ HTML
+ end
+end
diff --git a/lib/docs/scrapers/immutable.rb b/lib/docs/scrapers/immutable.rb
new file mode 100644
index 00000000..3a316ea8
--- /dev/null
+++ b/lib/docs/scrapers/immutable.rb
@@ -0,0 +1,58 @@
+module Docs
+ class Immutable < UrlScraper
+ self.name = 'Immutable.js'
+ self.slug = 'immutable'
+ self.type = 'immutable'
+ self.release = '3.8.1'
+ self.base_url = 'https://facebook.github.io/immutable-js/docs/'
+ self.links = {
+ home: 'https://facebook.github.io/immutable-js/',
+ code: 'https://github.com/facebook/immutable-js'
+ }
+
+ html_filters.push 'immutable/clean_html', 'immutable/entries', 'title'
+
+ options[:skip_links] = true
+ options[:container] = '.docContents'
+ options[:root_title] = 'Immutable.js'
+
+ options[:attribution] = <<-HTML
+ © 2014–2015 Facebook, Inc.
+ Licensed under the 3-clause BSD License.
+ HTML
+
+ stub '' do
+ capybara = load_capybara_selenium
+ capybara.app_host = 'https://facebook.github.io'
+ capybara.visit(URL.parse(self.base_url).path)
+ capybara.execute_script <<-JS
+ var content, event, links, link;
+
+ event = document.createEvent('Event');
+ event.initEvent('hashchange', false, false);
+
+ content = document.querySelector('.docContents section').cloneNode(true);
+ links = Array.prototype.slice.call(document.querySelectorAll('.sideBar .scrollContent a'));
+
+ while (link = links.shift()) {
+ if (!document.body.contains(link)) {
+ document.body.appendChild(link);
+ }
+
+ link.click();
+ dispatchEvent(event);
+ content.innerHTML += document.querySelector('.docContents').innerHTML;
+
+ document.querySelectorAll('.sideBar .scrollContent .groupTitle').forEach(function(el) {
+ if (el.textContent == 'Types') {
+ Array.prototype.unshift.apply(links, Array.prototype.slice.call(el.parentNode.querySelectorAll('a')));
+ }
+ });
+ }
+
+ document.querySelector('.docContents').innerHTML = content.innerHTML;
+ JS
+ capybara.html
+ end
+ end
+end
diff --git a/lib/docs/scrapers/lodash.rb b/lib/docs/scrapers/lodash.rb
index d781f7e0..32ae5b43 100644
--- a/lib/docs/scrapers/lodash.rb
+++ b/lib/docs/scrapers/lodash.rb
@@ -19,7 +19,7 @@ module Docs
HTML
version '4' do
- self.release = '4.16.2'
+ self.release = '4.17.2'
self.base_url = "https://lodash.com/docs/#{release}"
end
diff --git a/lib/docs/scrapers/npm.rb b/lib/docs/scrapers/npm.rb
index 1a900a4e..d0520ad0 100644
--- a/lib/docs/scrapers/npm.rb
+++ b/lib/docs/scrapers/npm.rb
@@ -2,7 +2,7 @@ module Docs
class Npm < UrlScraper
self.name = 'npm'
self.type = 'npm'
- self.release = '3.10.2'
+ self.release = '4.0.2'
self.base_url = 'https://docs.npmjs.com/'
self.force_gzip = true
self.links = {
diff --git a/lib/docs/scrapers/rdoc/ruby.rb b/lib/docs/scrapers/rdoc/ruby.rb
index 34f9f4d1..59f32851 100644
--- a/lib/docs/scrapers/rdoc/ruby.rb
+++ b/lib/docs/scrapers/rdoc/ruby.rb
@@ -78,12 +78,12 @@ module Docs
HTML
version '2.3' do
- self.release = '2.3.0'
+ self.release = '2.3.2'
self.dir = '/Users/Thibaut/DevDocs/Docs/RDoc/Ruby23'
end
version '2.2' do
- self.release = '2.2.4'
+ self.release = '2.2.6'
self.dir = '/Users/Thibaut/DevDocs/Docs/RDoc/Ruby22'
end
end
diff --git a/lib/docs/scrapers/react.rb b/lib/docs/scrapers/react.rb
index 733aa2df..a55a4ced 100644
--- a/lib/docs/scrapers/react.rb
+++ b/lib/docs/scrapers/react.rb
@@ -2,9 +2,9 @@ module Docs
class React < UrlScraper
self.name = 'React'
self.type = 'react'
- self.release = '15.3.0'
- self.base_url = 'https://facebook.github.io/react/'
- self.root_path = 'docs/getting-started.html'
+ self.release = '15.4.0'
+ self.base_url = 'https://facebook.github.io/react/docs/'
+ self.root_path = 'hello-world.html'
self.links = {
home: 'https://facebook.github.io/react/',
code: 'https://github.com/facebook/react'
@@ -14,14 +14,17 @@ module Docs
options[:root_title] = 'React Documentation'
options[:container] = '.documentationContent'
- options[:only_patterns] = [/\Adocs\//, /\Atips\//]
- options[:skip] = %w(
- docs/
- docs/videos.html
- docs/complementary-tools.html
- docs/examples.html
- docs/conferences.html
- tips/introduction.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',
+ }
options[:attribution] = <<-HTML
© 2013–2016 Facebook Inc.
diff --git a/lib/docs/scrapers/vue.rb b/lib/docs/scrapers/vue.rb
index 06f1b944..bf88c579 100644
--- a/lib/docs/scrapers/vue.rb
+++ b/lib/docs/scrapers/vue.rb
@@ -18,7 +18,7 @@ module Docs
HTML
version '2' do
- self.release = '2.0.5'
+ self.release = '2.0.8'
self.base_url = 'https://vuejs.org/v2/'
self.root_path = 'guide/index.html'
self.initial_paths = %w(api/index.html)
diff --git a/lib/docs/scrapers/yarn.rb b/lib/docs/scrapers/yarn.rb
new file mode 100644
index 00000000..6f726abf
--- /dev/null
+++ b/lib/docs/scrapers/yarn.rb
@@ -0,0 +1,24 @@
+module Docs
+ class Yarn < UrlScraper
+ self.type = 'yarn'
+ self.release = '0.17.6'
+ self.base_url = 'https://yarnpkg.com/en/docs/'
+ self.links = {
+ home: 'https://yarnpkg.com/',
+ code: 'https://github.com/yarnpkg/yarn'
+ }
+
+ html_filters.push 'yarn/entries', 'yarn/clean_html', 'title'
+
+ options[:root_title] = 'Yarn'
+ options[:trailing_slash] = false
+
+ options[:skip] = %w(nightly)
+ options[:skip_patterns] = [/\Aorg\//]
+
+ options[:attribution] = <<-HTML
+ © 2016 Yarn Contributors
+ Licensed under the BSD License.
+ HTML
+ end
+end
diff --git a/public/icons/docs/async/16.png b/public/icons/docs/async/16.png
new file mode 100644
index 00000000..08eafa95
Binary files /dev/null and b/public/icons/docs/async/16.png differ
diff --git a/public/icons/docs/async/16@2x.png b/public/icons/docs/async/16@2x.png
new file mode 100644
index 00000000..acb36ba2
Binary files /dev/null and b/public/icons/docs/async/16@2x.png differ
diff --git a/public/icons/docs/async/SOURCE b/public/icons/docs/async/SOURCE
new file mode 100644
index 00000000..c5d679c8
--- /dev/null
+++ b/public/icons/docs/async/SOURCE
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/caolan/async/master/logo/favicon.ico
diff --git a/public/icons/docs/immutable/16.png b/public/icons/docs/immutable/16.png
new file mode 100644
index 00000000..6bdd99d6
Binary files /dev/null and b/public/icons/docs/immutable/16.png differ
diff --git a/public/icons/docs/immutable/16@2x.png b/public/icons/docs/immutable/16@2x.png
new file mode 100644
index 00000000..2a29e481
Binary files /dev/null and b/public/icons/docs/immutable/16@2x.png differ
diff --git a/public/icons/docs/immutable/SOURCE b/public/icons/docs/immutable/SOURCE
new file mode 100644
index 00000000..4ab56fe0
--- /dev/null
+++ b/public/icons/docs/immutable/SOURCE
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/facebook/immutable-js/master/pages/src/static/favicon.png
diff --git a/public/icons/docs/yarn/16.png b/public/icons/docs/yarn/16.png
new file mode 100644
index 00000000..f34c007b
Binary files /dev/null and b/public/icons/docs/yarn/16.png differ
diff --git a/public/icons/docs/yarn/16@2x.png b/public/icons/docs/yarn/16@2x.png
new file mode 100644
index 00000000..9782016d
Binary files /dev/null and b/public/icons/docs/yarn/16@2x.png differ
diff --git a/public/icons/docs/yarn/SOURCE b/public/icons/docs/yarn/SOURCE
new file mode 100644
index 00000000..05dc98ef
--- /dev/null
+++ b/public/icons/docs/yarn/SOURCE
@@ -0,0 +1 @@
+https://raw.githubusercontent.com/yarnpkg/website/master/favicon.ico