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