Render markdown in installed package views

This commit is contained in:
Kevin Sawicki
2013-05-22 08:59:16 -07:00
parent ce20bba792
commit 055e4d96e8
3 changed files with 71 additions and 52 deletions

View File

@@ -3,14 +3,20 @@ _ = require 'underscore'
Package = require 'package'
ConfigPanel = require 'config-panel'
PackageConfigView = require 'package-config-view'
packageManager = require 'package-manager'
### Internal ###
module.exports =
class InstalledPackagesConfigPanel extends ConfigPanel
@content: ->
@div class: 'installed-packages'
@div class: 'installed-packages', =>
@div outlet: 'loadingArea', class: 'alert alert-info loading-area', =>
@span 'Loading installed packages\u2026'
initialize: ->
for metadata in _.sortBy(atom.getAvailablePackageMetadata(), 'name')
@append(new PackageConfigView(metadata))
packages = _.sortBy(atom.getAvailablePackageMetadata(), 'name')
packageManager.renderMarkdownInMetadata packages, =>
@loadingArea.hide()
@append(new PackageConfigView(pack)) for pack in packages
@trigger 'installed-packages-loaded', [packages]

View File

@@ -34,6 +34,8 @@ class PackageConfigPanel extends ConfigPanel
@availableLink.addClass('active')
@available.show()
@installedCount.text(atom.getAvailablePackageNames().length)
@installed.on 'installed-packages-loaded', (event, packages) =>
@installedCount.text(packages.length)
@available.on 'available-packages-loaded', (event, packages) =>
@availableCount.text(packages.length)

View File

@@ -4,57 +4,68 @@ async = require 'async'
### Internal ###
module.exports =
getAvailable: (callback) ->
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['available', '--json'])
chunks = []
apmProcess.stdout.on 'data', (chunk) -> chunks.push(chunk)
apmProcess.on 'close', (code) ->
if code is 0
try
packages = JSON.parse(Buffer.concat(chunks).toString()) ? []
catch error
callback(error)
return
renderMarkdownInMetadata = (packages, callback) ->
queue = async.queue (pack, callback) ->
operations = []
if pack.description
operations.push (callback) ->
roaster pack.description, {}, (error, html) ->
pack.descriptionHtml = html
callback()
if pack.readme
operations.push (callback) ->
roaster pack.readme, {}, (error, html) ->
pack.readmeHtml = html
callback()
async.waterfall(operations, callback)
queue.push(pack) for pack in packages
queue.drain = callback
if packages.length > 0
queue = async.queue (pack, callback) ->
roaster pack.description, {}, (error, html) ->
pack.descriptionHtml = html
roaster pack.readme, {}, (error, html) ->
pack.readmeHtml = html
callback()
queue.push(pack) for pack in packages
queue.drain = -> callback(null, packages)
else
callback(null, packages)
getAvailable = (callback) ->
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['available', '--json'])
chunks = []
apmProcess.stdout.on 'data', (chunk) -> chunks.push(chunk)
apmProcess.on 'close', (code) ->
if code is 0
try
packages = JSON.parse(Buffer.concat(chunks).toString()) ? []
catch error
callback(error)
return
if packages.length > 0
renderMarkdownInMetadata packages, -> callback(null, packages)
else
callback(new Error("apm failed with code: #{code}"))
callback(null, packages)
else
callback(new Error("apm failed with code: #{code}"))
install: ({name, version}, callback) ->
activateOnSuccess = !atom.isPackageDisabled(name)
activateOnFailure = atom.isPackageActive(name)
atom.deactivatePackage(name) if atom.isPackageActive(name)
install = ({name, version}, callback) ->
activateOnSuccess = !atom.isPackageDisabled(name)
activateOnFailure = atom.isPackageActive(name)
atom.deactivatePackage(name) if atom.isPackageActive(name)
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['install', "#{name}@#{version}"])
apmProcess.on 'close', (code) =>
if code is 0
atom.activatePackage(name) if activateOnSuccess
callback()
else
actom.activatePackage(name) if activateOnFailure
callback(new Error("Installing '#{name}' failed."))
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['install', "#{name}@#{version}"])
apmProcess.on 'close', (code) =>
if code is 0
atom.activatePackage(name) if activateOnSuccess
callback()
else
actom.activatePackage(name) if activateOnFailure
callback(new Error("Installing '#{name}' failed."))
uninstall: ({name}, callback) ->
atom.deactivatePackage(name) if atom.isPackageActive(name)
uninstall = ({name}, callback) ->
atom.deactivatePackage(name) if atom.isPackageActive(name)
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['uninstall', name])
apmProcess.on 'close', (code) =>
if code is 0
atom.unloadPackage(name)
callback()
else
callback(new Error("Uninstalling '#{name}' failed."))
apm = require.resolve '.bin/apm'
apmProcess = spawn(apm, ['uninstall', name])
apmProcess.on 'close', (code) =>
if code is 0
atom.unloadPackage(name)
callback()
else
callback(new Error("Uninstalling '#{name}' failed."))
module.exports = {renderMarkdownInMetadata, install, uninstall, getAvailable}