project-nexus
Version:
A hub for all your programming projects
127 lines (106 loc) • 3.23 kB
text/coffeescript
objectAssign = (target, sources...)->
if not target?
throw new TypeError "Object.assign cannot be called with null or undefined as the target"
to = Object(target)
for from in sources
to[k] = v for k, v of Object(from)
to
class Setting extends React.Component
constructor: ({, })->
super
labeled: (el)->
E "label.setting",
"#{@label}:"
el
get: ->
Settings.get
set: (val)->
Settings.set , val
class CheckboxSetting extends Setting
render: ->
E "label.setting",
E "input",
type: "checkbox"
checked:
onChange: (e)=>
e.target.checked
window.render()
class TextSetting extends Setting
render: ->
E "input.entry",
value:
onChange: (e)=>
e.target.value
window.render()
class DirectorySetting extends Setting
render: ->
E ".linked",
E "input.entry",
type: "text"
value:
onChange: (e)=>
e.target.value
window.render()
E "button.button",
onClick: =>
chooser = document.createElement "input"
chooser.setAttribute "type", "file"
chooser.setAttribute "nwdirectory", "nwdirectory"
chooser.addEventListener "change", (e)=>
e.target.value
window.render()
chooser.click()
"Browse"
class extends React.Component
: no
: -> window.render Settings.open = yes
: -> window.render Settings.open = no
: -> window.render Settings.open = not Settings.open
(key)->
try JSON.parse window.localStorage.getItem key
catch e then console.error e
(key, value)->
try window.localStorage.setItem key, JSON.stringify value
catch e then console.error e
for callback in (Settings.watchers[key] ? [])
callback value
: (key, fn)->
Settings.set key, fn(Settings.get key)
: {}
: (key, callback)->
callback Settings.get key
Settings.watchers[key] ?= []
Settings.watchers[key].push callback
render: ->
elementary = Settings.get "elementary"
E ".settings-container", class: {visible: Settings.open}, key: "settings",
E ".overlay", onClick: Settings.hide
E ".settings",
E "h2",
style: textAlign: "center" if elementary
E "i.mega-octicon.octicon-gear"
" Settings"
E "button.button.icobutton",
onClick: Settings.hide
style: float: if elementary then "left" else "right"
if elementary # (as if these icons were considerably different)
E "i.e-icon-close"
else
E "i.octicon.octicon-x"
E ".settings-content",
E DirectorySetting,
setting: "projects_dir"
label: "Projects Directory"
E CheckboxSetting,
setting: "dark"
label: "Use dark styles"
E CheckboxSetting,
setting: "elementary"
label: "Emulate elementary OS's window frame"
componentDidMount: ->
window.addEventListener "keydown", = (e)->
if e.keyCode is 27 # Escape
Settings.hide()
componentWillUnmount: ->
window.removeEventListener "keydown",