History

Fix merge conflicts

Jasper van Merle committed 8 years ago

Commit bf53a002 parents cdd86a8 e8d52c9124 files · +844 −748Browse files

Unified · Split

124 files
  1. .travis.yml +3 −0
  2. Gemfile +1 −0
  3. Gemfile.lock +30 −26
  4. README.md +4 −8
  5. assets/javascripts/app/app.coffee +1 −6
  6. assets/javascripts/lib/page.coffee +1 −1
  7. assets/javascripts/news.json +3 −0
  8. assets/javascripts/templates/error_tmpl.coffee +4 −7
  9. assets/javascripts/templates/pages/about_tmpl.coffee +10 −0
  10. assets/javascripts/templates/pages/root_tmpl.coffee.erb +0 −11
  11. assets/javascripts/views/content/root_page.coffee +0 −4
  12. assets/javascripts/views/content/settings_page.coffee +3 −4
  13. assets/stylesheets/application-dark.css.scss +0 −107
  14. assets/stylesheets/application.css.scss +3 −1
  15. assets/stylesheets/components/_app.scss +5 −5
  16. assets/stylesheets/components/_content.scss +27 −32
  17. assets/stylesheets/components/_fail.scss +2 −2
  18. assets/stylesheets/components/_header.scss +25 −35
  19. assets/stylesheets/components/_mobile.scss +2 −2
  20. assets/stylesheets/components/_notice.scss +5 −5
  21. assets/stylesheets/components/_notif.scss +12 −12
  22. assets/stylesheets/components/_page.scss +4 −4
  23. assets/stylesheets/components/_path.scss +6 −6
  24. assets/stylesheets/components/_prism.scss +25 −32
  25. assets/stylesheets/components/_settings.scss +12 −12
  26. assets/stylesheets/components/_sidebar.scss +37 −39
  27. assets/stylesheets/global/_base.scss +37 −31
  28. assets/stylesheets/global/_classes.scss +24 −25
  29. assets/stylesheets/global/_icons.scss.erb +2 −2
  30. assets/stylesheets/global/_mixins.scss +6 −0
  31. assets/stylesheets/global/_print.scss +2 −2
  32. assets/stylesheets/global/_variables-dark.scss +53 −69
  33. assets/stylesheets/global/_variables-light.scss +76 −0
  34. assets/stylesheets/global/_variables.scss +25 −82
  35. assets/stylesheets/pages/_angularjs.scss +1 −1
  36. assets/stylesheets/pages/_async.scss +2 −2
  37. assets/stylesheets/pages/_bash.scss +1 −1
  38. assets/stylesheets/pages/_bootstrap.scss +1 −1
  39. assets/stylesheets/pages/_c.scss +2 −2
  40. assets/stylesheets/pages/_clojure.scss +1 −1
  41. assets/stylesheets/pages/_d.scss +3 −3
  42. assets/stylesheets/pages/_dart.scss +1 −1
  43. assets/stylesheets/pages/_dojo.scss +1 −1
  44. assets/stylesheets/pages/_ember.scss +2 −2
  45. assets/stylesheets/pages/_erlang.scss +1 −1
  46. assets/stylesheets/pages/_jquery.scss +2 −2
  47. assets/stylesheets/pages/_love.scss +2 −2
  48. assets/stylesheets/pages/_mdn.scss +3 −3
  49. assets/stylesheets/pages/_meteor.scss +2 −2
  50. assets/stylesheets/pages/_npm.scss +1 −1
  51. assets/stylesheets/pages/_phalcon.scss +1 −1
  52. assets/stylesheets/pages/_php.scss +2 −2
  53. assets/stylesheets/pages/_postgres.scss +1 −1
  54. assets/stylesheets/pages/_qt.scss +1 −1
  55. assets/stylesheets/pages/_rdoc.scss +4 −4
  56. assets/stylesheets/pages/_react_native.scss +1 −1
  57. assets/stylesheets/pages/_redis.scss +2 −2
  58. assets/stylesheets/pages/_rfc.scss +1 −1
  59. assets/stylesheets/pages/_rust.scss +10 −1
  60. assets/stylesheets/pages/_simple.scss +1 −31
  61. assets/stylesheets/pages/_sphinx.scss +2 −2
  62. assets/stylesheets/pages/_sphinx_simple.scss +1 −1
  63. assets/stylesheets/pages/_support_tables.scss +1 −1
  64. assets/stylesheets/pages/_yard.scss +1 −1
  65. assets/stylesheets/pages/_yii.scss +1 −1
  66. lib/app.rb +2 −16
  67. lib/docs/filters/elixir/clean_html.rb +1 −0
  68. lib/docs/filters/express/clean_html.rb +5 −0
  69. lib/docs/filters/handlebars/clean_html.rb +44 −0
  70. lib/docs/filters/handlebars/entries.rb +19 −0
  71. lib/docs/filters/puppeteer/clean_html.rb +24 −0
  72. lib/docs/filters/puppeteer/entries.rb +41 −0
  73. lib/docs/filters/python/clean_html.rb +5 −3
  74. lib/docs/filters/python/entries_v3.rb +12 −10
  75. lib/docs/filters/rust/clean_html.rb +32 −4
  76. lib/docs/filters/rust/entries.rb +8 −5
  77. lib/docs/scrapers/apache_pig.rb +1 −1
  78. lib/docs/scrapers/bower.rb +1 −1
  79. lib/docs/scrapers/chai.rb +1 −1
  80. lib/docs/scrapers/codeceptjs.rb +1 −1
  81. lib/docs/scrapers/docker.rb +1 −1
  82. lib/docs/scrapers/electron.rb +1 −1
  83. lib/docs/scrapers/elixir.rb +1 −1
  84. lib/docs/scrapers/express.rb +1 −1
  85. lib/docs/scrapers/fish.rb +1 −1
  86. lib/docs/scrapers/flow.rb +1 −1
  87. lib/docs/scrapers/gnu.rb +1 −1
  88. lib/docs/scrapers/grunt.rb +1 −1
  89. lib/docs/scrapers/handlebars.rb +23 −0
  90. lib/docs/scrapers/haxe.rb +1 −1
  91. lib/docs/scrapers/immutable.rb +1 −1
  92. lib/docs/scrapers/influxdata.rb +1 −1
  93. lib/docs/scrapers/jasmine.rb +1 −1
  94. lib/docs/scrapers/jest.rb +1 −1
  95. lib/docs/scrapers/laravel.rb +13 −0
  96. lib/docs/scrapers/less.rb +1 −1
  97. lib/docs/scrapers/lodash.rb +1 −1
  98. lib/docs/scrapers/marionette.rb +1 −1
  99. lib/docs/scrapers/markdown.rb +1 −1
  100. lib/docs/scrapers/mocha.rb +1 −1
  101. lib/docs/scrapers/mongoose.rb +1 −1
  102. lib/docs/scrapers/nim.rb +1 −1
  103. lib/docs/scrapers/puppeteer.rb +18 −0
  104. lib/docs/scrapers/redux.rb +1 −1
  105. lib/docs/scrapers/requirejs.rb +1 −1
  106. lib/docs/scrapers/rust.rb +1 −1
  107. lib/docs/scrapers/typescript.rb +1 −1
  108. lib/docs/scrapers/vagrant.rb +1 −1
  109. lib/docs/scrapers/vulkan.rb +1 −1
  110. lib/docs/scrapers/yarn.rb +1 −1
  111. lib/tasks/docs.thor +6 −2
  112. lib/tasks/sprites.thor +1 −1
  113. public/icons/docs/handlebars/16.png +0 −0
  114. public/icons/docs/handlebars/16@2x.png +0 −0
  115. public/icons/docs/handlebars/SOURCE +1 −0
  116. public/icons/docs/puppeteer/16.png +0 −0
  117. public/icons/docs/puppeteer/16@2x.png +0 −0
  118. public/icons/docs/puppeteer/SOURCE +1 −0
  119. public/images/webapp-icon-512.png +0 −0
  120. public/manifest.json +5 −0
  121. test/app_test.rb +43 −21
  122. views/index.erb +2 −2
  123. views/other.erb +2 −2
  124. views/unsupported.erb +4 −7
.travis.yml+3−0
@@ -1,4 +1,7 @@
11 language: ruby
2+
3+cache: bundler
4+
25 before_script:
36 - gem update --system
47 - gem install bundler
Gemfile+1−0
@@ -11,6 +11,7 @@ group :app do · 10 unmodified lines
1111 gem 'rack'
1212 gem 'sinatra'
1313 gem 'sinatra-contrib'
14+ gem 'rack-ssl-enforcer'
1415 gem 'thin'
1516 gem 'sprockets'
1617 gem 'sprockets-helpers'
Gemfile.lock+30−26
@@ -1,13 +1,13 @@
11 GEM
22 remote: https://rubygems.org/
33 specs:
4− activesupport (5.2.0)
4+ activesupport (5.2.1)
55 concurrent-ruby (~> 1.0, >= 1.0.2)
66 i18n (>= 0.7, < 2)
77 minitest (~> 5.1)
88 tzinfo (~> 1.1)
9− backports (3.11.3)
10− better_errors (2.4.0)
9+ backports (3.11.4)
10+ better_errors (2.5.0)
1111 coderay (>= 1.0.0)
1212 erubi (>= 1.0.0)
1313 rack (>= 0.9.0)
@@ -28,42 +28,43 @@ GEM · 14 unmodified lines
2828 exifr (1.3.4)
2929 ffi (1.9.25)
3030 fspath (3.1.0)
31− highline (1.7.10)
31+ highline (2.0.0)
3232 html-pipeline (2.8.4)
3333 activesupport (>= 2)
3434 nokogiri (>= 1.4)
35− i18n (1.0.1)
35+ i18n (1.1.1)
3636 concurrent-ruby (~> 1.0)
37− image_optim (0.26.1)
37+ image_optim (0.26.3)
3838 exifr (~> 1.2, >= 1.2.2)
3939 fspath (~> 3.0)
40− image_size (~> 1.5)
40+ image_size (>= 1.5, < 3)
4141 in_threads (~> 1.3)
4242 progress (~> 3.0, >= 3.0.1)
4343 image_optim_pack (0.5.1)
4444 fspath (>= 2.1, < 4)
4545 image_optim (~> 0.19)
46− image_size (1.5.0)
46+ image_size (2.0.0)
4747 in_threads (1.5.0)
4848 method_source (0.9.0)
4949 mini_portile2 (2.3.0)
5050 minitest (5.11.3)
5151 multi_json (1.13.1)
52− mustermann (1.0.2)
53− newrelic_rpm (5.2.0.345)
54− nokogiri (1.8.4)
52+ mustermann (1.0.3)
53+ newrelic_rpm (5.4.0.347)
54+ nokogiri (1.8.5)
5555 mini_portile2 (~> 2.3.0)
5656 options (2.3.2)
57− progress (3.4.0)
58− progress_bar (1.2.0)
59− highline (~> 1.6)
57+ progress (3.5.0)
58+ progress_bar (1.3.0)
59+ highline (>= 1.6, < 3)
6060 options (~> 2.3.0)
6161 pry (0.11.3)
6262 coderay (~> 1.1.0)
6363 method_source (~> 0.9.0)
6464 rack (2.0.5)
65− rack-protection (2.0.3)
65+ rack-protection (2.0.4)
6666 rack
67+ rack-ssl-enforcer (0.2.9)
6768 rack-test (1.1.0)
6869 rack (>= 1.0, < 3)
6970 rake (12.3.1)
@@ -71,23 +72,23 @@ GEM · 1 unmodified line
7172 rb-inotify (0.9.10)
7273 ffi (>= 0.5.0, < 2)
7374 rr (1.2.1)
74− sass (3.5.7)
75+ sass (3.6.0)
7576 sass-listen (~> 4.0.0)
7677 sass-listen (4.0.0)
7778 rb-fsevent (~> 0.9, >= 0.9.4)
7879 rb-inotify (~> 0.9, >= 0.9.7)
79− sinatra (2.0.3)
80+ sinatra (2.0.4)
8081 mustermann (~> 1.0)
8182 rack (~> 2.0)
82− rack-protection (= 2.0.3)
83+ rack-protection (= 2.0.4)
8384 tilt (~> 2.0)
84− sinatra-contrib (2.0.3)
85+ sinatra-contrib (2.0.4)
8586 activesupport (>= 4.0.0)
8687 backports (>= 2.8.2)
8788 multi_json
8889 mustermann (~> 1.0)
89− rack-protection (= 2.0.3)
90− sinatra (= 2.0.3)
90+ rack-protection (= 2.0.4)
91+ sinatra (= 2.0.4)
9192 tilt (>= 1.3, < 3)
9293 sprockets (3.7.2)
9394 concurrent-ruby (~> 1.0)
@@ -96,9 +97,11 @@ GEM · 2 unmodified lines
9697 sprockets (>= 2.2)
9798 sprockets-sass (2.0.0.beta2)
9899 sprockets (>= 2.0, < 4.0)
99− strings (0.1.1)
100− unicode-display_width (~> 1.3.0)
100+ strings (0.1.4)
101+ strings-ansi (~> 0.1.0)
102+ unicode-display_width (~> 1.4.0)
101103 unicode_utils (~> 1.4.0)
104+ strings-ansi (0.1.0)
102105 thin (1.7.2)
103106 daemons (~> 1.0, >= 1.0.9)
104107 eventmachine (~> 1.0, >= 1.0.4)
@@ -116,9 +119,9 @@ GEM · 11 unmodified lines
116119 ethon (>= 0.9.0)
117120 tzinfo (1.2.5)
118121 thread_safe (~> 0.1)
119− uglifier (4.1.17)
122+ uglifier (4.1.19)
120123 execjs (>= 0.3.0, < 3)
121− unicode-display_width (1.3.3)
124+ unicode-display_width (1.4.0)
122125 unicode_utils (1.4.0)
123126 unix_utils (0.0.15)
124127 yajl-ruby (1.4.1)
@@ -142,6 +145,7 @@ DEPENDENCIES · 17 unmodified lines
142145 progress_bar
143146 pry (~> 0.11.0)
144147 rack
148+ rack-ssl-enforcer
145149 rack-test
146150 rake
147151 rr
@@ -163,4 +167,4 @@ RUBY VERSION · 15 unmodified lines
163167 ruby 2.5.1p57
164168
165169 BUNDLED WITH
166− 1.16.4
170+ 1.16.6
README.md+4−8
@@ -64,14 +64,10 @@ Another driving factor is performance and the fact that everything happens in th · 63 unmodified lines
6464
6565 DevDocs being a developer tool, the browser requirements are high:
6666
67−1. On the desktop:
68− * Recent version of Chrome, Firefox, or Opera
69− * Safari 8+
70− * IE / Edge 10+
71−2. On mobile:
72− * iOS 8+
73− * Android 4.1+
74− * Windows Phone 8+
67+* Recent versions of Firefox, Chrome, or Opera
68+* Safari 9.1+
69+* Edge 16+
70+* iOS 10+
7571
7672 This allows the code to take advantage of the latest DOM and HTML5 APIs and make developing DevDocs a lot more fun!
7773
assets/javascripts/app/app.coffee+1−6
@@ -245,7 +245,7 @@ · 244 unmodified lines
245245 matchMedia: !!window.matchMedia
246246 insertAdjacentHTML: !!document.body.insertAdjacentHTML
247247 defaultPrevented: document.createEvent('CustomEvent').defaultPrevented is false
248− cssGradients: supportsCssGradients()
248+ cssVariables: CSS.supports and CSS.supports('(--t: 0)')
249249
250250 for key, value of features when not value
251251 Raven.captureMessage "unsupported/#{key}", level: 'info'
@@ -268,9 +268,4 @@ · 16 unmodified lines
268268 isInvalidLocation: ->
269269 @config.env is 'production' and location.host.indexOf(app.config.production_host) isnt 0
270270
271−supportsCssGradients = ->
272− el = document.createElement('div')
273− el.style.cssText = "background-image: -webkit-linear-gradient(top, #000, #fff); background-image: linear-gradient(to top, #000, #fff);"
274− el.style.backgroundImage.indexOf('gradient') >= 0
275−
276271 $.extend app, Events
assets/javascripts/lib/page.coffee+1−1
@@ -190,7 +190,7 @@ isSameOrigin = (url) -> · 189 unmodified lines
190190
191191 updateCanonicalLink = ->
192192 @canonicalLink ||= document.head.querySelector('link[rel="canonical"]')
193− @canonicalLink.setAttribute('href', "http://#{location.host}#{location.pathname}")
193+ @canonicalLink.setAttribute('href', "https://#{location.host}#{location.pathname}")
194194
195195 trackers = []
196196
assets/javascripts/news.json+3−0
@@ -1,5 +1,8 @@
11 [
22 [
3+ "2018-09-23",
4+ "New documentations: <a href=\"/puppeteer/\">Puppeteer</a> and <a href=\"/handlebars/\">Handlebars.js</a>"
5+ ], [
36 "2018-08-12",
47 "New documentations: <a href=\"/dart/\">Dart</a> and <a href=\"/qt/\">Qt</a>"
58 ], [
assets/javascripts/templates/error_tmpl.coffee+4−7
@@ -56,13 +56,10 @@ app.templates.unsupportedBrowser = """ · 55 unmodified lines
5656 <h1 class="_fail-title">Your browser is unsupported, sorry.</h1>
5757 <p class="_fail-text">DevDocs is an API documentation browser which supports the following browsers:
5858 <ul class="_fail-list">
59− <li>Recent versions of Chrome and Firefox
60− <li>Safari 5.1+
61− <li>Opera 12.1+
62− <li>Internet Explorer 10+
63− <li>iOS 6+
64− <li>Android 4.1+
65− <li>Windows Phone 8+
59+ <li>Recent versions of Firefox, Chrome, or Opera
60+ <li>Safari 9.1+
61+ <li>Edge 16+
62+ <li>iOS 10+
6663 </ul>
6764 <p class="_fail-text">
6865 If you're unable to upgrade, I apologize.
assets/javascripts/templates/pages/about_tmpl.coffee+10−0
@@ -310,6 +310,11 @@ credits = [ · 309 unmodified lines
310310 'GruntJS Team',
311311 'MIT',
312312 'https://github.com/gruntjs/grunt-docs/blob/master/package.json#L10'
313+ ], [
314+ 'Handlebars',
315+ '2011-2017 Yehuda Katz',
316+ 'MIT',
317+ 'https://raw.githubusercontent.com/wycats/handlebars.js/master/LICENSE'
313318 ], [
314319 'Haskell',
315320 'The University of Glasgow',
@@ -560,6 +565,11 @@ credits = [ · 244 unmodified lines
560565 '1996-2018 The PostgreSQL Global Development Group<br>&copy; 1994 The Regents of the University of California',
561566 'PostgreSQL',
562567 'https://www.postgresql.org/about/licence/'
568+ ], [
569+ 'Puppeteer',
570+ '2017 Google Inc',
571+ 'Apache',
572+ 'https://raw.githubusercontent.com/GoogleChrome/puppeteer/master/LICENSE'
563573 ], [
564574 'Pygame',
565575 'Pygame Developpers',
assets/javascripts/templates/pages/root_tmpl.coffee.erb+0−11
@@ -72,14 +72,3 @@ app.templates.androidWarning = """ · 71 unmodified lines
7272 <p>To install DevDocs on your phone, visit <a href="https://devdocs.io" target="_blank" rel="noopener">devdocs.io</a> in Chrome and select "Add to home screen" in the menu.
7373 </div>
7474 """
75−
76−app.templates.httpWarning = """
77− <div class="_intro"><div class="_intro-message">
78− <h2 class="_intro-title">Hi there!</h2>
79− <p>DevDocs is migrating to HTTPS.
80− <p>Please update your bookmarks to point to <a href="https://devdocs.io">https://devdocs.io</a>.
81− <p>When using the HTTPS version, your preferences will carry over automatically, but your offline data will be reset. Simply re-download documentation in the <a href="https://devdocs.io/offline">Offline area</a>, and you'll be all set to use DevDocs securely offline.
82− <p>Sorry for the inconvenience. This migration is needed because browsers are removing support for certain DOM APIs that power DevDocs's offline mode over non-secure origins.
83− <p>Thanks for using DevDocs, and happy coding!
84− </div></div>
85−"""
assets/javascripts/views/content/root_page.coffee+0−4
@@ -19,10 +19,6 @@ class app.views.RootPage extends app.View · 18 unmodified lines
1919 else
2020 'intro'
2121
22− # temporary
23− if location.host is 'devdocs.io' and location.protocol is 'http:'
24− tmpl = 'httpWarning'
25−
2622 @append @tmpl(tmpl)
2723 return
2824
assets/javascripts/views/content/settings_page.coffee+3−4
@@ -24,10 +24,9 @@ class app.views.SettingsPage extends app.View · 23 unmodified lines
2424 'Preferences'
2525
2626 toggleDark: (enable) ->
27− css = $('link[rel="stylesheet"][data-alt]')
28− alt = css.getAttribute('data-alt')
29− css.setAttribute('data-alt', css.getAttribute('href'))
30− css.setAttribute('href', alt)
27+ html = document.documentElement
28+ html.classList.toggle('_theme-default')
29+ html.classList.toggle('_theme-dark')
3130 app.settings.set('dark', !!enable)
3231 app.appCache?.updateInBackground()
3332 return
assets/stylesheets/application-dark.css.scss+0−107
@@ -1,107 +0,0 @@
1−//= depend_on sprites/docs.png
2−//= depend_on sprites/docs@2x.png
3−//= depend_on sprites/docs.json
4−
5−/*!
6− * Copyright 2013-2018 Thibaut Courouble and other contributors
7− *
8− * This source code is licensed under the terms of the Mozilla
9− * Public License, v. 2.0, a copy of which may be obtained at:
10− * http://mozilla.org/MPL/2.0/
11− */
12−
13−@import 'global/variables-dark',
14− 'global/mixins',
15− 'global/icons',
16− 'global/classes',
17− 'global/base';
18−
19−@import 'components/app',
20− 'components/header',
21− 'components/notif',
22− 'components/sidebar',
23− 'components/settings',
24− 'components/content',
25− 'components/page',
26− 'components/fail',
27− 'components/path',
28− 'components/notice',
29− 'components/prism',
30− 'components/mobile';
31−
32−@import 'pages/simple',
33− 'pages/angular',
34− 'pages/angularjs',
35− 'pages/apache',
36− 'pages/async',
37− 'pages/bash',
38− 'pages/bootstrap',
39− 'pages/c',
40− 'pages/cakephp',
41− 'pages/clojure',
42− 'pages/codeception',
43− 'pages/coffeescript',
44− 'pages/cordova',
45− 'pages/crystal',
46− 'pages/d',
47− 'pages/d3',
48− 'pages/dart',
49− 'pages/dojo',
50− 'pages/drupal',
51− 'pages/elixir',
52− 'pages/ember',
53− 'pages/erlang',
54− 'pages/express',
55− 'pages/git',
56− 'pages/github',
57− 'pages/go',
58− 'pages/graphite',
59− 'pages/haskell',
60− 'pages/jekyll',
61− 'pages/jquery',
62− 'pages/julia',
63− 'pages/knockout',
64− 'pages/kotlin',
65− 'pages/laravel',
66− 'pages/liquid',
67− 'pages/love',
68− 'pages/lua',
69− 'pages/mdn',
70− 'pages/meteor',
71− 'pages/modernizr',
72− 'pages/moment',
73− 'pages/nginx',
74− 'pages/node',
75− 'pages/npm',
76− 'pages/openjdk',
77− 'pages/perl',
78− 'pages/phalcon',
79− 'pages/phaser',
80− 'pages/php',
81− 'pages/phpunit',
82− 'pages/postgres',
83− 'pages/pug',
84− 'pages/python',
85− 'pages/qt',
86− 'pages/ramda',
87− 'pages/rdoc',
88− 'pages/react_native',
89− 'pages/redis',
90− 'pages/rethinkdb',
91− 'pages/rfc',
92− 'pages/rubydoc',
93− 'pages/rust',
94− 'pages/sinon',
95− 'pages/socketio',
96− 'pages/sphinx',
97− 'pages/sphinx_simple',
98− 'pages/sqlite',
99− 'pages/support_tables',
100− 'pages/tcl_tk',
101− 'pages/tensorflow',
102− 'pages/terraform',
103− 'pages/underscore',
104− 'pages/vue',
105− 'pages/webpack',
106− 'pages/yard',
107− 'pages/yii';
assets/stylesheets/application.css.scss+3−1
@@ -10,7 +10,9 @@ · 9 unmodified lines
1010 * http://mozilla.org/MPL/2.0/
1111 */
1212
13−@import 'global/variables',
13+@import 'global/variables-light',
14+ 'global/variables-dark',
15+ 'global/variables',
1416 'global/mixins',
1517 'global/icons',
1618 'global/classes',
assets/stylesheets/components/_app.scss+5−5
@@ -1,6 +1,6 @@
1−html._booting { background: $contentBackground; }
1+html._booting { background: var(--contentBackground); }
22 body._max-width { background: none; }
3−html._booting body._max-width { background: $documentBackground; }
3+html._booting body._max-width { background: var(--documentBackground); }
44
55 ._app {
66 position: relative;
@@ -15,8 +15,8 @@ html._booting body._max-width { background: $documentBackground; } · 8 unmodified lines
1515
1616 ._max-width & {
1717 margin: 0 auto;
18− max-width: $maxWidth;
19− background: $contentBackground;
20− box-shadow: 1px 0 $headerBorder, -1px 0 $headerBorder;
18+ max-width: var(--maxWidth);
19+ background: var(--contentBackground);
20+ box-shadow: 1px 0 var(--headerBorder), -1px 0 var(--headerBorder);
2121 }
2222 }
assets/stylesheets/components/_content.scss+27−32
@@ -4,13 +4,13 @@ · 3 unmodified lines
44
55 ._container {
66 position: relative;
7− z-index: $contentZ;
7+ z-index: var(--contentZ);
88 height: 100%;
9− margin-left: $sidebarWidth;
9+ margin-left: var(--sidebarWidth);
1010 pointer-events: none;
1111 @extend %border-box;
1212
13− @media #{$mediumScreen} { margin-left: $sidebarMediumWidth; }
13+ @include mobile { margin-left: var(--sidebarMediumWidth); }
1414
1515 ._sidebar-hidden & { margin-left: 0; }
1616 body:not(._native-scrollbars) & { -webkit-margin-end: -1px; }
@@ -30,7 +30,7 @@ · 13 unmodified lines
3030 ._sidebar-hidden &:before {
3131 content: '';
3232 display: block;
33− margin-top: $headerHeight;
33+ margin-top: var(--headerHeight);
3434 }
3535
3636 ._overlay-scrollbars & { padding-left: .625rem; }
@@ -54,7 +54,7 @@ · 17 unmodified lines
5454 font-size: 4rem;
5555 font-weight: 300;
5656 letter-spacing: -.125rem;
57− color: $loadingText;
57+ color: var(--loadingText);
5858 text-align: center;
5959 cursor: default;
6060 }
@@ -68,7 +68,7 @@ · 7 unmodified lines
6868 //
6969
7070 ._splash-title {
71− color: $splashText;
71+ color: var(--splashText);
7272 @extend %loading, %user-select-none;
7373 }
7474
@@ -88,7 +88,7 @@ · 13 unmodified lines
8888 min-height: calc(100vh - 2.375rem);
8989
9090 ._sidebar-hidden & {
91− min-height: calc(100vh - 2.375rem - #{$headerHeight});
91+ min-height: calc(100vh - 2.375rem - var(--headerHeight));
9292 }
9393 }
9494
@@ -140,12 +140,12 @@ · 45 unmodified lines
140140
141141 ._error-text {
142142 margin: 0 0 1rem;
143− color: $textColorLight;
143+ color: var(--textColorLight);
144144 }
145145
146146 ._error-links {
147147 font-size: 1rem;
148− font-weight: $boldFontWeight;
148+ font-weight: var(--boldFontWeight);
149149 }
150150
151151 ._error-link { padding: 0 .5rem; }
@@ -167,7 +167,7 @@ · 15 unmodified lines
167167 height: 1px;
168168 margin-top: .25rem;
169169 margin-left: 1rem;
170− background: $boxBorderLight;
170+ background: var(--boxBorderLight);
171171 }
172172 }
173173
@@ -197,7 +197,7 @@ · 23 unmodified lines
197197 ._toc-title {
198198 margin: 0 0 .5rem;
199199 font-size: inherit;
200− font-weight: $boldFontWeight;
200+ font-weight: var(--boldFontWeight);
201201 }
202202
203203 ._toc-list {
@@ -252,7 +252,7 @@ · 48 unmodified lines
252252 ._docs-size {
253253 text-align: right;
254254
255− > small { color: $textColorLight; }
255+ > small { color: var(--textColorLight); }
256256 }
257257
258258 ._docs-tools {
@@ -285,7 +285,7 @@ · 26 unmodified lines
285285 padding: 0 .75rem;
286286 }
287287 ._btn-link:not(._show) { display: none; }
288− ._btn-link._show ~ ._btn-link._show { border-left: 1px solid $boxBorder; }
288+ ._btn-link._show ~ ._btn-link._show { border-left: 1px solid var(--boxBorder); }
289289 }
290290
291291 //
@@ -297,7 +297,7 @@ · 5 unmodified lines
297297 position: relative;
298298 padding-left: 10em;
299299 font-size: .8125rem;
300− color: $textColorLight;
300+ color: var(--textColorLight);
301301
302302 + ._news-row { margin-top: 1em; }
303303 }
@@ -305,7 +305,7 @@ · 1 unmodified line
305305 ._news-title {
306306 display: block;
307307 font-size: .875rem;
308− color: $textColor;
308+ color: var(--textColor);
309309 }
310310
311311 ._news-date {
@@ -372,12 +372,12 @@ · 60 unmodified lines
372372 // Utilities
373373 //
374374
375−._bold { font-weight: $boldFontWeight; }
375+._bold { font-weight: var(--boldFontWeight); }
376376 ._note { @extend %note; }
377377 ._note-green { @extend %note-green; }
378378 ._label { @extend %label; }
379379 ._code { @extend %code; }
380−._highlight { background: $highlightBackground !important; }
380+._highlight { background: var(--highlightBackground) !important; }
381381
382382 ._table { width: 100%; }
383383 ._mobile ._table { overflow-x: auto; }
@@ -396,12 +396,9 @@ · 12 unmodified lines
396396 pre:hover > & { display: block; }
397397 &:hover { opacity: 1; }
398398
399− > svg { @extend %svg-icon; }
400−
401− @if $style == 'dark' {
402− > svg { fill: white; }
403− } @else {
404− > svg { fill: black; }
399+ > svg {
400+ @extend %svg-icon;
401+ fill: var(--absolute);
405402 }
406403
407404 &._pre-clip-success > svg,
@@ -419,15 +416,13 @@ · 11 unmodified lines
419416 line-height: normal;
420417 white-space: nowrap;
421418 padding: .375rem .675rem;
422− background-image: linear-gradient(lighten($boxBackground, 4%), darken($boxBackground, 2%));
423− border: 1px solid $boxBorder;
419+ background-color: var(--boxBackground);
420+ border: 1px solid var(--boxBorder);
424421 border-radius: 3px;
425− box-shadow: 0 1px rgba($boxBorder, .08);
426422 cursor: pointer;
427423
428424 &:active {
429− background-color: $boxBackground;
430− box-shadow: inset 0 1px 1px rgba(black, .05), inset 0 1px 4px $boxBorder;
425+ box-shadow: inset 0 1px 1px rgba(black, .05), inset 0 1px 4px var(--boxBorder);
431426 }
432427 }
433428
@@ -447,18 +442,18 @@ · 13 unmodified lines
447442
448443 ._btn-link {
449444 line-height: inherit;
450− color: $linkColor;
451− text-decoration: $linkTextDecoration;
445+ color: var(--linkColor);
446+ text-decoration: var(--linkTextDecoration);
452447
453448 &:hover {
454− color: $linkColorHover;
449+ color: var(--linkColorHover);
455450 text-decoration: underline;
456451 }
457452 }
458453
459454 ._reset-btn,
460455 ._reset-btn:hover {
461− color: $textColorRed;
456+ color: var(--textColorRed);
462457 }
463458
464459 ._github-btn {
assets/stylesheets/components/_fail.scss+2−2
@@ -1,4 +1,4 @@
1−._fail {
1+._fail { // Don't use CSS variables, in case the browser doesn't support them.
22 display: block;
33 position: relative;
44 top: 1.5rem;
@@ -23,7 +23,7 @@ · 18 unmodified lines
2323 ._fail-title {
2424 margin: 0 0 1rem;
2525 font-size: 1rem;
26− font-weight: $boldFontWeight;
26+ font-weight: bold;
2727 }
2828
2929 ._fail-text, ._fail-list {
assets/stylesheets/components/_header.scss+25−35
@@ -4,20 +4,20 @@ · 3 unmodified lines
44
55 ._header {
66 position: absolute;
7− z-index: $headerZ;
7+ z-index: var(--headerZ);
88 top: 0;
99 left: 0;
1010 display: -ms-flexbox;
1111 display: flex;
12− width: $sidebarWidth;
13− height: $headerHeight;
14− background: $headerBackground;
15− border-bottom: 1px solid $headerBorder;
16− border-right: 1px solid $headerBorder;
12+ width: var(--sidebarWidth);
13+ height: var(--headerHeight);
14+ background: var(--headerBackground);
15+ border-bottom: 1px solid var(--headerBorder);
16+ border-right: 1px solid var(--headerBorder);
1717 @extend %border-box;
1818 @extend %user-select-none;
1919
20− @media #{$mediumScreen} { width: $sidebarMediumWidth; }
20+ @include mobile { width: var(--sidebarMediumWidth); }
2121 }
2222
2323 ._header-left {
@@ -35,7 +35,7 @@ · 11 unmodified lines
3535 flex: 0 0 auto;
3636 width: 2.25rem;
3737 height: 100%;
38− color: $textColorLight;
38+ color: var(--textColorLight);
3939 text-align: center;
4040
4141 &[hidden] { display: none; }
@@ -67,8 +67,8 @@ · 25 unmodified lines
6767 word-wrap: normal;
6868 overflow-wrap: normal;
6969 font-size: .875rem;
70− background: $contentBackground;
71− border: 1px solid $headerBorder;
70+ background: var(--contentBackground);
71+ border: 1px solid var(--headerBorder);
7272 border-radius: 3px;
7373 box-shadow: -1px 1px 1px rgba(black, .05);
7474 transition: all 0ms cubic-bezier(0.23, 1, 0.32, 1) 1ms;
@@ -98,10 +98,10 @@ · 23 unmodified lines
9898 margin: 0;
9999 line-height: 1.5rem;
100100 font-size: 1rem;
101− font-weight: $boldFontWeight;
101+ font-weight: var(--boldFontWeight);
102102 letter-spacing: -.5px;
103− background: $sidebarBackground;
104− border-bottom: 1px solid $sidebarBorder;
103+ background: var(--sidebarBackground);
104+ border-bottom: 1px solid var(--sidebarBorder);
105105 border-radius: 2px 2px 0 0;
106106 }
107107
@@ -109,7 +109,7 @@ · 1 unmodified line
109109 ._menu-title-link:hover {
110110 display: block;
111111 padding: .5rem 1rem;
112− color: $focusText;
112+ color: var(--focusText);
113113 text-decoration: none;
114114 }
115115
@@ -121,9 +121,9 @@ · 5 unmodified lines
121121 text-decoration: none;
122122
123123 &:hover {
124− color: $focusText;
124+ color: var(--focusText);
125125 text-decoration: none;
126− background: $sidebarBackground;
126+ background: var(--sidebarBackground);
127127 }
128128
129129 &:last-child { border-radius: 0 0 2px 2px; }
@@ -151,11 +151,7 @@ · 21 unmodified lines
151151 opacity: .42;
152152 @extend %svg-icon;
153153
154− @if $style == 'dark' {
155− fill: white;
156− } @else {
157− fill: black;
158− }
154+ fill: var(--absolute);
159155 }
160156 }
161157
@@ -166,21 +162,19 @@ · 4 unmodified lines
166162 height: 100%;
167163 padding: 0 .75rem 1px 1.75rem;
168164 font-size: .875rem;
169− background: $contentBackground;
165+ background: var(--contentBackground);
170166 border: 1px solid;
171− border-color: darken($headerBorder, 2%);
167+ border-color: var(--searchBorder);
172168 border-radius: 3px;
173169
174170 &:focus {
175171 outline: 0;
176− @if $inputFocusBorder {
177− border-color: $inputFocusBorder;
178− box-shadow: 0 0 1px $inputFocusBorder;
179− }
172+ border-color: var(--inputFocusBorder);
173+ box-shadow: 0 0 1px var(--inputFocusBorder);
180174 }
181175
182176 &[disabled] {
183− background: $sidebarBackground;
177+ background: var(--sidebarBackground);
184178 cursor: not-allowed;
185179 }
186180 }
@@ -202,13 +196,9 @@ · 15 unmodified lines
202196 top: .5rem;
203197 left: .375rem;
204198 @extend %svg-icon;
199+ fill: var(--absolute);
205200 }
206201
207− @if $style == 'dark' {
208− > svg { fill: white; }
209− } @else {
210− > svg { fill: black; }
211− }
212202 ._search-active > & { display: block; }
213203 }
214204
@@ -222,8 +212,8 @@ · 7 unmodified lines
222212 line-height: 1.25rem;
223213 max-width: 50%;
224214 font-size: .8125rem;
225− color: $textColorLight;
226− background: darken($headerBackground, 5%);
215+ color: var(--textColorLight);
216+ background: var(--searchTagBackground);
227217 border-radius: 2px;
228218 @extend %truncate-text;
229219 }
assets/stylesheets/components/_mobile.scss+2−2
@@ -4,7 +4,7 @@ · 3 unmodified lines
44
55 ._mobile {
66 font-size: 100%;
7− background: $contentBackground;
7+ background: var(--contentBackground);
88
99 ._hide-on-mobile { display: none; }
1010
@@ -18,7 +18,7 @@ · 7 unmodified lines
1818
1919 ._container {
2020 margin: 0;
21− padding-top: $headerHeight;
21+ padding-top: var(--headerHeight);
2222 }
2323
2424 ._content {
assets/stylesheets/components/_notice.scss+5−5
@@ -1,15 +1,15 @@
11 ._notice {
22 position: absolute;
3− z-index: $noticeZ;
3+ z-index: var(--noticeZ);
44 bottom: 0;
5− left: $sidebarWidth;
5+ left: var(--sidebarWidth);
66 right: 0;
77 height: 2.5rem;
88 padding: 0 1.25rem;
9− background: $noticeBackground;
10− box-shadow: inset 0 1px $noticeBorder;
9+ background: var(--noticeBackground);
10+ box-shadow: inset 0 1px var(--noticeBorder);
1111
12− @media #{$mediumScreen} { left: $sidebarMediumWidth; }
12+ @include mobile { left: var(--sidebarMediumWidth); }
1313
1414 ._sidebar-hidden & { left: 0; }
1515
assets/stylesheets/components/_notif.scss+12−12
@@ -7,9 +7,9 @@ · 6 unmodified lines
77 max-width: 90%;
88 padding: .625rem 1rem;
99 font-size: .75rem;
10− color: $notifColor;
11− background: $notifBackground;
12− border: $notifBorder;
10+ color: var(--notifColor);
11+ background: var(--notifBackground);
12+ border: var(--notifBorder);
1313 border-radius: .25rem;
1414 transition: opacity .2s;
1515 opacity: 0;
@@ -30,7 +30,7 @@ · 14 unmodified lines
3030
3131 ._notif-info {
3232 float: right;
33− color: $notifColorLight;
33+ color: var(--notifColorLight);
3434 }
3535
3636 ._notif-link,
@@ -69,13 +69,13 @@ · 32 unmodified lines
6969 &::-webkit-scrollbar { width: 10px !important; }
7070
7171 &::-webkit-scrollbar-track {
72− background: $notifBackground !important;
72+ background: var(--notifBackground) !important;
7373 border: 0 !important;
7474 border-radius: 5px !important;
7575 }
7676
7777 &::-webkit-scrollbar-thumb {
78− border: 3px solid $notifBackground !important;
78+ border: 3px solid var(--notifBackground) !important;
7979
8080 &:hover, &:active { border-width: 2px !important; }
8181 }
@@ -90,7 +90,7 @@ · 8 unmodified lines
9090 > ._news-row {
9191 line-height: 1.125rem;
9292 font-size: .6875rem;
93− color: $notifColorLight;
93+ color: var(--notifColorLight);
9494 margin-bottom: .25rem;
9595
9696 + ._news-row { margin-top: .625rem; }
@@ -107,7 +107,7 @@ · 10 unmodified lines
107107 ._news-date {
108108 float: right;
109109 margin-left: 1rem;
110− font-weight: $boldFontWeight;
110+ font-weight: var(--boldFontWeight);
111111 }
112112
113113 code {
@@ -128,9 +128,9 @@ · 14 unmodified lines
128128 }
129129
130130 ._notif-tip {
131− color: $textColor;
132− background: $tipBackground;
133− border: $tipBorder;
131+ color: var(--textColor);
132+ background: var(--tipBackground);
133+ border: var(--tipBorder);
134134
135− ._notif-info { color: $textColorLight; }
135+ ._notif-info { color: var(--textColorLight); }
136136 }
assets/stylesheets/components/_page.scss+4−4
@@ -23,7 +23,7 @@ · 22 unmodified lines
2323 max-width: 100%;
2424 margin-bottom: 1em;
2525 padding: 1px;
26− border: 1px dotted $boxBorder;
26+ border: 1px dotted var(--boxBorder);
2727 border-radius: 3px;
2828 @extend %border-box;
2929 }
@@ -50,7 +50,7 @@ · 20 unmodified lines
5050 display: inline-block;
5151 vertical-align: top;
5252 padding: 0 .5rem;
53− background: $contentBackground;
53+ background: var(--contentBackground);
5454 @extend %internal-link;
5555
5656 & + & { margin-left: .75rem; }
@@ -66,7 +66,7 @@ · 9 unmodified lines
6666 clear: both;
6767 margin: 2rem 0 1.5rem;
6868 font-size: .75rem;
69− color: $textColorLight;
69+ color: var(--textColorLight);
7070 text-align: center;
7171 -webkit-font-smoothing: subpixel-antialiased;
7272
@@ -78,7 +78,7 @@ · 5 unmodified lines
7878 display: inline-block;
7979 margin: 0;
8080 padding: .25rem .75rem;
81− background: $labelBackground;
81+ background: var(--labelBackground);
8282 border-radius: 3px;
8383 }
8484
assets/stylesheets/components/_path.scss+6−6
@@ -1,17 +1,17 @@
11 ._path {
22 position: absolute;
3− z-index: $noticeZ - 1;
3+ z-index: var(--headerZ);
44 bottom: 0;
5− left: $sidebarWidth;
5+ left: var(--sidebarWidth);
66 right: 0;
77 height: 2rem;
88 line-height: 2rem;
99 padding: 0 .375rem;
1010 font-size: .875rem;
11− background: $pathBackground;
12− box-shadow: inset 0 1px $pathBorder;
11+ background: var(--pathBackground);
12+ box-shadow: inset 0 1px var(--pathBorder);
1313
14− @media #{$mediumScreen} { left: $sidebarMediumWidth; }
14+ @include mobile { left: var(--sidebarMediumWidth); }
1515
1616 ._sidebar-hidden & { left: 0; }
1717
@@ -24,7 +24,7 @@ · 6 unmodified lines
2424 display: inline-block;
2525 vertical-align: top;
2626 padding: 0 .375rem;
27− color: $textColor;
27+ color: var(--textColor);
2828 text-decoration: none;
2929
3030 &:first-child:before {
assets/stylesheets/components/_prism.scss+25−32
@@ -1,9 +1,26 @@
1+html {
2+ --prismValue: #905;
3+ --prismText: #5e8e01;
4+ --prismOperator: #a67f59;
5+ --prismKeyword: #0070a3;
6+ --prismFunction: #dd4a68;
7+ --prismVariable: #e90;
8+}
9+html._theme-dark {
10+ --prismValue: #eb8160;
11+ --prismText: #ddcf88;
12+ --prismOperator: #b1c676;
13+ --prismKeyword: #91b3ed;
14+ --prismFunction: #c79e6b;
15+ --prismVariable: #e9c062;
16+}
17+
118 .token.comment,
219 .token.prolog,
320 .token.doctype,
421 .token.cdata,
522 .token.punctuation {
6− color: $textColorLight;
23+ color: var(--textColorLight);
724 }
825
926 .namespace {
@@ -17,11 +34,7 @@ · 7 unmodified lines
1734 .token.constant,
1835 .token.symbol,
1936 .token.deleted {
20− @if $style == 'dark' {
21− color: #eb8160;
22− } @else {
23− color: #905;
24− }
37+ color: var(--prismValue);
2538 }
2639
2740 .token.selector,
@@ -30,11 +43,7 @@ · 2 unmodified lines
3043 .token.char,
3144 .token.builtin,
3245 .token.inserted {
33− @if $style == 'dark' {
34− color: #ddcf88;
35− } @else {
36− color: #5e8e01;
37− }
46+ color: var(--prismText);
3847 }
3948
4049 .token.operator,
@@ -42,44 +51,28 @@ · 1 unmodified line
4251 .token.url,
4352 .language-css .token.string,
4453 .style .token.string {
45− @if $style == 'dark' {
46− color: #b1c676;
47− } @else {
48− color: #a67f59;
49− }
54+ color: var(--prismOperator);
5055 }
5156
5257 .token.atrule,
5358 .token.attr-value,
5459 .token.keyword {
55− @if $style == 'dark' {
56− color: #91b3ed;
57− } @else {
58− color: #0070a3;
59− }
60+ color: var(--prismKeyword);
6061 }
6162
6263 .token.function {
63− @if $style == 'dark' {
64− color: #c79e6b;
65− } @else {
66− color: #dd4a68;
67− }
64+ color: var(--prismFunction);
6865 }
6966
7067 .token.regex,
7168 .token.important,
7269 .token.variable {
73− @if $style == 'dark' {
74− color: #e9c062;
75− } @else {
76− color: #e90;
77− }
70+ color: var(--prismVariable);
7871 }
7972
8073 .token.important,
8174 .token.bold {
82− font-weight: $boldFontWeight;
75+ font-weight: var(--boldFontWeight);
8376 }
8477
8578 .token.italic {
assets/stylesheets/components/_settings.scss+12−12
@@ -7,15 +7,15 @@ · 6 unmodified lines
77 position: absolute;
88 top: 0;
99 bottom: 0;
10− z-index: $headerZ;
10+ z-index: var(--headerZ);
1111
1212 &._in { display: block; }
1313
1414 > ._header { justify-content: space-between; }
1515
1616 &._dirty > ._header {
17− background: $noteGreenBackground;
18− border-color: $noteGreenBorder;
17+ background: var(--noteGreenBackground);
18+ border-color: var(--noteGreenBorder);
1919 }
2020 }
2121
@@ -37,7 +37,7 @@ · 15 unmodified lines
3737 padding-right: .5rem;
3838 line-height: inherit;
3939 font-size: inherit;
40− font-weight: $boldFontWeight;
40+ font-weight: var(--boldFontWeight);
4141 text-align: right;
4242 @extend %border-box;
4343 }
@@ -52,7 +52,7 @@ · 8 unmodified lines
5252
5353 > small {
5454 display: block;
55− color: $textColorLight;
55+ color: var(--textColorLight);
5656 margin-left: 1.75rem;
5757 }
5858
@@ -62,7 +62,7 @@ · 3 unmodified lines
6262 }
6363 }
6464
65−@media (max-width: $maxWidth) {
65+@media (max-width: 80rem) {
6666 ._setting-max-width { display: none; }
6767 }
6868
@@ -80,7 +80,7 @@ · 11 unmodified lines
8080 line-height: 1.5rem;
8181 padding: 0 .75rem;
8282 font-size: .875rem;
83− font-weight: $boldFontWeight;
83+ font-weight: var(--boldFontWeight);
8484 color: inherit;
8585 text-align: left;
8686 cursor: pointer;
@@ -119,12 +119,12 @@ · 32 unmodified lines
119119 position: relative;
120120 vertical-align: top;
121121 padding: 0 .75rem;
122− line-height: $headerHeight;
123− color: $textColorLight;
122+ line-height: var(--headerHeight);
123+ color: var(--textColorLight);
124124
125125 &.active {
126− color: $textColor;
127− font-weight: $boldFontWeight;
128− box-shadow: inset 0 -2px $linkColor;
126+ color: var(--textColor);
127+ font-weight: var(--boldFontWeight);
128+ box-shadow: inset 0 -2px var(--linkColor);
129129 }
130130 }
assets/stylesheets/components/_sidebar.scss+37−39
@@ -4,14 +4,14 @@ · 3 unmodified lines
44
55 ._sidebar {
66 position: absolute;
7− z-index: $sidebarZ;
7+ z-index: var(--sidebarZ);
88 top: 0;
99 bottom: 0;
1010 left: 0;
1111 overflow-x: hidden;
1212 overflow-y: scroll;
13− padding-top: $headerHeight;
14− background: $sidebarBackground;
13+ padding-top: var(--headerHeight);
14+ background: var(--sidebarBackground);
1515 background-clip: content-box;
1616 -webkit-overflow-scrolling: touch;
1717 -ms-overflow-style: none; // IE 10 doesn't support pointer-events
@@ -22,13 +22,13 @@ · 4 unmodified lines
2222
2323 ._overlay-scrollbars & {
2424 padding-top: 0;
25− top: $headerHeight;
25+ top: var(--headerHeight);
2626 }
2727
2828 body:not(._native-scrollbars) & {
2929 &::-webkit-scrollbar { width: 10px; }
3030 &::-webkit-scrollbar-track {
31− background: $contentBackground;
31+ background: var(--contentBackground);
3232 border: 0;
3333 }
3434 &::-webkit-scrollbar-thumb {
@@ -52,10 +52,10 @@ · 17 unmodified lines
5252
5353 ._resizer {
5454 position: absolute;
55− z-index: $sidebarZ + 1;
56− top: $headerHeight;
57− bottom: $headerHeight;
58− left: $sidebarWidth;
55+ z-index: var(--headerZ);
56+ top: var(--headerHeight);
57+ bottom: var(--headerHeight);
58+ left: var(--sidebarWidth);
5959 margin-left: -2px;
6060 width: 3px;
6161 cursor: col-resize;
@@ -72,11 +72,11 @@ · 10 unmodified lines
7272 margin: 0;
7373 padding: 0;
7474 list-style: none;
75− width: $sidebarWidth;
76− box-shadow: inset -1px 0 $sidebarBorder;
75+ width: var(--sidebarWidth);
76+ box-shadow: inset -1px 0 var(--sidebarBorder);
7777 @extend %border-box;
7878
79− @media #{$mediumScreen} { width: $sidebarMediumWidth; }
79+ @include mobile { width: var(--sidebarMediumWidth); }
8080
8181 ._sidebar > & { min-height: 100%; }
8282
@@ -89,7 +89,7 @@ · 6 unmodified lines
8989 padding: 0 .75rem 0 2.125rem;
9090 line-height: 2rem;
9191 font-size: .75rem;
92− color: $textColorLight;
92+ color: var(--textColorLight);
9393 text-transform: uppercase;
9494 cursor: default;
9595 }
@@ -110,8 +110,8 @@ · 14 unmodified lines
110110 line-height: 1.5rem;
111111 font-size: .875rem;
112112 cursor: default;
113− background: $sidebarBackground;
114− box-shadow: inset -1px 0 $sidebarBorder;
113+ background: var(--sidebarBackground);
114+ box-shadow: inset -1px 0 var(--sidebarBorder);
115115 @extend %truncate-text;
116116
117117 &, &:hover {
@@ -123,16 +123,16 @@ · 5 unmodified lines
123123 &.focus:hover,
124124 &.active,
125125 &.active:hover {
126− color: $focusText;
127− background: $focusBackground;
128− box-shadow: inset -1px 0 $focusBorder;
126+ color: var(--focusText);
127+ background: var(--focusBackground);
128+ box-shadow: inset -1px 0 var(--focusBorder);
129129 }
130130
131131 &.active,
132132 &.active:hover {
133− color: $selectionText;
134− background: $selectionBackground;
135− box-shadow: inset -1px 0 $selectionBorder;
133+ color: var(--selectionText);
134+ background: var(--selectionBackground);
135+ box-shadow: inset -1px 0 var(--selectionBorder);
136136 }
137137
138138 &:before {
@@ -160,7 +160,7 @@ · 21 unmodified lines
160160 }
161161
162162 ._list-count {
163− color: $textColorLighter;
163+ color: var(--textColorLighter);
164164 pointer-events: none;
165165
166166 ._list-disabled:hover > & { display: none; }
@@ -168,7 +168,7 @@ · 1 unmodified line
168168
169169 ._list-enable {
170170 display: none;
171− color: $linkColor;
171+ color: var(--linkColor);
172172 cursor: pointer;
173173
174174 &:hover { text-decoration: underline; }
@@ -188,7 +188,7 @@ · 13 unmodified lines
188188 ._list-disabled {
189189 @extend %_list-dir;
190190
191− &, &:hover { color: $textColorLight; }
191+ &, &:hover { color: var(--textColorLight); }
192192 &:before { opacity: .7; }
193193 }
194194
@@ -200,11 +200,9 @@ · 5 unmodified lines
200200 width: 1rem;
201201 height: 1rem;
202202 cursor: pointer;
203− fill: black;
203+ fill: var(--absolute);
204204 opacity: .4;
205205
206− @if $style == 'dark' { fill: white; }
207−
208206 &:hover { opacity: .65; }
209207
210208 ._list-rdir > & {
@@ -239,11 +237,11 @@ · 28 unmodified lines
239237 //
240238
241239 ._list-pagelink {
242− color: $linkColor;
240+ color: var(--linkColor);
243241 cursor: pointer;
244242
245243 &:hover {
246− color: $linkColorHover;
244+ color: var(--linkColorHover);
247245 text-decoration: underline;
248246 }
249247 }
@@ -275,9 +273,9 @@ · 25 unmodified lines
275273 left: .75rem;
276274 width: .75rem;
277275 height: 1px;
278− background: rgba($selectionText, .9);
279− box-shadow: 0 -3px rgba($selectionText, .9), // top line
280− 0 3px rgba($selectionText, .9); // bottom line
276+ background: var(--transparentSelectionText);
277+ box-shadow: 0 -3px var(--transparentSelectionText), // top line
278+ 0 3px var(--transparentSelectionText); // bottom line
281279 }
282280 }
283281
@@ -289,7 +287,7 @@ · 5 unmodified lines
289287 padding: .5rem .75rem;
290288 line-height: 1.25rem;
291289 font-size: .8125rem;
292− color: $textColorLight;
290+ color: var(--textColorLight);
293291
294292 & + & { padding-top: 0; }
295293 }
@@ -303,9 +301,9 @@ · 7 unmodified lines
303301 ._list-hover.clone {
304302 position: fixed;
305303 overflow: visible;
306− z-index: $hoverZ;
304+ z-index: var(--hoverZ);
307305 left: 0;
308− min-width: $sidebarWidth;
306+ min-width: var(--sidebarWidth);
309307 padding: .25rem .75rem;
310308 pointer-events: none;
311309 -webkit-font-smoothing: subpixel-antialiased;
@@ -313,7 +311,7 @@ · 1 unmodified line
313311 transform: translate3d(0, 0, 0);
314312 @extend %border-box;
315313
316− @media #{$mediumScreen} { min-width: $sidebarMediumWidth; }
314+ @include mobile { min-width: var(--sidebarMediumWidth); }
317315
318316 > ._list-text { display: inline; }
319317
@@ -346,10 +344,10 @@ · 26 unmodified lines
346344 padding: .5rem .75rem .25rem .75rem;
347345 line-height: 1.5rem;
348346 font-size: .75rem;
349− font-weight: $bolderFontWeight;
350− color: $textColorLight;
347+ font-weight: var(--bolderFontWeight);
348+ color: var(--textColorLight);
351349 text-transform: uppercase;
352− background: linear-gradient(to bottom, $sidebarBackground, $sidebarBackground 75%, rgba($sidebarBackground, 0));
350+ background: linear-gradient(to bottom, var(--sidebarBackground), var(--sidebarBackground) 75%, var(--transparentSidebarBackground));
353351 cursor: default;
354352 }
355353
assets/stylesheets/global/_base.scss+37−31
@@ -1,9 +1,10 @@
11 html {
22 height: 100%;
33 font-size: 100%;
4− background: $documentBackground;
4+ background: #fff; // fallback to show the error message to browsers that don't support CSS variables.
5+ background: var(--documentBackground);
56
6− @media #{$mediumScreen} { font-size: 93.75%; }
7+ @include mobile { font-size: 93.75%; }
78
89 @include print { background: none; }
910 @import 'global/print';
@@ -17,10 +18,11 @@ body { · 7 unmodified lines
1718 font-weight: normal;
1819 font-family: $baseFont;
1920 line-height: 1.7;
20− color: $textColor;
21+ color: $textColor; // fallback to show the error message to browsers that don't support CSS variables.
22+ color: var(--textColor);
2123 word-wrap: break-word;
2224 overflow-wrap: break-word;
23− background: $contentBackground;
25+ background: var(--contentBackground);
2426 touch-action: manipulation;
2527 -webkit-tap-highlight-color: rgba(black, 0);
2628 -webkit-touch-callout: none;
@@ -29,11 +31,11 @@ body { · 2 unmodified lines
2931 }
3032
3133 a {
32− color: $linkColor;
33− text-decoration: $linkTextDecoration;
34+ color: var(--linkColor);
35+ text-decoration: var(--linkTextDecoration);
3436
3537 &:hover {
36− color: $linkColorHover;
38+ color: var(--linkColorHover);
3739 text-decoration: underline;
3840 }
3941 }
@@ -47,7 +49,7 @@ img { · 7 unmodified lines
4749 h1, h2, h3, h4, h5, h6 {
4850 margin: 1.5em 0 1em;
4951 line-height: 1.3;
50− font-weight: $bolderFontWeight;
52+ font-weight: var(--bolderFontWeight);
5153 }
5254
5355 h1 { font-size: 1.5em; }
@@ -59,7 +61,7 @@ h5, h6 { font-size: 1em; } · 5 unmodified lines
5961 p { margin: 0 0 1em; }
6062 p:last-child { margin-bottom: 0; }
6163
62−b, strong { font-weight: $boldFontWeight; }
64+b, strong { font-weight: var(--boldFontWeight); }
6365
6466 small { font-size: .9em; }
6567
@@ -79,7 +81,7 @@ li > ul, li > ol, dd > ul, dd > ol { margin: .5em 0; } · 13 unmodified lines
7981 li > p { margin-bottom: .25em; }
8082
8183 dl { margin: 1.5em 0; }
82−dt { font-weight: $boldFontWeight; }
84+dt { font-weight: var(--boldFontWeight); }
8385 dd {
8486 margin: .375em;
8587 padding-left: 1em;
@@ -91,15 +93,15 @@ dfn, var { font-style: normal; } · 5 unmodified lines
9193
9294 abbr, acronym, dfn {
9395 cursor: help;
94− border-bottom: 1px dotted $textColor;
96+ border-bottom: 1px dotted var(--textColor);
9597 }
9698
9799 pre, code, samp, %pre, %code {
98− font-family: $monoFont;
100+ font-family: var(--monoFont);
99101 font-weight: normal;
100102 font-style: normal;
101103 font-size: .9em;
102− color: $textColor;
104+ color: var(--textColor);
103105 white-space: pre-wrap;
104106 direction: ltr;
105107 -moz-tab-size: 2;
@@ -121,14 +123,14 @@ a > code { color: inherit; } · 15 unmodified lines
121123 table {
122124 margin: 1.5em 0;
123125 background: none;
124− border: 1px solid $boxBorder;
126+ border: 1px solid var(--boxBorder);
125127 border-collapse: separate;
126128 border-spacing: 0;
127129 border-radius: 3px;
128130 }
129131
130132 caption {
131− font-weight: $boldFontWeight;
133+ font-weight: var(--boldFontWeight);
132134 padding: 0 .7em .3em;
133135 }
134136
@@ -142,15 +144,15 @@ th, td { · 7 unmodified lines
142144 }
143145
144146 th {
145− font-weight: $boldFontWeight;
147+ font-weight: var(--boldFontWeight);
146148 border: 0;
147− border-bottom: 1px solid $boxBorder;
149+ border-bottom: 1px solid var(--boxBorder);
148150 border-radius: 0;
149151 @extend %heading-box;
150152
151153 &:empty { background: none; }
152154
153− + th, + td { border-left: 1px solid $boxBorder; }
155+ + th, + td { border-left: 1px solid var(--boxBorder); }
154156
155157 tr:first-child > &:first-child { border-top-left-radius: 3px; }
156158 tr:first-child > &:last-child { border-top-right-radius: 3px; }
@@ -161,10 +163,10 @@ th { · 4 unmodified lines
161163 }
162164
163165 td {
164− background: $contentBackground;
165− border-bottom: 1px solid $boxBorderLight;
166+ background: var(--contentBackground);
167+ border-bottom: 1px solid var(--boxBorderLight);
166168
167− + td { border-left: 1px solid $boxBorderLight; }
169+ + td { border-left: 1px solid var(--boxBorderLight); }
168170 tr:last-child > & { border-bottom: 0; }
169171
170172 > pre:only-child, > p:only-child, > ul:only-child, > ol:only-child {
@@ -190,7 +192,7 @@ input, button { · 19 unmodified lines
190192 margin: 0;
191193 font-family: inherit;
192194 font-size: 100%;
193− color: $textColor;
195+ color: var(--textColor);
194196 line-height: normal;
195197 @extend %border-box;
196198 }
@@ -218,6 +220,10 @@ button:focus { · 21 unmodified lines
218220 outline: -webkit-focus-ring-color auto 5px;
219221 }
220222
223+img, iframe {
224+ background: var(--externalsBackground);
225+}
226+
221227 input[type="search"]::-webkit-search-cancel-button,
222228 input[type="search"]::-webkit-search-decoration {
223229 -webkit-appearance: none;
@@ -230,9 +236,9 @@ input[type="search"]::-webkit-search-decoration { · 6 unmodified lines
230236 border: 0 !important;
231237 }
232238
233−::-webkit-input-placeholder { color: $textColorLighter; }
234−::-moz-placeholder { color: $textColorLighter; opacity: 1; }
235−:-ms-input-placeholder { color: $textColorLighter; }
239+::-webkit-input-placeholder { color: var(--textColorLighter); }
240+::-moz-placeholder { color: var(--textColorLighter); opacity: 1; }
241+:-ms-input-placeholder { color: var(--textColorLighter); }
236242
237243 body:not(._native-scrollbars) {
238244 *::-webkit-scrollbar { -webkit-appearance: none; }
@@ -243,12 +249,12 @@ body:not(._native-scrollbars) { · 4 unmodified lines
243249 *::-webkit-scrollbar-corner { display: none; }
244250
245251 *::-webkit-scrollbar-track {
246− background: $contentBackground;
247− border: 1px solid $contentBackground;
252+ background: var(--contentBackground);
253+ border: 1px solid var(--contentBackground);
248254
249255 &:hover {
250− background: $sidebarBackground;
251− border-color: $sidebarBorder;
256+ background: var(--sidebarBackground);
257+ border-color: var(--sidebarBorder);
252258 }
253259
254260 &:vertical { border-width: 0 0 0 1px; }
@@ -266,14 +272,14 @@ body:not(._native-scrollbars) { · 11 unmodified lines
266272
267273 *::-webkit-scrollbar-thumb {
268274 min-height: 2rem;
269− background: $scrollbarColor;
275+ background: var(--scrollbarColor);
270276 background-clip: padding-box;
271277 border: 5px solid rgba(black, 0);
272278 border-radius: 10px;
273279
274280 &:hover,
275281 &:active {
276− background-color: $scrollbarColorHover;
282+ background-color: var(--scrollbarColorHover);
277283 border-width: 4px;
278284 }
279285 }
assets/stylesheets/global/_classes.scss+24−25
@@ -36,15 +36,15 @@ · 35 unmodified lines
3636 //
3737
3838 %box {
39− background: $boxBackground;
40− border: 1px solid $boxBorder;
39+ background: var(--boxBackground);
40+ border: 1px solid var(--boxBorder);
4141 border-radius: 3px;
4242 }
4343
4444 %heading-box {
45− color: $boxHeaderColor;
46− background: $boxHeaderBackground;
47− border: 1px solid $boxBorder;
45+ color: var(--boxHeaderColor);
46+ background: var(--boxHeaderBackground);
47+ border: 1px solid var(--boxBorder);
4848 border-radius: 3px;
4949 }
5050
@@ -82,15 +82,15 @@ · 31 unmodified lines
8282 %note {
8383 margin: 1.5rem 0;
8484 padding: .5rem .875rem;
85− background: $noteBackground;
86− border: 1px solid $noteBorder;
85+ background: var(--noteBackground);
86+ border: 1px solid var(--noteBorder);
8787 border-radius: 3px;
8888 }
8989
9090 %label {
9191 margin: 0 1px;
9292 padding: 1px 4px 2px;
93− background: $labelBackground;
93+ background: var(--labelBackground);
9494 border-radius: 3px;
9595 }
9696
@@ -102,35 +102,35 @@ · 5 unmodified lines
102102 padding-right: .5em;
103103 overflow: hidden;
104104 font-size: inherit;
105− color: $boxHeaderColor;
106− border: 1px solid $boxBorder;
105+ color: var(--boxHeaderColor);
106+ border: 1px solid var(--boxBorder);
107107 border-radius: 2px;
108108 @extend %label;
109109 }
110110
111111 %label-yellow {
112− background: $noteBackground;
113− border-color: $noteBorder;
112+ background: var(--noteBackground);
113+ border-color: var(--noteBorder);
114114 }
115115
116116 %note-green, %label-green {
117− background: $noteGreenBackground;
118− border-color: $noteGreenBorder;
117+ background: var(--noteGreenBackground);
118+ border-color: var(--noteGreenBorder);
119119 }
120120
121121 %note-blue, %label-blue {
122− background: $noteBlueBackground;
123− border-color: $noteBlueBorder;
122+ background: var(--noteBlueBackground);
123+ border-color: var(--noteBlueBorder);
124124 }
125125
126126 %note-orange, %label-orange {
127− background: $noteOrangeBackground;
128− border-color: $noteOrangeBorder;
127+ background: var(--noteOrangeBackground);
128+ border-color: var(--noteOrangeBorder);
129129 }
130130
131131 %note-red, %label-red {
132− background: $noteRedBackground;
133− border-color: $noteRedBorder;
132+ background: var(--noteRedBackground);
133+ border-color: var(--noteRedBorder);
134134 }
135135
136136 //
@@ -149,12 +149,11 @@ · 12 unmodified lines
149149 pointer-events: none;
150150
151151 // <svg viewBox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path d="M15,15H2V6h2.595c0,0,0.689-0.896,2.17-2H1C0.447,4,0,4.449,0,5v11c0,0.553,0.447,1,1,1h15c0.553,0,1-0.447,1-1v-3.746 l-2,1.645V15z M13.361,8.05v3.551L20,6.4l-6.639-4.999v3.131C5.3,4.532,5.3,12.5,5.3,12.5C7.582,8.752,8.986,8.05,13.361,8.05z"/></svg>
152− @if $style == 'dark' {
153− background-image: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2NiZDBkMCIgZD0iTTE1LDE1SDJWNmgyLjU5NWMwLDAsMC42ODktMC44OTYsMi4xNy0ySDFDMC40NDcsNCwwLDQuNDQ5LDAsNXYxMWMwLDAuNTUzLDAuNDQ3LDEsMSwxaDE1YzAuNTUzLDAsMS0wLjQ0NywxLTF2LTMuNzQ2IGwtMiwxLjY0NVYxNXogTTEzLjM2MSw4LjA1djMuNTUxTDIwLDYuNGwtNi42MzktNC45OTl2My4xMzFDNS4zLDQuNTMyLDUuMywxMi41LDUuMywxMi41QzcuNTgyLDguNzUyLDguOTg2LDguMDUsMTMuMzYxLDguMDV6Ii8+PC9zdmc+);
154− } @else {
155− background-image: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iIzMzNzdjMCIgZD0iTTE1LDE1SDJWNmgyLjU5NWMwLDAsMC42ODktMC44OTYsMi4xNy0ySDFDMC40NDcsNCwwLDQuNDQ5LDAsNXYxMWMwLDAuNTUzLDAuNDQ3LDEsMSwxaDE1YzAuNTUzLDAsMS0wLjQ0NywxLTF2LTMuNzQ2IGwtMiwxLjY0NVYxNXogTTEzLjM2MSw4LjA1djMuNTUxTDIwLDYuNGwtNi42MzktNC45OTl2My4xMzFDNS4zLDQuNTMyLDUuMywxMi41LDUuMywxMi41QzcuNTgyLDguNzUyLDguOTg2LDguMDUsMTMuMzYxLDguMDV6Ii8+PC9zdmc+);
156− }
152+ background-image: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iIzMzNzdjMCIgZD0iTTE1LDE1SDJWNmgyLjU5NWMwLDAsMC42ODktMC44OTYsMi4xNy0ySDFDMC40NDcsNCwwLDQuNDQ5LDAsNXYxMWMwLDAuNTUzLDAuNDQ3LDEsMSwxaDE1YzAuNTUzLDAsMS0wLjQ0NywxLTF2LTMuNzQ2IGwtMiwxLjY0NVYxNXogTTEzLjM2MSw4LjA1djMuNTUxTDIwLDYuNGwtNi42MzktNC45OTl2My4xMzFDNS4zLDQuNTMyLDUuMywxMi41LDUuMywxMi41QzcuNTgyLDguNzUyLDguOTg2LDguMDUsMTMuMzYxLDguMDV6Ii8+PC9zdmc+);
157153 }
158154 }
155+html._theme-dark %external-link:after {
156+ background-image: url(data:image/svg+xml;base64,PHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+PHBhdGggZmlsbD0iI2NiZDBkMCIgZD0iTTE1LDE1SDJWNmgyLjU5NWMwLDAsMC42ODktMC44OTYsMi4xNy0ySDFDMC40NDcsNCwwLDQuNDQ5LDAsNXYxMWMwLDAuNTUzLDAuNDQ3LDEsMSwxaDE1YzAuNTUzLDAsMS0wLjQ0NywxLTF2LTMuNzQ2IGwtMiwxLjY0NVYxNXogTTEzLjM2MSw4LjA1djMuNTUxTDIwLDYuNGwtNi42MzktNC45OTl2My4xMzFDNS4zLDQuNTMyLDUuMywxMi41LDUuMywxMi41QzcuNTgyLDguNzUyLDguOTg2LDguMDUsMTMuMzYxLDguMDV6Ii8+PC9zdmc+);
157+}
159158
160159 %internal-link:after { content: none !important; }
assets/stylesheets/global/_icons.scss.erb+2−2
@@ -22,8 +22,8 @@ · 21 unmodified lines
2222 %doc-icon { background-image: image-url('sprites/docs@2x.png'); }
2323 }
2424
25−%darkIconFix {
26− @if $style == 'dark' {
25+html._theme-dark {
26+ %darkIconFix {
2727 filter: invert(100%) grayscale(100%);
2828 -webkit-filter: invert(100%) grayscale(100%);
2929 }
assets/stylesheets/global/_mixins.scss+6−0
@@ -7,3 +7,9 @@ · 6 unmodified lines
77 @content;
88 }
99 }
10+
11+@mixin mobile {
12+ @media (max-width: 800px) {
13+ @content;
14+ }
15+}
assets/stylesheets/global/_print.scss+2−2
@@ -25,14 +25,14 @@ · 24 unmodified lines
2525
2626 ._attribution-p {
2727 background: none;
28− border: 2px solid $boxBorder;
28+ border: 2px solid var(--boxBorder);
2929 }
3030
3131 ._attribution:last-child:after {
3232 content: 'Exported from DevDocs \2014 https://devdocs.io';
3333 display: block;
3434 margin-top: 1rem;
35− font-weight: $bolderFontWeight;
35+ font-weight: var(--bolderFontWeight);
3636 }
3737
3838 ._attribution {
assets/stylesheets/global/_variables-dark.scss+53−69
@@ -1,92 +1,76 @@
1−$baseFont: -apple-system, BlinkMacSystemFont, 'San Francisco', 'Segoe UI', Roboto, Ubuntu, 'Helvetica Neue', Arial, sans-serif;
2−$monoFont: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
3−$boldFontWeight: 500;
4−$bolderFontWeight: 600;
1+html._theme-dark {
2+ --absolute: white;
53
6−$style: 'dark';
4+ --documentBackground: #222;
5+ --contentBackground: #33373a;
76
8−$maxWidth: 80rem;
9−$headerHeight: 3rem;
10−$sidebarWidth: 20rem;
11−$sidebarMediumWidth: 16rem;
7+ --textColor: #cbd0d0;
8+ --textColorLight: #9da5ad;
9+ --textColorLighter: #77787a;
1210
13−$documentBackground: #222;
14−$contentBackground: #33373a;
11+ --externalsBackground: #fff;
1512
16−$textColor: #cbd0d0;
17−$textColorLight: #9da5ad;
18−$textColorLighter: #77787a;
19−$textColorRed: #f44336;
13+ --inputFocusBorder: transparent;
2014
21−$inputFocusBorder: false;
15+ --focusBackground: #3f4042;
16+ --focusBorder: #000;
17+ --focusText: #f7f2f2;
2218
23−$focusBackground: #3f4042;
24−$focusBorder: #000;
25−$focusText: #f7f2f2;
19+ --loadingText: #5d6164;
2620
27−$loadingText: #5d6164;
28−$splashText: $loadingText;
21+ --selectionBackground: #007acc;
22+ --selectionBorder: #000;
2923
30−$selectionBackground: #007acc;
31−$selectionBorder: #000;
32−$selectionText: #fff;
24+ --highlightBackground: #64675f;
3325
34−$highlightBackground: #64675f;
26+ --linkColor: var(--textColor);
27+ --linkColorHover: white;
28+ --linkTextDecoration: underline;
3529
36−$linkColor: $textColor;
37−$linkColorHover: white;
38−$linkTextDecoration: underline;
30+ --headerBackground: #1c1c1c;
31+ --headerBorder: #000;
32+ --searchTagBackground: #{darken(#1c1c1c, 5%)};
33+ --searchBorder: #{darken(#000, 2%)};
3934
40−$headerBackground: #1c1c1c;
41−$headerBorder: #000;
35+ --sidebarBackground: #24282a;
36+ --transparentSidebarBackground: #{rgba(#24282a, 0)};
37+ --sidebarBorder: #000;
4238
43−$sidebarBackground: #24282a;
44−$sidebarBorder: #000;
39+ --scrollbarColor: #6c6c6f;
40+ --scrollbarColorHover: #949697;
4541
46−$scrollbarColor: #6c6c6f;
47−$scrollbarColorHover: #949697;
42+ --pathBackground: var(--headerBackground);
43+ --pathBorder: var(--headerBorder);
4844
49−$pathBackground: $headerBackground;
50−$pathBorder: $headerBorder;
45+ --noticeBackground: var(--sidebarBackground);
46+ --noticeBorder: var(--sidebarBorder);
5147
52−$noticeBackground: $sidebarBackground;
53−$noticeBorder: $sidebarBorder;
48+ --boxBackground: var(--sidebarBackground);
49+ --boxBorder: var(--headerBorder);
50+ --boxBorderLight: var(--headerBorder);
51+ --boxHeaderColor: #dbe4e4;
52+ --boxHeaderBackground: var(--sidebarBackground);
5453
55−$boxBackground: $sidebarBackground;
56−$boxBorder: $headerBorder;
57−$boxBorderLight: $headerBorder;
58−$boxHeaderColor: #dbe4e4;
59−$boxHeaderBackground: $sidebarBackground;
54+ --noteBackground: #45474b;
55+ --noteBorder: #000;
6056
61−$noteBackground: #45474b;
62−$noteBorder: #000;
57+ --noteGreenBackground: #284a2a;
58+ --noteGreenBorder: #000;
6359
64−$noteGreenBackground: #284a2a;
65−$noteGreenBorder: #000;
60+ --noteBlueBackground: #2a4151;
61+ --noteBlueBorder: #000;
6662
67−$noteBlueBackground: #2a4151;
68−$noteBlueBorder: #000;
63+ --noteOrangeBackground: #563322;
64+ --noteOrangeBorder: #000;
6965
70−$noteOrangeBackground: #563322;
71−$noteOrangeBorder: #000;
66+ --noteRedBackground: #603033;
67+ --noteRedBorder: #000;
7268
73−$noteRedBackground: #603033;
74−$noteRedBorder: #000;
69+ --labelBackground: var(--boxBackground);
7570
76−$labelBackground: $boxBackground;
71+ --notifBackground: #{rgba(#555, .95)};
72+ --notifBorder: 1px solid #000;
7773
78−$notifBackground: rgba(#555, .95);
79−$notifBorder: 1px solid #000;
80−$notifColor: #fff;
81−$notifColorLight: #ccc;
82−
83−$tipBackground: $notifBackground;
84−$tipBorder: $notifBorder;
85−
86−$mediumScreen: '(max-width: 800px)';
87−
88−$contentZ: 1;
89−$sidebarZ: 2;
90−$headerZ: 3;
91−$noticeZ: 4;
92−$hoverZ: 5;
74+ --tipBackground: var(--notifBackground);
75+ --tipBorder: var(--notifBorder);
76+}
assets/stylesheets/global/_variables-light.scss+76−0
@@ -0,0 +1,76 @@
1+html._theme-default {
2+ --absolute: black;
3+
4+ --documentBackground: #f3f3f3;
5+ --contentBackground: #fff;
6+
7+ --textColor: #333;
8+ --textColorLight: #666;
9+ --textColorLighter: #888;
10+
11+ --externalsBackground: #fff;
12+
13+ --inputFocusBorder: #35b5f4;
14+
15+ --focusBackground: #e5e5e5;
16+ --focusBorder: #d4d4d4;
17+ --focusText: #000;
18+
19+ --loadingText: #ccc;
20+
21+ --selectionBackground: #398df0;
22+ --selectionBorder: #196fc2;
23+
24+ --highlightBackground: #fffdcd;
25+
26+ --linkColor: #3377c0;
27+ --linkColorHover: #2f6cb6;
28+ --linkTextDecoration: none;
29+
30+ --headerBackground: #eee;
31+ --headerBorder: #d7d7d7;
32+ --searchTagBackground: #{darken(#eee, 5%)};
33+ --searchBorder: #{darken(#d7d7d7, 2%)};
34+
35+ --sidebarBackground: #f9f9f9;
36+ --transparentSidebarBackground: #{rgba(#f9f9f9, 0)};
37+ --sidebarBorder: #e1e1e1;
38+
39+ --scrollbarColor: #ccc;
40+ --scrollbarColorHover: #999;
41+
42+ --pathBackground: var(--sidebarBackground);
43+ --pathBorder: var(--sidebarBorder);
44+
45+ --noticeBackground: #faf9e2;
46+ --noticeBorder: #e2e2c1;
47+
48+ --boxBackground: #fafafa;
49+ --boxBorder: #d8d8d8;
50+ --boxBorderLight: #e5e5e5;
51+ --boxHeaderColor: var(--textColor);
52+ --boxHeaderBackground: #f5f5f5;
53+
54+ --noteBackground: #f8f8dd;
55+ --noteBorder: #d3d952;
56+
57+ --noteGreenBackground: #e7f8e1;
58+ --noteGreenBorder: #89da70;
59+
60+ --noteBlueBackground: #d4f3fd;
61+ --noteBlueBorder: #94bbeb;
62+
63+ --noteOrangeBackground: #fbe6d1;
64+ --noteOrangeBorder: #ec8b01;
65+
66+ --noteRedBackground: #fed5d3;
67+ --noteRedBorder: #dc7874;
68+
69+ --labelBackground: #f4f4f4;
70+
71+ --notifBackground: #{rgba(#333, .85)};
72+ --notifBorder: none;
73+
74+ --tipBackground: #{rgba(#fffdcd, .95)};
75+ --tipBorder: 1px solid #e7dca9;
76+}
assets/stylesheets/global/_variables.scss+25−82
@@ -1,92 +1,35 @@
1+// Variables needed to style the error message for browsers that don't support CSS variables.
12 $baseFont: -apple-system, BlinkMacSystemFont, 'San Francisco', 'Segoe UI', Roboto, Ubuntu, 'Helvetica Neue', Arial, sans-serif;
2−$monoFont: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
3−$boldFontWeight: 500;
4−$bolderFontWeight: 600;
5−
6−$style: 'light';
7−
8−$maxWidth: 80rem;
9−$headerHeight: 3rem;
10−$sidebarWidth: 20rem;
11−$sidebarMediumWidth: 16rem;
12−
13−$documentBackground: #f3f3f3;
14−$contentBackground: #fff;
15−
163 $textColor: #333;
17−$textColorLight: #666;
18−$textColorLighter: #888;
19−$textColorRed: #f44336;
20−
21−$inputFocusBorder: #35b5f4;
22−
23−$focusBackground: #e5e5e5;
24−$focusBorder: #d4d4d4;
25−$focusText: #000;
26−
27−$loadingText: #ccc;
28−$splashText: #ccc;
29−
30−$selectionBackground: #398df0;
31−$selectionBorder: #196fc2;
32−$selectionText: #fff;
33−
34−$highlightBackground: #fffdcd;
35−
36−$linkColor: #3377c0;
37−$linkColorHover: #2f6cb6;
38−$linkTextDecoration: none;
39−
40−$headerBackground: #eee;
41−$headerBorder: #d7d7d7;
42−
43−$sidebarBackground: #f9f9f9;
44−$sidebarBorder: #e1e1e1;
45−
46−$scrollbarColor: #ccc;
47−$scrollbarColorHover: #999;
48−
49−$pathBackground: $sidebarBackground;
50−$pathBorder: $sidebarBorder;
51−
52−$noticeBackground: #faf9e2;
53−$noticeBorder: #e2e2c1;
54−
55−$boxBackground: #fafafa;
56−$boxBorder: #d8d8d8;
57−$boxBorderLight: #e5e5e5;
58−$boxHeaderColor: $textColor;
59−$boxHeaderBackground: #f5f5f5;
60−
61−$noteBackground: #f8f8dd;
62−$noteBorder: #d3d952;
63−
64−$noteGreenBackground: #e7f8e1;
65−$noteGreenBorder: #89da70;
664
67−$noteBlueBackground: #d4f3fd;
68−$noteBlueBorder: #94bbeb;
5+html {
6+ --baseFont: #{$baseFont};
7+ --monoFont: 'SFMono-Regular', Consolas, 'Liberation Mono', Menlo, Courier, monospace;
8+ --boldFontWeight: 500;
9+ --bolderFontWeight: 600;
6910
70−$noteOrangeBackground: #fbe6d1;
71−$noteOrangeBorder: #ec8b01;
11+ --textColorRed: #f44336;
7212
73−$noteRedBackground: #fed5d3;
74−$noteRedBorder: #dc7874;
13+ --splashText: var(--loadingText);
7514
76−$labelBackground: #f4f4f4;
15+ --selectionText: #fff;
16+ --transparentSelectionText: rgba(255, 255, 255, 0.9);
7717
78−$notifBackground: rgba(#333, .85);
79−$notifBorder: none;
80−$notifColor: #fff;
81−$notifColorLight: #ccc;
18+ --notifColor: #fff;
19+ --notifColorLight: #ccc;
8220
83−$tipBackground: rgba(#fffdcd, .95);
84−$tipBorder: 1px solid #e7dca9;
21+ --maxWidth: 80rem;
22+ --headerHeight: 3rem;
23+ --sidebarWidth: 20rem;
24+ --sidebarMediumWidth: 16rem;
8525
86−$mediumScreen: '(max-width: 800px)';
26+ --focusBackground: #e5e5e5;
27+ --focusBorder: #d4d4d4;
28+ --focusText: #000;
8729
88−$contentZ: 1;
89−$sidebarZ: 2;
90−$headerZ: 3;
91−$noticeZ: 4;
92−$hoverZ: 5;
30+ --contentZ: 1;
31+ --sidebarZ: 2;
32+ --headerZ: 3;
33+ --noticeZ: 4;
34+ --hoverZ: 5;
35+}
assets/stylesheets/pages/_angularjs.scss+1−1
@@ -8,7 +8,7 @@ · 7 unmodified lines
88 .nav-index-section {
99 margin: 1.5em 0 1em -2em;
1010 list-style: none;
11− font-weight: $boldFontWeight;
11+ font-weight: var(--boldFontWeight);
1212 text-transform: capitalize;
1313 }
1414
assets/stylesheets/pages/_async.scss+2−2
@@ -3,13 +3,13 @@ · 2 unmodified lines
33
44 h3 > .type-signature {
55 float: right;
6− color: $textColorLight;
6+ color: var(--textColorLight);
77 }
88
99 h3 > .signature-attributes {
1010 font-size: .75rem;
1111 font-weight: normal;
1212 font-style: italic;
13− color: $textColorLighter;
13+ color: var(--textColorLighter);
1414 }
1515 }
assets/stylesheets/pages/_bash.scss+1−1
@@ -5,7 +5,7 @@ · 4 unmodified lines
55 }
66
77 th[align=left] {
8− border-left: 1px solid $boxBorder;
8+ border-left: 1px solid var(--boxBorder);
99 }
1010
1111 code { @extend %label; }
assets/stylesheets/pages/_bootstrap.scss+1−1
@@ -4,7 +4,7 @@ · 3 unmodified lines
44 h4 > code, h5 > code, strong > code { @extend %label; }
55
66 h2 > small {
7− color: $textColorLight;
7+ color: var(--textColorLight);
88 float: right;
99 }
1010
assets/stylesheets/pages/_c.scss+2−2
@@ -23,7 +23,7 @@ · 22 unmodified lines
2323
2424 .t-spar { // language/switch, language/for, etc.
2525 font-style: italic;
26− color: $textColorLight;
26+ color: var(--textColorLight);
2727 }
2828 .t-sdsc-nopad dl, .t-sdsc-nopad dd { margin: 0; }
2929
@@ -57,7 +57,7 @@ · 27 unmodified lines
5757 margin: 1rem 0;
5858 padding: .375rem;
5959 font-size: .75rem;
60− border: 1px solid $boxBorder;
60+ border: 1px solid var(--boxBorder);
6161 border-radius: 2px;
6262 }
6363
assets/stylesheets/pages/_clojure.scss+1−1
@@ -5,6 +5,6 @@ · 4 unmodified lines
55 .type {
66 float: right;
77 font-size: .9em;
8− color: $textColorLight;
8+ color: var(--textColorLight);
99 }
1010 }
assets/stylesheets/pages/_d.scss+3−3
@@ -2,10 +2,10 @@ · 1 unmodified line
22 h2 { @extend %block-heading; }
33 h3, .d_decl { @extend %block-label, %label-blue; }
44 .d_decl { @extend %code; }
5− .d_decl > small { color: $textColorLight; }
6− .d_decl > strong { font-weight: $bolderFontWeight; }
5+ .d_decl > small { color: var(--textColorLight); }
6+ .d_decl > strong { font-weight: var(--bolderFontWeight); }
77
88 p > code, li > code, td > code, dd > code { @extend %label; }
99
10− span.red { color: $textColorRed; }
10+ span.red { color: var(--textColorRed); }
1111 }
assets/stylesheets/pages/_dart.scss+1−1
@@ -6,7 +6,7 @@ · 5 unmodified lines
66
77 .features {
88 float: right;
9− color: $textColorLight;
9+ color: var(--textColorLight);
1010 }
1111 }
1212 }
assets/stylesheets/pages/_dojo.scss+1−1
@@ -1,5 +1,5 @@
11 ._dojo {
22 @extend %simple;
33
4− .jsdoc-inheritance { color: $textColorLight; }
4+ .jsdoc-inheritance { color: var(--textColorLight); }
55 }
assets/stylesheets/pages/_ember.scss+2−2
@@ -5,7 +5,7 @@ · 4 unmodified lines
55
66 h3 > .access {
77 float: right;
8− color: $textColorLight;
8+ color: var(--textColorLight);
99 font-weight: normal;
1010 }
1111
@@ -15,6 +15,6 @@ · 3 unmodified lines
1515 }
1616
1717 p.github-link {
18− color: $textColorLight;
18+ color: var(--textColorLight);
1919 }
2020 }
assets/stylesheets/pages/_erlang.scss+1−1
@@ -5,5 +5,5 @@ · 4 unmodified lines
55 code.code { @extend %label; }
66 .note { @extend %note; }
77 .warning { @extend %note, %note-red; }
8− .note .label, .warning .label { font-weight: $boldFontWeight; }
8+ .note .label, .warning .label { font-weight: var(--boldFontWeight); }
99 }
assets/stylesheets/pages/_jquery.scss+2−2
@@ -32,7 +32,7 @@ · 31 unmodified lines
3232
3333 .toc-list {
3434 margin-top: 0;
35− font-weight: $boldFontWeight;
35+ font-weight: var(--boldFontWeight);
3636
3737 > li + li { margin-top: 1em; }
3838 > li > ul { font-weight: normal; }
@@ -48,7 +48,7 @@ · 9 unmodified lines
4848 .returns,
4949 .option-type {
5050 float: right;
51− font-weight: $boldFontWeight;
51+ font-weight: var(--boldFontWeight);
5252 margin-left: 1em;
5353 }
5454
assets/stylesheets/pages/_love.scss+2−2
@@ -12,6 +12,6 @@ · 11 unmodified lines
1212 .smwtable { width: 100%; }
1313 .smwtable td:nth-last-child(2), .smwtable td:last-child { width: 2.5em; }
1414
15− .cell-green { background: $noteGreenBackground; }
16− .cell-red { background: $noteRedBackground; }
15+ .cell-green { background: var(--noteGreenBackground); }
16+ .cell-red { background: var(--noteRedBackground); }
1717 }
assets/stylesheets/pages/_mdn.scss+3−3
@@ -7,7 +7,7 @@ · 6 unmodified lines
77 > span {
88 display: block;
99 font-size: 1rem;
10− font-weight: $boldFontWeight;
10+ font-weight: var(--boldFontWeight);
1111 }
1212
1313 ul, ol {
@@ -42,7 +42,7 @@ · 28 unmodified lines
4242 > .note {
4343 em {
4444 font-style: normal;
45− font-weight: $boldFontWeight;
45+ font-weight: var(--boldFontWeight);
4646 }
4747
4848 > ul { margin: 1em 0; }
@@ -93,7 +93,7 @@ · 44 unmodified lines
9393 dt > strong > code, // HTML element attribute
9494 dl > dt > code { // CSS property value, Javascript function argument
9595 font-family: inherit;
96− font-weight: $boldFontWeight;
96+ font-weight: var(--boldFontWeight);
9797 font-size: inherit;
9898 }
9999
assets/stylesheets/pages/_meteor.scss+2−2
@@ -9,10 +9,10 @@ · 8 unmodified lines
99 dt > code { @extend %label; }
1010
1111 .api-heading { overflow: hidden; }
12− .api-heading > code { font-weight: $boldFontWeight; }
12+ .api-heading > code { font-weight: var(--boldFontWeight); }
1313 .locus, .src-code { float: right; }
1414 .locus, .type, .src-code { margin-left: .5em; }
1515 h2 .subtext-api { margin-top: .25rem; }
1616 .locus, .subtext-api, .subtext-api > code { font-size: .75rem; }
17− .locus, .type { color: $textColorLight; }
17+ .locus, .type { color: var(--textColorLight); }
1818 }
assets/stylesheets/pages/_npm.scss+1−1
@@ -8,7 +8,7 @@ · 7 unmodified lines
88
99 .faint.heading {
1010 font-size: .9em;
11− color: $textColorLight;
11+ color: var(--textColorLight);
1212 }
1313
1414 .youtube-video iframe { width: 420px; height: 315px; }
assets/stylesheets/pages/_phalcon.scss+1−1
@@ -3,6 +3,6 @@ · 2 unmodified lines
33
44 h3 > small {
55 float: right;
6− color: $textColorLight;
6+ color: var(--textColorLight);
77 }
88 }
assets/stylesheets/pages/_php.scss+2−2
@@ -13,7 +13,7 @@ · 12 unmodified lines
1313
1414 .verinfo {
1515 float: right;
16− font-weight: $boldFontWeight;
16+ font-weight: var(--boldFontWeight);
1717 }
1818
1919 .classsynopsis,
@@ -21,7 +21,7 @@ · 1 unmodified line
2121 .description > .methodsynopsis,
2222 .description > .fieldsynopsis { @extend %note, %note-blue; }
2323
24− .classsynopsisinfo_comment { color: $textColorLight; }
24+ .classsynopsisinfo_comment { color: var(--textColorLight); }
2525
2626 .classsynopsisinfo_comment,
2727 .classsynopsis > .constructorsynopsis,
assets/stylesheets/pages/_postgres.scss+1−1
@@ -16,7 +16,7 @@ · 15 unmodified lines
1616 }
1717
1818 p > code { @extend %label; }
19− p.c2 { font-weight: $boldFontWeight; }
19+ p.c2 { font-weight: var(--boldFontWeight); }
2020
2121 .navfooter > table { width: 100%; }
2222 td[align=center] { text-align: center; }
assets/stylesheets/pages/_qt.scss+1−1
@@ -4,6 +4,6 @@ · 3 unmodified lines
44 // Function headers
55 h3.fn > code {
66 float: right;
7− color: $textColorLight;
7+ color: var(--textColorLight);
88 }
99 }
assets/stylesheets/pages/_rdoc.scss+4−4
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 .method-description > h2, h3, h4, h5, h6 { font-size: 1em; }
77
88 .method-heading {
9− font-weight: $boldFontWeight;
9+ font-weight: var(--boldFontWeight);
1010 @extend %block-label, %label-blue;
1111
1212 + .method-heading { margin-top: -.5em; }
@@ -22,7 +22,7 @@ · 9 unmodified lines
2222 a.method-click-advice {
2323 float: right;
2424 font-size: .75rem;
25− color: $linkColor;
25+ color: var(--linkColor);
2626 cursor: pointer;
2727 @extend %user-select-none;
2828
@@ -42,8 +42,8 @@ · 13 unmodified lines
4242 top: 0;
4343 left: -1em;
4444 right: 0;
45− background: rgba($contentBackground, .95);
46− box-shadow: 0 1em 1em 1em $contentBackground;
45+ background: var(--contentBackground);
46+ box-shadow: 0 1em 1em 1em var(--contentBackground);
4747
4848 > pre { margin: 0; }
4949 }
assets/stylesheets/pages/_react_native.scss+1−1
@@ -2,7 +2,7 @@ · 1 unmodified line
22 @extend %simple;
33
44 .deprecated { @extend %note, %note-orange; }
5− .deprecatedTitle { font-weight: $boldFontWeight; }
5+ .deprecatedTitle { font-weight: var(--boldFontWeight); }
66
77 span.platform { float: right; }
88 span.propType, span.platform { font-weight: normal; }
assets/stylesheets/pages/_redis.scss+2−2
@@ -14,7 +14,7 @@ · 13 unmodified lines
1414
1515 .args {
1616 font-size: .75rem;
17− color: $textColorLight;
17+ color: var(--textColorLight);
1818 }
1919
2020 // Others
@@ -35,7 +35,7 @@ · 14 unmodified lines
3535 > .prompt {
3636 float: left;
3737 margin-right: .5em;
38− color: $textColorLight;
38+ color: var(--textColorLight);
3939 }
4040
4141 > code {
assets/stylesheets/pages/_rfc.scss+1−1
@@ -10,6 +10,6 @@ · 9 unmodified lines
1010
1111 > h1, > h2, > h3, > h4, > h5 {
1212 margin: 0;
13− font-family: $baseFont;
13+ font-family: var(--baseFont);
1414 }
1515 }
assets/stylesheets/pages/_rust.scss+10−1
@@ -3,9 +3,18 @@ · 2 unmodified lines
33
44 h4 { @extend %block-label; }
55 .docblock { margin-left: 1em; }
6+ div.information, div.important-traits {
7+ @extend %note;
8+
9+ > pre { margin: .5rem 0; }
10+ }
611
712 div.stability { margin-bottom: 1em; }
813 em.stab, span.stab { @extend %label; }
914 em.stab.unstable, span.stab.unstable { @extend %label-orange; }
10− .since, .out-of-band { float: right; }
15+ .out-of-band { float: right; }
16+ .since, .srclink {
17+ float: right;
18+ margin-left: .5rem;
19+ }
1120 }
assets/stylesheets/pages/_simple.scss+1−31
@@ -17,34 +17,4 @@ · 16 unmodified lines
1717 blockquote > h4, blockquote > h5 { margin-top: .25rem; }
1818 }
1919
20−._apache_pig,
21−._bower,
22−._chai,
23−._codeceptjs,
24−._docker,
25−._electron,
26−._fish,
27−._flow,
28−._gnu,
29−._grunt,
30−._haxe,
31−._immutable,
32−._influxdata,
33−._jasmine,
34−._jest,
35−._less,
36−._lodash,
37−._marionette,
38−._markdown,
39−._mocha,
40−._mongoose,
41−._nim,
42−._redux,
43−._requirejs,
44−._simple,
45−._typescript,
46−._vagrant,
47−._vulkan,
48−._yarn {
49− @extend %simple;
50−}
20+._simple { @extend %simple; }
assets/stylesheets/pages/_sphinx.scss+2−2
@@ -14,7 +14,7 @@ · 13 unmodified lines
1414
1515 .versionmodified, span.title, .topic-title {
1616 display: block;
17− font-weight: $boldFontWeight;
17+ font-weight: var(--boldFontWeight);
1818 }
1919
2020 p > code, li > code, dd > code, .docutils > dt > code { @extend %label; }
@@ -26,7 +26,7 @@ · 5 unmodified lines
2626 .admonition-title {
2727 float: left;
2828 margin: 0 .5em 0 0;
29− font-weight: $boldFontWeight;
29+ font-weight: var(--boldFontWeight);
3030
3131 &:after { content: ':'; }
3232 }
assets/stylesheets/pages/_sphinx_simple.scss+1−1
@@ -6,7 +6,7 @@ · 5 unmodified lines
66 .admonition.tip { @extend %note-green; }
77 .admonition-title {
88 margin: 0 0 .25rem;
9− font-weight: $boldFontWeight;
9+ font-weight: var(--boldFontWeight);
1010 }
1111
1212 code { @extend %label; }
assets/stylesheets/pages/_support_tables.scss+1−1
@@ -24,7 +24,7 @@ · 23 unmodified lines
2424 }
2525
2626 tr.current {
27− font-weight: $boldFontWeight;
27+ font-weight: var(--boldFontWeight);
2828 font-size: 1rem;
2929 }
3030
assets/stylesheets/pages/_yard.scss+1−1
@@ -1,5 +1,5 @@
11 ._yard {
22 @extend %simple;
33
4− .tag_title { font-weight: $boldFontWeight; }
4+ .tag_title { font-weight: var(--boldFontWeight); }
55 }
assets/stylesheets/pages/_yii.scss+1−1
@@ -3,6 +3,6 @@ · 2 unmodified lines
33
44 .detail-header-tag, .detailHeaderTag {
55 float: right;
6− color: $textColorLight;
6+ color: var(--textColorLight);
77 }
88 }
lib/app.rb+2−16
@@ -12,6 +12,8 @@ class App < Sinatra::Application · 11 unmodified lines
1212 Rack::Mime::MIME_TYPES['.webapp'] = 'application/x-web-app-manifest+json'
1313
1414 configure do
15+ use Rack::SslEnforcer, only_environments: ['production', 'test'], hsts: false, force_secure_cookies: false
16+
1517 set :sentry_dsn, ENV['SENTRY_DSN']
1618 set :protection, except: [:frame_options, :xss_header]
1719
@@ -199,7 +201,6 @@ class App < Sinatra::Application · 181 unmodified lines
199201 @@manifest_asset_urls ||= [
200202 javascript_path('application', asset_host: false),
201203 stylesheet_path('application'),
202− stylesheet_path('application-dark'),
203204 image_path('docs-1.png'),
204205 image_path('docs-1@2x.png'),
205206 image_path('docs-2.png'),
@@ -208,21 +209,6 @@ class App < Sinatra::Application · 2 unmodified lines
208209 ]
209210 end
210211
211− def main_stylesheet_path
212− stylesheet_paths[dark_theme? ? :dark : :default]
213− end
214−
215− def alternate_stylesheet_path
216− stylesheet_paths[dark_theme? ? :default : :dark]
217− end
218−
219− def stylesheet_paths
220− @@stylesheet_paths ||= {
221− default: stylesheet_path('application'),
222− dark: stylesheet_path('application-dark')
223− }
224− end
225−
226212 def app_size
227213 @app_size ||= memoized_cookies['size'].nil? ? '20rem' : "#{memoized_cookies['size']}px"
228214 end
lib/docs/filters/elixir/clean_html.rb+1−0
@@ -59,6 +59,7 @@ module Docs · 58 unmodified lines
5959
6060 css('pre').each do |node|
6161 node['data-language'] = 'elixir'
62+ node.content = node.content
6263 end
6364 end
6465 end
lib/docs/filters/express/clean_html.rb+5−0
@@ -42,6 +42,11 @@ module Docs · 41 unmodified lines
4242 node.parent.content = node.parent.content
4343 end
4444
45+ # Fix links to the method reference
46+ css('a').each do |node|
47+ node['href'] = node['href'].sub('4x/api', 'index')
48+ end
49+
4550 doc
4651 end
4752 end
lib/docs/filters/handlebars/clean_html.rb+44−0
@@ -0,0 +1,44 @@
1+module Docs
2+ class Handlebars
3+ class CleanHtmlFilter < Filter
4+ def call
5+ # Remove the t-shirt shop advertisement
6+ css('#callout').remove
7+
8+ # The title filter is used to add titles to pages without one, remove original headers
9+ css('h1').remove
10+
11+ # Remove the link to the issue tracker
12+ css('.issue-tracker').remove
13+
14+ css('pre').each do |node|
15+ # Remove nested nodes inside pre tags
16+ node.content = node.content
17+
18+ # Add syntax highlighting
19+ node['data-language'] = 'html'
20+ end
21+
22+ # Transform 'Learn More' links to headers in the "Getting Started" part of the homepage
23+ # If this step is skipped, that section looks cluttered with 4 sub-sections without any dividers
24+ css('#getting-started + .contents a.more-info').each do |node|
25+ clone = node.clone
26+
27+ # Move it to the top of the sub-section
28+ node.parent.prepend_child(clone)
29+
30+ # Turn it into a header
31+ clone.name = 'h3'
32+
33+ # Remove the "Learn More: " part
34+ clone.content = clone.content[12..-1]
35+ end
36+
37+ # Remove class attributes from div elements to reduce file size
38+ css('div').remove_attr('class')
39+
40+ doc
41+ end
42+ end
43+ end
44+end
lib/docs/filters/handlebars/entries.rb+19−0
@@ -0,0 +1,19 @@
1+module Docs
2+ class Handlebars
3+ class EntriesFilter < Docs::EntriesFilter
4+ def get_name
5+ subpath[0..-6].titleize
6+ end
7+
8+ def get_type
9+ name
10+ end
11+
12+ def additional_entries
13+ css('h2, h3').to_a.map do |node|
14+ [node.content.strip, node['id'], root_page? ? 'Manual' : nil]
15+ end
16+ end
17+ end
18+ end
19+end
lib/docs/filters/puppeteer/clean_html.rb+24−0
@@ -0,0 +1,24 @@
1+module Docs
2+ class Puppeteer
3+ class CleanHtmlFilter < Filter
4+ def call
5+ at_css('h1').content = 'Puppeteer Documentation'
6+
7+ # None of the elements to remove have classes, so the order of the remove calls is trivial
8+
9+ # Remove links to previous versions of the reference
10+ at_css('h1 + ul').remove
11+
12+ # Remove table of contents
13+ at_css('h1 + h5').remove
14+ at_css('h1 + ul').remove
15+
16+ # Make headers bigger by transforming them into a bigger variant
17+ css('h3').each { |node| node.name = 'h2' }
18+ css('h4').each { |node| node.name = 'h3' }
19+
20+ doc
21+ end
22+ end
23+ end
24+end
lib/docs/filters/puppeteer/entries.rb+41−0
@@ -0,0 +1,41 @@
1+module Docs
2+ class Puppeteer
3+ class EntriesFilter < Docs::EntriesFilter
4+ # The entire reference is one big page, so get_name and get_type are not necessary
5+
6+ def additional_entries
7+ entries = []
8+
9+ css('h3').each do |node|
10+ name = node.content.split(': ').last
11+
12+ # Find all sub-items (all h4's between the current h3 and the next)
13+ current = node.next
14+ while !current.nil? && current.name != 'h3'
15+ if current.name == 'h4'
16+ current_name = current.content
17+
18+ # Prepend events with the class name
19+ if current_name.start_with?('event: ')
20+ current_name = "#{name} event: #{current_name[/'(.*)'/, 1]}"
21+ end
22+
23+ # Remove arguments from functions
24+ if current_name.include?('(')
25+ current_name = current_name.split('(')[0] + '()'
26+ end
27+
28+ entries << [current_name, current['id'], name]
29+ end
30+
31+ current = current.next
32+ end
33+
34+ entries << [name, node['id'], name]
35+ end
36+
37+ entries
38+ end
39+ end
40+ end
41+end
lib/docs/filters/python/clean_html.rb+5−3
@@ -15,15 +15,17 @@ module Docs · 14 unmodified lines
1515
1616 def other
1717 css('h1').each do |node|
18− node.content = node.content.sub!(/\A[\d\.]+/) do |str|
18+ node.content = node.content.sub(/\A[\d\.]+/) do |str|
1919 rgx = /\A#{str}/
2020 @levelRegexp = @levelRegexp ? Regexp.union(@levelRegexp, rgx) : rgx
2121 ''
2222 end
2323 end
2424
25− css('h2', 'h3', 'h4').each do |node|
26− node.inner_html = node.inner_html.remove @levelRegexp
25+ unless @levelRegexp.nil?
26+ css('h2', 'h3', 'h4').each do |node|
27+ node.inner_html = node.inner_html.remove @levelRegexp
28+ end
2729 end
2830 end
2931 end
lib/docs/filters/python/entries_v3.rb+12−10
@@ -2,16 +2,18 @@ module Docs · 1 unmodified line
22 class Python
33 class EntriesV3Filter < Docs::EntriesFilter
44 REPLACE_TYPES = {
5− 'Cryptographic' => 'Cryptography',
6− 'Custom Interpreters' => 'Interpreters',
7− 'Data Compression & Archiving' => 'Data Compression',
8− 'Generic Operating System' => 'Operating System',
9− 'Graphical User Interfaces with Tk' => 'Tk',
10− 'Internet Data Handling' => 'Internet Data',
11− 'Internet Protocols & Support' => 'Internet',
12− 'Interprocess Communication & Networking' => 'Networking',
13− 'Program Frameworks' => 'Frameworks',
14− 'Structured Markup Processing Tools' => 'Structured Markup' }
5+ 'contextvars — Context Variables' => 'Context Variables',
6+ 'Cryptographic' => 'Cryptography',
7+ 'Custom Interpreters' => 'Interpreters',
8+ 'Data Compression & Archiving' => 'Data Compression',
9+ 'email — An email & MIME handling package' => 'Email',
10+ 'Generic Operating System' => 'Operating System',
11+ 'Graphical User Interfaces with Tk' => 'Tk',
12+ 'Internet Data Handling' => 'Internet Data',
13+ 'Internet Protocols & Support' => 'Internet',
14+ 'Interprocess Communication & Networking' => 'Networking',
15+ 'Program Frameworks' => 'Frameworks',
16+ 'Structured Markup Processing Tools' => 'Structured Markup' }
1517
1618 def get_name
1719 name = at_css('h1').content
lib/docs/filters/rust/clean_html.rb+32−4
@@ -2,8 +2,6 @@ module Docs · 1 unmodified line
22 class Rust
33 class CleanHtmlFilter < Filter
44 def call
5− puts subpath if at_css('#versioninfo')
6−
75 if slug.start_with?('book') || slug.start_with?('reference')
86 @doc = at_css('#content main')
97 elsif slug == 'error-index'
@@ -29,12 +27,16 @@ module Docs · 19 unmodified lines
2927
3028 css('.rusttest', '.test-arrow', 'hr').remove
3129
30+ css('.docblock.attributes').each do |node|
31+ node.remove if node.content.include?('#[must_use]')
32+ end
33+
3234 css('a.header').each do |node|
3335 node.first_element_child['id'] = node['name'] || node['id']
3436 node.before(node.children).remove
3537 end
3638
37− css('.docblock > h1').each { |node| node.name = 'h4' }
39+ css('.docblock > h1:not(.section-header)').each { |node| node.name = 'h4' }
3840 css('h2.section-header').each { |node| node.name = 'h3' }
3941 css('h1.section-header').each { |node| node.name = 'h2' }
4042
@@ -44,7 +46,7 @@ module Docs · 3 unmodified lines
4446 end
4547 end
4648
47− css('> .impl-items', '> .docblock', 'pre > pre').each do |node|
49+ css('> .impl-items', '> .docblock', 'pre > pre', '.tooltiptext', '.tooltip').each do |node|
4850 node.before(node.children).remove
4951 end
5052
@@ -65,6 +67,32 @@ module Docs · 14 unmodified lines
6567 doc.first_element_child.name = 'h1' if doc.first_element_child.name = 'h2'
6668 at_css('h1').content = 'Rust Documentation' if root_page?
6769
70+ css('.table-display').each do |node|
71+ node.css('td').each do |td|
72+ node.before(td.children)
73+ end
74+ node.remove
75+ end
76+
77+ css('h2 .important-traits', 'h3 .important-traits', 'h4 .important-traits').each do |node|
78+ content = node.at_css('.content.hidden .content')
79+ node.at_css('.content.hidden').replace(content) if content
80+ node.parent.after(node)
81+ end
82+
83+ css('code.content').each do |node|
84+ node.name = 'pre'
85+ node.css('.fmt-newline').each do |line|
86+ line.inner_html = line.inner_html + "\n"
87+ end
88+ node.inner_html = node.inner_html.gsub('<br>', "\n")
89+ node.content = node.content
90+ end
91+
92+ css('.since + .srclink').each do |node|
93+ node.previous_element.before(node)
94+ end
95+
6896 doc
6997 end
7098 end
lib/docs/filters/rust/entries.rb+8−5
@@ -42,11 +42,14 @@ module Docs · 41 unmodified lines
4242 entries << [node.content, node['id']] unless node.content.include?('Note:')
4343 end
4444 else
45− css('#methods + * + div > .method', '#required-methods + div > .method', '#provided-methods + div > .method').map do |node|
46− name = node.at_css('.fnname').content
47− name.prepend "#{self.name}::"
48− [name, node['id']]
49− end
45+ css('.method')
46+ .select {|node| !node.at_css('.fnname').nil?}
47+ .map {|node|
48+ name = node.at_css('.fnname').content
49+ name.prepend "#{self.name}::"
50+ [name, node['id']]
51+ }
52+ .uniq {|item| item[0]}
5053 end
5154 end
5255 end
lib/docs/scrapers/apache_pig.rb+1−1
@@ -2,7 +2,7 @@ module Docs · 1 unmodified line
22 class ApachePig < UrlScraper
33 self.name = 'Apache Pig'
44 self.slug = 'apache_pig'
5− self.type = 'apache_pig'
5+ self.type = 'simple'
66 self.links = {
77 home: 'https://pig.apache.org/'
88 }
lib/docs/scrapers/bower.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Bower < UrlScraper
33 self.name = 'Bower'
4− self.type = 'bower'
4+ self.type = 'simple'
55 self.release = '1.8.4'
66 self.base_url = 'https://bower.io/docs/'
77 self.root_path = 'api'
lib/docs/scrapers/chai.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Chai < UrlScraper
33 self.name = 'Chai'
4− self.type = 'chai'
4+ self.type = 'simple'
55 self.release = '4.1.0'
66 self.base_url = 'http://chaijs.com'
77 self.root_path = '/api/'
lib/docs/scrapers/codeceptjs.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Codeceptjs < UrlScraper
33 self.name = 'CodeceptJS'
4− self.type = 'codeceptjs'
4+ self.type = 'simple'
55 self.root_path = 'index.html'
66 self.release = '1.3.1'
77 self.base_url = 'https://codecept.io/'
lib/docs/scrapers/docker.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Docker < UrlScraper
3− self.type = 'docker'
3+ self.type = 'simple'
44 self.links = {
55 home: 'https://docker.com/',
66 code: 'https://github.com/docker/docker'
lib/docs/scrapers/electron.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Electron < UrlScraper
3− self.type = 'electron'
3+ self.type = 'simple'
44 self.base_url = 'https://electronjs.org/docs'
55 self.release = '2.0.2'
66 self.links = {
lib/docs/scrapers/elixir.rb+1−1
@@ -34,7 +34,7 @@ module Docs · 33 unmodified lines
3434 end
3535
3636 version '1.7' do
37− self.release = '1.7.2'
37+ self.release = '1.7.3'
3838 self.base_urls = [
3939 "https://hexdocs.pm/elixir/#{release}/",
4040 "https://hexdocs.pm/eex/#{release}/",
lib/docs/scrapers/express.rb+1−1
@@ -2,7 +2,7 @@ module Docs · 1 unmodified line
22 class Express < UrlScraper
33 self.name = 'Express'
44 self.type = 'express'
5− self.release = '4.16.1'
5+ self.release = '4.16.3'
66 self.base_url = 'http://expressjs.com/en/'
77 self.root_path = '4x/api.html'
88 self.initial_paths = %w(
lib/docs/scrapers/fish.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Fish < UrlScraper
33 self.name = 'Fish'
4− self.type = 'fish'
4+ self.type = 'simple'
55 self.root_path = 'index.html'
66 self.links = {
77 home: 'https://fishshell.com/',
lib/docs/scrapers/flow.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Flow < UrlScraper
3− self.type = 'flow'
3+ self.type = 'simple'
44 self.release = '0.79.1'
55 self.base_url = 'https://flow.org/en/docs/'
66 self.links = {
lib/docs/scrapers/gnu.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Gnu < FileScraper
3− self.type = 'gnu'
3+ self.type = 'simple'
44 self.root_path = 'index.html'
55 self.abstract = 'true'
66
lib/docs/scrapers/grunt.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Grunt < UrlScraper
33 self.name = 'Grunt'
4− self.type = 'grunt'
4+ self.type = 'simple'
55 self.release = '1.0.1'
66 self.base_url = 'https://gruntjs.com/'
77 self.root_path = 'getting-started'
lib/docs/scrapers/handlebars.rb+23−0
@@ -0,0 +1,23 @@
1+module Docs
2+ class Handlebars < UrlScraper
3+ self.name = 'Handlebars.js'
4+ self.slug = 'handlebars'
5+ self.type = 'simple'
6+ self.release = '4.0.12'
7+ self.base_url = 'https://handlebarsjs.com/'
8+ self.links = {
9+ home: 'https://handlebarsjs.com/',
10+ code: 'https://github.com/wycats/handlebars.js/'
11+ }
12+
13+ html_filters.push 'handlebars/entries', 'handlebars/clean_html', 'title'
14+
15+ options[:container] = '#contents'
16+ options[:root_title] = 'Handlebars.js'
17+
18+ options[:attribution] = <<-HTML
19+ &copy; 2011&ndash;2017 by Yehuda Katz<br>
20+ Licensed under the MIT License.
21+ HTML
22+ end
23+end
lib/docs/scrapers/haxe.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Haxe < UrlScraper
33 self.name = 'Haxe'
4− self.type = 'haxe'
4+ self.type = 'simple'
55 self.release = '3.4.7'
66 self.base_url = 'https://api.haxe.org/'
77
lib/docs/scrapers/immutable.rb+1−1
@@ -2,7 +2,7 @@ module Docs · 1 unmodified line
22 class Immutable < UrlScraper
33 self.name = 'Immutable.js'
44 self.slug = 'immutable'
5− self.type = 'immutable'
5+ self.type = 'simple'
66 self.release = '3.8.1'
77 self.base_url = 'https://facebook.github.io/immutable-js/docs/'
88 self.links = {
lib/docs/scrapers/influxdata.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Influxdata < UrlScraper
33 self.name = 'InfluxData'
4− self.type = 'influxdata'
4+ self.type = 'simple'
55 self.release = '1.3'
66 self.base_url = 'https://docs.influxdata.com/'
77 self.links = {
lib/docs/scrapers/jasmine.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Jasmine < UrlScraper
3− self.type = 'jasmine'
3+ self.type = 'simple'
44 self.release = '3.2.1'
55 self.base_url = 'https://jasmine.github.io/api/3.2/'
66 self.root_path = 'index.html'
lib/docs/scrapers/jest.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Jest < UrlScraper
3− self.type = 'jest'
3+ self.type = 'simple'
44 self.release = '23.5.0'
55 self.base_url = 'https://jestjs.io/docs/en/'
66 self.root_path = 'getting-started'
lib/docs/scrapers/laravel.rb+13−0
@@ -29,6 +29,19 @@ module Docs · 28 unmodified lines
2929 Laravel is a trademark of Taylor Otwell.
3030 HTML
3131
32+ version '5.7' do
33+ self.release = '5.7.7'
34+ self.root_path = '/api/5.7/index.html'
35+ self.initial_paths = %w(/docs/5.7/installation /api/5.7/classes.html)
36+
37+ options[:only_patterns] = [%r{\A/api/5\.7/}, %r{\A/docs/5\.7/}]
38+
39+ options[:fix_urls] = ->(url) do
40+ url.sub! %r{#{Regexp.escape(Laravel.base_url)}/docs\/(?!\d)}, "#{Laravel.base_url}/docs/5.7/"
41+ url
42+ end
43+ end
44+
3245 version '5.6' do
3346 self.release = '5.6.33'
3447 self.root_path = '/api/5.6/index.html'
lib/docs/scrapers/less.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Less < UrlScraper
3− self.type = 'less'
3+ self.type = 'simple'
44 self.release = '2.7.2'
55 self.base_url = 'http://lesscss.org'
66 self.root_path = '/features'
lib/docs/scrapers/lodash.rb+1−1
@@ -2,7 +2,7 @@ module Docs · 1 unmodified line
22 class Lodash < UrlScraper
33 self.name = 'lodash'
44 self.slug = 'lodash'
5− self.type = 'lodash'
5+ self.type = 'simple'
66 self.links = {
77 home: 'https://lodash.com/',
88 code: 'https://github.com/lodash/lodash/'
lib/docs/scrapers/marionette.rb+1−1
@@ -2,7 +2,7 @@ module Docs · 1 unmodified line
22 class Marionette < UrlScraper
33 self.name = 'Marionette.js'
44 self.slug = 'marionette'
5− self.type = 'marionette'
5+ self.type = 'simple'
66 self.root_path = 'index'
77 self.links = {
88 home: 'https://marionettejs.com/',
lib/docs/scrapers/markdown.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Markdown < UrlScraper
33 self.name = 'Markdown'
4− self.type = 'markdown'
4+ self.type = 'simple'
55 self.base_url = 'http://daringfireball.net/projects/markdown/syntax'
66
77 html_filters.push 'markdown/clean_html', 'markdown/entries'
lib/docs/scrapers/mocha.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Mocha < UrlScraper
3− self.type = 'mocha'
3+ self.type = 'simple'
44 self.release = '5.0.1'
55 self.base_url = 'https://mochajs.org/'
66 self.links = {
lib/docs/scrapers/mongoose.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Mongoose < UrlScraper
33 self.name = 'Mongoose'
4− self.type = 'mongoose'
4+ self.type = 'simple'
55 self.release = '4.13.1'
66 self.base_url = 'http://mongoosejs.com/docs/'
77 self.root_path = 'index.html'
lib/docs/scrapers/nim.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Nim < UrlScraper
3− self.type = 'nim'
3+ self.type = 'simple'
44 self.release = '0.18.0'
55 self.base_url = 'https://nim-lang.org/docs/'
66 self.root_path = 'overview.html'
lib/docs/scrapers/puppeteer.rb+18−0
@@ -0,0 +1,18 @@
1+module Docs
2+ class Puppeteer < Github
3+ self.release = '1.8.0'
4+ self.base_url = 'https://github.com/GoogleChrome/puppeteer/blob/v1.8.0/docs/api.md'
5+ self.links = {
6+ code: 'https://github.com/GoogleChrome/puppeteer'
7+ }
8+
9+ html_filters.push 'puppeteer/entries', 'puppeteer/clean_html'
10+
11+ options[:container] = '.markdown-body'
12+
13+ options[:attribution] = <<-HTML
14+ &copy; 2017 Google Inc<br>
15+ Licensed under the Apache License 2.0.
16+ HTML
17+ end
18+end
lib/docs/scrapers/redux.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Redux < UrlScraper
3− self.type = 'redux'
3+ self.type = 'simple'
44 self.release = '3.7.2'
55 self.base_url = 'http://redux.js.org/docs/'
66 self.links = {
lib/docs/scrapers/requirejs.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Requirejs < UrlScraper
33 self.name = 'RequireJS'
4− self.type = 'requirejs'
4+ self.type = 'simple'
55 self.release = '2.3.5'
66 self.base_url = 'http://requirejs.org/docs/'
77 self.links = {
lib/docs/scrapers/rust.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Rust < UrlScraper
33 self.type = 'rust'
4− self.release = '1.28.0'
4+ self.release = '1.29.1'
55 self.base_url = 'https://doc.rust-lang.org/'
66 self.root_path = 'book/second-edition/index.html'
77 self.initial_paths = %w(
lib/docs/scrapers/typescript.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Typescript < UrlScraper
33 self.name = 'TypeScript'
4− self.type = 'typescript'
4+ self.type = 'simple'
55 self.release = '3.0.1'
66 self.base_url = 'https://www.typescriptlang.org/docs/'
77 self.root_path = 'tutorial.html'
lib/docs/scrapers/vagrant.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Vagrant < UrlScraper
33 self.name = 'Vagrant'
4− self.type = 'vagrant'
4+ self.type = 'simple'
55 self.release = '2.1.1'
66 self.base_url = 'https://www.vagrantup.com/docs/'
77 self.root_path = 'index.html'
lib/docs/scrapers/vulkan.rb+1−1
@@ -1,7 +1,7 @@
11 module Docs
22 class Vulkan < UrlScraper
33 self.name = 'Vulkan'
4− self.type = 'vulkan'
4+ self.type = 'simple'
55 self.release = '1.0.59'
66 self.base_url = 'https://www.khronos.org/registry/vulkan/specs/1.0/'
77 self.root_path = 'apispec.html'
lib/docs/scrapers/yarn.rb+1−1
@@ -1,6 +1,6 @@
11 module Docs
22 class Yarn < UrlScraper
3− self.type = 'yarn'
3+ self.type = 'simple'
44 self.release = '1.9.4'
55 self.base_url = 'https://yarnpkg.com/en/docs/'
66 self.links = {
lib/tasks/docs.thor+6−2
@@ -175,9 +175,13 @@ class DocsCLI < Thor · 174 unmodified lines
175175 private
176176
177177 def find_docs(names)
178− names.map do |name|
178+ names.flat_map do |name|
179179 name, version = name.split(/@|~/)
180− Docs.find(name, version)
180+ if version == 'all'
181+ Docs.find(name, false).versions
182+ else
183+ Docs.find(name, version)
184+ end
181185 end
182186 end
183187
lib/tasks/sprites.thor+1−1
@@ -89,7 +89,7 @@ class SpritesCLI < Thor · 88 unmodified lines
8989 # Unfortunately, it's not possible to get the value of a SCSS variable from a Thor task
9090 # Because hard-coding the value is even worse, we extract it using some regex
9191 path = 'assets/stylesheets/global/_variables-dark.scss'
92− regex = /\$sidebarBackground:\s+([^;]+);/
92+ regex = /--sidebarBackground:\s+([^;]+);/
9393 ChunkyPNG::Color.parse(File.read(path)[regex, 1])
9494 end
9595
public/icons/docs/handlebars/16.png+0−0

Binary file not shown.

public/icons/docs/handlebars/16@2x.png+0−0

Binary file not shown.

public/icons/docs/handlebars/SOURCE+1−0
@@ -0,0 +1 @@
1+https://github.com/yahoo/formatjs-site/tree/master/public/img
public/icons/docs/puppeteer/16.png+0−0

Binary file not shown.

public/icons/docs/puppeteer/16@2x.png+0−0

Binary file not shown.

public/icons/docs/puppeteer/SOURCE+1−0
@@ -0,0 +1 @@
1+https://github.com/GoogleChromeLabs/pptr.dev/tree/master/src/favicons
public/images/webapp-icon-512.png+0−0

Binary file not shown.

public/manifest.json+5−0
@@ -29,6 +29,11 @@ · 28 unmodified lines
2929 "src": "/images/webapp-icon-256.png",
3030 "sizes": "256x256",
3131 "type": "image/png"
32+ },
33+ {
34+ "src": "/images/webapp-icon-512.png",
35+ "sizes": "512x512",
36+ "type": "image/png"
3237 }
3338 ]
3439 }
test/app_test.rb+43−21
@@ -11,6 +11,16 @@ class AppTest < MiniTest::Spec · 10 unmodified lines
1111 App
1212 end
1313
14+ before do
15+ current_session.env('HTTPS', 'on')
16+ end
17+
18+ it 'redirects to HTTPS' do
19+ get 'http://example.com/test?q=1', {}, 'HTTPS' => 'off'
20+ assert last_response.redirect?
21+ assert_equal 'https://example.com/test?q=1', last_response['Location']
22+ end
23+
1424 describe "/" do
1525 it "works" do
1626 get '/'
@@ -20,13 +30,13 @@ class AppTest < MiniTest::Spec · 3 unmodified lines
2030 it "redirects to /#q= when there is a 'q' query param" do
2131 get '/search', q: 'foo'
2232 assert last_response.redirect?
23− assert_equal 'http://example.org/#q=foo', last_response['Location']
33+ assert_equal 'https://example.org/#q=foo', last_response['Location']
2434 end
2535
2636 it "redirects without the query string" do
2737 get '/', foo: 'bar'
2838 assert last_response.redirect?
29− assert_equal 'http://example.org/', last_response['Location']
39+ assert_equal 'https://example.org/', last_response['Location']
3040 end
3141
3242 it "sets default size" do
@@ -45,6 +55,18 @@ class AppTest < MiniTest::Spec · 12 unmodified lines
4555 get '/'
4656 assert_includes last_response.body, '<body class="foo">'
4757 end
58+
59+ it "sets the <html> theme from cookie" do
60+ get '/'
61+ assert_match %r{<html [^>]*class="[^\"]*_theme-default}, last_response.body
62+ refute_includes last_response.body, '_theme-dark'
63+
64+ set_cookie('dark=1')
65+
66+ get '/'
67+ assert_match %r{<html [^>]*class="[^\"]*_theme-dark}, last_response.body
68+ refute_includes last_response.body, '_theme-default'
69+ end
4870 end
4971
5072 describe "/[static-page]" do
@@ -52,7 +74,7 @@ class AppTest < MiniTest::Spec · 1 unmodified line
5274 %w(offline about news help).each do |page|
5375 get "/#{page}", {}, 'HTTP_USER_AGENT' => MODERN_BROWSER
5476 assert last_response.redirect?
55− assert_equal "http://example.org/#/#{page}", last_response['Location']
77+ assert_equal "https://example.org/#/#{page}", last_response['Location']
5678 end
5779 end
5880
@@ -61,7 +83,7 @@ class AppTest < MiniTest::Spec · 2 unmodified lines
6183 set_cookie('foo=bar')
6284 get "/#{page}", {}, 'HTTP_USER_AGENT' => MODERN_BROWSER
6385 assert last_response.redirect?
64− assert_equal 'http://example.org/', last_response['Location']
86+ assert_equal 'https://example.org/', last_response['Location']
6587 assert last_response['Set-Cookie'].start_with?("initial_path=%2F#{page}; path=/; expires=")
6688 end
6789 end
@@ -71,11 +93,11 @@ class AppTest < MiniTest::Spec · 3 unmodified lines
7193 it "redirects to /#q=" do
7294 get '/search'
7395 assert last_response.redirect?
74− assert_equal 'http://example.org/#q=', last_response['Location']
96+ assert_equal 'https://example.org/#q=', last_response['Location']
7597
7698 get '/search', q: 'foo'
7799 assert last_response.redirect?
78− assert_equal 'http://example.org/#q=foo', last_response['Location']
100+ assert_equal 'https://example.org/#q=foo', last_response['Location']
79101 end
80102 end
81103
@@ -148,7 +170,7 @@ class AppTest < MiniTest::Spec · 66 unmodified lines
148170 set_cookie('docs=html~5')
149171 get '/html~5/', {}, 'HTTP_USER_AGENT' => MODERN_BROWSER
150172 assert last_response.redirect?
151− assert_equal 'http://example.org/', last_response['Location']
173+ assert_equal 'https://example.org/', last_response['Location']
152174 assert last_response['Set-Cookie'].start_with?("initial_path=%2Fhtml%7E5%2F; path=/; expires=")
153175 end
154176
@@ -161,13 +183,13 @@ class AppTest < MiniTest::Spec · 6 unmodified lines
161183 set_cookie('docs=html~5')
162184 get '/html/', {}, 'HTTP_USER_AGENT' => MODERN_BROWSER
163185 assert last_response.redirect?
164− assert_equal 'http://example.org/', last_response['Location']
186+ assert_equal 'https://example.org/', last_response['Location']
165187 assert last_response['Set-Cookie'].start_with?("initial_path=%2Fhtml%2F; path=/; expires=")
166188 end
167189
168190 it "renders when the doc exists and is enabled, and the request is from Googlebot" do
169191 set_cookie('docs=html')
170− get '/html/', {}, 'HTTP_USER_AGENT' => 'Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)'
192+ get '/html/', {}, 'HTTP_USER_AGENT' => 'Mozilla/5.0 (compatible; Googlebot/2.1; +https://www.google.com/bot.html)'
171193 assert last_response.ok?
172194 end
173195
@@ -187,17 +209,17 @@ class AppTest < MiniTest::Spec · 13 unmodified lines
187209 it "redirects with trailing slash" do
188210 get '/html'
189211 assert last_response.redirect?
190− assert_equal 'http://example.org/html/', last_response['Location']
212+ assert_equal 'https://example.org/html/', last_response['Location']
191213
192214 get '/html', bar: 'baz'
193215 assert last_response.redirect?
194− assert_equal 'http://example.org/html/?bar=baz', last_response['Location']
216+ assert_equal 'https://example.org/html/?bar=baz', last_response['Location']
195217 end
196218
197219 it "redirects old docs" do
198220 get '/iojs/'
199221 assert last_response.redirect?
200− assert_equal 'http://example.org/node/', last_response['Location']
222+ assert_equal 'https://example.org/node/', last_response['Location']
201223 end
202224 end
203225
@@ -232,17 +254,17 @@ class AppTest < MiniTest::Spec · 28 unmodified lines
232254 it "redirects with trailing slash" do
233255 get '/css-foo'
234256 assert last_response.redirect?
235− assert_equal 'http://example.org/css-foo/', last_response['Location']
257+ assert_equal 'https://example.org/css-foo/', last_response['Location']
236258
237259 get '/css-foo', bar: 'baz'
238260 assert last_response.redirect?
239− assert_equal 'http://example.org/css-foo/?bar=baz', last_response['Location']
261+ assert_equal 'https://example.org/css-foo/?bar=baz', last_response['Location']
240262 end
241263
242264 it "redirects old docs" do
243265 get '/yii1-foo/'
244266 assert last_response.redirect?
245− assert_equal 'http://example.org/yii~1.1-foo/', last_response['Location']
267+ assert_equal 'https://example.org/yii~1.1-foo/', last_response['Location']
246268 end
247269 end
248270
@@ -263,17 +285,17 @@ class AppTest < MiniTest::Spec · 14 unmodified lines
263285 it "redirects without trailing slash" do
264286 get '/css/foo/'
265287 assert last_response.redirect?
266− assert_equal 'http://example.org/css/foo', last_response['Location']
288+ assert_equal 'https://example.org/css/foo', last_response['Location']
267289
268290 get '/css/foo/', bar: 'baz'
269291 assert last_response.redirect?
270− assert_equal 'http://example.org/css/foo?bar=baz', last_response['Location']
292+ assert_equal 'https://example.org/css/foo?bar=baz', last_response['Location']
271293 end
272294
273295 it "redirects old docs" do
274296 get '/python2/foo'
275297 assert last_response.redirect?
276− assert_equal 'http://example.org/python~2.7/foo', last_response['Location']
298+ assert_equal 'https://example.org/python~2.7/foo', last_response['Location']
277299 end
278300 end
279301
@@ -281,7 +303,7 @@ class AppTest < MiniTest::Spec · 1 unmodified line
281303 it "returns to the asset path" do
282304 get '/docs.json'
283305 assert last_response.redirect?
284− assert_equal 'http://example.org/assets/docs.json', last_response['Location']
306+ assert_equal 'https://example.org/assets/docs.json', last_response['Location']
285307 end
286308 end
287309
@@ -289,7 +311,7 @@ class AppTest < MiniTest::Spec · 1 unmodified line
289311 it "returns to the asset path" do
290312 get '/application.js'
291313 assert last_response.redirect?
292− assert_equal 'http://example.org/assets/application.js', last_response['Location']
314+ assert_equal 'https://example.org/assets/application.js', last_response['Location']
293315 end
294316 end
295317
@@ -297,7 +319,7 @@ class AppTest < MiniTest::Spec · 1 unmodified line
297319 it "returns to the asset path" do
298320 get '/application.css'
299321 assert last_response.redirect?
300− assert_equal 'http://example.org/assets/application.css', last_response['Location']
322+ assert_equal 'https://example.org/assets/application.css', last_response['Location']
301323 end
302324 end
303325
views/index.erb+2−2
@@ -1,5 +1,5 @@
11 <!DOCTYPE html>
2−<html<%= ' manifest="/manifest.appcache"' if App.production? %> prefix="og: http://ogp.me/ns#" lang="en" class="_booting">
2+<html<%= ' manifest="/manifest.appcache"' if App.production? %> prefix="og: http://ogp.me/ns#" lang="en" class="_booting _theme-<%= app_theme %>">
33 <head>
44 <meta charset="utf-8">
55 <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no,shrink-to-fit=no">
@@ -30,7 +30,7 @@ · 24 unmodified lines
3030 <link rel="apple-touch-icon" sizes="152x152" href="<%= App.cdn_origin %>/images/apple-icon-152.png">
3131 <link rel="apple-touch-icon" sizes="160x160" href="<%= App.cdn_origin %>/images/apple-icon-160.png">
3232 <link rel="mask-icon" href="<%= App.cdn_origin %>/images/webkit-mask-icon.svg" color="#398df0">
33− <link rel="stylesheet" href="<%= main_stylesheet_path %>" data-alt="<%= alternate_stylesheet_path %>">
33+ <%= stylesheet_tag 'application' %>
3434 </head>
3535 <body<%= %( class="#{app_layout}") if app_layout %>>
3636 <noscript class="_fail">DevDocs requires JavaScript to run.</noscript>
views/other.erb+2−2
@@ -1,5 +1,5 @@
11 <!DOCTYPE html>
2−<html lang="en" class="_booting">
2+<html lang="en" class="_booting _theme-<%= app_theme %>">
33 <head>
44 <meta charset="utf-8">
55 <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
@@ -11,7 +11,7 @@ · 5 unmodified lines
1111 <link rel="manifest" href="/manifest.json">
1212 <link rel="icon" type="image/x-icon" href="<%= App.cdn_origin %>/favicon.ico">
1313 <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="Search DevDocs">
14− <link rel="stylesheet" href="<%= main_stylesheet_path %>" data-alt="<%= alternate_stylesheet_path %>">
14+ <%= stylesheet_tag 'application' %>
1515 </head>
1616 <body<%= %( class="#{app_layout}") if app_layout %> data-doc="<%= CGI::escape_html @doc.to_json %>">
1717 <noscript class="_fail">DevDocs requires JavaScript to run.</noscript>
views/unsupported.erb+4−7
@@ -10,13 +10,10 @@ · 9 unmodified lines
1010 <h1 class="_fail-title">Your browser is unsupported, sorry.</h1>
1111 <p class="_fail-text">DevDocs is an API documentation browser which supports the following browsers:</p>
1212 <ul class="_fail-list">
13− <li>Recent versions of Chrome and Firefox</li>
14− <li>Safari 5.1+</li>
15− <li>Opera 12.1+</li>
16− <li>Internet Explorer 10+</li>
17− <li>iOS 6+</li>
18− <li>Android 4.1+</li>
19− <li>Windows Phone 8+</li>
13+ <li>Recent versions of Firefox, Chrome, or Opera</li>
14+ <li>Safari 9.1+</li>
15+ <li>Edge 16+</li>
16+ <li>iOS 10+</li>
2017 </ul>
2118 <p class="_fail-text">
2219 If you're unable to upgrade, I apologize.