diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index 38dd4bc4..5b175a75 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,4 +1,8 @@ [ + [ + "2024-02-20", + "New documentation: Nextjs" + ], [ "2024-01-24", "New documentation: Playwright" diff --git a/lib/docs/filters/nextjs/clean_html.rb b/lib/docs/filters/nextjs/clean_html.rb new file mode 100644 index 00000000..6197de17 --- /dev/null +++ b/lib/docs/filters/nextjs/clean_html.rb @@ -0,0 +1,19 @@ +module Docs + class Nextjs + class CleanHtmlFilter < Filter + def call + css('.zola-anchor').remove + doc.prepend_child("

NextJS2

") if root_page? + css('div:contains("NEWS:")').remove + css('h2:contains("sponsors"), #sponsor-table').remove + css('div.sticky').remove #remove the floating menu + css('div.-mt-4').remove #remove the navigation line + css('footer').remove + css('div.feedback_inlineTriggerWrapper__o7yUx').remove + css('header').remove #remove links from the top of the page + css('nav').remove + doc + end + end + end +end diff --git a/lib/docs/filters/nextjs/entries.rb b/lib/docs/filters/nextjs/entries.rb new file mode 100644 index 00000000..4e67f00d --- /dev/null +++ b/lib/docs/filters/nextjs/entries.rb @@ -0,0 +1,43 @@ +module Docs + class Nextjs + class EntriesFilter < Docs::EntriesFilter + def get_name + name = at_css('h1').content + name.strip! + #name + subpath_items = subpath.split('/', -1) + if subpath_items.length >= 5 + subpath_items[3].capitalize + ': ' + name # e.g. Routing: Defining Routes + else + name + end + end + + def get_type + if subpath.include?('/architecture') + 'Architecture' + elsif subpath.include?('/community') + 'Community' + elsif subpath.include?('/getting-started') + 'Getting Started' + elsif subpath.include?('/messages') + 'Messages' + elsif subpath.include?('/app/building-your-application') + 'Using App Router: Building your application' + elsif subpath.include?('/app/api-reference') + 'Using App Router: api-reference' + elsif subpath.include?('/app') + 'Using App Router' + elsif subpath.include?('/pages/building-your-application') + 'Using Pages Router: Building your application' + elsif subpath.include?('/pages/api-reference') + 'Using Pages Router: api-reference' + elsif subpath.include?('/pages') + 'Using Pages Router' + else + get_name + end + end + end + end +end diff --git a/lib/docs/scrapers/nextjs.rb b/lib/docs/scrapers/nextjs.rb new file mode 100644 index 00000000..a20cf800 --- /dev/null +++ b/lib/docs/scrapers/nextjs.rb @@ -0,0 +1,20 @@ +module Docs + class Nextjs < UrlScraper + self.name = 'NextJS' + self.type = 'simple' + self.release = 'v14.1.0' + self.base_url = 'https://nextjs.org/docs' + self.initial_paths = %w(reference/) + self.links = { + home: 'https://www.nextjs.org/', + code: 'https://github.com/vercel/next.js' + } + + html_filters.push 'nextjs/entries', 'nextjs/clean_html' + + options[:attribution] = <<-HTML + © 2024 Vercel, Inc. + Licensed under the MIT License. + HTML + end +end diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..c77b993a --- /dev/null +++ b/package-lock.json @@ -0,0 +1,6 @@ +{ + "name": "devdocs", + "lockfileVersion": 3, + "requires": true, + "packages": {} +} diff --git a/public/icons/docs/nextjs/16.png b/public/icons/docs/nextjs/16.png new file mode 100644 index 00000000..41e7ff4d Binary files /dev/null and b/public/icons/docs/nextjs/16.png differ diff --git a/public/icons/docs/nextjs/16@2x.png b/public/icons/docs/nextjs/16@2x.png new file mode 100644 index 00000000..e35d18e2 Binary files /dev/null and b/public/icons/docs/nextjs/16@2x.png differ diff --git a/public/icons/docs/nextjs/SOURCE b/public/icons/docs/nextjs/SOURCE new file mode 100644 index 00000000..178b8630 --- /dev/null +++ b/public/icons/docs/nextjs/SOURCE @@ -0,0 +1,2 @@ +https://assets.vercel.com/image/upload/v1662130559/nextjs/Icon_dark_background.png +https://github.com/vercel/next.js/blob/canary/examples/cms-enterspeed/public/favicon/favicon.ico \ No newline at end of file