From 319074f6b78e0edc57b22455285c344d01c9b6eb Mon Sep 17 00:00:00 2001 From: Phil Scherer Date: Mon, 7 Dec 2020 02:07:23 +0000 Subject: [PATCH] Add Pallets projects (Flask, Jinja, and Werkzeug) documentation --- .../templates/pages/about_tmpl.coffee | 15 ++++ lib/docs/filters/flask/entries.rb | 82 ++++++++++++++++++ lib/docs/filters/jinja/entries.rb | 55 ++++++++++++ lib/docs/filters/werkzeug/entries.rb | 61 +++++++++++++ lib/docs/scrapers/flask.rb | 40 +++++++++ lib/docs/scrapers/jinja.rb | 39 +++++++++ lib/docs/scrapers/werkzeug.rb | 39 +++++++++ public/icons/docs/flask/16.png | Bin 0 -> 2293 bytes public/icons/docs/flask/16@2x.png | Bin 0 -> 2709 bytes public/icons/docs/flask/SOURCE | 1 + public/icons/docs/jinja/16.png | Bin 0 -> 11796 bytes public/icons/docs/jinja/16@2x.png | Bin 0 -> 12597 bytes public/icons/docs/jinja/SOURCE | 1 + public/icons/docs/werkzeug/16.png | Bin 0 -> 801 bytes public/icons/docs/werkzeug/16@2x.png | Bin 0 -> 4348 bytes public/icons/docs/werkzeug/SOURCE | 1 + 16 files changed, 334 insertions(+) create mode 100755 lib/docs/filters/flask/entries.rb create mode 100755 lib/docs/filters/jinja/entries.rb create mode 100755 lib/docs/filters/werkzeug/entries.rb create mode 100755 lib/docs/scrapers/flask.rb create mode 100755 lib/docs/scrapers/jinja.rb create mode 100755 lib/docs/scrapers/werkzeug.rb create mode 100644 public/icons/docs/flask/16.png create mode 100644 public/icons/docs/flask/16@2x.png create mode 100644 public/icons/docs/flask/SOURCE create mode 100644 public/icons/docs/jinja/16.png create mode 100644 public/icons/docs/jinja/16@2x.png create mode 100644 public/icons/docs/jinja/SOURCE create mode 100644 public/icons/docs/werkzeug/16.png create mode 100644 public/icons/docs/werkzeug/16@2x.png create mode 100644 public/icons/docs/werkzeug/SOURCE diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index afaf37a3..2b0f00b2 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -306,6 +306,11 @@ credits = [ '2005-2009 Axel Liljencrantz', 'GPLv2', 'https://fishshell.com/docs/current/license.html' + ], [ + 'Flask', + '2007-2020 Pallets', + 'BSD', + 'https://github.com/pallets/flask/blob/master/LICENSE.rst' ], [ 'GCC
GNU Fortran', 'Free Software Foundation', @@ -396,6 +401,11 @@ credits = [ '2020 Facebook, Inc.', 'MIT', 'https://raw.githubusercontent.com/facebook/jest/master/LICENSE' + ], [ + 'Jinja', + '2007-2020 Pallets', + 'BSD', + 'https://github.com/pallets/jinja/blob/master/LICENSE.rst' ], [ 'jQuery', 'Packt Publishing
© jQuery Foundation and other contributors', @@ -826,6 +836,11 @@ credits = [ 'JS Foundation and other contributors', 'CC BY', 'https://creativecommons.org/licenses/by/4.0/' + ], [ + 'Werkzeug', + '2007-2020 Pallets', + 'BSD', + 'https://github.com/pallets/werkzeug/blob/master/LICENSE.rst' ], [ 'Wordpress', '2003-2019 WordPress Foundation', diff --git a/lib/docs/filters/flask/entries.rb b/lib/docs/filters/flask/entries.rb new file mode 100755 index 00000000..be71c24a --- /dev/null +++ b/lib/docs/filters/flask/entries.rb @@ -0,0 +1,82 @@ +module Docs + class Flask + class EntriesFilter < Docs::EntriesFilter + TYPE_BY_SLUG = {} + + def call + if root_page? + css('.section').each do |node| + type = node.at_css('h2').content[0..-2] + node.css('li > a').each do |n| + s = n['href'].split('/')[-2] + TYPE_BY_SLUG[s] = type + end + end + end + super + end + + def get_name + at_css('h1').content[0..-2] + end + + def get_type + case slug + when /deploying/ + 'User\'s Guide: Deploying' + when /patterns/ + 'User\'s Guide: Design Patterns' + else + TYPE_BY_SLUG[slug.split('/').first] || 'Other' + end + end + + def include_default_entry? + slug != 'api/' + end + + def additional_entries + entries = [] + css('dl.function > dt[id]').each do |node| + name = node['id'].split('.').last + '()' + id = node['id'] + type = node['id'].split('.')[0..-2].join('.') + entries << [name, id, type] + end + + css('dl.class > dt[id]').each do |node| + name = node['id'].split('.').last + id = node['id'] + type = node['id'].split('.')[0..-2].join('.') + entries << [name, id, type] + end + + css('dl.attribute > dt[id]').each do |node| + name = node['id'].split('.')[-2..-1].join('.') + id = node['id'] + type = node['id'].split('.')[0..-3].join('.') + type = 'flask' if type == '' + entries << [name, id, type] + end + + css('dl.data > dt[id]').each do |node| + name = node['id'] + id = node['id'] + type = node['id'].split('.')[0..-3].join('.') + type = 'flask' if type == '' + type = 'Configuration' if slug == 'config/' + entries << [name, id, type] + end + + css('dl.method > dt[id]').each do |node| + name = node['id'].split('.')[-2..-1].join('.') + '()' + id = node['id'] + type = node['id'].split('.')[0..-3].join('.') + entries << [name, id, type] + end + entries + end + + end + end +end diff --git a/lib/docs/filters/jinja/entries.rb b/lib/docs/filters/jinja/entries.rb new file mode 100755 index 00000000..78a348c7 --- /dev/null +++ b/lib/docs/filters/jinja/entries.rb @@ -0,0 +1,55 @@ +module Docs + class Jinja + class EntriesFilter < Docs::EntriesFilter + + def get_name + at_css('h1').content[0..-2] + end + + def get_type + 'User Guide' + end + + def include_default_entry? + slug != 'api/' + end + + def additional_entries + entries = [] + css('dl.function > dt[id]').each do |node| + name = node['id'].split('.').last + '()' + id = node['id'] + type = node['id'].split('.')[0..-2].join('.') + type = 'Template Language' if slug == 'templates/' + entries << [name, id, type] + end + + css('dl.class > dt[id], dl.exception > dt[id]').each do |node| + name = node['id'].split('.').last + id = node['id'] + type = node['id'].split('.')[0..-2].join('.') + type = 'Template Language' if slug == 'templates/' + entries << [name, id, type] + end + + css('dl.attribute > dt[id], dl.property > dt[id]').each do |node| + name = node['id'].split('.')[-2..-1].join('.') + id = node['id'] + type = node['id'].split('.')[0..-3].join('.') + type = 'Template Language' if slug == 'templates/' + entries << [name, id, type] + end + + css('dl.method > dt[id]').each do |node| + name = node['id'].split('.')[-2..-1].join('.') + '()' + id = node['id'] + type = node['id'].split('.')[0..-3].join('.') + type = 'Template Language' if slug == 'templates/' + entries << [name, id, type] + end + entries + end + + end + end +end diff --git a/lib/docs/filters/werkzeug/entries.rb b/lib/docs/filters/werkzeug/entries.rb new file mode 100755 index 00000000..78e0ec64 --- /dev/null +++ b/lib/docs/filters/werkzeug/entries.rb @@ -0,0 +1,61 @@ +module Docs + class Werkzeug + class EntriesFilter < Docs::EntriesFilter + TYPE_BY_SLUG = {} + + def call + if root_page? + css('.section').each do |node| + type = node.at_css('h2').content[0..-2] + node.css('li > a').each do |n| + s = n['href'].split('/')[-2] + TYPE_BY_SLUG[s] = type + end + end + end + super + end + + def get_name + at_css('h1').content[0..-2] + end + + def get_type + TYPE_BY_SLUG[slug.split('/').first] || 'Other' + end + + def additional_entries + entries = [] + css('dl.function > dt[id]').each do |node| + name = node['id'].split('.').last + '()' + id = node['id'] + type = node['id'].split('.')[0..-2].join('.') + entries << [name, id, type] + end + + css('dl.class > dt[id]').each do |node| + name = node['id'].split('.').last + id = node['id'] + type = node['id'].split('.')[0..-2].join('.') + entries << [name, id, type] + end + + css('dl.attribute > dt[id]').each do |node| + name = node['id'].split('.')[-2..-1].join('.') + id = node['id'] + type = node['id'].split('.')[0..-3].join('.') + entries << [name, id, type] + end + + css('dl.method > dt[id], dl.classmethod > dt[id], dl.staticmethod > dt[id]').each do |node| + name = node['id'].split('.')[-2..-1].join('.') + '()' + id = node['id'] + type = node['id'].split('.')[0..-3].join('.') + entries << [name, id, type] + end + entries + end + + end + end +end diff --git a/lib/docs/scrapers/flask.rb b/lib/docs/scrapers/flask.rb new file mode 100755 index 00000000..2d3c0802 --- /dev/null +++ b/lib/docs/scrapers/flask.rb @@ -0,0 +1,40 @@ +module Docs + class Flask < UrlScraper + self.type = 'sphinx' + self.root_path = 'index.html' + self.links = { + home: 'https://palletsprojects.com/p/flask/', + code: 'https://github.com/pallets/flask' + } + + html_filters.push 'flask/entries', 'sphinx/clean_html' + + options[:container] = '.body > .section' + options[:skip] = %w(extensiondev/ styleguide/ upgrading/ changelog/ license/ contributing/) + options[:skip_patterns] = [/\Atutorial\//] + + options[:attribution] = <<-HTML + © 2007–2020 Pallets
+ Licensed under the BSD 3-clause License. + HTML + + version '1.1' do + self.release = '1.1.x' + self.base_url = "https://flask.palletsprojects.com/en/#{self.release}/" + end + + version '1.0' do + self.release = '1.0.x' + self.base_url = "https://flask.palletsprojects.com/en/#{self.release}/" + end + + version '0.12' do + self.release = '0.12.x' + self.base_url = "https://flask.palletsprojects.com/en/#{self.release}/" + end + + def get_latest_version(opts) + get_latest_github_release('pallets', 'flask', opts) + end + end +end diff --git a/lib/docs/scrapers/jinja.rb b/lib/docs/scrapers/jinja.rb new file mode 100755 index 00000000..f38af56d --- /dev/null +++ b/lib/docs/scrapers/jinja.rb @@ -0,0 +1,39 @@ +module Docs + class Jinja < UrlScraper + self.type = 'sphinx' + self.root_path = 'index.html' + self.links = { + home: 'https://palletsprojects.com/p/jinja/', + code: 'https://github.com/pallets/jinja' + } + + html_filters.push 'jinja/entries', 'sphinx/clean_html' + + options[:container] = '.body > .section' + options[:skip] = %w(integration/ switching/ faq/ changelog/ search/ genindex/) + + options[:attribution] = <<-HTML + © 2007–2020 Pallets
+ Licensed under the BSD 3-clause License. + HTML + + version '2.11' do + self.release = '2.11.x' + self.base_url = "https://jinja.palletsprojects.com/en/#{self.release}/" + end + + version '2.10' do + self.release = '2.10.x' + self.base_url = "https://jinja.palletsprojects.com/en/#{self.release}/" + end + + version '2.9' do + self.release = '2.9.x' + self.base_url = "https://jinja.palletsprojects.com/en/#{self.release}/" + end + + def get_latest_version(opts) + get_latest_github_release('pallets', 'jinja', opts) + end + end +end diff --git a/lib/docs/scrapers/werkzeug.rb b/lib/docs/scrapers/werkzeug.rb new file mode 100755 index 00000000..b610659c --- /dev/null +++ b/lib/docs/scrapers/werkzeug.rb @@ -0,0 +1,39 @@ +module Docs + class Werkzeug < UrlScraper + self.type = 'sphinx' + self.root_path = 'index.html' + self.links = { + home: 'https://palletsprojects.com/p/werkzeug/', + code: 'https://github.com/pallets/werkzeug' + } + + html_filters.push 'werkzeug/entries', 'sphinx/clean_html' + + options[:container] = '.body > .section' + options[:skip] = %w(changes/) + + options[:attribution] = <<-HTML + © 2007–2020 Pallets
+ Licensed under the BSD 3-clause License. + HTML + + version '1.0' do + self.release = '1.0.x' + self.base_url = "https://werkzeug.palletsprojects.com/en/#{self.release}/" + end + + version '0.16' do + self.release = '0.16.x' + self.base_url = "https://werkzeug.palletsprojects.com/en/#{self.release}/" + end + + version '0.15' do + self.release = '0.15.x' + self.base_url = "https://werkzeug.palletsprojects.com/en/#{self.release}/" + end + + def get_latest_version(opts) + get_latest_github_release('pallets', 'werkzeug', opts) + end + end +end diff --git a/public/icons/docs/flask/16.png b/public/icons/docs/flask/16.png new file mode 100644 index 0000000000000000000000000000000000000000..84bfe0c7a126f38b61cda43b7e455bb1c49ac22b GIT binary patch literal 2293 zcma);2UHW;8pkIT0VN0utOStoY%DcJs;dGCgh0SZ7o-ef0t2KlnFs_#WJP4HEUrp- zL1ke9QOfcJmUb*CRRshe)q)LF+CEWm2RyRxox{HK=FGkK%zVH9{l4$ccV{Mr?ZUvX zCaeYk0MB%wyJDmAVw0D_`pP-;R{(%hfoU{0%;5k)bboe7oud{AB#n$w^K2?y4V%;h zQa#HejVj*DeREuvS~?tN+Fl$i)CcnZn

yVLzkYeq`zpg{`CFS6#b!Ab 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 literal 0 HcmV?d00001 diff --git a/public/icons/docs/jinja/16@2x.png b/public/icons/docs/jinja/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..b10d9635b9703c8fa6ce7d264fa625fba8e9a5f5 GIT binary patch literal 12597 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 S52H5$ATO;V_3OQ9=>Gy6jvVX& literal 0 HcmV?d00001 diff --git a/public/icons/docs/jinja/SOURCE b/public/icons/docs/jinja/SOURCE new file mode 100644 index 00000000..93ed25c7 --- /dev/null +++ b/public/icons/docs/jinja/SOURCE @@ -0,0 +1 @@ +https://jinja.palletsprojects.com/en/2.11.x/_static/jinja-logo-sidebar.png diff --git a/public/icons/docs/werkzeug/16.png b/public/icons/docs/werkzeug/16.png new file mode 100644 index 0000000000000000000000000000000000000000..169375755e279a3255d6df9b946c4ca911fdc4de GIT binary patch literal 801 zcmZ9Idq~q!6vw|Z=bTfNiZl&fN>w#|fVd2B zOfK&{6aZNGMjnWgQUN{I9B{48V8u2woBcOsTf*i~-I4;=ETF(!0oGq&{Q=sgV(R5^ z(2$QOWw@OV@)|v*C{u$x2N?o+i-B9vCWAb~XdRM|AU6(k9T=)aQ3A+QkbaP1+{?pw z1KO_OWi?*aAYTR22QmmU3bD6&9%VQ#pT_qAjNC!NNsu=n2KalM$NSO(Q#;06G2RUF z3d`>xbVrK@!3 z-KD6!h{xB_Pyj;6Xsgb==Jjg1>@X~@RkF0TMLNsEdUnnOtIRe|dOKI$*_NZLHRxUI zsm|iW{t!uQuc5=dGLAYdLdr4PTJc<67H6V&(bCf}Nl=uNK1KmnuxI>QtJofa$MXX3 zUY||AO+Ame6X&)JdTqI{OIZy3(RF%Z+WF>DgE(VJ(VgAcRndK^x};fCSLLAfP4H|= zN>ZMRON=?A@^v5NfBm3KYBU;WKMC$mdCvO`@l7A=?i#<$efm5#GchyI@8=6vIXJDE zUFF`SYV>gv*lybw>h3+ZvG@4jS*F*4^h+Dn(r9(8QXMCbNr|HYB1Xgr{X{}$ zN0gtRSmZC>?(fAgVuncz)|>t@B%X~u6`%gUVW(KctQZQ59lfXlVN#i-ajzohH~0Dv A0ssI2 literal 0 HcmV?d00001 diff --git a/public/icons/docs/werkzeug/16@2x.png b/public/icons/docs/werkzeug/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..a069df951a4a5b73f4a6ec65d1a13c6001dc5ad5 GIT binary patch literal 4348 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