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
+1 -1
View File
@@ -36,7 +36,7 @@
"body-parser": "1.17.1", "body-parser": "1.17.1",
"client-sessions": "0.8.0", "client-sessions": "0.8.0",
"cookie-parser": "1.4.3", "cookie-parser": "1.4.3",
"crafting-guide-common": ">=3.0.0", "crafting-guide-common": ">=5.0.0",
"dotenv": "4.0.0", "dotenv": "4.0.0",
"express": "4.15.2", "express": "4.15.2",
"express-session": "1.15.2", "express-session": "1.15.2",
+14 -7
View File
@@ -74,11 +74,18 @@ client.startMonitoringStatus()
######################################################################################################################## ########################################################################################################################
SiteController = require './site/site_controller' {http, ModPackStore} = require("crafting-guide-common").api
global.site = site = new SiteController client:client, storage:storage modPackBaseUrl = "#{location.protocol}//#{location.hostname}:#{location.port}"
site.render() modPackStore = new ModPackStore http, modPackBaseUrl
site.loadDefaultModPack()
site.loadCurrentUser()
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. # 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={})-> constructor: (item)->
if not attributes.modPack? then throw new Error 'attributes.modPack is required' if item.constructor isnt Item then throw new Error "item must be an Item instance"
attributes.item ?= null @item = item
super attributes, options 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 ############################################################################# # Property Methods #############################################################################
findComponentInItems: -> findComponentInItems: ->
return @_findRecipesMatching (recipe)=> recipe.requires @item.slug return @_findItemsWithMatchingRecipes (recipe)=>
recipe.computeQuantityRequired @item
findSimilarItems: -> findSimilarItems: ->
return null unless @item?.modVersion? group = @mod.itemGroups[@item.groupName]
return unless group?
result = [] return null unless group.length > 0
@item.modVersion.eachItemInGroup @item.group, (item)=> return group
result.push item
return null unless result.length > 0 findToolForItem: ->
return result return @_findItemsWithMatchingRecipes (recipe)=>
return recipe.tools[@item.id]?
findRecipes: ->
return @modPack.findRecipes @item?.slug, [], alwaysFromOwningMod:true
findToolForRecipes: ->
return @_findRecipesMatching (recipe)=> recipe.requiresTool @item.slug
# Private Methods ############################################################################## # Private Methods ##############################################################################
_findRecipesMatching: (isAcceptable)-> _findItemsWithMatchingRecipes: (isMatching)->
return null unless @item?
result = {} 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 for modId, mod of @modPack.mods
return null unless result.length > 0 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. # 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: -> onDidModelChange: ->
@tryRefresh() @tryRefresh()
onDidModelSync: ->
@tryRefresh()
onWillRender: -> # do nothing onWillRender: -> # do nothing
onDidRender: -> # do nothing onDidRender: -> # do nothing
@@ -96,11 +94,12 @@ module.exports = class BaseController extends Backbone.View
onDidShow: -> # do nothing onDidShow: -> # do nothing
onWillChangeModel: (oldModel, newModel)-> onWillChangeModel: (oldModel, newModel)->
if oldModel?.on? if oldModel?.isObservable
@stopListening oldModel oldModel.off target:this
if newModel?.on?
@listenTo newModel, 'sync', (e)=> @onDidModelSync e if newModel?.isObservable
@listenTo newModel, 'change', (e)=> @onDidModelChange e newModel.on Observable::ANY, this, "onDidModelChange"
return newModel return newModel
# Property Methods ############################################################################# # Property Methods #############################################################################
@@ -28,7 +28,6 @@ module.exports = class BrowsePageController extends PageController
@_tileControllers = [] @_tileControllers = []
@_client.on c.event.change, => @tryRefresh() @_client.on c.event.change, => @tryRefresh()
@_modPack.on c.event.change, => @tryRefresh()
# Property Methods ############################################################################# # Property Methods #############################################################################
@@ -81,7 +80,7 @@ module.exports = class BrowsePageController extends PageController
_refreshModTiles: -> _refreshModTiles: ->
index = 0 index = 0
mods = @_modPack.getAllMods() mods = (mod for modId, mod of @_modPack.mods)
for mod in mods for mod in mods
controller = @_tileControllers[index] controller = @_tileControllers[index]
if not controller if not controller
@@ -29,12 +29,12 @@ module.exports = class ModTileController extends BaseController
super super
refresh: -> refresh: ->
@$link.attr 'href', c.url.mod modSlug:@model.slug @$link.attr 'href', c.url.mod modId:@model.id
@$logoImage.attr 'src', c.url.modIcon modSlug:@model.slug @$logoImage.attr 'src', c.url.modIcon modId:@model.id
@$title.text @model.name @$title.text @model.displayName
@$description.text @model.description @$description.text @model.description
if @model.enabled if @model.isEnabled
@$el.removeClass 'disabled' @$el.removeClass 'disabled'
else else
@$el.addClass 'disabled' @$el.addClass 'disabled'
@@ -5,39 +5,37 @@
# All rights reserved. # All rights reserved.
# #
BaseController = require '../../../base_controller' BaseController = require "../../../base_controller"
ItemDisplay = require "../../../../models/site/item_display"
######################################################################################################################## ########################################################################################################################
module.exports = class ItemTileController extends BaseController module.exports = class ItemTileController extends BaseController
constructor: (options={})-> constructor: (options={})->
if not options.imageLoader? then throw new Error 'options.imageLoader is required' 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.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"
options.templateName = 'common/item_group/item_tile'
super options super options
@_imageLoader = options.imageLoader @_imageLoader = options.imageLoader
@_modPack = options.modPack @_display = new ItemDisplay @model
# BaseController Overrides ##################################################################### # BaseController Overrides #####################################################################
onDidRender: -> onDidRender: ->
@$icon = @$('img') @$icon = @$("img")
@$name = @$('.itemName') @$name = @$(".itemName")
@$nameLink = @$('a') @$nameLink = @$("a")
super super
refresh: -> refresh: ->
display = @_modPack.findItemDisplay @model.slug @_imageLoader.load @_display.iconUrl, @$icon
@$name.html @_display.name
@_imageLoader.load display.iconUrl, @$icon @$nameLink.attr "href", @_display.url
@$name.html display.itemName
@$nameLink.attr 'href', display.itemUrl
# Backbone.View Overrides ###################################################################### # Backbone.View Overrides ######################################################################
events: -> events: ->
return _.extend super, return _.extend super,
'click a': 'routeLinkClick' "click a": "routeLinkClick"
@@ -2,8 +2,5 @@
.toggle .toggle
span.checkbox span.checkbox
span.label I have this mod in my modpack span.label I have this mod in my modpack
.version
span Version:
select
.warning. .warning.
<b>PLEASE NOTE:</b> Crafting plans, search, and other features will ignore items and recipes from this mod. <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. # All rights reserved.
# #
BaseController = require '../../base_controller' BaseController = require "../../base_controller"
{Mod} = require('crafting-guide-common').deprecated.game {Mod} = require("crafting-guide-common").models
######################################################################################################################## ########################################################################################################################
module.exports = class ModVersionSelectorController extends BaseController module.exports = class ModVersionSelectorController extends BaseController
constructor: (options={})-> constructor: (options={})->
if not options.model? then throw new Error 'options.model is required' if options.model?.constructor isnt Mod then throw new Error "options.model must be a Mod"
options.templateName = 'common/mod_version_selector' options.templateName = "common/mod_version_selector"
super options super options
# Event Methods ################################################################################ # Event Methods ################################################################################
onToggleEnabled: -> onToggleEnabled: ->
if @model.activeVersion is Mod.Version.None if not @model.isEnabled
tracker.trackEvent c.tracking.category.modPack, 'toggle-on', @model.slug tracker.trackEvent c.tracking.category.modPack, "toggle-on", @model.id
@model.activeVersion = Mod.Version.Latest @model.isEnabled = true
else else
tracker.trackEvent c.tracking.category.modPack, 'toggle-off', @model.slug tracker.trackEvent c.tracking.category.modPack, "toggle-off", @model.id
@model.activeVersion = Mod.Version.None @model.isEnabled = false
return 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 ##################################################################### # BaseController Overrides #####################################################################
onDidRender: -> onDidRender: ->
@$toggleSection = @$('.toggle') @$toggleSection = @$(".toggle")
@$versionSection = @$('.version') @$warning = @$(".warning")
@$versionSelector = @$('.version select')
@$warning = @$('.warning')
super super
refresh: -> refresh: ->
console.log "refreshing"
@_refreshEnabled() @_refreshEnabled()
@_refreshVersionSelector()
super super
# Backbone.View Overrides ###################################################################### # Backbone.View Overrides ######################################################################
events: -> events: ->
return _.extend super, return _.extend super,
'change .version select': 'onVersionChanged' "click .toggle": "onToggleEnabled"
'click .toggle': 'onToggleEnabled'
# Private Methods ############################################################################## # Private Methods ##############################################################################
_refreshEnabled: -> _refreshEnabled: ->
if @model.slug in c.requiredMods if @model.id in c.requiredMods
@hide @$toggleSection @hide @$toggleSection
else else
@show @$toggleSection @show @$toggleSection
if @model.activeVersion is Mod.Version.None if not @model.isEnabled
@$toggleSection.removeClass 'enabled' @$toggleSection.removeClass "enabled"
@show @$warning @show @$warning
else else
@$toggleSection.addClass 'enabled' @$toggleSection.addClass "enabled"
@hide @$warning @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. # All rights reserved.
# #
EditableFile = require '../../models/site/editable_file' EditableFile = require "../../models/site/editable_file"
{Item} = require('crafting-guide-common').deprecated.game {Item} = require("crafting-guide-common").models
ItemGroupController = require '../common/item_group/item_group_controller' ItemDisplay = require "../../models/site/item_display"
ItemPage = require '../../models/site/item_page' ItemGroupController = require "../common/item_group/item_group_controller"
{ItemSlug} = require('crafting-guide-common').deprecated.game ItemPage = require "../../models/site/item_page"
MarkdownSectionController = require '../common/markdown_section/markdown_section_controller' MarkdownSectionController = require "../common/markdown_section/markdown_section_controller"
MultiblockViewerController = require './multiblock_viewer/multiblock_viewer_controller' MultiblockViewerController = require "./multiblock_viewer/multiblock_viewer_controller"
PageController = require '../page_controller' PageController = require "../page_controller"
RecipeDetailController = require './recipe_detail/recipe_detail_controller' RecipeDetailController = require "./recipe_detail/recipe_detail_controller"
VideoController = require '../common/video/video_controller' VideoController = require "../common/video/video_controller"
w = require "when" w = require "when"
######################################################################################################################## ########################################################################################################################
@@ -24,34 +24,27 @@ module.exports = class ItemPageController extends PageController
@::FILE_UPLOAD_DELAY = 250 @::FILE_UPLOAD_DELAY = 250
constructor: (options={})-> constructor: (options={})->
if not options.client? then throw new Error 'options.client is required' if not options.model?.constructor is ItemPage then throw new Error "options.model must be an ItemPage instance"
if not options.itemSlug? then throw new Error 'options.itemSlug is required' 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.imageLoader? then throw new Error "options.imageLoader is required"
if not options.modPack? then throw new Error 'options.modPack 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' if not options.router? then throw new Error "options.router is required"
options.model ?= new ItemPage modPack:options.modPack
options.templateName ?= 'item_page'
options.templateName ?= "item_page"
super options super options
@_client = options.client @_client = options.client
@_descriptionFile = null @_descriptionFile = null
@_enterFeedback = options.enterFeedback @_enterFeedback = options.enterFeedback
@_imageLoader = options.imageLoader @_imageLoader = options.imageLoader
@_itemSlug = options.itemSlug
@_modPack = options.modPack @_modPack = options.modPack
@_router = options.router @_router = options.router
@_triggerEditing = options.login @_triggerEditing = options.login
@_modPack.on c.event.change, =>
@tryRefresh()
@trigger c.event.change
# Event Methods ################################################################################ # Event Methods ################################################################################
craftingPlanButtonClicked: -> 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 display = @_modPack.findItemDisplay @model.item.slug
@_router.navigate display.craftingUrl, trigger:true @_router.navigate display.craftingUrl, trigger:true
return false return false
@@ -59,23 +52,18 @@ module.exports = class ItemPageController extends PageController
# PageController Overrides ##################################################################### # PageController Overrides #####################################################################
getBreadcrumbs: -> getBreadcrumbs: ->
return [] unless @_itemSlug?
display = @_modPack.findItemDisplay @_itemSlug
return [] unless display.itemName? and display.modName
return [ return [
$("<a href='/browse'>Browse</a>") $("<a href='/browse'>Browse</a>")
$("<a href='#{c.url.mod modSlug:display.modSlug}'>#{display.modName}</a>") $("<a href='#{@model.display.modUrl}'>#{@model.display.modName}</a>")
$("<b>#{display.itemName}</b>") $("<b>#{display.name}</b>")
] ]
getExtraNav: -> getExtraNav: ->
itemSlug = @_modPack.chooseRandomItem() item = @_modPack.chooseRandomItem()
return null unless itemSlug? return null unless item?
itemDisplay = @_modPack.findItemDisplay itemSlug display = new ItemDisplay item
return $("<a href='#{itemDisplay.itemUrl}'>Random Item</a>") return $("<a href='#{display.url}'>Random Item</a>")
getMetaDescription: -> getMetaDescription: ->
return null unless @_itemSlug? return null unless @_itemSlug?
@@ -27,27 +27,16 @@ module.exports = class ModPageController extends PageController
@_modPack = options.modPack @_modPack = options.modPack
@_router = options.router @_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 ##################################################################### # PageController Overrides #####################################################################
getBreadcrumbs: -> getBreadcrumbs: ->
return [ return [
$('<a href="/browse">Browse</a>') $('<a href="/browse">Browse</a>')
$("<b>#{@model.name}</b>") $("<b>#{@model.displayName}</b>")
] ]
getTitle: -> getTitle: ->
return @model.name return @model.displayName
# BaseController Overrides ##################################################################### # BaseController Overrides #####################################################################
@@ -87,8 +76,8 @@ module.exports = class ModPageController extends PageController
@$documentationLink.attr 'href', @model.documentationUrl @$documentationLink.attr 'href', @model.documentationUrl
@$downloadLink.attr 'href', @model.downloadUrl @$downloadLink.attr 'href', @model.downloadUrl
@$homePageLink.attr 'href', @model.homePageUrl @$homePageLink.attr 'href', @model.homePageUrl
@$logo.attr 'src', c.url.modIcon modSlug:@model.slug @$logo.attr 'src', c.url.modIcon modId:@model.id
@$title.text @model.name @$title.text @model.displayName
else else
@$author.text '' @$author.text ''
@$description.text '' @$description.text ''
@@ -101,29 +90,24 @@ module.exports = class ModPageController extends PageController
_refreshItemGroups: -> _refreshItemGroups: ->
@_groupControllers ?= [] @_groupControllers ?= []
groupIndex = 0 groupIndex = 0
modVersion = @effectiveModVersion
if modVersion? for groupName, items of @model.itemGroups
modVersion.eachGroup (group)=> controller = @_groupControllers[groupIndex]
controller = @_groupControllers[groupIndex] if not controller?
items = modVersion.allItemsInGroup group controller = new ItemGroupController
if not controller? imageLoader: @_imageLoader
controller = new ItemGroupController model: items
imageLoader: @_imageLoader modPack: @_modPack
model: items router: @_router
modPack: @_modPack title: groupName
router: @_router
title: if group is Item.Group.Other then 'Items' else group
_.defer => @_groupControllers.push controller
@_groupControllers.push controller @$itemGroups.append controller.$el
@$itemGroups.append controller.$el controller.render()
controller.render() else
else controller.model = items
controller.modVersion = modVersion controller.refresh()
controller.model = items groupIndex++
controller.refresh()
groupIndex++
while @_groupControllers.length > groupIndex + 1 while @_groupControllers.length > groupIndex + 1
@_groupControllers.pop().remove() @_groupControllers.pop().remove()
+52 -48
View File
@@ -5,15 +5,16 @@
# All rights reserved. # All rights reserved.
# #
BrowsePageController = require './browse_page/browse_page_controller' BrowsePageController = require "./browse_page/browse_page_controller"
CraftPageController = require './craft_page/craft_page_controller' CraftPageController = require "./craft_page/craft_page_controller"
ItemPageController = require './item_page/item_page_controller' ItemPage = require "../models/site/item_page"
{ItemSlug} = require('crafting-guide-common').deprecated.game ItemPageController = require "./item_page/item_page_controller"
LoginPageController = require './login_page/login_page_controller' {ItemSlug} = require("crafting-guide-common").deprecated.game
ModPageController = require './mod_page/mod_page_controller' LoginPageController = require "./login_page/login_page_controller"
NewsPageController = require './news_page/news_page_controller' ModPageController = require "./mod_page/mod_page_controller"
TutorialPageController = require './tutorial_page/tutorial_page_controller' NewsPageController = require "./news_page/news_page_controller"
UrlParams = require './url_params' TutorialPageController = require "./tutorial_page/tutorial_page_controller"
UrlParams = require "./url_params"
######################################################################################################################## ########################################################################################################################
@@ -34,50 +35,50 @@ module.exports = class Router extends Backbone.Router
tracker.trackPageView() tracker.trackPageView()
routes: routes:
'': 'route__home' '': 'route__home'
'/': 'route__home' '/': 'route__home'
'/index.html': 'route__home' '/index.html': 'route__home'
'browse': 'route__browse' 'browse': 'route__browse'
'browse/': 'route__browse' 'browse/': 'route__browse'
'browse/index.html': 'route__browse' 'browse/index.html': 'route__browse'
'browse/:modSlug': 'route__browseMod' 'browse/:modId': 'route__browseMod'
'browse/:modSlug/': 'route__browseMod' 'browse/:modId/': 'route__browseMod'
'browse/:modSlug/index.html': 'route__browseMod' 'browse/:modId/index.html': 'route__browseMod'
'browse/:modSlug/:itemSlug': 'route__browseModItem' 'browse/:modId/:itemSlug': 'route__browseModItem'
'browse/:modSlug/:itemSlug/': 'route__browseModItem' 'browse/:modId/:itemSlug/': 'route__browseModItem'
'browse/:modSlug/:itemSlug/index.html': 'route__browseModItem' 'browse/:modId/:itemSlug/index.html': 'route__browseModItem'
'browse/:modSlug/tutorials/:tutorialSlug': 'route__browseTutorial' 'browse/:modId/tutorials/:tutorialSlug': 'route__browseTutorial'
'browse/:modSlug/tutorials/:tutorialSlug/': 'route__browseTutorial' 'browse/:modId/tutorials/:tutorialSlug/': 'route__browseTutorial'
'browse/:modSlug/tutorials/:tutorialSlug/index.html': 'route__browseTutorial' 'browse/:modId/tutorials/:tutorialSlug/index.html': 'route__browseTutorial'
'configure': 'route__configure' 'configure': 'route__configure'
'configure/': 'route__configure' 'configure/': 'route__configure'
'configure/index.html': 'route__configure' 'configure/index.html': 'route__configure'
'craft': 'route__craft' 'craft': 'route__craft'
'craft/': 'route__craft' 'craft/': 'route__craft'
'craft/index.html': 'route__craft' 'craft/index.html': 'route__craft'
'craft/:text': 'route__craft' 'craft/:text': 'route__craft'
'craft/:text/': 'route__craft' 'craft/:text/': 'route__craft'
'craft/:text/index.html': 'route__craft' 'craft/:text/index.html': 'route__craft'
'login': 'route__login' 'login': 'route__login'
'login/': 'route__login' 'login/': 'route__login'
'login/index.html': 'route__login' 'login/index.html': 'route__login'
'news': 'route__news' 'news': 'route__news'
'news/': 'route__news' 'news/': 'route__news'
'news/index.html': 'route__news' 'news/index.html': 'route__news'
'item/:itemSlug': 'deprecated__item' 'item/:itemSlug': 'deprecated__item'
'crafting/(:text)': 'deprecated__crafting' 'crafting/(:text)': 'deprecated__crafting'
'mod/:modSlug': 'deprecated__mod' 'mod/:modSlug': 'deprecated__mod'
'mod/:modSlug/:itemSlug': 'deprecated__modItem' 'mod/:modSlug/:itemSlug': 'deprecated__modItem'
# Route Methods ################################################################################ # Route Methods ################################################################################
@@ -92,15 +93,18 @@ module.exports = class Router extends Backbone.Router
route__browse: -> route__browse: ->
@_siteController.setPage 'browse', new BrowsePageController @_makeOptions {} @_siteController.setPage 'browse', new BrowsePageController @_makeOptions {}
route__browseMod: (modSlug)-> route__browseMod: (modId)->
controller = new ModPageController @_makeOptions() controller = new ModPageController @_makeOptions()
controller.model = @_siteController.modPack.getMod modSlug controller.model = @_siteController.modPack.mods[modId]
@_siteController.setPage 'browseMod', controller @_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} params = new UrlParams login:{type:'boolean', default:false}
slug = new ItemSlug modSlug, itemSlug controller = new ItemPageController @_makeOptions {model:itemPage, login:params.login}
controller = new ItemPageController @_makeOptions {itemSlug:slug, login:params.login}
@_siteController.setPage 'browseModItem', controller @_siteController.setPage 'browseModItem', controller
route__browseTutorial: (modSlug, tutorialSlug)-> route__browseTutorial: (modSlug, tutorialSlug)->
+7 -19
View File
@@ -7,6 +7,7 @@
AdsenseController = require './common/adsense/adsense_controller' AdsenseController = require './common/adsense/adsense_controller'
BaseController = require './base_controller' BaseController = require './base_controller'
c = require "../../common/constants"
FeedbackController = require './feedback/feedback_controller' FeedbackController = require './feedback/feedback_controller'
FileCache = require '../models/site/file_cache' FileCache = require '../models/site/file_cache'
FooterController = require './footer/footer_controller' FooterController = require './footer/footer_controller'
@@ -23,14 +24,14 @@ module.exports = class SiteController extends BaseController
constructor: (options={})-> constructor: (options={})->
if not options.client? then throw new Error 'options.client is required' 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' if not options.storage? then throw new Error 'options.storage is required'
options.el = 'html' options.el = 'html'
super options super options
@client = options.client @client = options.client
@fileCache = new FileCache c.url.modpackArchive()
@imageLoader = new ImageLoader defaultUrl:'/images/unknown.png' @imageLoader = new ImageLoader defaultUrl:'/images/unknown.png'
@modPack = new ModPack {}, fileCache:@fileCache @modPack = options.modPack
@router = new Router this @router = new Router this
@storage = options.storage @storage = options.storage
@@ -41,23 +42,6 @@ module.exports = class SiteController extends BaseController
# Public Methods ############################################################################### # 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: -> loadCurrentUser: ->
@client.getCurrentUser() @client.getCurrentUser()
.then (response)=> .then (response)=>
@@ -129,6 +113,10 @@ module.exports = class SiteController extends BaseController
@_feedbackController = @addChild FeedbackController, '.view__feedback' @_feedbackController = @addChild FeedbackController, '.view__feedback'
if global.env isnt "prerender"
@$pageContent.removeClass "hidden"
@$pageContentLoading.addClass "hidden"
# Private Methods ############################################################################## # Private Methods ##############################################################################
setPage: (page, controller)-> setPage: (page, controller)->
-3
View File
@@ -99,9 +99,6 @@ login.clientIds =
'staging': '3d75ed772ce5004180d6' 'staging': '3d75ed772ce5004180d6'
'production': 'ce71be7f66926ff6ff38' 'production': 'ce71be7f66926ff6ff38'
exports.modpack = modpack = {}
modpack.default = "crafting-guide-default"
exports.opacity = opacity = {} exports.opacity = opacity = {}
opacity.hidden = 1e-6 opacity.hidden = 1e-6
opacity.shown = 1 opacity.shown = 1