UNPKG

kdf

Version:

KD: a non-document focused UI Framework for web applications.

61 lines (44 loc) 1.53 kB
KDButtonView = require './buttonview.coffee' module.exports = class KDToggleButton extends KDButtonView constructor:(options = {}, data)-> options = $.extend dataPath : null # a JsPath String defaultState : null # a String states : [] # an Array of Objects in form of stateName : callback key/value pairs , options super options, data @setState options.defaultState getStateIndex:(name)-> {states} = @getOptions() unless name return 0 else for state, index in states if name is state.title return index decorateState:(name)-> @setTitle @state.title @setIconClass @state.iconClass if @state.iconClass? if @state.cssClass? or @lastUsedCssClass? @unsetClass @lastUsedCssClass if @lastUsedCssClass? @setClass @state.cssClass @lastUsedCssClass = @state.cssClass else delete @lastUsedCssClass getState:-> @state setState:(name)-> {states} = @getOptions() @stateIndex = index = @getStateIndex name @state = states[index] @decorateState name @setCallback states[index].callback.bind @, @toggleState.bind @ toggleState:(err)-> {states} = @getOptions() nextState = states[@stateIndex + 1] or states[0] unless err @setState nextState.title else unless err.name is 'AccessDenied' warn err.message or \ "There was an error, couldn't switch to #{nextState.title} state!" @hideLoader?()