Don't show uninstall action for bundled packages

This commit is contained in:
Kevin Sawicki
2013-05-21 17:59:12 -07:00
parent 63bfca3d09
commit 25b8da0a76
4 changed files with 71 additions and 23 deletions

View File

@@ -22,6 +22,7 @@ module.exports =
class Config
configDirPath: configDirPath
themeDirPaths: [userThemesDirPath, bundledThemesDirPath, vendoredThemesDirPath]
bundledPackageDirPaths: [vendoredPackagesDirPath, bundledPackagesDirPath]
packageDirPaths: [userPackagesDirPath, vendoredPackagesDirPath, bundledPackagesDirPath]
userPackagesDirPath: userPackagesDirPath
lessSearchPaths: [fsUtils.join(resourcePath, 'static'), fsUtils.join(resourcePath, 'vendor')]

View File

@@ -1,4 +1,6 @@
path = require 'path'
_ = require 'underscore'
Package = require 'package'
ConfigPanel = require 'config-panel'
PackageConfigView = require 'package-config-view'
@@ -10,5 +12,12 @@ class InstalledPackagesConfigPanel extends ConfigPanel
@div class: 'installed-packages'
initialize: ->
for pack in _.sortBy(atom.getLoadedPackages(), 'name')
@append(new PackageConfigView(pack.metadata))
for packagePath in atom.getAvailablePackagePaths().sort()
name = path.basename(packagePath)
metadata = atom.getLoadedPackage(name)?.metadata
unless metadata
try
metadata = Package.loadMetadata()
catch e
metadata = {name}
@append(new PackageConfigView(metadata))

View File

@@ -1,10 +1,10 @@
Package = require 'package'
semver = require 'semver'
packageManager = require 'package-manager'
{$$, View} = require 'space-pen'
requireWithGlobals 'bootstrap/js/bootstrap-dropdown', jQuery: require 'jquery'
### Internal ###
module.exports =
class PackageConfigView extends View
@content: ->
@@ -27,9 +27,13 @@ class PackageConfigView extends View
@div class: 'readme', outlet: 'readme'
installed: false
disabled: false
bundled: false
updateAvailable: false
initialize: (@pack, @queue) ->
@updatePackageState()
@attr('name', @pack.name)
@name.text(@pack.name)
if version = semver.valid(@pack.version)
@@ -75,47 +79,81 @@ class PackageConfigView extends View
@issues.hide()
@defaultAction.on 'click', =>
if @installed and @bundled
@togglePackageEnablement()
return
packageManagerCallback = =>
@defaultAction.enable()
@updatePackageState()
@updateDefaultAction()
@defaultAction.disable()
if @installed
if @updateAvailable
@defaultAction.text('Upgrading\u2026')
packageManager.install @pack, => @updateInstallState()
packageManager.install(@pack, packageManagerCallback)
else
@defaultAction.text('Uninstalling\u2026')
packageManager.uninstall @pack, => @updateInstallState()
packageManager.uninstall(@pack, packageManagerCallback)
else
@defaultAction.text('Installing\u2026')
packageManager.install @pack, => @updateInstallState()
packageManager.install(@pack, packageManagerCallback)
@updateInstallState()
@updateDefaultAction()
@enableToggle.find('a').on 'click', =>
if atom.isPackageDisabled(@pack.name)
config.removeAtKeyPath('core.disabledPackages', @pack.name)
else
config.pushAtKeyPath('core.disabledPackages', @pack.name)
@enableToggle.find('a').on 'click', => @togglePackageEnablement
@observeConfig 'core.disabledPackages', => @updateEnabledState()
@observeConfig 'core.disabledPackages', =>
@updatePackageState()
@updateDefaultAction()
@updateEnabledState()
togglePackageEnablement: ->
if @disabled
config.removeAtKeyPath('core.disabledPackages', @pack.name)
else
config.pushAtKeyPath('core.disabledPackages', @pack.name)
updatePackageState: ->
@disabled = atom.isPackageDisabled(@pack.name)
@bundled = false
loadedPackage = atom.getLoadedPackage(@pack.name)
packagePath = loadedPackage?.path ? atom.resolvePackagePath(@pack.name)
@installed = packagePath?
if @installed
for packageDirPath in config.bundledPackageDirPaths
if packagePath.indexOf("#{packageDirPath}/") is 0
@bundled = true
version = loadedPackage?.metadata.version
unless version
try
version = Package.loadMetadata(@pack.name).version
@updateAvailable = semver.gt(@pack.version, version)
updateEnabledState: ->
enableLink = @enableToggle.find('a')
if atom.isPackageDisabled(@pack.name)
if @disabled
enableLink.text('Enable')
@addClass('panel-warning')
else
enableLink.text('Disable')
@removeClass('panel-warning')
@enableToggle.hide() unless atom.isPackageLoaded(@pack.name)
@enableToggle.hide() unless @installed
updateInstallState: ->
@defaultAction.enable()
@installed = atom.isPackageLoaded(@pack.name)
@updateAvailable = @installed and semver.gt(@pack.version, atom.getLoadedPackage(@pack.name).metadata.version)
updateDefaultAction: ->
if @installed
if @updateAvailable
@defaultAction.text('Upgrade')
if @bundled
if @disabled
@defaultAction.text('Enable')
else
@defaultAction.text('Disable')
else
@defaultAction.text('Uninstall')
if @updateAvailable
@defaultAction.text('Upgrade')
else
@defaultAction.text('Uninstall')
else
@defaultAction.text('Install')

View File

@@ -23,7 +23,7 @@ class TextMatePackage extends Package
@syntaxesPath = fsUtils.join(@path, "Syntaxes")
@grammars = []
@scopedProperties = []
@metadata = {@name, version: '-1'}
@metadata = {@name}
load: ({sync}={}) ->
if sync