From df37ef018917d962c9742241129ff4bd1d0af179 Mon Sep 17 00:00:00 2001 From: spamguy Date: Fri, 23 Jan 2026 11:14:15 -0800 Subject: [PATCH 01/20] Filter out garbage chars that are mucking up labelling. Bump PHPUnit version. --- lib/docs/filters/phpunit/clean_html.rb | 8 +++++--- lib/docs/filters/phpunit/entries.rb | 8 ++++---- lib/docs/scrapers/phpunit.rb | 2 +- 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/lib/docs/filters/phpunit/clean_html.rb b/lib/docs/filters/phpunit/clean_html.rb index dacb15874b..8bbf619a87 100644 --- a/lib/docs/filters/phpunit/clean_html.rb +++ b/lib/docs/filters/phpunit/clean_html.rb @@ -9,14 +9,16 @@ def call node['data-language'] = 'php' end + # When extracting strings, filter out non-ASCII chars that mysteriously get added. + if slug.match(/assertion|annotations|configuration/) css('h2').each do |node| - node['id'] = node.content + node['id'] = node.content.gsub(/\P{ASCII}/, '') end end - css('h1').each do |node| - node.content = node.content.gsub(/\d*\./, '').strip + css('h1', 'h2', 'h3').each do |node| + node.content = node.content.gsub(/\d*\. |\P{ASCII}/, '') end doc diff --git a/lib/docs/filters/phpunit/entries.rb b/lib/docs/filters/phpunit/entries.rb index fd426be6c7..9a4f90527c 100644 --- a/lib/docs/filters/phpunit/entries.rb +++ b/lib/docs/filters/phpunit/entries.rb @@ -7,8 +7,9 @@ def get_name end def get_type + name.gsub!(/\P{ASCII}/, '') if name.in? ['Assertions', 'Annotations', 'The XML Configuration File'] - name + name.gsub('The ', '') else 'Guides' end @@ -17,11 +18,10 @@ def get_type def additional_entries return [] if type == 'Guides' - css('h2').map do |node| - [node.content, node['id']] + css('h3').map do |node| + [node.content.gsub('The ', ''), node['id']] end end - end end end diff --git a/lib/docs/scrapers/phpunit.rb b/lib/docs/scrapers/phpunit.rb index 12efbbfcba..5b7830c4f5 100644 --- a/lib/docs/scrapers/phpunit.rb +++ b/lib/docs/scrapers/phpunit.rb @@ -24,7 +24,7 @@ class Phpunit < UrlScraper FILTERS = %w(phpunit/clean_html phpunit/entries title) version do - self.release = '12.0' + self.release = '12.5' self.base_url = "https://docs.phpunit.de/en/#{release}/" html_filters.push FILTERS From 2b90a21b365eb588823a30c8dd264634989b243d Mon Sep 17 00:00:00 2001 From: spamguy Date: Fri, 23 Jan 2026 10:20:59 -0800 Subject: [PATCH 02/20] Implementation of CouchDB docs. --- lib/docs/filters/couchdb/clean_html.rb | 30 ++++++++++++++ lib/docs/filters/couchdb/entries.rb | 53 +++++++++++++++++++++++++ lib/docs/scrapers/couchdb.rb | 39 ++++++++++++++++++ public/icons/docs/couchdb/16.png | Bin 0 -> 1476 bytes public/icons/docs/couchdb/16@2x.png | Bin 0 -> 2153 bytes public/icons/docs/couchdb/SOURCE | 1 + 6 files changed, 123 insertions(+) create mode 100644 lib/docs/filters/couchdb/clean_html.rb create mode 100644 lib/docs/filters/couchdb/entries.rb create mode 100644 lib/docs/scrapers/couchdb.rb create mode 100644 public/icons/docs/couchdb/16.png create mode 100644 public/icons/docs/couchdb/16@2x.png create mode 100644 public/icons/docs/couchdb/SOURCE diff --git a/lib/docs/filters/couchdb/clean_html.rb b/lib/docs/filters/couchdb/clean_html.rb new file mode 100644 index 0000000000..0616a2097f --- /dev/null +++ b/lib/docs/filters/couchdb/clean_html.rb @@ -0,0 +1,30 @@ +module Docs + class Couchdb + class CleanHtmlFilter < Filter + def call + css('h1').each do |node| + node.content = node.content.gsub(/\d*\. |\P{ASCII}/, '').split('.').last + end + + css('h2', 'h3').each do |node| + node.content = node.content.gsub(/\P{ASCII}/, '').split('.').last + end + + css('pre').each do |node| + node.content = node.content.strip + + classes = node.parent.parent.classes + if classes.include? 'highlight-bash' + node['data-language'] = 'bash' + else + node['data-language'] = 'javascript' + end + + node.parent.parent.replace(node) + end + + doc + end + end + end +end diff --git a/lib/docs/filters/couchdb/entries.rb b/lib/docs/filters/couchdb/entries.rb new file mode 100644 index 0000000000..3d03a9616e --- /dev/null +++ b/lib/docs/filters/couchdb/entries.rb @@ -0,0 +1,53 @@ +module Docs + class Couchdb + class EntriesFilter < Docs::EntriesFilter + SLUG_MAP = { + 'api' => 'API', + 'json' => 'JSON Structures', + 'cluster' => 'Cluster Management', + 'replication' => 'Replication', + 'maintenance' => 'Maintenance', + 'partitioned' => 'Partitioned Databases' + } + + def get_name + at_css('h1').content.gsub(/\P{ASCII}/, '').split('.').last + end + + def get_type + if slug.start_with?('ddocs/views') + 'Views' + elsif slug.start_with?('ddocs') + 'Design Documents' + else + SLUG_MAP[slug[/^(.+?)[-\/]/, 1]] || name + end + end + + def additional_entries + needs_breakup = [ + 'JSON Structure Reference', + 'Design Documents', + 'Partitioned Databases' + ] + + if needs_breakup.include?(name) + entries = [] + + css('section > section').each do |node| + h2 = node.at_css('h2') + + if h2.present? + name = node.at_css('h2').content.split('.').last + entries << [name, node['id']] + end + end + + entries + else + [] + end + end + end + end +end diff --git a/lib/docs/scrapers/couchdb.rb b/lib/docs/scrapers/couchdb.rb new file mode 100644 index 0000000000..a077e195a1 --- /dev/null +++ b/lib/docs/scrapers/couchdb.rb @@ -0,0 +1,39 @@ +module Docs + class Couchdb < UrlScraper + self.name = 'CouchDB' + self.type = 'couchdb' + self.root_path = 'index.html' + + self.links = { + home: 'https://couchdb.apache.org/', + code: 'https://github.com/apache/couchdb' + } + + html_filters.push 'couchdb/clean_html', 'couchdb/entries' + + options[:container] = 'div[itemprop=articleBody]' + options[:only_patterns] = [ + /api\//, + /cluster\//, + /ddocs\//, + /replication\//, + /maintenance\//, + /partitioned-dbs\//, + /json\-structure*/ + ] + options[:rate_limit] = 50 # Docs are subject to Cloudflare limiters. + options[:attribution] = <<-HTML + Copyright © 2025 The Apache Software Foundation — Licensed under the Apache License 2.0 + HTML + + version '3.5' do + self.release = '3.5.1' + self.base_url = "https://docs.couchdb.org/en/#{self.release}" + end + + def get_latest_version(opts) + doc = fetch_doc('https://couchdb.apache.org/', opts) + doc.at_css('.download-pane > h2').content.split(' ').last + end + end +end diff --git a/public/icons/docs/couchdb/16.png b/public/icons/docs/couchdb/16.png new file mode 100644 index 0000000000000000000000000000000000000000..7cae0c8b513e126c3c666f7a4b78668b857d62ce GIT binary patch literal 1476 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Ea{HEjtmSN`?>!lvI6-E$sR$z z3=CCj3=9n|3=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBC{d9b;hE;^%b*2hb1<+l z3NbJPS&Tr)z$nE4G7ZRLuw#^lv)$S=8Cam=en1)oJb)Oa4ni|8U__X*fC;WzU;#6N z4bpb|^nF(##aZAHSl5MQj7C*NCKLdf8il*VCt0c zba4!^5S$w9n=Rrfu=drvxsmo^;ztAxHH0`6E%~Z~!}e5u6gk+JJ;5HfXf?Hcg(n?$gybYC9%Qjo9#|tbA|P`nazKXPr7_zE-`< z_#)Jo9Dqs=u>m$Ftv0 zk9c(OSJmqzN&9rgC+td3#5sh5vNkU+T(f=hmHVgIn)fpBi7aB7o_@SEw^uf4{|WAy z6I2+M>`tv@tE{$(i8~jRwKwgNqEyv|q;uX^okM15GfjA)w=#sCVV~)Lg7GhIsB0)1UGj18YLcRstYEcj-R;jE>19h8I)oH}FJRo`J%e({u@cCu4iKP%gz z6)Wz1Tw@);wOG*LoQdgUp@SPA^Q}%h@K!1P9P^x;k6$tsGcw!NxhOi#{Ft!spmDzI zrPChkdLF#LAad&7!S$xQgO}A-D9C&5k$4*JWu@Owz?)h`y41(xS(Em03$JO7f)t*twxueaZhPP@#xPV$vV zccS!%<8k^u-A?8g!tBr2-g}u*Z!}Z8rexap-vTWMrk{2-ocmw%gxIn_Y=Nzopr0OIBV#Q*>R literal 0 HcmV?d00001 diff --git a/public/icons/docs/couchdb/16@2x.png b/public/icons/docs/couchdb/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..81dc55b2021ada389a20e69ce6d1d4b9cc9af8c9 GIT binary patch literal 2153 zcmZ`)4LFqP8h$6kVMeXLbFvOKB*ZZ@jn2e0=8zeg82?1%XBZlcnKdIrva;DwQtbNM zWMqyuhEj1Me=B5U6Gi#$P?jxO8tZ3cI^W=w)78G;^?uLu-OqDB_w#=5`(0nEv*V$y z2rUEvU@O&*>{s zrJfhf8D+zcVxaJ7EE=mvLZDD6VpMPl!If;gL5H3!^^Ws+90CRt6BC1uF+;PXLNR+S zEG#fs90rFog)&UJv5~w$zG)5ejm3P9#^5vmgeHru)7I9tE=QCVBY3+qxa^2%SzDz2IO3YZ z|A8O-TPJvZj<6a0l;9M_WI(TEO=0hbz-DYyzN}AzGn3DV@FFu=j7YAmt9|A~%x43i z5^dNK>?k)*U=V`@>8w#UL7!%?$$0;n%%;Ewk%*D)+NNDxKO$==bVf)BBId(+BO$&h zYB7PnxCScO+TBa(jVJB6uZKqCfbMp0oTXS~vbdAt( z7mk~+Vw%8SUiGOO6zhS1)UOl}p?*|U6?swAxv7+C_+}*cSC7Hdy zzS|~^JF#ajPs3-{t(+2M$(cD?t&pWK>wm1}^aK8nu~x5%%Y)=|jUH1}FqWsg|7_Pa zZ3!;TZnRCQ)nJ5nep+l&S3NUAE$-qusMic3y0@QORCx^VEnwkRx4n68qayEq3k=nq zYHwD!`h;!CB&Kgx$)1xzg&Y_G6`2>ZQi^zr4AOFAN)3i*L-j)Y&W*mp>Te zx(fFvwqIwG+(D$mE0jdFHsE-4@!#;5kt@4u6vf67ejA2`)g)ft-h zrH;olx%6RI&#&6){`xyab7xgiUEewuUbq<_Qth1IJN>SR%>S#E&M;>hCG<9#eAo1~ zito8(SK~bfbNa#K%~yx4Uu1K~wl<~gBE_5E4mP_XK(y;pJ+`Nu0_P5Y z8NGlriPR4ziOCCi&wwmb?Sztad;BVPaL(RUOT@{=>*}nk89uU_c+`7D=Y7hPuv>;h zhn!K-_mEzhom3N12Q_gdy=3Tmb;WM*Yl21Pe5sRGvnM&6QJboTJ@ajkR#I=iS$;95 ze;{7pClTKd@0QXNe@PjxsGYi6^5niFrF*xk;-z}qqY-9He#MI6b5a3nuD5Ld*hJp< zRYgVDOzJ|1z5DS=lql5c<@>6o$dnG}&d1%WO{;f^{ziC<{2*;e-A$7kAu!qSUP%BI=jMpykr44;J~pd6(NgjuWo51u`J z%@J{K#r0gE6j3>y)=HFz$U|uv0y&cWNQLp+8}G6B6BAOiNk=dbG<}!MW3I#tY(X#m z;lC>u>s`dF%*S<;lqHj}61U~I^J07fyvJ|l$iGxtpTCzV!P>f$4yy&{ Date: Sat, 14 Feb 2026 08:40:43 +0100 Subject: [PATCH 03/20] chore(deps): update dependency ruby to v3.4.8 --- .ruby-version | 2 +- .tool-versions | 2 +- Gemfile | 2 +- Gemfile.lock | 2 +- 4 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.ruby-version b/.ruby-version index 2aa5131992..7921bd0c89 100644 --- a/.ruby-version +++ b/.ruby-version @@ -1 +1 @@ -3.4.7 +3.4.8 diff --git a/.tool-versions b/.tool-versions index 3f03c7a73d..58766197c0 100644 --- a/.tool-versions +++ b/.tool-versions @@ -1 +1 @@ -ruby 3.4.7 +ruby 3.4.8 diff --git a/Gemfile b/Gemfile index 9893bb5774..c2a38a7a71 100644 --- a/Gemfile +++ b/Gemfile @@ -1,5 +1,5 @@ source 'https://rubygems.org' -ruby '3.4.7' +ruby '3.4.8' gem 'activesupport', require: false gem 'html-pipeline' diff --git a/Gemfile.lock b/Gemfile.lock index 0dc3ed1f8e..6d257a9e4e 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -191,7 +191,7 @@ DEPENDENCIES yajl-ruby RUBY VERSION - ruby 3.4.7p58 + ruby 3.4.8p72 BUNDLED WITH 2.4.6 From 3ddb49951bcbe382295fefde60d81670c3f29de9 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 08:47:54 +0100 Subject: [PATCH 04/20] chore(deps): update github actions --- .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 e83dfeb3df..faac4b06cc 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -13,7 +13,7 @@ jobs: steps: - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 - name: Set up Ruby - uses: ruby/setup-ruby@8aeb6ff8030dd539317f8e1769a044873b56ea71 # v1.268.0 + uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1.288.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 f5d1eb1213..b642089ec6 100644 --- a/.github/workflows/schedule-doc-report.yml +++ b/.github/workflows/schedule-doc-report.yml @@ -11,7 +11,7 @@ jobs: steps: - uses: actions/checkout@ee0669bd1cc54295c223e0bb666b733df41de1c5 # v2.7.0 - name: Set up Ruby - uses: ruby/setup-ruby@8aeb6ff8030dd539317f8e1769a044873b56ea71 # v1.268.0 + uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1.288.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 953d3e0256..555b6a0c78 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,7 +11,7 @@ jobs: steps: - uses: actions/checkout@34e114876b0b11c390a56381ad16ebd13914f8d5 # v4.3.1 - name: Set up Ruby - uses: ruby/setup-ruby@8aeb6ff8030dd539317f8e1769a044873b56ea71 # v1.268.0 + uses: ruby/setup-ruby@09a7688d3b55cf0e976497ff046b70949eeaccfd # v1.288.0 with: bundler-cache: true # runs 'bundle install' and caches installed gems automatically - name: Run tests From e110b2c24debbc3d25b8dc6595d85e8899aa08c6 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 08:53:23 +0100 Subject: [PATCH 05/20] phpunit: fix entry anchor --- lib/docs/filters/phpunit/entries.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/filters/phpunit/entries.rb b/lib/docs/filters/phpunit/entries.rb index 9a4f90527c..793b815010 100644 --- a/lib/docs/filters/phpunit/entries.rb +++ b/lib/docs/filters/phpunit/entries.rb @@ -19,7 +19,7 @@ def additional_entries return [] if type == 'Guides' css('h3').map do |node| - [node.content.gsub('The ', ''), node['id']] + [node.content.gsub('The ', ''), node['id'] || node.ancestors('section[id]').first['id']] end end end From 0492b33156b60e1ce8388935ebbb46eb2c1b1592 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 09:05:53 +0100 Subject: [PATCH 06/20] couchdb: retain
 in `/{db}`

---
 lib/docs/filters/couchdb/clean_html.rb | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/lib/docs/filters/couchdb/clean_html.rb b/lib/docs/filters/couchdb/clean_html.rb
index 0616a2097f..7c30aea4fa 100644
--- a/lib/docs/filters/couchdb/clean_html.rb
+++ b/lib/docs/filters/couchdb/clean_html.rb
@@ -2,12 +2,11 @@ module Docs
   class Couchdb
     class CleanHtmlFilter < Filter
       def call
-        css('h1').each do |node|
-          node.content = node.content.gsub(/\d*\. |\P{ASCII}/, '').split('.').last
-        end
+        css('.section-number').remove
+        css('.headerlink').remove
 
-        css('h2', 'h3').each do |node|
-          node.content = node.content.gsub(/\P{ASCII}/, '').split('.').last
+        css('.sig-name').each do |node|
+          node.name = 'code'
         end
 
         css('pre').each do |node|

From 72f8742a110b80845f8057587f59d3af6ca38088 Mon Sep 17 00:00:00 2001
From: Simon Legner 
Date: Sat, 14 Feb 2026 09:07:06 +0100
Subject: [PATCH 07/20] couchdb: add news entry

---
 assets/javascripts/news.json | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json
index 1f821abae4..8db945d488 100644
--- a/assets/javascripts/news.json
+++ b/assets/javascripts/news.json
@@ -1,4 +1,8 @@
 [
+  [
+    "2026-02-14",
+    "New documentation: CouchDB"
+  ],
   [
     "2025-10-19",
     "New documentations: Lit, Graphviz, Bun"

From 6e8f4310d7c42d7a1422c323ed498b37111875a5 Mon Sep 17 00:00:00 2001
From: Simon Legner 
Date: Sat, 14 Feb 2026 10:06:20 +0100
Subject: [PATCH 08/20] Update Axios documentation (1.13.5)

---
 .../stylesheets/components/_environment.scss  |  3 ++
 assets/stylesheets/global/_icons.scss         | 32 +++++++++++++++++++
 lib/docs/filters/axios/clean_html.rb          |  1 +
 lib/docs/scrapers/axios.rb                    |  2 +-
 4 files changed, 37 insertions(+), 1 deletion(-)
 create mode 100644 assets/stylesheets/components/_environment.scss
 create mode 100644 assets/stylesheets/global/_icons.scss

diff --git a/assets/stylesheets/components/_environment.scss b/assets/stylesheets/components/_environment.scss
new file mode 100644
index 0000000000..d994d69378
--- /dev/null
+++ b/assets/stylesheets/components/_environment.scss
@@ -0,0 +1,3 @@
+._hide-in-development {
+  
+}
diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss
new file mode 100644
index 0000000000..4f7476a375
--- /dev/null
+++ b/assets/stylesheets/global/_icons.scss
@@ -0,0 +1,32 @@
+
+
+%svg-icon {
+  display: inline-block;
+  vertical-align: top;
+  width: 1rem;
+  height: 1rem;
+  pointer-events: none;
+  fill: currentColor;
+}
+
+%doc-icon {
+  content: '';
+  display: block;
+  width: 1rem;
+  height: 1rem;
+  background-image: image-url('sprites/docs.png');
+  background-size: 15rem 15rem;
+}
+
+@media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) {
+  %doc-icon { background-image: image-url('sprites/docs@2x.png'); }
+}
+
+html._theme-dark {
+  %darkIconFix {
+    filter: invert(100%) grayscale(100%);
+    -webkit-filter: invert(100%) grayscale(100%);
+  }
+}
+
+._icon-angular:before { background-position: -0rem -0rem; }._icon-angularjs:before { background-position: -1rem -0rem; }._icon-ansible:before { background-position: -2rem -0rem; }._icon-apache_http_server:before { background-position: -3rem -0rem; @extend %darkIconFix !optional; }._icon-apache_pig:before { background-position: -4rem -0rem; }._icon-astro:before { background-position: -5rem -0rem; @extend %darkIconFix !optional; }._icon-async:before { background-position: -6rem -0rem; }._icon-axios:before { background-position: -7rem -0rem; }._icon-babel:before { background-position: -8rem -0rem; }._icon-backbone:before { background-position: -9rem -0rem; @extend %darkIconFix !optional; }._icon-bash:before { background-position: -10rem -0rem; }._icon-bazel:before { background-position: -11rem -0rem; }._icon-bluebird:before { background-position: -12rem -0rem; }._icon-bootstrap:before { background-position: -13rem -0rem; }._icon-bottle:before { background-position: -14rem -0rem; }._icon-bower:before { background-position: -0rem -1rem; }._icon-bun:before { background-position: -1rem -1rem; }._icon-c:before { background-position: -2rem -1rem; }._icon-cpp:before { background-position: -3rem -1rem; }._icon-cakephp:before { background-position: -4rem -1rem; }._icon-chai:before { background-position: -5rem -1rem; }._icon-chef:before { background-position: -6rem -1rem; }._icon-click:before { background-position: -7rem -1rem; @extend %darkIconFix !optional; }._icon-clojure:before { background-position: -8rem -1rem; }._icon-cmake:before { background-position: -9rem -1rem; }._icon-codeception:before { background-position: -10rem -1rem; }._icon-codeceptjs:before { background-position: -11rem -1rem; }._icon-codeigniter:before { background-position: -12rem -1rem; }._icon-coffeescript:before { background-position: -13rem -1rem; @extend %darkIconFix !optional; }._icon-composer:before { background-position: -14rem -1rem; }._icon-cordova:before { background-position: -0rem -2rem; }._icon-crystal:before { background-position: -1rem -2rem; @extend %darkIconFix !optional; }._icon-css:before { background-position: -2rem -2rem; }._icon-cypress:before { background-position: -3rem -2rem; }._icon-d:before { background-position: -4rem -2rem; }._icon-d3:before { background-position: -5rem -2rem; }._icon-dart:before { background-position: -6rem -2rem; }._icon-date_fns:before { background-position: -7rem -2rem; @extend %darkIconFix !optional; }._icon-deno:before { background-position: -8rem -2rem; }._icon-django:before { background-position: -9rem -2rem; }._icon-django_rest_framework:before { background-position: -10rem -2rem; @extend %darkIconFix !optional; }._icon-docker:before { background-position: -11rem -2rem; }._icon-dojo:before { background-position: -12rem -2rem; }._icon-drupal:before { background-position: -13rem -2rem; }._icon-duckdb:before { background-position: -14rem -2rem; }._icon-eigen3:before { background-position: -0rem -3rem; @extend %darkIconFix !optional; }._icon-electron:before { background-position: -1rem -3rem; }._icon-elisp:before { background-position: -2rem -3rem; }._icon-elixir:before { background-position: -3rem -3rem; }._icon-ember:before { background-position: -4rem -3rem; }._icon-enzyme:before { background-position: -0rem -8rem; }._icon-erlang:before { background-position: -5rem -3rem; }._icon-es_toolkit:before { background-position: -6rem -3rem; }._icon-esbuild:before { background-position: -7rem -3rem; }._icon-eslint:before { background-position: -8rem -3rem; }._icon-express:before { background-position: -9rem -3rem; }._icon-falcon:before { background-position: -10rem -3rem; }._icon-fastapi:before { background-position: -11rem -3rem; @extend %darkIconFix !optional; }._icon-fish:before { background-position: -12rem -3rem; }._icon-flask:before { background-position: -13rem -3rem; }._icon-flow:before { background-position: -14rem -3rem; }._icon-fluture:before { background-position: -0rem -4rem; }._icon-gcc:before { background-position: -1rem -4rem; }._icon-git:before { background-position: -2rem -4rem; }._icon-gnu_fortran:before { background-position: -3rem -4rem; }._icon-gnu_make:before { background-position: -4rem -4rem; @extend %darkIconFix !optional; }._icon-gnu_cobol:before { background-position: -5rem -4rem; @extend %darkIconFix !optional; }._icon-gnuplot:before { background-position: -6rem -4rem; }._icon-go:before { background-position: -7rem -4rem; }._icon-godot:before { background-position: -8rem -4rem; }._icon-graphite:before { background-position: -0rem -8rem; }._icon-graphviz:before { background-position: -9rem -4rem; @extend %darkIconFix !optional; }._icon-groovy:before { background-position: -10rem -4rem; }._icon-grunt:before { background-position: -11rem -4rem; }._icon-gtk:before { background-position: -12rem -4rem; }._icon-hammerspoon:before { background-position: -13rem -4rem; }._icon-handlebars:before { background-position: -14rem -4rem; @extend %darkIconFix !optional; }._icon-hapi:before { background-position: -0rem -5rem; }._icon-haproxy:before { background-position: -1rem -5rem; }._icon-haskell:before { background-position: -2rem -5rem; @extend %darkIconFix !optional; }._icon-haxe:before { background-position: -3rem -5rem; }._icon-homebrew:before { background-position: -4rem -5rem; }._icon-html:before { background-position: -5rem -5rem; }._icon-htmx:before { background-position: -6rem -5rem; @extend %darkIconFix !optional; }._icon-http:before { background-position: -7rem -5rem; }._icon-i3:before { background-position: -8rem -5rem; }._icon-immutable:before { background-position: -9rem -5rem; @extend %darkIconFix !optional; }._icon-influxdata:before { background-position: -10rem -5rem; @extend %darkIconFix !optional; }._icon-jasmine:before { background-position: -11rem -5rem; }._icon-javascript:before { background-position: -12rem -5rem; }._icon-jekyll:before { background-position: -13rem -5rem; }._icon-jest:before { background-position: -14rem -5rem; }._icon-jinja:before { background-position: -0rem -6rem; @extend %darkIconFix !optional; }._icon-joi:before { background-position: -1rem -6rem; @extend %darkIconFix !optional; }._icon-jq:before { background-position: -2rem -6rem; @extend %darkIconFix !optional; }._icon-jquery:before { background-position: -3rem -6rem; }._icon-jquerymobile:before { background-position: -4rem -6rem; }._icon-jqueryui:before { background-position: -5rem -6rem; }._icon-jsdoc:before { background-position: -0rem -8rem; }._icon-julia:before { background-position: -6rem -6rem; @extend %darkIconFix !optional; }._icon-knockout:before { background-position: -7rem -6rem; }._icon-koa:before { background-position: -0rem -8rem; }._icon-kotlin:before { background-position: -8rem -6rem; }._icon-kubectl:before { background-position: -9rem -6rem; @extend %darkIconFix !optional; }._icon-kubernetes:before { background-position: -10rem -6rem; }._icon-laravel:before { background-position: -11rem -6rem; }._icon-latex:before { background-position: -12rem -6rem; @extend %darkIconFix !optional; }._icon-leaflet:before { background-position: -13rem -6rem; }._icon-less:before { background-position: -14rem -6rem; }._icon-man:before { background-position: -0rem -7rem; }._icon-liquid:before { background-position: -1rem -7rem; }._icon-lit:before { background-position: -2rem -7rem; }._icon-lodash:before { background-position: -3rem -7rem; }._icon-lua:before { background-position: -4rem -7rem; @extend %darkIconFix !optional; }._icon-love:before { background-position: -5rem -7rem; }._icon-mariadb:before { background-position: -6rem -7rem; }._icon-marionette:before { background-position: -7rem -7rem; }._icon-markdown:before { background-position: -8rem -7rem; @extend %darkIconFix !optional; }._icon-matplotlib:before { background-position: -9rem -7rem; }._icon-meteor:before { background-position: -10rem -7rem; @extend %darkIconFix !optional; }._icon-mocha:before { background-position: -11rem -7rem; }._icon-modernizr:before { background-position: -12rem -7rem; }._icon-moment:before { background-position: -13rem -7rem; @extend %darkIconFix !optional; }._icon-moment_timezone:before { background-position: -14rem -7rem; }._icon-mongoose:before { background-position: -0rem -8rem; }._icon-nextjs:before { background-position: -1rem -8rem; @extend %darkIconFix !optional; }._icon-nginx:before { background-position: -2rem -8rem; }._icon-nginx_lua_module:before { background-position: -0rem -8rem; }._icon-nim:before { background-position: -3rem -8rem; @extend %darkIconFix !optional; }._icon-nix:before { background-position: -4rem -8rem; }._icon-node:before { background-position: -5rem -8rem; }._icon-nokogiri:before { background-position: -6rem -8rem; @extend %darkIconFix !optional; }._icon-npm:before { background-position: -7rem -8rem; }._icon-numpy:before { background-position: -8rem -8rem; }._icon-nushell:before { background-position: -9rem -8rem; }._icon-ocaml:before { background-position: -10rem -8rem; }._icon-octave:before { background-position: -11rem -8rem; }._icon-opengl:before { background-position: -12rem -8rem; }._icon-openjdk:before { background-position: -13rem -8rem; }._icon-openlayers:before { background-position: -14rem -8rem; }._icon-opentsdb:before { background-position: -0rem -9rem; }._icon-padrino:before { background-position: -1rem -9rem; }._icon-pandas:before { background-position: -2rem -9rem; @extend %darkIconFix !optional; }._icon-perl:before { background-position: -3rem -9rem; }._icon-phalcon:before { background-position: -4rem -9rem; }._icon-phaser:before { background-position: -5rem -9rem; }._icon-phoenix:before { background-position: -6rem -9rem; }._icon-php:before { background-position: -7rem -9rem; }._icon-phpunit:before { background-position: -8rem -9rem; }._icon-playwright:before { background-position: -9rem -9rem; }._icon-point_cloud_library:before { background-position: -10rem -9rem; }._icon-pony:before { background-position: -11rem -9rem; }._icon-postgresql:before { background-position: -12rem -9rem; }._icon-prettier:before { background-position: -13rem -9rem; @extend %darkIconFix !optional; }._icon-pug:before { background-position: -14rem -9rem; }._icon-puppeteer:before { background-position: -0rem -10rem; }._icon-pygame:before { background-position: -1rem -10rem; }._icon-python:before { background-position: -2rem -10rem; }._icon-pytorch:before { background-position: -3rem -10rem; }._icon-q:before { background-position: -4rem -10rem; }._icon-qt:before { background-position: -5rem -10rem; }._icon-qunit:before { background-position: -6rem -10rem; }._icon-r:before { background-position: -7rem -10rem; }._icon-ramda:before { background-position: -8rem -10rem; @extend %darkIconFix !optional; }._icon-react:before { background-position: -9rem -10rem; }._icon-react_bootstrap:before { background-position: -10rem -10rem; }._icon-react_native:before { background-position: -11rem -10rem; }._icon-react_router:before { background-position: -12rem -10rem; @extend %darkIconFix !optional; }._icon-reactivex:before { background-position: -13rem -10rem; }._icon-redis:before { background-position: -14rem -10rem; }._icon-redux:before { background-position: -0rem -11rem; @extend %darkIconFix !optional; }._icon-relay:before { background-position: -1rem -11rem; }._icon-requests:before { background-position: -2rem -11rem; }._icon-requirejs:before { background-position: -3rem -11rem; }._icon-rethinkdb:before { background-position: -4rem -11rem; }._icon-ruby:before { background-position: -5rem -11rem; }._icon-minitest:before { background-position: -0rem -8rem; }._icon-rails:before { background-position: -6rem -11rem; }._icon-rust:before { background-position: -7rem -11rem; @extend %darkIconFix !optional; }._icon-rxjs:before { background-position: -8rem -11rem; }._icon-saltstack:before { background-position: -9rem -11rem; @extend %darkIconFix !optional; }._icon-sanctuary:before { background-position: -10rem -11rem; }._icon-sanctuary_def:before { background-position: -11rem -11rem; }._icon-sanctuary_type_classes:before { background-position: -12rem -11rem; }._icon-sass:before { background-position: -13rem -11rem; }._icon-scala:before { background-position: -14rem -11rem; }._icon-scikit_image:before { background-position: -0rem -12rem; }._icon-scikit_learn:before { background-position: -1rem -12rem; }._icon-sequelize:before { background-position: -2rem -12rem; }._icon-sinon:before { background-position: -3rem -12rem; }._icon-socketio:before { background-position: -4rem -12rem; }._icon-spring_boot:before { background-position: -5rem -12rem; }._icon-sqlite:before { background-position: -6rem -12rem; }._icon-statsmodels:before { background-position: -7rem -12rem; }._icon-browser_support_tables:before { background-position: -0rem -8rem; }._icon-svelte:before { background-position: -8rem -12rem; }._icon-svg:before { background-position: -9rem -12rem; }._icon-symfony:before { background-position: -10rem -12rem; }._icon-tailwindcss:before { background-position: -11rem -12rem; }._icon-tcl_tk:before { background-position: -12rem -12rem; }._icon-tcllib:before { background-position: -13rem -12rem; }._icon-tensorflow:before { background-position: -14rem -12rem; }._icon-tensorflow_cpp:before { background-position: -0rem -13rem; }._icon-terraform:before { background-position: -1rem -13rem; @extend %darkIconFix !optional; }._icon-threejs:before { background-position: -2rem -13rem; @extend %darkIconFix !optional; }._icon-trio:before { background-position: -3rem -13rem; }._icon-twig:before { background-position: -4rem -13rem; }._icon-typescript:before { background-position: -5rem -13rem; }._icon-underscore:before { background-position: -6rem -13rem; @extend %darkIconFix !optional; }._icon-vagrant:before { background-position: -7rem -13rem; }._icon-varnish:before { background-position: -8rem -13rem; }._icon-vertx:before { background-position: -9rem -13rem; }._icon-vite:before { background-position: -10rem -13rem; }._icon-vitest:before { background-position: -11rem -13rem; }._icon-vue:before { background-position: -12rem -13rem; }._icon-vue_router:before { background-position: -13rem -13rem; }._icon-vueuse:before { background-position: -14rem -13rem; }._icon-vuex:before { background-position: -0rem -14rem; }._icon-vulkan:before { background-position: -1rem -14rem; @extend %darkIconFix !optional; }._icon-wagtail:before { background-position: -2rem -14rem; @extend %darkIconFix !optional; }._icon-dom:before { background-position: -3rem -14rem; }._icon-web_extensions:before { background-position: -0rem -8rem; }._icon-webpack:before { background-position: -4rem -14rem; }._icon-werkzeug:before { background-position: -5rem -14rem; }._icon-wordpress:before { background-position: -6rem -14rem; @extend %darkIconFix !optional; }._icon-xslt_xpath:before { background-position: -0rem -8rem; }._icon-yarn:before { background-position: -7rem -14rem; }._icon-yii:before { background-position: -8rem -14rem; }._icon-zig:before { background-position: -9rem -14rem; }._icon-zsh:before { background-position: -10rem -14rem; }
diff --git a/lib/docs/filters/axios/clean_html.rb b/lib/docs/filters/axios/clean_html.rb
index ab71d1ad4c..e772344e3a 100644
--- a/lib/docs/filters/axios/clean_html.rb
+++ b/lib/docs/filters/axios/clean_html.rb
@@ -7,6 +7,7 @@ def call
         end
         @doc = at_css('main > .body')
         css('.links').remove
+        css('.sponsors_container').remove
         css('pre').each do |node|
           node.content = node.content
           node['data-language'] = node['class'][/lang-(\w+)/, 1]
diff --git a/lib/docs/scrapers/axios.rb b/lib/docs/scrapers/axios.rb
index c29b41ba6c..84869f850b 100644
--- a/lib/docs/scrapers/axios.rb
+++ b/lib/docs/scrapers/axios.rb
@@ -5,7 +5,7 @@ class Axios < UrlScraper
       home: 'hthttps://axios-http.com/',
       code: 'https://github.com/axios/axios'
     }
-    self.release = '1.9.0'
+    self.release = '1.13.5'
     self.base_url = "https://axios-http.com/docs/"
     self.initial_paths = %w(index intro)
     options[:skip] = %w(sponsor)

From 04d8d05fc43234828e7b81749484ef80f3d4108f Mon Sep 17 00:00:00 2001
From: Simon Legner 
Date: Sat, 14 Feb 2026 10:09:15 +0100
Subject: [PATCH 09/20] It's 2026

---
 COPYRIGHT                                        | 2 +-
 README.md                                        | 2 +-
 assets/javascripts/lib/license.js                | 2 +-
 assets/javascripts/templates/pages/about_tmpl.js | 2 +-
 assets/stylesheets/application.css.scss          | 2 +-
 5 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/COPYRIGHT b/COPYRIGHT
index 374054bdbf..ad89869379 100644
--- a/COPYRIGHT
+++ b/COPYRIGHT
@@ -1,4 +1,4 @@
-Copyright 2013-2025 Thibaut Courouble and other contributors
+Copyright 2013-2026 Thibaut Courouble and other contributors
 
   This Source Code Form is subject to the terms of the Mozilla Public
   License, v. 2.0. If a copy of the MPL was not distributed with this
diff --git a/README.md b/README.md
index fcdb677d84..cf6c735a76 100644
--- a/README.md
+++ b/README.md
@@ -215,7 +215,7 @@ Made something cool? Feel free to open a PR to add a new row to this table! You
 
 ## Copyright / License
 
-Copyright 2013–2025 Thibaut Courouble and [other contributors](https://github.com/freeCodeCamp/devdocs/graphs/contributors)
+Copyright 2013–2026 Thibaut Courouble and [other contributors](https://github.com/freeCodeCamp/devdocs/graphs/contributors)
 
 This software is licensed under the terms of the Mozilla Public License v2.0. See the [COPYRIGHT](./COPYRIGHT) and [LICENSE](./LICENSE) files.
 
diff --git a/assets/javascripts/lib/license.js b/assets/javascripts/lib/license.js
index 15b42c98f4..e4c3c0103a 100644
--- a/assets/javascripts/lib/license.js
+++ b/assets/javascripts/lib/license.js
@@ -1,5 +1,5 @@
 /*
- * Copyright 2013-2025 Thibaut Courouble and other contributors
+ * Copyright 2013-2026 Thibaut Courouble and other contributors
  *
  * This source code is licensed under the terms of the Mozilla
  * Public License, v. 2.0, a copy of which may be obtained at:
diff --git a/assets/javascripts/templates/pages/about_tmpl.js b/assets/javascripts/templates/pages/about_tmpl.js
index e3142da5fc..d8780005e6 100644
--- a/assets/javascripts/templates/pages/about_tmpl.js
+++ b/assets/javascripts/templates/pages/about_tmpl.js
@@ -32,7 +32,7 @@ app.templates.aboutPage = function () {
 
 
 

- Copyright 2013–2025 Thibaut Courouble and other contributors
+ Copyright 2013–2026 Thibaut Courouble and other contributors
This software is licensed under the terms of the Mozilla Public License v2.0.
You may obtain a copy of the source code at github.com/freeCodeCamp/devdocs.
For more information, see the COPYRIGHT diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 12247d4405..289867076a 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -3,7 +3,7 @@ //= depend_on sprites/docs.json /*! - * Copyright 2013-2025 Thibaut Courouble and other contributors + * Copyright 2013-2026 Thibaut Courouble and other contributors * * This source code is licensed under the terms of the Mozilla * Public License, v. 2.0, a copy of which may be obtained at: From 9be3847a06ac1e05f017df4c4e5e3745ada8b477 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 10:20:36 +0100 Subject: [PATCH 10/20] Update Vitest documentation (4.0.17) --- lib/docs/filters/vite/clean_html.rb | 2 ++ lib/docs/scrapers/vitest.rb | 14 +++++++++----- public/icons/docs/vitest/16.png | Bin 893 -> 882 bytes public/icons/docs/vitest/16@2x.png | Bin 1668 -> 1320 bytes public/icons/docs/vitest/SOURCE | 1 + 5 files changed, 12 insertions(+), 5 deletions(-) diff --git a/lib/docs/filters/vite/clean_html.rb b/lib/docs/filters/vite/clean_html.rb index c19745ca3e..5b3efa9431 100644 --- a/lib/docs/filters/vite/clean_html.rb +++ b/lib/docs/filters/vite/clean_html.rb @@ -24,6 +24,8 @@ def call node.remove end + css('.vp-code-group > .tabs').remove + css('.lang').remove css('.line-numbers-wrapper').remove css('pre').each do |node| diff --git a/lib/docs/scrapers/vitest.rb b/lib/docs/scrapers/vitest.rb index ab7a3d1bb3..379f48c1c7 100644 --- a/lib/docs/scrapers/vitest.rb +++ b/lib/docs/scrapers/vitest.rb @@ -13,19 +13,23 @@ class Vitest < UrlScraper options[:skip] = %w(blog) options[:attribution] = <<-HTML - © 2021-Present Anthony Fu
- © 2021-Present Matias Capeletto
+ © 2021-Present VoidZero Inc. and Vitest contributors
Licensed under the MIT License. HTML self.initial_paths = %w(guide/) html_filters.push 'vitest/entries', 'vite/clean_html' - + version do - self.release = '3.0.8' + self.release = '4.0.17' self.base_url = 'https://vitest.dev/' end - + + version '3' do + self.release = '3.2.4' + self.base_url = 'https://vitest.dev/' + end + version '2' do self.release = '2.1.9' self.base_url = 'https://v2.vitest.dev/' diff --git a/public/icons/docs/vitest/16.png b/public/icons/docs/vitest/16.png index fd44a6bb81f1521ca4d996e25d1b4df9fcf0c804..7fbe9bee3877356f4dc6fbefdfb3965cf29041e9 100644 GIT binary patch literal 882 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbL!Lb6AYF9SoB8UsT^3j@P1pisjL z28L1t28LG&3=CE?7#PG0=IjczVPIf14e$wZ1uFRe|NonRU){d0wfwR?@#mi0-0ABp|9}4d z|KIeVLE(Fw(vN!OA2ome{{@-}1PHaRX{TTumJpSb)+pWzaZ|9i&%M1AJ4i|?oBtA`(|JAPbw+c;M{%eQer%4b&pzm}( z^~rqdP}@T*zrPcu+_yV>ruz<^6E3GxF4I&L5)$EU6$sl?pj!`$ujFixK)z z0YDoVlf2zs82>Zr-UD(t3p^r=85o#>QOo>-acgx@Hc*hg#M9T6{S^}*rx54+x32Gj zLQ_0l977~7CnqQ{8#FNp8*^(*TPrIoM>vG_HBa`Aa}4y9R9diT)v>dS*DYMRbnRkp zu?v^Y4NQ#8JWZaO8nbgpL_|g2zM*#W=4VTbCe}G6b7Ch2$K3rPdDr#;)4X4C_v}{g zt7Gc<$C%J~U_rvc2^S0$kA3Ly=-3)~@sN_?#zj4aA32i*+B=QCJiI)Ojf_s6nDE$? zK~!2~cQ8jR8_<2KC9V-ADTyViR>?)FK#IZ0z{pJ3z)087B*ehd%Fx`(#7x`3z{o zc5!lIL8@MUQTpt6Hc~)EEa{HEjtmSN`?>!lvI6-E$sR$z3=CCj3=9n|3=F@3LJcn% z7)lKo7+xhXFj&oCU=S~uvn$XBD8XLh>Fdh=jEhsqOslL!Yb8*Kv%n*=80ZdZ5M~VA zC2)g*fiWz=C&U#f`RBOy|NRa{Go@M=$Shl}STtL@Zl3htKwX!2eOmFa zFstWXM#3U{{(fp^WEEyA`uD(?QI%gY&zw;+VcE~vyCLk}m5i>x7jwK_D#m6NdRc9m zFk8@xTq~crcU)6H=QG7G7v`P*DN*EG&rB9p&fBt}C}&Lac6TXU&mQv#$hqL@;us=v zIXQuW*-aq9fvKm*Xj6|yjb$aPTZ-M{MU#x2#D$d?cV#us+Qk;pFmvY2*1+J^3ml@| z!~3W9_B!4_Fk$ZD6FU|xIB;aj4`+>26M`!2L fr`?^N%{LfUA5*^fws2=UC}cfd{an^LB{Ts5>>q1; diff --git a/public/icons/docs/vitest/16@2x.png b/public/icons/docs/vitest/16@2x.png index 051339ca942bd2dbe81b840d45f9b19fb3f661c0..6b72ed130dac16a2bc62f89fe333dfcd3d316e41 100644 GIT binary patch delta 1268 zcmZqSUBNX$l7o$bfuXpn>dVA1{d%?}Z+91l{~)+v@AAn&8O{Qa$YKTt<`*E$xV1Vc z8z{(L;_2(k{)&l@Q%Lo$sU{Cl?z5+hV@Sl|w^O}yri6+duYX?GKlA085HD{<)~=~r z8rXVvIV|Gt;pFBiT-^2}A(1KY@u^lp(-}LA426=EUU2z#IEt7G)*tau@=y>|HC)6P zbnsSEw{vuwmCy5!w(klLF4!WwMD1Ab-~7CNzwcK6+g}{do@TOG^6!1sUaQd3L)(uk zak!mn`FC__xkT!m)HBJAlb2qe+so)>MeQA@jTv}5w4 z9ZNTVI?@!l@qMaoScp%Cuuw<9309+T78jWIFuq}lV|#S6uI=^fhgEF5+bn}C9HVat z+&y`0$L!pPb#rc9xc`g8@kNft@m*CGtG4ysm}r^$GMiiSZ<>qWT(&+&_eS@|dG&6$ zt8E*^9xy&ge{jOPta9_wb$gb0*UVR%?R~s+665A#`Fm0k-%mPq#PDSE9AoCm&X1qE z@2%{|OHu)h-x%K>_}kmFj{O3s4)Z?dqRk#9oCnY4J>RUWskv>f*W6`?!_ONYR6C;A z$GKC7_1Kd=eA)lkS^mOH#E^~ixg9?j^V=wh5*7kIsIKgpD%-=2R{$G`d#h>TcZ?|UWxtg5TaI1vj7K5OKu1oHm zwd+C_Zxr3AR&=Md@^anmLS@6eJI{`%&eE7L^?q~DwC(3tefxiDdc@hl@1+;+Ug2$T z)H^W$9alyDS2HPIs~?*C!+JVD>{Xf5^c7Qycm z=axG2{k~4* z3qo>=8FgMZhdyVcvVGNwn{QvC@dwKS$A^lIHj}$9-M2m3-uU*w9+7`B ztXwaj7i{gxy?$frLFPQ&8ZBuV%gZv)D%I+C1@_!-yf1QBYr^@=L@&c#ftG&t44w;k zTEf-!HQqXW{BV}F#<=Oxh1qv*Wz_AeTdIHjhJ}ifYG*x*LE#1ynSblg&%fA{_GSJn zewD+kcH0Iq{{WT@swJ)wB`Jv|saDBFsX&Us$iT=<*T6{E&?Lmb(#p`>%EV0Dz`)AD zKuXx-8j6P8{FKDZv`XAMvi&|}0d;7=ttiRNO)V}-%q>9IV_{`%4zVTiQO8uE9tKZW KKbLh*2~7Z()iT`x literal 1668 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE3?yBabR7dyk|nMYCBgY=CFO}lsSM@i<$9TU z*~Q6;1*v-ZMd`EO*+>Buv7|ftIx;Y9?C1WI$Oa@a2CEqi4B`cIb_Lo1CD=C6}Jp92))EbxddW?&GI24Tj) zT>>{47?@TD_=LCuCI1}P{(D0A&vBi<$94an(EfK!@BeAtKgYEH9@qJQQsXyJ_L$b6 z6WV`{Y5hK<{`;i%@8ep(k82jqk}8@hRWMVsaF*o%#SFiXX%^3xE}1P;G+R1rj#%Y% znd0ffg|nmzW=Z`$qV@Nbbnt(`7TdCF-Zi z-O(wBPtbU<%R=-63TABQ5l69+PGMC7d&XvlaDw#h=rf{}Y#v);0$Pk5q zfkUK9qLo2{7Z}2DlYs#XMKeJm4?%EQGzLO3P!|rxFw-P}kpedjB3L+G5@H~bTQ~#C z28zIyf!M$V07idK=s*=iM5cq?2A2hU8LAlQ5~w)XRWLQcbOIAcFbd{KgKPo1f0oq$ z|Nn0@8_zD@-l;}!j%sBky=OYu_tA9H!8_RfXobi%^{Y|de=Wk=3tsHLiEjp$lzAEmxmeV_}o;jL~w+gnPbVsSb-K|$2O$jHd>@zj3*goBG4rcTr~)SM}}+{T(c z*()o`Dv!0NM{?%(&6^6f9;BQ(xwqb4pM5%$Uf!`kO~1c$S4tE{1%%Z6|MyqO&EUY4 z=c#A(SWn&8*IvJ3&8oB~&eNZZC#+eym!GlpD{oKJ3^5b4yX}ov(%ckR?AWlOqhp1H zhoiT4%)Yg;a{`@$yreiJTCA;hryOa}lK8y)Ay-wEq~uc7rN4ivdl+~4%rU9#(g|RF zd?oX8`k6Vbljhs9Yv}9Rmf!osTEwHoEv_47;~Eyn_`>+8s`qrpr_kl{`{gm)};o+XJS?+yKUuHWVIu&#I*NuI z+jjBZuQxl}`5Qm+rELf(yCPy)|4=cYb@FDR#ocNi{~oDkvWL6ayx7SZzmF-T@M`Q~ zW}W)CySkQZ7x`3HI*0z?aDLKSdobC+GNN#_BN3`#NBL5cG2$fIs3PMbn{RD)irKOiQ bDzPveo6eYU@re9ZP;T&a^>bP0l+XkKQ$@Q3 diff --git a/public/icons/docs/vitest/SOURCE b/public/icons/docs/vitest/SOURCE index 911a2163a4..0cf0aaabab 100644 --- a/public/icons/docs/vitest/SOURCE +++ b/public/icons/docs/vitest/SOURCE @@ -1 +1,2 @@ https://vitest.dev/logo.svg +https://vitest.dev/favicon.ico From 43d0524a0e08628b53ba8f653783cf92f19ee1c6 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 10:22:37 +0100 Subject: [PATCH 11/20] Update Vite documentation (7.3.1) --- lib/docs/scrapers/vite.rb | 4 ++-- public/icons/docs/vite/16.png | Bin 703 -> 737 bytes public/icons/docs/vite/16@2x.png | Bin 1376 -> 999 bytes public/icons/docs/vite/SOURCE | 2 +- 4 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/docs/scrapers/vite.rb b/lib/docs/scrapers/vite.rb index 1a55691376..f6619d3a57 100644 --- a/lib/docs/scrapers/vite.rb +++ b/lib/docs/scrapers/vite.rb @@ -11,7 +11,7 @@ class Vite < UrlScraper options[:root_title] = 'Vite' options[:attribution] = <<-HTML - © 2019–present, Yuxi (Evan) You and Vite contributors
+ © 2019-present, VoidZero Inc. and Vite contributors
Licensed under the MIT License. HTML @@ -22,7 +22,7 @@ class Vite < UrlScraper html_filters.push 'vite/entries', 'vite/clean_html' version do - self.release = '7.1.2' + self.release = '7.3.1' self.base_url = 'https://vite.dev/' end diff --git a/public/icons/docs/vite/16.png b/public/icons/docs/vite/16.png index 90ffa786580230c8893595dd7e2dcff8e5ce8521..a081c7b8c16b9e9a48885aae93e66d1e04762e5f 100644 GIT binary patch literal 737 zcmZ{fe=O8-7{@<~{8%Sbo24nU)ikkhSHgA4kGr|^`^RZoD~>zd8fTnc>L2s-{FwZR z5>2FKg-fMzXQ|jwE)ya~^5e9tjzJO!b_ehdp+3qlBk z&*OyCYDLE$vz>IFZ0WY6#XgP~9z@91BZOq;5VApAnO_J=rwGx-5W>1eh)qhZDvV7x zK8FShxB&F?sJVz-59FOjE(^VPVOYoW0@R7HyojMT6nZ0%h0*}b3}9A+$_OaVqOTG6 zlTqZ0Vh$9ZC=Z5q9ELwwU&F?4ERJD*7z-olzKMJ`^3UM*1vE%dpMaOu$Z z!l+N$B%)1I89#_?s@q{{ZsQhVXf~p)IzGo+U^X6EGH#vawVSKdHz;Ck1p5xeN++%< z0q=MEIYq`BkIn&OFMD2-<56QG{OIfNV6itWa#h>rKF=vneBJoIxNJbDN`CC+5>06w z{Hw&3PLckSmgFf$^@CZ(JPG8-K$27>iO<*`*ky9eng$&IZIDTl#Az~NQp)yB xm=!}qGyAug2x+`bE=&~@xm@ldNxqyGCrlB$NK+GP^lV#ti14|=oK~NhtiOOSU4#Gt delta 657 zcmV;C0&e}`1-}K57atG^1^@s6AM^iV00009a7bBm0001!0001!0W15fkdv?iCw~G= zNkl1v7f5&l@3Y9X1!iri%ppcuOLUCcWsvu|?(H{&1nnG67Mk>mR zlp~fNTg3Pr{I$N24^PHXsu-p6Mo?VMXU?Bc zG4y|juNLdc2Y=0MQXSR#8 z$yq_5D~exod}kGv%bsDoV7Vd|y(1DDz}i7>TMlu{1q1{*x z!@kWe01Y4(6Mlh1qwRw2LL`?!IyT8<$vn~9_+iYHNyrt=hi-~2fCzp`%LVnw^4Jy1 zdFYc${j^vFpQy1i|RDoN<&2~@_g~Q5d$q4e}=U+EE;et6=yw> zXH6Y&~bt)_`BF_gSz394uqHv7#Am0z&HJBNNIv6WUn0bYtPvOlZv{6tW z#FG}(X5sBD46pIySD1c@&Y$q|4{&THPw0y?jvw^rkz8|D0Nq%|2Sg+iVtaR8jC=Ab z2_0G}0tI}FiFa%*w`@FaUOGoJ9)UdXaMzyG>WCw4l$~GYBL^AJ%|Y27#Ak30d?^fl zcaS4&Kh0DE6+4Qr-~M*+-r&pwjw8u@JaTDh+i%u|{d}9`Zukyqw z+a#m3yplQl{`^9i7j>Um-fOooEK0u=u zVL3m2mh{4G>QAA#E^Ai=Z;`qeP*ARwlzXC+b0>Le=gq7!(?v}O8TO_9a{Y& z?9F5KQ<1u1-({11N>w^cXO_)x#(k1Hnvl1NzUxN{{!xWQq=@E<6QXG&Y>K_tjbgif zx+k3S;Ij8{Db6m6;!;$QQC;#cKqi++V^aPf*mvEPek$Vn&jy857M-XN$>RTmasPWs zi7~~FW*pawpF+mI@rKUA1iAF_%7(~Lin((9jhw==V2X1P7K<*vOes4tm& ze{*}Y@B6;D@9oSHE|cljCxR%j%78>Aw5Wu(E1<kAPpbR5FJ8$+gT~l|{U@@)RzSDWZ ze9Y$xC%J>hEjQDNjH{#3D_}Vl82~TLe~l+>O&4O-b9yXSC?}2aCFf9Ug$gl=1m0!} zFyr1Gx`PxNErmud(a1C!3J3?^nMHqt*(0DRJz&3Uu|)Cqa9B?v2j$Fh$}L6ZOyN4N z^e7ig0zE;hbED1rL2qLc(|M8vPcHDjC$F8ZDB5{^;e=18W$*OZq*q#$Gn$69B)LXvT8D7G|(>rFP? zLuV|B)#=oGK0nJ01keN0!ksrAnhViWl2Xs5Ub~={j$TB-Sg*!vOX39gr9Cx7l0X{3 zOoWtep{eO%|6`2?z*hJ%`w-YThhkh{X&?0hspl6$XI2^T{DH#{BGEO*eE`mxFx)r_X z&dCT3>$s>3lrs!pY}|`@e|M=@`H|K#x;`8xXYdSo%o3>P5{dKbwX34Hw-hQ~=&C9S zv?0XLrp-XBtG+a)o@`o@4tziYD{JUCE}b_GxW5~`q8wZJOWHzo1jC`oqEzQ_8=I@P z(9TRaY{0$RVavJ1SVb7*ubY8mEe|0cy~@4L6?%dR_R3)K*CC!d5|13ZRw;Git`;Y zYQ%nM3AEN#r${kL%Vut)-pfkhvG=KgOI>UA>xPn%`*5<=sGsPmKU~02n{8Z{%c*!6 zSPd8G_Og)2I*?z`h9mVgzFm`^y?qzSe}zER20Ft9z3zb(e-}05k0VuxoxRpmziZ}C zv^AHQIsGp%_W5ib3UumbrZC>!BOLRlB-5S_7j(n4daBDM9?O-$oQ)J?ikA6Oo;+;o z^|^u%iGZ=l4t&fd_NO)*2XQF&(okXzi9i_SaEF!{0x&x<={N3(P}_e-z}So*>3a=q t0^v_4*h>5#A@=nI9sFjhF1eH#{{T7ZD^beri8cTL002ovPDHLkV1j^UgfajC diff --git a/public/icons/docs/vite/SOURCE b/public/icons/docs/vite/SOURCE index f1fe46eefe..f7b304f1f2 100644 --- a/public/icons/docs/vite/SOURCE +++ b/public/icons/docs/vite/SOURCE @@ -1 +1 @@ -https://vitejs.dev/logo.svg +https://vite.dev/logo-without-border.svg From 54b0fc4edbc894b41a9f4dfc34a5471f2a2b3d22 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 10:48:53 +0100 Subject: [PATCH 12/20] Update Vue Router documentation (5.0.2) --- lib/docs/filters/vue_router/clean_html.rb | 15 +++++++++++++-- lib/docs/filters/vue_router/entries.rb | 18 ++++++++++++------ lib/docs/scrapers/vue_router.rb | 7 ++++++- 3 files changed, 31 insertions(+), 9 deletions(-) diff --git a/lib/docs/filters/vue_router/clean_html.rb b/lib/docs/filters/vue_router/clean_html.rb index d7fa396863..64e55c294a 100644 --- a/lib/docs/filters/vue_router/clean_html.rb +++ b/lib/docs/filters/vue_router/clean_html.rb @@ -2,10 +2,15 @@ module Docs class VueRouter class CleanHtmlFilter < Filter def call - @doc = at_css('main') + @doc = at_css('main > div:only-child > div:only-child', 'main', '.main') + css('p + h1').each do |node| + # breadcrumbs + node.previous_element.remove + end # Remove unneeded elements - css('.bit-sponsor, .header-anchor').remove + css('.bit-sponsor, .header-anchor', '.rulekit', 'div[hidden]', '.sponsors_outer').remove + css('.vp-code-group > .tabs').remove css('.custom-block').each do |node| node.name = 'blockquote' @@ -14,6 +19,12 @@ def call title.name = 'strong' unless title.nil? end + css('span.lang').remove + css('pre > code:first-child').each do |node| + node.parent['data-language'] = 'js' + node.parent.content = node.css('.line').map(&:content).join("\n") + end + # Remove data-v-* attributes css('*').each do |node| node.attributes.each_key do |attribute| diff --git a/lib/docs/filters/vue_router/entries.rb b/lib/docs/filters/vue_router/entries.rb index 11c5e8a068..1f1ae8f40e 100644 --- a/lib/docs/filters/vue_router/entries.rb +++ b/lib/docs/filters/vue_router/entries.rb @@ -3,7 +3,8 @@ class VueRouter class EntriesFilter < Docs::EntriesFilter def get_name name = at_css('h1').content - name.sub! %r{#\s*}, '' + name.sub! %r{#\s*|\s*\u200B\s*}, '' + name.strip! name end @@ -18,6 +19,7 @@ def include_default_entry? end def additional_entries + return [] return [] unless subpath.start_with?('api') entries = [ @@ -29,14 +31,18 @@ def additional_entries css('h3').each do |node| entry_name = node.content.strip + entry_name.sub! %r{#\s*|\s*\u200B\s*}, '' # Get the previous h2 title title = node - title = title.previous_element until title.name == 'h2' - title = title.content.strip - title.sub! %r{#\s*}, '' - - entry_name.sub! %r{#\s*}, '' + begin + title = title.previous_element until title.name == 'h2' + title = title.content.strip + title.sub! %r{#\s*}, '' + rescue + title = '' + entry_name = "#{name}.#{entry_name}" + end case title when 'Router Construction Options' diff --git a/lib/docs/scrapers/vue_router.rb b/lib/docs/scrapers/vue_router.rb index 3456fd59db..7e4ee6ed1e 100644 --- a/lib/docs/scrapers/vue_router.rb +++ b/lib/docs/scrapers/vue_router.rb @@ -16,10 +16,15 @@ class VueRouter < UrlScraper ] options[:attribution] = <<-HTML - © 2013–present Evan You
+ © 2014-present Evan You, Eduardo San Martin Morote
Licensed under the MIT License. HTML + version '5' do + self.release = '5.0.2' + self.base_url = 'https://router.vuejs.org/' + end + version '4' do self.release = '4.0.12' self.base_url = 'https://next.router.vuejs.org/' From c730dac6a23c47d82f3d63e16e7b8d458c424a9d Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 10:50:52 +0100 Subject: [PATCH 13/20] Update Vue documentation (3.5.28) --- lib/docs/scrapers/vue.rb | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/docs/scrapers/vue.rb b/lib/docs/scrapers/vue.rb index 158a546b19..7e9171b578 100644 --- a/lib/docs/scrapers/vue.rb +++ b/lib/docs/scrapers/vue.rb @@ -14,12 +14,12 @@ class Vue < UrlScraper options[:replace_paths] = { 'guide/' => 'guide/index.html' } options[:attribution] = <<-HTML - © 2013–present Yuxi Evan You
+ © 2018-present, Yuxi (Evan) You and Vue contributors
Licensed under the MIT License. HTML version '3' do - self.release = '3.5.18' + self.release = '3.5.28' self.base_url = 'https://vuejs.org/' self.initial_paths = %w(guide/introduction.html) html_filters.push 'vue/entries_v3', 'vue/clean_html' From 7009c11050c57b7490dfb5002616601f82a114af Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 11:00:38 +0100 Subject: [PATCH 14/20] Update OCaml documentation (5.4) --- lib/docs/filters/ocaml/clean_html.rb | 1 + lib/docs/scrapers/ocaml.rb | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/lib/docs/filters/ocaml/clean_html.rb b/lib/docs/filters/ocaml/clean_html.rb index 83bb86a0b1..b333094bc0 100644 --- a/lib/docs/filters/ocaml/clean_html.rb +++ b/lib/docs/filters/ocaml/clean_html.rb @@ -2,6 +2,7 @@ module Docs class Ocaml class CleanHtmlFilter < Filter def call + @doc = at_css('.api') || doc css('#sidebar').remove diff --git a/lib/docs/scrapers/ocaml.rb b/lib/docs/scrapers/ocaml.rb index 97a25a9413..10ba166c23 100644 --- a/lib/docs/scrapers/ocaml.rb +++ b/lib/docs/scrapers/ocaml.rb @@ -21,11 +21,11 @@ class Ocaml < UrlScraper ] options[:attribution] = <<-HTML - © 1995-2024 INRIA. + © 1995-2025 INRIA. HTML version '' do - self.release = '5.3' + self.release = '5.4' self.base_url = "https://ocaml.org/manual/#{self.release}/" end From 691cb0c04b4498bf1fcd42c55ab8ccccb128212b Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 11:00:46 +0100 Subject: [PATCH 15/20] Update PostgreSQL documentation (18.2) --- lib/docs/scrapers/postgresql.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/docs/scrapers/postgresql.rb b/lib/docs/scrapers/postgresql.rb index 38ac56a06e..760ac0dc80 100644 --- a/lib/docs/scrapers/postgresql.rb +++ b/lib/docs/scrapers/postgresql.rb @@ -52,12 +52,12 @@ class Postgresql < UrlScraper /\Aunsupported-features/ ] options[:attribution] = <<-HTML - © 1996–2025 The PostgreSQL Global Development Group
+ © 1996–2026 The PostgreSQL Global Development Group
Licensed under the PostgreSQL License. HTML version '18' do - self.release = '18.0' + self.release = '18.2' self.base_url = "https://www.postgresql.org/docs/#{version}/" end @@ -70,7 +70,7 @@ class Postgresql < UrlScraper self.release = '16.1' self.base_url = "https://www.postgresql.org/docs/#{version}/" end - + version '15' do self.release = '15.4' self.base_url = "https://www.postgresql.org/docs/#{version}/" From a83eb55460964d7946706f22f8c86bd7abfc9e00 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 11:07:45 +0100 Subject: [PATCH 16/20] Update Fish documentation (4.4.0) --- lib/docs/scrapers/fish.rb | 28 ++++++++++++++++++++++++++-- 1 file changed, 26 insertions(+), 2 deletions(-) diff --git a/lib/docs/scrapers/fish.rb b/lib/docs/scrapers/fish.rb index d74ed975ab..0895deb8c0 100644 --- a/lib/docs/scrapers/fish.rb +++ b/lib/docs/scrapers/fish.rb @@ -12,12 +12,36 @@ class Fish < UrlScraper # https://fishshell.com/docs/current/license.html options[:attribution] = <<-HTML - © 2005-2009 Axel Liljencrantz, 2009-2025 fish-shell contributors
+ © 2005-2009 Axel Liljencrantz, 2009-2026 fish-shell contributors
Licensed under the GNU General Public License, version 2. HTML + version '4.4' do + self.release = '4.4.0' + self.base_url = "https://fishshell.com/docs/#{version}/" + + options[:skip].concat %w(genindex.html relnotes.html) + html_filters.push 'sphinx/clean_html', 'fish/clean_html_sphinx', 'fish/entries_sphinx' + end + + version '4.3' do + self.release = '4.3.3' + self.base_url = "https://fishshell.com/docs/#{version}/" + + options[:skip].concat %w(genindex.html relnotes.html) + html_filters.push 'sphinx/clean_html', 'fish/clean_html_sphinx', 'fish/entries_sphinx' + end + + version '4.2' do + self.release = '4.2.1' + self.base_url = "https://fishshell.com/docs/#{version}/" + + options[:skip].concat %w(genindex.html relnotes.html) + html_filters.push 'sphinx/clean_html', 'fish/clean_html_sphinx', 'fish/entries_sphinx' + end + version '4.1' do - self.release = '4.1.0' + self.release = '4.1.2' self.base_url = "https://fishshell.com/docs/#{version}/" options[:skip].concat %w(genindex.html relnotes.html) From 6ebe4fd1f3f91355cdae52af4f02cae6fd604ff1 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 11:12:08 +0100 Subject: [PATCH 17/20] Update Git documentation (2.53.0) --- lib/docs/scrapers/git.rb | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/docs/scrapers/git.rb b/lib/docs/scrapers/git.rb index fd3e64be5f..a9f2a1fcf4 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.52.0' + self.release = '2.53.0' self.base_url = 'https://git-scm.com/docs' self.initial_paths = %w( /git.html @@ -41,12 +41,12 @@ class Git < UrlScraper options[:container] = '#content' options[:only_patterns] = [/\A\/[^\/]+\z/] - options[:skip] = %w(/howto-index.html) + options[:skip] = %w(/api-index /howto-index) # https://github.com/git/git?tab=License-1-ov-file#readme # NOT https://github.com/git/git-scm.com/blob/gh-pages/MIT-LICENSE.txt options[:attribution] = <<-HTML - © 2005–2025 Linus Torvalds and others
+ © 2005–2026 Linus Torvalds and others
Licensed under the GNU General Public License version 2. HTML From d9ee8d048b50d9a63774e352a547061bbec210e1 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 11:19:43 +0100 Subject: [PATCH 18/20] Update Rust documentation (1.93.1) --- 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 7fa65e6569..83b1533767 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.91.1' + self.release = '1.93.1' self.base_url = 'https://doc.rust-lang.org/' self.root_path = 'book/index.html' self.initial_paths = %w( From 68b412d7e2bbf90f6a30f824ee661a7d9f45db1d Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 11:20:57 +0100 Subject: [PATCH 19/20] Update i3 documentation (4.25.1) --- lib/docs/scrapers/i3.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/i3.rb b/lib/docs/scrapers/i3.rb index 899a718acf..2f80785c74 100644 --- a/lib/docs/scrapers/i3.rb +++ b/lib/docs/scrapers/i3.rb @@ -3,7 +3,7 @@ class I3 < UrlScraper self.name = 'i3' self.type = 'simple' self.slug = 'i3' - self.release = '4.24' + self.release = '4.25.1' self.base_url = 'https://i3wm.org/docs/userguide.html' self.links = { home: 'https://i3wm.org/', From 2a24012c6e23ffdba2ad630b585ba0332b575267 Mon Sep 17 00:00:00 2001 From: Simon Legner Date: Sat, 14 Feb 2026 11:25:18 +0100 Subject: [PATCH 20/20] Update htmx documentation (2.0.7) --- lib/docs/filters/htmx/clean_html.rb | 1 + lib/docs/scrapers/htmx.rb | 28 ++++++++++++++++++---------- 2 files changed, 19 insertions(+), 10 deletions(-) diff --git a/lib/docs/filters/htmx/clean_html.rb b/lib/docs/filters/htmx/clean_html.rb index 4c14c6aad3..95a3107327 100644 --- a/lib/docs/filters/htmx/clean_html.rb +++ b/lib/docs/filters/htmx/clean_html.rb @@ -2,6 +2,7 @@ module Docs class Htmx class CleanHtmlFilter < Filter def call + css('.ad').remove css('.zola-anchor').remove doc.prepend_child("

htmx

") if root_page? css('div:contains("NEWS:")').remove diff --git a/lib/docs/scrapers/htmx.rb b/lib/docs/scrapers/htmx.rb index 719277b2b9..ec1f51e07d 100644 --- a/lib/docs/scrapers/htmx.rb +++ b/lib/docs/scrapers/htmx.rb @@ -7,27 +7,35 @@ class Htmx < UrlScraper home: 'https://htmx.org/', code: 'https://github.com/bigskysoftware/htmx' } - self.release = '1.9.10' - self.base_url = "https://htmx.org/" self.initial_paths = %w(reference/) html_filters.push 'htmx/entries', 'htmx/clean_html' options[:trailing_slash] = true - options[:container] = '.content' + options[:container] = '.content' options[:download_images] = false options[:skip_patterns] = [ - /\Aessays/, - /\Aexamples/, - /\Amigration-guide/, - /\Aposts/, - ] + /\Aessays/, + /\Aexamples/, + /\Amigration-guide/, + /\Aposts/, + ] - # https://github.com/bigskysoftware/htmx/blob/master/LICENSE + # https://github.com/bigskysoftware/htmx/blob/master/LICENSE options[:attribution] = <<-HTML - Licensed under the Zero-Clause BSD License. + Licensed under the Zero-Clause BSD License. HTML + version do + self.release = '2.0.7' + self.base_url = "https://htmx.org/" + end + + version '1' do + self.release = '1.9.12' + self.base_url = "https://v1.htmx.org/" + end + def get_latest_version(opts) get_npm_version('htmx.org', opts) end