From 11bcab7464907f3564ebb9477c73bb38b3bb3e37 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 10:35:42 -0500 Subject: [PATCH 01/19] Update Vue.js documentation (1.0.4) --- assets/stylesheets/application-dark.css.scss | 1 + assets/stylesheets/application.css.scss | 1 + lib/docs/filters/vue/clean_html.rb | 2 +- lib/docs/filters/vue/entries.rb | 15 ++++++++++----- lib/docs/scrapers/vue.rb | 2 +- 5 files changed, 14 insertions(+), 7 deletions(-) diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss index 66cd7c72..e1dfe466 100644 --- a/assets/stylesheets/application-dark.css.scss +++ b/assets/stylesheets/application-dark.css.scss @@ -71,5 +71,6 @@ 'pages/socketio', 'pages/sphinx', 'pages/underscore', + 'pages/vue', 'pages/yard', 'pages/yii'; diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index 09580553..dbc803fb 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -71,5 +71,6 @@ 'pages/socketio', 'pages/sphinx', 'pages/underscore', + 'pages/vue', 'pages/yard', 'pages/yii'; diff --git a/lib/docs/filters/vue/clean_html.rb b/lib/docs/filters/vue/clean_html.rb index 87e5bfa7..980eaea4 100644 --- a/lib/docs/filters/vue/clean_html.rb +++ b/lib/docs/filters/vue/clean_html.rb @@ -6,7 +6,7 @@ module Docs at_css('h1').content = 'Vue.js' if root_page? - css('#demo').remove + css('.demo', '.guide-links', '.footer').remove # Remove code highlighting css('figure').each do |node| diff --git a/lib/docs/filters/vue/entries.rb b/lib/docs/filters/vue/entries.rb index 5a54e1b8..5499b109 100644 --- a/lib/docs/filters/vue/entries.rb +++ b/lib/docs/filters/vue/entries.rb @@ -2,7 +2,7 @@ module Docs class Vue class EntriesFilter < Docs::EntriesFilter def get_name - at_css('h1').content + at_css('h1').content.presence || 'API' end def get_type @@ -15,11 +15,16 @@ module Docs def additional_entries return [] if slug.start_with?('guide') + type = nil - css('h3').map do |node| - name = node.content.strip - name.sub! %r{\(.*\)}, '()' - [name, node['id'], "API: #{self.name}"] + css('h2, h3').each_with_object [] do |node, entries| + if node.name == 'h2' + type = node.content.strip + else + name = node.content.strip + name.sub! %r{\(.*\)}, '()' + entries << [name, node['id'], "API: #{type}"] + end end end end diff --git a/lib/docs/scrapers/vue.rb b/lib/docs/scrapers/vue.rb index b084fbf3..c7d5b70e 100644 --- a/lib/docs/scrapers/vue.rb +++ b/lib/docs/scrapers/vue.rb @@ -3,7 +3,7 @@ module Docs self.name = 'Vue.js' self.slug = 'vue' self.type = 'vue' - self.version = '0.12.14' + self.version = '1.0.4' self.base_url = 'http://vuejs.org' self.root_path = '/guide/index.html' self.initial_paths = %w(/api/index.html) From f28f6e8e6b45fa4ec154e6fffaeadbb34ca95a4c Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 10:37:35 -0500 Subject: [PATCH 02/19] Update Modernizr documentation (3.2.0) --- lib/docs/scrapers/modernizr.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/modernizr.rb b/lib/docs/scrapers/modernizr.rb index ee1a4bb5..b1e76ddd 100644 --- a/lib/docs/scrapers/modernizr.rb +++ b/lib/docs/scrapers/modernizr.rb @@ -2,7 +2,7 @@ module Docs class Modernizr < UrlScraper self.name = 'Modernizr' self.type = 'modernizr' - self.version = '3.1.0' + self.version = '3.2.0' self.base_url = 'https://modernizr.com/docs/' html_filters.push 'modernizr/entries', 'modernizr/clean_html', 'title' From 15eb4cd5dc972abf5ee76247a3445fd75f29432f Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 10:47:09 -0500 Subject: [PATCH 03/19] Update Rust documentation (1.4.0) --- lib/docs/scrapers/rust.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/rust.rb b/lib/docs/scrapers/rust.rb index 54c79da1..04b279ac 100644 --- a/lib/docs/scrapers/rust.rb +++ b/lib/docs/scrapers/rust.rb @@ -1,7 +1,7 @@ module Docs class Rust < UrlScraper self.type = 'rust' - self.version = '1.3.0' + self.version = '1.4.0' self.base_url = 'http://doc.rust-lang.org/' self.root_path = 'book/index.html' self.initial_paths = %w( From 146d84a9aa59e8ebdf5005df544506ae8773b0e1 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 10:49:01 -0500 Subject: [PATCH 04/19] Update Apache HTTP Server documentation (2.4.17) --- lib/docs/scrapers/apache.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/apache.rb b/lib/docs/scrapers/apache.rb index 1c75a11c..34ed3434 100644 --- a/lib/docs/scrapers/apache.rb +++ b/lib/docs/scrapers/apache.rb @@ -3,7 +3,7 @@ module Docs self.name = 'Apache HTTP Server' self.slug = 'apache_http_server' self.type = 'apache' - self.version = '2.4.12' + self.version = '2.4.17' self.base_url = 'http://httpd.apache.org/docs/2.4/en/' self.links = { home: 'http://httpd.apache.org/' From 17f6d31bbd9ebdf2a850765b63c8381fbeb342f7 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 10:56:45 -0500 Subject: [PATCH 05/19] Update Node.js documentation (5.0.0) --- assets/javascripts/templates/pages/about_tmpl.coffee | 2 +- lib/docs/scrapers/node.rb | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index c1242600..d5f4344e 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -264,7 +264,7 @@ credits = [ 'Node.js', 'Joyent, Inc. and other Node contributors
Node.js is a trademark of Joyent, Inc.', 'MIT', - 'https://raw.github.com/joyent/node/master/LICENSE' + 'https://raw.githubusercontent.com/nodejs/node/master/LICENSE' ], [ 'Nokogiri', '2008-2014 2014 Aaron Patterson, Mike Dalessio, Charles Nutter, Sergio Arbeo, Patrick Mahoney, Yoko Harada, Akinori Musha', diff --git a/lib/docs/scrapers/node.rb b/lib/docs/scrapers/node.rb index 7c849b96..3c599794 100644 --- a/lib/docs/scrapers/node.rb +++ b/lib/docs/scrapers/node.rb @@ -3,11 +3,11 @@ module Docs self.name = 'Node.js' self.slug = 'node' self.type = 'node' - self.version = '4.2.1' + self.version = '5.0.0' self.base_url = 'https://nodejs.org/api/' self.links = { home: 'https://nodejs.org/', - code: 'https://github.com/joyent/node' + code: 'https://github.com/nodejs/node' } html_filters.push 'node/clean_html', 'node/entries', 'title' @@ -19,7 +19,9 @@ module Docs options[:attribution] = <<-HTML © Joyent, Inc. and other Node contributors
- Licensed under the MIT License. + Licensed under the MIT License.
+ Node.js is a trademark of Joyent, Inc. and is used with its permission.
+ We are not endorsed by or affiliated with Joyent. HTML end end From a91a2dee0591b372be0535e918071f3e57f44d26 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 11:00:17 -0500 Subject: [PATCH 06/19] Add Node.js LTS documentation --- assets/stylesheets/global/_icons.scss | 3 ++- lib/docs/scrapers/node_lts.rb | 9 +++++++++ 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 lib/docs/scrapers/node_lts.rb diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 113a4e3a..ef72511f 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -34,7 +34,8 @@ ._icon-dom_events:before { background-position: -3rem -1rem; } ._icon-javascript:before { background-position: -4rem -1rem; } ._icon-backbone:before { background-position: -5rem -1rem; @extend %darkIconFix !optional; } -._icon-node:before { background-position: -6rem -1rem; } +._icon-node:before, +._icon-node_lts:before { background-position: -6rem -1rem; } ._icon-sass:before { background-position: -7rem -1rem; } ._icon-less:before { background-position: -8rem -1rem; } ._icon-angular:before { background-position: -9rem -1rem; } diff --git a/lib/docs/scrapers/node_lts.rb b/lib/docs/scrapers/node_lts.rb new file mode 100644 index 00000000..cd39f6fd --- /dev/null +++ b/lib/docs/scrapers/node_lts.rb @@ -0,0 +1,9 @@ +module Docs + class NodeLts < Node + self.name = 'Node.js (LTS)' + self.slug = 'node_lts' + self.type = 'node' + self.version = '4.2.1' + self.base_url = 'https://nodejs.org/dist/v4.2.1/docs/api/' + end +end From edb09cc2dfc83098946b53eb1f7f99fb1e00c3ae Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 15:10:40 -0500 Subject: [PATCH 07/19] End Jetbrains sponsorship --- README.md | 2 +- assets/images/jetbrains-bw.png | Bin 1395 -> 0 bytes assets/images/jetbrains-bw@2x.png | Bin 3307 -> 0 bytes assets/images/jetbrains.png | Bin 2377 -> 0 bytes assets/images/jetbrains@2x.png | Bin 5165 -> 0 bytes .../javascripts/templates/notif_tmpl.coffee | 1 - .../templates/pages/about_tmpl.coffee | 4 +- .../templates/pages/root_tmpl.coffee.erb | 43 ++---------------- assets/stylesheets/components/_content.scss | 24 ---------- views/manifest.erb | 4 -- 10 files changed, 7 insertions(+), 71 deletions(-) delete mode 100644 assets/images/jetbrains-bw.png delete mode 100644 assets/images/jetbrains-bw@2x.png delete mode 100644 assets/images/jetbrains.png delete mode 100644 assets/images/jetbrains@2x.png diff --git a/README.md b/README.md index 33b782b8..5f68f931 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ DevDocs combines multiple API documentations in a fast, organized, and searchable interface. * Created by [Thibaut Courouble](http://thibaut.me) -* Supported by [JetBrains](http://out.devdocs.io/s/jetbrains) and [Code School](http://out.devdocs.io/s/code-school) +* Sponsored by [Code School](http://out.devdocs.io/s/code-school) Keep track of development and community news: diff --git a/assets/images/jetbrains-bw.png b/assets/images/jetbrains-bw.png deleted file mode 100644 index 1135f004de226914dfb9b604d09a5cf9b2b6947b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1395 zcmV-(1&sQMP)x^v=ecbuZC%U20cMg#Rzt?B3s{+ellDIMQbf|yDVpe(p~3ybP1FR! z0?7u!3|U-6jR~pKEuG9QvI<1fvaO{x{+S8UEoiqfm@G{PZE0_N@ALeGwlCTyjJ|UH z{Bqu$laqXtlf$*8mW9u({x}~obIrVs-itJt;u#v4S?eF9LI%9tj0{Yb$3Ko|$Hap= z%rva2NR|Iz1LH{g1z^z2GD*5BwHg3N8Ksm_2;trSf%l6k9i1X3vXn84aTM?|k_fXY zW{hz4o)5qr=3%E9c(hmV(enoSi-wq>W-iUL0|8raJMAgItz>`rY+{Rj;`IjCW!r6s zdo9>az&N+Xb-9+pIgARn27gK3OG$9pwH4eBK#6O1uNE%mhM>v)`O5q$aUYiH34d3o zsn&Xr2~um;X?Prg#Dh-VrBAk}&V8|a!6pa}2I}<6x;mQ~;|C|M?$|~~xu=sF?79;3 zj#Kvs9B_l{wwkDN`<#wV@`L1pY5rpA1}-&6OmrjAi$auB3Qkup8amsNe=h@?2Y!*i zlb3)7JOI0h+hV}1XH29J19^pXVk4mB$!n2RgYJr}cu2d{n`WS10D71#5cE8(T~M}A z(Gk0?>sYi%B1Y+3`B(TQXgLW0S*4|%k{}3>z{prGHj83&8Z$HkuQ~OJT^o(4Su~A4n4*Aam^!Z3H>P2q4sgHt`Rg zm#=0bks*DHTkQkn0m%%fXcGoOyn(+!|-pXrdV%KK&?F>n*hG$(EGtBP6AM8@>#V>-x#{%0A+$dEJv1>8?- zasx~=P?8D@!rz$Rn`-^L-W&JD11tneb>A&v?|%gCk*=Qd$kuE14w+K#VRfi)v%l6KnjX;kdVodK3aq!>8o@U2?)X@AL1Xg> zU96Jb5bZkh=)TLIFK|5jnRq4dP&IfLIYHa#*9t9UlvxQoSG;@(tNQ0!$sCi~~(%-_`?TsX5g7j-)i zaKG$FWqDCKF_Vn^RQ@Iak@x-Jh+XGunGbP4llV-MeuzC{bvXZ|e!?`yZ@|vD?$Nk2 z8Z<30pUdR*dA?lp_|Y?XAWK;)04>>eS1;hWq(6|u>?mr z1dBz0KHVeF;w08yYGnlg|MuH*e2DNwS~Hq{3^Io@n)(8hR3*{}(*wtGJKWAY{d67H#>&3-Dm zz&-7{?OE62SM%Y*hA@}W%tpu@$>eJ8V2YJ~$}vWmOc;mYVWyl51`w{PaL$!z!}ZiB z!;U&lKUZnPj?CrSCCohG*E1Rpr?#ixUfUDi!beV+BIS6&OT~b9)>OZEcE$xlO{IUF zxgh@>_+0BnW}@20@M4{&n=#B(HR;UZFWtrr@ITuK^{AY4??wOs002ovPDHLkV1n`{ BwGIFP diff --git a/assets/images/jetbrains-bw@2x.png b/assets/images/jetbrains-bw@2x.png deleted file mode 100644 index a5d8c217d86b99c09a2fc36cb413a54448898a7b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3307 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 diff --git a/assets/images/jetbrains.png b/assets/images/jetbrains.png deleted file mode 100644 index 2412249897df777d795053e0fa54aa3456e04b82..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2377 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 bBuoAu;TN(|5P%z*00000NkvXXu0mjf^4!^8 diff --git a/assets/javascripts/templates/notif_tmpl.coffee b/assets/javascripts/templates/notif_tmpl.coffee index 6b428f99..b71dca94 100644 --- a/assets/javascripts/templates/notif_tmpl.coffee +++ b/assets/javascripts/templates/notif_tmpl.coffee @@ -36,7 +36,6 @@ app.templates.notifThanks = -> textNotif """ Hi there! """, """

Like DevDocs? Check out these awesome companies who are making it possible:

    -
  • JetBrains — We make software development a more productive and enjoyable experience through smart IDEs and code editors.
  • Code School — Learn new skills from the comfort of your own browser. Offering more than 45 courses covering JavaScript, HTML/CSS, Ruby, Git, and iOS for only $29/month.

Have a great day :) """ diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index d5f4344e..af5a0bf7 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -13,7 +13,7 @@ app.templates.aboutPage = -> """

DevDocs combines multiple API documentations in a fast, organized, and searchable interface.

@@ -31,7 +31,7 @@ app.templates.aboutPage = -> """

Special thanks to:

  • MaxCDN and Gauges for offering a free account to DevDocs -
  • Shopify for supporting DevDocs in the past +
  • MaxCDN, Shopify and JetBrains for sponsoring DevDocs in the past
  • Heroku and New Relic for providing awesome free service
  • Daniel Bruce for the Entypo pictograms
  • Jeremy Kratz for the C/C++ logo diff --git a/assets/javascripts/templates/pages/root_tmpl.coffee.erb b/assets/javascripts/templates/pages/root_tmpl.coffee.erb index 3725eae4..ded556cb 100644 --- a/assets/javascripts/templates/pages/root_tmpl.coffee.erb +++ b/assets/javascripts/templates/pages/root_tmpl.coffee.erb @@ -1,33 +1,3 @@ -jetBrainsLink = (className) -> - type = jetBrainsType() - path = "/#{type}" if type - - """ - - - #{JETBRAINS_INFO[type || 'default']} - - """ - -JETBRAINS_INFO = - ruby: 'Developing in Ruby? Boost your productivity with RubyMine, a powerful IDE with smart coding assistance and advanced testing and debugging features.' - python: 'Developing in Python? Enjoy productive development with PyCharm, an intelligent Python IDE offering unique coding experience.' - c: 'Developing in C? Now benefit from CLion, a C/C++ IDE enhancing your productivity with on-thy-fly static analysis and automated refactorings.' - web: 'Doing client-side development? Try WebStorm, an IDE that really understands JavaScript and modern frameworks like AngularJS and boosts your productivity.' - default: 'JetBrains makes software development a more productive and enjoyable experience through smart IDEs and code editors.' - -jetBrainsType = -> - docs = if app.settings then app.settings.getDocs() else [] - - if docs.indexOf('ruby') != -1 - 'ruby' - else if docs.indexOf('python') != -1 || docs.indexOf('python2') != -1 - 'python' - else if docs.indexOf('c') != -1 or docs.indexOf('cpp') != -1 - 'c' - else if docs.indexOf('javascript') != -1 or docs.indexOf('jquery') != -1 - 'web' - codeSchoolLink = (className) -> """ @@ -37,10 +7,7 @@ codeSchoolLink = (className) -> """ app.templates.splash = -> """
    DevDocs
    -
    - #{jetBrainsLink '_splash-sponsor'} - #{codeSchoolLink '_splash-sponsor'} -
    +
    #{codeSchoolLink '_splash-sponsor'}
    """ <% if App.development? %> @@ -63,8 +30,7 @@ app.templates.intro = """
    LICENSE files.
  • If you like the app, please consider supporting the project on Gratipay. Thanks! -

    - #{jetBrainsLink '_intro-sponsor'} #{codeSchoolLink '_intro-sponsor'} +

    #{codeSchoolLink '_intro-sponsor'}

    Happy coding! """ @@ -87,8 +53,7 @@ app.templates.intro = """

  • If you like the app, please consider supporting the project on Gratipay. Thanks! -

    - #{jetBrainsLink '_intro-sponsor'} #{codeSchoolLink '_intro-sponsor'} +

    #{codeSchoolLink '_intro-sponsor'}

    Happy coding! """ @@ -116,7 +81,7 @@ app.templates.mobileIntro = """

  • DevDocs is open source

    Happy coding! -

    #{jetBrainsLink '_intro-sponsor'} #{codeSchoolLink '_intro-sponsor'}

    +

    #{codeSchoolLink '_intro-sponsor'}

    Stop showing this message """ diff --git a/assets/stylesheets/components/_content.scss b/assets/stylesheets/components/_content.scss index 7f652cc0..2d55b6ad 100644 --- a/assets/stylesheets/components/_content.scss +++ b/assets/stylesheets/components/_content.scss @@ -456,30 +456,6 @@ :hover > & { opacity: 1; } } -._jetbrains-logo { - top: 1px; - width: 5rem; - background-image: image-url('jetbrains.png'); - background-size: 5rem 1.5rem; - - @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - background-image: image-url('jetbrains@2x.png'); - } -} - -._splash-sponsor > ._jetbrains-logo { - background-image: image-url('jetbrains-bw.png'); - - @if $style == 'dark' { - filter: invert(100%); - -webkit-filter: invert(100%); - } - - @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - background-image: image-url('jetbrains-bw@2x.png'); - } -} - ._code-school-logo { width: 7rem; background-image: image-url('code-school.png'); diff --git a/views/manifest.erb b/views/manifest.erb index 870b0381..db119a70 100644 --- a/views/manifest.erb +++ b/views/manifest.erb @@ -8,10 +8,6 @@ CACHE: <%= stylesheet_path 'application-dark' %> <%= image_path 'icons.png' %> <%= image_path 'icons@2x.png' %> -<%= image_path 'jetbrains.png' %> -<%= image_path 'jetbrains@2x.png' %> -<%= image_path 'jetbrains-bw.png' %> -<%= image_path 'jetbrains-bw@2x.png' %> <%= image_path 'code-school.png' %> <%= image_path 'code-school@2x.png' %> <%= image_path 'code-school-bw.png' %> From a23e3c02a42b2556fd163e0b8494d2592c340168 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 1 Nov 2015 17:34:46 -0500 Subject: [PATCH 08/19] Use pageX instead of clientX --- assets/javascripts/views/layout/resizer.coffee | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/assets/javascripts/views/layout/resizer.coffee b/assets/javascripts/views/layout/resizer.coffee index f3957232..b3c22cc9 100644 --- a/assets/javascripts/views/layout/resizer.coffee +++ b/assets/javascripts/views/layout/resizer.coffee @@ -41,9 +41,9 @@ class app.views.Resizer extends app.View onDrag: (event) => return if @lastDrag and @lastDrag > Date.now() - 50 @lastDrag = Date.now() - @resize(event.clientX, false) + @resize(event.pageX, false) return onDragEnd: (event) => - @resize(event.clientX or (event.screenX - window.screenX), true) + @resize(event.pageX or (event.screenX - window.screenX), true) return From fe35117e9e9652b8df28dd15d1791a373de29939 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 09:24:49 -0500 Subject: [PATCH 09/19] End Code School sponsorship --- README.md | 1 - assets/images/code-school-bw.png | Bin 1244 -> 0 bytes assets/images/code-school-bw@2x.png | Bin 3284 -> 0 bytes assets/images/code-school.png | Bin 2583 -> 0 bytes assets/images/code-school@2x.png | Bin 5644 -> 0 bytes assets/javascripts/app/app.coffee | 1 - .../javascripts/templates/notif_tmpl.coffee | 8 -- .../templates/pages/about_tmpl.coffee | 3 +- .../templates/pages/root_tmpl.coffee.erb | 15 +-- assets/stylesheets/components/_content.scss | 90 ------------------ views/manifest.erb | 4 - 11 files changed, 2 insertions(+), 120 deletions(-) delete mode 100644 assets/images/code-school-bw.png delete mode 100644 assets/images/code-school-bw@2x.png delete mode 100644 assets/images/code-school.png delete mode 100644 assets/images/code-school@2x.png diff --git a/README.md b/README.md index 5f68f931..6e1945ac 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,6 @@ DevDocs combines multiple API documentations in a fast, organized, and searchable interface. * Created by [Thibaut Courouble](http://thibaut.me) -* Sponsored by [Code School](http://out.devdocs.io/s/code-school) Keep track of development and community news: diff --git a/assets/images/code-school-bw.png b/assets/images/code-school-bw.png deleted file mode 100644 index ad9179aca58658876d0e41881bf37ac7ef60063a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1244 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 diff --git a/assets/images/code-school@2x.png b/assets/images/code-school@2x.png deleted file mode 100644 index 125894e88de6f02d9d6644cf28a79258841464c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5644 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 myI$aR6Xo}eh7?jr-SoeVgkF8j1)IeH0000 Twitter, Facebook, Reddit, etc.
    Thanks :) """ -app.templates.notifThanks = -> - textNotif """ Hi there! """, - """

    Like DevDocs? Check out these awesome companies who are making it possible: -

      -
    • Code School — Learn new skills from the comfort of your own browser. Offering more than 45 courses covering JavaScript, HTML/CSS, Ruby, Git, and iOS for only $29/month. -
    -

    Have a great day :) """ - app.templates.notifUpdateDocs = -> textNotif """ Documentation updates available. """, """ Install them as soon as possible to avoid broken pages. """ diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index af5a0bf7..bcf46dd8 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -13,7 +13,6 @@ app.templates.aboutPage = -> """

    DevDocs combines multiple API documentations in a fast, organized, and searchable interface.

    @@ -31,7 +30,7 @@ app.templates.aboutPage = -> """

    Special thanks to:

    • MaxCDN and Gauges for offering a free account to DevDocs -
    • MaxCDN, Shopify and JetBrains for sponsoring DevDocs in the past +
    • MaxCDN, Shopify, JetBrains and Code School for sponsoring DevDocs in the past
    • Heroku and New Relic for providing awesome free service
    • Daniel Bruce for the Entypo pictograms
    • Jeremy Kratz for the C/C++ logo diff --git a/assets/javascripts/templates/pages/root_tmpl.coffee.erb b/assets/javascripts/templates/pages/root_tmpl.coffee.erb index ded556cb..9349b6dc 100644 --- a/assets/javascripts/templates/pages/root_tmpl.coffee.erb +++ b/assets/javascripts/templates/pages/root_tmpl.coffee.erb @@ -1,14 +1,4 @@ -codeSchoolLink = (className) -> """ - - - With more than 45 courses covering JavaScript, HTML/CSS, Ruby, Git, and iOS, Code School pairs experienced instructors with engaging content. Start learning at codeschool.com. - -""" - -app.templates.splash = -> """ -
      DevDocs
      -
      #{codeSchoolLink '_splash-sponsor'}
      -""" +app.templates.splash = """
      DevDocs
      """ <% if App.development? %> app.templates.intro = """ @@ -30,7 +20,6 @@ app.templates.intro = """ LICENSE files.
    • If you like the app, please consider supporting the project on Gratipay. Thanks! -

      #{codeSchoolLink '_intro-sponsor'}

      Happy coding! """ @@ -53,7 +42,6 @@ app.templates.intro = """

    • If you like the app, please consider supporting the project on Gratipay. Thanks! -

      #{codeSchoolLink '_intro-sponsor'}

      Happy coding! """ @@ -81,7 +69,6 @@ app.templates.mobileIntro = """

    • DevDocs is open source

      Happy coding! -

      #{codeSchoolLink '_intro-sponsor'}

      Stop showing this message """ diff --git a/assets/stylesheets/components/_content.scss b/assets/stylesheets/components/_content.scss index 2d55b6ad..adc2522d 100644 --- a/assets/stylesheets/components/_content.scss +++ b/assets/stylesheets/components/_content.scss @@ -72,31 +72,6 @@ @extend ._booting:before, %user-select-none; } -._splash-sponsors { - position: absolute; - top: 50%; - left: 0; - right: 0; - margin-top: 1.25rem; - text-align: center; - line-height: 2rem; -} - -._splash-sponsor { - position: relative; - display: inline-block; - vertical-align: top; - margin: .5rem 1.5rem; - - ._logo-thx { opacity: .3; } - &:hover ._logo-thx { opacity: .6; } - - ._logo-info { - right: 50%; - margin-right: -9rem; - } -} - // // Intro // @@ -132,22 +107,6 @@ ._intro-link { cursor: pointer; } -._intro-sponsors { - position: absolute; - bottom: 1rem; - right: 1rem; - margin: 0; - line-height: 1.5rem; -} - -._intro-sponsor { - display: inline-block; - vertical-align: top; - margin-left: .5em; - - &:hover { text-decoration: none; } -} - // // Error // @@ -429,52 +388,3 @@ vertical-align: text-top; margin-left: .25rem; } - -._logo-thx { - position: relative; - display: inline-block; - vertical-align: top; - height: 1.5rem; - overflow: hidden; - text-indent: -20rem; - background-position: center center; - background-repeat: no-repeat; -} - -._logo-info { - top: auto; - bottom: 100%; - right: 0; - max-width: 18.25rem; - margin-bottom: .75rem; - padding: .5rem .75rem; - line-height: 1.375rem; - text-align: left; - pointer-events: none; - @extend %notif; - - :hover > & { opacity: 1; } -} - -._code-school-logo { - width: 7rem; - background-image: image-url('code-school.png'); - background-size: 7rem 1.25rem; - - @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - background-image: image-url('code-school@2x.png'); - } -} - -._splash-sponsor > ._code-school-logo { - background-image: image-url('code-school-bw.png'); - - @if $style == 'dark' { - filter: invert(100%); - -webkit-filter: invert(100%); - } - - @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { - background-image: image-url('code-school-bw@2x.png'); - } -} diff --git a/views/manifest.erb b/views/manifest.erb index db119a70..665426eb 100644 --- a/views/manifest.erb +++ b/views/manifest.erb @@ -8,10 +8,6 @@ CACHE: <%= stylesheet_path 'application-dark' %> <%= image_path 'icons.png' %> <%= image_path 'icons@2x.png' %> -<%= image_path 'code-school.png' %> -<%= image_path 'code-school@2x.png' %> -<%= image_path 'code-school-bw.png' %> -<%= image_path 'code-school-bw@2x.png' %> <%= asset_path 'docs.js' %> <%= doc_index_urls.join "\n" %> From 1621a69198d5526b945ea6b8e958486efef5f990 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 09:28:07 -0500 Subject: [PATCH 10/19] Update React documentation (0.14.2) --- lib/docs/scrapers/react.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/react.rb b/lib/docs/scrapers/react.rb index 7e9bf8ff..78bf2455 100644 --- a/lib/docs/scrapers/react.rb +++ b/lib/docs/scrapers/react.rb @@ -2,7 +2,7 @@ module Docs class React < UrlScraper self.name = 'React' self.type = 'react' - self.version = '0.14.0' + self.version = '0.14.2' self.base_url = 'https://facebook.github.io/react/' self.root_path = 'docs/getting-started.html' self.links = { From b9f1564537bcd7aa86fcba2a9f4b4fa05f0a9dbd Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 09:29:37 -0500 Subject: [PATCH 11/19] Update Mongoose documentation (4.2.4) --- lib/docs/scrapers/mongoose.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/mongoose.rb b/lib/docs/scrapers/mongoose.rb index f20b3887..8143b35a 100644 --- a/lib/docs/scrapers/mongoose.rb +++ b/lib/docs/scrapers/mongoose.rb @@ -2,7 +2,7 @@ module Docs class Mongoose < UrlScraper self.name = 'Mongoose' self.type = 'mongoose' - self.version = '4.1.6' + self.version = '4.2.4' self.base_url = 'http://mongoosejs.com/docs/' self.root_path = 'index.html' self.initial_paths = %w(guide.html api.html) From c366cd7a7ed9a58444b6ea6dcd6bceed12692b78 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 09:30:12 -0500 Subject: [PATCH 12/19] Update Vue.js documentation (1.0.7) --- lib/docs/scrapers/vue.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/vue.rb b/lib/docs/scrapers/vue.rb index c7d5b70e..00d65be7 100644 --- a/lib/docs/scrapers/vue.rb +++ b/lib/docs/scrapers/vue.rb @@ -3,7 +3,7 @@ module Docs self.name = 'Vue.js' self.slug = 'vue' self.type = 'vue' - self.version = '1.0.4' + self.version = '1.0.7' self.base_url = 'http://vuejs.org' self.root_path = '/guide/index.html' self.initial_paths = %w(/api/index.html) From c3bd3638115076d28aefd0c80463fa5be30029c4 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 09:31:57 -0500 Subject: [PATCH 13/19] Update React Native documentation (0.14.1) --- lib/docs/scrapers/react_native.rb | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/docs/scrapers/react_native.rb b/lib/docs/scrapers/react_native.rb index 98b8bf01..54dd5af2 100644 --- a/lib/docs/scrapers/react_native.rb +++ b/lib/docs/scrapers/react_native.rb @@ -3,7 +3,7 @@ module Docs self.name = 'React Native' self.slug = 'react_native' self.type = 'react' - self.version = '0.12.0' + self.version = '0.14.1' self.base_url = 'https://facebook.github.io/react-native/docs/' self.root_path = 'getting-started.html' self.links = { From a796be92023bf15d2e5fd5105c3ac07ccf2be9d0 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 09:43:14 -0500 Subject: [PATCH 14/19] Update React Django documentation (1.8.6) Fixes #280. --- lib/docs/filters/django/entries.rb | 4 ---- lib/docs/scrapers/django.rb | 2 +- 2 files changed, 1 insertion(+), 5 deletions(-) diff --git a/lib/docs/filters/django/entries.rb b/lib/docs/filters/django/entries.rb index 1633cf69..61a62076 100644 --- a/lib/docs/filters/django/entries.rb +++ b/lib/docs/filters/django/entries.rb @@ -37,10 +37,6 @@ module Docs entries end - - def include_default_entry? - at_css('#sidebar a[href="index"]') || at_css('h1 ~ .section') - end end end end diff --git a/lib/docs/scrapers/django.rb b/lib/docs/scrapers/django.rb index fe1877a2..55b7888d 100644 --- a/lib/docs/scrapers/django.rb +++ b/lib/docs/scrapers/django.rb @@ -2,7 +2,7 @@ module Docs class Django < FileScraper self.name = 'Django' self.type = 'sphinx' - self.version = '1.8.4' + self.version = '1.8.6' self.dir = '/Users/Thibaut/DevDocs/Docs/Django' self.base_url = 'https://docs.djangoproject.com/en/1.8/' self.root_path = 'index.html' From 1ff92971a5bc23521dd13d21fd6c3a87d8f72b76 Mon Sep 17 00:00:00 2001 From: Eddy Shure Date: Thu, 22 Oct 2015 13:12:00 +0200 Subject: [PATCH 15/19] Add Elixir documentation --- assets/javascripts/views/pages/elixir.coffee | 6 +++ assets/stylesheets/application-dark.css.scss | 1 + assets/stylesheets/application.css.scss | 1 + assets/stylesheets/pages/_elixir.scss | 4 ++ lib/docs/filters/elixir/clean_html.rb | 50 +++++++++++++++++++ lib/docs/filters/elixir/entries.rb | 35 +++++++++++++ lib/docs/scrapers/elixir.rb | 36 +++++++++++++ public/icons/docs/elixir/16.png | Bin 0 -> 1361 bytes public/icons/docs/elixir/16@2x.png | Bin 0 -> 2369 bytes public/icons/docs/elixir/SOURCE | 2 + 10 files changed, 135 insertions(+) create mode 100644 assets/javascripts/views/pages/elixir.coffee create mode 100644 assets/stylesheets/pages/_elixir.scss create mode 100644 lib/docs/filters/elixir/clean_html.rb create mode 100644 lib/docs/filters/elixir/entries.rb create mode 100644 lib/docs/scrapers/elixir.rb create mode 100644 public/icons/docs/elixir/16.png create mode 100644 public/icons/docs/elixir/16@2x.png create mode 100644 public/icons/docs/elixir/SOURCE diff --git a/assets/javascripts/views/pages/elixir.coffee b/assets/javascripts/views/pages/elixir.coffee new file mode 100644 index 00000000..f46e2517 --- /dev/null +++ b/assets/javascripts/views/pages/elixir.coffee @@ -0,0 +1,6 @@ +#= require views/pages/base + +class app.views.ElixirPage extends app.views.BasePage + prepare: -> + @highlightCode @findAll('pre.elixir'), 'elixir' + return diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss index e1dfe466..acb915b0 100644 --- a/assets/stylesheets/application-dark.css.scss +++ b/assets/stylesheets/application-dark.css.scss @@ -38,6 +38,7 @@ 'pages/coffeescript', 'pages/d3', 'pages/drupal', + 'pages/elixir', 'pages/ember', 'pages/express', 'pages/git', diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index dbc803fb..a262f124 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -38,6 +38,7 @@ 'pages/coffeescript', 'pages/d3', 'pages/drupal', + 'pages/elixir', 'pages/ember', 'pages/express', 'pages/git', diff --git a/assets/stylesheets/pages/_elixir.scss b/assets/stylesheets/pages/_elixir.scss new file mode 100644 index 00000000..a05cb6c3 --- /dev/null +++ b/assets/stylesheets/pages/_elixir.scss @@ -0,0 +1,4 @@ +._elixir { + @extend %simple; + h3 { @extend %block-label; } +} diff --git a/lib/docs/filters/elixir/clean_html.rb b/lib/docs/filters/elixir/clean_html.rb new file mode 100644 index 00000000..6031967b --- /dev/null +++ b/lib/docs/filters/elixir/clean_html.rb @@ -0,0 +1,50 @@ +module Docs + class Elixir + class CleanHtmlFilter < Filter + def call + + # Strip h1 content + css('h1').each do |node| + node.content = node.content.strip + end + + # Make subtitles smaller + css('h2').each do |node| + node.name = 'h4' + end + + # Remove footer + at_css('footer').remove + + # Remove behaviour after module name + css('h1').each do |node| + if !(node.has_attribute?('id')) + node.content = node.content.split(" ")[0] + end + end + + # Remove links from summary headings + css('.summary > h4 > a').each do |node| + node.delete('href') + end + + # Add elixir class to each pre for syntax highlighting + css('pre').each do |node| + node['class'] = "elixir" + end + + # Rewrite .detail -> .method-detail + css('.detail').each do |node| + node['class'] = "method-detail" + end + + # Change .detail-header to h3 + css('.detail-header .signature').each do |node| + node.name = 'h3' + end + + doc + end + end + end +end diff --git a/lib/docs/filters/elixir/entries.rb b/lib/docs/filters/elixir/entries.rb new file mode 100644 index 00000000..ee830983 --- /dev/null +++ b/lib/docs/filters/elixir/entries.rb @@ -0,0 +1,35 @@ +module Docs + class Elixir + class EntriesFilter < Docs::EntriesFilter + def get_name + at_css('h1').content.gsub('behaviour', ' ').strip + end + + def get_type + return nil if (slug.split("#")[1] == "functions") + slug.split("#")[1] + end + + def additional_entries + return [] if root_page? + + entries = [] + + # Add itself (moduledoc) to entries + klass = at_css('h1').content.strip.split(" ")[0] + entries << [klass, klass, name] + + # Add functions + css('.summary-functions .summary-signature a').each do |node| + entries << [(name + node['href']), node['href'][1..-1], name] + end + + return entries + end + + def include_default_entry? + !initial_page? + end + end + end +end diff --git a/lib/docs/scrapers/elixir.rb b/lib/docs/scrapers/elixir.rb new file mode 100644 index 00000000..e427002f --- /dev/null +++ b/lib/docs/scrapers/elixir.rb @@ -0,0 +1,36 @@ +module Docs + class Elixir < UrlScraper + self.name = 'Elixir' + self.type = 'elixir' + self.version = '1.1.1' + self.base_url = 'http://elixir-lang.org/docs/stable/elixir/' + self.root_path = 'extra-api-reference.html' + self.links = { + home: 'https://elixir-lang.org/', + code: 'https://github.com/elixir-lang/elixir' + } + + html_filters.push 'elixir/clean_html', 'elixir/entries', 'title' + + # Skip exceptions + options[:skip_patterns] = [/Error/] + # Skip protocols + options[:skip] = %w( + Collectable.html + Enumerable.html + Inspect.html + List.Chars.html + String.Chars.html + ) + + options[:follow_links] = ->(filter) { filter.root_page? } + options[:container] = "#content" + options[:title] = false + options[:root_title] = 'Elixir' + + options[:attribution] = <<-HTML + © 2012 Plataformatec
      + Licensed under the Apache License, Version 2.0 + HTML + end +end diff --git a/public/icons/docs/elixir/16.png b/public/icons/docs/elixir/16.png new file mode 100644 index 0000000000000000000000000000000000000000..eeef08a36eb019b1c786c396c356ee11716324cf GIT binary patch literal 1361 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 literal 0 HcmV?d00001 diff --git a/public/icons/docs/elixir/SOURCE b/public/icons/docs/elixir/SOURCE new file mode 100644 index 00000000..ba422b56 --- /dev/null +++ b/public/icons/docs/elixir/SOURCE @@ -0,0 +1,2 @@ +http://elixir-lang.org/docs/stable/elixir/assets/logo.png +with permission from José Valim (https://twitter.com/josevalim/status/657125748659126272) From 4ce964c1342e150c5596248165f33ed5f1004d70 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 11:22:09 -0500 Subject: [PATCH 16/19] Finish Elixir scraper --- assets/images/icons.png | Bin 33826 -> 34387 bytes assets/images/icons@2x.png | Bin 89511 -> 91408 bytes assets/javascripts/news.json | 3 ++ .../templates/pages/about_tmpl.coffee | 5 ++ assets/javascripts/views/pages/elixir.coffee | 2 +- assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_elixir.scss | 5 +- lib/docs/filters/elixir/clean_html.rb | 47 +++++++----------- lib/docs/filters/elixir/entries.rb | 41 ++++++++------- lib/docs/scrapers/elixir.rb | 27 ++++------ public/icons/docs/elixir/16.png | Bin 1361 -> 646 bytes public/icons/docs/elixir/16@2x.png | Bin 2369 -> 1750 bytes 12 files changed, 65 insertions(+), 66 deletions(-) diff --git a/assets/images/icons.png b/assets/images/icons.png index 4622399ccd7b1b4fd3ad955d9331be241fcb3212..d7340fa7d43d32769a45c7389e68f6399f19eec2 100644 GIT binary patch delta 4595 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 diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png index edf961c08e0e0f9d879f6f14a35bdb3fed9c5017..6773058750ddac42c7046e0103ee015d316cf9ba 100644 GIT binary patch delta 5687 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 delta 3775 zcmV;w4nXmc$_1yp1&|{GU2cITwIu=bPJiw}Oo!^{u?sv`|;}Uh3^;twJ%Q@_A115()(|=Ed zW-7^O(l>8lVm^Q&$ysR#sCM&bB(>yTamOX*M2xKMTHaw)l1aY|A)XvUaG|#%R#< z1pgn;6Lk7JkL4JV$a0PsFku?`)aEG76eCnqM$9$0L~ltu>NgFf_*#Q79Dsz|j~A z=}81Wn`Hpf0mjyLHLs9&DStX@yA$B=)^J; z$*&Uz(n%#qq3Fruro9#x79f#G;MT2MP+3_C{{H?jVZwv~_3$2+Ra8`9U2KDGA3Ggp zjgn%e@;Nf?4JL7$#KX$#4cjvmKkZIeR7~h!Z`!nJPup@h^LSkDet#aD=fWB}p(^2p zlNhUtaMisK69_Pr1QJeSEQabD31Lwvl#w%>pe9eA3|FpPf%f)xh>nhif`S4-8XFsd z$Kz@0;q|3UmjJ;!SohksYuFb17*>L;QBZ%o?T@nV<`^Qr`y}98$K^XYEfp7!DN4`e zTq=7({Wg${_-69h+<#;qhuh2J@M3LkZS^_O5oHZ3@u?ZBy4P+30bVD8Xr8ZNR(1I)_mqhW?O|lz76DXIDg}^x$#7NT_k|ZW}oIcI)ApB&GC2M^}D8B#5?-EE_t3a$MyOY^cwuX%GCi6I)@3Z(9kewnVXv%sBw39AGFTJix;sE zg9@;=r+J>Nt68p=Ulqy^M}CU3hY5wEqjq+7kwkdPe&Pcg9`BL+cE8#{iLfeA66Z3+ zfdQZud?uf8p^{CsS~wAF$|p-@I9z<;>7IB08Y8*raYEdfbMNnrwE zv)S79ur2ms5CP(r7_#2yOr&?Ezx?u)RghYh2itb2K>6s)Qw9*A-p|LjRDcx9C1YUVI-J`4xE|jCy-GZx}a* z2Mi1qAcZnY0lK=n0+OAb4N|F;NpE=^C`NoCf`4t0Wy_Y0T7b1(ty78kderhOX{v!; zsd4c67c0~wJ-gM(q-ym??{Wrcy)%snJ0CkN{?ZB$@i*r(nCEc>~BJ-+R&>uH6&s$y8Z zZhsB%xV(Pi!{ETDOFsjT@Idg(_yK|n5@3Tk7TmV31KUM*3f_G75|RY{lnw&ai_!LL zEKyMbQYbnK5K~vm%E~lpE$i2>huqv;sIRZrywoTzF2-y1lo&((8_P5=O|VT~ULMm& zZEY8Y^`-Zdsx1C4XjJs1wj%a1mz3C zH#HI*SGzwV<#Kx)8*7#dDnJT_GC+VRrW-eIFiFpjj*bJS!O6+VfXtmcm$@Gv9uB|# z_8SIX<2@|vUl-eI`f+k{V*2js>A`2|EWnVH|L{50TJx}^;T){>Uk{vxM1E{We1FV3 zpR=!Ooi8^I0*UxGWX6JLv~-eQGqUDECGU!PytdX1`uFI zMh0|ucf-dYe>`A|+vUrb0a54lVcLrt?Npff_;^4R3WfTGh$gUad`5bDx=sRInHBSL zOu0DhbfffkVDKj3%wNci`WBH9pMTSrZp=ELf3^SuB=HcC7Y{)hyJ52+0=`X%g^a@7 z`{m8@Lk)MYGT$(z0;EtVLkh5?qXPs20bUP?n3xzq$Ql~{X6k9Pd-rZE!#e$c4~RW` z_MilH8v%NIKb=`|(m5n5{QlCFpTo*+8(>311Z>OM3n8adVPio8Y&($z-+z^g;E?B`bkcK@t=qakV4TzfcWB~v$GSXOqnuZ1c-Zo z5p_=AiWMtB3%sYv9YmU&o3(d`VBaWOeAci66yyt@El|qdt?6vCFSt;i9bS+E;bli4 zvPKM%vP_7QWkFoM1Vk5#p?^dvhnkMdAn#HDsSjoC7y9y*()^6(QtSNY{AW!lK$H(W zDFLGVfItOEp^Sk3FF-J#50jUdELoxvl#7cCAh@Fgv9z>g?(f{W6CONxfPvR|56d)l zwbuY092~H3dRtb-fX4JDT8Zdjk|*sfFWB6@BTAC0&Ov6n=lWsc^jZaoPr%0uPO~4s}L7 z1s+a*RCE-I9%vtZg-2c?XV0Ex4l+1?{J7>VFs=m_6%}dfPnt9dL-V_^un(c z0eX6RLTPC!sOjtL1CdAsSy@?t;O-85wjV!71$T{Icy%_x&u)S zftdn`C`yBavXi~VN?F6%D;Ja*RVVNJB}c+H+4~^+L>dTAi{RUmBM?@87SQz%B-39@|oazHQ_5OewN+_?jf1MAe( z)G%!j>_eBGAb(5TTp;wIprTM&6MVks>U723&esl0#P4`*-e9+El}A);YC>CSQ!SkD zRYG-F6Eh7K)a3!cMvT+ruE=U}RD?A9EfWfmk>8UNAj*&K453hrychW1y?dIy!1xz) z`0$`pT+73?!o`ahYt{~D&Yao5F4HzBC`cy(a=BcIgMYpKLe>zFoIlHet((rJ7v%!k z6Abk|Er9ETNj3SvuN0vKQHJOE)yEvdii?@A!WnuBY)S#bAW#8PC?*sjrmUdswC@vH zY0d#mN=gC*?`hS;wwN-blK|Ol_Ddv%=K0~i4NG30OmcQxR#0#Y-1hSiD2}9FOaPMqC55Hl+aR6qrIW?RkK>{cX@P4-XHm z6d2>32T0ENdxwkwqj`2b8_&29zDMj<2+d6B5nU|lEl^0Ivb7F;0@i`&RzC>IPa>m1 zabs{+!VJ!W1zbG--cVCule`2O2Ko|&LNT2HaewCrp6Wd0Y0*f(9U?|M5t_*F6CQ_C z?Bw@_!YgIR?N!O)uqG|CWP3?!>-S~pP}|)MvB^T|?Y7#OW~}aqr}} zGJo4EC8CfB@Vfso!RD_^(|+Duuor%8k-{l?Ik+r$Wh7|tu;ia)6v*exGbb8m4N&*# zu&K7f(L`tp#mEBu=%bI|>eZ{v3l2V?&*TImO-)Terlp#Cc#ZcEtP>d-iS013kI@Pc z8AH|>ZF#eKueb@qUi@Rok(1Yu?{Jp>b%AKrIjgRBi$DF zs=g95(1+1q)mMV_!{`*sC?$xaF;h&3@fr9mMt&n_3?@Y5g>!n?Gvv7Z7c2o_tn5b1 pC&fT^e-NfkoAxw|LZMJ};NOvxZhIYy%ryW2002ovPDHLkV1f``6A}Ob diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index c2959755..62501ce6 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,5 +1,8 @@ [ [ + "2015-11-08", + "New documentation: Elixir" + ], [ "2015-10-18", "Added a \"Copy to clipboard\" button inside each code block." ], [ diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index bcf46dd8..062d4d0d 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -144,6 +144,11 @@ credits = [ '2015 Yehuda Katz, Tom Dale and Ember.js contributors', 'MIT', 'https://raw.github.com/emberjs/ember.js/master/LICENSE' + ], [ + 'Elixir', + '2012 Plataformatec', + 'Apache', + 'https://raw.githubusercontent.com/elixir-lang/elixir/master/LICENSE' ], [ 'Express', '2009-2015 TJ Holowaychuk', diff --git a/assets/javascripts/views/pages/elixir.coffee b/assets/javascripts/views/pages/elixir.coffee index f46e2517..8c6b4f99 100644 --- a/assets/javascripts/views/pages/elixir.coffee +++ b/assets/javascripts/views/pages/elixir.coffee @@ -2,5 +2,5 @@ class app.views.ElixirPage extends app.views.BasePage prepare: -> - @highlightCode @findAll('pre.elixir'), 'elixir' + @highlightCode @findAllByTag('pre'), 'elixir' return diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index ef72511f..51431421 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -116,3 +116,4 @@ ._icon-phalcon:before { background-position: -1rem -9rem; } %icon-clipboard { background-position: -2rem -9rem; } %icon-clipboard-white { background-position: -3rem -9rem; } +._icon-elixir:before { background-position: -4rem -9rem; @extend %darkIconFix !optional; } diff --git a/assets/stylesheets/pages/_elixir.scss b/assets/stylesheets/pages/_elixir.scss index a05cb6c3..4c38e936 100644 --- a/assets/stylesheets/pages/_elixir.scss +++ b/assets/stylesheets/pages/_elixir.scss @@ -1,4 +1,7 @@ ._elixir { @extend %simple; - h3 { @extend %block-label; } + + .type-detail { margin-bottom: 2em; } + .type-detail pre { margin-left: -1rem; } + ._mobile & .type-detail pre { margin-left: 0; } } diff --git a/lib/docs/filters/elixir/clean_html.rb b/lib/docs/filters/elixir/clean_html.rb index 6031967b..7b0db95d 100644 --- a/lib/docs/filters/elixir/clean_html.rb +++ b/lib/docs/filters/elixir/clean_html.rb @@ -2,45 +2,32 @@ module Docs class Elixir class CleanHtmlFilter < Filter def call + at_css('footer', '.view-source').remove - # Strip h1 content - css('h1').each do |node| - node.content = node.content.strip - end - - # Make subtitles smaller - css('h2').each do |node| + css('section section.docstring h2').each do |node| node.name = 'h4' end - # Remove footer - at_css('footer').remove - - # Remove behaviour after module name - css('h1').each do |node| - if !(node.has_attribute?('id')) - node.content = node.content.split(" ")[0] - end - end - - # Remove links from summary headings - css('.summary > h4 > a').each do |node| - node.delete('href') + css('h1 .hover-link', '.detail-link').each do |node| + node.parent['id'] = node['href'].remove('#') + node.remove end - # Add elixir class to each pre for syntax highlighting - css('pre').each do |node| - node['class'] = "elixir" + css('.details-list').each do |list| + type = list['id'].remove(/s\z/) + list.css('.detail-header').each do |node| + node.name = 'h3' + node['class'] += " #{type}" + end end - # Rewrite .detail -> .method-detail - css('.detail').each do |node| - node['class'] = "method-detail" - end + css('.summary h2').each { |node| node.parent.before(node) } + css('.summary').each { |node| node.name = 'dl' } + css('.summary-signature').each { |node| node.name = 'dt' } + css('.summary-synopsis').each { |node| node.name = 'dd' } - # Change .detail-header to h3 - css('.detail-header .signature').each do |node| - node.name = 'h3' + css('section', 'div:not(.type-detail)', 'h2 a').each do |node| + node.before(node.children).remove end doc diff --git a/lib/docs/filters/elixir/entries.rb b/lib/docs/filters/elixir/entries.rb index ee830983..aac7481e 100644 --- a/lib/docs/filters/elixir/entries.rb +++ b/lib/docs/filters/elixir/entries.rb @@ -2,33 +2,38 @@ module Docs class Elixir class EntriesFilter < Docs::EntriesFilter def get_name - at_css('h1').content.gsub('behaviour', ' ').strip + at_css('h1').content.split(' ').first.strip end def get_type - return nil if (slug.split("#")[1] == "functions") - slug.split("#")[1] + case at_css('h1 small').try(:content) + when 'exception' + 'Exceptions' + when 'protocol' + 'Protocols' + else + name.split('.').first + end end def additional_entries - return [] if root_page? - - entries = [] + return [] if type == 'Exceptions' - # Add itself (moduledoc) to entries - klass = at_css('h1').content.strip.split(" ")[0] - entries << [klass, klass, name] + css('.detail-header .signature').map do |node| + id = node.parent['id'] + name = node.content.strip + name.remove! %r{\(.*\)} + name.remove! 'left ' + name.remove! ' right' + name.sub! 'sigil_', '~' - # Add functions - css('.summary-functions .summary-signature a').each do |node| - entries << [(name + node['href']), node['href'][1..-1], name] - end + unless node.parent['class'].end_with?('macro') || self.name.start_with?('Kernel') + name.prepend "#{self.name}." + name << " (#{id.split('/').last})" + end - return entries - end - - def include_default_entry? - !initial_page? + [name, id] + end end end end diff --git a/lib/docs/scrapers/elixir.rb b/lib/docs/scrapers/elixir.rb index e427002f..d78d1388 100644 --- a/lib/docs/scrapers/elixir.rb +++ b/lib/docs/scrapers/elixir.rb @@ -3,34 +3,29 @@ module Docs self.name = 'Elixir' self.type = 'elixir' self.version = '1.1.1' - self.base_url = 'http://elixir-lang.org/docs/stable/elixir/' - self.root_path = 'extra-api-reference.html' + self.base_url = 'http://elixir-lang.org/docs/stable/' + self.root_path = 'elixir/extra-api-reference.html' + self.initial_paths = %w( + eex/EEx.html + ex_unit/ExUnit.html + iex/IEx.html + logger/Logger.html + mix/Mix.html + ) self.links = { - home: 'https://elixir-lang.org/', + home: 'http://elixir-lang.org/', code: 'https://github.com/elixir-lang/elixir' } html_filters.push 'elixir/clean_html', 'elixir/entries', 'title' - # Skip exceptions - options[:skip_patterns] = [/Error/] - # Skip protocols - options[:skip] = %w( - Collectable.html - Enumerable.html - Inspect.html - List.Chars.html - String.Chars.html - ) - - options[:follow_links] = ->(filter) { filter.root_page? } options[:container] = "#content" options[:title] = false options[:root_title] = 'Elixir' options[:attribution] = <<-HTML © 2012 Plataformatec
      - Licensed under the Apache License, Version 2.0 + Licensed under the Apache License, Version 2.0. HTML end end diff --git a/public/icons/docs/elixir/16.png b/public/icons/docs/elixir/16.png index eeef08a36eb019b1c786c396c356ee11716324cf..5a980afa2934d70fb8905091d00b511492e34c9f 100644 GIT binary patch delta 632 zcmV-;0*C$43Wf!c8Gi-<001BJ|6u?C0!>LoK~#7FjgteIh#e* zyaPSogQbyTLFNwbx8S*lUOCCJ$(0lfP&8nf7Eg1y?twLrDSZlFdg3*)y0q>VTPG#F z$bzf?0?JSP^GE4uKglJOgaE&^g_BN@}(i(whMVPrqZffX1e3ZjUm6o?TH zoX8*yf?KM~YES7RaGe~JwR1w~gNdi&00Wr1g?b@C0e{5FAeZyO3w)x!?8q)Rk!J_(5|_f8Z@M@AJH_0xr_s*od6P|u65 z>#n@!j+=cnL!le)Tl&N~ho5}l(r8LP!?aAlaPQRL3{O3-YsQ{a&p4$D?f4&U;`TP| Sxb(vS0000 literal 1361 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 From f879ad0f9cc0e7ea43cf0ca4fa5ba0eb2117f551 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 11:25:34 -0500 Subject: [PATCH 17/19] Update Prism.js --- assets/javascripts/vendor/prism.js | 474 +++++++++++++++++++++-------- 1 file changed, 347 insertions(+), 127 deletions(-) diff --git a/assets/javascripts/vendor/prism.js b/assets/javascripts/vendor/prism.js index 9b63ad3b..3940472a 100644 --- a/assets/javascripts/vendor/prism.js +++ b/assets/javascripts/vendor/prism.js @@ -1,5 +1,5 @@ -/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+php+python+ruby+rust */ -self = (typeof window !== 'undefined') +/* http://prismjs.com/download.html?themes=prism&languages=markup+css+clike+javascript+c+cpp+coffeescript+ruby+elixir+php+python+rust */ +var _self = (typeof window !== 'undefined') ? window // if in browser : ( (typeof WorkerGlobalScope !== 'undefined' && self instanceof WorkerGlobalScope) @@ -18,7 +18,7 @@ var Prism = (function(){ // Private helper vars var lang = /\blang(?:uage)?-(?!\*)(\w+)\b/i; -var _ = self.Prism = { +var _ = _self.Prism = { util: { encode: function (tokens) { if (tokens instanceof Token) { @@ -51,7 +51,8 @@ var _ = self.Prism = { return clone; case 'Array': - return o.map(function(v) { return _.util.clone(v); }); + // Check for existence for IE8 + return o.map && o.map(function(v) { return _.util.clone(v); }); } return o; @@ -140,6 +141,7 @@ var _ = self.Prism = { } } }, + plugins: {}, highlightAll: function(async, callback) { var elements = document.querySelectorAll('code[class*="language-"], [class*="language-"] code, code[class*="lang-"], [class*="lang-"] code'); @@ -162,10 +164,6 @@ var _ = self.Prism = { grammar = _.languages[language]; } - if (!grammar) { - return; - } - // Set language on the element, if not present element.className = element.className.replace(lang, '').replace(/\s+/g, ' ') + ' language-' + language; @@ -178,12 +176,6 @@ var _ = self.Prism = { var code = element.textContent; - if(!code) { - return; - } - - code = code.replace(/^(?:\r?\n|\r)/,''); - var env = { element: element, language: language, @@ -191,13 +183,18 @@ var _ = self.Prism = { code: code }; + if (!code || !grammar) { + _.hooks.run('complete', env); + return; + } + _.hooks.run('before-highlight', env); - // if (async && self.Worker) { + // if (async && _self.Worker) { // var worker = new Worker(_.filename); // worker.onmessage = function(evt) { - // env.highlightedCode = Token.stringify(JSON.parse(evt.data), language); + // env.highlightedCode = evt.data; // _.hooks.run('before-insert', env); @@ -205,11 +202,13 @@ var _ = self.Prism = { // callback && callback.call(env.element); // _.hooks.run('after-highlight', env); + // _.hooks.run('complete', env); // }; // worker.postMessage(JSON.stringify({ // language: env.language, - // code: env.code + // code: env.code, + // immediateClose: true // })); // } // else { @@ -222,6 +221,7 @@ var _ = self.Prism = { callback && callback.call(element); _.hooks.run('after-highlight', env); + _.hooks.run('complete', env); // } }, @@ -380,29 +380,32 @@ Token.stringify = function(o, language, parent) { var attributes = ''; for (var name in env.attributes) { - attributes += name + '="' + (env.attributes[name] || '') + '"'; + attributes += (attributes ? ' ' : '') + name + '="' + (env.attributes[name] || '') + '"'; } return '<' + env.tag + ' class="' + env.classes.join(' ') + '" ' + attributes + '>' + env.content + ''; }; -// if (!self.document) { -// if (!self.addEventListener) { +// if (!_self.document) { +// if (!_self.addEventListener) { // // in Node.js -// return self.Prism; +// return _self.Prism; // } // // In worker -// self.addEventListener('message', function(evt) { +// _self.addEventListener('message', function(evt) { // var message = JSON.parse(evt.data), // lang = message.language, -// code = message.code; +// code = message.code, +// immediateClose = message.immediateClose; -// self.postMessage(JSON.stringify(_.util.encode(_.tokenize(code, _.languages[lang])))); -// self.close(); +// _self.postMessage(_.highlight(code, _.languages[lang], lang)); +// if (immediateClose) { +// _self.close(); +// } // }, false); -// return self.Prism; +// return _self.Prism; // } // // Get current script and highlight @@ -418,40 +421,45 @@ Token.stringify = function(o, language, parent) { // } // } -return self.Prism; +return _self.Prism; })(); if (typeof module !== 'undefined' && module.exports) { module.exports = Prism; } + +// hack for components to work correctly in node.js +if (typeof global !== 'undefined') { + global.Prism = Prism; +} ; Prism.languages.markup = { 'comment': //, - 'prolog': /<\?.+?\?>/, - 'doctype': //, + 'prolog': /<\?[\w\W]+?\?>/, + 'doctype': //, 'cdata': //i, 'tag': { - pattern: /<\/?[\w:-]+\s*(?:\s+[\w:-]+(?:=(?:("|')(\\?[\w\W])*?\1|[^\s'">=]+))?\s*)*\/?>/i, + pattern: /<\/?(?!\d)[^\s>\/=.$<]+(?:\s+[^\s>\/=]+(?:=(?:("|')(?:\\\1|\\?(?!\1)[\w\W])*\1|[^\s'">=]+))?)*\s*\/?>/i, inside: { 'tag': { - pattern: /^<\/?[\w:-]+/i, + pattern: /^<\/?[^\s>\/]+/i, inside: { 'punctuation': /^<\/?/, - 'namespace': /^[\w-]+?:/ + 'namespace': /^[^\s>\/:]+:/ } }, 'attr-value': { pattern: /=(?:('|")[\w\W]*?(\1)|[^\s>]+)/i, inside: { - 'punctuation': /=|>|"/ + 'punctuation': /[=>"']/ } }, 'punctuation': /\/?>/, 'attr-name': { - pattern: /[\w:-]+/, + pattern: /[^\s>\/]+/, inside: { - 'namespace': /^[\w-]+?:/ + 'namespace': /^[^\s>\/:]+:/ } } @@ -467,35 +475,38 @@ Prism.hooks.add('wrap', function(env) { env.attributes['title'] = env.content.replace(/&/, '&'); } }); -; + +Prism.languages.xml = Prism.languages.markup; +Prism.languages.html = Prism.languages.markup; +Prism.languages.mathml = Prism.languages.markup; +Prism.languages.svg = Prism.languages.markup; + Prism.languages.css = { 'comment': /\/\*[\w\W]*?\*\//, 'atrule': { pattern: /@[\w-]+?.*?(;|(?=\s*\{))/i, inside: { - 'punctuation': /[;:]/ + 'rule': /@[\w-]+/ + // See rest below } }, - 'url': /url\((?:(["'])(\\\n|\\?.)*?\1|.*?)\)/i, - 'selector': /[^\{\}\s][^\{\};]*(?=\s*\{)/, - 'string': /("|')(\\\n|\\?.)*?\1/, + 'url': /url\((?:(["'])(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1|.*?)\)/i, + 'selector': /[^\{\}\s][^\{\};]*?(?=\s*\{)/, + 'string': /("|')(\\(?:\r\n|[\w\W])|(?!\1)[^\\\r\n])*\1/, 'property': /(\b|\B)[\w-]+(?=\s*:)/i, 'important': /\B!important\b/i, - 'punctuation': /[\{\};:]/, - 'function': /[-a-z0-9]+(?=\()/i + 'function': /[-a-z0-9]+(?=\()/i, + 'punctuation': /[(){};:]/ }; +Prism.languages.css['atrule'].inside.rest = Prism.util.clone(Prism.languages.css); + if (Prism.languages.markup) { Prism.languages.insertBefore('markup', 'tag', { 'style': { - pattern: /[\w\W]*?<\/style>/i, - inside: { - 'tag': { - pattern: /|<\/style>/i, - inside: Prism.languages.markup.tag.inside - }, - rest: Prism.languages.css - }, + pattern: /()[\w\W]*?(?=<\/style>)/i, + lookbehind: true, + inside: Prism.languages.css, alias: 'language-css' } }); @@ -529,9 +540,9 @@ Prism.languages.clike = { lookbehind: true } ], - 'string': /("|')(\\\n|\\?.)*?\1/, + 'string': /(["'])(\\(?:\r\n|[\s\S])|(?!\1)[^\\\r\n])*\1/, 'class-name': { - pattern: /((?:(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, + pattern: /((?:\b(?:class|interface|extends|implements|trait|instanceof|new)\s+)|(?:catch\s+\())[a-z0-9_\.\\]+/i, lookbehind: true, inside: { punctuation: /(\.|\\)/ @@ -539,75 +550,93 @@ Prism.languages.clike = { }, 'keyword': /\b(if|else|while|do|for|return|in|instanceof|function|new|try|throw|catch|finally|null|break|continue)\b/, 'boolean': /\b(true|false)\b/, - 'function': { - pattern: /[a-z0-9_]+\(/i, - inside: { - punctuation: /\(/ - } - }, - 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee]-?\d+)?)\b/, - 'operator': /[-+]{1,2}|!|<=?|>=?|={1,3}|&{1,2}|\|?\||\?|\*|\/|~|\^|%/, - 'ignore': /&(lt|gt|amp);/i, + 'function': /[a-z0-9_]+(?=\()/i, + 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)\b/i, + 'operator': /--?|\+\+?|!=?=?|<=?|>=?|==?=?|&&?|\|\|?|\?|\*|\/|~|\^|%/, 'punctuation': /[{}[\];(),.:]/ }; -; + Prism.languages.javascript = Prism.languages.extend('clike', { - 'keyword': /\b(break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|false|finally|for|function|get|if|implements|import|in|instanceof|interface|let|new|null|package|private|protected|public|return|set|static|super|switch|this|throw|true|try|typeof|var|void|while|with|yield)\b/, - 'number': /\b-?(0x[\dA-Fa-f]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|-?Infinity)\b/, - 'function': /(?!\d)[a-z0-9_$]+(?=\()/i + 'keyword': /\b(as|async|await|break|case|catch|class|const|continue|debugger|default|delete|do|else|enum|export|extends|finally|for|from|function|get|if|implements|import|in|instanceof|interface|let|new|null|of|package|private|protected|public|return|set|static|super|switch|this|throw|try|typeof|var|void|while|with|yield)\b/, + 'number': /\b-?(0x[\dA-Fa-f]+|0b[01]+|0o[0-7]+|\d*\.?\d+([Ee][+-]?\d+)?|NaN|Infinity)\b/, + // Allow for all non-ASCII characters (See http://stackoverflow.com/a/2008444) + 'function': /[_$a-zA-Z\xA0-\uFFFF][_$a-zA-Z0-9\xA0-\uFFFF]*(?=\()/i }); Prism.languages.insertBefore('javascript', 'keyword', { 'regex': { - pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/, + pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\\\r\n])+\/[gimyu]{0,5}(?=\s*($|[\r\n,.;})]))/, lookbehind: true } }); +Prism.languages.insertBefore('javascript', 'class-name', { + 'template-string': { + pattern: /`(?:\\`|\\?[^`])*`/, + inside: { + 'interpolation': { + pattern: /\$\{[^}]+\}/, + inside: { + 'interpolation-punctuation': { + pattern: /^\$\{|\}$/, + alias: 'punctuation' + }, + rest: Prism.languages.javascript + } + }, + 'string': /[\s\S]+/ + } + } +}); + if (Prism.languages.markup) { Prism.languages.insertBefore('markup', 'tag', { 'script': { - pattern: /[\w\W]*?<\/script>/i, - inside: { - 'tag': { - pattern: /|<\/script>/i, - inside: Prism.languages.markup.tag.inside - }, - rest: Prism.languages.javascript - }, + pattern: /()[\w\W]*?(?=<\/script>)/i, + lookbehind: true, + inside: Prism.languages.javascript, alias: 'language-javascript' } }); } -; + +Prism.languages.js = Prism.languages.javascript; Prism.languages.c = Prism.languages.extend('clike', { - // allow for c multiline strings - 'string': /("|')([^\n\\\1]|\\.|\\\r*\n)*?\1/, 'keyword': /\b(asm|typeof|inline|auto|break|case|char|const|continue|default|do|double|else|enum|extern|float|for|goto|if|int|long|register|return|short|signed|sizeof|static|struct|switch|typedef|union|unsigned|void|volatile|while)\b/, - 'operator': /[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\// + 'operator': /\-[>-]?|\+\+?|!=?|<>?=?|==?|&&?|\|?\||[~^%?*\/]/, + 'number': /\b-?(?:0x[\da-f]+|\d*\.?\d+(?:e[+-]?\d+)?)[ful]*\b/i }); Prism.languages.insertBefore('c', 'string', { - // property class reused for macro statements - 'property': { + 'macro': { // allow for multiline macro definitions // spaces after the # character compile fine with gcc - pattern: /((^|\n)\s*)#\s*[a-z]+([^\n\\]|\\.|\\\r*\n)*/i, + pattern: /(^\s*)#\s*[a-z]+([^\r\n\\]|\\.|\\(?:\r\n?|\n))*/im, lookbehind: true, + alias: 'property', inside: { // highlight the path of the include statement as a string 'string': { pattern: /(#\s*include\s*)(<.+?>|("|')(\\?.)+?\3)/, lookbehind: true + }, + // highlight macro directives as keywords + 'directive': { + pattern: /(#\s*)\b(define|elif|else|endif|error|ifdef|ifndef|if|import|include|line|pragma|undef|using)\b/, + lookbehind: true, + alias: 'keyword' } } - } + }, + // highlight predefined macros as constants + 'constant': /\b(__FILE__|__LINE__|__DATE__|__TIME__|__TIMESTAMP__|__func__|EOF|NULL|stdin|stdout|stderr)\b/ }); delete Prism.languages.c['class-name']; -delete Prism.languages.c['boolean'];; +delete Prism.languages.c['boolean']; + Prism.languages.cpp = Prism.languages.extend('c', { - 'keyword': /\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|delete\[\]|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|new\[\]|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/, + 'keyword': /\b(alignas|alignof|asm|auto|bool|break|case|catch|char|char16_t|char32_t|class|compl|const|constexpr|const_cast|continue|decltype|default|delete|do|double|dynamic_cast|else|enum|explicit|export|extern|float|for|friend|goto|if|inline|int|long|mutable|namespace|new|noexcept|nullptr|operator|private|protected|public|register|reinterpret_cast|return|short|signed|sizeof|static|static_assert|static_cast|struct|switch|template|this|thread_local|throw|try|typedef|typeid|typename|union|unsigned|using|virtual|void|volatile|wchar_t|while)\b/, 'boolean': /\b(true|false)\b/, 'operator': /[-+]{1,2}|!=?|<{1,2}=?|>{1,2}=?|\->|:{1,2}|={1,2}|\^|~|%|&{1,2}|\|?\||\?|\*|\/|\b(and|and_eq|bitand|bitor|not|not_eq|or|or_eq|xor|xor_eq)\b/ }); @@ -617,7 +646,7 @@ Prism.languages.insertBefore('cpp', 'keyword', { pattern: /(class\s+)[a-z0-9_]+/i, lookbehind: true } -});; +}); (function(Prism) { // Ignore comments starting with { to privilege string interpolation highlighting @@ -632,11 +661,11 @@ Prism.languages.coffeescript = Prism.languages.extend('javascript', { 'string': [ // Strings are multiline - /'(?:\\?[\s\S])*?'/, + /'(?:\\?[^\\])*?'/, { // Strings are multiline - pattern: /"(?:\\?[\s\S])*?"/, + pattern: /"(?:\\?[^\\])*?"/, inside: { 'interpolation': interpolation } @@ -700,7 +729,208 @@ Prism.languages.insertBefore('coffeescript', 'keyword', { 'property': /(?!\d)\w+(?=\s*:(?!:))/ }); -}(Prism));; +}(Prism)); +/** + * Original by Samuel Flores + * + * Adds the following new token classes: + * constant, builtin, variable, symbol, regex + */ +(function(Prism) { + Prism.languages.ruby = Prism.languages.extend('clike', { + 'comment': /#(?!\{[^\r\n]*?\}).*/, + 'keyword': /\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/ + }); + + var interpolation = { + pattern: /#\{[^}]+\}/, + inside: { + 'delimiter': { + pattern: /^#\{|\}$/, + alias: 'tag' + }, + rest: Prism.util.clone(Prism.languages.ruby) + } + }; + + Prism.languages.insertBefore('ruby', 'keyword', { + 'regex': [ + { + pattern: /%r([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1[gim]{0,3}/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /%r\((?:[^()\\]|\\[\s\S])*\)[gim]{0,3}/, + inside: { + 'interpolation': interpolation + } + }, + { + // Here we need to specifically allow interpolation + pattern: /%r\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}[gim]{0,3}/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /%r\[(?:[^\[\]\\]|\\[\s\S])*\][gim]{0,3}/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /%r<(?:[^<>\\]|\\[\s\S])*>[gim]{0,3}/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/, + lookbehind: true + } + ], + 'variable': /[@$]+[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/, + 'symbol': /:[a-zA-Z_][a-zA-Z_0-9]*(?:[?!]|\b)/ + }); + + Prism.languages.insertBefore('ruby', 'number', { + 'builtin': /\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/, + 'constant': /\b[A-Z][a-zA-Z_0-9]*(?:[?!]|\b)/ + }); + + Prism.languages.ruby.string = [ + { + pattern: /%[qQiIwWxs]?([^a-zA-Z0-9\s\{\(\[<])(?:[^\\]|\\[\s\S])*?\1/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /%[qQiIwWxs]?\((?:[^()\\]|\\[\s\S])*\)/, + inside: { + 'interpolation': interpolation + } + }, + { + // Here we need to specifically allow interpolation + pattern: /%[qQiIwWxs]?\{(?:[^#{}\\]|#(?:\{[^}]+\})?|\\[\s\S])*\}/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /%[qQiIwWxs]?\[(?:[^\[\]\\]|\\[\s\S])*\]/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /%[qQiIwWxs]?<(?:[^<>\\]|\\[\s\S])*>/, + inside: { + 'interpolation': interpolation + } + }, + { + pattern: /("|')(#\{[^}]+\}|\\(?:\r?\n|\r)|\\?.)*?\1/, + inside: { + 'interpolation': interpolation + } + } + ]; +}(Prism)); +Prism.languages.elixir = { + // Negative look-ahead is needed for string interpolation + // Negative look-behind is needed to avoid highlighting markdown headers in + // multi-line doc strings + 'comment': { + pattern: /(^|[^#])#(?![{#]).*/m, + lookbehind: true + }, + // ~r"""foo""", ~r'''foo''', ~r/foo/, ~r|foo|, ~r"foo", ~r'foo', ~r(foo), ~r[foo], ~r{foo}, ~r + 'regex': /~[rR](?:("""|'''|[\/|"'])(?:\\.|(?!\1)[^\\])+\1|\((?:\\\)|[^)])+\)|\[(?:\\\]|[^\]])+\]|\{(?:\\\}|[^}])+\}|<(?:\\>|[^>])+>)[uismxfr]*/, + 'string': [ + { + // ~s"""foo""", ~s'''foo''', ~s/foo/, ~s|foo|, ~s"foo", ~s'foo', ~s(foo), ~s[foo], ~s{foo}, ~s + pattern: /~[cCsSwW](?:("""|'''|[\/|"'])(?:\\.|(?!\1)[^\\])+\1|\((?:\\\)|[^)])+\)|\[(?:\\\]|[^\]])+\]|\{(?:\\\}|#\{[^}]+\}|[^}])+\}|<(?:\\>|[^>])+>)[csa]?/, + inside: { + // See interpolation below + } + }, + { + pattern: /("""|''')[\s\S]*?\1/, + inside: { + // See interpolation below + } + }, + { + // Multi-line strings are allowed + pattern: /("|')(?:\\[\s\S]|(?!\1)[^\\])*\1/, + inside: { + // See interpolation below + } + } + ], + 'atom': { + // Look-behind prevents bad highlighting of the :: operator + pattern: /(^|[^:]):\w+/, + lookbehind: true, + alias: 'symbol' + }, + // Look-ahead prevents bad highlighting of the :: operator + 'attr-name': /\w+:(?!:)/, + 'capture': { + // Look-behind prevents bad highlighting of the && operator + pattern: /(^|[^&])&(?:[^&\s\d()][^\s()]*|(?=\())/, + lookbehind: true, + alias: 'function' + }, + 'argument': { + // Look-behind prevents bad highlighting of the && operator + pattern: /(^|[^&])&\d+/, + lookbehind: true, + alias: 'variable' + }, + 'attribute': { + pattern: /@[\S]+/, + alias: 'variable' + }, + 'number': /\b(?:0[box][a-f\d_]+|\d[\d_]*)(?:\.[\d_]+)?(?:e[+-]?[\d_]+)?\b/i, + 'keyword': /\b(?:after|alias|and|case|catch|cond|def(?:callback|exception|impl|module|p|protocol|struct)?|do|else|end|fn|for|if|import|not|or|require|rescue|try|unless|use|when)\b/, + 'boolean': /\b(?:true|false|nil)\b/, + 'operator': [ + /\bin\b|&&?|\|[|>]?|\\\\|::|\.\.\.?|\+\+?|-[->]?|<[-=>]|>=|!==?|\B!|=(?:==?|[>~])?|[*\/^]/, + { + // We don't want to match << + pattern: /([^<])<(?!<)/, + lookbehind: true + }, + { + // We don't want to match >> + pattern: /([^>])>(?!>)/, + lookbehind: true + } + ], + 'punctuation': /<<|>>|[.,%\[\]{}()]/ +}; + +Prism.languages.elixir.string.forEach(function(o) { + o.inside = { + 'interpolation': { + pattern: /#\{[^}]+\}/, + inside: { + 'delimiter': { + pattern: /^#\{|\}$/, + alias: 'punctuation' + }, + rest: Prism.util.clone(Prism.languages.elixir) + } + } + }; +}); + + /** * Original by Aaron Harun: http://aahacreative.com/2012/07/31/php-syntax-highlighting-prism/ * Modified by Miles Johnson: http://milesj.me @@ -718,7 +948,7 @@ Prism.languages.php = Prism.languages.extend('clike', { 'keyword': /\b(and|or|xor|array|as|break|case|cfunction|class|const|continue|declare|default|die|do|else|elseif|enddeclare|endfor|endforeach|endif|endswitch|endwhile|extends|for|foreach|function|include|include_once|global|if|new|return|static|switch|use|require|require_once|var|while|abstract|interface|public|implements|private|protected|parent|throw|null|echo|print|trait|namespace|final|yield|goto|instanceof|finally|try|catch)\b/i, 'constant': /\b[A-Z0-9_]{2,}\b/, 'comment': { - pattern: /(^|[^\\])(\/\*[\w\W]*?\*\/|(^|[^:])(\/\/).*?(\r?\n|$))/, + pattern: /(^|[^\\])(?:\/\*[\w\W]*?\*\/|\/\/.*)/, lookbehind: true } }); @@ -727,15 +957,15 @@ Prism.languages.php = Prism.languages.extend('clike', { // common than strings containing hashes... Prism.languages.insertBefore('php', 'class-name', { 'shell-comment': { - pattern: /(^|[^\\])#.*?(\r?\n|$)/, + pattern: /(^|[^\\])#.*/, lookbehind: true, alias: 'comment' } }); Prism.languages.insertBefore('php', 'keyword', { - 'delimiter': /(\?>|<\?php|<\?)/i, - 'variable': /(\$\w+)\b/i, + 'delimiter': /\?>|<\?(?:php)?/i, + 'variable': /\$\w+\b/i, 'package': { pattern: /(\\|namespace\s+|use\s+)[\w\\]+/, lookbehind: true, @@ -788,7 +1018,8 @@ if (Prism.languages.markup) { } for (var i = 0, t; t = env.tokenStack[i]; i++) { - env.highlightedCode = env.highlightedCode.replace('{{{PHP' + (i + 1) + '}}}', Prism.highlight(t, env.grammar, 'php')); + // The replace prevents $$, $&, $`, $', $n, $nn from being interpreted as special patterns + env.highlightedCode = env.highlightedCode.replace('{{{PHP' + (i + 1) + '}}}', Prism.highlight(t, env.grammar, 'php').replace(/\$/g, '$$$$')); } env.element.innerHTML = env.highlightedCode; @@ -812,41 +1043,30 @@ if (Prism.languages.markup) { } ; Prism.languages.python= { + 'triple-quoted-string': { + pattern: /"""[\s\S]+?"""|'''[\s\S]+?'''/, + alias: 'string' + }, 'comment': { - pattern: /(^|[^\\])#.*?(\r?\n|$)/, + pattern: /(^|[^\\])#.*/, + lookbehind: true + }, + 'string': /("|')(?:\\?.)*?\1/, + 'function' : { + pattern: /((?:^|\s)def[ \t]+)[a-zA-Z_][a-zA-Z0-9_]*(?=\()/g, + lookbehind: true + }, + 'class-name': { + pattern: /(\bclass\s+)[a-z0-9_]+/i, lookbehind: true }, - 'string': /"""[\s\S]+?"""|'''[\s\S]+?'''|("|')(\\?.)*?\1/, - 'keyword' : /\b(as|assert|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/, - 'boolean' : /\b(True|False)\b/, - 'number' : /\b-?(0[box])?(?:[\da-f]+\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, - 'operator' : /[-+]|<=?|>=?|!|={1,2}|&{1,2}|\|?\||\?|\*|\/|~|\^|%|\b(or|and|not)\b/, + 'keyword' : /\b(?:as|assert|async|await|break|class|continue|def|del|elif|else|except|exec|finally|for|from|global|if|import|in|is|lambda|pass|print|raise|return|try|while|with|yield)\b/, + 'boolean' : /\b(?:True|False)\b/, + 'number' : /\b-?(?:0[bo])?(?:(?:\d|0x[\da-f])[\da-f]*\.?\d*|\.\d+)(?:e[+-]?\d+)?j?\b/i, + 'operator' : /[-+%=]=?|!=|\*\*?=?|\/\/?=?|<[<=>]?|>[=>]?|[&|^~]|\b(?:or|and|not)\b/, 'punctuation' : /[{}[\];(),.:]/ }; -; -/** - * Original by Samuel Flores - * - * Adds the following new token classes: - * constant, builtin, variable, symbol, regex - */ -Prism.languages.ruby = Prism.languages.extend('clike', { - 'comment': /#[^\r\n]*(\r?\n|$)/, - 'keyword': /\b(alias|and|BEGIN|begin|break|case|class|def|define_method|defined|do|each|else|elsif|END|end|ensure|false|for|if|in|module|new|next|nil|not|or|raise|redo|require|rescue|retry|return|self|super|then|throw|true|undef|unless|until|when|while|yield)\b/, - 'builtin': /\b(Array|Bignum|Binding|Class|Continuation|Dir|Exception|FalseClass|File|Stat|File|Fixnum|Fload|Hash|Integer|IO|MatchData|Method|Module|NilClass|Numeric|Object|Proc|Range|Regexp|String|Struct|TMS|Symbol|ThreadGroup|Thread|Time|TrueClass)\b/, - 'constant': /\b[A-Z][a-zA-Z_0-9]*[?!]?\b/ -}); - -Prism.languages.insertBefore('ruby', 'keyword', { - 'regex': { - pattern: /(^|[^/])\/(?!\/)(\[.+?]|\\.|[^/\r\n])+\/[gim]{0,3}(?=\s*($|[\r\n,.;})]))/, - lookbehind: true - }, - 'variable': /[@$]+\b[a-zA-Z_][a-zA-Z_0-9]*[?!]?\b/, - 'symbol': /:\b[a-zA-Z_][a-zA-Z_0-9]*[?!]?\b/ -}); -; /* TODO Add support for Markdown notation inside doc comments Add support for nested block comments... @@ -861,7 +1081,7 @@ Prism.languages.rust = { lookbehind: true }, { - pattern: /(^|[^\\:])\/\/.*?(\r?\n|$)/, + pattern: /(^|[^\\:])\/\/.*/, lookbehind: true } ], @@ -887,7 +1107,7 @@ Prism.languages.rust = { }, // Hex, oct, bin, dec numbers with visual separators and type suffix - 'number': /\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32)?|f32|f64))?\b/, + 'number': /\b-?(?:0x[\dA-Fa-f](?:_?[\dA-Fa-f])*|0o[0-7](?:_?[0-7])*|0b[01](?:_?[01])*|(\d(_?\d)*)?\.?\d(_?\d)*([Ee][+-]?\d+)?)(?:_?(?:[iu](?:8|16|32|64)?|f32|f64))?\b/, // Closure params should not be confused with bitwise OR | 'closure-params': { @@ -897,6 +1117,6 @@ Prism.languages.rust = { 'operator': /[&*]/ } }, - 'punctuation': /[{}[\];(),.:]|->/, - 'operator': /[-+]{1,2}|!=?|<=?|>=?|={1,3}|&&?|\|\|?|\*|\/|\^|%|<<|>>@/ -};; + 'punctuation': /[{}[\];(),:]|\.+|->/, + 'operator': /[-+*\/%!^=]=?|@|&[&=]?|\|[|=]?|<>?=?/ +}; From e6c90931d57c79420b825c09054ea4a5c57a783f Mon Sep 17 00:00:00 2001 From: Lyubomir Popov Date: Fri, 30 Oct 2015 22:25:50 +0200 Subject: [PATCH 18/19] Add Vagrant documentation --- lib/docs/filters/vagrant/clean_html.rb | 20 ++++++++ lib/docs/filters/vagrant/entries.rb | 63 +++++++++++++++++++++++++ lib/docs/scrapers/vagrant.rb | 19 ++++++++ public/icons/docs/vagrant/16.png | Bin 0 -> 863 bytes public/icons/docs/vagrant/16@2x.png | Bin 0 -> 1914 bytes public/icons/docs/vagrant/SOURCE | 1 + 6 files changed, 103 insertions(+) create mode 100644 lib/docs/filters/vagrant/clean_html.rb create mode 100644 lib/docs/filters/vagrant/entries.rb create mode 100644 lib/docs/scrapers/vagrant.rb create mode 100644 public/icons/docs/vagrant/16.png create mode 100644 public/icons/docs/vagrant/16@2x.png create mode 100644 public/icons/docs/vagrant/SOURCE diff --git a/lib/docs/filters/vagrant/clean_html.rb b/lib/docs/filters/vagrant/clean_html.rb new file mode 100644 index 00000000..30516650 --- /dev/null +++ b/lib/docs/filters/vagrant/clean_html.rb @@ -0,0 +1,20 @@ +module Docs + class Vagrant + class CleanHtmlFilter < Filter + def call + if root_page? + doc.children = css('h1, .category') + return doc + end + + css('nav', '.sidebar', 'footer').remove + + css('.wrapper', '.page', '.container', '.row', '.page-contents', '.span8').each do |node| + node.before(node.children).remove + end + + doc + end + end + end +end diff --git a/lib/docs/filters/vagrant/entries.rb b/lib/docs/filters/vagrant/entries.rb new file mode 100644 index 00000000..6ff89757 --- /dev/null +++ b/lib/docs/filters/vagrant/entries.rb @@ -0,0 +1,63 @@ +module Docs + class Vagrant + class EntriesFilter < Docs::EntriesFilter + def get_name + if slug.start_with?('push/') + if at_css('h2') + name = at_css('h2').content.strip + else + name = at_css('h1').content.strip + end + name + else + name = at_css('h1').content.strip + name + end + end + + def get_type + if slug.start_with?('why-vagrant') + 'Why Vagrant?' + elsif slug.start_with?('installation') + 'Installation' + elsif slug.start_with?('getting-started') + 'Getting Started' + elsif slug.start_with?('cli') + 'Command-Line Interface' + elsif slug.start_with?('share') + 'Vagrant Share' + elsif slug.start_with?('vagrantfile') + 'Vagrantfile' + elsif slug.start_with?('boxes') + 'Boxes' + elsif slug.start_with?('provisioning') + 'Provisioning' + elsif slug.start_with?('networking') + 'Networking' + elsif slug.start_with?('synced-folders') + 'Synced Folders' + elsif slug.start_with?('multi-machine') + 'Multi-Machine' + elsif slug.start_with?('providers') + 'Providers' + elsif slug.start_with?('plugins') + 'Plugins' + elsif slug.start_with?('push') + 'Push' + elsif slug.start_with?('other') + 'Other' + elsif slug.start_with?('vmware') + 'VMware' + elsif slug.start_with?('docker') + 'Docker' + elsif slug.start_with?('virtualbox') + 'VirtualBox' + elsif slug.start_with?('hyperv') + 'Hyper-V' + else + 'Overview' + end + end + end + end +end diff --git a/lib/docs/scrapers/vagrant.rb b/lib/docs/scrapers/vagrant.rb new file mode 100644 index 00000000..c0fc8010 --- /dev/null +++ b/lib/docs/scrapers/vagrant.rb @@ -0,0 +1,19 @@ +module Docs + class Vagrant < UrlScraper + self.name = 'Vagrant' + self.slug = 'vagrant' + self.type = 'vagrant' + self.version = '1.7.4' + self.base_url = 'http://docs.vagrantup.com/v2/' + self.links = { + home: 'http://www.vagrantup.com/' + } + + html_filters.push 'vagrant/clean_html', 'vagrant/entries' + + options[:attribution] = <<-HTML + © 2010–2015 Mitchell Hashimoto
      + Licensed under the MIT License. + HTML + end +end diff --git a/public/icons/docs/vagrant/16.png b/public/icons/docs/vagrant/16.png new file mode 100644 index 0000000000000000000000000000000000000000..9c111f32f59cb707b54fe75ffd0c9320523fea38 GIT binary patch literal 863 zcmV-l1EBngP)nQz)}hCXJPK1LvB1|%R!6IxwJ!h#?w1|)_J?nuxL36z9r zgk4=3LW+_QqEe#^6Uu@OpwXBZOs#D~qF@V>fznRDnQ3X~(V6)k_a0X@WGdeE@Ao@r zaSs82lP~nMl6!+7xRgqz3izKlKR=%!qGJ%^Rx*(ohgVt{WOuPrEEaibsWi$;`Z5T;vZYD(9NzW8XhG_tYsc^CELK z$CFb}6K7uQ zEW1{ZarQ^Y%Dc;>VoO`(+iu&a4*in1j@~SZr9g1TmS{6^a&>x7%oyx#GcjE#^WbgL zM&`_L%mU&og+t=*;LFO?#8(?TB8bX@X(`_gbRDLP4^{(-R`vcjZzS;cO9`(hnKaq~ z>hA2lXhq|%5&&!({yn2BG2LjaAlZ|yZCu}J)#`O>7*=2Q!5_kN{fPrF8d%ce^;x~w z3PYk*(>9FmqZt7J+2cF!GcZm*=!HdAM$t;@6_(n7>o<@|b_A(J+-$fKKJocg@81A}zXPZ$ zgn-xZgQ^EOu3pKOy-L-USQm{U7PCcXyt^Fu^6Hwv-zWM5gS3%GeFc;E?y$|Z>g8R+ zys|rFq}O+pRjA$cTn20O#Sd>9ye0quGG-04RB(OYn0+#ZF8>h@?bx8Urnix=NRui6 zv-<2=hnjy}=E852n$r7nl{$1?U*55O01#MbNgon4e)BD3;8|WY2V9N}`AQ+)Vj>oa zXmd07wNgF{gbWbVP&29HS#6hbK!M4;wlUnGsg?5~o&a3md=iYPAYx!YrhdZy* zs$bk6&WCf>TL1rAd!7GYTd1%8{(f6Tt`m_bfn&fU9UUEg{14XP;9#e!J`P-`s^94B z?A(6#n~V;fw!%a&ssrEM;5RHH-?44`xz^U!>V<+13=D{fWPvXN-v?UipAz7Az+)X9 z9Y^Kp$-ajRp7lL}%rq+z9LK@)JZiPtfglLJ-eQHXXWG3~q*Ff%ymDs9o2VsSBJv~P z>iKL^7_k%iiTUoEqch;#LwXJuvPDzkWA%dIpBPwo>a`ov!zg9UBvg>T`~f zNBt=Ep4>a?zH+=gxnWgXxX&+UPxw|bV=0bNfNOzI0rL_tn%)OA+eT2Zetu|T(W}QR z<$JGO?7tVbp8eS|UeAYRyl-HCFgnMVy>f zuiuC3mRq((OBdLIuPPXrdbpM_Qq%k|kGq+FPCD6~m11P7$zx;k7sH*V&iy#heKv}1 z47P@rUp^CxF|$E#2CkU>^3rGbuTPXqErB=%+f31RZ6|CimK;Mmg=E?4x|s=8olNRP z0ZoCQH3p31SbTrnsA@6`D-Yao^R}>g#&4xOu(V)X>sK_fro$s+3n1Fu+!~083!tiG zyzKbmj%Cl6ljJE6-ZKC_o4Zm(x`ERTF|Aq{Sbk-)EHbAGpA%%&bn`v4|MFDz`per~ zv+=4TKmKexSG0LxOjIl`a#Yi4M^!yhXli=K|Jt?Rz8&srh^#)sFB-)tjzY^XkK1sz z3PN3lmI2q__-f=#+47)mB(wd5&l7(i<y#D z(*$}pb=6RLsWDAewS&O7Yhkr2VjvCiC(jT@A&A`VTJ}XBd*ZJpfm;E`5@FZ-6(0TD zFnb4TQERa+n)2maJpg)j_E#hM1Km6BaKZ%%^la{mfj5ALV^{<*t|)tk z9J+^c1gSxQBuQ>CMwY`&sc_v)HJdGDRCTIvQ~?G>cwvrs&3+*;1al2VpppntI>Sk( z4z?M6L#fnW1F>D#BbRHU-o*R2uXB1nlEBf;U1ea~T#*xu$ZS=db2M9)?Kd^G3o94R{o2E*aj_T`0<#Pj?_?0K>o$ffol z&IMr3Io%eEJ-};oSR0`hr}EBllpgbqRY{C(i7-$3U;O>;qW>|0zAvv-U_Wqjt}qEA zV2NNEVSId~QS$*(qcdlW3noxkns@5kFxOdxAn@t!J;vZ*FKIeM6nDS2!TI37CU9(X z*Qg@T0)L)I9ZjWDCJ4%;>5S~V6&^UB8QW0Yaz%eI~19dH?_b07*qoM6N<$f|Vtd AxBvhE literal 0 HcmV?d00001 diff --git a/public/icons/docs/vagrant/SOURCE b/public/icons/docs/vagrant/SOURCE new file mode 100644 index 00000000..7c6a05ed --- /dev/null +++ b/public/icons/docs/vagrant/SOURCE @@ -0,0 +1 @@ +http://www.vagrantup.com From de1c8797301253f6a1e2cba11273f93af5f44f9c Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Nov 2015 12:15:37 -0500 Subject: [PATCH 19/19] Finish Vagrant scraper --- assets/images/icons.png | Bin 34387 -> 35060 bytes assets/images/icons@2x.png | Bin 91408 -> 93182 bytes assets/javascripts/news.json | 2 +- .../templates/pages/about_tmpl.coffee | 5 ++ assets/javascripts/views/pages/vagrant.coffee | 5 ++ assets/stylesheets/application-dark.css.scss | 1 + assets/stylesheets/application.css.scss | 1 + assets/stylesheets/global/_icons.scss | 1 + assets/stylesheets/pages/_vagrant.scss | 9 +++ lib/docs/filters/vagrant/clean_html.rb | 10 +-- lib/docs/filters/vagrant/entries.rb | 69 ++++++------------ lib/docs/scrapers/vagrant.rb | 8 +- public/icons/docs/vagrant/16.png | Bin 863 -> 747 bytes public/icons/docs/vagrant/16@2x.png | Bin 1914 -> 1704 bytes 14 files changed, 52 insertions(+), 59 deletions(-) create mode 100644 assets/javascripts/views/pages/vagrant.coffee create mode 100644 assets/stylesheets/pages/_vagrant.scss diff --git a/assets/images/icons.png b/assets/images/icons.png index d7340fa7d43d32769a45c7389e68f6399f19eec2..fa4b94f9f832c8e88ac7020b79d5c804ff3e89a9 100644 GIT binary patch delta 5276 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 iU;T7=m%N2o{2xW2o-v&Vfc~G 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 fZ=XlTF{=0S00000NkvXXu0mjfgT4Er diff --git a/assets/images/icons@2x.png b/assets/images/icons@2x.png index 6773058750ddac42c7046e0103ee015d316cf9ba..45385ad25c492048ce2a74658e9e0c8fc785abc5 100644 GIT binary patch delta 7474 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 diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index 62501ce6..770a47a7 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,7 +1,7 @@ [ [ "2015-11-08", - "New documentation: Elixir" + "New documentations: Elixir and Vagrant" ], [ "2015-10-18", "Added a \"Copy to clipboard\" button inside each code block." diff --git a/assets/javascripts/templates/pages/about_tmpl.coffee b/assets/javascripts/templates/pages/about_tmpl.coffee index 062d4d0d..5447df0e 100644 --- a/assets/javascripts/templates/pages/about_tmpl.coffee +++ b/assets/javascripts/templates/pages/about_tmpl.coffee @@ -379,6 +379,11 @@ credits = [ '2009-2015 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors', 'MIT', 'https://raw.github.com/jashkenas/underscore/master/LICENSE' + ], [ + 'Vagrant', + '2010-2015 Mitchell Hashimoto', + 'MIT', + 'https://raw.githubusercontent.com/mitchellh/vagrant/master/LICENSE' ], [ 'Vue.js', '2013-2015 Evan You, Vue.js contributors', diff --git a/assets/javascripts/views/pages/vagrant.coffee b/assets/javascripts/views/pages/vagrant.coffee new file mode 100644 index 00000000..49540958 --- /dev/null +++ b/assets/javascripts/views/pages/vagrant.coffee @@ -0,0 +1,5 @@ +#= require views/pages/base + +class app.views.VagrantPage extends app.views.BasePage + prepare: -> + @highlightCode @findAll('pre.ruby'), 'ruby' diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss index acb915b0..e77843e1 100644 --- a/assets/stylesheets/application-dark.css.scss +++ b/assets/stylesheets/application-dark.css.scss @@ -72,6 +72,7 @@ 'pages/socketio', 'pages/sphinx', 'pages/underscore', + 'pages/vagrant', 'pages/vue', 'pages/yard', 'pages/yii'; diff --git a/assets/stylesheets/application.css.scss b/assets/stylesheets/application.css.scss index a262f124..ccb23a53 100644 --- a/assets/stylesheets/application.css.scss +++ b/assets/stylesheets/application.css.scss @@ -72,6 +72,7 @@ 'pages/socketio', 'pages/sphinx', 'pages/underscore', + 'pages/vagrant', 'pages/vue', 'pages/yard', 'pages/yii'; diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 51431421..4939c8b3 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -117,3 +117,4 @@ %icon-clipboard { background-position: -2rem -9rem; } %icon-clipboard-white { background-position: -3rem -9rem; } ._icon-elixir:before { background-position: -4rem -9rem; @extend %darkIconFix !optional; } +._icon-vagrant:before { background-position: -5rem -9rem; } diff --git a/assets/stylesheets/pages/_vagrant.scss b/assets/stylesheets/pages/_vagrant.scss new file mode 100644 index 00000000..89b9e820 --- /dev/null +++ b/assets/stylesheets/pages/_vagrant.scss @@ -0,0 +1,9 @@ +._vagrant { + @extend %simple; + + .alert { @extend %note; } + .prev-button { float: left; } + .prev-button:before { content: '\2190 '; } + .next-button { float: right; } + .next-button:after { content: ' \2192'; } +} diff --git a/lib/docs/filters/vagrant/clean_html.rb b/lib/docs/filters/vagrant/clean_html.rb index 30516650..679fa800 100644 --- a/lib/docs/filters/vagrant/clean_html.rb +++ b/lib/docs/filters/vagrant/clean_html.rb @@ -2,14 +2,12 @@ module Docs class Vagrant class CleanHtmlFilter < Filter def call - if root_page? - doc.children = css('h1, .category') - return doc - end + @doc = at_css('.page-contents .span8') - css('nav', '.sidebar', 'footer').remove + css('hr').remove - css('.wrapper', '.page', '.container', '.row', '.page-contents', '.span8').each do |node| + css('pre > code').each do |node| + node.parent['class'] = node['class'] node.before(node.children).remove end diff --git a/lib/docs/filters/vagrant/entries.rb b/lib/docs/filters/vagrant/entries.rb index 6ff89757..861067f7 100644 --- a/lib/docs/filters/vagrant/entries.rb +++ b/lib/docs/filters/vagrant/entries.rb @@ -3,59 +3,32 @@ module Docs class EntriesFilter < Docs::EntriesFilter def get_name if slug.start_with?('push/') - if at_css('h2') - name = at_css('h2').content.strip - else - name = at_css('h1').content.strip - end - name - else - name = at_css('h1').content.strip - name + name = at_css('h2').try(:content) + elsif slug.start_with?('cli/') + name = at_css('h1 + p > strong > code').try(:content).try(:[], /\s*vagrant\s+[\w\-]+/) end + + name || at_css('h1').content end def get_type - if slug.start_with?('why-vagrant') - 'Why Vagrant?' - elsif slug.start_with?('installation') - 'Installation' - elsif slug.start_with?('getting-started') - 'Getting Started' - elsif slug.start_with?('cli') - 'Command-Line Interface' - elsif slug.start_with?('share') - 'Vagrant Share' - elsif slug.start_with?('vagrantfile') - 'Vagrantfile' - elsif slug.start_with?('boxes') - 'Boxes' - elsif slug.start_with?('provisioning') - 'Provisioning' - elsif slug.start_with?('networking') - 'Networking' - elsif slug.start_with?('synced-folders') - 'Synced Folders' - elsif slug.start_with?('multi-machine') - 'Multi-Machine' - elsif slug.start_with?('providers') - 'Providers' - elsif slug.start_with?('plugins') - 'Plugins' - elsif slug.start_with?('push') - 'Push' - elsif slug.start_with?('other') - 'Other' - elsif slug.start_with?('vmware') - 'VMware' - elsif slug.start_with?('docker') - 'Docker' - elsif slug.start_with?('virtualbox') - 'VirtualBox' - elsif slug.start_with?('hyperv') - 'Hyper-V' + at_css('.sidebar-nav li.current').content + end + + def additional_entries + case at_css('h1 + p > strong > code').try(:content) + when /config\./ + h2 = nil + css('.page-contents .span8 > *').each_with_object [] do |node, entries| + if node.name == 'h2' + h2 = node.content + elsif h2 == 'Available Settings' && (code = node.at_css('code')) && (name = code.content) && name.start_with?('config.') + id = code.parent['id'] = name.parameterize + entries << [name, id, 'Config'] + end + end else - 'Overview' + [] end end end diff --git a/lib/docs/scrapers/vagrant.rb b/lib/docs/scrapers/vagrant.rb index c0fc8010..bb9f53f8 100644 --- a/lib/docs/scrapers/vagrant.rb +++ b/lib/docs/scrapers/vagrant.rb @@ -1,15 +1,15 @@ module Docs class Vagrant < UrlScraper self.name = 'Vagrant' - self.slug = 'vagrant' self.type = 'vagrant' self.version = '1.7.4' - self.base_url = 'http://docs.vagrantup.com/v2/' + self.base_url = 'https://docs.vagrantup.com/v2/' self.links = { - home: 'http://www.vagrantup.com/' + home: 'https://www.vagrantup.com/', + code: 'https://github.com/mitchellh/vagrant' } - html_filters.push 'vagrant/clean_html', 'vagrant/entries' + html_filters.push 'vagrant/entries', 'vagrant/clean_html' options[:attribution] = <<-HTML © 2010–2015 Mitchell Hashimoto
      diff --git a/public/icons/docs/vagrant/16.png b/public/icons/docs/vagrant/16.png index 9c111f32f59cb707b54fe75ffd0c9320523fea38..0ec6434fa9bbcf936ccd24532309fd1f7d455a4a 100644 GIT binary patch delta 724 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 delta 1900 zcmV-y2b1`y4f+m{BYyw}VoOIv0RI600RN!9r;`8x010qNS#tmY3ljhU3ljkVnw%H_ z000McNliru-w7KBBN24s_oDy+2M0++K~z}7)t76GT~!swe`}xDeaxLZcRJG8xaZz;&ujT%ZihRs(yCwFAI^t!)>{AnT6>-UUR$WI{{DVjM6MH& zCxK(YBOM(bef$sB;NW1Vsy+@}r>fuR?Cjir_M40jowmY6FRBCI-QYJYBHyuX`?=QE z*6M|V4h#&4h<{{(F9P2OTI!z?;CH}d9UUD<<><-2hYOzdJ%P+LD-j&W!Sg(7wc3Fo z2)^E8g|BDYy;P)AKMK5ZX2_eUC0!!&BjD=!Y*HAp6Zwhx?wg}G9vKNWN>v5ah>*|c zX=!P}bzM~TY7yDl8|AiadpEP}qre~9dU$bPIsU1L?0;DZJW z6TjYXSAVyjvb`WR8OP|G!2LVcJ8#bizT$@m@h;#LwX zJuvPDzkWA%dIpBPwo>a`ov!zg9UBvg>T`~fNBt=Ep4>a?zH+=gxnWgXxX&+UPxw|b zV=0bNfNOzI0rL_tn%)OA+eT2Zetu|T(W}QR<$rsxTy}%#MN1dhfv+kUn0mODFjCX} zFOR#Ke@;5toRwl^s>x$x@)yIMrq2C1(0w+FZ49=CmR~*-iZQc6ZU(NH{qoXh_peWs zOMfkaI0f5G(ROVoY%7)=Lpp_I+3LEP300j;>O=uefuA)7jN@2*f83~QG7BpY+;H=@ zuzALBr97~-U|Z`~G_j_`BV!97+T7e4h=>cIs${(E_~MRb&zF)2maJpg)j_E#h+jh8((was;VCfFwz7Fh-WcOsR0) zOf{P=WK?ykZ&U#WMR;M3c+GwxFa&cAMWB)hQ98p(rVh3leM70#UIVdR*MB3IYogx7 z`?s%idOniC(al|DVB1`g6O71gRh)A)TbAuNHMQhHaor4UZA)+*ZvuF6Uin@?QhOSe zQACL2h#;thsv4iINSs2Vh}L``n6h*Z}5&YP2Ng<`#k$-ZSz|=NVDV5rr8w;bV0q7rh-R>plP2kw3Yhqv@a7sj| z)hhV@IOX!VR|%@*EGl;_sh00wQ7Qi5)1};9s|({I8sziEnr*w@>;Xwdwk$M1*yorn zPSi!?!4I>+4km|!+g7IWhKsG7E2(P=E-Q=8*2+b>p_lqwnr06_z<(P%*V*qc1hP;M z(6hN~tS(B^^)yDP1l83o94R{o2E*aj_T`0<#Pj?_?0K>o$ffol&IMr3Io%eEJ-};oSR0`h zr}EBllpgbqRY{C(iGMIp`Ct6~?V|rNfxa)VRA4`Fa;`85B4CMN8DV^Uq*3z$Qlm3x zj0+}ESDJU~+c4Kzgdp(g?LEfeU@vJpLlk$vw!!(}zb0^ObJwUM&jNp*M;%S2QYHw> zr0I<8yA>WdpBt1pA0v&;K@97Fdw}Vz(ln7$shy=uSCP*bQDxOW;7(w@!qM}IEf;#{ zyY$)p?Z6|z10qsgwrq9Laa>I`eKL-drySd!*tx+?&o|x$6PTU@pWb_w<9Od(vSdY^ m$>twV(4)I