Files
website/src/scripts/models/item.coffee
T
Andrew Miner 96617a755e First real version of item detail page
* Split the InventoryTable view/controller out from the existing
  inventory view/controller. This is a simpler component which only
  includes the table itself, and not the scrollbox, panel or header
  used on the crafting page.
* Create the FullRecipe view/controller to represent the expanded
  version of a recipe shown on the item page (as compared to the
  terser version on the crafting page).
* Rename the existing Recipe view/controller to MinimalRecipe to
  avoid confusing the two.
* Refactor the CSS for the Stack view/controller so that it can be
  shared between the Inventory and InventoryTable views.
* Incorporate all these new controllers into the item page and hook
  up the necessary model logic to drive them.
2015-02-08 22:54:12 -08:00

72 lines
2.3 KiB
CoffeeScript

###
Crafting Guide - item.coffee
Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
BaseCollection = require './base_collection'
BaseModel = require './base_model'
{Event} = require '../constants'
Recipe = require './recipe'
########################################################################################################################
module.exports = class Item extends BaseModel
@Group = Other:'Other'
constructor: (attributes={}, options={})->
if not attributes.name? then throw new Error 'attributes.name is required'
attributes.group ?= Item.Group.Other
attributes.isGatherable ?= false
attributes.slug ?= _.slugify attributes.name
options.logEvents ?= false
super attributes, options
@_recipes = []
Object.defineProperties this,
isCraftable: { get:-> @_recipes.length > 0 }
primaryRecipe: { get:@getPrimaryRecipe }
# Public Methods ###############################################################################
addRecipe: (recipe)->
if recipe.slug isnt @slug then throw new Error "cannot add a recipe for #{recipe.slug} to #{@slug}"
@_recipes.push recipe
eachRecipe: (callback)->
for recipe in @_recipes
callback recipe
getPrimaryRecipe: ->
return @_recipes[0]
compareTo: (that)->
if this.slug isnt that.slug
return if this.slug < that.slug then -1 else +1
if this.name isnt that.name
return if this.name < that.name then -1 else +1
return 0
# Object Overrides #############################################################################
toString: ->
result = []
result.push @constructor.name
result.push ' ('; result.push @cid; result.push ') { '
result.push 'name:"'; result.push @name; result.push '", '
result.push 'isGatherable:'; result.push @isGatherable
if _.slugify(@name) isnt @slug
result.push ', slug:'; result.push @slug
if @_recipes.length > 0
result.push ', recipes:«'
result.push @_recipes.length
result.push ' items»'
result.push '}'
return result.join ''