From 200dd0b43fc7a3c30b34a7bc340bb25ab3da7222 Mon Sep 17 00:00:00 2001 From: Thibaut Date: Sun, 8 Feb 2015 14:46:08 -0500 Subject: [PATCH] Add links to enable docs without reloading the app --- assets/javascripts/app/app.coffee | 25 +++++++++++++++---- .../javascripts/collections/collection.coffee | 4 +++ .../javascripts/templates/sidebar_tmpl.coffee | 5 +++- .../javascripts/views/sidebar/doc_list.coffee | 15 ++++++++--- assets/stylesheets/components/_sidebar.scss | 20 ++++++++++++--- 5 files changed, 56 insertions(+), 13 deletions(-) diff --git a/assets/javascripts/app/app.coffee b/assets/javascripts/app/app.coffee index 2ccd0b87..b1fb82cb 100644 --- a/assets/javascripts/app/app.coffee +++ b/assets/javascripts/app/app.coffee @@ -77,11 +77,7 @@ return start: -> - for doc in @docs.all() - @entries.add doc.toEntry() - @entries.add type.toEntry() for type in doc.types.all() - @entries.add doc.entries.all() - + @initDoc(doc) for doc in @docs.all() @db = new app.DB() @trigger 'ready' @router.start() @@ -90,6 +86,25 @@ @removeEvent 'ready bootError' return + initDoc: (doc) -> + @entries.add doc.toEntry() + @entries.add type.toEntry() for type in doc.types.all() + @entries.add doc.entries.all() + return + + enableDoc: (doc, _onSuccess, onError) -> + onSuccess = => + @disabledDocs.remove(doc) + @docs.add(doc) + @docs.sort() + @initDoc(doc) + @settings.setDocs(doc.slug for doc in @docs.all()) + _onSuccess() + return + + doc.load onSuccess, onError, writeCache: true + return + welcomeBack: -> visitCount = @settings.get('count') @settings.set 'count', ++visitCount diff --git a/assets/javascripts/collections/collection.coffee b/assets/javascripts/collections/collection.coffee index ba2f5517..5bc4943b 100644 --- a/assets/javascripts/collections/collection.coffee +++ b/assets/javascripts/collections/collection.coffee @@ -21,6 +21,10 @@ class app.Collection @models.push new (@model())(object) return + remove: (model) -> + @models.splice @models.indexOf(model), 1 + return + size: -> @models.length diff --git a/assets/javascripts/templates/sidebar_tmpl.coffee b/assets/javascripts/templates/sidebar_tmpl.coffee index cfaf940c..3fb0c805 100644 --- a/assets/javascripts/templates/sidebar_tmpl.coffee +++ b/assets/javascripts/templates/sidebar_tmpl.coffee @@ -4,7 +4,10 @@ templates.sidebarDoc = (doc, options = {}) -> link = """""" - link += """""" unless options.disabled + if options.disabled + link += """Enable""" + else + link += """""" link += """#{doc.version}""" if doc.version link + "#{doc.name}" diff --git a/assets/javascripts/views/sidebar/doc_list.coffee b/assets/javascripts/views/sidebar/doc_list.coffee index 9d334793..7524c173 100644 --- a/assets/javascripts/views/sidebar/doc_list.coffee +++ b/assets/javascripts/views/sidebar/doc_list.coffee @@ -123,17 +123,24 @@ class app.views.DocList extends app.View $.scrollTo @find("a[href='#{model.fullPath()}']"), null, 'top', margin: 0 return - onClick: (event) => - return unless @disabledTitle and $.hasChild @disabledTitle, event.target - $.stopEvent(event) - + toggleDisabled: -> if @disabledTitle.classList.contains('open-title') @removeDisabledList() app.settings.set 'hideDisabled', true else @appendDisabledList() app.settings.set 'hideDisabled', false + return + onClick: (event) => + if @disabledTitle and $.hasChild(@disabledTitle, event.target) + $.stopEvent(event) + @toggleDisabled() + else if slug = event.target.getAttribute('data-enable') + $.stopEvent(event) + doc = app.disabledDocs.findBy('slug', slug) + app.enableDoc(doc, @render, @render) + return afterRoute: (route, context) => if context.init diff --git a/assets/stylesheets/components/_sidebar.scss b/assets/stylesheets/components/_sidebar.scss index 59b3d32e..9a6d72c8 100644 --- a/assets/stylesheets/components/_sidebar.scss +++ b/assets/stylesheets/components/_sidebar.scss @@ -109,11 +109,9 @@ } } -._list-count { +._list-count, ._list-enable { float: right; font-size: .75rem; - color: $textColorLighter; - pointer-events: none; .focus > &, .active > & { @@ -121,6 +119,22 @@ } } +._list-count { + color: $textColorLighter; + pointer-events: none; + + ._list-disabled:hover > & { display: none; } +} + +._list-enable { + display: none; + color: $linkColor; + cursor: pointer; + + &:hover { text-decoration: underline; } + ._list-disabled:hover > & { display: block; } +} + // // List hierarchy //