Files
website/src/coffee/controllers/item_selector_element_controller.coffee
T

79 lines
2.3 KiB
CoffeeScript

###
Crafting Guide - item_selector_element_controller.coffee
Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
BaseController = require './base_controller'
{Event} = require '../constants'
########################################################################################################################
module.exports = class ItemSelectorElementController extends BaseController
constructor: (options={})->
if not options.model? then throw new Error 'options.model is required'
options.onClicked ?= (controller)-> # do nothing
options.onSelected ?= (controller)-> # do nothing
options.templateName = 'item_selector_element'
options.useAnimations = false
super options
@onClicked = options.onClicked
@onSelected = options.onSelected
# Property Methods #############################################################################
isSelected: ->
return @_selected
setSelected: (newSelected)->
oldSelected = @_selected
return if newSelected is oldSelected
@_selected = newSelected
@tryRefresh()
@trigger Event.change + ':selected', this, oldSelected, newSelected
@trigger Event.change, this
Object.defineProperties @prototype,
selected: {get:@prototype.isSelected, set:@prototype.setSelected}
# BaseController Overrides #####################################################################
onDidRender: ->
@$icon = @$('img')
@$name = @$('.name p')
@$modName = @$('.modName p')
super
refresh: ->
@$icon.attr 'src', @model.iconUrl
@$name.html @model.itemName
@$modName.html @model.modName
if @_selected
@$el.addClass 'selected'
else
@$el.removeClass 'selected'
super
# Backbone.View Overrides ######################################################################
events: ->
return _.extend super,
'click': '_onClick'
'mouseenter': '_onMouseEnter'
# Private Methods ##############################################################################
_onClick: (event)->
event.preventDefault()
@onClicked this
_onMouseEnter: (event)->
event.preventDefault()
@onSelected this