project-nexus
Version:
A hub for all your programming projects
72 lines (62 loc) • 2.33 kB
text/coffeescript
class extends React.Component
: (project_id)->
window.render ProjectNexus.selected_project_id = project_id
localStorage.selected_project_id = project_id
setTimeout ->
document.querySelector(".selected.project")?.scrollIntoViewIfNeeded()
render: ->
{projects, projects_read_error, selected_project_id, runaway_processes} = ProjectNexus
if projects
for project in projects
if project.id is selected_project_id
selected_project = project
Window = if Settings.get "elementary" then GtkWindow else ".app.window-frame.active"
Header = if Settings.get "elementary" then GtkHeaderBar else "header"
E Window,
E Header,
E "h1.title", "Project Nexus"
E "button.button.titlebutton",
style:
margin: 0
padding: 0
alignSelf: "center"
onClick: Settings.toggle
E "img",
src: "img/gear.svg"
style:
verticalAlign: "middle"
pointerEvents: "none"
if projects_read_error or projects?.length is 0
dir_not_found = projects_read_error?.code is "ENOENT"
E "GtkInfoBar",
class: if dir_not_found or (not projects_read_error) then "warning" else "error"
E "GtkLabel",
if projects_read_error
if dir_not_found
"Couldn't find your projects directory"
else
"Failed to read projects from your projects directory"
else
"There are no project folders in your projects directory (#{Settings.get "projects_dir"})"
E "button.button",
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 "GtkLabel", "Browse"
E ".window-content", key: "window-content",
E "main",
if projects?.length > 0
[
E ProjectsList, key: "projects", projects: projects
E ProjectDetails, key: "project", project: selected_project
]
else
E WelcomeScreen, key: "welcome"
if runaway_processes?.length
E RunawayProcesses, {key: "runaways", runaway_processes}
E Settings