diff --git a/Gemfile b/Gemfile index fa6189fd..ee87a784 100644 --- a/Gemfile +++ b/Gemfile @@ -39,6 +39,7 @@ group :development do end group :docs do + gem 'redcarpet' gem 'progress_bar', require: false gem 'unix_utils', require: false gem 'tty-pager', require: false diff --git a/Gemfile.lock b/Gemfile.lock index a1dc6be9..5e1b329d 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -77,6 +77,7 @@ GEM rb-fsevent (0.10.3) rb-inotify (0.10.0) ffi (~> 1.0) + redcarpet (3.5.1) rr (1.2.1) ruby2_keywords (0.0.5) sass (3.7.4) @@ -157,6 +158,7 @@ DEPENDENCIES rack-ssl-enforcer rack-test rake + redcarpet rr sass sinatra diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index d76b8b3f..8af6192b 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,4 +1,8 @@ [ + [ + "2022-09-06", + "New documentation: date-fns" + ], [ "2022-08-27", "New documentations: Sanctuary, Requests, Axios" diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 365f20d9..103d3cbe 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -236,6 +236,11 @@ credits = [ '2012 the Dart project authors', 'CC BY-SA', 'https://creativecommons.org/licenses/by-sa/4.0/' + ], [ + 'date-fns', + '2021 Sasha Koss and Lesha Koss', + 'MIT', + 'https://raw.githubusercontent.com/date-fns/date-fns/main/LICENSE.md' ], [ 'Deno', '2018–2022 the Deno authors', diff --git a/docs/file-scrapers.md b/docs/file-scrapers.md index caeaa891..2b1843c5 100644 --- a/docs/file-scrapers.md +++ b/docs/file-scrapers.md @@ -26,6 +26,18 @@ Or run the following commands in your terminal: curl https://storage.googleapis.com/dart-archive/channels/stable/release/$RELEASE/api-docs/dartdocs-gen-api-zip > dartApi.zip; \ unzip dartApi.zip; mv gen-dartdocs docs/dart~$VERSION ``` + +## date-fns + +```sh +git clone https://github.com/date-fns/date-fns docs/date_fns +cd docs/date_fns +git checkout v2.29.2 +yarn install +node scripts/build/docs.js +ls tmp/docs.json +``` + ## Django Go to https://docs.djangoproject.com/, select the version from the diff --git a/lib/docs/scrapers/date_fns.rb b/lib/docs/scrapers/date_fns.rb new file mode 100755 index 00000000..db9d7902 --- /dev/null +++ b/lib/docs/scrapers/date_fns.rb @@ -0,0 +1,163 @@ +module Docs + class DateFns < FileScraper + self.name = 'date-fns' + self.slug = 'date_fns' + self.type = 'simple' + self.links = { + home: 'https://date-fns.org/', + code: 'https://github.com/date-fns/date-fns' + } + self.release = '2.29.2' + self.base_url = "https://date-fns.org/v#{self.release}/docs/" + + # https://github.com/date-fns/date-fns/blob/main/LICENSE.md + options[:attribution] = <<-HTML + © 2021 Sasha Koss and Lesha Koss
+ Licensed under the MIT License. + HTML + + def build_pages + markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, fenced_code_blocks: true, tables: true) + + md_files = %w(esm.md fp.md gettingStarted.md i18n.md i18nContributionGuide.md release.md timeZones.md unicodeTokens.md upgradeGuide.md webpack.md) + md_files.each do |md_file| + md_string = request_one("docs/#{md_file}").body + md_file = 'index.md' if md_file == 'gettingStarted.md' + name = md_string.match(/^#([^\n]+)/)[1] + path = md_file.sub '.md', '' + page = { + path: path, + store_path: "#{path}.html", + output: markdown.render(md_string), + entries: [Entry.new(name, path, 'General')] + } + yield page + end + + docs = JSON.parse(request_one('tmp/docs.json').body) + docs.each do |type, features| + features.each do |feature| + name = feature['title'] + feature_id = feature['urlId'] + next if feature_id.start_with?('fp/') + next if feature['type'] != 'jsdoc' + # fix description table on https://date-fns.org/v2.29.2/docs/parse + feature['content']['description'].sub! "\n| Unit", "\n\n| Unit" + feature['content']['description'].sub! "\nNotes:\n", "\n\nNotes:\n" + page = { + path: name, + store_path: "#{feature_id}.html", + output: ERB.new(PAGE_ERB).result(binding), + entries: [Entry.new(name, feature_id, type)] + } + yield page + end + end + end + + PAGE_ERB = <<-HTML.strip_heredoc +

<%= feature['title'] %>

+

<%= feature['description'] %>

+ +

Description

+

<%= markdown.render feature['content']['description'] %>

+ + <% if feature['usage'] %> +

Usage

+ <% feature['usage'].each do |_, usage| %> +
<%= '// ' + usage['title'] + '\n' %><%= usage['code'] %>
+ <% end %> + <% end %> + + <% if feature['syntax'] %> +

Syntax

+
<%= feature['syntax'] %>
+ <% end %> + + <% if feature['content']['properties'] %> +

Properties

+ + + + + + + <% feature['content']['properties'].each do |param| %> + + + + + + <% end %> +
NameTypeDescription
<%= param['name'] %><%= param['type']['names'].join ' ' %><%= markdown.render param['description'] || '' %>
+ <% end %> + + <% if feature['content']['params'] %> +

Arguments

+ + + + + + <% feature['content']['params'].each do |param| %> + + + + + <% end %> +
NameDescription
<%= param['name'] %><%= markdown.render param['description'] || '' %>
+ <% end %> + + <% if feature['content']['returns'] %> +

Returns

+ + + + + <% feature['content']['returns'].each do |param| %> + + + + <% end %> +
Description
<%= markdown.render param['description'] || '' %>
+ <% end %> + + <% if feature['content']['exceptions'] %> +

Exceptions

+ + + + + + <% feature['content']['exceptions'].each do |param| %> + + + + + <% end %> +
TypeDescription
<%= param['type']['names'].join ' ' %><%= markdown.render param['description'] || '' %>
+ <% end %> + + <% if feature['content']['examples'] %> +

Examples

+ <% feature['content']['examples'].each do |example| %> +
<%= example %>
+ <% end %> + <% end %> + +
+

+ <%= options[:attribution] %> +
+ + <%= self.base_url %><%= feature_id %> + +

+
+ HTML + + def get_latest_version(opts) + get_latest_github_release('date-fns', 'date-fns', opts) + end + end +end diff --git a/public/icons/docs/date_fns/16.png b/public/icons/docs/date_fns/16.png new file mode 100644 index 00000000..f102d2e4 Binary files /dev/null and b/public/icons/docs/date_fns/16.png differ diff --git a/public/icons/docs/date_fns/16@2x.png b/public/icons/docs/date_fns/16@2x.png new file mode 100644 index 00000000..c918b60d Binary files /dev/null and b/public/icons/docs/date_fns/16@2x.png differ diff --git a/public/icons/docs/date_fns/SOURCE b/public/icons/docs/date_fns/SOURCE new file mode 100644 index 00000000..568f4706 --- /dev/null +++ b/public/icons/docs/date_fns/SOURCE @@ -0,0 +1,2 @@ +https://date-fns.org/static/favicon-16x16.png +https://date-fns.org/static/favicon-32x32.png