project-nexus
Version:
A hub for all your programming projects
80 lines (72 loc) • 2.94 kB
text/coffeescript
fs = require "fs"
{join} = require "path"
HOME = require "user-home"
Windows = process.platform is "win32"
Mac = process.platform is "darwin"
class @WelcomeScreen extends React.Component
render: ->
# @TODO: Detect common project superdirectories from popular IDEs or other tools?
possible_dir_names = [
"Code", "Coding", "Programs", "Programming", "Projects"
"Coding Projects", "Code Projects", "Programming Projects"
"Coding-Projects", "Code-Projects", "Programming-Projects"
]
possible_dir_names = possible_dir_names.concat (dir_name.toLowerCase() for dir_name in possible_dir_names)
HOME_folder = fs.readdirSync HOME
default_github_dir = join HOME, "Documents", "Github"
E "GraniteWidgetsWelcome.welcome-screen",
E "h1.h1", "Select Your Projects Directory"
E "GtkLabel", "Where do you keep your project folders?"
E ".buttons",
E "button.button",
key: "choose"
onClick: ->
chooser = document.createElement "input"
chooser.setAttribute "type", "file"
chooser.setAttribute "nwdirectory", "nwdirectory"
chooser.addEventListener "change", (e)=>
Settings.set "projects_dir", e.target.value
window.render()
chooser.click()
E "img", src: (if Windows then "img/explorer.png" else "img/files.png"), width: 48, height: 48
E "",
style: flexDirection: "column"
E "h3.h3", if Windows then "Browse" else "Find"
E "GtkLabel", "Choose your projects folder."
if fs.existsSync default_github_dir
E "button.button",
key: "github"
onClick: -> Settings.set "projects_dir", default_github_dir
E "img", src: "img/github.png", width: 48, height: 48
E "",
style: flexDirection: "column"
E "h3.h3", "GitHub Desktop"
E "GtkLabel", default_github_dir
for dir_name in possible_dir_names when dir_name in HOME_folder
do (dir_name)->
possible_project_dir = join HOME, dir_name
E "button.button",
key: dir_name
onClick: -> Settings.set "projects_dir", possible_project_dir
E "img", src: (if Windows then "img/windows-folder.png" else "img/files.png"), width: 48, height: 48
E "",
style: flexDirection: "column"
E "h3.h3", "This folder here"
E "GtkLabel", possible_project_dir
componentDidMount: ->
el = React.findDOMNode @
[buttons...] = el.querySelectorAll "button"
go = (delta)->
i = buttons.indexOf document.activeElement
if i is -1
buttons[0].focus()
else
buttons[Math.min(buttons.length - 1, Math.max(0, i + delta))].focus()
document.body.addEventListener "keydown", @keydown_listener = (e)=>
switch e.keyCode
when 38 then go -1 # up
when 40 then go +1 # down
else return
e.preventDefault()
componentWillUnmount: ->
document.body.removeEventListener "keydown", @keydown_listener