diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 5c4b9ba8..7b00aee1 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -482,6 +482,11 @@ credits = [ '2010-2022 JetBrains s.r.o. and Kotlin Programming Language contributors', 'Apache', 'https://raw.githubusercontent.com/JetBrains/kotlin/master/license/LICENSE.txt' + ], [ + 'Kubernetes', + '2022 The Kubernetes Authors and The Linux Foundation', + 'Apache License 2.0', + 'https://github.com/kubernetes/kubernetes/blob/master/LICENSE' ], [ 'Laravel', 'Taylor Otwell', diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 1d5da325..d00ce225 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -74,6 +74,8 @@ 'pages/julia', 'pages/knockout', 'pages/kotlin', + 'pages/kubectl', + 'pages/kubernetes', 'pages/laravel', 'pages/liquid', 'pages/love', diff --git a/assets/stylesheets/pages/_kubectl.scss b/assets/stylesheets/pages/_kubectl.scss new file mode 100644 index 00000000..afd3090d --- /dev/null +++ b/assets/stylesheets/pages/_kubectl.scss @@ -0,0 +1,4 @@ +._kubectl { + @extend %simple; + +} diff --git a/assets/stylesheets/pages/_kubernetes.scss b/assets/stylesheets/pages/_kubernetes.scss new file mode 100644 index 00000000..52791ba3 --- /dev/null +++ b/assets/stylesheets/pages/_kubernetes.scss @@ -0,0 +1,4 @@ +._kubernetes { + @extend %simple; + +} diff --git a/lib/docs/filters/kubectl/clean_html.rb b/lib/docs/filters/kubectl/clean_html.rb new file mode 100644 index 00000000..5fa05773 --- /dev/null +++ b/lib/docs/filters/kubectl/clean_html.rb @@ -0,0 +1,15 @@ +module Docs + class Kubectl + class CleanHtmlFilter < Filter + + def call + css('pre').each do |node| + node.content = node.content.squish + node['data-language'] = 'bash' + end + doc + end + + end + end +end diff --git a/lib/docs/filters/kubectl/entries.rb b/lib/docs/filters/kubectl/entries.rb new file mode 100644 index 00000000..2a15d508 --- /dev/null +++ b/lib/docs/filters/kubectl/entries.rb @@ -0,0 +1,38 @@ +module Docs + class Kubectl + class EntriesFilter < Docs::EntriesFilter + + def get_name + name + end + + def get_type + name + end + + def additional_entries + entries = [] + group = 'kubectl' + commands = css('h1').to_a() + commands.map do |node| + # handle titles differnetly by converting them into sidebar groups (types) + new_group = at_css("##{node['id']} > strong") + if new_group + group = new_group.content.titleize + else + # prepend kubectl before every command + command_name = 'kubectl ' + node.content + entries << [command_name, node['id'], group] + end + + end + + entries + end + + def include_default_entry? + false + end + end + end +end diff --git a/lib/docs/filters/kubernetes/clean_html.rb b/lib/docs/filters/kubernetes/clean_html.rb new file mode 100644 index 00000000..33adb7ae --- /dev/null +++ b/lib/docs/filters/kubernetes/clean_html.rb @@ -0,0 +1,22 @@ +module Docs + class Kubernetes + class CleanHtmlFilter < Filter + + def call + + # remove the API Operations section from the docs + # by removing the h2 of id=Opetations + # and all the preceding elements + css('#Operations ~ *').remove + css('#Operations').remove + # remove horizontal rules + css('hr').remove + # remove footer (1.20) + css('.pre-footer').remove + + doc + end + + end + end +end diff --git a/lib/docs/filters/kubernetes/entries.rb b/lib/docs/filters/kubernetes/entries.rb new file mode 100644 index 00000000..5dfc0f3d --- /dev/null +++ b/lib/docs/filters/kubernetes/entries.rb @@ -0,0 +1,37 @@ +module Docs + class Kubernetes + class EntriesFilter < Docs::EntriesFilter + + def get_name + at_css('h1').content + end + + def get_type + @doc.parent.css('nav .breadcrumb-item:not(.active)')[-1].content + end + + def additional_entries + entries = css('h2').to_a() + # remove the Feedback section + entries.filter! {|node| node.content.strip != 'Feedback' } + # remove the Operations section + entries.filter! {|node| node['id'] != 'Operations' } + # remove the ObjectList section + entries.filter! {|node| node['id'] != name + 'List' } + # remove the Object section, most of the documents start with (h1.Pod => h2.Pod h2.PodSpec ...) + entries.filter! {|node| node['id'] != name } + + entries.map do |node| + # split all names into YAML object notation (ConfigMapSpec) ==> (ConfigMap.Spec) + child_name = node.content + if child_name.starts_with?(name) && child_name.length > name.length + child_name = name + child_name.sub(name, '.') + end + + [child_name, node['id']] + end + end + + end + end +end diff --git a/lib/docs/scrapers/kubectl.rb b/lib/docs/scrapers/kubectl.rb new file mode 100644 index 00000000..0f888ddf --- /dev/null +++ b/lib/docs/scrapers/kubectl.rb @@ -0,0 +1,38 @@ +module Docs + class Kubectl < UrlScraper + self.name = 'Kubectl' + self.type = 'kubectl' + self.root_path = '' + self.links = { + home: 'https://kubernetes.io/docs/reference/kubectl/', + code: 'https://github.com/kubernetes/kubernetes' + } + self.release = "1.23" + self.base_url = "https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands" + + html_filters.push 'kubectl/entries', 'kubectl/clean_html' + + options[:container] = '#page-content-wrapper' + + options[:attribution] = <<-HTML + © 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
+ Copyright © 2022 The Linux Foundation ®. All rights reserved. + HTML + + # latest version has a special URL that does not include the version identifier + version do + self.release = "1.23" + self.base_url = "https://kubernetes.io/docs/reference/generated/kubectl/kubectl-commands" + end + + version '1.20' do + self.release = "#{version}" + self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/generated/kubectl/kubectl-commands" + end + + def get_latest_version(opts) + get_latest_github_release('kubernetes', 'kubernetes', opts) + end + + end +end diff --git a/lib/docs/scrapers/kubernetes.rb b/lib/docs/scrapers/kubernetes.rb new file mode 100644 index 00000000..143c16ae --- /dev/null +++ b/lib/docs/scrapers/kubernetes.rb @@ -0,0 +1,37 @@ +module Docs + class Kubernetes < UrlScraper + self.name = 'Kubernetes' + self.type = 'kubernetes' + self.root_path = '/' + self.links = { + home: 'https://kubernetes.io/', + code: 'https://github.com/kubernetes/kubernetes' + } + + # https://kubernetes.io/docs/reference/kubernetes-api/ + html_filters.push 'kubernetes/entries', 'kubernetes/clean_html' + + options[:container] = '.td-content' + + options[:attribution] = <<-HTML + © 2022 The Kubernetes Authors | Documentation Distributed under CC BY 4.0
+ Copyright © 2022 The Linux Foundation ®. All rights reserved. + HTML + + # latest version has a special URL that does not include the version identifier + version do + self.release = "1.23" + self.base_url = "https://kubernetes.io/docs/reference/kubernetes-api/" + end + + version '1.20' do + self.release = "#{version}" + self.base_url = "https://v#{version.sub('.', '-')}.docs.kubernetes.io/docs/reference/kubernetes-api/" + end + + def get_latest_version(opts) + get_latest_github_release('kubernetes', 'kubernetes', opts) + end + + end +end diff --git a/public/icons/docs/kubectl/16.png b/public/icons/docs/kubectl/16.png new file mode 100644 index 00000000..0dccf912 Binary files /dev/null and b/public/icons/docs/kubectl/16.png differ diff --git a/public/icons/docs/kubectl/16@2x.png b/public/icons/docs/kubectl/16@2x.png new file mode 100644 index 00000000..2261e8ec Binary files /dev/null and b/public/icons/docs/kubectl/16@2x.png differ diff --git a/public/icons/docs/kubectl/SOURCE b/public/icons/docs/kubectl/SOURCE new file mode 100644 index 00000000..cedbe271 --- /dev/null +++ b/public/icons/docs/kubectl/SOURCE @@ -0,0 +1 @@ +https://cncf-branding.netlify.app/projects/kubernetes/ \ No newline at end of file diff --git a/public/icons/docs/kubernetes/16.png b/public/icons/docs/kubernetes/16.png new file mode 100644 index 00000000..79abeb07 Binary files /dev/null and b/public/icons/docs/kubernetes/16.png differ diff --git a/public/icons/docs/kubernetes/16@2x.png b/public/icons/docs/kubernetes/16@2x.png new file mode 100644 index 00000000..9291009d Binary files /dev/null and b/public/icons/docs/kubernetes/16@2x.png differ diff --git a/public/icons/docs/kubernetes/SOURCE b/public/icons/docs/kubernetes/SOURCE new file mode 100644 index 00000000..cedbe271 --- /dev/null +++ b/public/icons/docs/kubernetes/SOURCE @@ -0,0 +1 @@ +https://cncf-branding.netlify.app/projects/kubernetes/ \ No newline at end of file