mirror of
https://github.com/atom/atom.git
synced 2026-01-22 13:28:01 -05:00
Update views when packages are installed/uninstalled
This commit is contained in:
@@ -34,7 +34,7 @@ describe "PackageConfigPanel", ->
|
||||
panel = new PackageConfigPanel
|
||||
|
||||
installedCallback = jasmine.createSpy("installed packages callback")
|
||||
panel.installed.on("installed-packages-loaded", installedCallback)
|
||||
panel.packageEventEmitter.on("installed-packages-loaded", installedCallback)
|
||||
waitsFor -> installedCallback.callCount > 0
|
||||
|
||||
describe 'Installed tab', ->
|
||||
|
||||
@@ -3,7 +3,6 @@ ConfigPanel = require 'config-panel'
|
||||
packageManager = require 'package-manager'
|
||||
|
||||
### Internal ###
|
||||
|
||||
module.exports =
|
||||
class AvailablePackagesConfigPanel extends ConfigPanel
|
||||
@content: ->
|
||||
@@ -11,12 +10,14 @@ class AvailablePackagesConfigPanel extends ConfigPanel
|
||||
@div outlet: 'loadingArea', class: 'alert alert-info loading-area', =>
|
||||
@span 'Loading available packages\u2026'
|
||||
|
||||
initialize: ->
|
||||
packageManager.getAvailable (error, packages=[]) =>
|
||||
initialize: (@packageEventEmitter) ->
|
||||
packageManager.getAvailable (error, @packages=[]) =>
|
||||
@loadingArea.hide()
|
||||
if error?
|
||||
console.error(error.stack ? error)
|
||||
else
|
||||
for pack in packages
|
||||
@append(new PackageConfigView(pack))
|
||||
@trigger('available-packages-loaded', [packages])
|
||||
for pack in @packages
|
||||
@append(new PackageConfigView(pack, @packageEventEmitter))
|
||||
@packageEventEmitter.trigger('available-packages-loaded', [@packages])
|
||||
|
||||
getPackageCount: -> @packages.length
|
||||
|
||||
@@ -4,17 +4,39 @@ PackageConfigView = require 'package-config-view'
|
||||
packageManager = require 'package-manager'
|
||||
|
||||
### Internal ###
|
||||
|
||||
module.exports =
|
||||
class InstalledPackagesConfigPanel extends ConfigPanel
|
||||
@content: ->
|
||||
@div class: 'installed-packages', =>
|
||||
@div outlet: 'loadingArea', class: 'alert alert-info loading-area', =>
|
||||
@span 'Loading installed packages\u2026'
|
||||
@div outlet: 'packagesArea'
|
||||
|
||||
initialize: ->
|
||||
packages = _.sortBy(atom.getAvailablePackageMetadata(), 'name')
|
||||
packageManager.renderMarkdownInMetadata packages, =>
|
||||
initialize: (@packageEventEmitter) ->
|
||||
@packages = _.sortBy(atom.getAvailablePackageMetadata(), 'name')
|
||||
packageManager.renderMarkdownInMetadata @packages, =>
|
||||
@loadingArea.hide()
|
||||
@append(new PackageConfigView(pack)) for pack in packages
|
||||
@trigger 'installed-packages-loaded', [packages]
|
||||
for pack in @packages
|
||||
@packagesArea.append(new PackageConfigView(pack, @packageEventEmitter))
|
||||
@packageEventEmitter.trigger 'installed-packages-loaded', [@packages]
|
||||
|
||||
@packageEventEmitter.on 'package-installed', (pack) => @addPackage(pack)
|
||||
@packageEventEmitter.on 'package-uninstalled', (pack) => @removePackage(pack)
|
||||
|
||||
removePackage: ({name}) ->
|
||||
@packages = _.reject @packages, (pack) -> pack.name is name
|
||||
@packagesArea.children("[name=#{name}]").remove()
|
||||
|
||||
addPackage: (pack) ->
|
||||
@packages.push(pack)
|
||||
@packages = _.sortBy(@packages, 'name')
|
||||
index = @packages.indexOf(pack)
|
||||
view = new PackageConfigView(pack, @packageEventEmitter)
|
||||
if index is 0
|
||||
@packagesArea.prepend(view)
|
||||
else if index is @packages.length - 1
|
||||
@packagesArea.append(view)
|
||||
else
|
||||
@packagesArea.children(":eq(#{index})").before(view)
|
||||
|
||||
getPackageCount: -> @packages.length
|
||||
|
||||
@@ -1,9 +1,13 @@
|
||||
ConfigPanel = require 'config-panel'
|
||||
InstalledPackagesConfigPanel = require 'installed-packages-config-panel'
|
||||
AvailablePackagesConfigPanel = require 'available-packages-config-panel'
|
||||
_ = require 'underscore'
|
||||
EventEmitter = require 'event-emitter'
|
||||
|
||||
class PackageEventEmitter
|
||||
_.extend PackageEventEmitter.prototype, EventEmitter
|
||||
|
||||
### Internal ###
|
||||
|
||||
module.exports =
|
||||
class PackageConfigPanel extends ConfigPanel
|
||||
@content: ->
|
||||
@@ -16,10 +20,13 @@ class PackageConfigPanel extends ConfigPanel
|
||||
@li outlet: 'availableLink', =>
|
||||
@a 'Available', =>
|
||||
@span class: 'badge pull-right', outlet: 'availableCount'
|
||||
@subview 'installed', new InstalledPackagesConfigPanel()
|
||||
@subview 'available', new AvailablePackagesConfigPanel()
|
||||
|
||||
initialize: ->
|
||||
@packageEventEmitter = new PackageEventEmitter()
|
||||
@installed = new InstalledPackagesConfigPanel(@packageEventEmitter)
|
||||
@available = new AvailablePackagesConfigPanel(@packageEventEmitter)
|
||||
@append(@installed, @available)
|
||||
|
||||
@available.hide()
|
||||
|
||||
@installedLink.on 'click', =>
|
||||
@@ -34,8 +41,8 @@ class PackageConfigPanel extends ConfigPanel
|
||||
@availableLink.addClass('active')
|
||||
@available.show()
|
||||
|
||||
@installed.on 'installed-packages-loaded', (event, packages) =>
|
||||
@installedCount.text(packages.length)
|
||||
@packageEventEmitter.on 'installed-packages-loaded package-installed package-uninstalled', =>
|
||||
@installedCount.text(@installed.getPackageCount())
|
||||
|
||||
@available.on 'available-packages-loaded', (event, packages) =>
|
||||
@availableCount.text(packages.length)
|
||||
@packageEventEmitter.on 'available-packages-loaded', =>
|
||||
@availableCount.text(@available.getPackageCount())
|
||||
|
||||
@@ -34,7 +34,7 @@ class PackageConfigView extends View
|
||||
bundled: false
|
||||
updateAvailable: false
|
||||
|
||||
initialize: (@pack, @queue) ->
|
||||
initialize: (@pack, @packageEventEmitter) ->
|
||||
@updatePackageState()
|
||||
|
||||
@attr('name', @pack.name)
|
||||
@@ -103,10 +103,16 @@ class PackageConfigView extends View
|
||||
packageManager.install(@pack, packageManagerCallback)
|
||||
else
|
||||
@defaultAction.text('Uninstalling\u2026')
|
||||
packageManager.uninstall(@pack, packageManagerCallback)
|
||||
packageManager.uninstall @pack, (error) =>
|
||||
unless error?
|
||||
@packageEventEmitter.trigger('package-uninstalled', @pack)
|
||||
packageManagerCallback()
|
||||
else
|
||||
@defaultAction.text('Installing\u2026')
|
||||
packageManager.install(@pack, packageManagerCallback)
|
||||
packageManager.install @pack, (error) =>
|
||||
unless error?
|
||||
@packageEventEmitter.trigger('package-installed', @pack)
|
||||
packageManagerCallback()
|
||||
|
||||
@updateDefaultAction()
|
||||
|
||||
|
||||
Reference in New Issue
Block a user