diff --git a/assets/javascripts/templates/sidebar_tmpl.coffee b/assets/javascripts/templates/sidebar_tmpl.coffee
index 0b2390c4..885af928 100644
--- a/assets/javascripts/templates/sidebar_tmpl.coffee
+++ b/assets/javascripts/templates/sidebar_tmpl.coffee
@@ -35,14 +35,19 @@ templates.sidebarPageLink = (count) ->
"""Show more\u2026 (#{count})"""
templates.sidebarLabel = (doc, options = {}) ->
- label = """"
+templates.sidebarVersionedDoc = (doc, versions, options = {}) ->
+ html = """
#{doc.name}
#{versions}
"""
+
templates.sidebarDisabledList = (options) ->
"""#{templates.render 'sidebarDoc', options.docs, disabled: true}
"""
diff --git a/assets/javascripts/views/list/list_fold.coffee b/assets/javascripts/views/list/list_fold.coffee
index 1ba4ac27..b5476212 100644
--- a/assets/javascripts/views/list/list_fold.coffee
+++ b/assets/javascripts/views/list/list_fold.coffee
@@ -10,7 +10,7 @@ class app.views.ListFold extends app.View
left: 'onLeft'
right: 'onRight'
- constructor: (@el) -> super
+ constructor: (@el, @options = {}) -> super
open: (el) ->
if el and not el.classList.contains @constructor.activeClass
@@ -60,5 +60,5 @@ class app.views.ListFold extends app.View
$.stopEvent(event)
@toggle el.parentElement
else if el.classList.contains @constructor.targetClass
- @open el
+ if @options.toggleOnclick then @toggle(el) else @open(el)
return
diff --git a/assets/javascripts/views/sidebar/doc_picker.coffee b/assets/javascripts/views/sidebar/doc_picker.coffee
index 29af650f..2bcd0cad 100644
--- a/assets/javascripts/views/sidebar/doc_picker.coffee
+++ b/assets/javascripts/views/sidebar/doc_picker.coffee
@@ -1,5 +1,5 @@
class app.views.DocPicker extends app.View
- @className: '_list'
+ @className: '_list _list-picker'
@elements:
saveLink: '._sidebar-footer-save'
@@ -10,6 +10,10 @@ class app.views.DocPicker extends app.View
@shortcuts:
enter: 'onEnter'
+ init: ->
+ @addSubview @listFold = new app.views.ListFold(@el, toggleOnclick: true)
+ return
+
activate: ->
if super
@render()
@@ -26,11 +30,17 @@ class app.views.DocPicker extends app.View
return
render: ->
- @html @tmpl('sidebarLabel', app.docs.all(), checked: true) +
- @tmpl('sidebarLabel', app.disabledDocs.all()) +
- @tmpl('sidebarPickerNote') +
- @tmpl('sidebarSave')
+ html = ''
+ docs = app.docs.all().concat(app.disabledDocs.all()...)
+
+ while doc = docs.shift()
+ if doc.version
+ [docs, versions] = @extractVersions(docs, doc)
+ html += @tmpl('sidebarVersionedDoc', doc, @renderVersions(versions), open: app.docs.contains(doc))
+ else
+ html += @tmpl('sidebarLabel', doc, checked: app.docs.contains(doc))
+ @html html + @tmpl('sidebarPickerNote') + @tmpl('sidebarSave')
@refreshElements()
@delay -> # trigger animation
@@ -38,6 +48,18 @@ class app.views.DocPicker extends app.View
@addClass '_in'
return
+ renderVersions: (docs) ->
+ html = ''
+ html += @tmpl('sidebarLabel', doc, checked: app.docs.contains(doc)) for doc in docs
+ html
+
+ extractVersions: (originalDocs, version) ->
+ docs = []
+ versions = [version]
+ for doc in originalDocs
+ (if doc.name is version.name then versions else docs).push(doc)
+ [docs, versions]
+
empty: ->
@resetClass()
super
diff --git a/assets/stylesheets/components/_sidebar.scss b/assets/stylesheets/components/_sidebar.scss
index 14aebb40..cd8d820f 100644
--- a/assets/stylesheets/components/_sidebar.scss
+++ b/assets/stylesheets/components/_sidebar.scss
@@ -150,7 +150,7 @@
// List hierarchy
//
-._list-dir,
+._list-dir:not(._list-rdir),
%_list-dir {
padding-left: 2.25rem;
}
@@ -172,6 +172,11 @@
&:hover { opacity: .65; }
+ ._list-rdir > & {
+ left: auto;
+ right: .25rem;
+ }
+
&:before {
@if $style == 'dark' {
@extend %icon, %icon-dir-white;
@@ -187,7 +192,11 @@
}
._list-sub {
- > ._list-item { padding-left: 2.75rem; }
+ display: none;
+
+ .open + & { display: block; }
+ > ._list-item { padding-left: 2.375rem; }
+ > ._list-dir, > ._list-sub > ._list-item { padding-left: 2.75rem; }
> ._list-item:before { content: none; }
> ._list-dir { line-height: 1.375rem; }
@@ -288,32 +297,24 @@
// List picker
//
+._list-picker {
+ opacity: 0;
+ transition: .2s;
+
+ &._in { opacity: 1; }
+ ._list-item { cursor: pointer; }
+ ._list-sub > ._list-item { padding-left: 2.375rem; }
+}
+
._list-checkbox {
position: absolute;
top: .5rem;
- right: -1rem;
+ right: .75rem;
width: 1rem;
height: 1rem;
transition: .2s;
}
-._list-label {
- cursor: pointer;
- transition: .2s;
- @extend %_list-dir;
-
- ._in > & { padding-left: .75rem; }
- ._in > & > ._list-checkbox { right: .5rem }
-}
-
-._list-label-off {
- opacity: 0;
- padding-left: .75rem;
-
- ._in > & { opacity: 1; }
- > ._list-checkbox { right: .5rem; }
-}
-
._list-link {
display: block;
margin-top: .75rem;