From 649b7b55465738c08669b6ef0fccd8b5b64ad226 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Feb 2015 17:50:03 -0500 Subject: [PATCH] Implement dark theme Closes #73. --- assets/images/icons.png | Bin 26424 -> 26865 bytes assets/images/icons@2x.png | Bin 66185 -> 68538 bytes assets/javascripts/app/settings.coffee | 15 +++- assets/javascripts/news.json | 5 +- .../javascripts/templates/sidebar_tmpl.coffee | 5 +- .../javascripts/views/layout/document.coffee | 8 ++ .../javascripts/views/sidebar/sidebar.coffee | 3 + assets/stylesheets/application-dark.css.scss | 72 +++++++++++++++ assets/stylesheets/components/_content.scss | 10 +++ assets/stylesheets/components/_header.scss | 12 ++- assets/stylesheets/components/_prism.scss | 36 ++++++-- assets/stylesheets/components/_sidebar.scss | 39 ++++++++- assets/stylesheets/global/_classes.scss | 6 +- assets/stylesheets/global/_icons.scss | 9 +- assets/stylesheets/global/_variables.scss | 2 + assets/stylesheets/global/variables-dark.scss | 82 ++++++++++++++++++ lib/app.rb | 17 +++- public/icons/ui/check-white/SOURCE | 1 + public/icons/ui/check-white/check-white.png | Bin 0 -> 119 bytes .../icons/ui/check-white/check-white@2x.png | Bin 0 -> 158 bytes public/icons/ui/dir-white/SOURCE | 1 + public/icons/ui/dir-white/dir-white.png | Bin 0 -> 125 bytes public/icons/ui/dir-white/dir-white@2x.png | Bin 0 -> 191 bytes public/icons/ui/light-white/SOURCE | 1 + public/icons/ui/light-white/light.png | Bin 0 -> 262 bytes public/icons/ui/light-white/light@2x.png | Bin 0 -> 522 bytes public/icons/ui/light/SOURCE | 1 + public/icons/ui/light/light.png | Bin 0 -> 244 bytes public/icons/ui/light/light@2x.png | Bin 0 -> 495 bytes public/icons/ui/link-white/SOURCE | 1 + public/icons/ui/link-white/link-white.png | Bin 0 -> 143 bytes public/icons/ui/link-white/link-white@2x.png | Bin 0 -> 233 bytes public/icons/ui/search-white/SOURCE | 1 + public/icons/ui/search-white/search-white.png | Bin 0 -> 248 bytes .../icons/ui/search-white/search-white@2x.png | Bin 0 -> 465 bytes public/icons/ui/settings-white/SOURCE | 1 + .../ui/settings-white/settings-white.png | Bin 0 -> 209 bytes .../ui/settings-white/settings-white@2x.png | Bin 0 -> 399 bytes views/index.erb | 2 +- views/manifest.erb | 1 + views/other.erb | 2 +- 41 files changed, 312 insertions(+), 21 deletions(-) create mode 100644 assets/stylesheets/application-dark.css.scss create mode 100644 assets/stylesheets/global/variables-dark.scss create mode 100644 public/icons/ui/check-white/SOURCE create mode 100644 public/icons/ui/check-white/check-white.png create mode 100644 public/icons/ui/check-white/check-white@2x.png create mode 100644 public/icons/ui/dir-white/SOURCE create mode 100644 public/icons/ui/dir-white/dir-white.png create mode 100644 public/icons/ui/dir-white/dir-white@2x.png create mode 100644 public/icons/ui/light-white/SOURCE create mode 100644 public/icons/ui/light-white/light.png create mode 100644 public/icons/ui/light-white/light@2x.png create mode 100644 public/icons/ui/light/SOURCE create mode 100644 public/icons/ui/light/light.png create mode 100644 public/icons/ui/light/light@2x.png create mode 100644 public/icons/ui/link-white/SOURCE create mode 100644 public/icons/ui/link-white/link-white.png create mode 100644 public/icons/ui/link-white/link-white@2x.png create mode 100644 public/icons/ui/search-white/SOURCE create mode 100644 public/icons/ui/search-white/search-white.png create mode 100644 public/icons/ui/search-white/search-white@2x.png create mode 100644 public/icons/ui/settings-white/SOURCE create mode 100755 public/icons/ui/settings-white/settings-white.png create mode 100755 public/icons/ui/settings-white/settings-white@2x.png diff --git a/assets/images/icons.png b/assets/images/icons.png index 2364ed9283dae25d6d26070524c4823629b304de..527b5394186a36be1f95d143c51bde5ea3eaaa03 100644 GIT binary patch literal 26865 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 z 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 literal 26424 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 JPDHLkV1nwI%?JPh delta 3920 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 eq|6WIwf!%|?bqkgMAer70000 count: 0 @@ -45,13 +46,21 @@ class app.Settings setDocs: (docs) -> try - Cookies.set DOCS_KEY, docs.join('/'), - path: '/' - expires: 1e8 + Cookies.set DOCS_KEY, docs.join('/'), path: '/', expires: 1e8 + catch + return + + setDark: (value) -> + try + if value + Cookies.set DARK_KEY, '1', path: '/', expires: 1e8 + else + Cookies.expire DARK_KEY catch return reset: -> try Cookies.expire DOCS_KEY + try Cookies.expire DARK_KEY try @store.del(SETTINGS_KEY) return diff --git a/assets/javascripts/news.json b/assets/javascripts/news.json index e0557456..493be49d 100644 --- a/assets/javascripts/news.json +++ b/assets/javascripts/news.json @@ -1,5 +1,8 @@ [ - [ "2015-01-13", + [ "2015-02-08", + "New dark theme\nClick the icon in the bottom left corner to activate.\nFeedback welcome :)" + ], [ + "2015-01-13", "Offline mode has landed!\nIf you notice any bugs, please report them on GitHub." ], [ "2014-12-21", diff --git a/assets/javascripts/templates/sidebar_tmpl.coffee b/assets/javascripts/templates/sidebar_tmpl.coffee index 3fb0c805..119b17f7 100644 --- a/assets/javascripts/templates/sidebar_tmpl.coffee +++ b/assets/javascripts/templates/sidebar_tmpl.coffee @@ -51,7 +51,10 @@ templates.sidebarPickerNote = """ sidebarFooter = (html) -> """""" templates.sidebarSettings = -> - sidebarFooter """Select documentation""" + sidebarFooter """ + + Select documentation + """ templates.sidebarSave = -> sidebarFooter """Save""" diff --git a/assets/javascripts/views/layout/document.coffee b/assets/javascripts/views/layout/document.coffee index 7dc0c21a..f128fbc6 100644 --- a/assets/javascripts/views/layout/document.coffee +++ b/assets/javascripts/views/layout/document.coffee @@ -17,6 +17,14 @@ class app.views.Document extends app.View @activate() return + toggleLight: -> + css = $('link[rel="stylesheet"][data-alt]') + alt = css.getAttribute('data-alt') + css.setAttribute('data-alt', css.getAttribute('href')) + css.setAttribute('href', alt) + app.settings.setDark(alt.indexOf('dark') > 0) + return + setTitle: (title) -> @el.title = if title then "DevDocs/#{title}" else 'DevDocs' diff --git a/assets/javascripts/views/sidebar/sidebar.coffee b/assets/javascripts/views/sidebar/sidebar.coffee index 14ab6522..4cd10a1d 100644 --- a/assets/javascripts/views/sidebar/sidebar.coffee +++ b/assets/javascripts/views/sidebar/sidebar.coffee @@ -79,6 +79,9 @@ class app.views.Sidebar extends app.View if event.target.hasAttribute? 'data-reset-list' $.stopEvent(event) @reset() + else if event.target.hasAttribute? 'data-light' + $.stopEvent(event) + app.document.toggleLight() return onGlobalClick: (event) => diff --git a/assets/stylesheets/application-dark.css.scss b/assets/stylesheets/application-dark.css.scss new file mode 100644 index 00000000..a8a4d877 --- /dev/null +++ b/assets/stylesheets/application-dark.css.scss @@ -0,0 +1,72 @@ +//= depend_on icons.png +//= depend_on icons@2x.png + +//= require vendor/open-sans + +/*! + * Copyright 2013-2015 Thibaut Courouble and other contributors + * + * This source code is licensed under the terms of the Mozilla + * Public License, v. 2.0, a copy of which may be obtained at: + * http://mozilla.org/MPL/2.0/ + */ + +@import 'global/variables-dark', + 'global/icons', + 'global/classes', + 'global/base'; + +@import 'components/app', + 'components/header', + 'components/notif', + 'components/sidebar', + 'components/content', + 'components/page', + 'components/fail', + 'components/notice', + 'components/path', + 'components/prism', + 'components/mobile'; + +@import 'pages/angular', + 'pages/bower', + 'pages/c', + 'pages/chai', + 'pages/coffeescript', + 'pages/cordova', + 'pages/d3', + 'pages/ember', + 'pages/express', + 'pages/go', + 'pages/haskell', + 'pages/jquery', + 'pages/knockout', + 'pages/git', + 'pages/grunt', + 'pages/laravel', + 'pages/less', + 'pages/lodash', + 'pages/marionette', + 'pages/markdown', + 'pages/maxcdn', + 'pages/mdn', + 'pages/modernizr', + 'pages/moment', + 'pages/mongoose', + 'pages/nginx', + 'pages/node', + 'pages/php', + 'pages/phpunit', + 'pages/postgres', + 'pages/rdoc', + 'pages/react', + 'pages/redis', + 'pages/requirejs', + 'pages/rethinkdb', + 'pages/rfc', + 'pages/sinon', + 'pages/socketio', + 'pages/sphinx', + 'pages/underscore', + 'pages/yard', + 'pages/yii'; diff --git a/assets/stylesheets/components/_content.scss b/assets/stylesheets/components/_content.scss index 16c4f3f1..fc11154a 100644 --- a/assets/stylesheets/components/_content.scss +++ b/assets/stylesheets/components/_content.scss @@ -425,6 +425,11 @@ ._splash-sponsor > ._maxcdn-logo { background-image: image-url('maxcdn-bw.png'); + @if $style == 'dark' { + filter: invert(100%); + -webkit-filter: invert(100%); + } + @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { background-image: image-url('maxcdn-bw@2x.png'); } @@ -443,6 +448,11 @@ ._splash-sponsor > ._shopify-logo { background-image: image-url('shopify-bw.png'); + @if $style == 'dark' { + filter: invert(100%); + -webkit-filter: invert(100%); + } + @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { background-image: image-url('shopify-bw@2x.png'); } diff --git a/assets/stylesheets/components/_header.scss b/assets/stylesheets/components/_header.scss index 39db0b4f..4c96aae6 100644 --- a/assets/stylesheets/components/_header.scss +++ b/assets/stylesheets/components/_header.scss @@ -98,7 +98,11 @@ top: 1rem; left: 1rem; opacity: .4; - @extend %icon, %icon-search; + @if $style == 'dark' { + @extend %icon, %icon-search-white; + } @else { + @extend %icon, %icon-search; + } } } @@ -132,7 +136,11 @@ opacity: .3; &:hover { opacity: .5; } - &:before { @extend %icon, %icon-clear; } + @if $style == 'dark' { + &:before { @extend %icon, %icon-close-white; } + } @else { + &:before { @extend %icon, %icon-clear; } + } ._search-active > & { display: block; } } diff --git a/assets/stylesheets/components/_prism.scss b/assets/stylesheets/components/_prism.scss index 43d6020d..2d18d4ed 100644 --- a/assets/stylesheets/components/_prism.scss +++ b/assets/stylesheets/components/_prism.scss @@ -17,7 +17,11 @@ .token.constant, .token.symbol, .token.deleted { - color: #905; + @if $style == 'dark' { + color: #cf6a4c; + } @else { + color: #905; + } } .token.selector, @@ -26,7 +30,11 @@ .token.char, .token.builtin, .token.inserted { - color: #5e8e01; + @if $style == 'dark' { + color: #d0c584; + } @else { + color: #5e8e01; + } } .token.operator, @@ -34,23 +42,39 @@ .token.url, .language-css .token.string, .style .token.string { - color: #a67f59; + @if $style == 'dark' { + color: #8f9d6a; + } @else { + color: #a67f59; + } } .token.atrule, .token.attr-value, .token.keyword { - color: #0070a3; + @if $style == 'dark' { + color: #7587a6; + } @else { + color: #0070a3; + } } .token.function { - color: #dd4a68; + @if $style == 'dark' { + color: #ac885b; + } @else { + color: #dd4a68; + } } .token.regex, .token.important, .token.variable { - color: #e90; + @if $style == 'dark' { + color: #e9c062; + } @else { + color: #e90; + } } .token.important { diff --git a/assets/stylesheets/components/_sidebar.scss b/assets/stylesheets/components/_sidebar.scss index 9a6d72c8..2e417f98 100644 --- a/assets/stylesheets/components/_sidebar.scss +++ b/assets/stylesheets/components/_sidebar.scss @@ -162,7 +162,11 @@ &:hover { opacity: .65; } &:before { - @extend %icon, %icon-dir; + @if $style == 'dark' { + @extend %icon, %icon-dir-white; + } @else { + @extend %icon, %icon-dir; + } .open > &, .open-title > & { -webkit-transform: rotate(90deg); @@ -340,6 +344,7 @@ ._sidebar-footer-link { position: relative; display: block; + overflow: hidden; height: 2.5rem; line-height: 1rem; padding: .75rem; @@ -360,7 +365,31 @@ } ._sidebar-footer-edit { - &:before { @extend %icon-settings; } + @if $style == 'dark' { + &:before { @extend %icon-settings-white; } + } @else { + &:before { @extend %icon-settings; } + } +} + +._sidebar-footer-light { + float: right; + width: 2.5rem; + padding: 0; + opacity: .6; + + &:before { + float: none; + position: absolute; + top: .75rem; + left: .75rem; + + @if $style == 'dark' { + @extend %icon-light-white; + } @else { + @extend %icon-light; + } + } } ._sidebar-footer-save { @@ -370,5 +399,9 @@ box-shadow: inset 0 1px $noteGreenBorder, 1px 0 $noteGreenBorder; - &:before { @extend %icon-check; } + @if $style == 'dark' { + &:before { @extend %icon-check-white; } + } @else { + &:before { @extend %icon-check; } + } } diff --git a/assets/stylesheets/global/_classes.scss b/assets/stylesheets/global/_classes.scss index 7e6bff78..33d209f4 100644 --- a/assets/stylesheets/global/_classes.scss +++ b/assets/stylesheets/global/_classes.scss @@ -101,7 +101,11 @@ height: .4375rem; margin: .125rem 0 0 .0625rem; vertical-align: top; - @extend %icon, %icon-link; + @if $style == 'dark' { + @extend %icon, %icon-link-white; + } @else { + @extend %icon, %icon-link; + } } } diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index d3a28521..f5471821 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -4,7 +4,7 @@ width: 1rem; height: 1rem; background-image: image-url('icons.png'); - background-size: 5rem 13rem; + background-size: 5rem 15rem; } @media (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi) { @@ -77,3 +77,10 @@ ._icon-socketio:before { background-position: -2rem -12rem; } ._icon-modernizr:before { background-position: -3rem -12rem; } ._icon-bower:before { background-position: -4rem -12rem; } +%icon-search-white { background-position: 0 -13rem; } +%icon-dir-white { background-position: -1rem -13rem; } +%icon-link-white { background-position: -2.25rem -13.25rem; } +%icon-settings-white { background-position: -3rem -13rem; } +%icon-check-white { background-position: -4rem -13rem; } +%icon-light { background-position: 0 -14rem; } +%icon-light-white { background-position: -1rem -14rem; } diff --git a/assets/stylesheets/global/_variables.scss b/assets/stylesheets/global/_variables.scss index a2fc51b3..eff01fd9 100644 --- a/assets/stylesheets/global/_variables.scss +++ b/assets/stylesheets/global/_variables.scss @@ -1,6 +1,8 @@ $baseFont: 'Open Sans', Helvetica, Arial, sans-serif; $monoFont: 'Source Code Pro', 'Inconsolata-g', Consolas, Menlo, monospace; +$style: 'light'; + $headerHeight: 3rem; $sidebarWidth: 18rem; $sidebarMediumWidth: 16rem; diff --git a/assets/stylesheets/global/variables-dark.scss b/assets/stylesheets/global/variables-dark.scss new file mode 100644 index 00000000..41ef7b69 --- /dev/null +++ b/assets/stylesheets/global/variables-dark.scss @@ -0,0 +1,82 @@ +$baseFont: 'Open Sans', Helvetica, Arial, sans-serif; +$monoFont: 'Source Code Pro', 'Inconsolata-g', Consolas, Menlo, monospace; + +$style: 'dark'; + +$headerHeight: 3rem; +$sidebarWidth: 18rem; +$sidebarMediumWidth: 16rem; + +$contentBackground: #2d2d2d; + +$textColor: #b4b3af; +$textColorLight: #7e7d7d; +$textColorLighter: #6a6868; + +$inputFocusBorder: #444; + +$focusBackground: #3d3d3e; +$focusBorder: #3d3d3e; +$focusText: #f7f2f2; + +$loadingText: #616161; +$splashText: #616161; +$promoText: #616161; + +$selectionBackground: #346fce; +$selectionBorder: #346fce; +$selectionText: #fff; + +$highlightBackground: #3d4449; + +$linkColor: #f7f2f2; +$linkColorHover: #fff; + +$headerBackground: #1e1e1e; +$headerBorder: #1e1e1e; + +$sidebarBackground: #262626; +$sidebarBorder: #262626; + +$scrollbarColor: #515151; +$scrollbarColorHover: #888; + +$pathBackground: $headerBackground; +$pathBorder: $headerBorder; + +$noticeBackground: #1e1e1e; +$noticeBorder: #1e1e1e; + +$boxBackground: #1e1e1e; +$boxBorder: #0a0a0a; +$boxBorderLight: #171717; +$boxHeaderBackground: #1e1e1e; + +$noteBackground: #3a3e31; +$noteBorder: #1a1c17; + +$noteGreenBackground: #283e2b; +$noteGreenBorder: #111b13; + +$noteBlueBackground: #1f2f3e; +$noteBlueBorder: #101922; + +$noteOrangeBackground: #3e271d; +$noteOrangeBorder: #1f1511; + +$noteRedBackground: #3e1b1b; +$noteRedBorder: #1b0a0a; + +$labelBackground: #38383a; + +$notifBackground: rgba(#000, .85); +$notifColor: #fff; +$notifColorLight: #bbb; + +$mediumScreen: '(max-width: 800px)'; + +$contentZ: 1; +$sidebarZ: 2; +$headerZ: 3; +$noticeZ: 4; +$hoverZ: 5; diff --git a/lib/app.rb b/lib/app.rb index 25bdf23e..59f1ec81 100644 --- a/lib/app.rb +++ b/lib/app.rb @@ -17,7 +17,7 @@ class App < Sinatra::Application set :assets_prefix, 'assets' set :assets_path, -> { File.join(public_folder, assets_prefix) } set :assets_manifest_path, -> { File.join(assets_path, 'manifest.json') } - set :assets_compile, %w(*.png docs.js application.js application.css) + set :assets_compile, %w(*.png docs.js application.js application.css application-dark.css) require 'yajl/json_gem' set :docs_prefix, 'docs' @@ -117,6 +117,21 @@ class App < Sinatra::Application def query_string_for_redirection request.query_string.empty? ? nil : "?#{request.query_string}" end + + def main_stylesheet_path + stylesheet_paths[cookies[:dark].present? ? :dark : :default] + end + + def alternate_stylesheet_path + stylesheet_paths[cookies[:dark].present? ? :default : :dark] + end + + def stylesheet_paths + @stylesheet_paths ||= { + default: stylesheet_path('application'), + dark: stylesheet_path('application-dark') + } + end end before do diff --git a/public/icons/ui/check-white/SOURCE b/public/icons/ui/check-white/SOURCE new file mode 100644 index 00000000..766f1fbe --- /dev/null +++ b/public/icons/ui/check-white/SOURCE @@ -0,0 +1 @@ +http://happytodesign.com/hicons/ diff --git a/public/icons/ui/check-white/check-white.png b/public/icons/ui/check-white/check-white.png new file mode 100644 index 0000000000000000000000000000000000000000..a9f4e4760b2319b828f87ab5977a84a109076c33 GIT binary patch literal 119 zcmeAS@N?(olHy`uVBq!ia0vp^0zk~e!2%=?zWWN2u=8|r43W5;oN$2iANQa9ANmdc zzyAFH|6lrp_x$6DOqrKn_#M3PcR%CI?xO`MiZW$~TSW`3cvn5K|0#D^d;`N(nfyX| Tz7IV>lNdZ*{an^LB{Ts585k@i literal 0 HcmV?d00001 diff --git a/public/icons/ui/check-white/check-white@2x.png b/public/icons/ui/check-white/check-white@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..e6fcff0560992281739e7992aadfc0e7c9926b9b GIT binary patch literal 158 zcmeAS@N?(olHy`uVBq!ia0vp^3P3Eu!2%==qs;dMsZ>uF#}JFtZ>L!EF(`02+iHD} zw{Vj6>2V8LVW?;HeQLhPOJ9ct0UZ6)FBs1;&L|Mjt@$IiZ}+O)vKOmN+&^ADAh4rq ze)pZln_Cy2?0@v(QB}jOYWBkPdm<{=f5oi)m_QTxaL|JVPAIdR=Ov5jfH^2e&rZ~mXGVD2ho ZVDLFmpuOVe#a5ts44$rjF6*2UngAkgG;;s| literal 0 HcmV?d00001 diff --git a/public/icons/ui/dir-white/dir-white@2x.png b/public/icons/ui/dir-white/dir-white@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..7486a52092bd4cce1a0fc6a23f819884fa8776a3 GIT binary patch literal 191 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UZJsWUAs)xyUfIvfm?*>cp!;&S zqKa7H43~u)I8H`BV%yQ=rK1>_eUxS2qrg}Dw=dXH-k|>TZ|*F^dhxyOb2DuN4&2=( z_TyQ~Oh%Epl}raths|av*nEmXLdU3K``$>V1DB7fFg}>XbbU+9wtb!LOFAz~EOzY* r+i9V8ykwpA^B)VB=;xmC|HNn=yS6TJ`4> literal 0 HcmV?d00001 diff --git a/public/icons/ui/light-white/SOURCE b/public/icons/ui/light-white/SOURCE new file mode 100644 index 00000000..ffa79609 --- /dev/null +++ b/public/icons/ui/light-white/SOURCE @@ -0,0 +1 @@ +http://www.entypo.com/ diff --git a/public/icons/ui/light-white/light.png b/public/icons/ui/light-white/light.png new file mode 100644 index 0000000000000000000000000000000000000000..cacc3f9dfe0f8f41c697df6966093e056a8964cb GIT binary patch literal 262 zcmV+h0r~!kP)$? zI|{;35Jji(Q`x8xEexb_6@p@!&eRruKsS*t2mwiHl_>5_MBRcf;aDVjA-+s?XYOTw zSELsB_+kb=#`p0s-PpwX;xldp!|KiO5Xk!A&RA^-pY M07*qoM6N<$f=T6Y1^@s6 literal 0 HcmV?d00001 diff --git a/public/icons/ui/light-white/light@2x.png b/public/icons/ui/light-white/light@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..39e76205815be0526be1b3dcaf366c5cb1e81cff GIT binary patch literal 522 zcmV+l0`>igP)kdg0005eNkle5O_>pt8c~oHY0wl#6e8D^xoMXxp%0Mt4YX(xRA|!97Oh%1w7R-> z(U?pw`Vh5n70NWDK5gWJbDet!H_f{`zkBB4J@*XrhOCc*Sgatlt{|&QpmcB`0#SQF zuT!bVeV{LuU-qCG=*AyosjbtdQrV~)M)m?-Hc>Y$H!;jucFa)AYG8<&2G zZkuy2S#_E)FBY3O;Y^Z0wCGXZEfh`J005g_InwSmp0*75ZOJ--Z@T0Iik88eTY{hp zfbWjx1JmHG!@KJr0N`C7&}jo-bqM6GAp{-Fw%PRgXz!6%}QZdXxN)vLR`}h)v82IaNm8STk@{4cqSL z0z(?8>DvnouS8#UGsUo{m`25;G z49shw$(4)%taAWkfRS&vfI0`vB>~{h1_aYw0B;`k?1_>uN$bhJLbP>-4?nqufgrhH zH|R_N8f&$wEq{aDwTYF6=+&8WFjL!z04G}Ky(cOI3-2y>gQdcOXPr+;XX#MS+zY78 uaury)0XUXC6kmO>6#$M<9_tkTJ@+q+8b1Zu{nn@e0000kdg0005DNklP@zei4NVPRny$_b zX<`n&h#H(ix!tQifgI>^INT!+eZI>%!}IX{O^>z;YHAAhtt^DHeX9teA|HC4kX8~x zN!msCq;w0vjY^v`DQ!eu7^YR1O`%~(p4;j|Q@@ml8p5JH^TM_<8E%?&2SBHBb82el zj5`J3z6B5DD4Mh(TC(YdL-y#TFUi<1i`GSwue#(@OvcyT0INb0-yD`}N(iqV1bi1Q zc_T-s4dJs6G8Z&-YinHCaREp_VK+~t6qHqz0CU0$$Zink0hd&i6{v~bOoIjCW7`Ew z;A!$#V>$VJCwswa=7Q({{)z@v^eKQ3!gAXNRnXy@iUCC_kA)pQZ5lk&)@gO&6S5m@ zIWNa6A-r@TbHRJLjwGd5T$g^r568)O##%D)(}MMu@pJa*s2NSslBQY5- zs9Lh5YCMx|U<7q;D%XHZk9E7595_+w1kv}tLNYzZS$`kdYK lVd*!z|I_w=k8A#U_ZOhs0hi^2as2=Q002ovPDHLkV1oB=-3tH! literal 0 HcmV?d00001 diff --git a/public/icons/ui/link-white/SOURCE b/public/icons/ui/link-white/SOURCE new file mode 100644 index 00000000..ffa79609 --- /dev/null +++ b/public/icons/ui/link-white/SOURCE @@ -0,0 +1 @@ +http://www.entypo.com/ diff --git a/public/icons/ui/link-white/link-white.png b/public/icons/ui/link-white/link-white.png new file mode 100644 index 0000000000000000000000000000000000000000..a26fd06244461d257d2bb69633f3b5d284597c53 GIT binary patch literal 143 zcmeAS@N?(olHy`uVBq!ia0vp^96-#@!2%@b2OPNyq{2L1978ywlM@=6|4;q@)Zt3! z|LOm4{}KNg|L6a;|Ih!QmG~F`jbyoXsGs3os}pH()gw+yLr$)K_0$ z>C5}9zvWGDc1=VPJqLcA)!^K1F*8W9OU%KiZ4qNHzSKP!f*TvwL|ps3`(P@? zk-9nH(a?gCcW+K@S~UiDM$&?bSL^i!t}KWaxUeM(`%a{2fgPzVidfNtjy;$E2j8YO j`0(7J22c8%I~4f^Npvm6_K}Y}00000NkvXXu0mjfO(9?J literal 0 HcmV?d00001 diff --git a/public/icons/ui/search-white/SOURCE b/public/icons/ui/search-white/SOURCE new file mode 100644 index 00000000..ffa79609 --- /dev/null +++ b/public/icons/ui/search-white/SOURCE @@ -0,0 +1 @@ +http://www.entypo.com/ diff --git a/public/icons/ui/search-white/search-white.png b/public/icons/ui/search-white/search-white.png new file mode 100644 index 0000000000000000000000000000000000000000..758df5a63982d6f71a97d1281df24faa3fae4556 GIT binary patch literal 248 zcmV4#t zu}T5~7y#g(rk0=xq+Y;>Xb7Sg2y|;GYHg@@Xs)JQZ0`+15M0_Ukk%GO!r`Dnp&-z& zPSCp(B)>0WHA-qaM%r#|#Uh6i^t24{VL$SeBtBJQ%Bi8mPGsEUDCSh~7#SV!QJ^h} zjFG1(P{(e}c+raj4HN4z;|9kur|ipfWNhjis>YPEH(W=aJp;UY(C{rab`p8E)phZs y=}v0wEEd_Y7JpnxO`OLvE~WahoC{qC@xNbVQ=Id+Z5_S<0000kdg0004)Nklr{ufQmvCBa} zc}}AaN1An9R%uZ@(riyAH6oC{)j6Yma6dq&vbjg8hR4^75g*O=Q6oXe7TQn$)62`P*FpSlqFg%PA z#o#K|O@*<8F|HU~!s=BRpD<<>gKn&}!pLG26oVHS`y>=b25U$TBq(C!6onK&Fg7`> zNIb#1uV_5Q%8^nC{gg2_Nhlg8d5g8d4b|WT6O^%j(IXd{`GDoK#6zxgnOjV;K`oCy zxp0mghufuJE}Y^e9$_VX0>2rQ8|}=Hr|KJ7?$E$EK7l>%Djuilpp&HjVGN(ZKKE2F zM)3)h8Bo0#p+caj`tgVgRm(aGGE^{%T+q=l%y(8euVdmbThLGvZ_ipI00000NkvXX Hu0mjf<8i<% literal 0 HcmV?d00001 diff --git a/public/icons/ui/settings-white/SOURCE b/public/icons/ui/settings-white/SOURCE new file mode 100644 index 00000000..fa3cf541 --- /dev/null +++ b/public/icons/ui/settings-white/SOURCE @@ -0,0 +1 @@ +http://gemicon.net/ diff --git a/public/icons/ui/settings-white/settings-white.png b/public/icons/ui/settings-white/settings-white.png new file mode 100755 index 0000000000000000000000000000000000000000..49c53a402e874ab5b51ae79ac207a18effc1fa4f GIT binary patch literal 209 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6W_Y?dhG?8mPEcU|WB&U;Bgfed zo~r--879sA@2DVrrpsw6TjSOL^BZ2a|2J=X=}^M@g5hY-)d1r?jRJ?_THb6i+3-;M zq0;LEVoM$8a+jF1SR53saCWs@p!K0m`-4L$!=^`y6L#|*?NTq$KHwz1ukdg00042NklR>zEt)AQwHtvQNDwI{Z6&{mqaCR5@nZ+h_}JS4O+sHM#u6|S8KNR4M4l7kqAhJ$igL#d-cweKni6xD^m00vyq$%HsiiohjJ|Zea zhIR#Jr1X`b?Z6cuuLC?N7sQPRZ6z7vU<_|`^k}bx*`vCv|002ovPDHLkV1fg|t=<3t literal 0 HcmV?d00001 diff --git a/views/index.erb b/views/index.erb index b9e53a39..ce6b892c 100644 --- a/views/index.erb +++ b/views/index.erb @@ -26,7 +26,7 @@ - <%= stylesheet_tag 'application' %> + <%= javascript_tag 'application', asset_host: false %> <%= javascript_tag 'docs' %><% unless App.production? %> <%= javascript_tag 'debug' %><% end %> diff --git a/views/manifest.erb b/views/manifest.erb index c8b474d4..b107bcb9 100644 --- a/views/manifest.erb +++ b/views/manifest.erb @@ -4,6 +4,7 @@ CACHE: / <%= javascript_path 'application', asset_host: false %> <%= stylesheet_path 'application' %> +<%= stylesheet_path 'application-dark' %> <%= image_path 'icons.png' %> <%= image_path 'icons@2x.png' %> <%= image_path 'maxcdn.png' %> diff --git a/views/other.erb b/views/other.erb index 317abb9a..f76bf7b2 100644 --- a/views/other.erb +++ b/views/other.erb @@ -8,7 +8,7 @@ DevDocs<%= ": #{@doc['name']} API Documentation" if doc_index_page? %> - <%= stylesheet_tag 'application' %> + <%= javascript_tag 'application', asset_host: false %><% unless App.production? %> <%= javascript_tag 'debug' %><% end %>