Skip to content

Instantly share code, notes, and snippets.

@kmnk
Created December 9, 2012 17:22
Show Gist options
  • Save kmnk/4246183 to your computer and use it in GitHub Desktop.
Save kmnk/4246183 to your computer and use it in GitHub Desktop.
Sample CoffeeScript
Namespace('sample.widget')
.use('sample.rect.ui createRectModel')
.define (ns) ->
registerElement = (element, dataset) ->
rectModel = ns.createRectModel element, dataset.classOn, dataset.classOff
element.addEventListener 'click', (event) ->
rectModel.notify('toggle').run()
rectModel.notify('move').run()
ns.provide registerElement : registerElement
Namespace('sample.rect.ui')
.use('brook promise')
.use('brook.util mapper,through')
.use('brook.model createModel')
.define (ns) ->
maxLeft = 200
maxTop = 200
createModel = (element, onClass, offClass) ->
model = ns.createModel()
model.addMethod 'toggle', ns.promise().bind(
createToggleClassPromise element, onClass, offClass
)
model.addMethod 'move', ns.promise().bind(
makeNewPosition,
createMovePositionPromise element
)
model
createToggleClassPromise = (element, onClass, offClass) ->
ns.through (v) ->
if element.className is onClass
element.className = offClass
else
element.className = onClass
createMovePositionPromise = (element) ->
ns.through (v) ->
element.style.left = "#{v.left}px"
element.style.top = "#{v.top}px"
makeNewPosition = ns.mapper (v) ->
left : Math.floor Math.random() * maxLeft
top : Math.floor Math.random() * maxTop
ns.provide createRectModel : createModel
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment