mirror of https://github.com/atom/atom.git
76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
const SelectListView = require('atom-select-list')
|
|
|
|
module.exports =
|
|
class ReopenProjectListView {
|
|
constructor (callback) {
|
|
this.callback = callback
|
|
this.selectListView = new SelectListView({
|
|
emptyMessage: 'No projects in history.',
|
|
itemsClassList: ['mark-active'],
|
|
items: [],
|
|
filterKeyForItem: (project) => project.name,
|
|
elementForItem: (project) => {
|
|
let element = document.createElement('li')
|
|
if (project.name === this.currentProjectName) {
|
|
element.classList.add('active')
|
|
}
|
|
element.textContent = project.name
|
|
return element
|
|
},
|
|
didConfirmSelection: (project) => {
|
|
this.cancel()
|
|
this.callback(project.value)
|
|
},
|
|
didCancelSelection: () => {
|
|
this.cancel()
|
|
}
|
|
})
|
|
this.selectListView.element.classList.add('reopen-project')
|
|
}
|
|
|
|
get element () {
|
|
return this.selectListView.element
|
|
}
|
|
|
|
dispose () {
|
|
this.cancel()
|
|
return this.selectListView.destroy()
|
|
}
|
|
|
|
cancel () {
|
|
if (this.panel != null) {
|
|
this.panel.destroy()
|
|
}
|
|
this.panel = null
|
|
this.currentProjectName = null
|
|
if (this.previouslyFocusedElement) {
|
|
this.previouslyFocusedElement.focus()
|
|
this.previouslyFocusedElement = null
|
|
}
|
|
}
|
|
|
|
attach () {
|
|
this.previouslyFocusedElement = document.activeElement
|
|
if (this.panel == null) {
|
|
this.panel = atom.workspace.addModalPanel({item: this})
|
|
}
|
|
this.selectListView.focus()
|
|
this.selectListView.reset()
|
|
}
|
|
|
|
async toggle () {
|
|
if (this.panel != null) {
|
|
this.cancel()
|
|
} else {
|
|
this.currentProjectName = atom.project != null ? this.makeName(atom.project.getPaths()) : null
|
|
const projects = atom.history.getProjects().map(p => ({ name: this.makeName(p.paths), value: p.paths }))
|
|
await this.selectListView.update({items: projects})
|
|
this.attach()
|
|
}
|
|
}
|
|
|
|
makeName (paths) {
|
|
return paths.join(', ')
|
|
}
|
|
}
|