WIP
This commit is contained in:
+1
-1
@@ -36,7 +36,7 @@
|
||||
"body-parser": "1.17.1",
|
||||
"client-sessions": "0.8.0",
|
||||
"cookie-parser": "1.4.3",
|
||||
"crafting-guide-common": ">=3.0.0",
|
||||
"crafting-guide-common": ">=5.0.0",
|
||||
"dotenv": "4.0.0",
|
||||
"express": "4.15.2",
|
||||
"express-session": "1.15.2",
|
||||
|
||||
@@ -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"
|
||||
@@ -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]
|
||||
@@ -5,6 +5,7 @@
|
||||
# All rights reserved.
|
||||
#
|
||||
|
||||
{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.
|
||||
|
||||
+17
-55
@@ -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,26 +90,21 @@ module.exports = class ModPageController extends PageController
|
||||
_refreshItemGroups: ->
|
||||
@_groupControllers ?= []
|
||||
groupIndex = 0
|
||||
modVersion = @effectiveModVersion
|
||||
|
||||
if modVersion?
|
||||
modVersion.eachGroup (group)=>
|
||||
for groupName, items of @model.itemGroups
|
||||
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
|
||||
title: groupName
|
||||
|
||||
_.defer =>
|
||||
@_groupControllers.push controller
|
||||
@$itemGroups.append controller.$el
|
||||
controller.render()
|
||||
else
|
||||
controller.modVersion = modVersion
|
||||
controller.model = items
|
||||
controller.refresh()
|
||||
groupIndex++
|
||||
|
||||
@@ -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"
|
||||
|
||||
########################################################################################################################
|
||||
|
||||
@@ -42,17 +43,17 @@ module.exports = class Router extends Backbone.Router
|
||||
'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'
|
||||
@@ -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,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)->
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user