This commit is contained in:
Andrew Miner
2017-06-15 22:39:17 -07:00
parent 3bc7c4cf89
commit 8b43c53a9e
16 changed files with 267 additions and 325 deletions
+14 -7
View File
@@ -74,11 +74,18 @@ client.startMonitoringStatus()
########################################################################################################################
SiteController = require './site/site_controller'
global.site = site = new SiteController client:client, storage:storage
site.render()
site.loadDefaultModPack()
site.loadCurrentUser()
{http, ModPackStore} = require("crafting-guide-common").api
modPackBaseUrl = "#{location.protocol}//#{location.hostname}:#{location.port}"
modPackStore = new ModPackStore http, modPackBaseUrl
Backbone.history.start pushState:true
logger.info -> "CraftingGuide is ready"
########################################################################################################################
modPackStore.load c.modPacks.default
.then (modPack)->
SiteController = require './site/site_controller'
global.site = site = new SiteController client:client, storage:storage, modPack:modPack
site.render()
site.loadCurrentUser()
Backbone.history.start pushState:true
logger.info -> "CraftingGuide is ready"
@@ -0,0 +1,54 @@
#
# Crafting Guide - item_page.coffee
#
# Copyright © 2014-2017 by Redwood Labs
# All rights reserved.
#
_ = require "../../../common/underscore"
c = require "../../../common/constants"
{Inventory} = require("crafting-guide-common").models
########################################################################################################################
module.exports = class ItemDisplay
constructor: (item)->
@item = item
# Properties ###################################################################################
Object.defineProperties @prototype,
craftingUrl:
get: ->
inventory = new Inventory
inventory.add @item
c.url.crafting inventoryText:inventory.unparse()
iconUrl:
get: -> return c.url.itemIcon modId:@_item.mod.id, itemSlug:@slug
set: -> throw new Error "iconUrl cannot be assigned"
item:
get: -> return @_item
set: (item)->
if @_item? then throw new Error "item cannot be re-assigned"
if not item? then throw new Error "item is required"
@_item = item
modUrl:
get: -> return c.url.mod modId:@item.mod.id
set: -> throw new Error "modUrl cannot be assigned"
name:
get: -> return @item.displayName
set: -> throw new Error "name cannot be assigned"
slug:
get: -> return _.slugify @name
set: -> throw new Error "slug cannot be assigned"
url:
get: -> return c.url.item modId:@_item.mod.id, itemSlug:@slug
set: -> throw new Error "url cannot be assigned"
+53 -32
View File
@@ -5,53 +5,74 @@
# All rights reserved.
#
{BaseModel} = require("crafting-guide-common").deprecated
{Item} = require("crafting-guide-common").models
ItemDisplay = require "../item_display"
{Observable} = require("crafting-guide-common").util
########################################################################################################################
module.exports = class ItemPage extends BaseModel
module.exports = class ItemPage extends Observable
constructor: (attributes={}, options={})->
if not attributes.modPack? then throw new Error 'attributes.modPack is required'
attributes.item ?= null
super attributes, options
constructor: (item)->
if item.constructor isnt Item then throw new Error "item must be an Item instance"
@item = item
super
# Properties ###################################################################################
Object.defineProperties @prototype,
item:
get: -> return @_item
set: (item)->
if @_item? then throw new Error "item cannot be reassigned"
if not item? then throw new Error "item is required"
@_item = item
itemDisplay:
get: -> return @_itemDisplay ?= new ItemDisplay @item
mod:
get: -> return @_item.mod
set: -> throw new Error "mod cannot be assigned"
modPack:
get: -> return @mod.modPack
set: -> throw new Error "modPack cannot be assigned"
# Property Methods #############################################################################
findComponentInItems: ->
return @_findRecipesMatching (recipe)=> recipe.requires @item.slug
return @_findItemsWithMatchingRecipes (recipe)=>
recipe.computeQuantityRequired @item
findSimilarItems: ->
return null unless @item?.modVersion?
group = @mod.itemGroups[@item.groupName]
return unless group?
result = []
@item.modVersion.eachItemInGroup @item.group, (item)=>
result.push item
return null unless group.length > 0
return group
return null unless result.length > 0
return result
findRecipes: ->
return @modPack.findRecipes @item?.slug, [], alwaysFromOwningMod:true
findToolForRecipes: ->
return @_findRecipesMatching (recipe)=> recipe.requiresTool @item.slug
findToolForItem: ->
return @_findItemsWithMatchingRecipes (recipe)=>
return recipe.tools[@item.id]?
# Private Methods ##############################################################################
_findRecipesMatching: (isAcceptable)->
return null unless @item?
_findItemsWithMatchingRecipes: (isMatching)->
result = {}
@modPack.eachMod (mod)=>
mod.eachRecipe (recipe)=>
if isAcceptable recipe
for outputStack in recipe.output
continue if recipe.isPassThroughFor outputStack.itemSlug
outputItem = @modPack.findItem outputStack.itemSlug, includeDisabled:true
result[outputItem.slug] = outputItem
result = _.values result
return null unless result.length > 0
for modId, mod of @modPack.mods
for itemId, item of mod.items
for recipeId, recipe of item.recipes
if isMatching(recipe)
result[item.id] = item
return result.sort (a, b)-> a.compareTo b
result = (item for itemId, item of result)
result.sort (a, b)->
if not a?.displayName? and not b?.displayName? then return 0
if not b?.displayName? then return +1
if not a?.displayName? then return +1
return a.displayName.localeCompare b.displayName
return result
@@ -1,56 +0,0 @@
#
# Crafting Guide - mod_pack_store.coffee
#
# Copyright © 2014-2017 by Redwood Labs
# All rights reserved.
#
ModPackJsonParser = require "../parsing/mod_pack_json_parser"
w = require "when"
########################################################################################################################
module.exports = class ModPackStore
constructor: ->
@_data = {}
@_loading = {}
@_parser = new ModPackJsonParser
# Class Methods ################################################################################
Object.defineProperties ModPackStore,
instance:
get: ->
@_instance ?= new ModPackStore
return @_instance
set: ->
throw new Error "cannot assign instance"
# Public Methods ###############################################################################
get: (modPackId)->
return @_data[modPackId]
load: (modPackId)->
if not @_loading[modPackId]?
@_loading[modPackId] = w.promise (resolve, reject)->
url = c.url.modPackArchive modPackId:modPackId
onError = (xhr, status, message)=>
logger.error "failed to load mod pack #{modPackId}: #{status}#{message}"
reject new Error message
onSuccess = (data, status, xhr)=>
logger.info "laoded mod pack: #{modPackId}"
try
@_parser.reset()
modPack = @_parser.parse data, url
@_data[modPack.id] = modPack
resolve modPack
catch error
reject error
$.ajax dataType: "text", error: onError, success: onSuccess, url: url
return @_loading[modPackId]
+8 -9
View File
@@ -5,7 +5,8 @@
# All rights reserved.
#
templates = require './templates'
{Observable} = require("crafting-guide-common").util
templates = require './templates'
########################################################################################################################
@@ -84,9 +85,6 @@ module.exports = class BaseController extends Backbone.View
onDidModelChange: ->
@tryRefresh()
onDidModelSync: ->
@tryRefresh()
onWillRender: -> # do nothing
onDidRender: -> # do nothing
@@ -96,11 +94,12 @@ module.exports = class BaseController extends Backbone.View
onDidShow: -> # do nothing
onWillChangeModel: (oldModel, newModel)->
if oldModel?.on?
@stopListening oldModel
if newModel?.on?
@listenTo newModel, 'sync', (e)=> @onDidModelSync e
@listenTo newModel, 'change', (e)=> @onDidModelChange e
if oldModel?.isObservable
oldModel.off target:this
if newModel?.isObservable
newModel.on Observable::ANY, this, "onDidModelChange"
return newModel
# Property Methods #############################################################################
@@ -28,7 +28,6 @@ module.exports = class BrowsePageController extends PageController
@_tileControllers = []
@_client.on c.event.change, => @tryRefresh()
@_modPack.on c.event.change, => @tryRefresh()
# Property Methods #############################################################################
@@ -81,7 +80,7 @@ module.exports = class BrowsePageController extends PageController
_refreshModTiles: ->
index = 0
mods = @_modPack.getAllMods()
mods = (mod for modId, mod of @_modPack.mods)
for mod in mods
controller = @_tileControllers[index]
if not controller
@@ -29,12 +29,12 @@ module.exports = class ModTileController extends BaseController
super
refresh: ->
@$link.attr 'href', c.url.mod modSlug:@model.slug
@$logoImage.attr 'src', c.url.modIcon modSlug:@model.slug
@$title.text @model.name
@$link.attr 'href', c.url.mod modId:@model.id
@$logoImage.attr 'src', c.url.modIcon modId:@model.id
@$title.text @model.displayName
@$description.text @model.description
if @model.enabled
if @model.isEnabled
@$el.removeClass 'disabled'
else
@$el.addClass 'disabled'
@@ -5,39 +5,37 @@
# All rights reserved.
#
BaseController = require '../../../base_controller'
BaseController = require "../../../base_controller"
ItemDisplay = require "../../../../models/site/item_display"
########################################################################################################################
module.exports = class ItemTileController extends BaseController
constructor: (options={})->
if not options.imageLoader? then throw new Error 'options.imageLoader is required'
if not options.model? then throw new Error 'options.model is required'
if not options.modPack? then throw new Error 'options.modPack is required'
options.templateName = 'common/item_group/item_tile'
if not options.imageLoader? then throw new Error "options.imageLoader is required"
if not options.model? then throw new Error "options.model is required"
options.templateName = "common/item_group/item_tile"
super options
@_imageLoader = options.imageLoader
@_modPack = options.modPack
@_display = new ItemDisplay @model
# BaseController Overrides #####################################################################
onDidRender: ->
@$icon = @$('img')
@$name = @$('.itemName')
@$nameLink = @$('a')
@$icon = @$("img")
@$name = @$(".itemName")
@$nameLink = @$("a")
super
refresh: ->
display = @_modPack.findItemDisplay @model.slug
@_imageLoader.load display.iconUrl, @$icon
@$name.html display.itemName
@$nameLink.attr 'href', display.itemUrl
@_imageLoader.load @_display.iconUrl, @$icon
@$name.html @_display.name
@$nameLink.attr "href", @_display.url
# Backbone.View Overrides ######################################################################
events: ->
return _.extend super,
'click a': 'routeLinkClick'
"click a": "routeLinkClick"
@@ -2,8 +2,5 @@
.toggle
span.checkbox
span.label I have this mod in my modpack
.version
span Version:
select
.warning.
<b>PLEASE NOTE:</b> Crafting plans, search, and other features will ignore items and recipes from this mod.
@@ -5,97 +5,59 @@
# All rights reserved.
#
BaseController = require '../../base_controller'
{Mod} = require('crafting-guide-common').deprecated.game
BaseController = require "../../base_controller"
{Mod} = require("crafting-guide-common").models
########################################################################################################################
module.exports = class ModVersionSelectorController extends BaseController
constructor: (options={})->
if not options.model? then throw new Error 'options.model is required'
options.templateName = 'common/mod_version_selector'
if options.model?.constructor isnt Mod then throw new Error "options.model must be a Mod"
options.templateName = "common/mod_version_selector"
super options
# Event Methods ################################################################################
onToggleEnabled: ->
if @model.activeVersion is Mod.Version.None
tracker.trackEvent c.tracking.category.modPack, 'toggle-on', @model.slug
@model.activeVersion = Mod.Version.Latest
if not @model.isEnabled
tracker.trackEvent c.tracking.category.modPack, "toggle-on", @model.id
@model.isEnabled = true
else
tracker.trackEvent c.tracking.category.modPack, 'toggle-off', @model.slug
@model.activeVersion = Mod.Version.None
tracker.trackEvent c.tracking.category.modPack, "toggle-off", @model.id
@model.isEnabled = false
return false
onVersionChanged: ->
@model.activeVersion = @$versionSelector.val()
tracker.trackEvent c.tracking.category.modPack, 'select-version', "#{@model.slug}@#{@model.activeVersion}"
return false
# Property Methods #############################################################################
Object.defineProperties @prototype,
effectiveModVersion:
get: ->
modVersion = @model.activeModVersion
modVersion ?= @model.getModVersion Mod.Version.Latest
modVersion.fetch() if modVersion?
return modVersion
# BaseController Overrides #####################################################################
onDidRender: ->
@$toggleSection = @$('.toggle')
@$versionSection = @$('.version')
@$versionSelector = @$('.version select')
@$warning = @$('.warning')
@$toggleSection = @$(".toggle")
@$warning = @$(".warning")
super
refresh: ->
console.log "refreshing"
@_refreshEnabled()
@_refreshVersionSelector()
super
# Backbone.View Overrides ######################################################################
events: ->
return _.extend super,
'change .version select': 'onVersionChanged'
'click .toggle': 'onToggleEnabled'
"click .toggle": "onToggleEnabled"
# Private Methods ##############################################################################
_refreshEnabled: ->
if @model.slug in c.requiredMods
if @model.id in c.requiredMods
@hide @$toggleSection
else
@show @$toggleSection
if @model.activeVersion is Mod.Version.None
@$toggleSection.removeClass 'enabled'
if not @model.isEnabled
@$toggleSection.removeClass "enabled"
@show @$warning
else
@$toggleSection.addClass 'enabled'
@$toggleSection.addClass "enabled"
@hide @$warning
_refreshVersionSelector: ->
modVersions = @model.modVersions
if (@model.activeVersion is Mod.Version.None) or modVersions.length < 2
@hide @$versionSection
else
@show @$versionSection
selectedModVersion = @effectiveModVersion
@$versionSelector.empty()
for modVersion in @model.modVersions
$option = $("<option value=\"#{modVersion.version}\">#{modVersion.version}</option>")
if modVersion is selectedModVersion
$option.attr 'selected', 'true'
@$versionSelector.append $option
@$versionSelector.css display:''
@@ -5,16 +5,16 @@
# All rights reserved.
#
EditableFile = require '../../models/site/editable_file'
{Item} = require('crafting-guide-common').deprecated.game
ItemGroupController = require '../common/item_group/item_group_controller'
ItemPage = require '../../models/site/item_page'
{ItemSlug} = require('crafting-guide-common').deprecated.game
MarkdownSectionController = require '../common/markdown_section/markdown_section_controller'
MultiblockViewerController = require './multiblock_viewer/multiblock_viewer_controller'
PageController = require '../page_controller'
RecipeDetailController = require './recipe_detail/recipe_detail_controller'
VideoController = require '../common/video/video_controller'
EditableFile = require "../../models/site/editable_file"
{Item} = require("crafting-guide-common").models
ItemDisplay = require "../../models/site/item_display"
ItemGroupController = require "../common/item_group/item_group_controller"
ItemPage = require "../../models/site/item_page"
MarkdownSectionController = require "../common/markdown_section/markdown_section_controller"
MultiblockViewerController = require "./multiblock_viewer/multiblock_viewer_controller"
PageController = require "../page_controller"
RecipeDetailController = require "./recipe_detail/recipe_detail_controller"
VideoController = require "../common/video/video_controller"
w = require "when"
########################################################################################################################
@@ -24,34 +24,27 @@ module.exports = class ItemPageController extends PageController
@::FILE_UPLOAD_DELAY = 250
constructor: (options={})->
if not options.client? then throw new Error 'options.client is required'
if not options.itemSlug? then throw new Error 'options.itemSlug is required'
if not options.imageLoader? then throw new Error 'options.imageLoader is required'
if not options.modPack? then throw new Error 'options.modPack is required'
if not options.router? then throw new Error 'options.router is required'
options.model ?= new ItemPage modPack:options.modPack
options.templateName ?= 'item_page'
if not options.model?.constructor is ItemPage then throw new Error "options.model must be an ItemPage instance"
if not options.client? then throw new Error "options.client is required"
if not options.imageLoader? then throw new Error "options.imageLoader is required"
if not options.modPack? then throw new Error "options.modPack is required"
if not options.router? then throw new Error "options.router is required"
options.templateName ?= "item_page"
super options
@_client = options.client
@_descriptionFile = null
@_enterFeedback = options.enterFeedback
@_imageLoader = options.imageLoader
@_itemSlug = options.itemSlug
@_modPack = options.modPack
@_router = options.router
@_triggerEditing = options.login
@_modPack.on c.event.change, =>
@tryRefresh()
@trigger c.event.change
# Event Methods ################################################################################
craftingPlanButtonClicked: ->
tracker.trackEvent c.tracking.category.craft, 'view-crafting-plan', @model.item.slug
tracker.trackEvent c.tracking.category.craft, "view-crafting-plan", @model.item.slug
display = @_modPack.findItemDisplay @model.item.slug
@_router.navigate display.craftingUrl, trigger:true
return false
@@ -59,23 +52,18 @@ module.exports = class ItemPageController extends PageController
# PageController Overrides #####################################################################
getBreadcrumbs: ->
return [] unless @_itemSlug?
display = @_modPack.findItemDisplay @_itemSlug
return [] unless display.itemName? and display.modName
return [
$("<a href='/browse'>Browse</a>")
$("<a href='#{c.url.mod modSlug:display.modSlug}'>#{display.modName}</a>")
$("<b>#{display.itemName}</b>")
$("<a href='#{@model.display.modUrl}'>#{@model.display.modName}</a>")
$("<b>#{display.name}</b>")
]
getExtraNav: ->
itemSlug = @_modPack.chooseRandomItem()
return null unless itemSlug?
item = @_modPack.chooseRandomItem()
return null unless item?
itemDisplay = @_modPack.findItemDisplay itemSlug
return $("<a href='#{itemDisplay.itemUrl}'>Random Item</a>")
display = new ItemDisplay item
return $("<a href='#{display.url}'>Random Item</a>")
getMetaDescription: ->
return null unless @_itemSlug?
@@ -27,27 +27,16 @@ module.exports = class ModPageController extends PageController
@_modPack = options.modPack
@_router = options.router
# Property Methods #############################################################################
Object.defineProperties @prototype,
effectiveModVersion:
get: ->
modVersion = @model.activeModVersion
modVersion ?= @model.getModVersion Mod.Version.Latest
modVersion.fetch() if modVersion?
return modVersion
# PageController Overrides #####################################################################
getBreadcrumbs: ->
return [
$('<a href="/browse">Browse</a>')
$("<b>#{@model.name}</b>")
$("<b>#{@model.displayName}</b>")
]
getTitle: ->
return @model.name
return @model.displayName
# BaseController Overrides #####################################################################
@@ -87,8 +76,8 @@ module.exports = class ModPageController extends PageController
@$documentationLink.attr 'href', @model.documentationUrl
@$downloadLink.attr 'href', @model.downloadUrl
@$homePageLink.attr 'href', @model.homePageUrl
@$logo.attr 'src', c.url.modIcon modSlug:@model.slug
@$title.text @model.name
@$logo.attr 'src', c.url.modIcon modId:@model.id
@$title.text @model.displayName
else
@$author.text ''
@$description.text ''
@@ -101,29 +90,24 @@ module.exports = class ModPageController extends PageController
_refreshItemGroups: ->
@_groupControllers ?= []
groupIndex = 0
modVersion = @effectiveModVersion
if modVersion?
modVersion.eachGroup (group)=>
controller = @_groupControllers[groupIndex]
items = modVersion.allItemsInGroup group
if not controller?
controller = new ItemGroupController
imageLoader: @_imageLoader
model: items
modPack: @_modPack
router: @_router
title: if group is Item.Group.Other then 'Items' else group
for groupName, items of @model.itemGroups
controller = @_groupControllers[groupIndex]
if not controller?
controller = new ItemGroupController
imageLoader: @_imageLoader
model: items
modPack: @_modPack
router: @_router
title: groupName
_.defer =>
@_groupControllers.push controller
@$itemGroups.append controller.$el
controller.render()
else
controller.modVersion = modVersion
controller.model = items
controller.refresh()
groupIndex++
@_groupControllers.push controller
@$itemGroups.append controller.$el
controller.render()
else
controller.model = items
controller.refresh()
groupIndex++
while @_groupControllers.length > groupIndex + 1
@_groupControllers.pop().remove()
+52 -48
View File
@@ -5,15 +5,16 @@
# All rights reserved.
#
BrowsePageController = require './browse_page/browse_page_controller'
CraftPageController = require './craft_page/craft_page_controller'
ItemPageController = require './item_page/item_page_controller'
{ItemSlug} = require('crafting-guide-common').deprecated.game
LoginPageController = require './login_page/login_page_controller'
ModPageController = require './mod_page/mod_page_controller'
NewsPageController = require './news_page/news_page_controller'
TutorialPageController = require './tutorial_page/tutorial_page_controller'
UrlParams = require './url_params'
BrowsePageController = require "./browse_page/browse_page_controller"
CraftPageController = require "./craft_page/craft_page_controller"
ItemPage = require "../models/site/item_page"
ItemPageController = require "./item_page/item_page_controller"
{ItemSlug} = require("crafting-guide-common").deprecated.game
LoginPageController = require "./login_page/login_page_controller"
ModPageController = require "./mod_page/mod_page_controller"
NewsPageController = require "./news_page/news_page_controller"
TutorialPageController = require "./tutorial_page/tutorial_page_controller"
UrlParams = require "./url_params"
########################################################################################################################
@@ -34,50 +35,50 @@ module.exports = class Router extends Backbone.Router
tracker.trackPageView()
routes:
'': 'route__home'
'/': 'route__home'
'/index.html': 'route__home'
'': 'route__home'
'/': 'route__home'
'/index.html': 'route__home'
'browse': 'route__browse'
'browse/': 'route__browse'
'browse/index.html': 'route__browse'
'browse': 'route__browse'
'browse/': 'route__browse'
'browse/index.html': 'route__browse'
'browse/:modSlug': 'route__browseMod'
'browse/:modSlug/': 'route__browseMod'
'browse/:modSlug/index.html': 'route__browseMod'
'browse/:modId': 'route__browseMod'
'browse/:modId/': 'route__browseMod'
'browse/:modId/index.html': 'route__browseMod'
'browse/:modSlug/:itemSlug': 'route__browseModItem'
'browse/:modSlug/:itemSlug/': 'route__browseModItem'
'browse/:modSlug/:itemSlug/index.html': 'route__browseModItem'
'browse/:modId/:itemSlug': 'route__browseModItem'
'browse/:modId/:itemSlug/': 'route__browseModItem'
'browse/:modId/:itemSlug/index.html': 'route__browseModItem'
'browse/:modSlug/tutorials/:tutorialSlug': 'route__browseTutorial'
'browse/:modSlug/tutorials/:tutorialSlug/': 'route__browseTutorial'
'browse/:modSlug/tutorials/:tutorialSlug/index.html': 'route__browseTutorial'
'browse/:modId/tutorials/:tutorialSlug': 'route__browseTutorial'
'browse/:modId/tutorials/:tutorialSlug/': 'route__browseTutorial'
'browse/:modId/tutorials/:tutorialSlug/index.html': 'route__browseTutorial'
'configure': 'route__configure'
'configure/': 'route__configure'
'configure/index.html': 'route__configure'
'configure': 'route__configure'
'configure/': 'route__configure'
'configure/index.html': 'route__configure'
'craft': 'route__craft'
'craft/': 'route__craft'
'craft/index.html': 'route__craft'
'craft': 'route__craft'
'craft/': 'route__craft'
'craft/index.html': 'route__craft'
'craft/:text': 'route__craft'
'craft/:text/': 'route__craft'
'craft/:text/index.html': 'route__craft'
'craft/:text': 'route__craft'
'craft/:text/': 'route__craft'
'craft/:text/index.html': 'route__craft'
'login': 'route__login'
'login/': 'route__login'
'login/index.html': 'route__login'
'login': 'route__login'
'login/': 'route__login'
'login/index.html': 'route__login'
'news': 'route__news'
'news/': 'route__news'
'news/index.html': 'route__news'
'news': 'route__news'
'news/': 'route__news'
'news/index.html': 'route__news'
'item/:itemSlug': 'deprecated__item'
'crafting/(:text)': 'deprecated__crafting'
'mod/:modSlug': 'deprecated__mod'
'mod/:modSlug/:itemSlug': 'deprecated__modItem'
'item/:itemSlug': 'deprecated__item'
'crafting/(:text)': 'deprecated__crafting'
'mod/:modSlug': 'deprecated__mod'
'mod/:modSlug/:itemSlug': 'deprecated__modItem'
# Route Methods ################################################################################
@@ -92,15 +93,18 @@ module.exports = class Router extends Backbone.Router
route__browse: ->
@_siteController.setPage 'browse', new BrowsePageController @_makeOptions {}
route__browseMod: (modSlug)->
route__browseMod: (modId)->
controller = new ModPageController @_makeOptions()
controller.model = @_siteController.modPack.getMod modSlug
controller.model = @_siteController.modPack.mods[modId]
@_siteController.setPage 'browseMod', controller
route__browseModItem: (modSlug, itemSlug)->
route__browseModItem: (modId, itemSlug)->
item = @_siteController.modPack.findItemBySlug itemSlug, modId:modId
if not item? then throw new Error "could not find item #{modId}__#{itemSlug}"
itemPage = new ItemPage item
params = new UrlParams login:{type:'boolean', default:false}
slug = new ItemSlug modSlug, itemSlug
controller = new ItemPageController @_makeOptions {itemSlug:slug, login:params.login}
controller = new ItemPageController @_makeOptions {model:itemPage, login:params.login}
@_siteController.setPage 'browseModItem', controller
route__browseTutorial: (modSlug, tutorialSlug)->
+7 -19
View File
@@ -7,6 +7,7 @@
AdsenseController = require './common/adsense/adsense_controller'
BaseController = require './base_controller'
c = require "../../common/constants"
FeedbackController = require './feedback/feedback_controller'
FileCache = require '../models/site/file_cache'
FooterController = require './footer/footer_controller'
@@ -23,14 +24,14 @@ module.exports = class SiteController extends BaseController
constructor: (options={})->
if not options.client? then throw new Error 'options.client is required'
if not options.modPack? then throw new Error 'options.modPack is required'
if not options.storage? then throw new Error 'options.storage is required'
options.el = 'html'
super options
@client = options.client
@fileCache = new FileCache c.url.modpackArchive()
@imageLoader = new ImageLoader defaultUrl:'/images/unknown.png'
@modPack = new ModPack {}, fileCache:@fileCache
@modPack = options.modPack
@router = new Router this
@storage = options.storage
@@ -41,23 +42,6 @@ module.exports = class SiteController extends BaseController
# Public Methods ###############################################################################
loadDefaultModPack: ->
makeResponder = (m)-> return ->
m.activeModVersion.fetch() if m.activeModVersion?
for modSlug, modData of c.defaultMods
mod = new Mod {slug:modSlug}, {fileCache:@fileCache}
mod.on c.event.change + ':activeModVersion', makeResponder mod
@storage.register "mod:#{mod.slug}", mod, 'activeVersion', modData.defaultVersion
mod.fetch()
@modPack.addMod mod
if global.env isnt 'prerender'
@modPack.once c.event.sync, =>
@$pageContent.removeClass 'hidden'
@$pageContentLoading.addClass 'hidden'
loadCurrentUser: ->
@client.getCurrentUser()
.then (response)=>
@@ -129,6 +113,10 @@ module.exports = class SiteController extends BaseController
@_feedbackController = @addChild FeedbackController, '.view__feedback'
if global.env isnt "prerender"
@$pageContent.removeClass "hidden"
@$pageContentLoading.addClass "hidden"
# Private Methods ##############################################################################
setPage: (page, controller)->
-3
View File
@@ -99,9 +99,6 @@ login.clientIds =
'staging': '3d75ed772ce5004180d6'
'production': 'ce71be7f66926ff6ff38'
exports.modpack = modpack = {}
modpack.default = "crafting-guide-default"
exports.opacity = opacity = {}
opacity.hidden = 1e-6
opacity.shown = 1