Convert site to a single JavaScript archive

* Convert build to use a single JavaScript file on the site (instead
  of downloading each library separately). This also means that all
  global variables (e.g., `$` for JQuery, `_` for Underscore.js) can
  be removed.
* Remove unused scripts and/or move them to a more appropriate repo
* Update the `deploy` script to work with CircleCI's automation
* Update markdown display code to allow images to be located with the
  markdown data files instead of the pre-rendered index pages
This commit is contained in:
Andrew Miner
2015-04-29 19:58:53 -07:00
parent 414017f689
commit 930b8049a2
60 changed files with 195 additions and 359 deletions
+21 -16
View File
@@ -5,13 +5,15 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
_ = require 'underscore'
exports.Adsense = Adsense = {}
Adsense.clientId = 'ca-pub-6593013914878730'
Adsense.slotIds = ['7613920409', '9574673605', '3388539204']
# Minecraft must be first
exports.DefaultMods =
minecraft: { defaultVersion: '1.7.10' }
minecraft: { defaultVersion: '1.7.10' } # Minecraft must be first
applied_energistics_2: { defaultVersion: 'rv1-stable-1' }
big_reactors: { defaultVersion: '0.4.2A2' }
buildcraft: { defaultVersion: '6.4.6' }
@@ -110,20 +112,23 @@ exports.RequiredMods = [ 'minecraft' ]
exports.Text = Text = {}
Text.title = 'The Ultimate Minecraft Crafting Guide'
exports.Url = Url = {}
Url.crafting = _.template "/craft/<%= inventoryText %>"
Url.item = _.template "/browse/<%= modSlug %>/<%= itemSlug %>/"
Url.itemData = _.template "/data/<%= modSlug %>/items/<%= itemSlug %>/item.cg"
Url.itemIcon = _.template "/data/<%= modSlug %>/items/<%= itemSlug %>/icon.png"
Url.login = _.template "/login"
Url.mod = _.template "/browse/<%= modSlug %>/"
Url.modData = _.template "/data/<%= modSlug %>/mod.cg"
Url.modIcon = _.template "/data/<%= modSlug %>/icon.png"
Url.modVersionData = _.template "/data/<%= modSlug %>/versions/<%= modVersion %>/mod-version.cg"
Url.root = _.template "/"
Url.tutorial = _.template "/browse/<%= modSlug %>/tutorials/<%= tutorialSlug %>/"
Url.tutorialData = _.template "/data/<%= modSlug %>/tutorials/<%= tutorialSlug %>/tutorial.cg"
Url.tutorialIcon = _.template "/data/<%= modSlug %>/tutorials/<%= tutorialSlug %>/icon.png"
exports.Url = Url = {}
Url.crafting = _.template "/craft/<%= inventoryText %>"
Url.item = _.template "/browse/<%= modSlug %>/<%= itemSlug %>/"
Url.itemData = _.template "/data/<%= modSlug %>/items/<%= itemSlug %>/item.cg"
Url.itemImageDir = _.template "/data/<%= modSlug %>/items/<%= itemSlug %>"
Url.itemIcon = _.template "/data/<%= modSlug %>/items/<%= itemSlug %>/icon.png"
Url.login = _.template "/login"
Url.mod = _.template "/browse/<%= modSlug %>/"
Url.modData = _.template "/data/<%= modSlug %>/mod.cg"
Url.modIcon = _.template "/data/<%= modSlug %>/icon.png"
Url.modVersionData = _.template "/data/<%= modSlug %>/versions/<%= modVersion %>/mod-version.cg"
Url.root = _.template "/"
Url.tutorial = _.template "/browse/<%= modSlug %>/tutorials/<%= tutorialSlug %>/"
Url.tutorialData = _.template "/data/<%= modSlug %>/tutorials/<%= tutorialSlug %>/tutorial.cg"
Url.tutorialIcon = _.template "/data/<%= modSlug %>/tutorials/<%= tutorialSlug %>/icon.png"
Url.tutorialIcon = _.template "/data/<%= modSlug %>/tutorials/<%= tutorialSlug %>/icon.png"
Url.tutorialImageDir = _.template "/data/<%= modSlug %>/tutorials/<%= tutorialSlug %>"
exports.UrlParam = UrlParam = {}
UrlParam.quantity = 'count'
@@ -5,7 +5,9 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
BaseController = require './base_controller'
_ = require 'underscore'
{Adsense} = require '../constants'
{Duration} = require '../constants'
{ProductionEnvs} = require '../constants'
@@ -5,13 +5,16 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
_ = require 'underscore'
backbone = require 'backbone'
views = require '../views'
{Duration} = require '../constants'
{Event} = require '../constants'
########################################################################################################################
module.exports = class BaseController extends Backbone.View
module.exports = class BaseController extends backbone.View
constructor: (options={})->
@tryRefresh = _.debounce @_tryRefresh, 100
@@ -10,6 +10,7 @@ CraftPage = require '../models/craft_page'
InventoryController = require './inventory_controller'
PageController = require './page_controller'
StepController = require './step_controller'
_ = require 'underscore'
{Event} = require '../constants'
{Url} = require '../constants'
@@ -30,7 +31,7 @@ module.exports = class CraftPageController extends PageController
@modPack = options.modPack
@storage = options.storage
@model.plan.on Event.change, => @refresh()
@model.plan.on Event.change, => @tryRefresh()
# Event Methods ################################################################################
@@ -5,11 +5,12 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
BaseController = require './base_controller'
{Duration} = require '../constants'
{Event} = require '../constants'
ImageLoader = require './image_loader'
BaseController = require './base_controller'
ImageLoader = require './image_loader'
MinimalRecipeController = require './minimal_recipe_controller'
_ = require 'underscore'
{Duration} = require '../constants'
{Event} = require '../constants'
########################################################################################################################
@@ -5,9 +5,11 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
BaseController = require './base_controller'
{Duration} = require '../constants'
EmailClient = require '../models/email_client'
_ = require 'underscore'
{Duration} = require '../constants'
{Key} = require '../constants'
########################################################################################################################
@@ -10,6 +10,7 @@ CraftingGridController = require './crafting_grid_controller'
ImageLoader = require './image_loader'
Inventory = require '../models/inventory'
InventoryController = require './inventory_controller'
_ = require 'underscore'
{Duration} = require '../constants'
{StringBuilder} = require 'crafting-guide-common'
@@ -5,8 +5,10 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
BaseController = require './base_controller'
ItemSelectorController = require './item_selector_controller'
_ = require 'underscore'
{Duration} = require '../constants'
{Event} = require '../constants'
{ProductionEnvs} = require '../constants'
@@ -7,6 +7,7 @@ All rights reserved.
AdsenseController = require './adsense_controller'
PageController = require './page_controller'
_ = require 'underscore'
########################################################################################################################
@@ -10,6 +10,7 @@ ImageLoader = require './image_loader'
ItemSelectorController = require './item_selector_controller'
NameFinder = require '../models/name_finder'
StackController = require './stack_controller'
_ = require 'underscore'
{Duration} = require '../constants'
{Event} = require '../constants'
{Key} = require '../constants'
@@ -6,6 +6,7 @@ All rights reserved.
###
BaseController = require './base_controller'
_ = require 'underscore'
########################################################################################################################
@@ -15,6 +15,7 @@ ItemSlug = require '../models/item_slug'
MarkdownSectionController = require './markdown_section_controller'
PageController = require './page_controller'
VideoController = require './video_controller'
_ = require 'underscore'
{Duration} = require '../constants'
{Event} = require '../constants'
{Text} = require '../constants'
@@ -88,6 +89,8 @@ module.exports = class ItemPageController extends PageController
@imageLoader.load display.iconUrl, @$titleImage
@$name.html display.itemName
@_descriptionController.imageBase = Url.itemImageDir display
if @model.item.officialUrl?
@$officialPageLink.attr 'href', @model.item.officialUrl
@show @$officialPageLink
@@ -5,9 +5,11 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
BaseController = require './base_controller'
ItemSelector = require '../models/item_selector'
ItemSelectorElementController = require './item_selector_element_controller'
_ = require 'underscore'
{Duration} = require '../constants'
{Event} = require '../constants'
{Key} = require '../constants'
@@ -6,6 +6,7 @@ All rights reserved.
###
BaseController = require './base_controller'
_ = require 'underscore'
{Event} = require '../constants'
########################################################################################################################
@@ -7,6 +7,7 @@ All rights reserved.
PageController = require './page_controller'
User = require '../models/user'
_ = require 'underscore'
{CraftingGuideClient} = require 'crafting-guide-common'
{Event} = require '../constants'
{Login} = require '../constants'
@@ -6,6 +6,8 @@ All rights reserved.
###
BaseController = require './base_controller'
_ = require 'underscore'
{markdown} = require 'markdown'
{Url} = require '../constants'
########################################################################################################################
@@ -14,13 +16,15 @@ module.exports = class MarkdownSectionController extends BaseController
constructor: (options={})->
if not options.modPack? then throw new Error 'options.modPack is required'
options.imageBase ?= ''
options.model ?= ''
options.title ?= 'Description'
options.templateName = 'markdown_section'
super options
@modPack = options.modPack
@title = options.title
@imageBase = options.imageBase
@modPack = options.modPack
@title = options.title
# BaseController Overrides #####################################################################
@@ -50,15 +54,17 @@ module.exports = class MarkdownSectionController extends BaseController
tree = markdown.parse @model, 'Maruku'
findLinkRefs = (node)=>
logger.verbose "inspecting a #{node[0]}"
logger.verbose -> "inspecting a #{node[0]}"
if node[0] is 'link_ref'
logger.verbose "looking for item named: #{node[2]}"
logger.verbose -> "looking for item named: #{node[2]}"
item = @modPack.findItemByName node[2]
if item?
logger.verbose "found item #{item.slug}, updating link"
logger.verbose -> "found item #{item.slug}, updating link"
node[0] = 'link'
node[1].href = Url.item itemSlug:item.slug.item, modSlug:item.slug.mod
delete node[1].ref
else if node[0] is 'img'
node[1].href = "#{@imageBase}/#{node[1].href}"
else
for index in [1...node.length]
if _.isArray node[index]
@@ -9,6 +9,7 @@ BaseController = require './base_controller'
CraftingGridController = require './crafting_grid_controller'
ImageLoader = require './image_loader'
SlotController = require './slot_controller'
_ = require 'underscore'
{Duration} = require '../constants'
{StringBuilder} = require 'crafting-guide-common'
@@ -6,6 +6,7 @@ All rights reserved.
###
BaseController = require './base_controller'
_ = require 'underscore'
{Url} = require '../constants'
########################################################################################################################
@@ -7,6 +7,7 @@ All rights reserved.
BaseController = require './base_controller'
ModSelectorController = require './mod_selector_controller'
_ = require 'underscore'
{Duration} = require '../constants'
########################################################################################################################
@@ -5,6 +5,7 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
AdsenseController = require './adsense_controller'
Item = require '../models/item'
ItemGroupController = require './item_group_controller'
@@ -5,9 +5,11 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
BaseController = require './base_controller'
{Event} = require '../constants'
Mod = require '../models/mod'
_ = require 'underscore'
{Event} = require '../constants'
{RequiredMods} = require '../constants'
{Url} = require '../constants'
@@ -5,6 +5,7 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
BaseController = require './base_controller'
{Text} = require '../constants'
@@ -34,4 +35,4 @@ module.exports = class PageController extends BaseController
$('title').html title
super
super
@@ -6,6 +6,7 @@ All rights reserved.
###
BaseController = require './base_controller'
_ = require 'underscore'
########################################################################################################################
@@ -7,6 +7,7 @@ All rights reserved.
BaseController = require './base_controller'
ImageLoader = require './image_loader'
_ = require 'underscore'
{Duration} = require '../constants'
{Event} = require '../constants'
{Key} = require '../constants'
@@ -8,6 +8,7 @@ All rights reserved.
BaseController = require './base_controller'
InventoryController = require './inventory_controller'
MinimalRecipeController = require './minimal_recipe_controller'
_ = require 'underscore'
{Event} = require '../constants'
########################################################################################################################
@@ -6,6 +6,7 @@ All rights reserved.
###
BaseController = require './base_controller'
_ = require 'underscore'
{Url} = require '../constants'
########################################################################################################################
@@ -98,6 +98,7 @@ module.exports = class TutorialPageController extends BaseController
controller.model = section.model
controller.refresh()
controller.imageBase = Url.tutorialImageDir modSlug:@modSlug, tutorialSlug:@tutorialSlug
index += 1
while @_sectionControllers.length > index
+6 -3
View File
@@ -5,6 +5,7 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
BrowsePageController = require './controllers/browse_page_controller'
ConfigurePageController = require './controllers/configure_page_controller'
CraftPageController = require './controllers/craft_page_controller'
@@ -17,20 +18,22 @@ LoginPageController = require './controllers/login_page_controller'
Mod = require './models/mod'
ModPack = require './models/mod_pack'
ModPageController = require './controllers/mod_page_controller'
TutorialPageController = require './controllers/tutorial_page_controller'
Storage = require './models/storage'
TutorialPageController = require './controllers/tutorial_page_controller'
UrlParams = require './url_params'
User = require './models/user'
{ProductionEnvs} = require './constants'
_ = require 'underscore'
backbone = require 'backbone'
{DefaultMods} = require './constants'
{Duration} = require './constants'
{Event} = require './constants'
{Opacity} = require './constants'
{ProductionEnvs} = require './constants'
{Url} = require './constants'
########################################################################################################################
module.exports = class CraftingGuideRouter extends Backbone.Router
module.exports = class CraftingGuideRouter extends backbone.Router
constructor: (options={})->
@_page = null
+6 -1
View File
@@ -5,7 +5,12 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
_.mixin require './underscore_mixins'
_ = require 'underscore'
mixins = require './underscore_mixins'
########################################################################################################################
_.mixin mixins
module.exports =
Mod: require './models/mod'
+9 -13
View File
@@ -5,11 +5,13 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
require './underscore_mixins'
require './polyfill'
$ = require 'jquery'
CraftingGuideRouter = require './crafting_guide_router'
FeedbackController = require './controllers/feedback_controller'
_ = require './underscore_mixins'
backbone = require 'backbone'
views = require './views'
{CraftingGuideClient} = require 'crafting-guide-common'
{Logger} = require 'crafting-guide-common'
@@ -38,27 +40,21 @@ switch window.location.hostname
else
throw new Error "cannot determine the environment of: #{window.location.hostname}"
client = _.extend new CraftingGuideClient(baseUrl:apiBaseUrl), Backbone.Events
client = _.extend new CraftingGuideClient(baseUrl:apiBaseUrl), backbone.Events
client.onStatusChanged = (c, oldStatus, newStatus)->
logger.info "Crafting Guide server status changed from #{oldStatus} to #{newStatus}"
client.trigger 'change:status', client, oldStatus, newStatus
client.trigger 'change', client
# Disabled until required by some feature -- andrewminer 2015-04-06
# client.checkStatus()
global.router = new CraftingGuideRouter client:client
global.util = require 'util'
global.views = views
global.markdown = global.markdown.markdown
backbone.$ = $
global.feedbackController = new FeedbackController el:'.view__feedback'
feedbackController.render()
# Disabled until required by some feature. -- andrewminer 2015-04-06
# global.router.loadCurrentUser()
global.router = new CraftingGuideRouter client:client
global.router.loadCurrentUser()
global.router.loadDefaultModPack()
backbone.history.start pushState:true
client.checkStatus()
logger.info -> "CraftingGuide is ready"
Backbone.history.start pushState:true
+5 -2
View File
@@ -5,12 +5,15 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
$ = require 'jquery'
backbone = require 'backbone'
w = require 'when'
{Event} = require '../constants'
{ModelState} = require '../constants'
########################################################################################################################
module.exports = class BaseModel extends Backbone.Model
module.exports = class BaseModel extends backbone.Model
constructor: (attributes={}, options={})->
options.logEvents ?= true
@@ -70,7 +73,7 @@ module.exports = class BaseModel extends Backbone.Model
success: (text, status, xhr)=> resolve @onLoadSucceeded text, status, xhr
error: (xhr, status, error)=> reject @onLoadFailed error, status, xhr
@loading.catch -> # do nothing. prevents unhandled promise warnings
@loading.catch (e)-> # do nothing
return @loading
parse: (text)->
+1
View File
@@ -9,6 +9,7 @@ BaseModel = require './base_model'
Inventory = require './inventory'
ItemSlug = require './item_slug'
Step = require './step'
_ = require 'underscore'
{Event} = require '../constants'
########################################################################################################################
+2
View File
@@ -5,6 +5,8 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
require 'underscore'
########################################################################################################################
module.exports = class EmailClient
+3 -2
View File
@@ -6,10 +6,11 @@ All rights reserved.
###
BaseModel = require './base_model'
{Event} = require '../constants'
ItemSlug = require './item_slug'
{RequiredMods} = require '../constants'
Stack = require './stack'
_ = require 'underscore'
{Event} = require '../constants'
{RequiredMods} = require '../constants'
########################################################################################################################
+1
View File
@@ -7,6 +7,7 @@ All rights reserved.
BaseModel = require './base_model'
CraftingPlan = require './crafting_plan'
_ = require 'underscore'
{Event} = require '../constants'
{Url} = require '../constants'
+2 -1
View File
@@ -6,7 +6,8 @@ All rights reserved.
###
BaseModel = require './base_model'
ItemSlug = require './item_slug'
ItemSlug = require './item_slug'
_ = require 'underscore'
########################################################################################################################
+1
View File
@@ -5,6 +5,7 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
_ = require 'underscore'
{RequiredMods} = require '../constants'
########################################################################################################################
+1
View File
@@ -6,6 +6,7 @@ All rights reserved.
###
BaseModel = require './base_model'
_ = require 'underscore'
{Event} = require '../constants'
{RequiredMods} = require '../constants'
{Url} = require '../constants'
+2 -1
View File
@@ -6,10 +6,11 @@ All rights reserved.
###
BaseModel = require './base_model'
{Event} = require '../constants'
Item = require './item'
ItemSlug = require './item_slug'
Recipe = require './recipe'
_ = require 'underscore'
{Event} = require '../constants'
{RequiredMods} = require '../constants'
{Url} = require '../constants'
@@ -5,6 +5,7 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
_ = require 'underscore'
{StringBuilder} = require 'crafting-guide-common'
########################################################################################################################
@@ -11,6 +11,7 @@ ItemSlug = require '../item_slug'
ModVersion = require '../mod_version'
Recipe = require '../recipe'
Stack = require '../simple_stack'
_ = require 'underscore'
{StringBuilder} = require 'crafting-guide-common'
########################################################################################################################
+1
View File
@@ -7,6 +7,7 @@ All rights reserved.
BaseModel = require './base_model'
TutorialParser = require './tutorial_parser'
_ = require 'underscore'
{Url} = require '../constants'
########################################################################################################################
@@ -5,6 +5,8 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
_ = require 'underscore'
########################################################################################################################
module.exports = class VersionedParserBase
+8 -2
View File
@@ -5,8 +5,14 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
_.mixin
_ = require 'underscore'
{stringMixins} = require 'crafting-guide-common'
########################################################################################################################
module.exports = _
_.mixin
parseMarkdown: (text)->
return markdown.parse text, 'Maruku'
@@ -32,4 +38,4 @@ _.mixin
return parts
_.mixin require('crafting-guide-common').stringMixins
_.mixin stringMixins
+1
View File
@@ -5,6 +5,7 @@ Copyright (c) 2014-2015 by Redwood Labs
All rights reserved.
###
_ = require 'underscore'
url = require 'url'
########################################################################################################################