? (on https://kotlinlang.org/docs/typecasts.html for instance)
+ end
+
css('pre').each do |node|
node['data-language'] = 'kotlin' if node.at_css('code.language-kotlin')
node['data-language'] = 'groovy' if node.at_css('code.language-groovy')
diff --git a/lib/docs/filters/kotlin/entries.rb b/lib/docs/filters/kotlin/entries.rb
index 2afb1e8614..96578e5043 100644
--- a/lib/docs/filters/kotlin/entries.rb
+++ b/lib/docs/filters/kotlin/entries.rb
@@ -6,25 +6,26 @@ def get_name
breadcrumbs[1..-1].join('.')
else
node = (at_css('h1') || at_css('h2'))
- return node.content unless node.nil?
- subpath[/\/([a-z0-9_-]+)\./][1..-2].titleize.sub('Faq', 'FAQ')
+ return [breadcrumbs[1..], [node.content]].flatten.join(': ') unless node.nil?
end
end
def get_type
if subpath.start_with?('api')
breadcrumbs[1]
- elsif subpath.start_with?('docs/tutorials')
- 'Tutorials'
- elsif subpath.start_with?('docs/reference')
- 'Reference'
+ else
+ breadcrumbs[0]
end
end
private
def breadcrumbs
- @breadcrumbs ||= css('.api-docs-breadcrumbs a').map(&:content).map(&:strip)
+ if subpath.start_with?('api')
+ @breadcrumbs ||= css('.api-docs-breadcrumbs a').map(&:content).map(&:strip)
+ else
+ @breadcrumbs ||= doc.document.at_css('body')['data-breadcrumbs'].split('///')
+ end
end
end
end
diff --git a/lib/docs/scrapers/kotlin.rb b/lib/docs/scrapers/kotlin.rb
index 91ca19ff89..c9291a891d 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 @@ class Kotlin < UrlScraper
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,34 @@ class Kotlin < UrlScraper
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–2021 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.0'
+ 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
end
end
From 5645eeacdb28924ec6af8946143080befa867dcc Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Thu, 18 Nov 2021 04:08:10 +0100
Subject: [PATCH 0085/1945] Update Git documentation (2.34.0)
---
lib/docs/scrapers/git.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/git.rb b/lib/docs/scrapers/git.rb
index 0e9b6b0101..85bddfb1bf 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.33.1'
+ self.release = '2.34.0'
self.base_url = 'https://git-scm.com/docs'
self.initial_paths = %w(/git.html)
self.links = {
From 2619a00073f677e08688d44993dda0ef4323a710 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Thu, 18 Nov 2021 04:17:40 +0100
Subject: [PATCH 0086/1945] Update Babel documentation (7.16.4)
---
lib/docs/scrapers/babel.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/babel.rb b/lib/docs/scrapers/babel.rb
index cbb09f1ea6..2482f9bc03 100644
--- a/lib/docs/scrapers/babel.rb
+++ b/lib/docs/scrapers/babel.rb
@@ -30,7 +30,7 @@ class Babel < UrlScraper
HTML
version '7' do
- self.release = '7.14.8'
+ self.release = '7.16.4'
end
version '6' do
From 450a161569559f2434046f9bac7d7481faf6776a Mon Sep 17 00:00:00 2001
From: Enoc
Date: Mon, 22 Nov 2021 22:41:24 -0600
Subject: [PATCH 0087/1945] Update npm documentation (8.1.4)
---
lib/docs/filters/npm/clean_html.rb | 4 ++
lib/docs/scrapers/npm.rb | 62 ++++++++++++++++--------------
2 files changed, 38 insertions(+), 28 deletions(-)
diff --git a/lib/docs/filters/npm/clean_html.rb b/lib/docs/filters/npm/clean_html.rb
index 3f85bf6c35..23eebddb02 100644
--- a/lib/docs/filters/npm/clean_html.rb
+++ b/lib/docs/filters/npm/clean_html.rb
@@ -3,6 +3,10 @@ class Npm
class CleanHtmlFilter < Filter
def call
+ at_css('#___gatsby').before(at_css('h1'))
+
+ css('details').remove
+
css('.dZYhXG', '.fONtKn').remove
css('.kSYjyK').remove
diff --git a/lib/docs/scrapers/npm.rb b/lib/docs/scrapers/npm.rb
index 7816c3657d..066e4f54d1 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.1.4'
self.base_url = 'https://docs.npmjs.com/'
self.force_gzip = true
self.links = {
@@ -18,16 +18,20 @@ class Npm < UrlScraper
'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 @@ class Npm < UrlScraper
# 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
From 39a57ce5553518a31c966a31244c4501bdba2632 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Wed, 24 Nov 2021 09:30:40 +0000
Subject: [PATCH 0088/1945] Update dependency better_errors to v2.8.0
[SECURITY]
---
Gemfile.lock | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index 85015b888d..f7d5ef83aa 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -7,7 +7,7 @@ GEM
minitest (~> 5.1)
tzinfo (~> 1.1)
backports (3.15.0)
- better_errors (2.5.1)
+ better_errors (2.9.1)
coderay (>= 1.0.0)
erubi (>= 1.0.0)
rack (>= 0.9.0)
@@ -20,7 +20,7 @@ GEM
coffee-script-source (1.12.2)
concurrent-ruby (1.1.9)
daemons (1.4.0)
- erubi (1.9.0)
+ erubi (1.10.0)
ethon (0.12.0)
ffi (>= 1.3.0)
eventmachine (1.2.7)
From 9bcf20c62a3d7985973dcb453a76fa78475e7017 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Wed, 24 Nov 2021 11:12:43 +0000
Subject: [PATCH 0089/1945] Update dependency nokogiri to v1.12.5 [SECURITY]
---
Gemfile.lock | 8 +++++---
1 file changed, 5 insertions(+), 3 deletions(-)
diff --git a/Gemfile.lock b/Gemfile.lock
index f7d5ef83aa..e7375b63b8 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -46,7 +46,7 @@ GEM
image_size (2.0.2)
in_threads (1.5.3)
method_source (1.0.0)
- mini_portile2 (2.4.0)
+ mini_portile2 (2.6.1)
minitest (5.14.4)
multi_json (1.13.1)
mustermann (1.0.3)
@@ -54,8 +54,9 @@ GEM
net-ssh (>= 5.0.0, < 6.0.0)
net-ssh (5.2.0)
newrelic_rpm (6.7.0.359)
- nokogiri (1.10.4)
- mini_portile2 (~> 2.4.0)
+ nokogiri (1.12.5)
+ mini_portile2 (~> 2.6.1)
+ racc (~> 1.4)
options (2.3.2)
progress (3.5.2)
progress_bar (1.3.0)
@@ -64,6 +65,7 @@ GEM
pry (0.14.1)
coderay (~> 1.1)
method_source (~> 1.0)
+ racc (1.6.0)
rack (2.2.3)
rack-protection (2.0.7)
rack
From fdf9a7e28ef8394cac07771253c7807eeee2e413 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Wed, 24 Nov 2021 23:25:47 +0100
Subject: [PATCH 0090/1945] Update ESLint documentation (8.3.0)
---
lib/docs/scrapers/eslint.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/eslint.rb b/lib/docs/scrapers/eslint.rb
index 98ec63348c..41ab45e756 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 = '8.1.0'
+ self.release = '8.3.0'
self.base_url = 'https://eslint.org/docs/'
self.root_path = 'user-guide/getting-started'
self.links = {
From 735b48209f3f0436efaacd431020980fc20ad185 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Thu, 25 Nov 2021 00:27:39 +0100
Subject: [PATCH 0091/1945] Update Angular documentation (13.0.2)
https://github.com/angular/angular/pull/42414
---
lib/docs/scrapers/angular.rb | 40 +++++++++++++++++++++++++++++++-----
1 file changed, 35 insertions(+), 5 deletions(-)
diff --git a/lib/docs/scrapers/angular.rb b/lib/docs/scrapers/angular.rb
index 3654bbad3f..275dbbd01a 100644
--- a/lib/docs/scrapers/angular.rb
+++ b/lib/docs/scrapers/angular.rb
@@ -46,20 +46,30 @@ def initial_urls
def handle_response(response)
if response.mime_type.include?('json')
begin
- response.options[:response_body] = JSON.parse(response.body)['contents']
+ json = JSON.parse(response.body)
+ response.options[:response_body] = json['contents']
+ response.url.path = response.url.path.gsub(/generated\/docs\/.*/, json['id'])
+ response.effective_url.path = response.effective_url.path.gsub(/generated\/docs\/.*/, json['id'])
rescue JSON::ParserError
response.options[:response_body] = ''
end
response.headers['Content-Type'] = 'text/html'
- response.url.path = response.url.path.sub('/generated/docs/', '/').remove('.json')
- response.effective_url.path = response.effective_url.path.sub('/generated/docs/', '/').remove('.json')
end
super
end
end
+ module Since12
+ def url_for(path)
+ # See encodeToLowercase im aio/tools/transforms/angular-base-package/processors/disambiguateDocPaths.js
+ path = path.gsub(/[A-Z_]/) {|s| s.downcase + '_'}
+ super
+ end
+ include Docs::Angular::Common
+ end
+
version do
- self.release = '12.0.0'
+ self.release = '13.0.2'
self.base_url = 'https://angular.io/'
self.root_path = 'docs'
@@ -75,7 +85,27 @@ def handle_response(response)
url
end
- include Docs::Angular::Common
+ include Docs::Angular::Since12
+ end
+
+ version '12' do
+ self.release = '12.2.13'
+ self.base_url = 'https://v12.angular.io/'
+ self.root_path = 'docs'
+
+ html_filters.push 'angular/clean_html', 'angular/entries'
+
+ options[:follow_links] = false
+ options[:only_patterns] = [/\Aguide/, /\Atutorial/, /\Aapi/]
+ options[:fix_urls_before_parse] = ->(url) do
+ url.sub! %r{\Aguide/}, '/guide/'
+ url.sub! %r{\Atutorial/}, '/tutorial/'
+ url.sub! %r{\Aapi/}, '/api/'
+ url.sub! %r{\Agenerated/}, '/generated/'
+ url
+ end
+
+ include Docs::Angular::Since12
end
version '11' do
From 2ed4a7514a8c24564415bb526e208193b488890d Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Thu, 25 Nov 2021 00:53:16 +0000
Subject: [PATCH 0092/1945] Update ruby/setup-ruby action to v1.87.0
---
.github/workflows/build.yml | 2 +-
.github/workflows/schedule-doc-report.yml | 2 +-
.github/workflows/test.yml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index ac0a4c7cb7..f7b73b1509 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.86.0
+ uses: ruby/setup-ruby@v1.87.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Run tests
diff --git a/.github/workflows/schedule-doc-report.yml b/.github/workflows/schedule-doc-report.yml
index d99df4da00..07fba6d8dd 100644
--- a/.github/workflows/schedule-doc-report.yml
+++ b/.github/workflows/schedule-doc-report.yml
@@ -10,7 +10,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.86.0
+ uses: ruby/setup-ruby@v1.87.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Generate report
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 79577e9ce5..5dd8585b0e 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -11,7 +11,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.86.0
+ uses: ruby/setup-ruby@v1.87.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Run tests
From e4227b676c179f0bca9fdfcb13b00c3a16c3a5f1 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Thu, 25 Nov 2021 02:24:48 +0000
Subject: [PATCH 0093/1945] Update dependency ruby to v2.7.5
---
.ruby-version | 2 +-
Dockerfile | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/.ruby-version b/.ruby-version
index a4dd9dba4f..a603bb50a2 100644
--- a/.ruby-version
+++ b/.ruby-version
@@ -1 +1 @@
-2.7.4
+2.7.5
diff --git a/Dockerfile b/Dockerfile
index 35b84a2e9b..ac9a8c21e7 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,4 +1,4 @@
-FROM ruby:2.7.4
+FROM ruby:2.7.5
ENV LANG=C.UTF-8
ENV ENABLE_SERVICE_WORKER=true
From 72c0bbe936c0ebceb86b15f5890cb7faf69cd8bb Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Sun, 28 Nov 2021 13:49:49 +0800
Subject: [PATCH 0094/1945] yarn: update to 1.22.17
---
lib/docs/scrapers/yarn.rb | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/lib/docs/scrapers/yarn.rb b/lib/docs/scrapers/yarn.rb
index 64c3218077..1f6a192b5a 100644
--- a/lib/docs/scrapers/yarn.rb
+++ b/lib/docs/scrapers/yarn.rb
@@ -1,10 +1,10 @@
module Docs
class Yarn < UrlScraper
self.type = 'simple'
- self.release = '1.19.0'
- self.base_url = 'https://yarnpkg.com/en/docs/'
+ self.release = '1.22.17'
+ self.base_url = 'https://classic.yarnpkg.com/en/docs/'
self.links = {
- home: 'https://yarnpkg.com/',
+ home: 'https://classic.yarnpkg.com/',
code: 'https://github.com/yarnpkg/yarn'
}
From f5dc69391b2ddef71af58a1a562feb11a824941d Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Sun, 28 Nov 2021 08:24:55 +0000
Subject: [PATCH 0095/1945] Add Yarn berry
---
lib/docs/filters/yarn/clean_html_berry.rb | 26 ++++++++++++++++
lib/docs/filters/yarn/entries.rb | 6 +---
lib/docs/filters/yarn/entries_berry.rb | 21 +++++++++++++
lib/docs/scrapers/yarn.rb | 37 +++++++++++++++--------
4 files changed, 73 insertions(+), 17 deletions(-)
create mode 100644 lib/docs/filters/yarn/clean_html_berry.rb
create mode 100644 lib/docs/filters/yarn/entries_berry.rb
diff --git a/lib/docs/filters/yarn/clean_html_berry.rb b/lib/docs/filters/yarn/clean_html_berry.rb
new file mode 100644
index 0000000000..00e0316c5a
--- /dev/null
+++ b/lib/docs/filters/yarn/clean_html_berry.rb
@@ -0,0 +1,26 @@
+module Docs
+ class Yarn
+ class CleanHtmlBerryFilter < Filter
+ def call
+ # Version notice
+ css('#gatsby-focus-wrapper > div').remove
+
+ # Logo and menu
+ css('header > div:first-child').remove
+
+ # Left nav and TOC
+ css('main > div > div:first-child', 'aside').remove
+
+ # Title and edit link
+ css('article > div:first-child').remove
+
+ # Bottom divider on index
+ if slug == ''
+ css('main > hr').remove
+ end
+
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/yarn/entries.rb b/lib/docs/filters/yarn/entries.rb
index 809bb1a6d0..8e24272349 100644
--- a/lib/docs/filters/yarn/entries.rb
+++ b/lib/docs/filters/yarn/entries.rb
@@ -4,16 +4,12 @@ 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.sub! 'CLI Introduction', 'CLI Commands'
type
end
end
diff --git a/lib/docs/filters/yarn/entries_berry.rb b/lib/docs/filters/yarn/entries_berry.rb
new file mode 100644
index 0000000000..b9a74e96ce
--- /dev/null
+++ b/lib/docs/filters/yarn/entries_berry.rb
@@ -0,0 +1,21 @@
+module Docs
+ class Yarn
+ class EntriesBerryFilter < Docs::EntriesFilter
+ def get_name
+ name = at_css('h1').content
+
+ name
+ end
+
+ def get_type
+ if slug.start_with?('sdks') || slug.start_with?('pnpify')
+ 'CLI'
+ else
+ type = at_css('header div:nth-child(2) .active').content.strip
+ type.remove! 'Home'
+ type
+ end
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/yarn.rb b/lib/docs/scrapers/yarn.rb
index 1f6a192b5a..9ce03a5153 100644
--- a/lib/docs/scrapers/yarn.rb
+++ b/lib/docs/scrapers/yarn.rb
@@ -1,28 +1,41 @@
module Docs
class Yarn < UrlScraper
self.type = 'simple'
- 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[: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.
+ © 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_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)
end
end
end
From b39bebd27a87ec96d28a91d39837e747182f2044 Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Sun, 28 Nov 2021 08:55:51 +0000
Subject: [PATCH 0096/1945] Add missing command prefixes
---
lib/docs/filters/yarn/entries_berry.rb | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/lib/docs/filters/yarn/entries_berry.rb b/lib/docs/filters/yarn/entries_berry.rb
index b9a74e96ce..d70608affd 100644
--- a/lib/docs/filters/yarn/entries_berry.rb
+++ b/lib/docs/filters/yarn/entries_berry.rb
@@ -4,6 +4,11 @@ class EntriesBerryFilter < Docs::EntriesFilter
def get_name
name = at_css('h1').content
+ # TODO: remove when https://github.com/yarnpkg/berry/issues/3809 is resolved
+ if slug.start_with?('sdks') || slug.start_with?('pnpify')
+ name.prepend('yarn ')
+ end
+
name
end
From b87359ad22e0c37f1e009e8f739f366dc2e554ac Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 28 Nov 2021 11:02:26 +0100
Subject: [PATCH 0097/1945] Update CodeIgniter documentation (4.1.5)
---
assets/javascripts/templates/pages/about_tmpl.coffee | 2 +-
lib/docs/scrapers/codeigniter.rb | 6 +++---
2 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index f8e51fed53..c27816c5ac 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -183,7 +183,7 @@ credits = [
'https://raw.githubusercontent.com/Codeception/CodeceptJS/master/LICENSE'
], [
'CodeIgniter',
- '2014-2020 British Columbia Institute of Technology',
+ '2014-2021 British Columbia Institute of Technology',
'MIT',
'https://raw.githubusercontent.com/bcit-ci/CodeIgniter/develop/license.txt'
], [
diff --git a/lib/docs/scrapers/codeigniter.rb b/lib/docs/scrapers/codeigniter.rb
index d093be3e96..550f1cebc7 100644
--- a/lib/docs/scrapers/codeigniter.rb
+++ b/lib/docs/scrapers/codeigniter.rb
@@ -29,13 +29,13 @@ class Codeigniter < UrlScraper
]
options[:attribution] = <<-HTML
- © 2014–2020 British Columbia Institute of Technology
+ © 2014–2021 British Columbia Institute of Technology
Licensed under the MIT License.
HTML
version '4' do
- self.release = '4.0.4'
- self.base_url = 'https://codeigniter.com/userguide4/'
+ self.release = '4.1.5'
+ self.base_url = 'https://codeigniter.com/user_guide/'
options[:container] = '.document > div'
end
From f4ca6cec9f8c088f2efcb045376e07f352781a2e Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 28 Nov 2021 11:58:45 +0100
Subject: [PATCH 0098/1945] Update Matplotlib documentation (3.4.3)
Fixes #1650.
---
assets/stylesheets/pages/_sphinx.scss | 2 ++
lib/docs/filters/sphinx/clean_html.rb | 1 +
lib/docs/scrapers/matplotlib.rb | 2 +-
3 files changed, 4 insertions(+), 1 deletion(-)
diff --git a/assets/stylesheets/pages/_sphinx.scss b/assets/stylesheets/pages/_sphinx.scss
index 3e2c12c883..f5959d5532 100644
--- a/assets/stylesheets/pages/_sphinx.scss
+++ b/assets/stylesheets/pages/_sphinx.scss
@@ -39,6 +39,8 @@
.admonition-title + dl { padding-top: .5em; }
td > div { margin: 0 !important; }
+
+ .classifier:before { content:": " }
}
._sphinx {
diff --git a/lib/docs/filters/sphinx/clean_html.rb b/lib/docs/filters/sphinx/clean_html.rb
index 71720aca80..ce06f3fe47 100644
--- a/lib/docs/filters/sphinx/clean_html.rb
+++ b/lib/docs/filters/sphinx/clean_html.rb
@@ -58,6 +58,7 @@ def call
end
css('dt').each do |node|
+ next if current_url.host == 'matplotlib.org'
next unless node['id'] || node.at_css('code, .classifier')
links = []
links << node.children.last.remove while node.children.last.try(:name) == 'a'
diff --git a/lib/docs/scrapers/matplotlib.rb b/lib/docs/scrapers/matplotlib.rb
index a76dcc6153..050ceb0e96 100644
--- a/lib/docs/scrapers/matplotlib.rb
+++ b/lib/docs/scrapers/matplotlib.rb
@@ -21,7 +21,7 @@ class Matplotlib < UrlScraper
HTML
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/",
From 488a5964283b24f4fd9e3647e575aa4a0ef6de55 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 28 Nov 2021 12:02:53 +0100
Subject: [PATCH 0099/1945] Update NumPy documentation (1.21.4)
Fixes #1650.
---
lib/docs/filters/sphinx/clean_html.rb | 1 +
lib/docs/scrapers/numpy.rb | 2 +-
2 files changed, 2 insertions(+), 1 deletion(-)
diff --git a/lib/docs/filters/sphinx/clean_html.rb b/lib/docs/filters/sphinx/clean_html.rb
index ce06f3fe47..048f6d3bdb 100644
--- a/lib/docs/filters/sphinx/clean_html.rb
+++ b/lib/docs/filters/sphinx/clean_html.rb
@@ -59,6 +59,7 @@ def call
css('dt').each do |node|
next if current_url.host == 'matplotlib.org'
+ next if current_url.host == 'numpy.org'
next unless node['id'] || node.at_css('code, .classifier')
links = []
links << node.children.last.remove while node.children.last.try(:name) == 'a'
diff --git a/lib/docs/scrapers/numpy.rb b/lib/docs/scrapers/numpy.rb
index e73ef37959..cebd8ee78a 100644
--- a/lib/docs/scrapers/numpy.rb
+++ b/lib/docs/scrapers/numpy.rb
@@ -27,7 +27,7 @@ class Numpy < FileScraper
HTML
version '1.21' do
- self.release = '1.21.1'
+ self.release = '1.21.4'
self.base_url = "https://numpy.org/doc/#{self.version}/"
options[:container] = nil
end
From 6d0436f98f77897a8f8a7daed46248fab2b51ab3 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 28 Nov 2021 13:24:08 +0100
Subject: [PATCH 0100/1945] Update Groovy documentation (3.0.9)
Fixes #1662.
---
lib/docs/filters/groovy/entries.rb | 3 ++-
lib/docs/scrapers/groovy.rb | 2 +-
2 files changed, 3 insertions(+), 2 deletions(-)
diff --git a/lib/docs/filters/groovy/entries.rb b/lib/docs/filters/groovy/entries.rb
index 8f80971f16..bf467f4bdd 100755
--- a/lib/docs/filters/groovy/entries.rb
+++ b/lib/docs/filters/groovy/entries.rb
@@ -16,7 +16,8 @@ def include_default_entry?
def additional_entries
entries = []
css('.method, .element, .field, .enum_constant').each do |node|
- entries << [@name + '.' + node['id'], node['id']]
+ # Fix useless functions with arg249 https://docs.groovy-lang.org/3.0.9/html/gapi/org/codehaus/groovy/runtime/ArrayUtil.html
+ entries << [@name + '.' + node['id'], node['id']] if node['id'].length <= 192
end
css('.constructor').each do |node|
entries << [node['id'], node['id']]
diff --git a/lib/docs/scrapers/groovy.rb b/lib/docs/scrapers/groovy.rb
index ebd4242c46..be0e24a03e 100755
--- a/lib/docs/scrapers/groovy.rb
+++ b/lib/docs/scrapers/groovy.rb
@@ -24,7 +24,7 @@ class Groovy < UrlScraper
HTML
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
From 7b48eedcb1d889222ce594eb8bb774ee1d9957a7 Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Mon, 29 Nov 2021 03:12:14 +0000
Subject: [PATCH 0101/1945] Fix some issues
---
lib/docs/filters/yarn/entries.rb | 7 +++++--
lib/docs/filters/yarn/entries_berry.rb | 27 ++++++++++++++++----------
lib/docs/scrapers/yarn.rb | 1 +
3 files changed, 23 insertions(+), 12 deletions(-)
diff --git a/lib/docs/filters/yarn/entries.rb b/lib/docs/filters/yarn/entries.rb
index 8e24272349..ebd6583860 100644
--- a/lib/docs/filters/yarn/entries.rb
+++ b/lib/docs/filters/yarn/entries.rb
@@ -4,13 +4,16 @@ 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.sub! 'CLI Introduction', 'CLI Commands'
- type
+ type.sub 'CLI Introduction', 'CLI Commands'
end
end
end
diff --git a/lib/docs/filters/yarn/entries_berry.rb b/lib/docs/filters/yarn/entries_berry.rb
index d70608affd..da6a9ea58f 100644
--- a/lib/docs/filters/yarn/entries_berry.rb
+++ b/lib/docs/filters/yarn/entries_berry.rb
@@ -2,24 +2,31 @@ module Docs
class Yarn
class EntriesBerryFilter < Docs::EntriesFilter
def get_name
+ if slug.start_with?('configuration')
+ filename = at_css('main .active code')
+ content = filename.content
+ return filename.parent.content.sub content, " (#{content})"
+ end
+
name = at_css('h1').content
- # TODO: remove when https://github.com/yarnpkg/berry/issues/3809 is resolved
- if slug.start_with?('sdks') || slug.start_with?('pnpify')
- name.prepend('yarn ')
+ if slug.start_with?('getting-started')
+ name.remove! /\d - /
+
+ active_link = at_css('main .active')
+ links = active_link.parent.children.to_a
+ name.prepend "#{links.index(active_link) + 1}. "
end
+ # TODO: remove when https://github.com/yarnpkg/berry/issues/3809 is resolved
+ name.prepend('yarn ') if slug.start_with?('sdks', 'pnpify')
+
name
end
def get_type
- if slug.start_with?('sdks') || slug.start_with?('pnpify')
- 'CLI'
- else
- type = at_css('header div:nth-child(2) .active').content.strip
- type.remove! 'Home'
- type
- end
+ return 'CLI' if slug.start_with?('sdks', 'pnpify')
+ at_css('header .active').content
end
end
end
diff --git a/lib/docs/scrapers/yarn.rb b/lib/docs/scrapers/yarn.rb
index 9ce03a5153..90a2a1c78d 100644
--- a/lib/docs/scrapers/yarn.rb
+++ b/lib/docs/scrapers/yarn.rb
@@ -20,6 +20,7 @@ class Yarn < UrlScraper
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
From 19d6edf65b317081ee6b51d39bd6f456d362d455 Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Mon, 29 Nov 2021 03:14:02 +0000
Subject: [PATCH 0102/1945] Fix format
---
lib/docs/scrapers/yarn.rb | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/lib/docs/scrapers/yarn.rb b/lib/docs/scrapers/yarn.rb
index 90a2a1c78d..12b44f5e88 100644
--- a/lib/docs/scrapers/yarn.rb
+++ b/lib/docs/scrapers/yarn.rb
@@ -8,8 +8,8 @@ class Yarn < UrlScraper
options[:skip] = %w(nightly)
options[:attribution] = <<-HTML
- © 2016–present Yarn Contributors
- Licensed under the BSD License.
+ © 2016–present Yarn Contributors
+ Licensed under the BSD License.
HTML
version 'Berry' do
From e17bbbf23ce3768cf9eb7991830a8c0bcbc752b3 Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Mon, 29 Nov 2021 03:43:16 +0000
Subject: [PATCH 0103/1945] Clean more elements
---
lib/docs/filters/yarn/clean_html_berry.rb | 41 +++++++++++++++++------
1 file changed, 30 insertions(+), 11 deletions(-)
diff --git a/lib/docs/filters/yarn/clean_html_berry.rb b/lib/docs/filters/yarn/clean_html_berry.rb
index 00e0316c5a..5d901150ae 100644
--- a/lib/docs/filters/yarn/clean_html_berry.rb
+++ b/lib/docs/filters/yarn/clean_html_berry.rb
@@ -2,21 +2,40 @@ module Docs
class Yarn
class CleanHtmlBerryFilter < Filter
def call
- # Version notice
- css('#gatsby-focus-wrapper > div').remove
+ if slug.empty?
+ @doc = at_css('main')
+ css(
+ (['div:first-child'] * 3).join('>'), # Tagline
+ 'img',
+ 'hr', # Footer
+ 'hr + div', # Footer
+ ).remove
- # Logo and menu
- css('header > div:first-child').remove
+ css('a').each do |link|
+ link.name = 'div'
+ link.css('h3').each do |node|
+ node.replace("")
+ end
+ end
- # Left nav and TOC
- css('main > div > div:first-child', 'aside').remove
+ return doc
+ end
+
+ @doc = at_css('article')
+ # Heading & edit link
+ css('h1', 'h1 + a').remove unless slug.start_with?('configuration')
- # Title and edit link
- css('article > div:first-child').remove
+ if slug.start_with?('cli')
+ css('.header-code').each do |node|
+ node.name = 'span'
+ end
+ end
- # Bottom divider on index
- if slug == ''
- css('main > hr').remove
+ if slug.start_with?('configuration')
+ css('h1', 'h2').each do |node|
+ node.name = node.name.sub(/\d/) { |i| i.to_i + 1 }
+ node.remove_attribute('style')
+ end
end
doc
From 38a6506b22ba4e9a4fea3de62710e86abc1d4400 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Mon, 29 Nov 2021 18:08:56 +0100
Subject: [PATCH 0104/1945] Update SQLite documentation (3.37.0)
---
docs/file-scrapers.md | 4 ++++
lib/docs/scrapers/sqlite.rb | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/docs/file-scrapers.md b/docs/file-scrapers.md
index 5289d98011..ae1f3f8c3d 100644
--- a/docs/file-scrapers.md
+++ b/docs/file-scrapers.md
@@ -248,3 +248,7 @@ See `lib/docs/scrapers/scala.rb`
Download the docs from https://sqlite.org/download.html, unzip it, and rename
it to `/path/to/devdocs/docs/sqlite`
+
+```sh
+curl https://sqlite.org/2021/sqlite-doc-3370000.zip | bsdtar --extract --file - --directory=docs/sqlite/```
+```
diff --git a/lib/docs/scrapers/sqlite.rb b/lib/docs/scrapers/sqlite.rb
index b9fadd810b..d2111dcb2d 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.37.0'
self.base_url = 'https://sqlite.org/'
self.root_path = 'docs.html'
self.initial_paths = %w(keyword_index.html)
From 489975da835e31492c3858a8d414d52facfa5ed8 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Mon, 29 Nov 2021 18:23:14 +0100
Subject: [PATCH 0105/1945] Add i3 documentation
---
assets/javascripts/news.json | 4 +++
.../templates/pages/about_tmpl.coffee | 7 ++++-
lib/docs/filters/i3/entries.rb | 17 +++++++++++
lib/docs/scrapers/i3.rb | 28 ++++++++++++++++++
public/icons/docs/i3/16.png | Bin 0 -> 1203 bytes
public/icons/docs/i3/16@2x.png | Bin 0 -> 2162 bytes
public/icons/docs/i3/SOURCE | 1 +
7 files changed, 56 insertions(+), 1 deletion(-)
create mode 100644 lib/docs/filters/i3/entries.rb
create mode 100644 lib/docs/scrapers/i3.rb
create mode 100644 public/icons/docs/i3/16.png
create mode 100644 public/icons/docs/i3/16@2x.png
create mode 100644 public/icons/docs/i3/SOURCE
diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json
index cae61adead..d5b5214965 100644
--- a/assets/javascripts/news.json
+++ b/assets/javascripts/news.json
@@ -1,4 +1,8 @@
[
+ [
+ "2021-11-29",
+ "New documentation: i3"
+ ],
[
"2021-06-09",
"New documentation: R"
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index c27816c5ac..14083f4159 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -82,7 +82,12 @@ app.templates.aboutPage = -> """
"""
credits = [
- [ 'Angular.js',
+ [ 'i3',
+ '2009, Michael Stapelberg and contributors',
+ 'BSD',
+ 'https://raw.githubusercontent.com/i3/i3/next/LICENSE'
+ ], [
+ 'Angular.js',
'2010-2020 Google, Inc.',
'CC BY 3.0',
'https://creativecommons.org/licenses/by/3.0/'
diff --git a/lib/docs/filters/i3/entries.rb b/lib/docs/filters/i3/entries.rb
new file mode 100644
index 0000000000..0992fec0dd
--- /dev/null
+++ b/lib/docs/filters/i3/entries.rb
@@ -0,0 +1,17 @@
+module Docs
+ class I3
+ class EntriesFilter < Docs::EntriesFilter
+ def additional_entries
+ entries = []
+ type = nil
+ css('h2[id], h3[id]').each do |node|
+ if node.name == 'h2' && node['id']
+ type = node.content
+ end
+ entries << [node.content, node['id'], type]
+ end
+ entries
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/i3.rb b/lib/docs/scrapers/i3.rb
new file mode 100644
index 0000000000..abc4e791aa
--- /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/public/icons/docs/i3/16.png b/public/icons/docs/i3/16.png
new file mode 100644
index 0000000000000000000000000000000000000000..d53f01271fbd819e78354a026f16d0e51ecc2b20
GIT binary patch
literal 1203
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
Date: Mon, 29 Nov 2021 18:41:10 +0100
Subject: [PATCH 0106/1945] Update PHP documentation (8.1)
---
assets/javascripts/templates/pages/about_tmpl.coffee | 2 +-
docs/file-scrapers.md | 4 ++--
lib/docs/scrapers/php.rb | 4 ++--
3 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 14083f4159..6146bdbca8 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -643,7 +643,7 @@ credits = [
'https://raw.githubusercontent.com/phoenixframework/phoenix/master/LICENSE.md'
], [
'PHP',
- '1997-2018 The PHP Documentation Group',
+ '1997-2021 The PHP Documentation Group',
'CC BY',
'https://secure.php.net/manual/en/copyright.php'
], [
diff --git a/docs/file-scrapers.md b/docs/file-scrapers.md
index ae1f3f8c3d..4ea46188b8 100644
--- a/docs/file-scrapers.md
+++ b/docs/file-scrapers.md
@@ -173,13 +173,13 @@ bsdtar xf pandas.zip
```
## PHP
-Click the link under the "Many HTML files" column on https://www.php.net/download-docs.php, extract the tarball, change its name to `php` and put it in `/path/to/devdocs/docs/`.
+Click the link under the "Many HTML files" column on https://www.php.net/download-docs.php, extract the tarball, change its name to `php` and put it in `docs/`.
Or run the following commands in your terminal:
```sh
curl https://www.php.net/distributions/manual/php_manual_en.tar.gz > php.tar; \
-tar -xf php.tar; mv php-chunked-xhtml/ path/to/devdocs/docs/php/
+tar -xf php.tar; mv php-chunked-xhtml/ docs/php/
```
## Python 3.6+
diff --git a/lib/docs/scrapers/php.rb b/lib/docs/scrapers/php.rb
index 2db16d87a7..e07b1e44cd 100644
--- a/lib/docs/scrapers/php.rb
+++ b/lib/docs/scrapers/php.rb
@@ -5,7 +5,7 @@ class Php < FileScraper
self.name = 'PHP'
self.type = 'php'
- self.release = '8.0'
+ self.release = '8.1'
self.base_url = 'https://www.php.net/manual/en/'
self.root_path = 'index.html'
self.initial_paths = %w(
@@ -62,7 +62,7 @@ class Php < FileScraper
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
From 98b46e6d59bddf2e11747b99c7daa22b9ef3391c Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Tue, 30 Nov 2021 04:56:48 +0800
Subject: [PATCH 0107/1945] Remove unnecessary prefix
---
lib/docs/filters/yarn/entries_berry.rb | 3 ---
1 file changed, 3 deletions(-)
diff --git a/lib/docs/filters/yarn/entries_berry.rb b/lib/docs/filters/yarn/entries_berry.rb
index da6a9ea58f..d02d9f8339 100644
--- a/lib/docs/filters/yarn/entries_berry.rb
+++ b/lib/docs/filters/yarn/entries_berry.rb
@@ -18,9 +18,6 @@ def get_name
name.prepend "#{links.index(active_link) + 1}. "
end
- # TODO: remove when https://github.com/yarnpkg/berry/issues/3809 is resolved
- name.prepend('yarn ') if slug.start_with?('sdks', 'pnpify')
-
name
end
From 2d509d4d6581c50a86ad76c2df90b228f9ef22d4 Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Tue, 30 Nov 2021 19:12:58 +0000
Subject: [PATCH 0108/1945] Update ruby/setup-ruby action to v1.88.0
---
.github/workflows/build.yml | 2 +-
.github/workflows/schedule-doc-report.yml | 2 +-
.github/workflows/test.yml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index f7b73b1509..617323efa2 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.87.0
+ uses: ruby/setup-ruby@v1.88.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Run tests
diff --git a/.github/workflows/schedule-doc-report.yml b/.github/workflows/schedule-doc-report.yml
index 07fba6d8dd..aedac8cfed 100644
--- a/.github/workflows/schedule-doc-report.yml
+++ b/.github/workflows/schedule-doc-report.yml
@@ -10,7 +10,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.87.0
+ uses: ruby/setup-ruby@v1.88.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Generate report
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 5dd8585b0e..49cf7a8604 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -11,7 +11,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.87.0
+ uses: ruby/setup-ruby@v1.88.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Run tests
From c5dbdbd1cff507f3aaa7b0e639049203ed5c51df Mon Sep 17 00:00:00 2001
From: Kid <44045911+kidonng@users.noreply.github.com>
Date: Thu, 2 Dec 2021 08:10:20 +0800
Subject: [PATCH 0109/1945] Remove outdated clenaup
---
lib/docs/filters/yarn/entries_berry.rb | 2 --
1 file changed, 2 deletions(-)
diff --git a/lib/docs/filters/yarn/entries_berry.rb b/lib/docs/filters/yarn/entries_berry.rb
index d02d9f8339..44c1e18ea3 100644
--- a/lib/docs/filters/yarn/entries_berry.rb
+++ b/lib/docs/filters/yarn/entries_berry.rb
@@ -11,8 +11,6 @@ def get_name
name = at_css('h1').content
if slug.start_with?('getting-started')
- name.remove! /\d - /
-
active_link = at_css('main .active')
links = active_link.parent.children.to_a
name.prepend "#{links.index(active_link) + 1}. "
From e16232728ef21780108a682b8168f5703e7c5119 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Thu, 2 Dec 2021 22:42:09 +0100
Subject: [PATCH 0110/1945] yarn: fix get_latest_version
---
lib/docs/scrapers/yarn.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/yarn.rb b/lib/docs/scrapers/yarn.rb
index 12b44f5e88..8cc49260ee 100644
--- a/lib/docs/scrapers/yarn.rb
+++ b/lib/docs/scrapers/yarn.rb
@@ -36,7 +36,7 @@ class Yarn < UrlScraper
end
def get_latest_version(opts)
- get_latest_github_release('yarnpkg', 'berry', opts)
+ get_latest_github_release('yarnpkg', 'berry', opts)[/[\d.]+/]
end
end
end
From 07279d6aaeb06e685bf09198247b7066e4ac69e3 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Thu, 2 Dec 2021 22:42:15 +0100
Subject: [PATCH 0111/1945] yarn: clean all styles
---
lib/docs/filters/yarn/clean_html_berry.rb | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/lib/docs/filters/yarn/clean_html_berry.rb b/lib/docs/filters/yarn/clean_html_berry.rb
index 5d901150ae..96b3ee53e2 100644
--- a/lib/docs/filters/yarn/clean_html_berry.rb
+++ b/lib/docs/filters/yarn/clean_html_berry.rb
@@ -34,10 +34,13 @@ def call
if slug.start_with?('configuration')
css('h1', 'h2').each do |node|
node.name = node.name.sub(/\d/) { |i| i.to_i + 1 }
- node.remove_attribute('style')
end
end
+ css('*').each do |node|
+ node.remove_attribute('style')
+ end
+
doc
end
end
From 8975e9c738ea0ede1c5e05e70c4330672bf50634 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sat, 4 Dec 2021 00:16:06 +0100
Subject: [PATCH 0112/1945] Add Vite documentation
https://vitejs.dev/
---
assets/javascripts/news.json | 4 +++
.../templates/pages/about_tmpl.coffee | 5 +++
lib/docs/filters/vue/clean_html.rb | 7 +++-
lib/docs/scrapers/vite.rb | 30 ++++++++++++++++++
public/icons/docs/vite/16.png | Bin 0 -> 703 bytes
public/icons/docs/vite/16@2x.png | Bin 0 -> 1376 bytes
public/icons/docs/vite/SOURCE | 1 +
7 files changed, 46 insertions(+), 1 deletion(-)
create mode 100644 lib/docs/scrapers/vite.rb
create mode 100644 public/icons/docs/vite/16.png
create mode 100644 public/icons/docs/vite/16@2x.png
create mode 100644 public/icons/docs/vite/SOURCE
diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json
index d5b5214965..a8217c2b00 100644
--- a/assets/javascripts/news.json
+++ b/assets/javascripts/news.json
@@ -1,4 +1,8 @@
[
+ [
+ "2021-12-04",
+ "New documentation: Vite"
+ ],
[
"2021-11-29",
"New documentation: i3"
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 6146bdbca8..e5349e9cb9 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -851,6 +851,11 @@ credits = [
'2010-2018 Mitchell Hashimoto',
'MPL',
'https://raw.githubusercontent.com/mitchellh/vagrant/master/website/LICENSE.md'
+ ], [
+ 'Vite',
+ '2019–present, Yuxi (Evan) You and Vite contributors',
+ 'MIT',
+ 'https://github.com/vitejs/vite/blob/main/LICENSE'
], [
'Vue Router',
'2013-present Evan You',
diff --git a/lib/docs/filters/vue/clean_html.rb b/lib/docs/filters/vue/clean_html.rb
index e05c081b33..754d3789e4 100644
--- a/lib/docs/filters/vue/clean_html.rb
+++ b/lib/docs/filters/vue/clean_html.rb
@@ -2,7 +2,12 @@ module Docs
class Vue
class CleanHtmlFilter < Filter
def call
- @doc = at_css(version == '3' ? 'main' : '.content')
+ if current_url.host == 'vitejs.dev'
+ return 'Vite
' if root_page?
+ @doc = at_css('.content > div')
+ else
+ @doc = at_css(version == '3' ? 'main' : '.content')
+ end
at_css('h1').content = 'Vue.js' if root_page?
doc.child.before('Vue.js API
') if slug == 'api/' || slug == 'api/index'
diff --git a/lib/docs/scrapers/vite.rb b/lib/docs/scrapers/vite.rb
new file mode 100644
index 0000000000..4af8b8953e
--- /dev/null
+++ b/lib/docs/scrapers/vite.rb
@@ -0,0 +1,30 @@
+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[:container] = 'main'
+ options[:root_title] = 'Vite'
+
+ options[:attribution] = <<-HTML
+ © 2019–present, Yuxi (Evan) You and Vite contributors
+ Licensed under the MIT License.
+ HTML
+
+ version do
+ self.release = '2.6.14'
+ self.base_url = 'https://vitejs.dev/'
+ self.initial_paths = %w(guide/)
+ html_filters.push 'vue/entries_v3', 'vue/clean_html'
+ end
+
+ def get_latest_version(opts)
+ get_npm_version('vite', opts)
+ end
+ end
+end
diff --git a/public/icons/docs/vite/16.png b/public/icons/docs/vite/16.png
new file mode 100644
index 0000000000000000000000000000000000000000..90ffa786580230c8893595dd7e2dcff8e5ce8521
GIT binary patch
literal 703
zcmV;w0zmzVP)#f#)51osr9~fni|_D0&v!USut+Ht)A-`8
zgH$zsvI;*{jh}ojR&}=qbH=s-wcM0wJzK>19Q?JukPlDBQK}fF@TMlu{1q1{*x!@kWe
z01Y4(6Mlh1qwRw2LL`?!IyT8<$vn~9_+iYHNyrt=hi-~2fCzp`%LVnw^4Jy1dFYr^@*ta7N-k4G#2zKydjrGK@9ur7T?sPtZU7L@XlHDP@3sRI
zpX!L{pBauv(NiH=Ahp)t^M44AUKdlABigL|gPI>18$3YBQ5_AvV&tC!fFj8?%jI3f
zpJIG?A4W1fZF*YULRqoUA;80Wwa4&OmnlJ)qOmS6F8!APpr^*~*K$;NKg9Zm_rhB!
lWBg5^`{D>1C5yoTKLKAr4m*W8pD+Lb002ovPDHLkV1k{aJRbl6
literal 0
HcmV?d00001
diff --git a/public/icons/docs/vite/16@2x.png b/public/icons/docs/vite/16@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..375fb680ed60b7ae63a9e689af5c69c88989ff62
GIT binary patch
literal 1376
zcmV-m1)utfP)kpI$#FBt9K@23NrZp;wMn!=bLySg9s2Yfgq68I{YO085
zFa!*en4l7kKUI+^5)&|@5D<|>1=_PMKeYv+h)@jD>z{YGGqYo6xjnY!uDvU$FPVFD
zd$aHRzPIn~%n>e=>DDKLD6qE40vvxWqw9}S>gPlQsH(D5W-
zTP18e586g@IB>+V!D3NP!0j^%5a+w0MH#dmaDku
C}5ZKg$dR&;!!Koi`nt3(-@OQqQGcyP%eiUPQoHuf}Ri;sp1lJvBs=RyZGfynh89`1$6%!2%;NW5!$1Z5IOz;
zY!S*xsJXcciLNVC_gj)`p4>`_toMTF*XT`5;=T)=pfS=q4cjh)N));kz39%#2o3AF
zs0)-c3}0;Ai+FdbSNW0FGP*t-CTH*rc+3*0<`RkX>b0w)x3?53Ug)YS3A7=^&!){l
ztE;{=rJihBk`8=80xN6iH!htw4YyrLXi_)FSCbOghp$f8u|a2uPew$RQ@IBdYZ
z+F{GN#97PNiXM?MMGa{S@yM@Lh2*IE*a3wmK7i~$LR!xXgyE$2zq{-QL;f##$0
zuyfA`5Q#h&+^BD^Uz}RYlz#XAZ|UGAorq%jcx!kE7I1~h{!OaBsmAp|>Vb7*ubY8m
zEe|0cy~@4L6?%dR_R3)K*7*2j^Bpm2#C~WAwANLp
zNHIyvW^SY2%Szy}_o;zPU2FC0hLVx{aI)2?pXjMST)QCM?tv8-HRF#XRfwIv)>FT0=1;UWmzX*IFEIA`
zY#j=8>Sm@e-rXY{^QI)zo(>mu!?b#;%OxJmmB5^h6l02(`BI)dZ0hy7f)9y+vB(a5
z%q8}xHX8?VDE87&VhxEv802t=mKXvsJ2B}u?uby^e@4LAj34QH4QvA8PbSz({2%u9
i1ReZlsxG;d82
Date: Sat, 4 Dec 2021 18:31:17 +0100
Subject: [PATCH 0113/1945] Update Rust documentation (1.57.0)
---
lib/docs/scrapers/rust.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/rust.rb b/lib/docs/scrapers/rust.rb
index 58cd0fc1b3..8b5e8fe654 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.56.0'
+ self.release = '1.57.0'
self.base_url = 'https://doc.rust-lang.org/'
self.root_path = 'book/index.html'
self.initial_paths = %w(
From 578bba18073bf45269466f475368de8334bd2c7b Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sat, 4 Dec 2021 18:37:43 +0100
Subject: [PATCH 0114/1945] Update webpack documentation (5.64.4)
---
lib/docs/filters/webpack/clean_html.rb | 4 ++++
lib/docs/scrapers/webpack.rb | 2 +-
2 files changed, 5 insertions(+), 1 deletion(-)
diff --git a/lib/docs/filters/webpack/clean_html.rb b/lib/docs/filters/webpack/clean_html.rb
index ebc235f511..b57190a94c 100644
--- a/lib/docs/filters/webpack/clean_html.rb
+++ b/lib/docs/filters/webpack/clean_html.rb
@@ -20,6 +20,10 @@ def call
node.parent.content = node.parent.content
end
+ css('*').each do |node|
+ node.remove if node['class'] && node['class'][/print:hidden/]
+ end
+
# for webpack-contrib /loaders and /plugins
shields = at_css('img[src*="shields.io"]')
shields.ancestors('p')[0].remove if shields
diff --git a/lib/docs/scrapers/webpack.rb b/lib/docs/scrapers/webpack.rb
index be6771c3c6..ae58cd4770 100644
--- a/lib/docs/scrapers/webpack.rb
+++ b/lib/docs/scrapers/webpack.rb
@@ -36,7 +36,7 @@ class Webpack < UrlScraper
HTML
version '5' do
- self.release = '5.59.1'
+ self.release = '5.64.4'
self.base_url = 'https://webpack.js.org/'
end
From a9843261b968933d1d871a948a2626fe2cbae89f Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 00:46:39 +0100
Subject: [PATCH 0115/1945] Add esbuild documentation
---
assets/javascripts/news.json | 4 +++
.../templates/pages/about_tmpl.coffee | 5 +++
lib/docs/filters/esbuild/clean_html.rb | 19 ++++++++++++
lib/docs/filters/esbuild/entries.rb | 21 +++++++++++++
lib/docs/scrapers/esbuild.rb | 29 ++++++++++++++++++
public/icons/docs/esbuild/16.png | Bin 0 -> 460 bytes
public/icons/docs/esbuild/16@2x.png | Bin 0 -> 756 bytes
public/icons/docs/esbuild/SOURCE | 1 +
8 files changed, 79 insertions(+)
create mode 100644 lib/docs/filters/esbuild/clean_html.rb
create mode 100644 lib/docs/filters/esbuild/entries.rb
create mode 100644 lib/docs/scrapers/esbuild.rb
create mode 100644 public/icons/docs/esbuild/16.png
create mode 100644 public/icons/docs/esbuild/16@2x.png
create mode 100644 public/icons/docs/esbuild/SOURCE
diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json
index a8217c2b00..f011506e5f 100644
--- a/assets/javascripts/news.json
+++ b/assets/javascripts/news.json
@@ -1,4 +1,8 @@
[
+ [
+ "2021-12-05",
+ "New documentation: esbuild"
+ ],
[
"2021-12-04",
"New documentation: Vite"
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index e5349e9cb9..144b462206 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -291,6 +291,11 @@ credits = [
'2010-2021 Ericsson AB',
'Apache',
'https://raw.githubusercontent.com/erlang/otp/maint/LICENSE.txt'
+ ], [
+ 'esbulid',
+ '2020 Evan Wallace',
+ 'MIT',
+ 'https://raw.githubusercontent.com/evanw/esbuild/blob/master/LICENSE.md'
], [
'ESLint',
'OpenJS Foundation and other contributors',
diff --git a/lib/docs/filters/esbuild/clean_html.rb b/lib/docs/filters/esbuild/clean_html.rb
new file mode 100644
index 0000000000..068c17cb30
--- /dev/null
+++ b/lib/docs/filters/esbuild/clean_html.rb
@@ -0,0 +1,19 @@
+module Docs
+ class Esbuild
+ class CleanHtmlFilter < Filter
+ def call
+ css('figure.bench').remove
+ css('.permalink').remove
+ css('.switcher').remove
+ css('pre').each do |node|
+ node.content = node.content
+ node['data-language'] = 'javascript'
+ node['data-language'] = 'sh' if node['class'] && node['class'].include?('cli')
+ node['data-language'] = 'go' if node['class'] && node['class'].include?('go')
+ node['class'] = nil
+ end
+ doc
+ end
+ end
+ end
+end
diff --git a/lib/docs/filters/esbuild/entries.rb b/lib/docs/filters/esbuild/entries.rb
new file mode 100644
index 0000000000..26cce23943
--- /dev/null
+++ b/lib/docs/filters/esbuild/entries.rb
@@ -0,0 +1,21 @@
+module Docs
+ class Esbuild
+ class EntriesFilter < Docs::EntriesFilter
+ def name
+ at_css('h1').content
+ end
+ def type
+ at_css('h1').content
+ end
+
+ def additional_entries
+ entries = []
+ type = at_css('h1').content
+ css('h2[id], h3[id]').each do |node|
+ entries << [node.content.gsub(/^#/, ''), node['id'], type]
+ end
+ entries
+ end
+ end
+ end
+end
diff --git a/lib/docs/scrapers/esbuild.rb b/lib/docs/scrapers/esbuild.rb
new file mode 100644
index 0000000000..c495518ede
--- /dev/null
+++ b/lib/docs/scrapers/esbuild.rb
@@ -0,0 +1,29 @@
+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
+
+ version do
+ self.release = '0.14.2'
+ self.base_url = 'https://esbuild.github.io/'
+ html_filters.push 'esbuild/clean_html', 'esbuild/entries'
+ end
+
+ def get_latest_version(opts)
+ get_npm_version('esbuild', opts)
+ end
+ end
+end
diff --git a/public/icons/docs/esbuild/16.png b/public/icons/docs/esbuild/16.png
new file mode 100644
index 0000000000000000000000000000000000000000..c2891b011f74a05e823f1306f4402348f2882bdb
GIT binary patch
literal 460
zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!WQl7;NpOBzNqJ&XDnogBxn5>o
zc5!lIL8@MUQTpt6Hc~)EoCO|{#S9FLdLYbLT`1)X6r3F36XFV_|DR#_f0g0?ZHE8n
z82(>i_tp$Vte{Nyy1cNJ>f?e4Z=~be3#MkY6wZD;v9(
zwvKLZ--L;ir%ao^d(Yl|m#d{$ICrb(y_J*xbHesy)pAds
zAENJ9J^gl3w)9l10>6Lh
CCczB=
literal 0
HcmV?d00001
diff --git a/public/icons/docs/esbuild/16@2x.png b/public/icons/docs/esbuild/16@2x.png
new file mode 100644
index 0000000000000000000000000000000000000000..9b233f85e3e7d473b1aca7686e76b3e1f5366e80
GIT binary patch
literal 756
zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyk|nMYCBgY=CFO}lsSM@i<$9TU
z*~Q6;1*v-ZMd`EO*+>BuaTa()7Bes~#eguQunngH@n42XaXhzK$X6bEu42%-|s
zMq?nWgloaZ_<4%)%>kw-yOlLUI(q9n*Kn1P*xlZTg2R6HL%HKn|tt+8GNfbciq@|OyW+N;;HcShOD{9Ps(-AGz32W
zZd~c&{PE`@$!8C?oM4gt_Ho}2>%D*H6uWls?f?4UanI88^%K83E9_Y0>Sj`<+EQV1
z{A`!Nre~JB7*fC0zuUL6=~=~>6-p-(r!RQvUfE^E6R_e%bDvWy+w?!apXV>Q+4`V~dL64f{q^3B5}D$fE&A=t_p>k9XD5
Date: Sun, 5 Dec 2021 00:51:43 +0100
Subject: [PATCH 0116/1945] Update D3.js documentation (7.1.1)
---
.../templates/pages/about_tmpl.coffee | 2 +-
lib/docs/scrapers/d3.rb | 18 +++++++++++++++++-
2 files changed, 18 insertions(+), 2 deletions(-)
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 144b462206..361d0d08d3 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -228,7 +228,7 @@ credits = [
'https://raw.githubusercontent.com/dlang/phobos/master/LICENSE_1_0.txt'
], [
'D3.js',
- '2010-2020 Michael Bostock',
+ '2010-2021 Michael Bostock',
'BSD',
'https://raw.githubusercontent.com/d3/d3/master/LICENSE'
], [
diff --git a/lib/docs/scrapers/d3.rb b/lib/docs/scrapers/d3.rb
index ef3c8e491f..c623bf50ca 100644
--- a/lib/docs/scrapers/d3.rb
+++ b/lib/docs/scrapers/d3.rb
@@ -12,10 +12,26 @@ class D3 < UrlScraper
options[:container] = '.markdown-body'
options[:attribution] = <<-HTML
- © 2010–2020 Michael Bostock
+ © 2010–2021 Michael Bostock
Licensed under the BSD License.
HTML
+ version '7' do
+ self.release = '7.1.1'
+ self.base_url = 'https://github.com/d3/'
+ self.root_path = 'd3/blob/master/API.md'
+
+ html_filters.push 'd3/clean_html', 'd3/entries_v4'
+
+ options[:only_patterns] = [/\Ad3[\-\w]+\z/, /\Ad3\/blob\/master\/changes\.md\z/i]
+ options[:skip_patterns] = [/3\.x-api-reference/]
+
+ options[:fix_urls] = ->(url) do
+ url.sub! %r{/blob/master/readme.md}i, ''
+ url
+ end
+ end
+
version '6' do
self.release = '6.7.0'
self.base_url = 'https://github.com/d3/'
From a34296fdcb791ab470017145ad91e389687f8798 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 01:07:22 +0100
Subject: [PATCH 0117/1945] Update Julia documentation (1.7.0)
---
lib/docs/scrapers/julia.rb | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/lib/docs/scrapers/julia.rb b/lib/docs/scrapers/julia.rb
index 8d5b4a3e4d..f7a03e53a4 100644
--- a/lib/docs/scrapers/julia.rb
+++ b/lib/docs/scrapers/julia.rb
@@ -11,6 +11,17 @@ class Julia < UrlScraper
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}/"
From a00f3f970a61efb3c9965763c64e358b974e0e58 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 01:11:06 +0100
Subject: [PATCH 0118/1945] Update Django REST Framework documentation (3.12.4)
---
lib/docs/scrapers/mkdocs/django_rest_framework.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/mkdocs/django_rest_framework.rb b/lib/docs/scrapers/mkdocs/django_rest_framework.rb
index db58eb8c34..54ea269489 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'
From 6bb9114a50157e0cdab0fda596747e7bcdc13bbc Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 01:21:59 +0100
Subject: [PATCH 0119/1945] Unwrap "" version
---
lib/docs/scrapers/esbuild.rb | 8 +++-----
lib/docs/scrapers/vite.rb | 10 ++++------
2 files changed, 7 insertions(+), 11 deletions(-)
diff --git a/lib/docs/scrapers/esbuild.rb b/lib/docs/scrapers/esbuild.rb
index c495518ede..5484f15509 100644
--- a/lib/docs/scrapers/esbuild.rb
+++ b/lib/docs/scrapers/esbuild.rb
@@ -16,11 +16,9 @@ class Esbuild < UrlScraper
Licensed under the MIT License.
HTML
- version do
- self.release = '0.14.2'
- self.base_url = 'https://esbuild.github.io/'
- html_filters.push 'esbuild/clean_html', 'esbuild/entries'
- end
+ 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)
diff --git a/lib/docs/scrapers/vite.rb b/lib/docs/scrapers/vite.rb
index 4af8b8953e..c6514e6593 100644
--- a/lib/docs/scrapers/vite.rb
+++ b/lib/docs/scrapers/vite.rb
@@ -16,12 +16,10 @@ class Vite < UrlScraper
Licensed under the MIT License.
HTML
- version do
- self.release = '2.6.14'
- self.base_url = 'https://vitejs.dev/'
- self.initial_paths = %w(guide/)
- html_filters.push 'vue/entries_v3', 'vue/clean_html'
- end
+ self.release = '2.6.14'
+ self.base_url = 'https://vitejs.dev/'
+ self.initial_paths = %w(guide/)
+ html_filters.push 'vue/entries_v3', 'vue/clean_html'
def get_latest_version(opts)
get_npm_version('vite', opts)
From 8f01469182435127a5d0d42201364a41bdc37e60 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 01:31:43 +0100
Subject: [PATCH 0120/1945] Update Spring Boot documentation (2.6.1)
---
assets/javascripts/templates/pages/about_tmpl.coffee | 2 +-
lib/docs/filters/spring_boot/clean_html.rb | 4 +++-
lib/docs/scrapers/spring_boot.rb | 8 +++-----
3 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 361d0d08d3..a0beb7b3a1 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -908,7 +908,7 @@ credits = [
'https://raw.githubusercontent.com/yiisoft/yii/master/LICENSE'
], [
'Spring Boot',
- '2002-2020 Pivotal, Inc. All Rights Reserved.',
+ '2002-2021 Pivotal, Inc. All Rights Reserved.',
'Apache License 2.0',
'https://raw.githubusercontent.com/spring-projects/spring-boot/master/LICENSE.txt'
]
diff --git a/lib/docs/filters/spring_boot/clean_html.rb b/lib/docs/filters/spring_boot/clean_html.rb
index eb1639d335..672fc912c0 100644
--- a/lib/docs/filters/spring_boot/clean_html.rb
+++ b/lib/docs/filters/spring_boot/clean_html.rb
@@ -2,7 +2,9 @@ module Docs
class SpringBoot
class CleanHtmlFilter < Filter
def call
-
+ at_css('#content').prepend_child(at_css('h1'))
+ @doc = at_css('#content')
+
css('pre').each do |node|
language = node.children.first['data-lang'] if node.children.first.name == 'code'
node['data-language'] = language
diff --git a/lib/docs/scrapers/spring_boot.rb b/lib/docs/scrapers/spring_boot.rb
index 9e9cbc33ef..224c48be38 100644
--- a/lib/docs/scrapers/spring_boot.rb
+++ b/lib/docs/scrapers/spring_boot.rb
@@ -14,13 +14,11 @@ class SpringBoot < UrlScraper
options[:skip_patterns] = [/legal/]
options[:attribution] = <<-HTML
- Copyright © 2002–2020 Pivotal, Inc. All Rights Reserved.
+ Copyright © 2002–2021 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.6.1'
+ 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)
From 3bdd5e37ecb2a84501b6a56ce173d170808e4d59 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 01:44:16 +0100
Subject: [PATCH 0121/1945] Update Redux documentation (4.1.2)
---
.../templates/pages/about_tmpl.coffee | 2 +-
lib/docs/filters/redux/clean_html.rb | 19 +++++++++----------
lib/docs/scrapers/redux.rb | 4 ++--
3 files changed, 12 insertions(+), 13 deletions(-)
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index a0beb7b3a1..4ea7965691 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -728,7 +728,7 @@ credits = [
'https://creativecommons.org/licenses/by-sa/4.0/'
], [
'Redux',
- '2015-2020 Dan Abramov',
+ '2015-2021 Dan Abramov',
'MIT',
'https://raw.githubusercontent.com/reactjs/redux/master/LICENSE.md'
], [
diff --git a/lib/docs/filters/redux/clean_html.rb b/lib/docs/filters/redux/clean_html.rb
index a0aa9935de..df12a319b4 100644
--- a/lib/docs/filters/redux/clean_html.rb
+++ b/lib/docs/filters/redux/clean_html.rb
@@ -3,26 +3,25 @@ class Redux
class CleanHtmlFilter < Filter
def call
- css('h1, h2, h3, h4').each do |node|
+ css('h1, h2, h3, h4, h5').each do |node|
node.css('a').remove
+ node.remove_attribute('class')
+ node.parent.before(node.parent.children).remove if node.parent.name == 'header'
end
css('h3').each do |node|
node['id'] = node.content.gsub(/\(|\)/, '').downcase
end
- css('.codeBlockLines_b7E3').each do |node|
- node.remove_attribute('style')
- node.name = 'pre'
+ css('pre').each do |node|
+ node.content = node.css('.token-line').map(&:content).join("\n")
node['data-language'] = 'javascript'
-
- node.css('div, span').each do |subnode|
- subnode.remove_attribute('style')
- end
-
end
- css('.copyButton_10dd').remove
+ css('*').each do |node|
+ node.remove_attribute('style')
+ node.remove if node['class'] && node['class'].include?('copyButton')
+ end
doc
diff --git a/lib/docs/scrapers/redux.rb b/lib/docs/scrapers/redux.rb
index 31a8de84fa..62482f8d74 100644
--- a/lib/docs/scrapers/redux.rb
+++ b/lib/docs/scrapers/redux.rb
@@ -14,12 +14,12 @@ class Redux < UrlScraper
options[:container] = '.markdown'
options[:attribution] = <<-HTML
- © 2015–2020 Dan Abramov
+ © 2015–2021 Dan Abramov
Licensed under the MIT License.
HTML
version do
- self.release = '4.0.5'
+ self.release = '4.1.2'
end
version '3' do
From 73814d55cc42142604feeeaef49d93eaacaeb64d Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 01:56:24 +0100
Subject: [PATCH 0122/1945] Update Jest documentation (27.4.3)
---
lib/docs/filters/jest/clean_html.rb | 24 ++++++++----------------
lib/docs/scrapers/jest.rb | 5 +++--
2 files changed, 11 insertions(+), 18 deletions(-)
diff --git a/lib/docs/filters/jest/clean_html.rb b/lib/docs/filters/jest/clean_html.rb
index 082fdb30a9..2cf74b9aba 100644
--- a/lib/docs/filters/jest/clean_html.rb
+++ b/lib/docs/filters/jest/clean_html.rb
@@ -2,7 +2,8 @@ module Docs
class Jest
class CleanHtmlFilter < Filter
def call
- @doc = at_css('article')
+ at_css('.markdown').prepend_child(at_css('h1'))
+ @doc = at_css('.markdown')
at_css('h1').content = 'Jest Documentation' if root_page?
@@ -14,24 +15,15 @@ def call
end
css('.prism-code').each do |node|
+ node.parent.parent.before(node)
node.name = 'pre'
- node['data-language'] = 'js'
- node['data-language'] = node['class'][/language-(\w+)/, 1] if node['class']
-
- counter = 0
-
- node.css('.token-line').each do |subnode| # add newline each line of the code snippets
- if counter == 0
- else
- subnode.content = "\n#{subnode.content}"
- end
-
- counter += 1
- end
-
- node.content = node.content
+ node.remove_attribute('class')
+ node['data-language'] = 'typescript'
+ node.content = node.css('.token-line').map(&:content).join("\n")
end
+ css('*').remove_attribute('style')
+
doc
end
end
diff --git a/lib/docs/scrapers/jest.rb b/lib/docs/scrapers/jest.rb
index 879cec8be9..b2ab00b269 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 = '27.4.3'
self.base_urls = [
'https://jestjs.io/docs/',
@@ -18,7 +18,8 @@ class Jest < UrlScraper
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
From 5ca406de8e5ec22c236fcf2258c534a75c63d13d Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 02:21:35 +0100
Subject: [PATCH 0123/1945] Update Support Tables documentation (1.0.30001284)
---
lib/docs/scrapers/support_tables.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/support_tables.rb b/lib/docs/scrapers/support_tables.rb
index 17f97ac528..cf68568581 100644
--- a/lib/docs/scrapers/support_tables.rb
+++ b/lib/docs/scrapers/support_tables.rb
@@ -7,7 +7,7 @@ class SupportTables < Doc
self.name = 'Support Tables'
self.slug = 'browser_support_tables'
self.type = 'support_tables'
- self.release = '1.0.30001271'
+ self.release = '1.0.30001284'
def build_pages
url = 'https://github.com/Fyrd/caniuse/raw/main/data.json'
From 61ab7f6cecd28ad6f745148cd34e42002dedae18 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Sun, 5 Dec 2021 22:12:39 +0100
Subject: [PATCH 0124/1945] Remove FastClick library
From https://github.com/ftlabs/fastclick/blob/main/README.md
> Note: As of late 2015 most mobile browsers - notably Chrome and Safari - no longer have a 300ms touch delay, so fastclick offers no benefit on newer browsers, and risks introducing bugs into your application. Consider carefully whether you really need to use it.
---
assets/javascripts/vendor/fastclick.js | 841 ------------------
assets/javascripts/views/layout/mobile.coffee | 2 -
2 files changed, 843 deletions(-)
delete mode 100755 assets/javascripts/vendor/fastclick.js
diff --git a/assets/javascripts/vendor/fastclick.js b/assets/javascripts/vendor/fastclick.js
deleted file mode 100755
index b6f7b40c3a..0000000000
--- a/assets/javascripts/vendor/fastclick.js
+++ /dev/null
@@ -1,841 +0,0 @@
-;(function () {
- 'use strict';
-
- /**
- * @preserve FastClick: polyfill to remove click delays on browsers with touch UIs.
- *
- * @codingstandard ftlabs-jsv2
- * @copyright The Financial Times Limited [All Rights Reserved]
- * @license MIT License (see LICENSE.txt)
- */
-
- /*jslint browser:true, node:true*/
- /*global define, Event, Node*/
-
-
- /**
- * Instantiate fast-clicking listeners on the specified layer.
- *
- * @constructor
- * @param {Element} layer The layer to listen on
- * @param {Object} [options={}] The options to override the defaults
- */
- function FastClick(layer, options) {
- var oldOnClick;
-
- options = options || {};
-
- /**
- * Whether a click is currently being tracked.
- *
- * @type boolean
- */
- this.trackingClick = false;
-
-
- /**
- * Timestamp for when click tracking started.
- *
- * @type number
- */
- this.trackingClickStart = 0;
-
-
- /**
- * The element being tracked for a click.
- *
- * @type EventTarget
- */
- this.targetElement = null;
-
-
- /**
- * X-coordinate of touch start event.
- *
- * @type number
- */
- this.touchStartX = 0;
-
-
- /**
- * Y-coordinate of touch start event.
- *
- * @type number
- */
- this.touchStartY = 0;
-
-
- /**
- * ID of the last touch, retrieved from Touch.identifier.
- *
- * @type number
- */
- this.lastTouchIdentifier = 0;
-
-
- /**
- * Touchmove boundary, beyond which a click will be cancelled.
- *
- * @type number
- */
- this.touchBoundary = options.touchBoundary || 10;
-
-
- /**
- * The FastClick layer.
- *
- * @type Element
- */
- this.layer = layer;
-
- /**
- * The minimum time between tap(touchstart and touchend) events
- *
- * @type number
- */
- this.tapDelay = options.tapDelay || 200;
-
- /**
- * The maximum time for a tap
- *
- * @type number
- */
- this.tapTimeout = options.tapTimeout || 700;
-
- if (FastClick.notNeeded(layer)) {
- return;
- }
-
- // Some old versions of Android don't have Function.prototype.bind
- function bind(method, context) {
- return function() { return method.apply(context, arguments); };
- }
-
-
- var methods = ['onMouse', 'onClick', 'onTouchStart', 'onTouchMove', 'onTouchEnd', 'onTouchCancel'];
- var context = this;
- for (var i = 0, l = methods.length; i < l; i++) {
- context[methods[i]] = bind(context[methods[i]], context);
- }
-
- // Set up event handlers as required
- if (deviceIsAndroid) {
- layer.addEventListener('mouseover', this.onMouse, true);
- layer.addEventListener('mousedown', this.onMouse, true);
- layer.addEventListener('mouseup', this.onMouse, true);
- }
-
- layer.addEventListener('click', this.onClick, true);
- layer.addEventListener('touchstart', this.onTouchStart, false);
- layer.addEventListener('touchmove', this.onTouchMove, false);
- layer.addEventListener('touchend', this.onTouchEnd, false);
- layer.addEventListener('touchcancel', this.onTouchCancel, false);
-
- // Hack is required for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
- // which is how FastClick normally stops click events bubbling to callbacks registered on the FastClick
- // layer when they are cancelled.
- if (!Event.prototype.stopImmediatePropagation) {
- layer.removeEventListener = function(type, callback, capture) {
- var rmv = Node.prototype.removeEventListener;
- if (type === 'click') {
- rmv.call(layer, type, callback.hijacked || callback, capture);
- } else {
- rmv.call(layer, type, callback, capture);
- }
- };
-
- layer.addEventListener = function(type, callback, capture) {
- var adv = Node.prototype.addEventListener;
- if (type === 'click') {
- adv.call(layer, type, callback.hijacked || (callback.hijacked = function(event) {
- if (!event.propagationStopped) {
- callback(event);
- }
- }), capture);
- } else {
- adv.call(layer, type, callback, capture);
- }
- };
- }
-
- // If a handler is already declared in the element's onclick attribute, it will be fired before
- // FastClick's onClick handler. Fix this by pulling out the user-defined handler function and
- // adding it as listener.
- if (typeof layer.onclick === 'function') {
-
- // Android browser on at least 3.2 requires a new reference to the function in layer.onclick
- // - the old one won't work if passed to addEventListener directly.
- oldOnClick = layer.onclick;
- layer.addEventListener('click', function(event) {
- oldOnClick(event);
- }, false);
- layer.onclick = null;
- }
- }
-
- /**
- * Windows Phone 8.1 fakes user agent string to look like Android and iPhone.
- *
- * @type boolean
- */
- var deviceIsWindowsPhone = navigator.userAgent.indexOf("Windows Phone") >= 0;
-
- /**
- * Android requires exceptions.
- *
- * @type boolean
- */
- var deviceIsAndroid = navigator.userAgent.indexOf('Android') > 0 && !deviceIsWindowsPhone;
-
-
- /**
- * iOS requires exceptions.
- *
- * @type boolean
- */
- var deviceIsIOS = /iP(ad|hone|od)/.test(navigator.userAgent) && !deviceIsWindowsPhone;
-
-
- /**
- * iOS 4 requires an exception for select elements.
- *
- * @type boolean
- */
- var deviceIsIOS4 = deviceIsIOS && (/OS 4_\d(_\d)?/).test(navigator.userAgent);
-
-
- /**
- * iOS 6.0-7.* requires the target element to be manually derived
- *
- * @type boolean
- */
- var deviceIsIOSWithBadTarget = deviceIsIOS && (/OS [6-7]_\d/).test(navigator.userAgent);
-
- /**
- * BlackBerry requires exceptions.
- *
- * @type boolean
- */
- var deviceIsBlackBerry10 = navigator.userAgent.indexOf('BB10') > 0;
-
- /**
- * Determine whether a given element requires a native click.
- *
- * @param {EventTarget|Element} target Target DOM element
- * @returns {boolean} Returns true if the element needs a native click
- */
- FastClick.prototype.needsClick = function(target) {
- switch (target.nodeName.toLowerCase()) {
-
- // Don't send a synthetic click to disabled inputs (issue #62)
- case 'button':
- case 'select':
- case 'textarea':
- if (target.disabled) {
- return true;
- }
-
- break;
- case 'input':
-
- // File inputs need real clicks on iOS 6 due to a browser bug (issue #68)
- if ((deviceIsIOS && target.type === 'file') || target.disabled) {
- return true;
- }
-
- break;
- case 'label':
- case 'iframe': // iOS8 homescreen apps can prevent events bubbling into frames
- case 'video':
- return true;
- }
-
- return (/\bneedsclick\b/).test(target.className);
- };
-
-
- /**
- * Determine whether a given element requires a call to focus to simulate click into element.
- *
- * @param {EventTarget|Element} target Target DOM element
- * @returns {boolean} Returns true if the element requires a call to focus to simulate native click.
- */
- FastClick.prototype.needsFocus = function(target) {
- switch (target.nodeName.toLowerCase()) {
- case 'textarea':
- return true;
- case 'select':
- return !deviceIsAndroid;
- case 'input':
- switch (target.type) {
- case 'button':
- case 'checkbox':
- case 'file':
- case 'image':
- case 'radio':
- case 'submit':
- return false;
- }
-
- // No point in attempting to focus disabled inputs
- return !target.disabled && !target.readOnly;
- default:
- return (/\bneedsfocus\b/).test(target.className);
- }
- };
-
-
- /**
- * Send a click event to the specified element.
- *
- * @param {EventTarget|Element} targetElement
- * @param {Event} event
- */
- FastClick.prototype.sendClick = function(targetElement, event) {
- var clickEvent, touch;
-
- // On some Android devices activeElement needs to be blurred otherwise the synthetic click will have no effect (#24)
- if (document.activeElement && document.activeElement !== targetElement) {
- document.activeElement.blur();
- }
-
- touch = event.changedTouches[0];
-
- // Synthesise a click event, with an extra attribute so it can be tracked
- clickEvent = document.createEvent('MouseEvents');
- clickEvent.initMouseEvent(this.determineEventType(targetElement), true, true, window, 1, touch.screenX, touch.screenY, touch.clientX, touch.clientY, false, false, false, false, 0, null);
- clickEvent.forwardedTouchEvent = true;
- targetElement.dispatchEvent(clickEvent);
- };
-
- FastClick.prototype.determineEventType = function(targetElement) {
-
- //Issue #159: Android Chrome Select Box does not open with a synthetic click event
- if (deviceIsAndroid && targetElement.tagName.toLowerCase() === 'select') {
- return 'mousedown';
- }
-
- return 'click';
- };
-
-
- /**
- * @param {EventTarget|Element} targetElement
- */
- FastClick.prototype.focus = function(targetElement) {
- var length;
-
- // Issue #160: on iOS 7, some input elements (e.g. date datetime month) throw a vague TypeError on setSelectionRange. These elements don't have an integer value for the selectionStart and selectionEnd properties, but unfortunately that can't be used for detection because accessing the properties also throws a TypeError. Just check the type instead. Filed as Apple bug #15122724.
- if (deviceIsIOS && targetElement.setSelectionRange && targetElement.type.indexOf('date') !== 0 && targetElement.type !== 'time' && targetElement.type !== 'month') {
- length = targetElement.value.length;
- targetElement.setSelectionRange(length, length);
- } else {
- targetElement.focus();
- }
- };
-
-
- /**
- * Check whether the given target element is a child of a scrollable layer and if so, set a flag on it.
- *
- * @param {EventTarget|Element} targetElement
- */
- FastClick.prototype.updateScrollParent = function(targetElement) {
- var scrollParent, parentElement;
-
- scrollParent = targetElement.fastClickScrollParent;
-
- // Attempt to discover whether the target element is contained within a scrollable layer. Re-check if the
- // target element was moved to another parent.
- if (!scrollParent || !scrollParent.contains(targetElement)) {
- parentElement = targetElement;
- do {
- if (parentElement.scrollHeight > parentElement.offsetHeight) {
- scrollParent = parentElement;
- targetElement.fastClickScrollParent = parentElement;
- break;
- }
-
- parentElement = parentElement.parentElement;
- } while (parentElement);
- }
-
- // Always update the scroll top tracker if possible.
- if (scrollParent) {
- scrollParent.fastClickLastScrollTop = scrollParent.scrollTop;
- }
- };
-
-
- /**
- * @param {EventTarget} targetElement
- * @returns {Element|EventTarget}
- */
- FastClick.prototype.getTargetElementFromEventTarget = function(eventTarget) {
-
- // On some older browsers (notably Safari on iOS 4.1 - see issue #56) the event target may be a text node.
- if (eventTarget.nodeType === Node.TEXT_NODE) {
- return eventTarget.parentNode;
- }
-
- return eventTarget;
- };
-
-
- /**
- * On touch start, record the position and scroll offset.
- *
- * @param {Event} event
- * @returns {boolean}
- */
- FastClick.prototype.onTouchStart = function(event) {
- var targetElement, touch, selection;
-
- // Ignore multiple touches, otherwise pinch-to-zoom is prevented if both fingers are on the FastClick element (issue #111).
- if (event.targetTouches.length > 1) {
- return true;
- }
-
- targetElement = this.getTargetElementFromEventTarget(event.target);
- touch = event.targetTouches[0];
-
- if (deviceIsIOS) {
-
- // Only trusted events will deselect text on iOS (issue #49)
- selection = window.getSelection();
- if (selection.rangeCount && !selection.isCollapsed) {
- return true;
- }
-
- if (!deviceIsIOS4) {
-
- // Weird things happen on iOS when an alert or confirm dialog is opened from a click event callback (issue #23):
- // when the user next taps anywhere else on the page, new touchstart and touchend events are dispatched
- // with the same identifier as the touch event that previously triggered the click that triggered the alert.
- // Sadly, there is an issue on iOS 4 that causes some normal touch events to have the same identifier as an
- // immediately preceding touch event (issue #52), so this fix is unavailable on that platform.
- // Issue 120: touch.identifier is 0 when Chrome dev tools 'Emulate touch events' is set with an iOS device UA string,
- // which causes all touch events to be ignored. As this block only applies to iOS, and iOS identifiers are always long,
- // random integers, it's safe to to continue if the identifier is 0 here.
- if (touch.identifier && touch.identifier === this.lastTouchIdentifier) {
- event.preventDefault();
- return false;
- }
-
- this.lastTouchIdentifier = touch.identifier;
-
- // If the target element is a child of a scrollable layer (using -webkit-overflow-scrolling: touch) and:
- // 1) the user does a fling scroll on the scrollable layer
- // 2) the user stops the fling scroll with another tap
- // then the event.target of the last 'touchend' event will be the element that was under the user's finger
- // when the fling scroll was started, causing FastClick to send a click event to that layer - unless a check
- // is made to ensure that a parent layer was not scrolled before sending a synthetic click (issue #42).
- this.updateScrollParent(targetElement);
- }
- }
-
- this.trackingClick = true;
- this.trackingClickStart = event.timeStamp;
- this.targetElement = targetElement;
-
- this.touchStartX = touch.pageX;
- this.touchStartY = touch.pageY;
-
- // Prevent phantom clicks on fast double-tap (issue #36)
- if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
- event.preventDefault();
- }
-
- return true;
- };
-
-
- /**
- * Based on a touchmove event object, check whether the touch has moved past a boundary since it started.
- *
- * @param {Event} event
- * @returns {boolean}
- */
- FastClick.prototype.touchHasMoved = function(event) {
- var touch = event.changedTouches[0], boundary = this.touchBoundary;
-
- if (Math.abs(touch.pageX - this.touchStartX) > boundary || Math.abs(touch.pageY - this.touchStartY) > boundary) {
- return true;
- }
-
- return false;
- };
-
-
- /**
- * Update the last position.
- *
- * @param {Event} event
- * @returns {boolean}
- */
- FastClick.prototype.onTouchMove = function(event) {
- if (!this.trackingClick) {
- return true;
- }
-
- // If the touch has moved, cancel the click tracking
- if (this.targetElement !== this.getTargetElementFromEventTarget(event.target) || this.touchHasMoved(event)) {
- this.trackingClick = false;
- this.targetElement = null;
- }
-
- return true;
- };
-
-
- /**
- * Attempt to find the labelled control for the given label element.
- *
- * @param {EventTarget|HTMLLabelElement} labelElement
- * @returns {Element|null}
- */
- FastClick.prototype.findControl = function(labelElement) {
-
- // Fast path for newer browsers supporting the HTML5 control attribute
- if (labelElement.control !== undefined) {
- return labelElement.control;
- }
-
- // All browsers under test that support touch events also support the HTML5 htmlFor attribute
- if (labelElement.htmlFor) {
- return document.getElementById(labelElement.htmlFor);
- }
-
- // If no for attribute exists, attempt to retrieve the first labellable descendant element
- // the list of which is defined here: http://www.w3.org/TR/html5/forms.html#category-label
- return labelElement.querySelector('button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea');
- };
-
-
- /**
- * On touch end, determine whether to send a click event at once.
- *
- * @param {Event} event
- * @returns {boolean}
- */
- FastClick.prototype.onTouchEnd = function(event) {
- var forElement, trackingClickStart, targetTagName, scrollParent, touch, targetElement = this.targetElement;
-
- if (!this.trackingClick) {
- return true;
- }
-
- // Prevent phantom clicks on fast double-tap (issue #36)
- if ((event.timeStamp - this.lastClickTime) < this.tapDelay) {
- this.cancelNextClick = true;
- return true;
- }
-
- if ((event.timeStamp - this.trackingClickStart) > this.tapTimeout) {
- return true;
- }
-
- // Reset to prevent wrong click cancel on input (issue #156).
- this.cancelNextClick = false;
-
- this.lastClickTime = event.timeStamp;
-
- trackingClickStart = this.trackingClickStart;
- this.trackingClick = false;
- this.trackingClickStart = 0;
-
- // On some iOS devices, the targetElement supplied with the event is invalid if the layer
- // is performing a transition or scroll, and has to be re-detected manually. Note that
- // for this to function correctly, it must be called *after* the event target is checked!
- // See issue #57; also filed as rdar://13048589 .
- if (deviceIsIOSWithBadTarget) {
- touch = event.changedTouches[0];
-
- // In certain cases arguments of elementFromPoint can be negative, so prevent setting targetElement to null
- targetElement = document.elementFromPoint(touch.pageX - window.pageXOffset, touch.pageY - window.pageYOffset) || targetElement;
- targetElement.fastClickScrollParent = this.targetElement.fastClickScrollParent;
- }
-
- targetTagName = targetElement.tagName.toLowerCase();
- if (targetTagName === 'label') {
- forElement = this.findControl(targetElement);
- if (forElement) {
- this.focus(targetElement);
- if (deviceIsAndroid) {
- return false;
- }
-
- targetElement = forElement;
- }
- } else if (this.needsFocus(targetElement)) {
-
- // Case 1: If the touch started a while ago (best guess is 100ms based on tests for issue #36) then focus will be triggered anyway. Return early and unset the target element reference so that the subsequent click will be allowed through.
- // Case 2: Without this exception for input elements tapped when the document is contained in an iframe, then any inputted text won't be visible even though the value attribute is updated as the user types (issue #37).
- if ((event.timeStamp - trackingClickStart) > 100 || (deviceIsIOS && window.top !== window && targetTagName === 'input')) {
- this.targetElement = null;
- return false;
- }
-
- this.focus(targetElement);
- this.sendClick(targetElement, event);
-
- // Select elements need the event to go through on iOS 4, otherwise the selector menu won't open.
- // Also this breaks opening selects when VoiceOver is active on iOS6, iOS7 (and possibly others)
- if (!deviceIsIOS || targetTagName !== 'select') {
- this.targetElement = null;
- event.preventDefault();
- }
-
- return false;
- }
-
- if (deviceIsIOS && !deviceIsIOS4) {
-
- // Don't send a synthetic click event if the target element is contained within a parent layer that was scrolled
- // and this tap is being used to stop the scrolling (usually initiated by a fling - issue #42).
- scrollParent = targetElement.fastClickScrollParent;
- if (scrollParent && scrollParent.fastClickLastScrollTop !== scrollParent.scrollTop) {
- return true;
- }
- }
-
- // Prevent the actual click from going though - unless the target node is marked as requiring
- // real clicks or if it is in the whitelist in which case only non-programmatic clicks are permitted.
- if (!this.needsClick(targetElement)) {
- event.preventDefault();
- this.sendClick(targetElement, event);
- }
-
- return false;
- };
-
-
- /**
- * On touch cancel, stop tracking the click.
- *
- * @returns {void}
- */
- FastClick.prototype.onTouchCancel = function() {
- this.trackingClick = false;
- this.targetElement = null;
- };
-
-
- /**
- * Determine mouse events which should be permitted.
- *
- * @param {Event} event
- * @returns {boolean}
- */
- FastClick.prototype.onMouse = function(event) {
-
- // If a target element was never set (because a touch event was never fired) allow the event
- if (!this.targetElement) {
- return true;
- }
-
- if (event.forwardedTouchEvent) {
- return true;
- }
-
- // Programmatically generated events targeting a specific element should be permitted
- if (!event.cancelable) {
- return true;
- }
-
- // Derive and check the target element to see whether the mouse event needs to be permitted;
- // unless explicitly enabled, prevent non-touch click events from triggering actions,
- // to prevent ghost/doubleclicks.
- if (!this.needsClick(this.targetElement) || this.cancelNextClick) {
-
- // Prevent any user-added listeners declared on FastClick element from being fired.
- if (event.stopImmediatePropagation) {
- event.stopImmediatePropagation();
- } else {
-
- // Part of the hack for browsers that don't support Event#stopImmediatePropagation (e.g. Android 2)
- event.propagationStopped = true;
- }
-
- // Cancel the event
- event.stopPropagation();
- event.preventDefault();
-
- return false;
- }
-
- // If the mouse event is permitted, return true for the action to go through.
- return true;
- };
-
-
- /**
- * On actual clicks, determine whether this is a touch-generated click, a click action occurring
- * naturally after a delay after a touch (which needs to be cancelled to avoid duplication), or
- * an actual click which should be permitted.
- *
- * @param {Event} event
- * @returns {boolean}
- */
- FastClick.prototype.onClick = function(event) {
- var permitted;
-
- // It's possible for another FastClick-like library delivered with third-party code to fire a click event before FastClick does (issue #44). In that case, set the click-tracking flag back to false and return early. This will cause onTouchEnd to return early.
- if (this.trackingClick) {
- this.targetElement = null;
- this.trackingClick = false;
- return true;
- }
-
- // Very odd behaviour on iOS (issue #18): if a submit element is present inside a form and the user hits enter in the iOS simulator or clicks the Go button on the pop-up OS keyboard the a kind of 'fake' click event will be triggered with the submit-type input element as the target.
- if (event.target.type === 'submit' && event.detail === 0) {
- return true;
- }
-
- permitted = this.onMouse(event);
-
- // Only unset targetElement if the click is not permitted. This will ensure that the check for !targetElement in onMouse fails and the browser's click doesn't go through.
- if (!permitted) {
- this.targetElement = null;
- }
-
- // If clicks are permitted, return true for the action to go through.
- return permitted;
- };
-
-
- /**
- * Remove all FastClick's event listeners.
- *
- * @returns {void}
- */
- FastClick.prototype.destroy = function() {
- var layer = this.layer;
-
- if (deviceIsAndroid) {
- layer.removeEventListener('mouseover', this.onMouse, true);
- layer.removeEventListener('mousedown', this.onMouse, true);
- layer.removeEventListener('mouseup', this.onMouse, true);
- }
-
- layer.removeEventListener('click', this.onClick, true);
- layer.removeEventListener('touchstart', this.onTouchStart, false);
- layer.removeEventListener('touchmove', this.onTouchMove, false);
- layer.removeEventListener('touchend', this.onTouchEnd, false);
- layer.removeEventListener('touchcancel', this.onTouchCancel, false);
- };
-
-
- /**
- * Check whether FastClick is needed.
- *
- * @param {Element} layer The layer to listen on
- */
- FastClick.notNeeded = function(layer) {
- var metaViewport;
- var chromeVersion;
- var blackberryVersion;
- var firefoxVersion;
-
- // Devices that don't support touch don't need FastClick
- if (typeof window.ontouchstart === 'undefined') {
- return true;
- }
-
- // Chrome version - zero for other browsers
- chromeVersion = +(/Chrome\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];
-
- if (chromeVersion) {
-
- if (deviceIsAndroid) {
- metaViewport = document.querySelector('meta[name=viewport]');
-
- if (metaViewport) {
- // Chrome on Android with user-scalable="no" doesn't need FastClick (issue #89)
- if (metaViewport.content.indexOf('user-scalable=no') !== -1) {
- return true;
- }
- // Chrome 32 and above with width=device-width or less don't need FastClick
- if (chromeVersion > 31 && document.documentElement.scrollWidth <= window.outerWidth) {
- return true;
- }
- }
-
- // Chrome desktop doesn't need FastClick (issue #15)
- } else {
- return true;
- }
- }
-
- if (deviceIsBlackBerry10) {
- blackberryVersion = navigator.userAgent.match(/Version\/([0-9]*)\.([0-9]*)/);
-
- // BlackBerry 10.3+ does not require Fastclick library.
- // https://github.com/ftlabs/fastclick/issues/251
- if (blackberryVersion[1] >= 10 && blackberryVersion[2] >= 3) {
- metaViewport = document.querySelector('meta[name=viewport]');
-
- if (metaViewport) {
- // user-scalable=no eliminates click delay.
- if (metaViewport.content.indexOf('user-scalable=no') !== -1) {
- return true;
- }
- // width=device-width (or less than device-width) eliminates click delay.
- if (document.documentElement.scrollWidth <= window.outerWidth) {
- return true;
- }
- }
- }
- }
-
- // IE10 with -ms-touch-action: none or manipulation, which disables double-tap-to-zoom (issue #97)
- if (layer.style.msTouchAction === 'none' || layer.style.touchAction === 'manipulation') {
- return true;
- }
-
- // Firefox version - zero for other browsers
- firefoxVersion = +(/Firefox\/([0-9]+)/.exec(navigator.userAgent) || [,0])[1];
-
- if (firefoxVersion >= 27) {
- // Firefox 27+ does not have tap delay if the content is not zoomable - https://bugzilla.mozilla.org/show_bug.cgi?id=922896
-
- metaViewport = document.querySelector('meta[name=viewport]');
- if (metaViewport && (metaViewport.content.indexOf('user-scalable=no') !== -1 || document.documentElement.scrollWidth <= window.outerWidth)) {
- return true;
- }
- }
-
- // IE11: prefixed -ms-touch-action is no longer supported and it's recommended to use non-prefixed version
- // http://msdn.microsoft.com/en-us/library/windows/apps/Hh767313.aspx
- if (layer.style.touchAction === 'none' || layer.style.touchAction === 'manipulation') {
- return true;
- }
-
- return false;
- };
-
-
- /**
- * Factory method for creating a FastClick object
- *
- * @param {Element} layer The layer to listen on
- * @param {Object} [options={}] The options to override the defaults
- */
- FastClick.attach = function(layer, options) {
- return new FastClick(layer, options);
- };
-
-
- if (typeof define === 'function' && typeof define.amd === 'object' && define.amd) {
-
- // AMD. Register as an anonymous module.
- define(function() {
- return FastClick;
- });
- } else if (typeof module !== 'undefined' && module.exports) {
- module.exports = FastClick.attach;
- module.exports.FastClick = FastClick;
- } else {
- window.FastClick = FastClick;
- }
-}());
diff --git a/assets/javascripts/views/layout/mobile.coffee b/assets/javascripts/views/layout/mobile.coffee
index 77c5ee7357..1fd5e28577 100644
--- a/assets/javascripts/views/layout/mobile.coffee
+++ b/assets/javascripts/views/layout/mobile.coffee
@@ -38,8 +38,6 @@ class app.views.Mobile extends app.View
super
init: ->
- window.FastClick?.attach @body
-
$.on $('._search'), 'touchend', @onTapSearch
@toggleSidebar = $('button[data-toggle-sidebar]')
From 432b46fab36587f028665b3511485fd03dbe9a3d Mon Sep 17 00:00:00 2001
From: Enoc
Date: Sun, 5 Dec 2021 16:36:56 -0600
Subject: [PATCH 0125/1945] Fix leaflet documentation
---
assets/javascripts/templates/pages/about_tmpl.coffee | 2 +-
lib/docs/scrapers/leaflet.rb | 10 +++++-----
2 files changed, 6 insertions(+), 6 deletions(-)
diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee
index 4ea7965691..5cbc121db5 100644
--- a/assets/javascripts/templates/pages/about_tmpl.coffee
+++ b/assets/javascripts/templates/pages/about_tmpl.coffee
@@ -483,7 +483,7 @@ credits = [
'https://ctan.org/pkg/latex2e-help-texinfo/'
], [
'Leaflet',
- '2010-2019 Vladimir Agafonkin
© 2010-2011, CloudMade
Maps © OpenStreetMap contributors.',
+ '2010-2021 Vladimir Agafonkin
© 2010-2011, CloudMade
Maps © OpenStreetMap contributors.',
'BSD',
'https://raw.githubusercontent.com/Leaflet/Leaflet/master/LICENSE'
], [
diff --git a/lib/docs/scrapers/leaflet.rb b/lib/docs/scrapers/leaflet.rb
index 69abef2556..31ec27e7b5 100644
--- a/lib/docs/scrapers/leaflet.rb
+++ b/lib/docs/scrapers/leaflet.rb
@@ -14,14 +14,14 @@ class Leaflet < UrlScraper
options[:skip_links] = true
options[:attribution] = <<-HTML
- © 2010–2019 Vladimir Agafonkin
+ © 2010–2021 Vladimir Agafonkin
© 2010–2011, CloudMade
Maps © OpenStreetMap contributors.
HTML
version '1.7' do
self.release = '1.7.1'
- self.base_url = "https://leafletjs.com/reference-#{release}.html"
+ self.base_url = "https://leafletjs.com/reference.html"
end
version '1.6' do
@@ -60,9 +60,9 @@ class Leaflet < UrlScraper
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
From 679a90f96a323b38ade9dc6562866b1692dd7df0 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Mon, 6 Dec 2021 17:31:25 +0100
Subject: [PATCH 0126/1945] Update ESLint documentation (8.4.0)
---
lib/docs/scrapers/eslint.rb | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/lib/docs/scrapers/eslint.rb b/lib/docs/scrapers/eslint.rb
index 41ab45e756..d4f41a0274 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 = '8.3.0'
+ self.release = '8.4.0'
self.base_url = 'https://eslint.org/docs/'
self.root_path = 'user-guide/getting-started'
self.links = {
From 011c9e334ea5a0c6ba4b85a76552f36e31d15e6a Mon Sep 17 00:00:00 2001
From: Renovate Bot
Date: Tue, 7 Dec 2021 12:25:38 +0000
Subject: [PATCH 0127/1945] Update ruby/setup-ruby action to v1.89.0
---
.github/workflows/build.yml | 2 +-
.github/workflows/schedule-doc-report.yml | 2 +-
.github/workflows/test.yml | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml
index 617323efa2..8c3783d062 100644
--- a/.github/workflows/build.yml
+++ b/.github/workflows/build.yml
@@ -13,7 +13,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.88.0
+ uses: ruby/setup-ruby@v1.89.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Run tests
diff --git a/.github/workflows/schedule-doc-report.yml b/.github/workflows/schedule-doc-report.yml
index aedac8cfed..112f62064e 100644
--- a/.github/workflows/schedule-doc-report.yml
+++ b/.github/workflows/schedule-doc-report.yml
@@ -10,7 +10,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.88.0
+ uses: ruby/setup-ruby@v1.89.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Generate report
diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 49cf7a8604..a3b958555f 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -11,7 +11,7 @@ jobs:
steps:
- uses: actions/checkout@v2.4.0
- name: Set up Ruby
- uses: ruby/setup-ruby@v1.88.0
+ uses: ruby/setup-ruby@v1.89.0
with:
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
- name: Run tests
From 937bf3b76f91124e8da3cdd143cbdad86f0921a5 Mon Sep 17 00:00:00 2001
From: Simon Legner
Date: Tue, 7 Dec 2021 19:29:18 +0100
Subject: [PATCH 0128/1945] Update Python documentation (3.10.1)
Re-enable most non library docs.
Fixes #1601.
---
lib/docs/filters/python/entries_v3.rb | 9 ++++++++-
lib/docs/scrapers/python.rb | 21 +++++++++++++++++----
python-3.10.1-docs-html.tar.bz2 | Bin 0 -> 7259268 bytes
3 files changed, 25 insertions(+), 5 deletions(-)
create mode 100644 python-3.10.1-docs-html.tar.bz2
diff --git a/lib/docs/filters/python/entries_v3.rb b/lib/docs/filters/python/entries_v3.rb
index 43c88e39b7..a28eef2448 100644
--- a/lib/docs/filters/python/entries_v3.rb
+++ b/lib/docs/filters/python/entries_v3.rb
@@ -26,6 +26,13 @@ def get_name
end
def get_type
+ return 'Language Reference' if slug.start_with? 'reference'
+ return 'Python/C API' if slug.start_with? 'c-api'
+ return 'Tutorial' if slug.start_with? 'tutorial'
+
+ return 'Basics' unless slug.start_with? 'library/'
+ return 'Basics' if slug.start_with? 'library/index'
+
return 'Logging' if slug.start_with? 'library/logging'
return 'Asynchronous I/O' if slug.start_with? 'library/asyncio'
@@ -53,7 +60,7 @@ def include_default_entry?
end
def additional_entries
- return [] if root_page? || !include_default_entry? || name == 'errno'
+ return [] if root_page? || slug.start_with?('library/index') || !include_default_entry? || name == 'errno'
clean_id_attributes
entries = []
diff --git a/lib/docs/scrapers/python.rb b/lib/docs/scrapers/python.rb
index ce7652534e..fe10450376 100644
--- a/lib/docs/scrapers/python.rb
+++ b/lib/docs/scrapers/python.rb
@@ -1,18 +1,31 @@
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
@@ -24,7 +37,7 @@ class Python < FileScraper
HTML
version '3.10' do
- self.release = '3.10.0'
+ self.release = '3.10.1'
self.base_url = "https://docs.python.org/#{self.version}/"
html_filters.push 'python/entries_v3', 'sphinx/clean_html', 'python/clean_html'
diff --git a/python-3.10.1-docs-html.tar.bz2 b/python-3.10.1-docs-html.tar.bz2
new file mode 100644
index 0000000000000000000000000000000000000000..5864f9921bf2a879ec2170a31e4c4f016c491e23
GIT binary patch
literal 7259268
zcmagEb8s#`@HhIjPi@<_acbMPacUc>LZve!0D!(CZ~m2|J-UL03@+!L0BE=YIt+uG3OR5h#iyj<
zsdyhHVL;$TfMCd#%X>OvfmTuhVcf0Y6-=n^%kF{L!hMPWg6pjG-C`6g22^Jdring(5hpi#PR!;tc?LMn8061HhASerup&Qfro4M?JVo;=HZ{nhAifM90;k
zGBN_R*dw~G0sxQ=A7Or1)N
zqfK|c!q7Z-c+Y017HbO+fF#yZpM`l7w5pJsoi3!Z_Tr@lF#fm>ycGbVY<_GLq^(74
zMe#DM0Ju_HeSD^4u2^jCqRjHlG+)2w5OK9g#@Oh>^Z+Y%*(MbPp;2rE!mYjp+d4&d
z%O%gUTD8~;E-%0y3rT~(+3h-O+hALaXo6H-$)90I-Xb>jJ8$S$h2A#z;Y4k1X?2AC
z7b+>*OeED>6)k-fmKG4rEkeF(w>}3W#ZNreAdS=(Y}V!@=A8p)|HUlGN?k&w{H3;O
zYy%nqqS8uwh~qCjfE_ZVqAx5T;1Bb>e>(h>{M?kx;}SC*@Bdxqwl_J
z2|bMrt4^K!Yiz?#%y#<(;o+sp)8EYn!I#{q5lFz>KiJ*V2S}^Dx|tV`LXC&vQx!G6W>oOG^|~gqZm#a!QcTnbrur4(WtUH;bU{>ES4o1fF#KTB!7SZbYkX23wB&Nw0Xax(ijD4Tb!+l
zoFc&ToCO3$QjiF23_#%z9l*u{kHZF#oux008k!
zi?Q)SRB`blLLy!lvylLgvRhvI!ip`i}WxCm1c|NBh&{_kXfvRUHps8
z*|?YoCvL|^!uC5H`ActNTr_pz`ab3Wf^rQZtvL!QkY%L`)rp@vW#SzNuX?Gu!sU8T
zpd;P6A@BIMbiY67f+?6(*MZeKv4$@$6-BC>fy{I0sq(8jguWZqf&XUv)_bL;R_91S
z!hMHymUKYEUv(FyDADSZpfO~%)Od8bCqU2?B7Ig=R1}InCajhKp{0-E*
z?1AN{cH1Y)HI3CUVFYQQwGHF6R?s(hD*W{q~Blx
zL59zdU(8(`sW{qL_t;Io)Y0!^x*7_11Xc^pu)It
zs$BpbB68NrAXmzTM2XM|1O7t|4gYh=O(2RV!p
zI}5glPJP?h9<@hdT*u|UlA}dCDNwKZqNedY>|M)!jg>C9@vrrAb@f4?ukr
z(Bi%U>*tUw!a{H2OmX27$7vJvPqd$mPFUt{xfkr5fBZpLN!GvTrygK2moWeI)(BHG
z>H)EI;R9*Q+cC4i3$Bk09Ht1eeSafd1Sihw)~$K#PXBa|4zylqFc|vOQ=zu%@pzf+
zjEGb+9IS23vg$GjMzMvOBT(c>pPCcby}$Da(`
z5`L^Xmp1$iM2#KDe{}!;`AGQ;O4=l$yE?Jex|5Gp?!E92a3hSvpQ;bEX$*F?fv{bO
zAOsZsVRrI{z(^B)lf}XZAQ-tO3x%S<7%UHAkMX2MWAd%w+$@@N%d)?xi3(t4>3qay
z-TYE5ejEb}PHKL&3uk?}dOKCZ7@W8(YfwM|euC;La2$%iHS{8Tao4cTA(TpxZE0lV
zDkfbHnmKu4@6gG?oBs>#d>WqgyjHMrp1s38TVQeO8LIP}xEbrGmjEX^9BB>`H!t)5
z+yX1b*x%QZuFCTy#-D&@$&W1R0
zzy+g?FBcVZPR6HcC4e%$UjI
zsQJdRq`v6>gk4UN-Y&s8{`H?A2q(331^>IihEL-~XHcMl-iFt=H9;eI^iNIKPZ#yJ
zasz=x+*AAa8}eopO+qLkVdAE6rI8Q9O;f%&E|9tqG^og
zur561N4Z<}n7DmN5D#S_W?{~e;otuASb827spq-+Mq6~R*r&IohFg41^j6+T#U~dQ
z4?Kgdh?839Zv4MtSWb9`LE>*`z*F!kSZm9fFK{PCCkI`V{CA8qRFt{Ji&5)mzx&n$
z_B9K!d|m@huhJy8%Hte~^{&X}$c5yQGX37TN;PgIgA@ar7(H%*(n9(<2`Tu?`eUN(
z_Da`?9s9<#w1N11esm1^&$uiu1IvN@E1zK*y8SEUe9x)TNP5nefAy^-FwD>{J%w^U
zqs;*GBx|!?BW}a8RZ*_0cig2F)EE^ms+qo&LwR!O+`EBPcZz@H62Oqlhz>nrdmRju
z2^R*j&C~DhMXI$Z14$khOkQ}P&3+g+k#12BQx~Qj^VR*V%EqNLewaDuC~=w6M5~$xxjW1jO&SE-*I}SjcgOpP%muq$dvvv>7G>3M5El}%*FyQ@w|V{WBhLC*Ay}Ix
zYPhae82?kLPrNKmt6!&_uJAtbS3Wp0kDPdz)6~AUWAk!fv^=!@GZXh>3jP@-2a@=a
zhCMlsn+n+b^G{T9P=#N^ZGSnYIjc~}k)xLd^
zQXFkEw5|Rs3Y5|j1TK93O$(_K!ern+&FoX#ftVLmhya8&-h1u(#i-@rwZ;baDrIB?
zY26Q(e9QQCnyuoClIUSZ8(v4G3u|Ndl8oD{wHkLo&7d}wy6f`+{A;9De0uTFdyST%
ze4Ch1pM#8ZgEd1urP6_+HBQ>pRW5KqnY{838!ly^b|(dC;$|xo$1K6@g@-C@VScyI
z;@X|6_T2}GAwGw-@`9i9##d#E9{2#gR01#l`49fh6-`S1@wj~h%w^jPZ}#M09!}!4
z=V=RV_s$Ku{m$T8_uUITvL3=r%CKt&ZwiVrss^9VM9Xyd1|{^UB9k((MYdijye$=I
z;nspzqGbGPE6Tf28H%1gJ}j3h1r&FL9Di(WO-1$AH@|wBZl6|LVrXoIq`CAk+NHXy
zunv#%=RCb15B#`S04=S_&Fu*bO+8i(|Nl
z4z6h|ZT*bmc`Y+k4AvDrd}&p?bvNSdOO_}4U;D?lCl3!paPGaBvVpkmX`Kv)7{d^A
zJ*~c6VA7sfxLlxROEXf@=mLftUs~>ckM>kND8!aHn#W5*PC~mHL%H&FXcbR|`P>`>HElA~xbYG4c
zNBcIe&ajb|vk&nL`Ok~+zzOyn)6H`qnG{cbfD+Y#gR#}fk#&l~dDvaIxP%uj^Ns=)
zaJ9o9zbUR)cjS5v)@ehY6O;&q1$S#kdCjg>%n>i6D0R}kvB+eAQPby3JI+4LK5U3F
zaML2gc+U0TRhF@H=Z)7t0nn%z8RxW-3hVPmw3uUQ4`HL;4Y(*uJ9^-^(RdI{&>P@O7^Uz(q^|DFw8c5*i;RoWWUg0;)x34Ct8
zK6jdh8493AL;Pi@^|uZg)o-lW2YoVZtv-V)7*zQpDl{`(6qDr#ysJRe@2ds%4Ic$<
zI+Zc|Pte^(021eVb?d1nrTmnsf`hx_hAi=2A1gFkMLnohbMBXxALBknR{8q1Fwf=D
zR^CLDk_t0doJKO&B?tye@hU34V+y;QvR)D-UMp(C-j`8VQBM#AS5B^&D&hxhOZ@^L
zu7d735kl{z>eF^UHRg)RpLp~Ie9))<=}DmdB01x=QkaCDuIE6E_kPGP1-jW!x?wjl
za{$=)tNdEA>iaWh%WX0p`>J4xEm#jSvfyvU+eTdFsEZ*-G_%yzd6|Dtg}}ccC_`d?Zr!I-pSG-CM0SAsAaZ*Y
zLd2)5^e$#%K>k)&zQRaD1djTqb*BZl)2%o#nA6M|x8I&&OI&ENG*@}lUzc0USXRo|
zzv7KBRs{au0`QcSy@0Ynma?VX=J31+UI9nBf&ZasGYVJlnC+<81U$6md*+K+Dmg4U
z{bP(s&EO`qjvt!PRYBUrVEuLVc=Cy0{{hc|ef{v-XVUR)AB<|YtRp@u3<9U~s(8cW
z__p5huUSQ=12!$L)MlRH$V!X4y`TXS5@iPr=U(rs32e;^%pRA+7=E9N6$=rO?V)!JCAtZ2dKl+(Vj0sJ$u=0
z!5A+-yMQZoA$R>bflClz*I=k
zuay@L#PCqZALHJ*f&=&yzMJms>fcHk4?JJF{x>pIF4czY{=GVIZV>NMeO(ON(*ok&
zJ7z!X#MTkPtGnV#(}dngKOfD?$lg4(<;b9at@a+O!#6w$I~3Alu48*QQaiyy$^^Nd
zS~?)NExCZ#9vVJ7JX#>HI!Fb>e^PX4D+I7}4n^L%&a%71(gK|mrVe`Fq??3~vRrEwH3p=<$=9
znNbn`VF*N*&!RHp$(umMhWx5FPUq}cI~!c}2Bh(qej;Y>C=z#$lo3*R=41^{F!t4F
zA5EP4{+q4ISm7c3?;`_W-4TvPR6inZSb&+O$*@0zKppHw2v-wO+dGxOl#eN~MLBg^
z%^HLBdMfcMG@Kve
zuyK?Dc-&K^24~V>m1Bg|(I?LHd3?nBS-UKJ-wb^2w5z9949<>QcXI*ryUo7PP!e63
z-UxZKGZz@oTU}^u?(j-c7?4rhz$8gns9G}#nEF*BqxETq=mh?;u>m7I9mCfwvHY`D
zvEm~WjO$6_1GUBC!>iCB#L(0N`_Zu^SLtPx*T~CYmClk1_K)@${c{epukqQNwSRY{nCB4yVY
zpw_uG^l_v*G*N7}aXHmkmAHrB(opuniNM1>*^JB9AQl-l#!{x=UD%78;DqVm*Tryz
zsWKu4#!H{Omd&}ym#i-WjU;QDo4|jY$te%Z$jjVIHP89{6@Q3=H7cCn=Gr>LZECbm
z;<2Zu(721A$Ast39PeF^pu
z8qpp(4%U9!VkIH-Ly(AF@y{tN%54@6tagOBW~PLC!ttQ{L#gmno!?WcGm}y;Tq_}K
zgg{tbr@Ri_sT5uVAbye%es0Q?-f&2;ul-`%!N&uC{+gB71-y&q!YU1~$`!G@M@#xP
zT=t6R&iQ8x0u4m%r%5Ah*FWqe_F2RG{>7pV6uKMD4|{b6v_LFUY-~L&s5M`i9|5GY
zb?9O#`D8{hK|o0mJ>r7{1*ypW6Q=Pbf}-IGqUu7XN{X6H
zU|MLz=#;4ifJ&kUBL9L)2th3vav^mgLpn`Ky2$86Nnseh^djXUFx2g%Yd_f5S&Ma%
zTbGn<*>-J?OqcQ5pQ+1;;JzwL1u+Lj=;C_y;?m=$mMTc{*cyvmMM1lE?OcwvuR9fX
z?eFm6ps28MT2mHdo+gwr4l|-(Tu~&`cV&-sv8IY7wvr^6;7hBntr)IVOH1kWA%8b9
zuvs)PEmL=P+%sqng&L4U)nCFeB*@j`d~;8~t=s#EA&Yf|{eFLddwgcc4i~1Sd>F*z
z>*T+w8eCUsRbP%!_NK1Cf3<4>Rzq-+Z(ct!4+0%mYTCtSMm4H9f2lXOp?)B4O#k{y
z?sfMz@5t$NB~2`t9?TIA#n3VCM}zvYCdC>%`1AduH#X?5@#}cqb^qUq3C8W0y?I8z
z%58`)y4bdYLeZB_XDM&gC78AIgPyFJ^}vPic4w-09fy+|CEr!JD_u%9(_GN1aA7uH
zMx24G46fIPo8vZ3N1N@#TjBG?kV8&myY)@T@>ln&W}{Y9a3GUB)NE>EAQzIkgBYhp`>89@~;D%7e^}?WlQ8s^6YoOFNxr
zDLt1mv^+++)vb1fyfz#v26KL}9qnINovuE;ejkpkOFaq7+zE$1BZaHi@~L5dfnSVo
z^~XycC&=}*)KE#JQ%du2*SS~yQuHvVy3dVhAi3X@7pd#*Dgd%xzBH)U22>ur{-_ln>&oY`@MHwq}@G<07^1FM*YNf5%EO4y2(Kzori?s*JpQZ(^|OBlOxXU#}a^q-x5_ZOu%YJE|(CkWcQX
z{)(k%{auS>CxfUne36UNWiR}pU)%g~Mg7*uDN(x}vlP5SeK94p~l5W6DaURJM
zS|>O;&U|F&DfGn2PKp2q`zl}87GXVaFQh3^MSb@tJRa1c=7&uot@DF+Z;*ysSju9O
z@34ru!95@0!wI*=O|>vYj2bONMZ{Nil8m{3!>PO7^&fEqIm
zv`!{flne4Hc3WIg#+3?J2fFLmzYGPB1#o5^*ZXr~p4J(OKS510PFf3It5MruG+s?C
zmA{RJ#kB}#E_pp!oj(%6dEqv3HD5*-A;__P4hrR`q#}eu2iU3LbK8*?enkh^f=5wO
zsr7@HNRS%t#eJzG-Nr2?9?;UyL2K7#uY)T)wl=*f8uj?$kOTapnwRVM4?rG?LkJNW
zwe2Bn@CQqvM<76~VrOizyN$x`qa@mLYIK1H`Oj%*FQzqw
zQZl3~(J*Bn1=Y{aJPJ)&iUBaz{jSA%385}{=HUW$PbT{)p<|gnZsRllVBuRb)csOH
zQP&2qonb-na#J-nS(x|($vzP#3f)*TqA9a)ZR|3^N{<^knP85WEr-vIMXg#CvPBEf
zCq_{`z?g7F)1mfDR^#PjsEn^$vgH{798{`73gWE9WUE4g=UNI)r4QY$y+Qsj_D+djvSu3@G7VjKWY9cA28DF_*2WY2vcA#V=JiYN
zW+}&WeIvYE`GWVZ+uk7UxUmmBMPzC?N!|-?OG*2j-$X#&+F}llQcTPPQB#1{=hie-
z85ESpS=2PJGxCstvJ5e?JP~QZm^0kwcb^DI{5&e>XqpFZIVFz!Y;+61j{S+5V$5ug
z=R|am_}+(Ze^)7u|9e@^Ev8saHzz*znf5X8BTR>(;v$Bjnp=5Nw(L?#tA76UzYG>`
z%@bm4ATg#h_KMofR<{Ug&b$}7edu0+@PKrCNZ_hgmhRsnqwOpRv%jv?a>yAKIfAtu
zVDjeH<^e&LE(j%!IPQ~rwSEZ;pPU;_yQJFD_9SN@p_6Hs)@
z?&N-YGSu^;M`iRzqPOl^~Th$@om0y68|UCO7r>%4-yR+EQ0
zy!#=-)QeRWhzL(;!t4ub^cDqlDv(?aBM>IR$hK%!@bgC*W+FNN+RM#O+2-8-G1Owf
z(5E6#rdziIv=;lv(A3AUNIG8DyM68;KrUS+~f;=*g92QK7)dwDkPKn{$=v$x~W5=%8%WHn*l1o
z7t{Al|6pbV;rcdu)df%J@{cX+Lm*}BQ7Y!R68OZJs^2F?gC23{=?hnEXg_I6(TwoyQF*L7zj-W&hM&(2;8H4v81Hl+VaK
z!$j2JS3ckr)1yKc&j|mf?S8N9Eow0AF!v@fQ~+j~n9XpZ+-ubs5?j5th@C%~uYxh(
zZSHP#Tf(^*!kbztj61RRgZ!;1v1n_VwXILvp0=1Z|69R1mW|~pyc7=N!&Vs>Z`+5O
z+3FO!z2niIjcxf^fB|hs4kF0HMQvkB^&0UY-b@?p+vRU>DT!0|i})Kkmz3iZJ$W4!
z*yG*Jv4h4m1wnXN|3q^EK{o^(mdmd`uIlH$gVMQ~HPJ`W9+rTv2Pw|hufUJ;@`Q-q6^WN;bN9z-$&~_ZG}fnrP<0oF1KsN#k~7BH&4eb
zfT{kB%2_YBOdyI#(HD52KST_P4-7SsXQai?{VXO-Y<2+-u|1ZnV8rPz&DVDl8_a4fV{$Pa-UQb
zd1P#pmSU0-^bdl^(w!v)-GKX#<5z=MhB=xC8U%``509*1Fn6lx)3QO4cqLs}NcDjd
zJa^oo!Bis{np4lIpHj;5#Npd#X4({ATgkFS%zJ=iIlCd=xOr5q)zehy^KUc1V@Q^@3p#v3=a}msJ6bS;9DBD_P`>(beJ9o-q1!d-)y6W5ul1Y<#}`V
z5eMMCw&{6JV98BDAx9nHm>C~P;kSdRqvW(`q!DU3-Tlto%4vMAUCPs10<~Z}`-!+^
z6(sBse6h`-q2UGzQX_L*d7gJnomBuLwCRS2Oubc;y(v
zH4VoixiR<=Fqf%fT_`{`#%S>{MaOW6;2UnGNPOE=Kg=w4fSCQ_s8-pwdIhf2cn$iq
zc8FLoY2!G8B`3QA>3@bcZw5;F9&>+e8eBUnp9cZ`2Fw+n2L5fN1r6Z!&S``7H`uhR
zrVk15V_+=?#ZMspualpS?c;A~r3wU2d75E_x8T$E|QVl`qcT_l=7&=~XZ;l7q1^gYe=J$bOcU$~;3&
zk3?YlY~GT|m*6eL9>syY$BH~$&iu{SVAp#A==zV@z_(NMaWeiNbZ^D?vHRicHItK;2xaKud?e2H|t^>iG^d4}mdJyuQgU$ia
za*OkzOM_bBpDqh*_u9n_ulqQ4@J1%>sal~7^2lnlaDtqu45Bgt(rhRMarqkiYI~c>
z^@J4`(=%6j+p=x%VT9)Cr$~YC@NE*oy#f&lTW-JKA&^6Xsq8}Q%XQX6@GM+lfIVB#
zf8nTMMLV~6HrM$KwyCga%X|frXAOy~F){vP7KX;@?L^CT3}32_3Ps_n&LJ)4?8tA`
z&mbH5VHvk96NOZV$gy$4gGZ7bIpAktoCIj2qa(H@N=_RC&Kq4f5*deeVnF1Iq~094
zy7#|rn4iFJ>%qBC(UGmn_h-JuvO(agA#l-zAP{eqmw`RjnXp-pgpeZc@G?!^4vb%L
zb#`4={UqE6h0{>>vCL_+$)R%~@8;5>Ti~0G96P3R>z_fFoZBRhwq5~a$N`>i-Nt5+
z<)&pBI|2X(`+?Vh#?gLf`Q(p*L+)TKL6E;UF!zlPs1XQ_)
z866k&y|j3ZNk*dHq7})xG)A~tov|iI!foK)VDc_(m9~zd+Kz$g=cWmjK}`;=+*X!$G}H(_
z?JF;-tQF5f=~ZZ)qGmj}g@^gpgc8j4#+F;RXU_Ox9j8=cwbOFr9mC~NU#Tj1Ao5^0
z0B;-TgR>SV#<1?aov6E9eo6;1Yie84~2WLZdisPWlli0!oPGYHo%
zG*FaU@X@K4NH~U2)2lhcl;lDn-flBjId(tz?en3NZ+#P=iYh7A3
zzI?{M^`K}2YRQU3GIrI;(*N4*DsU`F>VHhg@7k>&4{fKLfuJz!RM%N_{<9~M`R21U
z$SG!CLa`}C##K;|Qc|3qbiq0B-i*A?6vJT*w!7Q`gJ^*IL!nd^ix_G$6-Gmf4!gEB
z@H*V^Bq^Z{cNTqxd(LzblZXgr>KI*x_D`H?w67eIDSC*4DUGHt1J(hI
zQij#~`pM75aXpPuj-8>W;=5Go+HI8ywjA_z*IBJ=a%=kN(9I}5y46B2=L$};^F_U1
zS1pWmse5eHTu^4^Kv8)8s8I;&f_G<_U{%#tF31igkAj}YtQJjlxQaLJNA~oAtKJU{
z%NOg&^*cE-WA=pc-3fc2Y4BZ%eRN=eVi^R=3%2xjJ^ME{=K4R1ju~^)Q6j#8c$OAr
zF#tOL91BaH8%Rce!roLpFSl>qtP;!iGgcemJ8X}AER#41Vt6sDx6sxIq$79@v3bzq
zq-o?w##?X^vUw;p;ppa5`qV+X5fLb$;())s^EA2hoIfKaoPMt9uIG>G09
zdl;)T-%tC0y9_qE^adZ?S6;}ng#Z~}=5%oUw(KQWQIBnL6TKwnS62~pz=M`+S#wR0
z$j7nt{BG0|weR?;q6vG>->tz(nD#N%7#|ag8Wf^^Oa~QP#YI!EkOnCRZbuyIOH7}7
zKi$45Z-=X_hbpb>$0sa9p>BOK8F$R-oL+Fb?MZ%xMnbk^ziSWO_IKlhG>k5S($YkB
z31{?vcW(BhQf?B<(b;CBPf2>#KE9f7Dq}c^@J!1>)opt#Q&|=sq^GMqNea#5KT+pe
zM`yl)^+WmkKIDhS8GXa
zoi))XCBNS=^D9Nk7$dMv+mEo!j@L6YfvFS3JSD`gL@};SKK*j9s#YK1;qN^pXG7MD
z75SMawf4Cj2{j;|S8)ATLJ_;LN^_J}QBUH;-k5oz)i
z?#|#(`Ye0R8eO(iU3qnBodrq6ut$EndF=tGpX)pNA30t2&gpeIcv=#j
z7qI>$vPHGdjey^)ik^_Mdf~U76$YYyA}Et#ieQ|3nSg5lnjQ
zfDQ>29pzo0n{s9R^gXNxzE!?UI8!a|W8>M;H^Hc0SfOaPq`FXOBaDQ;QE9%*hG4^R
z?_Zg-Aza#y3J{l9s;Eocqvfv8Wx8)m20w5&Z6-;>B4B6!w81>GEDjttnYU&bXS$r7
zBknmKRJBC$FAOkwe;Oh~_+jkEiTu4;=xnCLRdxR}p6I8!Dz2~B_hMz`UGTF^L@Zo$
zf5l(`aUNw_3mdb3s274z6c*M*4G#1$s|C_{-t3Qg47s=*JhQ`f@EeoYMmlPAf=YBD
zZ(Ug8j$0Ep*+;?yzlv39`1S@hJS|oah07#=J!I3v{?;qbw?;Iw
zW+|Z*969}G@+uo%7sHXNu%*GjEC1RR{$4H=n@P#eIi&kjSnn!B_tedf9}%6?>c!H_
zUt?hwQsGSnFV+4uxOdd)JZIyWouq+po@fw;8cP|=a%8^|CDICVpqc#C=vm6b|6)DY
z*WAK4=D}Au?#`kHT3-Q`vg!NlLrpI2&NVExzhI)FEutiI-Kq_cy>oaMdA(z3K@ovm
zS#Ij1@LFs6#=%T8!SDc#@~fL2e80rnG>vJoT)z;(oq&s$8lcxh4NeUugGp=4mP&&j
zcob;6iE;Q(NY|yT$Xn}u4ZDgfS=QaS;t)p3d@ubXuy}Qo+Q_s0S#IU-cc1Iyh%W*Z
zoWN1D1+a{&Y*zpoGK!hL_C5L^i+gF)}WNnBMqDpBLXy%J%k4DW3$yr<2QE6eW9o(qllJ6vm_K#=jX
zjnic}td~L`ApEkwWDYP4NU56C_f0IE$pJ|MO2Gih_#vV5NK78pdqQZ7ut<`d<3IoW
zN`{_J#!Vu9G|UcTm#dcnUlpbMrhh+y1YCGGD48JxCBb2Iqmk>Nd-||iq|PcaNj|M=
zij-{~FUre^dB^~0zVixdqK>MATuS*z5e^)teiV%&g!Q<<%^piKKdv{0N*d6w|9iGl
z!o`dHt6}3q=>g0q1ssjmy7Q>|f+GdPN>5F-+~O$-I}~i16)XUTg~*)JOcqr0)WBQl
zh-(Uq(oh7hpnS?TlynUSyfgHkY!
z6m2%xBlJ|FK$R;hPZ8dLa(h2eFqyJAyuAt5@WOSlZpzCGYPW(F@JG~*d{c26?mUJX
z2BU}2UIHkyrV(s)O*i(ewzL7
z2p(C+iYTdDMAGEv
zpS-;$R`p;BZS&xix)Z~jqmq6oNcAnFX~TJ$5AmsOJ-P4Jg>Q}BZc6_*9lxG)#JOOu
zh-na!>a)F@A<COotatpP^sh_Hh%VBy)o#5hNuNAiRe7I7A!RKNt(2R&nNU>Z^+S)_
zwQ))ENPj}?9bU-n*-f?Lhf4+oA7v*-R|d3W6=AS8@AX;~*W?1M-1K0A#l~fI2lnM`
zZ|Vum`^64iCCNr5KcP%|Im%la-1Zc#!wCOL>rk3>m~?^@(?OTE!MYA@xx5-m%KbIv
zOq}h=jB-6YA8Wn(cyxPScd~dn!+DkmPl-2eyN#{a`Q$c}Q|kH%E=Mvl7E4p|M3Ym3
zik6^kJ;6d}znBQ)^qswS8!N$(z;)nhWM-1k6Q&Wi=f}dU-@2IcBaDH+vBD|>D-EJ=
za!=?zLxd|X!ZhsE<1gqjLe0c5Fb7Ih+N2TeCeKduI63$!nMUE@a{A4+A?iv?mX!vs
zEh~09A)mLLDh?O**PgEVto-tPs-LAtD}Jf+l%Gci}KTKg@rDCGo1#Tt~~K
zode|^RqeJ76EHfU_)2Ij0&id%(bH|%zltopqR+g_xZQn;2Ir&CJ07UPG5$o6G*-OF
zeO$Y*T~Pt2@o~zZQE+U6?lyUH;%-zp`YtB1-5{f8hLFN93!PyuwRNb&tjUM?smFhb
zv4iKSY3ywA&N&^GbW)F$S3g(jtkdP<=Dd^JdK&g_8KKC|>c_FF?PsiSh0c3dD~zy=
zyubJwkh<#x%CK_7jV^bU4f6fYo|ZqQhCgJ4=7O~or6DXt&gIIw{Bt{cZ9^&k&9-snpo5
z@Jg20-8ekEaUvdW)t723(#5^om2LH{(ohkE&v;OG!fa$b8dwruSFIGeFNfCO4qkYX
z8vhm8hISL(&R>|3{HeJu0iqpPG#4IO=Crd6v+4Q}pO;%G^2Hlct>h%Y-y+`olC>@V
z_|^TIE&$VZz4(<{cB!zs3R^V4#g|NcHM&`QU`8hqZ=-UOvy&7I~`;Rs6av5H$v{AHN
z*5`h7ayu^Zm(rT`uYEmL`d~*6?}@9i$U$)^wV>X>hiP!_(euJa@dhjtG^x;V9Hkd2
zXoThL-y3m(^<{bDhLcR}CG1UugDZc+1UzVJ!%_JY_6pJxZwwBQcq?WxGS%SdUI%@I
zxg$njU^u~$^Zg1$iplrXE8@IQ<%pZH)5drQitb1XD!9{1G+g8
zrcnG;PHhKe4j4tPS`U`ungkiZZsRdcvHjBC*HfQ`oZt`dCJDfID;s%;@Y6`vY%`P&
zk-Wp)73Da=zkOtmk`3Uf&-FiFQtqC75qk#j{$=M=z0^o>`L96?<*V&g7C4
z6{H(CW<7^c*VEF%yTbc=NG)*+xN2XN1{_h#dbTIS^OM_V1bodng;l1Y&S&B#)W*Hl
zvDmGY6!_SCjS4(<#lQxO25-3o+YKACHB
zx;!&Lmxe(~sB>QMkI3^ZEcIf>YSbnV(r{IOmxq<)8>+RDtn-v>YTw&oywbNds8BRK
z9uGnUuS@}(?~bG`EgyQbyYH8M5ByJ#Yl=owH(_Y5x`I4Rxh|%^JBjE4%(IDy9&n(i
zb#2fKZeL&rL@e_3E)^vKzux?0(~fqre5VhGzMwg-k$D+$!DN30q$-`GTy3;8{{BTH
z06@RQWlp)do1)2VFc&Fe4&b1jKnh7B@b-rz3(Vjsv_0dEceYko3vz#Brk@~})PcZQ
z5mR(?O@@8NQ24dpT^C@$pXzHcAN46ou7dVoRvG0O?yrj`1gv!a#XWCFEL;3SuPv3(
zuZeF5T^J*um&esxIavH)5=n+(W9gWne&uS}MWaCvOHk^Ojc8_kZ5otZ{8z+setySp
zUS%4QW7@{0s#jVy@SLPd=G0y+x5DE|DiUSsSgLJEKGH@4uaaIf0O6ATD|H
ztaq6n8R%B125k^yg5RYil;5BvCJk7Fof(QrhFs~
zHm)hJrQKlQNZ(%IPnPm<$2FicR+w-#U`4fq#$a0hgCu+8=Rl@tKXJ)%I?K$7Xj@cr
zh6^u