Skip to content

Instantly share code, notes, and snippets.

@tuki0918
Created May 31, 2013 11:44
Show Gist options
  • Save tuki0918/5684452 to your computer and use it in GitHub Desktop.
Save tuki0918/5684452 to your computer and use it in GitHub Desktop.
<button id="addNewObserver">Add New Observer checkbox</button>
<input id="mainCheckbox" type="checkbox">
<div id="observersContainer"></div>
ObserverList = ->
@.observerList = []
return
ObserverList::Add = ( obj )->
@.observerList.push obj
return
ObserverList::Empty = ->
@.observerList = []
return
ObserverList::Count = ->
@.observerList.length
return
ObserverList::Get = ( index )->
if index > -1 and index < @.observerList.length
@.observerList[ index ]
return
ObserverList::Insert = ( obj, index )->
pointer = -1
if index is 0
@.observerList.unshift obj
pointer = index
else if index is @.observerList.length
@.observerList.push obj
pointer = index
return pointer
ObserverList::IndexOf = ( obj, startIndex)->
i = startIndex
pointer = -1
while i < @.observerList.length
if @.observerList[i] is obj
pointer = i
i++
return pointer
ObserverList::RemoveIndexAt = ( index )->
if index is 0
@.observerList.shift()
else if index is @.observerList.length-1
@.observerList.pop()
return
extend = ( obj, extension )->
for key of obj
extension[key] = obj[key]
return
###################################################
Subject = ->
@.observers = new ObserverList()
return
Subject::AddObserver = ( observer )->
@.observers.Add observer
return
Subject::RemoveObserver = ( observer )->
@.observers.RemoveIndexAt @.observers.IndexOf observer, 0
return
Subject::Notify = ( context )->
observerCount = @.observers.Count()
i=0
while i < observerCount
@.observers.Get(i).Update context
i++
return
Observer = ->
@.Update = ->
return
###################################################
controlCheckbox = document.getElementById 'mainCheckbox'
addBtn = document.getElementById 'addNewObserver'
container = document.getElementById 'observersContainer'
extend new Subject(), controlCheckbox
addNewObserver = ->
check = document.createElement 'input'
check.type = 'checkbox'
extend new Observer(), check
check.Update = ( value )->
@.checked = value
return
controlCheckbox.AddObserver check
container.appendChild check
return
controlCheckbox['onclick'] = new Function "controlCheckbox.Notify(controlCheckbox.checked)"
addBtn['onclick'] = addNewObserver
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment