From 50dfc91721095c97149304c65596f1f8ef7856a0 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sat, 3 May 2014 19:32:55 -0400 Subject: [PATCH] Add Grunt documentation --- assets/images/icons.png | Bin 17582 -> 18101 bytes assets/images/icons@2x.png | Bin 45618 -> 46821 bytes .../templates/pages/about_tmpl.coffee | 5 +++ .../templates/pages/news_tmpl.coffee | 2 +- assets/javascripts/views/pages/grunt.coffee | 4 +++ assets/stylesheets/application.css.scss | 1 + assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_grunt.scss | 8 +++++ lib/docs/filters/grunt/clean_html.rb | 28 +++++++++++++++ lib/docs/filters/grunt/entries.rb | 34 ++++++++++++++++++ lib/docs/scrapers/grunt.rb | 27 ++++++++++++++ public/icons/docs/grunt/16.png | Bin 0 -> 607 bytes public/icons/docs/grunt/16@2x.png | Bin 0 -> 1058 bytes public/icons/docs/grunt/SOURCE | 1 + 14 files changed, 110 insertions(+), 1 deletion(-) create mode 100644 assets/javascripts/views/pages/grunt.coffee create mode 100644 assets/stylesheets/pages/_grunt.scss create mode 100644 lib/docs/filters/grunt/clean_html.rb create mode 100644 lib/docs/filters/grunt/entries.rb create mode 100644 lib/docs/scrapers/grunt.rb create mode 100644 public/icons/docs/grunt/16.png create mode 100644 public/icons/docs/grunt/16@2x.png create mode 100644 public/icons/docs/grunt/SOURCE diff --git a/assets/images/icons.png b/assets/images/icons.png index 1a5f97e4eb5dba281a6197f6501f416585e20bbd..7320379fca59f72e2f76fb52aa54e38549e2c5bc 100644 GIT binary patch delta 8398 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 delta 7875 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%0D$@;y-`HUfUrRrl(+RTzl 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 diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png index 534dc4df338bc300a069629d52a5788ca4474e1b..dda527a9ab60f1b7de8c05a209e0912f4b5a82b6 100644 GIT binary patch delta 6061 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 delta 4848 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 WfSjY0kg app.news = [ [ 1399075200000, # May 3, 2014 - """ New Express documentation """, + """ New Express and Grunt documentations """, ], [ 1396742400000, # April 6, 2014 """ New Go documentation """, diff --git a/assets/javascripts/views/pages/grunt.coffee b/assets/javascripts/views/pages/grunt.coffee new file mode 100644 index 00000000..2b8695b3 --- /dev/null +++ b/assets/javascripts/views/pages/grunt.coffee @@ -0,0 +1,4 @@ +#= require views/pages/base +#= require views/pages/underscore + +app.views.GruntPage = app.views.UnderscorePage diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 36cea34c..011e97cb 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -38,6 +38,7 @@ 'pages/jquery', 'pages/knockout', 'pages/git', + 'pages/grunt', 'pages/less', 'pages/lodash', 'pages/mdn', diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index f6eeb97c..0f0ab8d4 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -54,3 +54,4 @@ ._icon-cpp:before { background-position: 0 -8rem; } ._icon-go:before { background-position: -1rem -8rem; } ._icon-express:before { background-position: -2rem -8rem; } +._icon-grunt:before { background-position: -3rem -8rem; } diff --git a/assets/stylesheets/pages/_grunt.scss b/assets/stylesheets/pages/_grunt.scss new file mode 100644 index 00000000..592653fb --- /dev/null +++ b/assets/stylesheets/pages/_grunt.scss @@ -0,0 +1,8 @@ +._grunt { + padding-left: 1rem; + + h1, h2, h3 { margin-left: -1rem; } + h2 { @extend %block-heading; } + h3 { @extend %block-label, %label-blue; } + p > code { @extend %label; } +} diff --git a/lib/docs/filters/grunt/clean_html.rb b/lib/docs/filters/grunt/clean_html.rb new file mode 100644 index 00000000..f1ddf5e9 --- /dev/null +++ b/lib/docs/filters/grunt/clean_html.rb @@ -0,0 +1,28 @@ +module Docs + class Grunt + class CleanHtmlFilter < Filter + def call + @doc = at_css('.hero-unit') + + if root_page? + at_css('h1').content = 'Grunt' + end + + css('.end-link').remove + + # Put id attributes on headings + css('a.anchor').each do |node| + node.parent['id'] = node['name'] + node.before(node.children).remove + end + + # Remove code highlighting + css('pre').each do |node| + node.content = node.content + end + + doc + end + end + end +end diff --git a/lib/docs/filters/grunt/entries.rb b/lib/docs/filters/grunt/entries.rb new file mode 100644 index 00000000..01b453e1 --- /dev/null +++ b/lib/docs/filters/grunt/entries.rb @@ -0,0 +1,34 @@ +module Docs + class Grunt + class EntriesFilter < Docs::EntriesFilter + def get_name + at_css('h1').content + end + + def get_type + if name.starts_with?('grunt') || name == 'Inside Tasks' + name + else + 'Miscellaneous' + end + end + + def additional_entries + return [] unless subpath.starts_with?('api') + + css('h3').each_with_object [] do |node, entries| + name = node.content + name.remove! %r{\s.+\z} + + next if name == self.name + + entries << [name, node['id']] + end + end + + def include_default_entry? + name != 'Inside Tasks' + end + end + end +end diff --git a/lib/docs/scrapers/grunt.rb b/lib/docs/scrapers/grunt.rb new file mode 100644 index 00000000..8d00a434 --- /dev/null +++ b/lib/docs/scrapers/grunt.rb @@ -0,0 +1,27 @@ +module Docs + class Grunt < UrlScraper + self.name = 'Grunt' + self.type = 'grunt' + self.version = '0.4.4' + self.base_url = 'http://gruntjs.com/' + self.root_path = 'getting-started' + self.initial_paths = %w(api/grunt) + + html_filters.push 'grunt/clean_html', 'grunt/entries' + + options[:only] = %w( + configuring-tasks + sample-gruntfile + creating-tasks + using-the-cli + ) + options[:only_patterns] = [/\Aapi\//] + + options[:container] = '.container > .row-fluid' + + options[:attribution] = <<-HTML + © 2014 Grunt Team
+ Licensed under the MIT License. + HTML + end +end diff --git a/public/icons/docs/grunt/16.png b/public/icons/docs/grunt/16.png new file mode 100644 index 0000000000000000000000000000000000000000..c8df7ddf2a5fac89171eeb35eb39b20ce008cc27 GIT binary patch literal 607 zcmV-l0-*hgP)C(0`XrU{s+{s6e#x{D)-mZNbE9(0j>sOOhAdZKUZo054D#1Q6HiDaYLo{{|!~z z|LY@FzlK>${{+ba4R{MQkO{+pFdON4)uAe21MuPMFqIFf?($nP3<$T8ZrxggP`I;J z`~QzsS`c;}LVQcL_WwK|#U&U9MA*tiwMDD_%kx$Hzq&y8|F>n@|M%8F@b~4~V6j{u zwf{gh|6?3vV=)X!b&>x#KUMR8Rh;Ahd-v}BZ;sM~+u9th2NtW0b@&fbljb7-8N+}K zSNRtp$#2Vbz_yi#=z=wayioyUgIxub1F6aKP5iSAjG^ zG;Xeh&`Z*_{uf5tO{~cb-G*U6ZFa<~s`9Ow2Aqz0sx0UH1XPMnkM!E8^(e=yB3oa3eVKhsm;A}FvK@Bv_^Vu`SoF3NOQ txYZh_`V)wM<$5VTiglDN2W4|~^#GT!cG|ag%xVAt002ovPDHLkV1fbb7}x*+ literal 0 HcmV?d00001 diff --git a/public/icons/docs/grunt/16@2x.png b/public/icons/docs/grunt/16@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ffe45436b881738d47bfb02fec439e1e9c5bddf6 GIT binary patch literal 1058 zcmV+-1l{|IP)7doP8Cr& z6nIM+P&E~9Mi^Z`73YT}_Msf1Z5L=q74V@Mid`03I~Iab8h=(6`K21ud?N3ZAgpv3 z&WjlOryB8?ALN=C!h;w0qZ`?h7`1F4w|p1tjUtCx7nNle#Cjc!RvYk^AD3Jl@|qrJ zRzc{ABdcZ}zi}YxmmHmD8T6bTWIz|~k|D5f8_Ibgu5BFa>+9^0A*^W~$#)@AJtNeL z8`sy@dQBLkn2J_ID{o*;TRjz@Y8TmuA8uVp*{6-h?7$LKc8=UDedmUrjd8%f zsN9;AQY{a0PKfCzP7W3uls{WN|A}bk(ERjz$Ch$`3CQ%!P+8BVs5k_`gTgmCUowsz z$4Y~mjGAkw55qIro*}|KlIlOVbO9F+QmudX^3$t0N-u1!Eldnorn1}HmeWn-8`jvB zl}f(P)VPR|2gB8Icchn^|r5aDNaD^>bMj+>yk$ydCwcS z;`>j=c8S7O8O+pZPK~`e+GF=M`uU)TrE(DbeQ6R_cxylWn zS~xe!g#^ZZ#n>9ljt*zap^(1i^#QjbwuL))@8N#dppbfI^C2ER=6aBxY&?6u1w-Ej zFJHZW^A_Am;@!skt)REO%K$zsecVa%E#UK)9X|*7L_=j-7K&BxPql9Xh8z|CK~xjgNWpb`Ovo{A&LhbH ckc{wyzkGL2NL_}QSpWb407*qoM6N<$g4IUTl>h($ literal 0 HcmV?d00001 diff --git a/public/icons/docs/grunt/SOURCE b/public/icons/docs/grunt/SOURCE new file mode 100644 index 00000000..b8d4f1f1 --- /dev/null +++ b/public/icons/docs/grunt/SOURCE @@ -0,0 +1 @@ +https://github.com/gruntjs/gruntjs.com/tree/master/src/img