[\r\n\s]*<\/div>/m).nil? and \
+ response.body.index(/
TODO: write this dox page!<\/p>/).nil?
+ end
+ end
+end
diff --git a/lib/docs/scrapers/electron.rb b/lib/docs/scrapers/electron.rb
index 6cf32026..2af9dfcc 100644
--- a/lib/docs/scrapers/electron.rb
+++ b/lib/docs/scrapers/electron.rb
@@ -1,8 +1,8 @@
module Docs
class Electron < UrlScraper
self.type = 'simple'
- self.base_url = 'https://www.electronjs.org/docs'
- self.release = '13.1.7'
+ self.base_url = 'https://www.electronjs.org/docs/latest'
+ self.release = '18.0.1'
self.links = {
home: 'https://www.electronjs.org/',
code: 'https://github.com/electron/electron'
@@ -15,7 +15,6 @@ module Docs
options[:skip] = %w(guides development tutorial versions all)
options[:skip_patterns] = [
/\/history\z/,
- /\/latest/ # beta site
]
options[:replace_paths] = {
'api/web-view-tag' => 'api/webview-tag'
@@ -27,8 +26,8 @@ module Docs
HTML
def get_latest_version(opts)
- doc = fetch_doc('https://www.electronjs.org/docs', opts)
- doc.at_css('.docs-version').content
+ doc = fetch_doc('https://www.electronjs.org/releases/stable', opts)
+ doc.at_css(".tag").content.gsub!(/[a-zA-Z]/, '')
end
end
end
diff --git a/lib/docs/scrapers/elixir.rb b/lib/docs/scrapers/elixir.rb
index 26fd00e3..3b423264 100644
--- a/lib/docs/scrapers/elixir.rb
+++ b/lib/docs/scrapers/elixir.rb
@@ -33,6 +33,19 @@ module Docs
"https://elixir-lang.org/getting-started/introduction.html" ]
end
+ version '1.13' do
+ self.release = '1.13.4'
+ self.base_urls = [
+ "https://hexdocs.pm/elixir/#{release}/",
+ "https://hexdocs.pm/eex/#{release}/",
+ "https://hexdocs.pm/ex_unit/#{release}/",
+ "https://hexdocs.pm/iex/#{release}/",
+ "https://hexdocs.pm/logger/#{release}/",
+ "https://hexdocs.pm/mix/#{release}/",
+ 'https://elixir-lang.org/getting-started/'
+ ]
+ end
+
version '1.12' do
self.release = '1.12.0'
self.base_urls = [
diff --git a/lib/docs/scrapers/esbuild.rb b/lib/docs/scrapers/esbuild.rb
new file mode 100644
index 00000000..5484f155
--- /dev/null
+++ b/lib/docs/scrapers/esbuild.rb
@@ -0,0 +1,27 @@
+module Docs
+ class Esbuild < UrlScraper
+ self.name = 'esbuild'
+ self.slug = 'esbuild'
+ self.type = 'simple'
+ self.links = {
+ home: 'https://esbuild.github.io/',
+ code: 'https://github.com/evanw/esbuild'
+ }
+
+ options[:container] = 'main'
+ options[:root_title] = 'esbuild'
+
+ options[:attribution] = <<-HTML
+ © 2020 Evan Wallace
+ Licensed under the MIT License.
+ HTML
+
+ self.release = '0.14.2'
+ self.base_url = 'https://esbuild.github.io/'
+ html_filters.push 'esbuild/clean_html', 'esbuild/entries'
+
+ def get_latest_version(opts)
+ get_npm_version('esbuild', opts)
+ end
+ end
+end
diff --git a/lib/docs/scrapers/eslint.rb b/lib/docs/scrapers/eslint.rb
index 742259d6..4210523b 100644
--- a/lib/docs/scrapers/eslint.rb
+++ b/lib/docs/scrapers/eslint.rb
@@ -2,7 +2,7 @@ module Docs
class Eslint < UrlScraper
self.name = 'ESLint'
self.type = 'simple'
- self.release = '7.30.0'
+ self.release = '8.16.0'
self.base_url = 'https://eslint.org/docs/'
self.root_path = 'user-guide/getting-started'
self.links = {
@@ -17,7 +17,7 @@ module Docs
options[:replace_paths] = { 'user-guide' => 'user-guide/' }
options[:attribution] = <<-HTML
- © JS Foundation and other contributors
+ © OpenJS Foundation and other contributors
Licensed under the MIT License.
HTML
diff --git a/lib/docs/scrapers/fish.rb b/lib/docs/scrapers/fish.rb
index f828d7aa..4202a30d 100644
--- a/lib/docs/scrapers/fish.rb
+++ b/lib/docs/scrapers/fish.rb
@@ -12,10 +12,18 @@ module Docs
# https://fishshell.com/docs/current/license.html
options[:attribution] = <<-HTML
- © 2021 fish-shell developers
+ © 2022 fish-shell developers
Licensed under the GNU General Public License, version 2.
HTML
+ version '3.4' do
+ self.release = '3.4.0'
+ self.base_url = "https://fishshell.com/docs/#{version}/"
+
+ options[:skip].concat %w(genindex.html relnotes.html)
+ html_filters.push 'sphinx/clean_html', 'fish/clean_html_sphinx', 'fish/entries_sphinx'
+ end
+
version '3.3' do
self.release = '3.3.0'
self.base_url = "https://fishshell.com/docs/#{version}/"
diff --git a/lib/docs/scrapers/flask.rb b/lib/docs/scrapers/flask.rb
index 4251a61b..7b644b98 100755
--- a/lib/docs/scrapers/flask.rb
+++ b/lib/docs/scrapers/flask.rb
@@ -9,15 +9,20 @@ module Docs
html_filters.push 'flask/entries', 'sphinx/clean_html'
- options[:container] = '.body > .section'
+ options[:container] = '.body > section'
options[:skip] = %w(extensiondev/ styleguide/ upgrading/ changelog/ license/ contributing/)
options[:skip_patterns] = [/\Atutorial\//]
options[:attribution] = <<-HTML
- © 2007–2021 Pallets
+ © 2007–2022 Pallets
Licensed under the BSD 3-clause License.
HTML
+ version '2.1' do
+ self.release = '2.1.x'
+ self.base_url = "https://flask.palletsprojects.com/en/#{self.release}/"
+ end
+
version '2.0' do
self.release = '2.0.x'
self.base_url = "https://flask.palletsprojects.com/en/#{self.release}/"
diff --git a/lib/docs/scrapers/flow.rb b/lib/docs/scrapers/flow.rb
index 8158ac7d..d86c7563 100644
--- a/lib/docs/scrapers/flow.rb
+++ b/lib/docs/scrapers/flow.rb
@@ -1,7 +1,7 @@
module Docs
class Flow < UrlScraper
self.type = 'simple'
- self.release = '0.148.0'
+ self.release = '0.179.0'
self.base_url = 'https://flow.org/en/docs/'
self.links = {
home: 'https://flow.org/',
diff --git a/lib/docs/scrapers/git.rb b/lib/docs/scrapers/git.rb
index d7aa722c..aaebcef9 100644
--- a/lib/docs/scrapers/git.rb
+++ b/lib/docs/scrapers/git.rb
@@ -1,7 +1,7 @@
module Docs
class Git < UrlScraper
self.type = 'git'
- self.release = '2.32.0'
+ self.release = '2.36.0'
self.base_url = 'https://git-scm.com/docs'
self.initial_paths = %w(/git.html)
self.links = {
@@ -16,7 +16,7 @@ module Docs
options[:skip] = %w(/howto-index.html)
options[:attribution] = <<-HTML
- © 2012–2021 Scott Chacon and others
+ © 2012–2022 Scott Chacon and others
Licensed under the MIT License.
HTML
diff --git a/lib/docs/scrapers/gnu/gcc.rb b/lib/docs/scrapers/gnu/gcc.rb
index 7de85af0..873ee13a 100644
--- a/lib/docs/scrapers/gnu/gcc.rb
+++ b/lib/docs/scrapers/gnu/gcc.rb
@@ -46,6 +46,16 @@ module Docs
'Wtrigraphs.html' => 'Invocation.html'
}
+ version '12' do
+ self.release = '12.1.0'
+ self.base_url = "https://gcc.gnu.org/onlinedocs/gcc-#{release}/gcc/"
+ end
+
+ version '12 CPP' do
+ self.release = '12.1.0'
+ self.base_url = "https://gcc.gnu.org/onlinedocs/gcc-#{release}/cpp/"
+ end
+
version '11' do
self.release = '11.1.0'
self.base_url = "https://gcc.gnu.org/onlinedocs/gcc-#{release}/gcc/"
diff --git a/lib/docs/scrapers/gnu/gnu_fortran.rb b/lib/docs/scrapers/gnu/gnu_fortran.rb
index 6eec43ab..72c516f9 100644
--- a/lib/docs/scrapers/gnu/gnu_fortran.rb
+++ b/lib/docs/scrapers/gnu/gnu_fortran.rb
@@ -6,6 +6,11 @@ module Docs
home: 'https://gcc.gnu.org/fortran/'
}
+ version '12' do
+ self.release = '12.1.0'
+ self.base_url = "https://gcc.gnu.org/onlinedocs/gcc-#{release}/gfortran/"
+ end
+
version '11' do
self.release = '11.1.0'
self.base_url = "https://gcc.gnu.org/onlinedocs/gcc-#{release}/gfortran/"
diff --git a/lib/docs/scrapers/gnu_make.rb b/lib/docs/scrapers/gnu_make.rb
new file mode 100644
index 00000000..a2837a46
--- /dev/null
+++ b/lib/docs/scrapers/gnu_make.rb
@@ -0,0 +1,34 @@
+# coding: utf-8
+module Docs
+ class GnuMake < FileScraper
+ self.name = 'GNU Make'
+ self.type = 'gnu_make'
+ self.slug = 'gnu_make'
+ self.release = '4.3'
+ self.base_url= 'https://www.gnu.org/software/make/manual/html_node/'
+ self.root_path = 'index.html'
+ self.links = {
+ home:'https://www.gnu.org/software/make/manual/html_node/',
+ code: 'http://git.savannah.gnu.org/cgit/make.git/'
+ }
+
+ html_filters.push 'gnu_make/entries', 'gnu_make/clean_html'
+
+ options[:skip] = [
+ 'Concept-Index.html',
+ 'Name-Index.html',
+ 'GNU-Free-Documentation-License.html'
+ ]
+
+ options[:attribution]= <<-HTML
+ Copyright © 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020 Free Software Foundation, Inc.
+ Licensed under the GNU Free Documentation License.
+ HTML
+
+ def get_latest_version(opts)
+ body = fetch("https://www.gnu.org/software/make/manual/html_node/", opts)
+ body.scan(/version \d*\.?\d*/)[0].sub('version', '')
+ end
+
+ end
+end
diff --git a/lib/docs/scrapers/go.rb b/lib/docs/scrapers/go.rb
index 18abcbac..3b2e5511 100644
--- a/lib/docs/scrapers/go.rb
+++ b/lib/docs/scrapers/go.rb
@@ -1,14 +1,24 @@
module Docs
class Go < UrlScraper
self.type = 'go'
- self.release = '1.16'
+ self.release = '1.18.0'
self.base_url = 'https://golang.org/pkg/'
self.links = {
home: 'https://golang.org/',
code: 'https://go.googlesource.com/go'
}
+ # Run godoc locally, since https://golang.org/pkg/ redirects to https://pkg.go.dev/std with rate limiting / scraping protection.
+
+ # docker run --expose=6060 --rm -it docker.io/golang:1.18.0
+ #docker# go install golang.org/x/tools/cmd/godoc@latest
+ #docker# rm -r /usr/local/go/test/
+ #docker# godoc -http 0.0.0.0:6060 -v
+ self.base_url = 'http://localhost:6060/pkg/'
+
+ html_filters.push 'clean_local_urls'
html_filters.push 'go/clean_html', 'go/entries'
+ text_filters.replace 'attribution', 'go/attribution'
options[:trailing_slash] = true
options[:container] = '#page .container'
@@ -16,7 +26,7 @@ module Docs
options[:skip_patterns] = [/\/\//]
options[:fix_urls] = ->(url) do
- url.sub 'https://golang.org/pkg//', 'https://golang.org/pkg/'
+ url.sub '/pkg//', '/pkg/'
end
options[:attribution] = <<-HTML
@@ -25,8 +35,8 @@ module Docs
HTML
def get_latest_version(opts)
- doc = fetch_doc('https://golang.org/project/', opts)
- doc.at_css('#page ul > li > a').text[3..-1]
+ doc = fetch_doc('https://go.dev/dl/', opts)
+ doc.at_css('.download[href]')['href'][/go1[0-9.]+[0-9]/][2..]
end
private
diff --git a/lib/docs/scrapers/groovy.rb b/lib/docs/scrapers/groovy.rb
index ebd4242c..37197372 100755
--- a/lib/docs/scrapers/groovy.rb
+++ b/lib/docs/scrapers/groovy.rb
@@ -19,12 +19,17 @@ module Docs
]
options[:attribution] = <<-HTML
- © 2003-2020 The Apache Software Foundation
+ © 2003-2022 The Apache Software Foundation
Licensed under the Apache license.
HTML
+ version '4.0' do
+ self.release = '4.0.0'
+ self.base_url = "https://docs.groovy-lang.org/#{self.release}/html/gapi/"
+ end
+
version '3.0' do
- self.release = '3.0.7'
+ self.release = '3.0.9'
self.base_url = "https://docs.groovy-lang.org/#{self.release}/html/gapi/"
end
diff --git a/lib/docs/scrapers/haproxy.rb b/lib/docs/scrapers/haproxy.rb
index 6c354787..db558563 100644
--- a/lib/docs/scrapers/haproxy.rb
+++ b/lib/docs/scrapers/haproxy.rb
@@ -6,7 +6,7 @@ module Docs
self.initial_paths = %w(intro.html configuration.html management.html)
self.links = {
home: 'https://www.haproxy.org/',
- code: 'https://github.com/haproxy/haproxy/'
+ code: 'https://github.com/haproxy/haproxy'
}
html_filters.push 'haproxy/clean_html', 'haproxy/entries'
@@ -20,6 +20,11 @@ module Docs
Licensed under the GNU General Public License version 2.
HTML
+ version '2.5' do
+ self.release = '2.5.0'
+ self.base_url = "https://cbonte.github.io/haproxy-dconv/#{self.version}/"
+ end
+
version '2.4' do
self.release = '2.4.0'
self.base_url = "https://cbonte.github.io/haproxy-dconv/#{self.version}/"
diff --git a/lib/docs/scrapers/haskell.rb b/lib/docs/scrapers/haskell.rb
index 5ed6e967..471a7e0d 100755
--- a/lib/docs/scrapers/haskell.rb
+++ b/lib/docs/scrapers/haskell.rb
@@ -59,7 +59,7 @@ module Docs
end
version '9' do
- self.release = '9.0.1'
+ self.release = '9.2.1'
self.base_url = "https://downloads.haskell.org/~ghc/#{release}/docs/html/"
options[:container] = ->(filter) {filter.subpath.start_with?('users_guide') ? '.document' : '#content'}
end
diff --git a/lib/docs/scrapers/homebrew.rb b/lib/docs/scrapers/homebrew.rb
index 6a7b5aed..b6658701 100644
--- a/lib/docs/scrapers/homebrew.rb
+++ b/lib/docs/scrapers/homebrew.rb
@@ -2,7 +2,7 @@ module Docs
class Homebrew < UrlScraper
self.name = 'Homebrew'
self.type = 'simple'
- self.release = '3.1.2'
+ self.release = '3.3.11'
self.base_url = 'https://docs.brew.sh/'
self.links = {
home: 'https://brew.sh',
diff --git a/lib/docs/scrapers/http.rb b/lib/docs/scrapers/http.rb
index 9d989c6a..f1fb5ab5 100644
--- a/lib/docs/scrapers/http.rb
+++ b/lib/docs/scrapers/http.rb
@@ -2,15 +2,25 @@ module Docs
class Http < Mdn
include MultipleBaseUrls
+ # release = '2021-10-22'
self.name = 'HTTP'
- self.base_urls = ['https://developer.mozilla.org/en-US/docs/Web/HTTP', 'https://tools.ietf.org/html/']
+ self.base_urls = [
+ 'https://developer.mozilla.org/en-US/docs/Web/HTTP',
+ 'https://datatracker.ietf.org/doc/html/',
+ ]
html_filters.push 'http/clean_html', 'http/entries', 'title'
options[:root_title] = 'HTTP'
- options[:title] = ->(filter) { filter.current_url.host == 'tools.ietf.org' ? false : filter.default_title }
- options[:container] = ->(filter) { filter.current_url.host == 'tools.ietf.org' ? '.content' : nil }
- options[:skip_links] = ->(filter) { filter.current_url.host == 'tools.ietf.org' ? true : false }
+ options[:title] = ->(filter) do
+ filter.current_url.host == 'datatracker.ietf.org' ? false : filter.default_title
+ end
+ options[:container] = ->(filter) do
+ filter.current_url.host == 'datatracker.ietf.org' ? '.content .draftcontent' : Docs::Mdn.options[:container]
+ end
+ options[:skip_links] = ->(filter) do
+ filter.current_url.host == 'datatracker.ietf.org' ? true : false
+ end
options[:replace_paths] = { '/Access_control_CORS' => '/CORS' }
options[:fix_urls] = ->(url) do
url.sub! %r{(Status/\d\d\d)_[A-Z].+}, '\1'
@@ -18,7 +28,7 @@ module Docs
end
options[:attribution] = ->(filter) do
- if filter.current_url.host == 'tools.ietf.org'
+ if filter.current_url.host == 'datatracker.ietf.org'
"© document authors. All rights reserved."
else
Docs::Mdn.options[:attribution]
@@ -27,16 +37,16 @@ module Docs
def initial_urls
%w(https://developer.mozilla.org/en-US/docs/Web/HTTP
- https://tools.ietf.org/html/rfc2616
- https://tools.ietf.org/html/rfc4918
- https://tools.ietf.org/html/rfc7230
- https://tools.ietf.org/html/rfc7231
- https://tools.ietf.org/html/rfc7232
- https://tools.ietf.org/html/rfc7233
- https://tools.ietf.org/html/rfc7234
- https://tools.ietf.org/html/rfc7235
- https://tools.ietf.org/html/rfc7540
- https://tools.ietf.org/html/rfc5023)
+ https://datatracker.ietf.org/doc/html/rfc2616
+ https://datatracker.ietf.org/doc/html/rfc4918
+ https://datatracker.ietf.org/doc/html/rfc7230
+ https://datatracker.ietf.org/doc/html/rfc7231
+ https://datatracker.ietf.org/doc/html/rfc7232
+ https://datatracker.ietf.org/doc/html/rfc7233
+ https://datatracker.ietf.org/doc/html/rfc7234
+ https://datatracker.ietf.org/doc/html/rfc7235
+ https://datatracker.ietf.org/doc/html/rfc7540
+ https://datatracker.ietf.org/doc/html/rfc5023)
end
end
end
diff --git a/lib/docs/scrapers/i3.rb b/lib/docs/scrapers/i3.rb
new file mode 100644
index 00000000..abc4e791
--- /dev/null
+++ b/lib/docs/scrapers/i3.rb
@@ -0,0 +1,28 @@
+module Docs
+ class I3 < UrlScraper
+ self.name = 'i3'
+ self.type = 'simple'
+ self.slug = 'i3'
+ self.release = '4.20.1'
+ self.base_url = 'https://i3wm.org/docs/userguide.html'
+ self.links = {
+ home: 'https://i3wm.org/',
+ code: 'https://github.com/i3/i3'
+ }
+
+ html_filters.push 'i3/entries', 'title'
+
+ options[:container] = 'main'
+ options[:skip_links] = true
+
+ options[:attribution] = <<-HTML
+ © 2009, Michael Stapelberg and contributors
+ HTML
+
+ def get_latest_version(opts)
+ tags = get_github_tags('i3', 'i3', opts)
+ tag = tags.find {|tag| tag['name'].start_with?('4.')}
+ tag['name']
+ end
+ end
+end
diff --git a/lib/docs/scrapers/immutable.rb b/lib/docs/scrapers/immutable.rb
index 8b1b47a2..1768ac66 100644
--- a/lib/docs/scrapers/immutable.rb
+++ b/lib/docs/scrapers/immutable.rb
@@ -3,58 +3,31 @@ module Docs
self.name = 'Immutable.js'
self.slug = 'immutable'
self.type = 'simple'
- self.release = '3.8.1'
- self.base_url = 'https://facebook.github.io/immutable-js/docs/'
+ self.release = '4.0.0'
+ self.base_url = 'https://immutable-js.com/docs/v4.0.0/'
self.links = {
- home: 'https://facebook.github.io/immutable-js/',
+ home: 'https://immutable-js.com/',
code: 'https://github.com/facebook/immutable-js'
}
- html_filters.push 'immutable/clean_html', 'immutable/entries', 'title'
+ html_filters.push 'immutable/clean_html', 'immutable/entries'
- options[:skip_links] = true
options[:container] = '.docContents'
options[:root_title] = 'Immutable.js'
+ options[:trailing_slash] = true
+ options[:fix_urls] = ->(url) do
+ url.sub! '/index.html', ''
+ url.sub! '/index', ''
+ url
+ end
+
+
options[:attribution] = <<-HTML
- © 2014–2015 Facebook, Inc.
+ © 2014–present, Lee Byron and other contributors
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
-
def get_latest_version(opts)
get_npm_version('immutable', opts)
end
diff --git a/lib/docs/scrapers/jasmine.rb b/lib/docs/scrapers/jasmine.rb
index bdcb3626..753e6134 100644
--- a/lib/docs/scrapers/jasmine.rb
+++ b/lib/docs/scrapers/jasmine.rb
@@ -1,8 +1,8 @@
module Docs
class Jasmine < UrlScraper
- self.type = 'simple'
- self.release = '3.7.1'
- self.base_url = 'https://jasmine.github.io/api/3.7/'
+ self.type = 'jasmine'
+ self.release = '4.0.0'
+ self.base_url = 'https://jasmine.github.io/api/4.0/'
self.root_path = 'index.html'
self.links = {
home: 'https://jasmine.github.io/',
diff --git a/lib/docs/scrapers/jest.rb b/lib/docs/scrapers/jest.rb
index 879cec8b..619a3d6a 100644
--- a/lib/docs/scrapers/jest.rb
+++ b/lib/docs/scrapers/jest.rb
@@ -2,7 +2,7 @@ module Docs
class Jest < UrlScraper
include MultipleBaseUrls
self.type = 'simple'
- self.release = '27.0.4'
+ self.release = '28.0.3'
self.base_urls = [
'https://jestjs.io/docs/',
@@ -18,11 +18,12 @@ module Docs
html_filters.push 'jest/entries', 'jest/clean_html'
options[:skip_patterns] = [
- /\d*.x/ # avoid deprecated versions
+ /^next/,
+ /\d+\.[x\d]/ # avoid deprecated versions
]
options[:attribution] = <<-HTML
- © 2021 Facebook, Inc.
+ © 2022 Facebook, Inc.
Licensed under the MIT License.
HTML
diff --git a/lib/docs/scrapers/jquery/jquery_ui.rb b/lib/docs/scrapers/jquery/jquery_ui.rb
index 021d1d22..d4f66fef 100644
--- a/lib/docs/scrapers/jquery/jquery_ui.rb
+++ b/lib/docs/scrapers/jquery/jquery_ui.rb
@@ -2,7 +2,7 @@ module Docs
class JqueryUi < Jquery
self.name = 'jQuery UI'
self.slug = 'jqueryui'
- self.release = '1.12.1'
+ self.release = '1.13.0'
self.base_url = 'https://api.jqueryui.com'
self.root_path = '/category/all'
diff --git a/lib/docs/scrapers/jsdoc.rb b/lib/docs/scrapers/jsdoc.rb
index 32799e8c..49745d60 100644
--- a/lib/docs/scrapers/jsdoc.rb
+++ b/lib/docs/scrapers/jsdoc.rb
@@ -2,7 +2,7 @@ module Docs
class Jsdoc < UrlScraper
self.name = 'JSDoc'
self.type = 'simple'
- self.release = '3.5.5'
+ self.release = '3.6.7'
self.base_url = 'https://jsdoc.app/'
self.root_path = 'index.html'
self.links = {
@@ -23,7 +23,7 @@ module Docs
HTML
def get_latest_version(opts)
- get_latest_github_release('jsdoc', 'jsdoc', opts)
+ get_npm_version('jsdoc', opts)
end
end
end
diff --git a/lib/docs/scrapers/julia.rb b/lib/docs/scrapers/julia.rb
index 8d5b4a3e..f7a03e53 100644
--- a/lib/docs/scrapers/julia.rb
+++ b/lib/docs/scrapers/julia.rb
@@ -11,6 +11,17 @@ module Docs
Licensed under the MIT License.
HTML
+ version '1.7' do
+ self.release = '1.7.0'
+ self.base_url = "https://docs.julialang.org/en/v#{release}/"
+ self.type = 'julia'
+
+ html_filters.push 'julia/entries', 'julia/clean_html'
+
+ options[:container] = '.docs-main'
+ options[:only_patterns] = [/\Amanual\//, /\Abase\//, /\Astdlib\//]
+ end
+
version '1.6' do
self.release = '1.6.0'
self.base_url = "https://docs.julialang.org/en/v#{release}/"
diff --git a/lib/docs/scrapers/kotlin.rb b/lib/docs/scrapers/kotlin.rb
index 91ca19ff..38882986 100644
--- a/lib/docs/scrapers/kotlin.rb
+++ b/lib/docs/scrapers/kotlin.rb
@@ -1,7 +1,6 @@
module Docs
class Kotlin < UrlScraper
self.type = 'kotlin'
- self.release = '1.4.10'
self.base_url = 'https://kotlinlang.org/'
self.root_path = 'api/latest/jvm/stdlib/index.html'
self.links = {
@@ -11,9 +10,8 @@ module Docs
html_filters.push 'kotlin/entries', 'kotlin/clean_html'
- options[:container] = '.global-content'
-
- options[:only_patterns] = [/\Adocs\/tutorials\//, /\Adocs\/reference\//, /\Aapi\/latest\/jvm\/stdlib\//]
+ options[:container] = 'article'
+ options[:only_patterns] = [/\Adocs\//, /\Aapi\/latest\/jvm\/stdlib\//]
options[:skip_patterns] = [/stdlib\/org\./]
options[:skip] = %w(
api/latest/jvm/stdlib/alltypes/index.html
@@ -22,23 +20,39 @@ module Docs
docs/events.html
docs/resources.html
docs/reference/grammar.html)
- options[:replace_paths] = {
- 'api/latest/jvm/stdlib/' => 'api/latest/jvm/stdlib/index.html',
- 'docs/reference/coroutines.html' => 'docs/reference/coroutines-overview.html',
- 'api/latest/jvm/stdlib/kotlin/fold.html' => 'api/latest/jvm/stdlib/kotlin.collections/fold.html',
- 'api/latest/jvm/stdlib/kotlin/get-or-else.html' => 'api/latest/jvm/stdlib/kotlin.collections/get-or-else.html',
- 'api/latest/jvm/stdlib/kotlin/map.html' => 'api/latest/jvm/stdlib/kotlin.collections/map.html',
- 'docs/tutorials/native/targeting-multiple-platforms.html' => 'docs/tutorials/native/basic-kotlin-native-app.html',
- 'api/latest/jvm/stdlib/kotlin/-throwable/print-stack-trace.html' => 'api/latest/jvm/stdlib/kotlin/print-stack-trace.html',
- }
+
+ options[:fix_urls] = ->(url) do
+ url.sub! %r{/docs/reference/}, '/docs/'
+ url
+ end
options[:attribution] = <<-HTML
- © 2010–2020 JetBrains s.r.o. and Kotlin Programming Language contributors
+ © 2010–2022 JetBrains s.r.o. and Kotlin Programming Language contributors
Licensed under the Apache License, Version 2.0.
HTML
+ version '1.6' do
+ self.release = '1.6.20'
+ end
+
+ version '1.4' do
+ self.release = '1.4.10'
+ end
+
def get_latest_version(opts)
get_latest_github_release('JetBrains', 'kotlin', opts)
end
+
+ private
+
+ def process_response?(response)
+ return false unless super
+ response.body !~ /http-equiv="refresh"/i
+ end
+
+ def parse(response)
+ response.body.gsub! %r{
]*>([\W\w]+?)
}, '
\2
'
+ super
+ end
end
end
diff --git a/lib/docs/scrapers/kubectl.rb b/lib/docs/scrapers/kubectl.rb
new file mode 100644
index 00000000..0f888ddf
--- /dev/null
+++ b/lib/docs/scrapers/kubectl.rb
@@ -0,0 +1,38 @@
+module Docs
+ class Kubectl < UrlScraper
+ self.name = 'Kubectl'
+ self.type = 'kubectl'
+ self.root_path = ''
+ self.links = {
+ home: 'https://kubernetes.io/docs/reference/kubectl/',
+ code: 'https://github.com/kubernetes/kubernetes'
+ }
+ self.release = "1.23"
+ self.base_url = "https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands"
+
+ html_filters.push 'kubectl/entries', 'kubectl/clean_html'
+
+ options[:container] = '#page-content-wrapper'
+
+ options[:attribution] = <<-HTML
+ © 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
+ Copyright © 2022 The Linux Foundation ®. All rights reserved.
+ HTML
+
+ # latest version has a special URL that does not include the version identifier
+ version do
+ self.release = "1.23"
+ self.base_url = "https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands"
+ end
+
+ version '1.20' do
+ self.release = "#{version}"
+ self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/generated/kubectl/kubectl-commands"
+ end
+
+ def get_latest_version(opts)
+ get_latest_github_release('kubernetes', 'kubernetes', opts)
+ end
+
+ end
+end
diff --git a/lib/docs/scrapers/kubernetes.rb b/lib/docs/scrapers/kubernetes.rb
new file mode 100644
index 00000000..143c16ae
--- /dev/null
+++ b/lib/docs/scrapers/kubernetes.rb
@@ -0,0 +1,37 @@
+module Docs
+ class Kubernetes < UrlScraper
+ self.name = 'Kubernetes'
+ self.type = 'kubernetes'
+ self.root_path = '/'
+ self.links = {
+ home: 'https://kubernetes.io/',
+ code: 'https://github.com/kubernetes/kubernetes'
+ }
+
+ # https://kubernetes.io/docs/reference/kubernetes-api/
+ html_filters.push 'kubernetes/entries', 'kubernetes/clean_html'
+
+ options[:container] = '.td-content'
+
+ options[:attribution] = <<-HTML
+ © 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
+ Copyright © 2022 The Linux Foundation ®. All rights reserved.
+ HTML
+
+ # latest version has a special URL that does not include the version identifier
+ version do
+ self.release = "1.23"
+ self.base_url = "https://kubernetes.io/docs/reference/kubernetes-api/"
+ end
+
+ version '1.20' do
+ self.release = "#{version}"
+ self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/kubernetes-api/"
+ end
+
+ def get_latest_version(opts)
+ get_latest_github_release('kubernetes', 'kubernetes', opts)
+ end
+
+ end
+end
diff --git a/lib/docs/scrapers/leaflet.rb b/lib/docs/scrapers/leaflet.rb
index 69abef25..52bae4ff 100644
--- a/lib/docs/scrapers/leaflet.rb
+++ b/lib/docs/scrapers/leaflet.rb
@@ -14,11 +14,16 @@ module Docs
options[:skip_links] = true
options[:attribution] = <<-HTML
- © 2010–2019 Vladimir Agafonkin
+ © 2010–2022 Vladimir Agafonkin
© 2010–2011, CloudMade
Maps © OpenStreetMap contributors.
HTML
+ version '1.8' do
+ self.release = '1.8.0'
+ self.base_url = "https://leafletjs.com/SlavaUkraini/reference.html"
+ end
+
version '1.7' do
self.release = '1.7.1'
self.base_url = "https://leafletjs.com/reference-#{release}.html"
@@ -31,7 +36,7 @@ module Docs
version '1.5' do
self.release = '1.5.1'
- self.base_url = "https://leafletjs.com/reference-1.5.0.html"
+ self.base_url = "https://leafletjs.com/reference-#{release}.html"
end
version '1.4' do
@@ -60,9 +65,9 @@ module Docs
end
def get_latest_version(opts)
- doc = fetch_doc('https://leafletjs.com/index.html', opts)
- link = doc.css('ul > li > a').to_a.select {|node| node.content == 'Docs'}.first
- link['href'].scan(/reference-([0-9.]+)\.html/)[0][0]
+ doc = fetch_doc('https://leafletjs.com/reference-versions.html', opts)
+ link = doc.at_css('.container > ul > li:last-child > a').content
+ link.sub(/[a-zA-Z\s]*/, '')
end
end
end
diff --git a/lib/docs/scrapers/mariadb.rb b/lib/docs/scrapers/mariadb.rb
index fedc1e5e..cf2c69c3 100644
--- a/lib/docs/scrapers/mariadb.rb
+++ b/lib/docs/scrapers/mariadb.rb
@@ -2,9 +2,9 @@ module Docs
class Mariadb < UrlScraper
self.name = 'MariaDB'
self.type = 'mariadb'
- self.release = '10.4.8'
+ self.release = '10.6.4'
self.base_url = 'https://mariadb.com/kb/en/'
- self.root_path = 'library/documentation/'
+ self.root_path = 'documentation/'
self.links = {
home: 'https://mariadb.com/',
code: 'https://github.com/MariaDB/server'
@@ -24,13 +24,14 @@ module Docs
]
options[:attribution] = <<-HTML
- © 2019 MariaDB
+ © 2021 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
HTML
def get_latest_version(opts)
doc = fetch_doc('https://mariadb.com/downloads/', opts)
- doc.at_css('[data-version-id="mariadb_server-versions"] option').content.split('-')[0]
+ doc.at_css('#version-select-community_server > option').content.split('-')[0]
end
+
end
end
diff --git a/lib/docs/scrapers/matplotlib.rb b/lib/docs/scrapers/matplotlib.rb
index a76dcc61..a2add6bf 100644
--- a/lib/docs/scrapers/matplotlib.rb
+++ b/lib/docs/scrapers/matplotlib.rb
@@ -12,7 +12,7 @@ module Docs
html_filters.push 'matplotlib/entries', 'sphinx/clean_html'
- options[:container] = '.body'
+ options[:container] = '.body, section'
options[:skip] = %w(api_changes.html tutorial.html faq.html)
options[:attribution] = <<-HTML
@@ -20,8 +20,17 @@ module Docs
Licensed under the Matplotlib License Agreement.
HTML
+ version '3.5' do
+ self.release = '3.5.1'
+ self.base_urls = [
+ "https://matplotlib.org/#{release}/api/",
+ "https://matplotlib.org/#{release}/mpl_toolkits/mplot3d/",
+ "https://matplotlib.org/#{release}/mpl_toolkits/axes_grid/api/"
+ ]
+ end
+
version '3.4' do
- self.release = '3.4.1'
+ self.release = '3.4.3'
self.base_urls = [
"https://matplotlib.org/#{release}/api/",
"https://matplotlib.org/#{release}/mpl_toolkits/mplot3d/",
diff --git a/lib/docs/scrapers/mdn/css.rb b/lib/docs/scrapers/mdn/css.rb
index 98a126ac..8405997a 100644
--- a/lib/docs/scrapers/mdn/css.rb
+++ b/lib/docs/scrapers/mdn/css.rb
@@ -1,5 +1,6 @@
module Docs
class Css < Mdn
+ # release = '2022-04-27'
self.name = 'CSS'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/CSS'
self.root_path = '/Reference'
diff --git a/lib/docs/scrapers/mdn/dom.rb b/lib/docs/scrapers/mdn/dom.rb
index b75af630..a28a8120 100644
--- a/lib/docs/scrapers/mdn/dom.rb
+++ b/lib/docs/scrapers/mdn/dom.rb
@@ -1,12 +1,14 @@
module Docs
class Dom < Mdn
- self.name = 'DOM'
+ # release = '2022-04-27'
+ self.name = 'Web APIs'
+ self.slug = 'dom'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/API'
html_filters.push 'dom/clean_html', 'dom/entries'
- options[:root_title] = 'DOM'
+ options[:root_title] = 'Web APIs'
end
end
diff --git a/lib/docs/scrapers/mdn/html.rb b/lib/docs/scrapers/mdn/html.rb
index 1f108711..9a72cd3c 100644
--- a/lib/docs/scrapers/mdn/html.rb
+++ b/lib/docs/scrapers/mdn/html.rb
@@ -2,6 +2,7 @@ module Docs
class Html < Mdn
prepend FixInternalUrlsBehavior
+ # release = '2022-04-27'
self.name = 'HTML'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/HTML'
diff --git a/lib/docs/scrapers/mdn/javascript.rb b/lib/docs/scrapers/mdn/javascript.rb
index 8238d3b4..d8b9f969 100644
--- a/lib/docs/scrapers/mdn/javascript.rb
+++ b/lib/docs/scrapers/mdn/javascript.rb
@@ -3,6 +3,7 @@ module Docs
prepend FixInternalUrlsBehavior
prepend FixRedirectionsBehavior
+ # release = '2022-04-28'
self.name = 'JavaScript'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference'
diff --git a/lib/docs/scrapers/mdn/mdn.rb b/lib/docs/scrapers/mdn/mdn.rb
index 2b31668a..977079a8 100644
--- a/lib/docs/scrapers/mdn/mdn.rb
+++ b/lib/docs/scrapers/mdn/mdn.rb
@@ -13,7 +13,7 @@ module Docs
}
options[:attribution] = <<-HTML
- © 2005–2021 MDN contributors.
+ © 2005–2022 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
HTML
diff --git a/lib/docs/scrapers/mdn/svg.rb b/lib/docs/scrapers/mdn/svg.rb
index 4a9de544..b5a22b06 100644
--- a/lib/docs/scrapers/mdn/svg.rb
+++ b/lib/docs/scrapers/mdn/svg.rb
@@ -3,6 +3,7 @@ module Docs
prepend FixInternalUrlsBehavior
prepend FixRedirectionsBehavior
+ # release = '2022-04-20'
self.name = 'SVG'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web/SVG'
diff --git a/lib/docs/scrapers/mdn/web_extensions.rb b/lib/docs/scrapers/mdn/web_extensions.rb
index 1a5f528a..c0c49185 100644
--- a/lib/docs/scrapers/mdn/web_extensions.rb
+++ b/lib/docs/scrapers/mdn/web_extensions.rb
@@ -1,5 +1,6 @@
module Docs
class WebExtensions < Mdn
+ # release = '2022-04-28'
self.name = 'Web Extensions'
self.slug = 'web_extensions'
self.links = {
diff --git a/lib/docs/scrapers/mdn/xslt_xpath.rb b/lib/docs/scrapers/mdn/xslt_xpath.rb
index 286c48f4..26a298b6 100644
--- a/lib/docs/scrapers/mdn/xslt_xpath.rb
+++ b/lib/docs/scrapers/mdn/xslt_xpath.rb
@@ -1,5 +1,6 @@
module Docs
class XsltXpath < Mdn
+ # release = '2021-10-22'
self.name = 'XSLT & XPath'
self.slug = 'xslt_xpath'
self.base_url = 'https://developer.mozilla.org/en-US/docs/Web'
diff --git a/lib/docs/scrapers/mkdocs/django_rest_framework.rb b/lib/docs/scrapers/mkdocs/django_rest_framework.rb
index db58eb8c..54ea2694 100644
--- a/lib/docs/scrapers/mkdocs/django_rest_framework.rb
+++ b/lib/docs/scrapers/mkdocs/django_rest_framework.rb
@@ -1,7 +1,7 @@
module Docs
class DjangoRestFramework < Mkdocs
self.name = 'Django REST Framework'
- self.release = '3.9.3'
+ self.release = '3.12.4'
self.slug = 'django_rest_framework'
self.base_url = 'https://www.django-rest-framework.org/'
self.root_path = 'index.html'
diff --git a/lib/docs/scrapers/nginx.rb b/lib/docs/scrapers/nginx.rb
index e53781dc..b28c0e7a 100644
--- a/lib/docs/scrapers/nginx.rb
+++ b/lib/docs/scrapers/nginx.rb
@@ -2,7 +2,7 @@ module Docs
class Nginx < UrlScraper
self.name = 'nginx'
self.type = 'nginx'
- self.release = '1.21.0'
+ self.release = '1.22.0'
self.base_url = 'https://nginx.org/en/docs/'
self.links = {
home: 'https://nginx.org/',
@@ -23,7 +23,7 @@ module Docs
# http://nginx.org/LICENSE
options[:attribution] = <<-HTML
© 2002-2021 Igor Sysoev
- © 2011-2021 Nginx, Inc.
+ © 2011-2022 Nginx, Inc.
Licensed under the BSD License.
HTML
diff --git a/lib/docs/scrapers/nix.rb b/lib/docs/scrapers/nix.rb
new file mode 100644
index 00000000..ae549818
--- /dev/null
+++ b/lib/docs/scrapers/nix.rb
@@ -0,0 +1,31 @@
+module Docs
+ class Nix < UrlScraper
+ self.type = 'simple'
+ self.release = '2.8.0'
+ self.base_url = 'https://nixos.org/manual/'
+ self.root_path = 'nix/stable/expressions/builtins.html'
+ self.initial_paths = %w(
+ nix/stable/expressions/builtins.html
+ nixpkgs/stable/index.html)
+ self.links = {
+ home: 'https://nixos.org/',
+ code: 'https://github.com/NixOS/nix'
+ }
+
+ html_filters.push 'nix/clean_html', 'nix/entries'
+
+ options[:skip_links] = true
+
+ options[:attribution] = <<-HTML
+ © 2022 NixOS Contributors
+ Licensed under the LGPL License.
+ HTML
+
+ def get_latest_version(opts)
+ doc = fetch_doc('https://nixos.org/manual/nix/stable/', opts)
+ json = JSON.parse(doc.at_css('body')['data-nix-channels'])
+ channel = json.find { |c| c['channel'] == 'stable' }
+ channel['version']
+ end
+ end
+end
diff --git a/lib/docs/scrapers/node.rb b/lib/docs/scrapers/node.rb
index 5ca3d10f..8d5db646 100644
--- a/lib/docs/scrapers/node.rb
+++ b/lib/docs/scrapers/node.rb
@@ -24,10 +24,15 @@ module Docs
HTML
version do
- self.release = '16.6.0'
+ self.release = '18.0.0'
self.base_url = 'https://nodejs.org/api/'
end
+ version '16 LTS' do
+ self.release = '16.13.2'
+ self.base_url = 'https://nodejs.org/dist/latest-v16.x/docs/api/'
+ end
+
version '14 LTS' do
self.release = '14.17.0'
self.base_url = 'https://nodejs.org/dist/latest-v14.x/docs/api/'
diff --git a/lib/docs/scrapers/nokogiri2.rb b/lib/docs/scrapers/nokogiri2.rb
index 0bb975c0..cef6e565 100644
--- a/lib/docs/scrapers/nokogiri2.rb
+++ b/lib/docs/scrapers/nokogiri2.rb
@@ -7,7 +7,8 @@ module Docs
self.name = 'Nokogiri'
self.slug = 'nokogiri'
- self.release = '1.10.4'
+ self.release = '1.13.0'
+ self.base_url = "https://nokogiri.org/rdoc/"
html_filters.replace 'rdoc/entries', 'nokogiri2/entries'
@@ -15,7 +16,7 @@ module Docs
options[:only_patterns] = [/\ANokogiri/, /\AXSD/]
options[:attribution] = <<-HTML
- © 2008–2018 Aaron Patterson, Mike Dalessio, Charles Nutter, Sergio Arbeo,
+ © 2008–2021 Aaron Patterson, Mike Dalessio, Charles Nutter, Sergio Arbeo,
Patrick Mahoney, Yoko Harada, Akinori MUSHA, John Shahid, Lars Kanis
Licensed under the MIT License.
HTML
diff --git a/lib/docs/scrapers/npm.rb b/lib/docs/scrapers/npm.rb
index 7816c365..ce2be86b 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 = '7.10.0'
+ self.release = '8.3.0'
self.base_url = 'https://docs.npmjs.com/'
self.force_gzip = true
self.links = {
@@ -18,16 +18,20 @@ module Docs
'all',
'misc/index',
'cli',
- 'orgs/',
+ 'organizations/',
+ 'orgs',
'removing-members-from-your-org',
'adding-members-to-your-org',
- 'downloading-and-installing-packages'
+ 'downloading-and-installing-packages',
]
options[:skip_patterns] = [
/\Aenterprise/,
/\Acompany/,
- /\Apolicies/
+ /\Apolicies/,
+ /cli\/v6/,
+ /cli\/v7/,
+ /\/\Z/ # avoid pages with a trailing slash, those pages mess up the entries
]
options[:attribution] = <<-HTML
@@ -39,36 +43,38 @@ module Docs
# fix duplicates
options[:fix_urls] = -> (url) do
url.sub!('private-modules/intro', 'creating-and-publishing-private-packages')
- url.sub!('cli/audit', 'cli/v6/commands/npm-audit')
- url.sub!('cli/uninstall', 'cli/v6/commands/npm-uninstall')
- url.sub!('cli/npm', 'cli/v6/commands/npm')
- url.sub!('cli-documentation', 'cli/v6')
- url.sub!('misc/registry', 'cli/v6/using-npm/registry')
- url.sub!('cli/adduser', 'cli/v6/commands/npm-adduser')
- url.sub!('cli/profile', 'cli/v6/commands/npm-profile')
- url.sub!('cli/token', 'cli/v6/commands/npm-token')
- url.sub!('cli/publish', 'cli/v6/commands/npm-publish')
- url.sub!('cli/unpublish', 'cli/v6/commands/npm-unpublish')
- url.sub!('cli/deprecate', 'cli/v6/commands/npm-deprecate')
- url.sub!('cli/access', 'cli/v6/commands/npm-access')
- url.sub!('misc/config', 'cli/v6/using-npm/config')
- url.sub!('misc/developers', 'cli/v6/using-npm/developers')
url.sub!('managing-team-access-to-packages', 'managing-team-access-to-organization-packages')
url.sub!('accepting-or-rejecting-an-org-invitation', 'accepting-or-rejecting-an-organization-invitation')
url.sub!('org-roles-and-permissions', 'organization-roles-and-permissions')
url.sub!('upgrading-to-a-paid-org-plan', 'upgrading-to-a-paid-organization-plan')
- url.sub!('files/package.json', 'cli/v6/configuring-npm/package-json')
url.sub!('managing-team-access-to-org-packages', 'managing-team-access-to-organization-packages')
url.sub!('about-package-json-and-package-lock-json-files', 'creating-a-package-json-file')
- url.sub!('cli/team', 'cli/v6/commands/npm-team')
- url.sub!('cli/version', 'cli/v6/commands/npm-version')
- url.sub!('creating-a-packge-json-file', 'cli/v6/configuring-npm/package-json')
- url.sub!('cli/outdated', 'cli/v6/commands/npm-outdated')
- url.sub!('cli/owner', 'cli/v6/commands/npm-owner')
- url.sub!('cli/install', 'cli/v6/commands/npm-install')
- url.sub!('cli/update', 'cli/v6/commands/npm-update')
- url.sub!('cli/config', 'cli/v6/commands/npm-config')
- url.sub!('cli/dist-tag', 'cli/v6/commands/npm-dist-tag')
+ url.sub!('cli/npm', 'cli/v8/commands/npm/')
+ url.sub!('cli/config', 'cli/v8/commands/npm-config/')
+ url.sub!('misc/registry', 'cli/v8/using-npm/registry/')
+ url.sub!('cli-documentation', 'cli/v8')
+ url.sub!('cli-documentation/files/npmrc', 'cli/v8/configuring-npm/npmrc/')
+ url.sub!('configuring-your-registry-settings-as-an-npm-enterprise-user', 'enterprise')
+ url.sub!('cli/publish', 'cli/v8/commands/npm-publish/')
+ url.sub!('cli/deprecate', 'cli/v8/commands/npm-deprecate/')
+ url.sub!('cli/access', 'cli/v8/commands/npm-access/')
+ url.sub!('cli/adduser', 'cli/v8/commands/npm-adduser/')
+ url.sub!('misc/config', 'cli/v8/using-npm/config/')
+ url.sub!('cli/token', 'cli/v8/commands/npm-token/')
+ url.sub!('cli/unpublish', 'cli/v8/commands/npm-unpublish/')
+ url.sub!('files/package.json', 'cli/v8/configuring-npm/package-json/')
+ url.sub!('cli/profile', 'cli/v8/commands/npm-profile/')
+ url.sub!('creating-a-packge-json-file', 'cli/v8/configuring-npm/package-json/')
+ url.sub!('cli/dist-tag', 'cli/v8/commands/npm-dist-tag/')
+ url.sub!('cli/team', 'cli/v8/commands/npm-team/')
+ url.sub!('cli/version', 'cli/v8/commands/npm-version/')
+ url.sub!('cli/owner', 'cli/v8/commands/npm-owner/')
+ url.sub!('cli/install', '/cli/v8/commands/npm-install/')
+ url.sub!('cli/audit', 'cli/v8/commands/npm-audit/')
+ url.sub!('cli/update', 'cli/v8/commands/npm-update/')
+ url.sub!('cli/outdated', 'cli/v8/commands/npm-outdated/')
+ url.sub!('cli/uninstall', 'cli/v8/commands/npm-uninstall/')
+ url.sub!('misc/developers', 'cli/v8/using-npm/developers//')
url
end
diff --git a/lib/docs/scrapers/numpy.rb b/lib/docs/scrapers/numpy.rb
index e73ef379..22fba843 100644
--- a/lib/docs/scrapers/numpy.rb
+++ b/lib/docs/scrapers/numpy.rb
@@ -26,14 +26,20 @@ module Docs
Licensed under the 3-clause BSD License.
HTML
+ version '1.22' do
+ self.release = '1.22.0'
+ self.base_url = "https://numpy.org/doc/#{self.version}/"
+ options[:container] = nil
+ end
+
version '1.21' do
- self.release = '1.21.1'
+ self.release = '1.21.5'
self.base_url = "https://numpy.org/doc/#{self.version}/"
options[:container] = nil
end
version '1.20' do
- self.release = '1.20.1'
+ self.release = '1.20.3'
self.base_url = "https://numpy.org/doc/#{self.version}/"
options[:container] = nil
end
diff --git a/lib/docs/scrapers/ocaml.rb b/lib/docs/scrapers/ocaml.rb
index 9f5cab47..72de98f8 100644
--- a/lib/docs/scrapers/ocaml.rb
+++ b/lib/docs/scrapers/ocaml.rb
@@ -3,7 +3,7 @@ module Docs
self.name = 'OCaml'
self.type = 'ocaml'
self.root_path = 'index.html'
- self.release = '4.12'
+ self.release = '4.14'
self.base_url = "https://www.ocaml.org/releases/#{self.release}/htmlman/"
self.links = {
home: 'https://ocaml.org/',
@@ -23,7 +23,7 @@ module Docs
]
options[:attribution] = <<-HTML
- © 1995-2021 INRIA.
+ © 1995-2022 INRIA.
HTML
def get_latest_version(opts)
diff --git a/lib/docs/scrapers/octave.rb b/lib/docs/scrapers/octave.rb
index 3225da1a..3a7c38d3 100644
--- a/lib/docs/scrapers/octave.rb
+++ b/lib/docs/scrapers/octave.rb
@@ -23,14 +23,19 @@ module Docs
options[:root_title] = 'GNU Octave'
options[:attribution] = <<-HTML
- © 1996–2020 John W. Eaton
+ © 1996–2022 The Octave Project Developers
Permission is granted to make and distribute verbatim copies of this manual provided the copyright notice and this permission notice are preserved on all copies.
Permission is granted to copy and distribute modified versions of this manual under the conditions for verbatim copying, provided that the entire resulting derived work is distributed under the terms of a permission notice identical to this one.
Permission is granted to copy and distribute translations of this manual into another language, under the above conditions for modified versions.
HTML
+ version '7' do
+ self.release = '7.1.0'
+ self.base_url = "https://octave.org/doc/v#{self.release}/"
+ end
+
version '6' do
- self.release = '6.3.0'
+ self.release = '6.4.0'
self.base_url = "https://octave.org/doc/v#{self.release}/"
end
diff --git a/lib/docs/scrapers/openjdk.rb b/lib/docs/scrapers/openjdk.rb
index 8d334f28..6a8fdb96 100644
--- a/lib/docs/scrapers/openjdk.rb
+++ b/lib/docs/scrapers/openjdk.rb
@@ -28,7 +28,7 @@ module Docs
]
options[:attribution] = <<-HTML
- © 1993, 2020, Oracle and/or its affiliates. All rights reserved.
+ © 1993, 2022, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
@@ -37,10 +37,20 @@ module Docs
NEWFILTERS = ['openjdk/entries_new', 'openjdk/clean_html_new']
- version '15' do
- self.release = '15.0.3'
+ version '18' do
+ self.release = '18'
self.root_path = 'index.html'
- self.base_url = 'https://docs.oracle.com/en/java/javase/15/docs/api/'
+ self.base_url = 'https://docs.oracle.com/en/java/javase/18/docs/api/'
+
+ html_filters.push NEWFILTERS
+
+ options[:container] = 'main'
+ end
+
+ version '17' do
+ self.release = '17'
+ self.root_path = 'index.html'
+ self.base_url = 'https://docs.oracle.com/en/java/javase/17/docs/api/'
html_filters.push NEWFILTERS
@@ -133,10 +143,10 @@ module Docs
def get_latest_version(opts)
doc = fetch_doc("https://jdk.java.net/archive/", opts)
- puts doc
version = doc.at_css('#downloads > table > tr > th').content
version.gsub!(/\(.*\)/, '')
version.gsub!(/[a-zA-z]/, '')
+ version
end
end
end
diff --git a/lib/docs/scrapers/pandas.rb b/lib/docs/scrapers/pandas.rb
index b1eccb71..f95bf575 100644
--- a/lib/docs/scrapers/pandas.rb
+++ b/lib/docs/scrapers/pandas.rb
@@ -1,5 +1,5 @@
module Docs
- class Pandas < UrlScraper
+ class Pandas < FileScraper
self.name = 'pandas'
self.type = 'sphinx'
self.root_path = 'index.html'
@@ -8,22 +8,22 @@ module Docs
code: 'https://github.com/pydata/pandas'
}
- html_filters.push 'pandas/clean_html', 'pandas/entries'
-
options[:skip] = %w(internals.html release.html contributing.html whatsnew.html)
options[:skip_patterns] = [/whatsnew\//]
options[:attribution] = <<-HTML
- © 2008–2020, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
+ © 2008–2022, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
HTML
version '1' do
- self.release = '1.2.0'
+ self.release = '1.4.0'
self.base_url = "https://pandas.pydata.org/pandas-docs/version/#{self.release}/"
html_filters.push 'pandas/clean_html', 'pandas/entries'
+ options[:container] = 'main section'
+
options[:skip_patterns] = [
/development/,
/getting_started/,
diff --git a/lib/docs/scrapers/perl.rb b/lib/docs/scrapers/perl.rb
index 90844c47..740b3ba4 100644
--- a/lib/docs/scrapers/perl.rb
+++ b/lib/docs/scrapers/perl.rb
@@ -2,7 +2,6 @@ module Docs
class Perl < UrlScraper
self.name = 'Perl'
self.type = 'perl'
-# self.root_path = 'index.html'
self.initial_paths = ['modules.html', 'perlutil.html', 'perl.html']
self.links = {
home: 'https://www.perl.org/'
@@ -20,44 +19,54 @@ module Docs
options[:skip_patterns] = [/\Afunctions/, /\Avariables/, /\.pdf/, /delta/]
options[:attribution] = <<-HTML
- © 1993–2020 Larry Wall and others
+ © 1993–2021 Larry Wall and others
Licensed under the GNU General Public License version 1 or later, or the Artistic License.
The Perl logo is a trademark of the Perl Foundation.
HTML
+ version '5.36' do
+ self.release = '5.36.0'
+ self.base_url = "https://perldoc.perl.org/#{release}/"
+ end
+
+ version '5.34' do
+ self.release = '5.34.0'
+ self.base_url = "https://perldoc.perl.org/#{release}/"
+ end
+
version '5.32' do
self.release = '5.32.0'
- self.base_url = "https://perldoc.perl.org/#{self.release}/"
+ self.base_url = "https://perldoc.perl.org/#{release}/"
end
version '5.30' do
self.release = '5.30.3'
- self.base_url = "https://perldoc.perl.org/#{self.release}/"
+ self.base_url = "https://perldoc.perl.org/#{release}/"
end
version '5.28' do
self.release = '5.28.3'
- self.base_url = "https://perldoc.perl.org/#{self.release}/"
+ self.base_url = "https://perldoc.perl.org/#{release}/"
end
version '5.26' do
self.release = '5.26.3'
- self.base_url = "https://perldoc.perl.org/#{self.release}/"
+ self.base_url = "https://perldoc.perl.org/#{release}/"
end
version '5.24' do
self.release = '5.24.4'
- self.base_url = "https://perldoc.perl.org/#{self.release}/"
+ self.base_url = "https://perldoc.perl.org/#{release}/"
end
version '5.22' do
self.release = '5.22.4'
- self.base_url = "https://perldoc.perl.org/#{self.release}/"
+ self.base_url = "https://perldoc.perl.org/#{release}/"
end
version '5.20' do
self.release = '5.20.3'
- self.base_url = "https://perldoc.perl.org/#{self.release}/"
+ self.base_url = "https://perldoc.perl.org/#{release}/"
end
def get_latest_version(opts)
diff --git a/lib/docs/scrapers/php.rb b/lib/docs/scrapers/php.rb
index 2db16d87..6facd0c9 100644
--- a/lib/docs/scrapers/php.rb
+++ b/lib/docs/scrapers/php.rb
@@ -5,7 +5,7 @@ module Docs
self.name = 'PHP'
self.type = 'php'
- self.release = '8.0'
+ self.release = '8.1.5'
self.base_url = 'https://www.php.net/manual/en/'
self.root_path = 'index.html'
self.initial_paths = %w(
@@ -62,7 +62,7 @@ module Docs
options[:skip_patterns] = [/mysqlnd/, /xdevapi/i]
options[:attribution] = <<-HTML
- © 1997–2020 The PHP Documentation Group
+ © 1997–2021 The PHP Documentation Group
Licensed under the Creative Commons Attribution License v3.0 or later.
HTML
diff --git a/lib/docs/scrapers/point_cloud_library.rb b/lib/docs/scrapers/point_cloud_library.rb
new file mode 100644
index 00000000..f9ce6827
--- /dev/null
+++ b/lib/docs/scrapers/point_cloud_library.rb
@@ -0,0 +1,41 @@
+module Docs
+ class PointCloudLibrary < UrlScraper
+ self.name = 'PointCloudLibrary'
+ self.type = 'point_cloud_library'
+ self.slug = 'point_cloud_library'
+ self.base_url = 'https://pointclouds.org/documentation/'
+ self.root_path = 'modules.html'
+ # Add hierarchy.html to crawl all classes*.html that's not reachable from modules.html
+ self.initial_paths = [
+ "https://pointclouds.org/documentation/hierarchy.html"
+ ]
+ self.release = '1.12.1'
+
+ self.links = {
+ home: 'https://pointclouds.org/',
+ code: 'https://github.com/PointCloudLibrary/pcl'
+ }
+
+ html_filters.push 'point_cloud_library/entries', 'point_cloud_library/clean_html'
+
+ # Remove the `clean_text` because Doxygen are actually creating empty
+ # anchor such as
to do anchor link.. and that anchor
+ # will be removed by clean_text
+ self.text_filters = FilterStack.new
+ text_filters.push 'images', 'inner_html', 'attribution'
+
+ def get_latest_version(opts)
+ get_latest_github_release('PointCloudLibrary', 'pcl', opts)[4..]
+ end
+
+ options[:attribution] = <<-HTML
+ © 2009–2012, Willow Garage, Inc.
+ © 2012–, Open Perception, Inc.
+ Licensed under the BSD License.
+ HTML
+
+ # Skip source code since it doesn't provide any useful docs
+ options[:skip_patterns] = [/_source/, /namespace/, /h\.html/, /structsvm/, /struct_/, /classopenni/, /class_/]
+
+ end
+end
diff --git a/lib/docs/scrapers/postgresql.rb b/lib/docs/scrapers/postgresql.rb
index 1778b647..dfc371ee 100644
--- a/lib/docs/scrapers/postgresql.rb
+++ b/lib/docs/scrapers/postgresql.rb
@@ -51,12 +51,17 @@ module Docs
/\Aunsupported-features/ ]
options[:attribution] = <<-HTML
- © 1996–2021 The PostgreSQL Global Development Group
+ © 1996–2022 The PostgreSQL Global Development Group
Licensed under the PostgreSQL License.
HTML
+ version '14' do
+ self.release = '14.3'
+ self.base_url = "https://www.postgresql.org/docs/#{version}/"
+ end
+
version '13' do
- self.release = '13.2'
+ self.release = '13.4'
self.base_url = "https://www.postgresql.org/docs/#{version}/"
end
diff --git a/lib/docs/scrapers/prettier.rb b/lib/docs/scrapers/prettier.rb
new file mode 100644
index 00000000..e11f8d77
--- /dev/null
+++ b/lib/docs/scrapers/prettier.rb
@@ -0,0 +1,25 @@
+module Docs
+ class Prettier < UrlScraper
+ self.name = 'Prettier'
+ self.type = 'simple'
+ self.release = '2.6.0'
+ self.base_url = 'https://prettier.io/docs/en/'
+ self.links = {
+ home: 'https://prettier.io/',
+ code: 'https://github.com/prettier/prettier'
+ }
+
+ # Docusaurus like react_native
+ html_filters.push 'prettier/entries', 'prettier/clean_html'
+
+ options[:container] = '.docMainWrapper'
+
+ options[:attribution] = <<-HTML
+ © James Long and contributors
+ HTML
+
+ def get_latest_version(opts)
+ get_npm_version('prettier', opts)
+ end
+ end
+end
diff --git a/lib/docs/scrapers/python.rb b/lib/docs/scrapers/python.rb
index 88c076dd..c01b96b6 100644
--- a/lib/docs/scrapers/python.rb
+++ b/lib/docs/scrapers/python.rb
@@ -1,28 +1,48 @@
module Docs
class Python < FileScraper
self.type = 'python'
- self.root_path = 'library/index.html'
+ self.root_path = 'index.html'
self.links = {
home: 'https://www.python.org/',
code: 'https://github.com/python/cpython'
}
- options[:only_patterns] = [/\Alibrary\//]
+ options[:only_patterns] = [
+ # /\Ac-api/,
+ /\Adistributing/,
+ # /\Adistutils/,
+ /\Aextending/,
+ /\Afaq/,
+ /\Ahowto/,
+ /\Aindex.html/,
+ # /\Ainstall/,
+ /\Ainstalling/,
+ /\Alibrary/,
+ /\Areference/,
+ /\Atutorial/,
+ /\Ausing/,
+ ]
options[:skip] = %w(
library/2to3.html
library/formatter.html
- library/index.html
library/intro.html
library/undoc.html
library/unittest.mock-examples.html
library/sunau.html)
options[:attribution] = <<-HTML
- © 2001–2021 Python Software Foundation
+ © 2001–2022 Python Software Foundation
Licensed under the PSF License.
HTML
+ version '3.10' do
+ self.release = '3.10.4'
+ self.base_url = "https://docs.python.org/#{self.version}/"
+
+ html_filters.push 'python/entries_v3', 'sphinx/clean_html', 'python/clean_html'
+ end
+
version '3.9' do
self.release = '3.9.4'
self.base_url = 'https://docs.python.org/3.9/'
diff --git a/lib/docs/scrapers/qt.rb b/lib/docs/scrapers/qt.rb
index f69c68d2..640bbe14 100644
--- a/lib/docs/scrapers/qt.rb
+++ b/lib/docs/scrapers/qt.rb
@@ -103,6 +103,11 @@ module Docs
Licensed under the GNU Free Documentation License, Version 1.3.
HTML
+ version do
+ self.release = '6.2'
+ self.base_url = "https://doc.qt.io/qt-#{self.release}/"
+ end
+
version '6.1' do
self.release = '6.1'
self.base_url = "https://doc.qt.io/qt-#{self.release}/"
diff --git a/lib/docs/scrapers/rdoc/rails.rb b/lib/docs/scrapers/rdoc/rails.rb
index 907deed3..3f2e1f27 100644
--- a/lib/docs/scrapers/rdoc/rails.rb
+++ b/lib/docs/scrapers/rdoc/rails.rb
@@ -1,20 +1,12 @@
module Docs
class Rails < Rdoc
- # Instructions:
- # 1. Download a release at https://github.com/rails/rails/releases
- # 2. Open "railties/lib/rails/api/task.rb" and comment out any code related to sdoc ("configure_sdoc")
- # 3. Run "bundle install --without db && bundle exec rake rdoc" (in the Rails directory)
- # 4. Run "cd guides && bundle exec rake guides:generate:html"
- # 5. Copy the "guides/output" directory to "html/guides"
- # 6. Copy the "html" directory to "docs/rails~[version]"
-
include FixInternalUrlsBehavior
self.name = 'Ruby on Rails'
self.slug = 'rails'
self.initial_paths = %w(guides/index.html)
self.links = {
- home: 'http://rubyonrails.org/',
+ home: 'https://rubyonrails.org/',
code: 'https://github.com/rails/rails'
}
@@ -72,31 +64,35 @@ module Docs
options[:attribution] = ->(filter) do
if filter.slug.start_with?('guides')
<<-HTML
- © 2004–2020 David Heinemeier Hansson
+ © 2004–2021 David Heinemeier Hansson
Licensed under the Creative Commons Attribution-ShareAlike 4.0 International License.
HTML
else
<<-HTML
- © 2004–2020 David Heinemeier Hansson
+ © 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.
HTML
end
end
+ version '7.0' do
+ self.release = '7.0.0'
+ end
+
version '6.1' do
- self.release = '6.1.1'
+ self.release = '6.1.4'
end
version '6.0' do
- self.release = '6.0.0'
+ self.release = '6.0.4'
end
version '5.2' do
- self.release = '5.2.2'
+ self.release = '5.2.6'
end
version '5.1' do
- self.release = '5.1.6'
+ self.release = '5.1.7'
end
version '5.0' do
@@ -113,7 +109,7 @@ module Docs
def get_latest_version(opts)
doc = fetch_doc('https://rubyonrails.org/', opts)
- doc.at_css('.version p a').content.scan(/\d\.\d*\.*\d*\.*\d*/)[0]
+ doc.at_css('.heading__button span').content.scan(/\d\.\d*\.*\d*\.*\d*/)[0]
end
end
end
diff --git a/lib/docs/scrapers/rdoc/ruby.rb b/lib/docs/scrapers/rdoc/ruby.rb
index ed7891b4..76ddd1fb 100644
--- a/lib/docs/scrapers/rdoc/ruby.rb
+++ b/lib/docs/scrapers/rdoc/ruby.rb
@@ -63,12 +63,16 @@ module Docs
/\AXMP/]
options[:attribution] = <<-HTML
- Ruby Core © 1993–2020 Yukihiro Matsumoto
+ Ruby Core © 1993–2022 Yukihiro Matsumoto
Licensed under the Ruby License.
Ruby Standard Library © contributors
Licensed under their own licenses.
HTML
+ version '3.1' do
+ self.release = '3.1.1'
+ end
+
version '3' do
self.release = '3.0.0'
end
diff --git a/lib/docs/scrapers/react.rb b/lib/docs/scrapers/react.rb
index eeba46aa..c76f0bad 100644
--- a/lib/docs/scrapers/react.rb
+++ b/lib/docs/scrapers/react.rb
@@ -2,7 +2,7 @@ module Docs
class React < UrlScraper
self.name = 'React'
self.type = 'simple'
- self.release = '17.0.2'
+ self.release = '18.1.0'
self.base_url = 'https://reactjs.org/docs/'
self.root_path = 'hello-world.html'
self.links = {
diff --git a/lib/docs/scrapers/react_native.rb b/lib/docs/scrapers/react_native.rb
index d00e55c2..39249b4e 100644
--- a/lib/docs/scrapers/react_native.rb
+++ b/lib/docs/scrapers/react_native.rb
@@ -1,19 +1,19 @@
module Docs
class ReactNative < UrlScraper
+ self.name = 'React Native'
self.slug = 'react_native'
self.type = 'react_native'
- self.release = '0.56'
- self.base_url = 'https://facebook.github.io/react-native/docs/'
+ self.release = '0.66'
+ self.base_url = 'https://reactnative.dev/docs/'
self.root_path = 'getting-started.html'
self.links = {
- home: 'https://facebook.github.io/react-native/',
+ home: 'https://reactnative.dev/',
code: 'https://github.com/facebook/react-native'
}
html_filters.push 'react_native/entries', 'react_native/clean_html'
- options[:container] = '.docMainWrapper'
- options[:skip_patterns] = [/\Asample\-/]
+ options[:skip_patterns] = [/\Asample\-/, /\A0\./, /\Anext\b/]
options[:skip] = %w(
videos.html
transforms.html
@@ -26,8 +26,9 @@ module Docs
url
}
+ # https://github.com/facebook/react-native-website/blob/main/LICENSE-docs
options[:attribution] = <<-HTML
- © 2015–2018 Facebook Inc.
+ © 2022 Facebook Inc.
Licensed under the Creative Commons Attribution 4.0 International Public License.
HTML
diff --git a/lib/docs/scrapers/react_router.rb b/lib/docs/scrapers/react_router.rb
new file mode 100644
index 00000000..3d04d0fe
--- /dev/null
+++ b/lib/docs/scrapers/react_router.rb
@@ -0,0 +1,26 @@
+module Docs
+ class ReactRouter < UrlScraper
+ self.name = 'React Router'
+ self.slug = 'react_router'
+ self.type = 'simple'
+ self.release = '6.3.0'
+ self.base_url = 'https://reactrouterdotcom.fly.dev/docs/en/v6/api'
+
+ self.links = {
+ home: 'https://reactrouterdotcom.fly.dev/',
+ code: 'https://github.com/remix-run/react-router'
+ }
+
+ html_filters.push 'react_router/entries', 'react_router/clean_html', 'title'
+
+ options[:attribution] = <<-HTML
+ © React Training 2015-2019
+ © Remix Software 2020-2022
+ Licensed under the MIT License (MIT).
+ HTML
+
+ def get_latest_version(opts)
+ get_npm_version('react-router', opts)
+ end
+ end
+end
diff --git a/lib/docs/scrapers/redux.rb b/lib/docs/scrapers/redux.rb
index 31a8de84..4ef1a527 100644
--- a/lib/docs/scrapers/redux.rb
+++ b/lib/docs/scrapers/redux.rb
@@ -14,12 +14,12 @@ module Docs
options[:container] = '.markdown'
options[:attribution] = <<-HTML
- © 2015–2020 Dan Abramov
+ © 2015–2022 Dan Abramov
Licensed under the MIT License.
HTML
version do
- self.release = '4.0.5'
+ self.release = '4.2.0'
end
version '3' do
diff --git a/lib/docs/scrapers/rust.rb b/lib/docs/scrapers/rust.rb
index e0507695..74cd8ddf 100644
--- a/lib/docs/scrapers/rust.rb
+++ b/lib/docs/scrapers/rust.rb
@@ -3,7 +3,7 @@
module Docs
class Rust < UrlScraper
self.type = 'rust'
- self.release = '1.54.0'
+ self.release = '1.61.0'
self.base_url = 'https://doc.rust-lang.org/'
self.root_path = 'book/index.html'
self.initial_paths = %w(
diff --git a/lib/docs/scrapers/rxjs.rb b/lib/docs/scrapers/rxjs.rb
index 0c41a072..69d2fffc 100644
--- a/lib/docs/scrapers/rxjs.rb
+++ b/lib/docs/scrapers/rxjs.rb
@@ -4,7 +4,7 @@ module Docs
class Rxjs < UrlScraper
self.name = 'RxJS'
self.type = 'rxjs'
- self.release = '7.0.1'
+ self.release = '7.5.5'
self.base_url = 'https://rxjs.dev/'
self.root_path = 'guide/overview'
self.links = {
@@ -27,7 +27,7 @@ module Docs
options[:max_image_size] = 256_000
options[:attribution] = <<-HTML
- © 2015–2021 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors.
+ © 2015–2022 Google, Inc., Netflix, Inc., Microsoft Corp. and contributors.
Code licensed under an Apache-2.0 License. Documentation licensed under CC BY 4.0.
HTML
diff --git a/lib/docs/scrapers/scala.rb b/lib/docs/scrapers/scala.rb
index dc268960..dcf28b63 100644
--- a/lib/docs/scrapers/scala.rb
+++ b/lib/docs/scrapers/scala.rb
@@ -3,24 +3,50 @@ module Docs
self.name = 'Scala'
self.type = 'scala'
self.links = {
- home: 'http://www.scala-lang.org/',
+ home: 'https://www.scala-lang.org/',
code: 'https://github.com/scala/scala'
}
- options[:container] = '#content-container'
options[:attribution] = <<-HTML
- © 2002-2019 EPFL, with contributions from Lightbend.
+ © 2002-2022 EPFL, with contributions from Lightbend.
Licensed under the Apache License, Version 2.0.
HTML
+ # For Scala 3, there is no official download link for the documentation
+ # (see https://contributors.scala-lang.org/t/5537).
+ #
+ # We currently need to build the docs ourselves. To do so:
+ # 1. Make sure that Scala 3 and sbt are installed
+ # (https://www.scala-lang.org/download/scala3.html)
+ # 2. Clone the Scala 3 (Dotty) repository (https://github.com/lampepfl/dotty)
+ # 3. From the Dotty folder, run this command in the terminal:
+ # $ sbt scaladoc/generateScalaDocumentation
+ # 4. Extract scaladoc/output/scala3/api/ into docs/scala~3.1
+ version '3.1' do
+ self.release = '3.1.1'
+ self.base_url = 'https://scala-lang.org/api/3.1.1/'
+ self.root_path = 'index.html'
+
+ options[:skip_patterns] = [
+ # Ignore class names with include “#”, which cause issues with the scraper
+ /%23/,
+
+ # Ignore local links to the Java documentation created by a Scaladoc bug
+ /java\/lang/,
+ ]
+
+ html_filters.push 'scala/entries_v3', 'scala/clean_html_v3'
+ end
+
# https://downloads.lightbend.com/scala/2.13.0/scala-docs-2.13.0.zip
# Extract api/scala-library into docs/scala~2.13_library
version '2.13 Library' do
self.release = '2.13.0'
self.base_url = 'https://www.scala-lang.org/api/2.13.0/'
self.root_path = 'index.html'
+ options[:container] = '#content-container'
- html_filters.push 'scala/entries', 'scala/clean_html'
+ html_filters.push 'scala/entries_v2', 'scala/clean_html_v2'
end
# https://downloads.lightbend.com/scala/2.13.0/scala-docs-2.13.0.zip
@@ -29,8 +55,9 @@ module Docs
self.release = '2.13.0'
self.base_url = 'https://www.scala-lang.org/api/2.13.0/scala-reflect/'
self.root_path = 'index.html'
+ options[:container] = '#content-container'
- html_filters.push 'scala/entries', 'scala/clean_html'
+ html_filters.push 'scala/entries_v2', 'scala/clean_html_v2'
end
# https://downloads.lightbend.com/scala/2.12.9/scala-docs-2.12.9.zip
@@ -39,8 +66,9 @@ module Docs
self.release = '2.12.9'
self.base_url = 'https://www.scala-lang.org/api/2.12.9/'
self.root_path = 'index.html'
+ options[:container] = '#content-container'
- html_filters.push 'scala/entries', 'scala/clean_html'
+ html_filters.push 'scala/entries_v2', 'scala/clean_html_v2'
end
# https://downloads.lightbend.com/scala/2.12.9/scala-docs-2.12.9.zip
@@ -49,13 +77,14 @@ module Docs
self.release = '2.12.9'
self.base_url = 'https://www.scala-lang.org/api/2.12.9/scala-reflect/'
self.root_path = 'index.html'
+ options[:container] = '#content-container'
- html_filters.push 'scala/entries', 'scala/clean_html'
+ html_filters.push 'scala/entries_v2', 'scala/clean_html_v2'
end
def get_latest_version(opts)
- doc = fetch_doc('https://www.scala-lang.org/api/current/', opts)
- doc.at_css('#doc-version').content
+ doc = fetch_doc('https://www.scala-lang.org/api/3.x/', opts)
+ doc.at_css('.projectVersion').content
end
end
end
diff --git a/lib/docs/scrapers/sinon.rb b/lib/docs/scrapers/sinon.rb
index 055d62ab..a8a75f2d 100644
--- a/lib/docs/scrapers/sinon.rb
+++ b/lib/docs/scrapers/sinon.rb
@@ -27,6 +27,11 @@ module Docs
url
end
+ version '11' do
+ self.release = '11.1.2'
+ self.base_url = "https://sinonjs.org/releases/v#{release}/"
+ end
+
version '10' do
self.release = '10.0.1'
self.base_url = "https://sinonjs.org/releases/v#{release}/"
diff --git a/lib/docs/scrapers/spring_boot.rb b/lib/docs/scrapers/spring_boot.rb
index 9e9cbc33..6cec5faf 100644
--- a/lib/docs/scrapers/spring_boot.rb
+++ b/lib/docs/scrapers/spring_boot.rb
@@ -13,14 +13,13 @@ module Docs
options[:skip_patterns] = [/legal/]
+ # https://github.com/spring-projects/spring-boot/blob/main/buildSrc/src/main/resources/NOTICE.txt
options[:attribution] = <<-HTML
- Copyright © 2002–2020 Pivotal, Inc. All Rights Reserved.
+ Copyright © 2002–2022 Pivotal, Inc. All Rights Reserved.
HTML
- version do
- self.release = '2.4.0'
- self.base_url = "https://docs.spring.io/spring-boot/docs/#{release}/reference/html/"
- end
+ self.release = '2.7.0'
+ self.base_url = "https://docs.spring.io/spring-boot/docs/#{release}/reference/html/"
def get_latest_version(opts)
get_latest_github_release('spring-projects', 'spring-boot', opts)
diff --git a/lib/docs/scrapers/sqlite.rb b/lib/docs/scrapers/sqlite.rb
index b9fadd81..854eb4a9 100644
--- a/lib/docs/scrapers/sqlite.rb
+++ b/lib/docs/scrapers/sqlite.rb
@@ -2,7 +2,7 @@ module Docs
class Sqlite < FileScraper
self.name = 'SQLite'
self.type = 'sqlite'
- self.release = '3.36.0'
+ self.release = '3.38.0'
self.base_url = 'https://sqlite.org/'
self.root_path = 'docs.html'
self.initial_paths = %w(keyword_index.html)
diff --git a/lib/docs/scrapers/support_tables.rb b/lib/docs/scrapers/support_tables.rb
index b6764edd..450582e9 100644
--- a/lib/docs/scrapers/support_tables.rb
+++ b/lib/docs/scrapers/support_tables.rb
@@ -7,7 +7,7 @@ module Docs
self.name = 'Support Tables'
self.slug = 'browser_support_tables'
self.type = 'support_tables'
- self.release = '1.0.30001204'
+ self.release = '1.0.30001327'
def build_pages
url = 'https://github.com/Fyrd/caniuse/raw/main/data.json'
diff --git a/lib/docs/scrapers/tailwindcss.rb b/lib/docs/scrapers/tailwindcss.rb
new file mode 100644
index 00000000..408b99bf
--- /dev/null
+++ b/lib/docs/scrapers/tailwindcss.rb
@@ -0,0 +1,59 @@
+module Docs
+ class Tailwindcss < UrlScraper
+ self.name = 'Tailwind CSS'
+ self.type = 'tailwindcss'
+ self.slug = 'tailwindcss'
+ self.base_url = 'https://tailwindcss.com/docs'
+ self.root_path = '/'
+ self.release = '3.0.23'
+ self.links = {
+ home: 'tps://tailwindcss.com/',
+ code: 'https://github.com/tailwindlabs/tailwindcss'
+ }
+
+ html_filters.push 'tailwindcss/entries', 'tailwindcss/clean_html'
+
+ # Disable the clean text filter which removes empty nodes - we'll do it ourselves more selectively
+ text_filters.replace("clean_text", "tailwindcss/noop")
+
+ # Fix redirects from older tailwind 2 docs
+ options[:fix_urls] = lambda do |url|
+ if url.include? "installation/"
+ break "/docs/installation"
+ end
+
+ if url.end_with? "/breakpoints"
+ break "/docs/screens#{/#.*$/.match(url)}"
+ end
+ if url.end_with? "/adding-base-styles"
+ break "/docs/adding-custom-styles#adding-base-styles"
+ end
+ if url.end_with? "/ring-opacity"
+ break "/docs/ring-color#changing-the-opacity"
+ end
+
+ if url.match(/\/colors#?/)
+ break "/docs/customizing-colors#{/#.*$/.match(url)}"
+ end
+ end
+
+ options[:skip_patterns] = [
+ # Skip setup instructions
+ /\/browser-support$/,
+ /\/editor-setup$/,
+ /\/installation$/,
+ /\/optimizing-for-production$/,
+ /\/upgrade-guide/,
+ /\/using-with-preprocessors/
+ ]
+
+ #Obtainable from https://github.com/tailwindlabs/tailwindcss/blob/master/LICENSE
+ options[:attribution] = <<-HTML
+ © 2022 Tailwind Labs Inc.
+ HTML
+
+ def get_latest_version(opts)
+ get_latest_github_release('tailwindlabs', 'tailwindcss', opts)
+ end
+ end
+end
diff --git a/lib/docs/scrapers/tensorflow/tensorflow.rb b/lib/docs/scrapers/tensorflow/tensorflow.rb
index 4e1c4777..fbd68abc 100644
--- a/lib/docs/scrapers/tensorflow/tensorflow.rb
+++ b/lib/docs/scrapers/tensorflow/tensorflow.rb
@@ -14,11 +14,16 @@ module Docs
options[:container] = '.devsite-main-content'
options[:attribution] = <<-HTML
- © 2020 The TensorFlow Authors. All rights reserved.
+ © 2022 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 4.0.
Code samples licensed under the Apache 2.0 License.
HTML
+ version '2.9' do
+ self.release = "2.9.1"
+ self.base_url = "https://www.tensorflow.org/versions/r#{version}/api_docs/python/tf"
+ end
+
version '2.4' do
self.release = "#{version}.0"
self.base_url = "https://www.tensorflow.org/versions/r#{version}/api_docs/python/tf"
diff --git a/lib/docs/scrapers/tensorflow/tensorflow_cpp.rb b/lib/docs/scrapers/tensorflow/tensorflow_cpp.rb
index feda35fd..e7dfbe9e 100644
--- a/lib/docs/scrapers/tensorflow/tensorflow_cpp.rb
+++ b/lib/docs/scrapers/tensorflow/tensorflow_cpp.rb
@@ -3,6 +3,11 @@ module Docs
self.name = 'TensorFlow C++'
self.slug = 'tensorflow_cpp'
+ version '2.9' do
+ self.release = "2.9.1"
+ self.base_url = "https://www.tensorflow.org/versions/r#{version}/api_docs/cc"
+ end
+
version '2.4' do
self.release = "#{version}.0"
self.base_url = "https://www.tensorflow.org/versions/r#{version}/api_docs/cc"
diff --git a/lib/docs/scrapers/terraform.rb b/lib/docs/scrapers/terraform.rb
index 0965ad06..411af235 100644
--- a/lib/docs/scrapers/terraform.rb
+++ b/lib/docs/scrapers/terraform.rb
@@ -20,8 +20,8 @@ module Docs
HTML
def get_latest_version(opts)
- contents = get_github_file_contents('hashicorp', 'terraform-website', 'content/config.rb', opts)
- contents.scan(/version\s+=\s+"([0-9.]+)"/)[0][0]
+ contents = get_latest_github_release('hashicorp', 'terraform', opts)
+ contents.sub("v", "")
end
end
end
diff --git a/lib/docs/scrapers/typescript.rb b/lib/docs/scrapers/typescript.rb
index f6f4ce89..ff2b39f4 100644
--- a/lib/docs/scrapers/typescript.rb
+++ b/lib/docs/scrapers/typescript.rb
@@ -4,7 +4,7 @@ module Docs
self.name = 'TypeScript'
self.type = 'typescript'
- self.release = '4.3.5'
+ self.release = '4.7.2'
self.base_urls = [
'https://www.typescriptlang.org/docs/handbook/',
'https://www.typescriptlang.org/'
@@ -35,7 +35,7 @@ module Docs
]
options[:attribution] = <<-HTML
- © 2012-2021 Microsoft
+ © 2012-2022 Microsoft
Licensed under the Apache License, Version 2.0.
HTML
diff --git a/lib/docs/scrapers/vite.rb b/lib/docs/scrapers/vite.rb
new file mode 100644
index 00000000..15758a21
--- /dev/null
+++ b/lib/docs/scrapers/vite.rb
@@ -0,0 +1,27 @@
+module Docs
+ class Vite < UrlScraper
+ self.name = 'Vite'
+ self.slug = 'vite'
+ self.type = 'simple'
+ self.links = {
+ home: 'https://vitejs.dev/',
+ code: 'https://github.com/vitejs/vite'
+ }
+
+ options[:root_title] = 'Vite'
+
+ options[:attribution] = <<-HTML
+ © 2019–present, Yuxi (Evan) You and Vite contributors
+ Licensed under the MIT License.
+ HTML
+
+ self.release = '2.9.1'
+ self.base_url = 'https://vitejs.dev/'
+ self.initial_paths = %w(guide/)
+ html_filters.push 'vite/entries', 'vite/clean_html'
+
+ def get_latest_version(opts)
+ get_npm_version('vite', opts)
+ end
+ end
+end
diff --git a/lib/docs/scrapers/vue.rb b/lib/docs/scrapers/vue.rb
index 7a115c13..dd0a94a5 100644
--- a/lib/docs/scrapers/vue.rb
+++ b/lib/docs/scrapers/vue.rb
@@ -5,11 +5,12 @@ module Docs
self.type = 'vue'
self.links = {
home: 'https://vuejs.org/',
- code: 'https://github.com/vuejs/vue'
+ code: 'https://github.com/vuejs/core'
}
- options[:only_patterns] = [/guide\//, /api\//]
+ options[:only_patterns] = [/^$/ ,/guide\//, /api\//]
options[:skip] = %w(guide/team.html)
+ options[:skip_patterns] = [/guide\/contributing/]
options[:replace_paths] = { 'guide/' => 'guide/index.html' }
options[:attribution] = <<-HTML
@@ -18,16 +19,15 @@ module Docs
HTML
version '3' do
- self.release = '3.2.4'
- self.base_url = 'https://v3.vuejs.org/'
- self.root_path = 'guide/introduction.html'
- self.initial_paths = %w(api/)
+ self.release = '3.2.31'
+ self.base_url = 'https://vuejs.org/'
+ self.initial_paths = %w(guide/introduction.html)
html_filters.push 'vue/entries_v3', 'vue/clean_html'
end
version '2' do
self.release = '2.6.12'
- self.base_url = 'https://vuejs.org/v2/'
+ self.base_url = 'https://v2.vuejs.org/'
self.root_path = 'guide/index.html'
self.initial_paths = %w(api/)
html_filters.push 'vue/entries', 'vue/clean_html'
@@ -42,7 +42,7 @@ module Docs
end
def get_latest_version(opts)
- get_npm_version('vue', opts, 'next')
+ get_npm_version('vue', opts)
end
end
end
diff --git a/lib/docs/scrapers/vue_router.rb b/lib/docs/scrapers/vue_router.rb
index accb8455..3456fd59 100644
--- a/lib/docs/scrapers/vue_router.rb
+++ b/lib/docs/scrapers/vue_router.rb
@@ -21,7 +21,7 @@ module Docs
HTML
version '4' do
- self.release = '4.0.3'
+ self.release = '4.0.12'
self.base_url = 'https://next.router.vuejs.org/'
end
diff --git a/lib/docs/scrapers/vuex.rb b/lib/docs/scrapers/vuex.rb
index e2d9c66a..041593fb 100644
--- a/lib/docs/scrapers/vuex.rb
+++ b/lib/docs/scrapers/vuex.rb
@@ -19,7 +19,7 @@ module Docs
HTML
version '4' do
- self.release = '4.0.0'
+ self.release = '4.0.2'
self.base_url = 'https://next.vuex.vuejs.org/'
end
diff --git a/lib/docs/scrapers/webpack.rb b/lib/docs/scrapers/webpack.rb
index 947a5743..3874970f 100644
--- a/lib/docs/scrapers/webpack.rb
+++ b/lib/docs/scrapers/webpack.rb
@@ -36,7 +36,7 @@ module Docs
HTML
version '5' do
- self.release = '5.41.1'
+ self.release = '5.72.0'
self.base_url = 'https://webpack.js.org/'
end
diff --git a/lib/docs/scrapers/werkzeug.rb b/lib/docs/scrapers/werkzeug.rb
index 905ee8a9..b55559f6 100755
--- a/lib/docs/scrapers/werkzeug.rb
+++ b/lib/docs/scrapers/werkzeug.rb
@@ -13,10 +13,15 @@ module Docs
options[:skip] = %w(changes/)
options[:attribution] = <<-HTML
- © 2007–2021 Pallets
+ © 2007–2022 Pallets
Licensed under the BSD 3-clause License.
HTML
+ version '2.1' do
+ self.release = '2.1.x'
+ self.base_url = "https://werkzeug.palletsprojects.com/en/#{self.release}/"
+ end
+
version '2.0' do
self.release = '2.0.x'
self.base_url = "https://werkzeug.palletsprojects.com/en/#{self.release}/"
diff --git a/lib/docs/scrapers/wordpress.rb b/lib/docs/scrapers/wordpress.rb
index 029c05ae..ffb95a53 100644
--- a/lib/docs/scrapers/wordpress.rb
+++ b/lib/docs/scrapers/wordpress.rb
@@ -2,7 +2,7 @@ module Docs
class Wordpress < UrlScraper
self.name = 'WordPress'
self.type = 'wordpress'
- self.release = '5.8'
+ self.release = '6.0'
self.base_url = 'https://developer.wordpress.org/reference/'
self.initial_paths = %w(
functions/
@@ -32,7 +32,7 @@ module Docs
]
options[:attribution] = <<-HTML
- © 2003–2021 WordPress Foundation
+ © 2003–2022 WordPress Foundation
Licensed under the GNU GPLv2+ License.
HTML
diff --git a/lib/docs/scrapers/yarn.rb b/lib/docs/scrapers/yarn.rb
index 64c32180..8cc49260 100644
--- a/lib/docs/scrapers/yarn.rb
+++ b/lib/docs/scrapers/yarn.rb
@@ -1,28 +1,42 @@
module Docs
class Yarn < UrlScraper
self.type = 'simple'
- self.release = '1.19.0'
- 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–present Yarn Contributors
Licensed under the BSD License.
HTML
+ version 'Berry' do
+ self.release = '3.1.1'
+ self.base_url = 'https://yarnpkg.com/'
+ self.links = {
+ home: 'https://yarnpkg.com/',
+ code: 'https://github.com/yarnpkg/berry'
+ }
+ html_filters.push 'yarn/entries_berry', 'yarn/clean_html_berry', 'title'
+ options[:skip] = ['features', 'cli', 'configuration', 'advanced']
+ options[:skip_patterns] = [/\Aapi/, /\Apackage/]
+ end
+
+ version 'Classic' do
+ self.release = '1.22.17'
+ self.base_url = 'https://classic.yarnpkg.com/en/docs/'
+ self.links = {
+ home: 'https://classic.yarnpkg.com/',
+ code: 'https://github.com/yarnpkg/yarn'
+ }
+ html_filters.push 'yarn/entries', 'yarn/clean_html', 'title'
+ options[:skip_patterns] = [/\Aorg\//]
+ end
+
def get_latest_version(opts)
- get_latest_github_release('yarnpkg', 'yarn', opts)
+ get_latest_github_release('yarnpkg', 'berry', opts)[/[\d.]+/]
end
end
end
diff --git a/lib/docs/scrapers/zig.rb b/lib/docs/scrapers/zig.rb
new file mode 100644
index 00000000..004b8757
--- /dev/null
+++ b/lib/docs/scrapers/zig.rb
@@ -0,0 +1,24 @@
+module Docs
+ class Zig < UrlScraper
+ self.name = 'Zig'
+ self.type = 'simple'
+ self.release = '0.9.0'
+ self.base_url = 'https://ziglang.org/documentation/0.9.0/'
+ self.links = {
+ home: 'https://ziglang.org/',
+ code: 'https://github.com/ziglang/zig'
+ }
+
+ html_filters.push 'zig/entries', 'zig/clean_html'
+
+ options[:follow_links] = false
+ options[:attribution] = <<-HTML
+ © 2015–2021, Zig contributors
+ HTML
+
+ def get_latest_version(opts)
+ tags = get_github_tags('ziglang', 'zig', opts)
+ tags[0]['name']
+ end
+ end
+end
diff --git a/public/icons/docs/codeigniter/SOURCE b/public/icons/docs/codeigniter/SOURCE
index dd068ebf..fc294337 100644
--- a/public/icons/docs/codeigniter/SOURCE
+++ b/public/icons/docs/codeigniter/SOURCE
@@ -1 +1 @@
-http://www.codeigniter.com/assets/data/ci-logo.zip
+https://www.codeigniter.com/data/ci-logo.zip
diff --git a/public/icons/docs/coffeescript/SOURCE b/public/icons/docs/coffeescript/SOURCE
index ba74eca4..2f97fe85 100644
--- a/public/icons/docs/coffeescript/SOURCE
+++ b/public/icons/docs/coffeescript/SOURCE
@@ -1 +1 @@
-https://github.com/jashkenas/coffee-script/downloads
+https://github.com/jashkenas/coffeescript/blob/master/docs/favicon-32x32.png
diff --git a/public/icons/docs/deno/16.png b/public/icons/docs/deno/16.png
new file mode 100644
index 00000000..f3ea5dd9
Binary files /dev/null and b/public/icons/docs/deno/16.png differ
diff --git a/public/icons/docs/deno/16@2x.png b/public/icons/docs/deno/16@2x.png
new file mode 100644
index 00000000..11d73732
Binary files /dev/null and b/public/icons/docs/deno/16@2x.png differ
diff --git a/public/icons/docs/deno/SOURCE b/public/icons/docs/deno/SOURCE
new file mode 100644
index 00000000..66a07585
--- /dev/null
+++ b/public/icons/docs/deno/SOURCE
@@ -0,0 +1 @@
+https://deno.land/logo.svg
diff --git a/public/icons/docs/eigen3/16.png b/public/icons/docs/eigen3/16.png
new file mode 100644
index 00000000..265a2f49
Binary files /dev/null and b/public/icons/docs/eigen3/16.png differ
diff --git a/public/icons/docs/eigen3/16@2x.png b/public/icons/docs/eigen3/16@2x.png
new file mode 100644
index 00000000..9cc98d2c
Binary files /dev/null and b/public/icons/docs/eigen3/16@2x.png differ
diff --git a/public/icons/docs/eigen3/SOURCE b/public/icons/docs/eigen3/SOURCE
new file mode 100644
index 00000000..439adb72
--- /dev/null
+++ b/public/icons/docs/eigen3/SOURCE
@@ -0,0 +1 @@
+https://gitlab.com/libeigen/eigen/-/blob/master/doc/Eigen_Silly_Professor_64x64.png
diff --git a/public/icons/docs/esbuild/16.png b/public/icons/docs/esbuild/16.png
new file mode 100644
index 00000000..c2891b01
Binary files /dev/null and b/public/icons/docs/esbuild/16.png differ
diff --git a/public/icons/docs/esbuild/16@2x.png b/public/icons/docs/esbuild/16@2x.png
new file mode 100644
index 00000000..9b233f85
Binary files /dev/null and b/public/icons/docs/esbuild/16@2x.png differ
diff --git a/public/icons/docs/esbuild/SOURCE b/public/icons/docs/esbuild/SOURCE
new file mode 100644
index 00000000..721ff1f5
--- /dev/null
+++ b/public/icons/docs/esbuild/SOURCE
@@ -0,0 +1 @@
+https://esbuild.github.io/favicon.svg
diff --git a/public/icons/docs/gnu_make/16.png b/public/icons/docs/gnu_make/16.png
new file mode 100644
index 00000000..a94aef6e
Binary files /dev/null and b/public/icons/docs/gnu_make/16.png differ
diff --git a/public/icons/docs/gnu_make/16@2x.png b/public/icons/docs/gnu_make/16@2x.png
new file mode 100644
index 00000000..6df3c03d
Binary files /dev/null and b/public/icons/docs/gnu_make/16@2x.png differ
diff --git a/public/icons/docs/gnu_make/SOURCE b/public/icons/docs/gnu_make/SOURCE
new file mode 100644
index 00000000..db0f6512
--- /dev/null
+++ b/public/icons/docs/gnu_make/SOURCE
@@ -0,0 +1 @@
+https://www.gnu.org/graphics/heckert_gnu.png
\ No newline at end of file
diff --git a/public/icons/docs/i3/16.png b/public/icons/docs/i3/16.png
new file mode 100644
index 00000000..d53f0127
Binary files /dev/null and b/public/icons/docs/i3/16.png differ
diff --git a/public/icons/docs/i3/16@2x.png b/public/icons/docs/i3/16@2x.png
new file mode 100644
index 00000000..afec0e90
Binary files /dev/null and b/public/icons/docs/i3/16@2x.png differ
diff --git a/public/icons/docs/i3/SOURCE b/public/icons/docs/i3/SOURCE
new file mode 100644
index 00000000..7a8de2b5
--- /dev/null
+++ b/public/icons/docs/i3/SOURCE
@@ -0,0 +1 @@
+https://github.com/i3/i3.github.io/blob/master/logo.png
diff --git a/public/icons/docs/kubectl/16.png b/public/icons/docs/kubectl/16.png
new file mode 100644
index 00000000..0dccf912
Binary files /dev/null and b/public/icons/docs/kubectl/16.png differ
diff --git a/public/icons/docs/kubectl/16@2x.png b/public/icons/docs/kubectl/16@2x.png
new file mode 100644
index 00000000..2261e8ec
Binary files /dev/null and b/public/icons/docs/kubectl/16@2x.png differ
diff --git a/public/icons/docs/kubectl/SOURCE b/public/icons/docs/kubectl/SOURCE
new file mode 100644
index 00000000..cedbe271
--- /dev/null
+++ b/public/icons/docs/kubectl/SOURCE
@@ -0,0 +1 @@
+https://cncf-branding.netlify.app/projects/kubernetes/
\ No newline at end of file
diff --git a/public/icons/docs/kubernetes/16.png b/public/icons/docs/kubernetes/16.png
new file mode 100644
index 00000000..79abeb07
Binary files /dev/null and b/public/icons/docs/kubernetes/16.png differ
diff --git a/public/icons/docs/kubernetes/16@2x.png b/public/icons/docs/kubernetes/16@2x.png
new file mode 100644
index 00000000..9291009d
Binary files /dev/null and b/public/icons/docs/kubernetes/16@2x.png differ
diff --git a/public/icons/docs/kubernetes/SOURCE b/public/icons/docs/kubernetes/SOURCE
new file mode 100644
index 00000000..cedbe271
--- /dev/null
+++ b/public/icons/docs/kubernetes/SOURCE
@@ -0,0 +1 @@
+https://cncf-branding.netlify.app/projects/kubernetes/
\ No newline at end of file
diff --git a/public/icons/docs/nix/16.png b/public/icons/docs/nix/16.png
new file mode 100644
index 00000000..13ad550b
Binary files /dev/null and b/public/icons/docs/nix/16.png differ
diff --git a/public/icons/docs/nix/16@2x.png b/public/icons/docs/nix/16@2x.png
new file mode 100644
index 00000000..5c1d1368
Binary files /dev/null and b/public/icons/docs/nix/16@2x.png differ
diff --git a/public/icons/docs/nix/SOURCE b/public/icons/docs/nix/SOURCE
new file mode 100644
index 00000000..c2f6c583
--- /dev/null
+++ b/public/icons/docs/nix/SOURCE
@@ -0,0 +1 @@
+https://github.com/NixOS/nixos-homepage/blob/master/logo/nixos-logo-only-hires.png
diff --git a/public/icons/docs/node/SOURCE b/public/icons/docs/node/SOURCE
index 9e63e3e8..a7dd51b2 100644
--- a/public/icons/docs/node/SOURCE
+++ b/public/icons/docs/node/SOURCE
@@ -1 +1 @@
-https://drive.google.com/folderview?id=0B2SAGsHi4DjIcHB0cTZZcXFZNG8&usp=sharing
+https://github.com/nodejs/nodejs.org/blob/main/static/images/logo-hexagon.png
diff --git a/public/icons/docs/point_cloud_library/16.png b/public/icons/docs/point_cloud_library/16.png
new file mode 100644
index 00000000..e952d096
Binary files /dev/null and b/public/icons/docs/point_cloud_library/16.png differ
diff --git a/public/icons/docs/point_cloud_library/16@2x.png b/public/icons/docs/point_cloud_library/16@2x.png
new file mode 100644
index 00000000..bd59a658
Binary files /dev/null and b/public/icons/docs/point_cloud_library/16@2x.png differ
diff --git a/public/icons/docs/point_cloud_library/SOURCE b/public/icons/docs/point_cloud_library/SOURCE
new file mode 100644
index 00000000..180ad4e2
--- /dev/null
+++ b/public/icons/docs/point_cloud_library/SOURCE
@@ -0,0 +1 @@
+https://github.com/PointCloudLibrary/pcl/blob/master/pcl.png
diff --git a/public/icons/docs/prettier/16.png b/public/icons/docs/prettier/16.png
new file mode 100644
index 00000000..212eae80
Binary files /dev/null and b/public/icons/docs/prettier/16.png differ
diff --git a/public/icons/docs/prettier/16@2x.png b/public/icons/docs/prettier/16@2x.png
new file mode 100644
index 00000000..7c0f3cc0
Binary files /dev/null and b/public/icons/docs/prettier/16@2x.png differ
diff --git a/public/icons/docs/prettier/SOURCE b/public/icons/docs/prettier/SOURCE
new file mode 100644
index 00000000..3e340ee6
--- /dev/null
+++ b/public/icons/docs/prettier/SOURCE
@@ -0,0 +1 @@
+https://prettier.io/icon.png
diff --git a/public/icons/docs/react_native/SOURCE b/public/icons/docs/react_native/SOURCE
index c1d5f7fb..65f9e914 100644
--- a/public/icons/docs/react_native/SOURCE
+++ b/public/icons/docs/react_native/SOURCE
@@ -1 +1 @@
-https://github.com/facebook/react-native/blob/gh-pages/img/favicon.png
+https://github.com/facebook/react-native-website/blob/main/website/static/docs/assets/favicon.png
diff --git a/public/icons/docs/react_router/16.png b/public/icons/docs/react_router/16.png
new file mode 100644
index 00000000..3f6a9fbb
Binary files /dev/null and b/public/icons/docs/react_router/16.png differ
diff --git a/public/icons/docs/react_router/16@2x.png b/public/icons/docs/react_router/16@2x.png
new file mode 100644
index 00000000..55ae36cd
Binary files /dev/null and b/public/icons/docs/react_router/16@2x.png differ
diff --git a/public/icons/docs/react_router/SOURCE b/public/icons/docs/react_router/SOURCE
new file mode 100644
index 00000000..b2605efd
--- /dev/null
+++ b/public/icons/docs/react_router/SOURCE
@@ -0,0 +1 @@
+https://reactrouterdotcom.fly.dev/favicon.ico
diff --git a/public/icons/docs/tailwindcss/16.png b/public/icons/docs/tailwindcss/16.png
new file mode 100644
index 00000000..bee80120
Binary files /dev/null and b/public/icons/docs/tailwindcss/16.png differ
diff --git a/public/icons/docs/tailwindcss/16@2x.png b/public/icons/docs/tailwindcss/16@2x.png
new file mode 100644
index 00000000..a7378f5b
Binary files /dev/null and b/public/icons/docs/tailwindcss/16@2x.png differ
diff --git a/public/icons/docs/tailwindcss/SOURCE b/public/icons/docs/tailwindcss/SOURCE
new file mode 100644
index 00000000..2f5932a8
--- /dev/null
+++ b/public/icons/docs/tailwindcss/SOURCE
@@ -0,0 +1 @@
+https://tailwindcss.com/favicons/favicon.ico
diff --git a/public/icons/docs/vite/16.png b/public/icons/docs/vite/16.png
new file mode 100644
index 00000000..90ffa786
Binary files /dev/null and b/public/icons/docs/vite/16.png differ
diff --git a/public/icons/docs/vite/16@2x.png b/public/icons/docs/vite/16@2x.png
new file mode 100644
index 00000000..375fb680
Binary files /dev/null and b/public/icons/docs/vite/16@2x.png differ
diff --git a/public/icons/docs/vite/SOURCE b/public/icons/docs/vite/SOURCE
new file mode 100644
index 00000000..f1fe46ee
--- /dev/null
+++ b/public/icons/docs/vite/SOURCE
@@ -0,0 +1 @@
+https://vitejs.dev/logo.svg
diff --git a/public/icons/docs/zig/16.png b/public/icons/docs/zig/16.png
new file mode 100644
index 00000000..67a96b5b
Binary files /dev/null and b/public/icons/docs/zig/16.png differ
diff --git a/public/icons/docs/zig/16@2x.png b/public/icons/docs/zig/16@2x.png
new file mode 100644
index 00000000..3b9d9ef2
Binary files /dev/null and b/public/icons/docs/zig/16@2x.png differ
diff --git a/public/icons/docs/zig/SOURCE b/public/icons/docs/zig/SOURCE
new file mode 100644
index 00000000..9b31c377
--- /dev/null
+++ b/public/icons/docs/zig/SOURCE
@@ -0,0 +1,2 @@
+https://github.com/ziglang/logo/blob/master/zig-favicon.png
+https://github.com/ziglang/logo/blob/master/zig-mark.svg
diff --git a/renovate.json b/renovate.json
index 1e002cc4..e717dbd9 100644
--- a/renovate.json
+++ b/renovate.json
@@ -1,16 +1,3 @@
{
- "labels": ["renovate"],
- "extends": ["config:base"],
- "branchConcurrentLimit": 20,
- "dependencyDashboard": true,
- "major": {
- "dependencyDashboardApproval": true
- },
- "packageRules": [
- {
- "matchUpdateTypes": ["minor", "patch", "pin", "digest"],
- "matchCurrentVersion": "!/^0/",
- "automerge": true
- }
- ]
+ "extends": ["github>freecodecamp/renovate-config"]
}
diff --git a/test/lib/docs/core/doc_test.rb b/test/lib/docs/core/doc_test.rb
index b188ff0d..3da1fcfc 100644
--- a/test/lib/docs/core/doc_test.rb
+++ b/test/lib/docs/core/doc_test.rb
@@ -390,12 +390,16 @@ class DocsDocTest < MiniTest::Spec
it "compares versions" do
instance = doc.versions.first.new
+ assert_equal "Up-to-date", instance.outdated_state('0.0.2', '0.0.3')
+ assert_equal "Outdated major version", instance.outdated_state('0.2', '0.3')
assert_equal 'Up-to-date', instance.outdated_state('1', '1')
assert_equal 'Up-to-date', instance.outdated_state('1.2', '1.2')
assert_equal 'Up-to-date', instance.outdated_state('1.2.2', '1.2.2')
assert_equal 'Up-to-date', instance.outdated_state('1.2.2', '1.2.3')
assert_equal "Outdated major version", instance.outdated_state('1', '2')
- assert_equal "Outdated minor version", instance.outdated_state('1.2', '1.3')
+ assert_equal "Up-to-date", instance.outdated_state('1.0.2', '1.0.3')
+ assert_equal "Outdated major version", instance.outdated_state('1.2', '1.3')
+ assert_equal "Outdated minor version", instance.outdated_state('2.2', '2.3')
assert_equal "Outdated major version", instance.outdated_state('9', '10')
assert_equal "Outdated major version", instance.outdated_state('99', '101')
assert_equal 'Up-to-date', instance.outdated_state('2006-01-02', '2006-01-03')
diff --git a/views/app.erb b/views/app.erb
index ffaa1bf3..13890a5b 100644
--- a/views/app.erb
+++ b/views/app.erb
@@ -25,6 +25,7 @@
+