From 0f238609da65df7b7f618c2d2871d759158dff44 Mon Sep 17 00:00:00 2001 From: Thibaut Courouble Date: Mon, 20 Feb 2017 15:50:15 -0500 Subject: [PATCH] UI improvements --- assets/images/icons.png | Bin 2752 -> 2479 bytes assets/images/icons@2x.png | Bin 6319 -> 5723 bytes .../templates/pages/about_tmpl.coffee | 12 +- .../templates/pages/help_tmpl.coffee | 8 +- .../templates/pages/news_tmpl.coffee.erb | 2 +- .../templates/pages/offline_tmpl.coffee | 2 +- .../templates/pages/root_tmpl.coffee.erb | 9 - .../views/content/root_page.coffee | 1 - .../javascripts/views/layout/document.coffee | 48 ++---- assets/javascripts/views/layout/menu.coffee | 24 +++ assets/javascripts/views/layout/mobile.coffee | 35 ++-- assets/javascripts/views/layout/nav.coffee | 26 --- .../javascripts/views/layout/resizer.coffee | 2 +- .../javascripts/views/list/list_focus.coffee | 12 +- assets/javascripts/views/misc/notice.coffee | 1 - assets/javascripts/views/search/search.coffee | 2 +- .../javascripts/views/sidebar/doc_list.coffee | 2 +- .../javascripts/views/sidebar/results.coffee | 4 +- .../javascripts/views/sidebar/sidebar.coffee | 55 +++++-- assets/javascripts/views/view.coffee | 7 + assets/stylesheets/components/_app.scss | 5 +- assets/stylesheets/components/_content.scss | 43 +++-- assets/stylesheets/components/_header.scss | 155 ++++++++++++------ assets/stylesheets/components/_mobile.scss | 122 ++------------ assets/stylesheets/components/_notice.scss | 12 +- assets/stylesheets/components/_sidebar.scss | 2 +- assets/stylesheets/global/_icons.scss | 3 - .../stylesheets/global/_variables-dark.scss | 4 +- assets/stylesheets/global/_variables.scss | 8 +- lib/app.rb | 2 +- public/icons/ui/back/16.png | Bin 157 -> 0 bytes public/icons/ui/back/16@2x.png | Bin 267 -> 0 bytes public/icons/ui/home/16.png | Bin 206 -> 0 bytes public/icons/ui/home/16@2x.png | Bin 343 -> 0 bytes public/icons/ui/home/SOURCE | 1 - public/icons/ui/menu/16.png | Bin 97 -> 0 bytes public/icons/ui/menu/16@2x.png | Bin 123 -> 0 bytes test/app_test.rb | 4 +- views/app.erb | 32 ++-- 39 files changed, 303 insertions(+), 342 deletions(-) create mode 100644 assets/javascripts/views/layout/menu.coffee delete mode 100644 assets/javascripts/views/layout/nav.coffee delete mode 100644 public/icons/ui/back/16.png delete mode 100644 public/icons/ui/back/16@2x.png delete mode 100644 public/icons/ui/home/16.png delete mode 100644 public/icons/ui/home/16@2x.png delete mode 100644 public/icons/ui/home/SOURCE delete mode 100644 public/icons/ui/menu/16.png delete mode 100644 public/icons/ui/menu/16@2x.png diff --git a/assets/images/icons.png b/assets/images/icons.png index dcd73c9f2366390af08267593f6b38b0ee57973a..c2cb28aadb8c6eef7a5d30e6b748fcea62c491f0 100644 GIT binary patch delta 2470 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 """ -

API Documentation Browser

+

DevDocs: API Documentation Browser

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

  • Created and maintained by Thibaut Courouble @@ -26,7 +26,7 @@ app.templates.aboutPage = -> """

    If you like DevDocs, please consider supporting my work on Gratipay. Thanks!
    -

    Credits

    +

    Credits

    Special thanks to:

      @@ -45,7 +45,7 @@ app.templates.aboutPage = -> """ #{("#{c[0]}© #{c[1]}#{c[2]}" for c in credits).join('')} -

      Questions & Answers

      +

      Questions & Answers

      Where can I suggest new docs and features?
      You can suggest and vote for new docs on the Trello board.
      @@ -56,7 +56,7 @@ app.templates.aboutPage = -> """

      For anything else, feel free to email me at thibaut@devdocs.io. -

      +

      Copyright 2013–2017 Thibaut Courouble and other contributors
      This software is licensed under the terms of the Mozilla Public License v2.0.
      @@ -64,7 +64,7 @@ app.templates.aboutPage = -> """ For more information, see the COPYRIGHT and LICENSE files. -

      Plugins and Extensions

      +

      Plugins and Extensions

      -

      Privacy Policy

      +

      Privacy Policy

      • devdocs.io ("App") is operated by Thibaut Courouble ("We").
      • We do not collect personal information. diff --git a/assets/javascripts/templates/pages/help_tmpl.coffee b/assets/javascripts/templates/pages/help_tmpl.coffee index 3cb6ae82..afee16ea 100644 --- a/assets/javascripts/templates/pages/help_tmpl.coffee +++ b/assets/javascripts/templates/pages/help_tmpl.coffee @@ -11,7 +11,9 @@ app.templates.helpPage = """
      - +

      Help

      + +

      The search is case-insensitive and supports fuzzy matching (for queries longer than two characters). For example, searching bgcp brings up background-clip.
      @@ -42,7 +44,7 @@ app.templates.helpPage = """ these instructions. -

      Keyboard Shortcuts

      +

      Keyboard Shortcuts

      Selection

      @@ -110,7 +112,7 @@ app.templates.helpPage = """ Tip: If the cursor is no longer in the search field, press / or continue to type and it will refocus the search field and start showing new results. -

      Abbreviations

      +

      Abbreviations

      Feel free to suggest new abbreviations on GitHub. diff --git a/assets/javascripts/templates/pages/news_tmpl.coffee.erb b/assets/javascripts/templates/pages/news_tmpl.coffee.erb index 32f0e8b9..f4045bd7 100644 --- a/assets/javascripts/templates/pages/news_tmpl.coffee.erb +++ b/assets/javascripts/templates/pages/news_tmpl.coffee.erb @@ -15,7 +15,7 @@ app.templates.newsList = (news, options = {}) -> date = new Date(value[0]) if options.years isnt false and year isnt date.getUTCFullYear() year = date.getUTCFullYear() - result += "

      #{year}

      " + result += """

      #{year}

      """ result += newsItem(date, value[1..]) result diff --git a/assets/javascripts/templates/pages/offline_tmpl.coffee b/assets/javascripts/templates/pages/offline_tmpl.coffee index c65cc1dc..b6ba31c1 100644 --- a/assets/javascripts/templates/pages/offline_tmpl.coffee +++ b/assets/javascripts/templates/pages/offline_tmpl.coffee @@ -21,7 +21,7 @@ app.templates.offlinePage = (docs) -> """ #{docs}

      Note: your browser may delete DevDocs's offline data if your computer is running low on disk space and you haven't used the app in a while. Load this page before going offline to make sure the data is still there. -

      Questions & Answers

      +

      Questions & Answers

      How does this work?
      Each page is cached as a key-value pair in IndexedDB (downloaded from a single file).
      diff --git a/assets/javascripts/templates/pages/root_tmpl.coffee.erb b/assets/javascripts/templates/pages/root_tmpl.coffee.erb index c7a768a0..a2420487 100644 --- a/assets/javascripts/templates/pages/root_tmpl.coffee.erb +++ b/assets/javascripts/templates/pages/root_tmpl.coffee.erb @@ -48,15 +48,6 @@ app.templates.intro = """ """ <% end %> -app.templates.mobileNav = """ - -""" - app.templates.mobileIntro = """

      Welcome!

      diff --git a/assets/javascripts/views/content/root_page.coffee b/assets/javascripts/views/content/root_page.coffee index fcb2da43..5ab7c278 100644 --- a/assets/javascripts/views/content/root_page.coffee +++ b/assets/javascripts/views/content/root_page.coffee @@ -9,7 +9,6 @@ class app.views.RootPage extends app.View render: -> @empty() - @append @tmpl('mobileNav') if app.isMobile() if app.isAndroidWebview() @append @tmpl('androidWarning') else diff --git a/assets/javascripts/views/layout/document.coffee b/assets/javascripts/views/layout/document.coffee index 22e69c91..9ec83fd7 100644 --- a/assets/javascripts/views/layout/document.coffee +++ b/assets/javascripts/views/layout/document.coffee @@ -1,6 +1,6 @@ class app.views.Document extends app.View - MAX_WIDTH_CLASS = '_max-width' - HIDE_SIDEBAR_CLASS = '_sidebar-hidden' + MAX_WIDTH_LAYOUT = '_max-width' + SIDEBAR_HIDDEN_LAYOUT = '_sidebar-hidden' @el: document @@ -14,16 +14,12 @@ class app.views.Document extends app.View superRight: 'onForward' init: -> - @addSubview @nav = new app.views.Nav, + @addSubview @menu = new app.views.Menu, @addSubview @sidebar = new app.views.Sidebar @addSubview @resizer = new app.views.Resizer if app.views.Resizer.isSupported() @addSubview @content = new app.views.Content @addSubview @path = new app.views.Path unless app.isSingleDoc() or app.isMobile() - @sidebar.search - .on 'searching', @onSearching - .on 'clear', @onSearchClear - $.on document.body, 'click', @onClick @activate() @@ -39,39 +35,17 @@ class app.views.Document extends app.View return toggleLayout: -> - wantsMaxWidth = !app.el.classList.contains(MAX_WIDTH_CLASS) - app.el.classList[if wantsMaxWidth then 'add' else 'remove'](MAX_WIDTH_CLASS) - app.settings.setLayout(MAX_WIDTH_CLASS, wantsMaxWidth) + wantsMaxWidth = !app.el.classList.contains(MAX_WIDTH_LAYOUT) + app.el.classList[if wantsMaxWidth then 'add' else 'remove'](MAX_WIDTH_LAYOUT) + app.settings.setLayout(MAX_WIDTH_LAYOUT, wantsMaxWidth) app.appCache?.updateInBackground() return - showSidebar: (options = {}) -> - @toggleSidebar(options, true) - return - - hideSidebar: (options = {}) -> - @toggleSidebar(options, false) - return - - toggleSidebar: (options = {}, shouldShow) -> - shouldShow ?= if options.save then !@hasSidebar() else app.el.classList.contains(HIDE_SIDEBAR_CLASS) - app.el.classList[if shouldShow then 'remove' else 'add'](HIDE_SIDEBAR_CLASS) - if options.save - app.settings.setLayout(HIDE_SIDEBAR_CLASS, !shouldShow) - app.appCache?.updateInBackground() - return - - hasSidebar: -> - !app.settings.hasLayout(HIDE_SIDEBAR_CLASS) - - onSearching: => - unless @hasSidebar() - @showSidebar() - return - - onSearchClear: => - unless @hasSidebar() - @hideSidebar() + toggleSidebarLayout: -> + shouldHide = !app.settings.hasLayout(SIDEBAR_HIDDEN_LAYOUT) + app.el.classList[if shouldHide then 'add' else 'remove'](SIDEBAR_HIDDEN_LAYOUT) + app.settings.setLayout(SIDEBAR_HIDDEN_LAYOUT, shouldHide) + app.appCache?.updateInBackground() return setTitle: (title) -> diff --git a/assets/javascripts/views/layout/menu.coffee b/assets/javascripts/views/layout/menu.coffee new file mode 100644 index 00000000..01c954f2 --- /dev/null +++ b/assets/javascripts/views/layout/menu.coffee @@ -0,0 +1,24 @@ +class app.views.Menu extends app.View + @el: '._menu' + @activeClass: 'active' + + @events: + click: 'onClick' + + init: -> + $.on document.body, 'click', @onGlobalClick + return + + onClick: => + prev = @el.previousElementSibling + $.remove @el + $.requestAnimationFrame => $.after(prev, @el) + return + + onGlobalClick: (event) => + return if event.which isnt 1 + if event.target.hasAttribute?('data-toggle-menu') + @toggleClass @constructor.activeClass + else if @hasClass @constructor.activeClass + @removeClass @constructor.activeClass + return diff --git a/assets/javascripts/views/layout/mobile.coffee b/assets/javascripts/views/layout/mobile.coffee index 4fb70bdb..1774e992 100644 --- a/assets/javascripts/views/layout/mobile.coffee +++ b/assets/javascripts/views/layout/mobile.coffee @@ -35,44 +35,48 @@ class app.views.Mobile extends app.View FastClick.attach @body $.on @body, 'click', @onClick - $.on $('._home-btn'), 'click', @onClickHome - $.on $('._menu-btn'), 'click', @onClickMenu $.on $('._search'), 'touchend', @onTapSearch - @back = $('._back-btn') + @toggleSidebar = $('button[data-toggle-sidebar]') + @toggleSidebar.removeAttribute('hidden') + $.on @toggleSidebar, 'click', @onClickToggleSidebar + + @back = $('button[data-back]') + @back.removeAttribute('hidden') $.on @back, 'click', @onClickBack - @forward = $('._forward-btn') + @forward = $('button[data-forward]') + @forward.removeAttribute('hidden') $.on @forward, 'click', @onClickForward app.document.sidebar.search .on 'searching', @showSidebar - .on 'clear', @hideSidebar @activate() return showSidebar: => if @isSidebarShown() - @body.scrollTop = 0 + window.scrollTo 0, 0 return - @contentTop = @body.scrollTop + @contentTop = window.scrollY @content.style.display = 'none' @sidebar.style.display = 'block' if selection = @findByClass app.views.ListSelect.activeClass - $.scrollTo selection, @body, 'center' + scrollContainer = if window.scrollY is @body.scrollTop then @body else document.documentElement + $.scrollTo selection, scrollContainer, 'center' else - @body.scrollTop = @findByClass(app.views.ListFold.activeClass) and @sidebarTop or 0 + window.scrollTo 0, @findByClass(app.views.ListFold.activeClass) and @sidebarTop or 0 return hideSidebar: => return unless @isSidebarShown() - @sidebarTop = @body.scrollTop + @sidebarTop = window.scrollY @sidebar.style.display = 'none' @content.style.display = 'block' - @body.scrollTop = @contentTop or 0 + window.scrollTo 0, @contentTop or 0 return isSidebarShown: -> @@ -89,17 +93,12 @@ class app.views.Mobile extends app.View onClickForward: => history.forward() - onClickHome: => - app.shortcuts.trigger 'escape' - @hideSidebar() - return - - onClickMenu: => + onClickToggleSidebar: => if @isSidebarShown() then @hideSidebar() else @showSidebar() return onTapSearch: => - @body.scrollTop = 0 + window.scrollTo 0, 0 afterRoute: => @hideSidebar() diff --git a/assets/javascripts/views/layout/nav.coffee b/assets/javascripts/views/layout/nav.coffee deleted file mode 100644 index f76523b3..00000000 --- a/assets/javascripts/views/layout/nav.coffee +++ /dev/null @@ -1,26 +0,0 @@ -class app.views.Nav extends app.View - @el: '._nav' - @activeClass: '_nav-current' - - @routes: - after: 'afterRoute' - - select: (href) -> - @deselect() - if @current = @find "a[href='#{href}']" - @current.classList.add @constructor.activeClass - @current.setAttribute 'tabindex', '-1' - return - - deselect: -> - if @current - @current.classList.remove @constructor.activeClass - @current.removeAttribute 'tabindex' - @current = null - return - - afterRoute: (route, context) => - if route in ['page', 'offline'] - @select context.pathname - else - @deselect() diff --git a/assets/javascripts/views/layout/resizer.coffee b/assets/javascripts/views/layout/resizer.coffee index 8399a667..5932f5cd 100644 --- a/assets/javascripts/views/layout/resizer.coffee +++ b/assets/javascripts/views/layout/resizer.coffee @@ -35,7 +35,7 @@ class app.views.Resizer extends app.View return onClick: -> - app.document.toggleSidebar(save: true) + app.document.toggleSidebarLayout() return onDragStart: (event) => diff --git a/assets/javascripts/views/list/list_focus.coffee b/assets/javascripts/views/list/list_focus.coffee index cfa7c827..2ae13b3d 100644 --- a/assets/javascripts/views/list/list_focus.coffee +++ b/assets/javascripts/views/list/list_focus.coffee @@ -14,7 +14,7 @@ class app.views.ListFocus extends app.View constructor: (@el) -> super - @focus = $.framify(@focus, @) + @focusOnNextFrame = $.framify(@focus, @) focus: (el) -> if el and not el.classList.contains @constructor.activeClass @@ -87,22 +87,22 @@ class app.views.ListFocus extends app.View onDown: => if cursor = @getCursor() - @focus @findNext(cursor) + @focusOnNextFrame @findNext(cursor) else - @focus @findByTag('a') + @focusOnNextFrame @findByTag('a') return onUp: => if cursor = @getCursor() - @focus @findPrev(cursor) + @focusOnNextFrame @findPrev(cursor) else - @focus @findLastByTag('a') + @focusOnNextFrame @findLastByTag('a') return onLeft: => cursor = @getCursor() if cursor and not cursor.classList.contains(app.views.ListFold.activeClass) and cursor.parentElement isnt @el - @focus cursor.parentElement.previousSibling + @focusOnNextFrame cursor.parentElement.previousSibling return onEnter: => diff --git a/assets/javascripts/views/misc/notice.coffee b/assets/javascripts/views/misc/notice.coffee index cf05e6cb..aa8c3d09 100644 --- a/assets/javascripts/views/misc/notice.coffee +++ b/assets/javascripts/views/misc/notice.coffee @@ -18,7 +18,6 @@ class app.views.Notice extends app.View return show: -> - @addClass '_top' if @type is 'disabledDoc' @html @tmpl("#{@type}Notice", @args...) @prependTo $('._app') return diff --git a/assets/javascripts/views/search/search.coffee b/assets/javascripts/views/search/search.coffee index 2285c017..dc41c876 100644 --- a/assets/javascripts/views/search/search.coffee +++ b/assets/javascripts/views/search/search.coffee @@ -130,7 +130,7 @@ class app.views.Search extends app.View if event.target is @resetLink $.stopEvent(event) @reset() - @focus() + app.document.onEscape() return onSubmit: (event) -> diff --git a/assets/javascripts/views/sidebar/doc_list.coffee b/assets/javascripts/views/sidebar/doc_list.coffee index 4c716aeb..19820d7f 100644 --- a/assets/javascripts/views/sidebar/doc_list.coffee +++ b/assets/javascripts/views/sidebar/doc_list.coffee @@ -148,7 +148,7 @@ class app.views.DocList extends app.View return scrollTo: (model) -> - $.scrollTo @find("a[href='#{model.fullPath()}']"), null, 'top', margin: 0 + $.scrollTo @find("a[href='#{model.fullPath()}']"), null, 'top', margin: if app.isMobile() then 48 else 0 return toggleDisabled: -> diff --git a/assets/javascripts/views/sidebar/results.coffee b/assets/javascripts/views/sidebar/results.coffee index 544974d1..a0b06f68 100644 --- a/assets/javascripts/views/sidebar/results.coffee +++ b/assets/javascripts/views/sidebar/results.coffee @@ -15,8 +15,8 @@ class app.views.Results extends app.View return init: -> - @addSubview @listSelect = new app.views.ListSelect @el @addSubview @listFocus = new app.views.ListFocus @el unless app.isMobile() + @addSubview @listSelect = new app.views.ListSelect @el @search .on 'results', @onResults @@ -42,7 +42,7 @@ class app.views.Results extends app.View return focusFirst: -> - @listFocus?.focus @el.firstElementChild + @listFocus?.focusOnNextFrame @el.firstElementChild return openFirst: -> diff --git a/assets/javascripts/views/sidebar/sidebar.coffee b/assets/javascripts/views/sidebar/sidebar.coffee index 81792a93..8d67da39 100644 --- a/assets/javascripts/views/sidebar/sidebar.coffee +++ b/assets/javascripts/views/sidebar/sidebar.coffee @@ -3,6 +3,7 @@ class app.views.Sidebar extends app.View @events: focus: 'onFocus' + select: 'onSelect' click: 'onClick' @shortcuts: @@ -14,8 +15,8 @@ class app.views.Sidebar extends app.View @addSubview @search = new app.views.Search @search - .on 'searching', @showResults - .on 'clear', @showDocList + .on 'searching', @onSearching + .on 'clear', @onSearchClear .scope .on 'change', @onScopeChange @@ -27,7 +28,15 @@ class app.views.Sidebar extends app.View $.on document, 'click', @onGlobalClick if @docPicker return - show: (view) -> + display: -> + @el.style.display = 'block' + return + + resetDisplay: -> + @el.style.display = '' unless @el.style.display is 'none' + return + + showView: (view) -> unless @view is view @hover?.hide() @saveScrollPosition() @@ -44,28 +53,29 @@ class app.views.Sidebar extends app.View @append @tmpl('sidebarSettings') if @view is @docList and @docPicker return - showDocList: (reset) => - @show @docList - if reset is true - @docList.reset(revealCurrent: true) - @search.reset() + showDocList: -> + @showView @docList return showDocPicker: => - @show @docPicker + @showView @docPicker return showResults: => - @show @results + @showView @results + return + + reset: -> + @display() + @showDocList() + @docList.reset() + @search.reset() return onReady: => @view = @docList @render() @view.activate() - - reset: -> - @showDocList true return onScopeChange: (newDoc, previousDoc) => @@ -90,15 +100,30 @@ class app.views.Sidebar extends app.View @el.scrollTop = 0 return + onSearching: => + @display() + @showResults() + return + + onSearchClear: => + @resetDisplay() + @showDocList() + return + onFocus: (event) => + @display() $.scrollTo event.target, @el, 'continuous', bottomGap: 2 unless event.target is @el return + onSelect: => + @resetDisplay() + return + onClick: (event) => return if event.which isnt 1 if event.target.hasAttribute? 'data-reset-list' $.stopEvent(event) - @reset() + @onAltR() else if event.target.hasAttribute? 'data-light' $.stopEvent(event) document.activeElement?.blur() @@ -120,6 +145,8 @@ class app.views.Sidebar extends app.View onAltR: => @reset() + @docList.reset(revealCurrent: true) + @display() return onEscape: => diff --git a/assets/javascripts/views/view.coffee b/assets/javascripts/views/view.coffee index 1a8fe835..59000f49 100644 --- a/assets/javascripts/views/view.coffee +++ b/assets/javascripts/views/view.coffee @@ -35,6 +35,13 @@ class app.View @el.classList.remove(name) return + toggleClass: (name) -> + @el.classList.toggle(name) + return + + hasClass: (name) -> + @el.classList.contains(name) + resetClass: -> @el.className = @originalClassName or '' if @constructor.className diff --git a/assets/stylesheets/components/_app.scss b/assets/stylesheets/components/_app.scss index 2d8a8380..1d3165a7 100644 --- a/assets/stylesheets/components/_app.scss +++ b/assets/stylesheets/components/_app.scss @@ -2,7 +2,6 @@ position: relative; z-index: 1; height: 100%; - padding-top: $headerHeight; overflow: hidden; background: $contentBackground; -webkit-transition: opacity .2s; @@ -12,7 +11,7 @@ ._booting > & { opacity: 0; } ._noscript > & { display: none; } - &._max-width { + &._max-width { margin: 0 auto; max-width: $maxWidth; box-shadow: 1px 0 $headerBorder, -1px 0 $headerBorder; @@ -31,7 +30,7 @@ left: 0; right: 0; line-height: 1; - margin-top: -.75em; + margin-top: -.6em; font-size: 4rem; font-weight: 300; letter-spacing: -.125rem; diff --git a/assets/stylesheets/components/_content.scss b/assets/stylesheets/components/_content.scss index f8dea0b7..3e0031c7 100644 --- a/assets/stylesheets/components/_content.scss +++ b/assets/stylesheets/components/_content.scss @@ -20,18 +20,24 @@ height: 100%; overflow-y: scroll; margin-left: .875rem; - padding: 1.25rem 1.5rem 0; + padding: 1.125rem 1.5rem 0; font-size: .875rem; pointer-events: auto; -webkit-overflow-scrolling: touch; @extend %border-box; - -webkit-padding-start: .75rem; - -webkit-padding-end: 1rem; + -webkit-padding-start: .625rem; + -webkit-padding-end: .75rem; - @media (-moz-overlay-scrollbars) { padding-left: .75rem; } + @media (-moz-overlay-scrollbars) { padding-left: .625rem; } @media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) { margin-left: 0; } + ._sidebar-hidden &:before { + content: ''; + display: block; + margin-top: $headerHeight; + } + &:after { // padding bottom content: ''; display: block; @@ -77,15 +83,22 @@ // Intro // -._intro { text-align: center; } +._intro { + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; + min-height: calc(100vh - 2.375rem); + + ._sidebar-hidden & { + min-height: calc(100vh - 2.375rem - #{$headerHeight}); + } +} ._intro-message { - position: relative; - display: inline-block; - vertical-align: top; max-width: 37rem; + margin: .5rem 0; padding: 1rem 1.25rem; - text-align: left; @extend %note, %note-green; } @@ -146,23 +159,25 @@ ._lined-heading, %lined-heading { - white-space: nowrap; - overflow: hidden; - word-wrap: normal; - overflow-wrap: normal; + display: flex; + justify-content: center; + align-items: center; &:after { content: ''; display: inline-block; vertical-align: middle; - width: 100%; + flex-grow: 1; height: 1px; line-height: 0; + margin-top: .25rem; margin-left: 1rem; background: $boxBorderLight; } } +._block-heading { @extend %block-heading; } + ._heading-links { float: right; font-weight: normal; diff --git a/assets/stylesheets/components/_header.scss b/assets/stylesheets/components/_header.scss index dd7a4fb1..fe60e315 100644 --- a/assets/stylesheets/components/_header.scss +++ b/assets/stylesheets/components/_header.scss @@ -7,79 +7,131 @@ z-index: $headerZ; top: 0; left: 0; - right: 0; + display: flex; + width: $sidebarWidth; height: $headerHeight; - line-height: $headerHeight; background: $headerBackground; border-bottom: 1px solid $headerBorder; @extend %user-select-none; + + @media #{$mediumScreen} { width: $sidebarMediumWidth; } } -// -// Navigation menu -// +._header-left { + float: left; + height: 100%; +} -._nav { +._header-right { float: right; - margin-right: .5rem; - font-size: .875rem; - color: $textColor; + height: 100%; } -._nav-link, -._nav-link:hover { +._header-btn { position: relative; - float: left; - padding: 0 1.25rem; - color: inherit; - text-decoration: none; + width: 2.25rem; + height: 100%; + color: $textColorLight; + text-align: center; - @media #{$mediumScreen} { padding: 0 .75rem; } -} + &[hidden] { display: none; } -._nav-link { - &:before, &:after { - position: absolute; - left: 50%; - bottom: 0; - width: 0; - height: 0; - margin-left: -.375rem; - border: .375rem solid transparent; - border-bottom-color: darken($headerBorder, 2%); + &[disabled] { + opacity: .3; + cursor: not-allowed; } - &:after { - bottom: -1px; - border-bottom-color: $contentBackground; + > svg { + display: inline-block; + vertical-align: top; + width: 1.5rem; + height: 1.5rem; + fill: currentColor; + pointer-events: none; } } -._nav-current { - outline: 0; +// +// Menu +// - &:before, &:after { content: ''; } +._menu-btn { + border-right: 1px solid $headerBorder; } -// -// Logo -// +._menu { + position: absolute; + z-index: 1; + top: .25rem; + right: .25rem; + width: 8rem; + height: calc(11.5rem + 1px); + font-size: .875rem; + background: $contentBackground; + border: 1px solid $headerBorder; + border-radius: 3px; + box-shadow: -1px 1px 1px rgba(black, .05); + transition: all 250ms cubic-bezier(0.23, 1, 0.32, 1); + opacity: 0; + -webkit-transform: scale(0, 0); + transform: scale(0, 0); + -webkit-transform-origin: 100% 0; + transform-origin: 100% 0; + + &:hover, + ._menu-btn:hover + & { + transition-delay: 100ms; + } -._logo { - position: relative; - float: left; - height: $headerHeight; + &:hover, + &.active, + ._menu-btn:hover + &, + ._menu-btn:focus + & { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } + + &:focus-within { + opacity: 1; + -webkit-transform: scale(1, 1); + transform: scale(1, 1); + } +} + +._menu-title { margin: 0; - line-height: inherit; - font-size: inherit; + line-height: 1.5rem; + font-size: 1rem; font-weight: $boldFontWeight; - cursor: default; + letter-spacing: -.5px; + background: $sidebarBackground; + border-bottom: 1px solid $sidebarBorder; + border-radius: 2px 2px 0 0; +} + +._menu-title-link, +._menu-title-link:hover { + display: block; + padding: .5rem 1rem; + color: $focusText; + text-decoration: none; +} - > ._nav-link { - float: none; - margin-left: .75rem; - padding: 0 .25rem; +._menu-link { + display: block; + padding: 0 1rem; + line-height: 2.25rem; + color: inherit; + text-decoration: none; + + &:hover { + color: $focusText; + text-decoration: none; + background: $sidebarBackground; } + + &:last-child { border-radius: 0 0 2px 2px; } } // @@ -87,20 +139,19 @@ // ._search { + flex-grow: 1; position: relative; - float: left; - width: $sidebarWidth; height: 100%; padding: .5rem 0 .5rem .5rem; @extend %border-box; - @media #{$mediumScreen} { width: $sidebarMediumWidth; } - &:before { position: absolute; + z-index: 1; top: 1rem; left: 1rem; opacity: .4; + pointer-events: none; @if $style == 'dark' { @extend %icon, %icon-search-white; } @else { @@ -110,6 +161,7 @@ } ._search-input { + position: relative; display: block; width: 100%; height: 100%; @@ -164,6 +216,7 @@ ._search-tag { display: none; position: absolute; + z-index: 2; top: .875rem; left: .875rem; padding: 0 .5rem; diff --git a/assets/stylesheets/components/_mobile.scss b/assets/stylesheets/components/_mobile.scss index d6f3b3e9..5ca8463e 100644 --- a/assets/stylesheets/components/_mobile.scss +++ b/assets/stylesheets/components/_mobile.scss @@ -10,18 +10,17 @@ body { -ms-overflow-style: -ms-autohiding-scrollbar; } - ._app, ._container, ._content { overflow: visible; } - - ._container { - margin: 0; - border: 0; - } + ._app, ._content { overflow: visible; } + ._app { padding-top: $headerHeight; } + ._container { margin: 0; } ._content { position: static; height: auto; margin: 0; padding: .75rem 1rem 2.5rem; + + &:before { content: none; } } ._booting:before, ._content-loading:before { font-size: 3rem; } @@ -33,16 +32,13 @@ max-width: 100vw; } - ._logo, ._nav { display: none; } - ._mobile-btn { display: block; } + ._header-btn { width: 2.5rem; } + ._header-btn[hidden] { display: block; } + ._menu-btn { border-right: 0; } ._search { - float: none; - width: auto; - overflow: hidden; - padding-left: 2px; - padding-right: 2px; - border-right: 0; + padding-right: .125rem; + padding-left: .125rem; &:before { left: .5rem; } } @@ -57,7 +53,7 @@ overflow: visible; } - ._list, ._sidebar-footer { width: 100%; } + ._header, ._list, ._sidebar-footer { width: 100%; } ._list-item { white-space: normal; @@ -85,33 +81,12 @@ box-shadow: 0 1px $noteGreenBorder, 0 -1px $noteGreenBorder; } - // Splash - - ._splash-sponsors { margin-top: 1rem; } - - ._splash-sponsor { - position: static; - - ._logo-info { - left: 1rem; - right: 1rem; - width: auto; - max-width: none; - margin: 0; - } - } - // Notice ._notice { position: fixed; left: 0; padding: 0 .5rem; - - ~ ._sidebar { - margin-top: 2.5rem; - padding-bottom: 4rem; - } } ._notice-text { font-size: .75em; } @@ -143,76 +118,10 @@ // Header buttons // -._mobile-btn { - display: none; - position: relative; - float: left; - width: 2.5rem; - height: 100%; - @extend %hide-text; - - &[disabled] { - opacity: .3; - cursor: not-allowed; - } - - &:before { - position: absolute; - top: 50%; - left: 50%; - margin: -.5rem 0 0 -.5rem; - @extend %icon; - } -} - -._back-btn { - &:before { @extend %icon-back; } -} - ._forward-btn { - width: 2.25rem; - -webkit-transform: rotate(180deg); - transform: rotate(180deg); - - &:before { - margin-left: -.375rem; - @extend %icon-back; - } -} - -._home-btn { - float: right; - width: 2rem; - - &:before { - margin-left: -.375rem; - @extend %icon-home; - } -} + margin-right: -.5rem; -._menu-btn { - float: right; - - &:before { @extend %icon-menu; } -} - -// -// Navigation menu -// - -._mobile-nav { - margin: .25rem 0 1.25rem; - padding: 0; - line-height: 2.8; - overflow: hidden; - @extend %box; -} - -._mobile-nav-link { - float: left; - width: 25%; - text-align: center; - font-weight: $boldFontWeight; + > svg { margin-left: -.375rem; } } // @@ -222,14 +131,11 @@ ._mobile-intro { > ._intro-list { padding-left: 1.5rem; } - > ._intro-hide, - > ._intro-sponsors { + ._intro-hide { position: static; float: none; display: block; margin-top: .75rem; text-align: center; } - - ._intro-sponsor { margin: .5em .75em; } } diff --git a/assets/stylesheets/components/_notice.scss b/assets/stylesheets/components/_notice.scss index 56991951..993ec3d6 100644 --- a/assets/stylesheets/components/_notice.scss +++ b/assets/stylesheets/components/_notice.scss @@ -12,17 +12,7 @@ @media #{$mediumScreen} { left: $sidebarMediumWidth; } ._sidebar-hidden & { left: $sidebarHiddenWidth; } - - &:not(._top) ~ ._container { padding-bottom: 2.5rem; } - - &._top { - bottom: auto; - top: $headerHeight; - margin-top: 1px; - box-shadow: inset 0 -1px $noticeBorder; - - ~ ._container { padding-top: 2.5rem; } - } + ~ ._container { padding-bottom: 2.5rem; } } ._notice-text { diff --git a/assets/stylesheets/components/_sidebar.scss b/assets/stylesheets/components/_sidebar.scss index 8301a8f4..c330e61c 100644 --- a/assets/stylesheets/components/_sidebar.scss +++ b/assets/stylesheets/components/_sidebar.scss @@ -40,7 +40,7 @@ ._resizer { position: absolute; - z-index: $sidebarZ + 1; + z-index: $sidebarZ; top: $headerHeight; bottom: 0; left: $sidebarWidth; diff --git a/assets/stylesheets/global/_icons.scss b/assets/stylesheets/global/_icons.scss index 6e807c1e..9bf033a3 100644 --- a/assets/stylesheets/global/_icons.scss +++ b/assets/stylesheets/global/_icons.scss @@ -37,8 +37,6 @@ %icon-clear { background-position: -3rem 0; } %icon-settings { background-position: 0 -1rem; } %icon-check { background-position: -1rem -1rem; } -%icon-menu { background-position: -2rem -1rem; @extend %darkIconFix !optional; } -%icon-home { background-position: -3rem -1rem; @extend %darkIconFix !optional; } %icon-path { background-position: 0 -2rem; } %icon-search-white { background-position: -1rem -2rem; } %icon-dir-white { background-position: -2rem -2rem; } @@ -54,7 +52,6 @@ %icon-clipboard { background-position: 0 -5rem; } %icon-clipboard-white { background-position: -1rem -5rem; } %icon-close-white { background-position: -2rem -5rem; } -%icon-back { background-position: -3rem -5rem; @extend %darkIconFix !optional; } ._icon-codeceptjs:before { background-position: -3rem 0; } ._icon-codeception:before { background-position: -4rem 0; } diff --git a/assets/stylesheets/global/_variables-dark.scss b/assets/stylesheets/global/_variables-dark.scss index c9bc91a4..9b4ee78f 100644 --- a/assets/stylesheets/global/_variables-dark.scss +++ b/assets/stylesheets/global/_variables-dark.scss @@ -7,7 +7,7 @@ $style: 'dark'; $maxWidth: 80rem; $headerHeight: 3rem; -$sidebarWidth: 18rem; +$sidebarWidth: 20rem; $sidebarMediumWidth: 16rem; $sidebarHiddenWidth: 9px; @@ -37,7 +37,7 @@ $linkColor: $textColor; $linkColorHover: white; $linkTextDecoration: underline; -$headerBackground: #1e1e1e; +$headerBackground: #1c1c1c; $headerBorder: #000; $sidebarBackground: #24282a; diff --git a/assets/stylesheets/global/_variables.scss b/assets/stylesheets/global/_variables.scss index 67c8d738..68d4358b 100644 --- a/assets/stylesheets/global/_variables.scss +++ b/assets/stylesheets/global/_variables.scss @@ -7,7 +7,7 @@ $style: 'light'; $maxWidth: 80rem; $headerHeight: 3rem; -$sidebarWidth: 18rem; +$sidebarWidth: 20rem; $sidebarMediumWidth: 16rem; $sidebarHiddenWidth: 9px; @@ -37,11 +37,11 @@ $linkColor: #3377c0; $linkColorHover: #2f6cb6; $linkTextDecoration: none; -$headerBackground: #f0f0f0; -$headerBorder: #d9d9d9; +$headerBackground: #eee; +$headerBorder: #d7d7d7; $sidebarBackground: #f9f9f9; -$sidebarBorder: #e3e3e3; +$sidebarBorder: #e1e1e1; $scrollbarColor: #d2d2d2; $scrollbarColorHover: #aaa; diff --git a/lib/app.rb b/lib/app.rb index eb7d371d..bb19a046 100644 --- a/lib/app.rb +++ b/lib/app.rb @@ -184,7 +184,7 @@ class App < Sinatra::Application end def app_size - @app_size ||= cookies[:size].nil? ? '18rem' : "#{cookies[:size]}px" + @app_size ||= cookies[:size].nil? ? '20rem' : "#{cookies[:size]}px" end def app_layout diff --git a/public/icons/ui/back/16.png b/public/icons/ui/back/16.png deleted file mode 100644 index 5f86f40cbd7df8a4c870bdf659dcbd2bb98722c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 157 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6QaoK8Ln;`P7wCC-cxdD%9MYUS zW5y5lkFG-cd@q+gIbzRwU&y(@b2(#ay(hk4Umpok@Ln;`PC5|b$8D)kZT9RRB zv~{_LTAbIP`9JIvE188QZwZSC=`(L_esEjE(P)cv4*TweYG&@vTa%v(>mAynKCgSS za$xnGm`AKTzI}d@Vb6cPt}*3p=cdl*59;>M(DBbYa#Cep>+L#C$HtK3-s*E4f7rUV z0TnENcx%4ePLF+T`J@u5a@Y9BlM-UL2(2ps P`i{ZV)z4*}Q$iB}D_Lk{ diff --git a/public/icons/ui/home/16.png b/public/icons/ui/home/16.png deleted file mode 100644 index 2dc8382a94df3754f21c4f0597dc444a40b67d40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 206 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6rh2+KhG?8mPHM^`Q|vlD*AHskQ4 z#cLO@O%_h5Ss^XJwTQ>zjz%+MzyX2p60@6r@besDU|@Q?*Yb?s=1QOg89ZJ6T-G@y GGywowSWn{s diff --git a/public/icons/ui/home/16@2x.png b/public/icons/ui/home/16@2x.png deleted file mode 100644 index e8b7fcecfb01df1137f48759cddf724d406dc65d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 343 zcmV-d0jU0oP)kdg0003VNkl*&;B1XH0HCFAKh&RkC4%WrG;9yo`@K%NP9``2gTNT~a%h>sxcd;|e z8XP6s208Cyi;^O57HJdaoY*vr3cORm@*U@cEIWlSypgBHC(gTAH1ZML$k8l{b7E%X zK5&_(={L@asm#9N^$Z*p&UfL|Ghv^`Se0{PEYd-q#6X90Vjz-_hhytIUe{002ovPDHLkV1jJ)oqYfR diff --git a/public/icons/ui/home/SOURCE b/public/icons/ui/home/SOURCE deleted file mode 100644 index ffa79609..00000000 --- a/public/icons/ui/home/SOURCE +++ /dev/null @@ -1 +0,0 @@ -http://www.entypo.com/ diff --git a/public/icons/ui/menu/16.png b/public/icons/ui/menu/16.png deleted file mode 100644 index d2d341d5c9434ba4092fc7aadac1c8bb608e8fad..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!60wlNoGJgf6G(24#Lp07OcjWf}p8P@Hy63m> v?Q;VEnWmd?9NV9ukijH-V1@pQC)^C2y!#$n$)~>r>S6G7^>bP0l+XkK@Mazh diff --git a/public/icons/ui/menu/16@2x.png b/public/icons/ui/menu/16@2x.png deleted file mode 100644 index 4aef06fd54ebbeb64ecec92b29a265897af0ddf5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 123 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE0wix1Z>k4UPM$7~As)w*Ii7Y#3;fr7X#djS zU+|r#0J*l7l}|F-4zJ|-sIOtD@Q?K=TfiIEF6KfJ9yWtn;%=W0X-J&qUR=q@$8g8( W-|EFP80P{_WAJqKb6Mw<&;$UqZzy^I diff --git a/test/app_test.rb b/test/app_test.rb index 68e8f9d3..5ead42e2 100644 --- a/test/app_test.rb +++ b/test/app_test.rb @@ -31,7 +31,7 @@ class AppTest < MiniTest::Spec it "sets default size" do get '/' - assert_includes last_response.body, 'data-size="18rem"' + assert_includes last_response.body, 'data-size="20rem"' end it "sets size from cookie" do @@ -115,7 +115,7 @@ class AppTest < MiniTest::Spec it "sets default size" do get '/manifest.appcache' - assert_includes last_response.body, '18rem' + assert_includes last_response.body, '20rem' end it "sets size from cookie" do diff --git a/views/app.erb b/views/app.erb index ea98de63..e11411cb 100644 --- a/views/app.erb +++ b/views/app.erb @@ -1,22 +1,28 @@
      " role="application">
      @@ -34,7 +40,7 @@