Inline available packages

This commit is contained in:
probablycorey
2013-06-27 09:40:07 -07:00
parent 29f45b787b
commit 8bf877e400
3 changed files with 51 additions and 75 deletions

View File

@@ -1,46 +0,0 @@
{View} = require 'space-pen'
$ = require 'jquery'
PackageView = require './package-view'
packageManager = require './package-manager'
stringScore = require 'stringscore'
### Internal ###
module.exports =
class AvailablePackagesConfigPanel extends View
@content: ->
@div class: 'available-packages', =>
@div outlet: 'loadingArea', class: 'alert alert-info loading-area', =>
@span 'Loading available packages\u2026'
@div outlet: 'errorArea', class: 'alert alert-error', =>
@span 'Error fetching available packages.'
@button outlet: 'retry', class: 'btn btn-mini btn-retry', 'Retry'
@div outlet: 'packagesArea'
initialize: (@packageEventEmitter) ->
@retry.on 'click', => @refresh()
@refresh()
refresh: ->
@loadingArea.show()
@errorArea.hide()
packageManager.getAvailable (error, @packages=[]) =>
@loadingArea.hide()
if error?
@errorArea.show()
console.error(error.stack ? error)
else
@packagesArea.empty()
for pack in @packages
@packagesArea.append(new PackageView(pack, @packageEventEmitter))
@packageEventEmitter.trigger('available-packages-loaded', @packages)
filterPackages: (filterString) ->
packageViews = @packagesArea.children()
for packageView in packageViews
if /^\s*$/.test(filterString) or stringScore(packageView.getAttribute('name'), filterString)
$(packageView).show()
else
$(packageView).hide()
getPackageCount: -> @packages.length

View File

@@ -1,5 +1,6 @@
$ = require 'jquery'
_ = require 'underscore'
{$$} = require 'space-pen'
ConfigPanel = require './config-panel'
AvailablePackagesConfigPanel = require './available-packages-config-panel'
EventEmitter = require 'event-emitter'
@@ -27,23 +28,19 @@ class PackagePanel extends ConfigPanel
@span class: 'badge pull-right', outlet: 'availableCount'
@subview 'packageFilter', new Editor(mini: true, attributes: {id: 'package-filter'})
@div outlet: 'loadingArea', class: 'alert alert-info loading-area'
@div outlet: 'installedViews'
@div outlet: 'availableViews'
initialize: ->
@packageEventEmitter = new PackageEventEmitter()
@createInstalledViews()
@available = new AvailablePackagesConfigPanel(@packageEventEmitter)
@append(@available)
@available.hide()
@availableViews.hide()
@loadInstalledViews()
@loadAvailableViews()
@installedLink.on 'click', =>
@availableLink.removeClass('active')
@available.hide()
@availableViews.hide()
@installedLink.addClass('active')
@installedViews.show()
@@ -51,14 +48,7 @@ class PackagePanel extends ConfigPanel
@installedLink.removeClass('active')
@installedViews.hide()
@availableLink.addClass('active')
@available.show()
@packageEventEmitter.on 'available-packages-loaded', =>
@availableCount.text(@available.getPackageCount())
@packageFilter.getBuffer().on 'contents-modified', =>
@available.filterPackages(@packageFilter.getText())
@filterPackages(@packageFilter.getText())
@availableViews.show()
@packageEventEmitter.on 'package-installed', (error, pack) =>
@addPackage(pack) unless error?
@@ -68,24 +58,55 @@ class PackagePanel extends ConfigPanel
@removePackage(pack) unless error?
@updateInstalledCount()
createInstalledViews: ->
@setLoadingText('Loading installed packages\u2026')
@loadingArea.show()
@packageFilter.getBuffer().on 'contents-modified', =>
@filterPackages(@packageFilter.getText())
loadInstalledViews: ->
@installedViews.empty()
@installedViews.append @createLoadingView('Loading installed packages\u2026')
packages = _.sortBy(atom.getAvailablePackageMetadata(), 'name')
packageManager.renderMarkdownInMetadata packages, =>
@setLoadingText(null)
@installedViews.empty()
for pack in packages
view = new PackageView(pack, @packageEventEmitter)
@installedViews.append(view)
@updateInstalledCount()
loadAvailableViews: ->
@availableViews.empty()
@availableViews.append @createLoadingView('Loading installed packages\u2026')
packageManager.getAvailable (error, @packages=[]) =>
@availableViews.empty()
if error?
errorView = @createErrorView('Error fetching available packages.')
errorView.on 'click', => @loadAvailableViews()
@availableViews.append errorView
console.error(error.stack ? error)
else
for pack in @packages
view = new PackageView(pack, @packageEventEmitter)
@availableViews.append(view)
@updateAvailableCount()
createLoadingView: (text) ->
$$ ->
@div class: 'alert alert-info loading-area', text
createErrorView: (text) ->
$$ ->
@div class: 'alert alert-error', =>
@span text
@button class: 'btn btn-mini btn-retry', 'Retry'
updateInstalledCount: ->
@installedCount.text(@installedViews.children().length)
setLoadingText: (text) ->
@loadingArea.text(text)
if text then @loadingArea.show() else @loadingArea.hide()
updateAvailableCount: ->
@availableCount.text(@availableViews.children().length)
removePackage: ({name}) ->
@installedViews.children("[name=#{name}]").remove()
@@ -103,8 +124,9 @@ class PackagePanel extends ConfigPanel
@installedViews.children(":eq(#{insertAfterIndex})").after(view)
filterPackages: (filterString) ->
for packageView in @installedViews.children()
if /^\s*$/.test(filterString) or stringScore(packageView.getAttribute('name'), filterString)
$(packageView).show()
else
$(packageView).hide()
for children in [@installedViews.children(), @availableViews.children()]
for packageView in children
if /^\s*$/.test(filterString) or stringScore(packageView.getAttribute('name'), filterString)
$(packageView).show()
else
$(packageView).hide()