107 lines
2.6 KiB
CoffeeScript
107 lines
2.6 KiB
CoffeeScript
trigger_callback = (control_name,event)->
|
|
$.ajax
|
|
data:
|
|
control_name: control_name
|
|
event: event
|
|
states: JSON.stringify(states)
|
|
cache: no
|
|
.done (new_states)->
|
|
#Update all classes
|
|
for name,state of new_states
|
|
controls[name]?.update(state)
|
|
return
|
|
|
|
class WSF_CONTROL
|
|
constructor: (@control_name, @$el)->
|
|
@attach_events()
|
|
return
|
|
|
|
attach_events: ()->
|
|
return
|
|
|
|
update: (state)->
|
|
return
|
|
|
|
controls = {}
|
|
|
|
class WSF_BUTTON_CONTROL extends WSF_CONTROL
|
|
attach_events: ()->
|
|
self = @
|
|
@$el.click (e)->
|
|
e.preventDefault()
|
|
self.click()
|
|
click: ()->
|
|
if window.states[@control_name]['callback_click']
|
|
trigger_callback(@control_name, 'click')
|
|
|
|
update: (state) ->
|
|
if state.text?
|
|
window.states[@control_name]['text'] = state.text
|
|
@$el.text(state.text)
|
|
|
|
class WSF_TEXT_CONTROL extends WSF_CONTROL
|
|
attach_events: ()->
|
|
self = @
|
|
@$el.change ()->
|
|
self.change()
|
|
change: ()->
|
|
#update local state
|
|
window.states[@control_name]['text'] = @$el.val()
|
|
if window.states[@control_name]['callback_change']
|
|
trigger_callback(@control_name, 'change')
|
|
|
|
update: (state) ->
|
|
if state.text?
|
|
window.states[@control_name]['text'] = state.text
|
|
@$el.val(state.text)
|
|
|
|
class WSF_TEXTAREA_CONTROL extends WSF_CONTROL
|
|
attach_events: () ->
|
|
self = @
|
|
@$el.change () ->
|
|
self.change()
|
|
|
|
change: () ->
|
|
window.states[@control_name]['text'] = @$el.val()
|
|
if window.states[@control_name]['callback_change']
|
|
trigger_callback(@control_name, 'change')
|
|
|
|
update: (state) ->
|
|
if state.text?
|
|
window.states[@control_name]['text'] = state.text
|
|
@$el.val(state.text)
|
|
|
|
class WSF_CHECKBOX_CONTROL extends WSF_CONTROL
|
|
attach_events: ()->
|
|
self = @
|
|
@$el.change ()->
|
|
self.change()
|
|
change: ()->
|
|
#update local state
|
|
window.states[@control_name]['checked'] = @$el.is(':checked')
|
|
if window.states[@control_name]['callback_change']
|
|
trigger_callback(@control_name, 'change')
|
|
|
|
update: (state) ->
|
|
if state.text?
|
|
window.states[@control_name]['checked'] = state.checked
|
|
@$el.prop('checked',state.checked)
|
|
|
|
#map class name to effective class
|
|
typemap =
|
|
"WSF_BUTTON_CONTROL":WSF_BUTTON_CONTROL
|
|
"WSF_TEXT_CONTROL":WSF_TEXT_CONTROL
|
|
"WSF_TEXTAREA_CONTROL":WSF_TEXTAREA_CONTROL
|
|
"WSF_CHECKBOX_CONTROL":WSF_CHECKBOX_CONTROL
|
|
|
|
#create a js class for each control
|
|
for name,state of window.states
|
|
#find control DOM element
|
|
$el = $('[data-name='+name+']')
|
|
#get control type
|
|
type = $el.data('type')
|
|
#create class
|
|
if type? and typemap[type]?
|
|
controls[name]=new typemap[type](name,$el)
|
|
|