History

Improve doc picker for versioned docs

Ref #25.

Thibaut Courouble committed 10 years ago

Commit 26858601 parent 6ed39944 files · +59 −31Browse files

Unified · Split

4 files
  1. assets/javascripts/templates/sidebar_tmpl.coffee +9 −4
  2. assets/javascripts/views/list/list_fold.coffee +2 −2
  3. assets/javascripts/views/sidebar/doc_picker.coffee +27 −5
  4. assets/stylesheets/components/_sidebar.scss +21 −20
assets/javascripts/templates/sidebar_tmpl.coffee+9−4
@@ -35,14 +35,19 @@ templates.sidebarPageLink = (count) -> · 34 unmodified lines
3535 """<span class="_list-item _list-pagelink">Show more\u2026 (#{count})</span>"""
3636
3737 templates.sidebarLabel = (doc, options = {}) ->
38− label = """<label class="_list-item _list-label _icon-#{doc.icon}"""
39− label += ' _list-label-off' unless options.checked
38+ label = """<label class="_list-item"""
39+ label += " _icon-#{doc.icon}" unless doc.version
4040 label += """"><input type="checkbox" name="#{doc.slug}" class="_list-checkbox" """
41− label += 'checked' if options.checked
41+ label += "checked" if options.checked
4242 label += ">#{doc.name}"
43− label += " (#{doc.version})" if doc.version
43+ label += " #{doc.version}" if doc.version
4444 label + "</label>"
4545
46+templates.sidebarVersionedDoc = (doc, versions, options = {}) ->
47+ html = """<div class="_list-item _list-dir _list-rdir _icon-#{doc.icon}"""
48+ html += " open" if options.open
49+ html + """"><span class="_list-arrow"></span>#{doc.name}</div><div class="_list _list-sub">#{versions}</div>"""
50+
4651 templates.sidebarDisabledList = (options) ->
4752 """<div class="_disabled-list">#{templates.render 'sidebarDoc', options.docs, disabled: true}</div>"""
4853
assets/javascripts/views/list/list_fold.coffee+2−2
@@ -10,7 +10,7 @@ class app.views.ListFold extends app.View · 9 unmodified lines
1010 left: 'onLeft'
1111 right: 'onRight'
1212
13− constructor: (@el) -> super
13+ constructor: (@el, @options = {}) -> super
1414
1515 open: (el) ->
1616 if el and not el.classList.contains @constructor.activeClass
@@ -60,5 +60,5 @@ class app.views.ListFold extends app.View · 43 unmodified lines
6060 $.stopEvent(event)
6161 @toggle el.parentElement
6262 else if el.classList.contains @constructor.targetClass
63− @open el
63+ if @options.toggleOnclick then @toggle(el) else @open(el)
6464 return
assets/javascripts/views/sidebar/doc_picker.coffee+27−5
@@ -1,5 +1,5 @@
11 class app.views.DocPicker extends app.View
2− @className: '_list'
2+ @className: '_list _list-picker'
33
44 @elements:
55 saveLink: '._sidebar-footer-save'
@@ -10,6 +10,10 @@ class app.views.DocPicker extends app.View · 4 unmodified lines
1010 @shortcuts:
1111 enter: 'onEnter'
1212
13+ init: ->
14+ @addSubview @listFold = new app.views.ListFold(@el, toggleOnclick: true)
15+ return
16+
1317 activate: ->
1418 if super
1519 @render()
@@ -26,11 +30,17 @@ class app.views.DocPicker extends app.View · 10 unmodified lines
2630 return
2731
2832 render: ->
29− @html @tmpl('sidebarLabel', app.docs.all(), checked: true) +
30− @tmpl('sidebarLabel', app.disabledDocs.all()) +
31− @tmpl('sidebarPickerNote') +
32− @tmpl('sidebarSave')
33+ html = ''
34+ docs = app.docs.all().concat(app.disabledDocs.all()...)
35+
36+ while doc = docs.shift()
37+ if doc.version
38+ [docs, versions] = @extractVersions(docs, doc)
39+ html += @tmpl('sidebarVersionedDoc', doc, @renderVersions(versions), open: app.docs.contains(doc))
40+ else
41+ html += @tmpl('sidebarLabel', doc, checked: app.docs.contains(doc))
3342
43+ @html html + @tmpl('sidebarPickerNote') + @tmpl('sidebarSave')
3444 @refreshElements()
3545
3646 @delay -> # trigger animation
@@ -38,6 +48,18 @@ class app.views.DocPicker extends app.View · 1 unmodified line
3848 @addClass '_in'
3949 return
4050
51+ renderVersions: (docs) ->
52+ html = ''
53+ html += @tmpl('sidebarLabel', doc, checked: app.docs.contains(doc)) for doc in docs
54+ html
55+
56+ extractVersions: (originalDocs, version) ->
57+ docs = []
58+ versions = [version]
59+ for doc in originalDocs
60+ (if doc.name is version.name then versions else docs).push(doc)
61+ [docs, versions]
62+
4163 empty: ->
4264 @resetClass()
4365 super
assets/stylesheets/components/_sidebar.scss+21−20
@@ -150,7 +150,7 @@ · 149 unmodified lines
150150 // List hierarchy
151151 //
152152
153−._list-dir,
153+._list-dir:not(._list-rdir),
154154 %_list-dir {
155155 padding-left: 2.25rem;
156156 }
@@ -172,6 +172,11 @@ · 15 unmodified lines
172172
173173 &:hover { opacity: .65; }
174174
175+ ._list-rdir > & {
176+ left: auto;
177+ right: .25rem;
178+ }
179+
175180 &:before {
176181 @if $style == 'dark' {
177182 @extend %icon, %icon-dir-white;
@@ -187,7 +192,11 @@ · 9 unmodified lines
187192 }
188193
189194 ._list-sub {
190− > ._list-item { padding-left: 2.75rem; }
195+ display: none;
196+
197+ .open + & { display: block; }
198+ > ._list-item { padding-left: 2.375rem; }
199+ > ._list-dir, > ._list-sub > ._list-item { padding-left: 2.75rem; }
191200 > ._list-item:before { content: none; }
192201 > ._list-dir { line-height: 1.375rem; }
193202
@@ -288,32 +297,24 @@ · 94 unmodified lines
288297 // List picker
289298 //
290299
300+._list-picker {
301+ opacity: 0;
302+ transition: .2s;
303+
304+ &._in { opacity: 1; }
305+ ._list-item { cursor: pointer; }
306+ ._list-sub > ._list-item { padding-left: 2.375rem; }
307+}
308+
291309 ._list-checkbox {
292310 position: absolute;
293311 top: .5rem;
294− right: -1rem;
312+ right: .75rem;
295313 width: 1rem;
296314 height: 1rem;
297315 transition: .2s;
298316 }
299317
300−._list-label {
301− cursor: pointer;
302− transition: .2s;
303− @extend %_list-dir;
304−
305− ._in > & { padding-left: .75rem; }
306− ._in > & > ._list-checkbox { right: .5rem }
307−}
308−
309−._list-label-off {
310− opacity: 0;
311− padding-left: .75rem;
312−
313− ._in > & { opacity: 1; }
314− > ._list-checkbox { right: .5rem; }
315−}
316−
317318 ._list-link {
318319 display: block;
319320 margin-top: .75rem;