WIP
This commit is contained in:
+1
-1
@@ -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",
|
||||||
|
|||||||
@@ -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"
|
||||||
@@ -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]
|
|
||||||
@@ -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.
|
||||||
|
|||||||
+17
-55
@@ -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()
|
||||||
|
|||||||
@@ -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,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)->
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user