Update wiki editing to use new data format

fixes: #292
This commit is contained in:
Andrew Miner
2017-07-23 15:16:21 -07:00
parent cbf66bf5bb
commit 0b94cc4a1f
7 changed files with 199 additions and 182 deletions
@@ -5,26 +5,22 @@
# All rights reserved. # All rights reserved.
# #
{BaseModel} = require('crafting-guide-common').deprecated {Observable} = require("crafting-guide-common").util
MarkdownImage = require './markdown_image' MarkdownImage = require './markdown_image'
######################################################################################################################## ########################################################################################################################
module.exports = class MarkdownImageList extends BaseModel module.exports = class MarkdownImageList extends Observable
constructor: (attributes={}, options={})-> constructor: (options={})->
attributes.imageBase ?= '' super
attributes.markdownText ?= null
super attributes, options
@client = options.client @_images = []
@_images = {} @muted =>
@client = options.client
@imageBase = options.imageBase
@markdownText = options.markdownText
@on c.event.change + ':imageBase', =>
for fileName, image of @_images
image.path = @imageBase
@on c.event.change + ':markdownText', => @_analyzeMarkdownText()
@_analyzeMarkdownText() @_analyzeMarkdownText()
# Public Methods ############################################################################### # Public Methods ###############################################################################
@@ -46,22 +42,43 @@ module.exports = class MarkdownImageList extends BaseModel
# Property Methods ############################################################################# # Property Methods #############################################################################
getAll: ->
fileNames = (fileName for fileName, image of @_images).sort()
result = []
for fileName in fileNames
result.push @_images[fileName]
return result
isValid: ->
for fileName, image of @_images
return false unless image.valid
return true
Object.defineProperties @prototype, Object.defineProperties @prototype,
all: {get:@prototype.getAll}
valid: {get:@prototype.isValid} all:
get: ->
fileNames = (fileName for fileName, image of @_images).sort()
result = []
for fileName in fileNames
result.push @_images[fileName]
return result
client:
get: -> return @_client
set: (client)->
if not client? then throw new Error "client is required"
@_client = client
imageBase: ->
get: -> return @_imageBase
set: (imageBase)->
@triggerPropertyChange "imageBase", @_imageBase, imageBase, ->
@_imageBase = imageBase
for fileName, image of @_images
image.path = @imageBase
markdownText:
get: -> return @_markdownText
set: (markdownText)->
@triggerPropertyChange "markdownText", @_markdownText, markdownText, ->
@_markdownText = markdownText
@_analyzeMarkdownText()
valid:
get: ->
for fileName, image of @_images
return false unless image.valid
return true
# Private Methods ############################################################################## # Private Methods ##############################################################################
@@ -79,8 +96,8 @@ module.exports = class MarkdownImageList extends BaseModel
image = @_images[fileName] image = @_images[fileName]
if not image? if not image?
image = new MarkdownImage {fileName:fileName, path:@imageBase}, {client:@client} image = new MarkdownImage {fileName:fileName, path:@imageBase}, {client:@client}
@listenTo image, c.event.change, => @trigger c.event.change, this image.on Observable::CHANGE, this, "_onImageChanged"
@trigger c.event.add, this, image @trigger Observable::ADD, image
changed = true changed = true
newImages[fileName] = image newImages[fileName] = image
@@ -92,4 +109,7 @@ module.exports = class MarkdownImageList extends BaseModel
if changed if changed
@_images = newImages @_images = newImages
@trigger c.event.change, this @trigger Observable::CHANGE
_onImageChanged: ->
@trigger Observable::CHANGE
@@ -16,7 +16,7 @@ list = null
describe 'markdown_image_list.coffee', -> describe 'markdown_image_list.coffee', ->
beforeEach -> beforeEach ->
list = new MarkdownImageList {}, client:{fetchFile:sinon.stub().returns(w.promise(->))} list = new MarkdownImageList client:{fetchFile:sinon.stub().returns(w.promise(->))}
describe '_analyzeMarkdownText', -> describe '_analyzeMarkdownText', ->
@@ -5,20 +5,24 @@
# All rights reserved. # All rights reserved.
# #
BaseController = require '../../../base_controller' _ = require "../../../../../underscore"
MarkdownImageController = require './markdown_image/markdown_image_controller' c = require "../../../../../common/constants"
MarkdownImageList = require '../../../../models/site/markdown_image_list' BaseController = require "../../../base_controller"
MarkdownImageController = require "./markdown_image/markdown_image_controller"
MarkdownImageList = require "../../../../models/site/markdown_image_list"
{Observable} = require("crafting-guide-common").util
######################################################################################################################## ########################################################################################################################
module.exports = class MarkdownImageListController extends BaseController module.exports = class MarkdownImageListController extends BaseController
_.extend this, Observable
constructor: (options={})-> constructor: (options={})->
options.model ?= new MarkdownImageList {}, {client:options.client} options.model ?= new MarkdownImageList client:options.client
options.templateName = 'common/markdown_section/markdown_image_list' options.templateName = "common/markdown_section/markdown_image_list"
super options super options
@imageBase = '' @imageBase = ""
@_valid = null @_valid = null
# Public Methods ############################################################################### # Public Methods ###############################################################################
@@ -33,31 +37,24 @@ module.exports = class MarkdownImageListController extends BaseController
@model.reset() @model.reset()
# Property Methods ############################################################################# # Property Methods #############################################################################
getImageBase: ->
return @_imageBase
setImageBase: (newImageBase)->
oldImageBase = @_imageBase
return unless oldImageBase isnt newImageBase
@_imageBase = newImageBase
@trigger c.event.change + ':imageBase', this, oldImageBase, newImageBase
@trigger c.event.change, this
getMarkdownText: ->
return @model.markdownText
setMarkdownText: (markdownText)->
@model.markdownText = markdownText
getValid: ->
return @_valid
Object.defineProperties @prototype, Object.defineProperties @prototype,
imageBase: {get:@prototype.getImageBase, set:@prototype.setImageBase}
markdownText: {get:@prototype.getMarkdownText, set:@prototype.setMarkdownText} imageBase:
valid: {get:@prototype.getValid} get: -> return @_imageBase
set: (imageBase)->
@_imageBase = imageBase
@trigger c.event.change
markdownText:
get: -> return @model.markdownText
set: (markdownText)->
@model.markdownText = markdownText
@trigger c.event.change
valid:
get: -> return @_valid
set: -> throw new Error "valid cannot be assigned"
# BaseController Overrides ##################################################################### # BaseController Overrides #####################################################################
@@ -66,7 +63,7 @@ module.exports = class MarkdownImageListController extends BaseController
@_setValid @model.valid @_setValid @model.valid
onDidRender: -> onDidRender: ->
@$imageContainer = @$('.image_container') @$imageContainer = @$(".image_container")
super super
refresh: -> refresh: ->
@@ -90,10 +87,6 @@ module.exports = class MarkdownImageListController extends BaseController
# Private Methods ############################################################################## # Private Methods ##############################################################################
_setValid: (newValid)-> _setValid: (valid)->
oldValid = @_valid @_valid = valid
return if newValid is oldValid
@_valid = newValid
@trigger c.event.change + ':valid', this, oldValid, newValid
@trigger c.event.change @trigger c.event.change
@@ -5,28 +5,28 @@
# All rights reserved. # All rights reserved.
# #
BaseController = require '../../base_controller' BaseController = require "../../base_controller"
convertMarkdown = require 'marked' convertMarkdown = require "marked"
ItemDisplay = require "../../../models/site/item_display" ItemDisplay = require "../../../models/site/item_display"
MarkdownImageListController = require './markdown_image_list/markdown_image_list_controller' MarkdownImageListController = require "./markdown_image_list/markdown_image_list_controller"
######################################################################################################################## ########################################################################################################################
module.exports = class MarkdownSectionController extends BaseController module.exports = class MarkdownSectionController extends BaseController
@::State = @::State =
appologizing: 'applogizing' appologizing: "applogizing"
confirming: 'confirming' confirming: "confirming"
creating: 'creating' creating: "creating"
editing: 'editing' editing: "editing"
previewing: 'previewing' previewing: "previewing"
viewing: 'viewing' viewing: "viewing"
waiting: 'waiting' waiting: "waiting"
constructor: (options={})-> constructor: (options={})->
if not options.modPack? then throw new Error 'options.modPack is required' if not options.modPack? then throw new Error "options.modPack is required"
options.model ?= null options.model ?= null
options.templateName = 'common/markdown_section' options.templateName = "common/markdown_section"
@_state = @State.waiting @_state = @State.waiting
super options super options
@@ -34,9 +34,9 @@ module.exports = class MarkdownSectionController extends BaseController
@_confirmationMessage = options.confirmationMessage @_confirmationMessage = options.confirmationMessage
@_confirmDuration = options.confirmationDuration or 5000 @_confirmDuration = options.confirmationDuration or 5000
@_enterFeedback = options.enterFeedback or -> # do nothing @_enterFeedback = options.enterFeedback or -> # do nothing
@_imageBase = options.imageBase or '' @_imageBase = options.imageBase or ""
@_modPack = options.modPack @_modPack = options.modPack
@_title = options.title or 'Description' @_title = options.title or "Description"
# @_beginEditing must be a function returning a promise which resolves when all actions necessary prior to an # @_beginEditing must be a function returning a promise which resolves when all actions necessary prior to an
# editing session have been completed (e.g., loading the latest content from a remote server). The promise must # editing session have been completed (e.g., loading the latest content from a remote server). The promise must
@@ -61,7 +61,7 @@ module.exports = class MarkdownSectionController extends BaseController
# Event Methods ################################################################################ # Event Methods ################################################################################
onCancelClicked: (event)-> onCancelClicked: (event)->
tracker.trackEvent c.tracking.category.markdown, 'cancel' tracker.trackEvent c.tracking.category.markdown, "cancel"
@model = @_originalModel @model = @_originalModel
@resetToDefaultState() @resetToDefaultState()
@@ -72,7 +72,7 @@ module.exports = class MarkdownSectionController extends BaseController
onEditClicked: (event)-> onEditClicked: (event)->
return false unless @editable return false unless @editable
tracker.trackEvent c.tracking.category.markdown, 'edit' tracker.trackEvent c.tracking.category.markdown, "edit"
@_originalModel = @model @_originalModel = @model
@state = @State.waiting @state = @State.waiting
@_beginEditing() @_beginEditing()
@@ -86,22 +86,22 @@ module.exports = class MarkdownSectionController extends BaseController
return false return false
onQuestionClicked: (event)-> onQuestionClicked: (event)->
@_enterFeedback '' @_enterFeedback ""
return false return false
onPreviewClicked: (event)-> onPreviewClicked: (event)->
tracker.trackEvent c.tracking.category.markdown, 'preview' tracker.trackEvent c.tracking.category.markdown, "preview"
@_updatePreview() @_updatePreview()
@state = @State.previewing @state = @State.previewing
return false return false
onReturnClicked: (event)-> onReturnClicked: (event)->
tracker.trackEvent c.tracking.category.markdown, 'return' tracker.trackEvent c.tracking.category.markdown, "return"
@state = @State.editing @state = @State.editing
return false return false
onSaveClicked: (event)-> onSaveClicked: (event)->
tracker.trackEvent c.tracking.category.markdown, 'save' tracker.trackEvent c.tracking.category.markdown, "save"
@state = @State.waiting @state = @State.waiting
@_endEditing() @_endEditing()
.then => .then =>
@@ -133,7 +133,7 @@ module.exports = class MarkdownSectionController extends BaseController
return unless newImageBase isnt oldImageBase return unless newImageBase isnt oldImageBase
@_imageBase = newImageBase @_imageBase = newImageBase
@trigger c.event.change + ':imageBase', this, oldImageBase, newImageBase @trigger c.event.change + ":imageBase", this, oldImageBase, newImageBase
@trigger c.event.change, this @trigger c.event.change, this
getImageFiles: -> getImageFiles: ->
@@ -148,7 +148,7 @@ module.exports = class MarkdownSectionController extends BaseController
@_state = newState @_state = newState
logger.verbose => "MarkdownSectionController.#{@cid} changed state from #{oldState} to #{newState}" logger.verbose => "MarkdownSectionController.#{@cid} changed state from #{oldState} to #{newState}"
@trigger c.event.change + ':state', this, oldState, newState @trigger c.event.change + ":state", this, oldState, newState
@tryRefresh() @tryRefresh()
Object.defineProperties @prototype, Object.defineProperties @prototype,
@@ -160,21 +160,21 @@ module.exports = class MarkdownSectionController extends BaseController
# BaseController Overrides ##################################################################### # BaseController Overrides #####################################################################
onDidRender: -> onDidRender: ->
@_imageListController = @addChild MarkdownImageListController, '.view__markdown_image_list', @_imageListController = @addChild MarkdownImageListController, ".view__markdown_image_list",
client: @_client client: @_client
imageBase: @_imageBase imageBase: @_imageBase
@on c.event.change + ':imageBase', => @_imageListController.model.imageBase = @_imageBase @on c.event.change + ":imageBase", => @_imageListController.model.imageBase = @_imageBase
@listenTo @_imageListController, c.event.change + ':valid', => @tryRefresh() @listenTo @_imageListController, c.event.change + ":valid", => @tryRefresh()
@$errorPanel = @$('.error') @$errorPanel = @$(".error")
@$errorText = @$('.error p') @$errorText = @$(".error p")
@$markdownPanel = @$('.markdown') @$markdownPanel = @$(".markdown")
@$previewButton = @$('.button.preview') @$previewButton = @$(".button.preview")
@$questionPanel = @$('.question') @$questionPanel = @$(".question")
@$saveButton = @$('.button.save') @$saveButton = @$(".button.save")
@$sizer = @$('.sizer') @$sizer = @$(".sizer")
@$textarea = @$('textarea') @$textarea = @$("textarea")
@$title = @$('h2') @$title = @$("h2")
@resetToDefaultState() @resetToDefaultState()
@@ -200,14 +200,14 @@ module.exports = class MarkdownSectionController extends BaseController
events: -> events: ->
return _.extend super, return _.extend super,
'click .markdown a': 'routeLinkClick' "click .markdown a": "routeLinkClick"
'click .button.cancel': 'onCancelClicked' "click .button.cancel": "onCancelClicked"
'click .button.edit': 'onEditClicked' "click .button.edit": "onEditClicked"
'click .button.preview': 'onPreviewClicked' "click .button.preview": "onPreviewClicked"
'click .button.return': 'onReturnClicked' "click .button.return": "onReturnClicked"
'click .button.save': 'onSaveClicked' "click .button.save": "onSaveClicked"
'click .question a': 'onQuestionClicked' "click .question a": "onQuestionClicked"
'input textarea': 'onTextChanged' "input textarea": "onTextChanged"
# Private Methods ############################################################################## # Private Methods ##############################################################################
@@ -228,14 +228,14 @@ module.exports = class MarkdownSectionController extends BaseController
_updateButtonStates: -> _updateButtonStates: ->
for $button in [ @$previewButton, @$saveButton ] for $button in [ @$previewButton, @$saveButton ]
if @_imageListController.valid if @_imageListController.valid
$button.prop 'disabled', false $button.prop "disabled", false
else else
$button.prop 'disabled', true $button.prop "disabled", true
_updateSizer: -> _updateSizer: ->
text = @model text = @model
if @model? if @model?
text = text.replace /\n/g, '<br>' text = text.replace /\n/g, "<br>"
@$sizer.html text @$sizer.html text
@@ -255,22 +255,22 @@ module.exports = class MarkdownSectionController extends BaseController
logger.verbose => "Updating markdown section visibility for state: #{@state}" logger.verbose => "Updating markdown section visibility for state: #{@state}"
elements = elements =
appologizingPanel: @$('.appologizing') appologizingPanel: @$(".appologizing")
cancelButton: @$('.button.cancel') cancelButton: @$(".button.cancel")
confirmingPanel: @$('.confirming') confirmingPanel: @$(".confirming")
creatingPanel: @$('.creating') creatingPanel: @$(".creating")
editButton: @$('.button.edit') editButton: @$(".button.edit")
editorPanel: @$('.editor') editorPanel: @$(".editor")
footerPanel: @$('.footer') footerPanel: @$(".footer")
imageList: @$('.view__markdown_image_list') imageList: @$(".view__markdown_image_list")
markdownPanel: @$markdownPanel markdownPanel: @$markdownPanel
previewButton: @$previewButton previewButton: @$previewButton
returnButton: @$('.button.return') returnButton: @$(".button.return")
saveButton: @$saveButton saveButton: @$saveButton
waitingPanel: @$('.waiting') waitingPanel: @$(".waiting")
visible = {} visible = {}
errorText = '' errorText = ""
if @state is @State.appologizing if @state is @State.appologizing
visible = appologizingPanel:true visible = appologizingPanel:true
+1 -1
View File
@@ -7,7 +7,7 @@
.content.view__item_page .content.view__item_page
.left .left
include ../common/youtube/youtube.jade // include ../common/youtube/youtube.jade
.right .right
.about .about
@@ -5,17 +5,19 @@
# All rights reserved. # All rights reserved.
# #
EditableFile = require "../../models/site/editable_file" EditableFile = require "../../models/site/editable_file"
{Item} = require("crafting-guide-common").models {Item} = require("crafting-guide-common").models
ItemDisplay = require "../../models/site/item_display" {ItemDetail} = require("crafting-guide-common").models
ItemGroupController = require "../common/item_group/item_group_controller" {ItemDetailJsonParser} = require("crafting-guide-common").parsing
ItemPage = require "../../models/site/item_page" ItemDisplay = require "../../models/site/item_display"
MarkdownSectionController = require "../common/markdown_section/markdown_section_controller" ItemGroupController = require "../common/item_group/item_group_controller"
PageController = require "../page_controller" ItemPage = require "../../models/site/item_page"
RecipeController = require "../common/recipe/recipe_controller" MarkdownSectionController = require "../common/markdown_section/markdown_section_controller"
RecipeDisplay = require "../../models/site/recipe_display" PageController = require "../page_controller"
VideoController = require "../common/video/video_controller" RecipeController = require "../common/recipe/recipe_controller"
w = require "when" RecipeDisplay = require "../../models/site/recipe_display"
VideoController = require "../common/video/video_controller"
w = require "when"
######################################################################################################################## ########################################################################################################################
@@ -52,8 +54,8 @@ module.exports = class ItemPageController extends PageController
getBreadcrumbs: -> getBreadcrumbs: ->
return [ return [
$("<a href='/browse'>Browse</a>") $("<a href=\"/browse\">Browse</a>")
$("<a href='#{@model.itemDisplay.modUrl}'>#{@model.itemDisplay.mod.displayName}</a>") $("<a href=\"#{@model.itemDisplay.modUrl}\">#{@model.itemDisplay.mod.displayName}</a>")
$("<b>#{@model.itemDisplay.name}</b>") $("<b>#{@model.itemDisplay.name}</b>")
] ]
@@ -62,7 +64,7 @@ module.exports = class ItemPageController extends PageController
return null unless item? return null unless item?
display = new ItemDisplay item display = new ItemDisplay item
return $("<a href='#{display.url}'>Random Item</a>") return $("<a href=\"#{display.url}\">Random Item</a>")
getMetaDescription: -> getMetaDescription: ->
data = itemName:@model.item.displayName, modName:@model.item.mod.displayName data = itemName:@model.item.displayName, modName:@model.item.mod.displayName
@@ -79,11 +81,11 @@ module.exports = class ItemPageController extends PageController
onDidRender: -> onDidRender: ->
options = imageLoader:@_imageLoader, modPack:@_modPack, router:@_router, show:false options = imageLoader:@_imageLoader, modPack:@_modPack, router:@_router, show:false
@_similarItemsController = @addChild ItemGroupController, '.view__item_group.similar', options @_similarItemsController = @addChild ItemGroupController, ".view__item_group.similar", options
@_usedAsToolToMakeController = @addChild ItemGroupController, '.view__item_group.usedAsToolToMake ', options @_usedAsToolToMakeController = @addChild ItemGroupController, ".view__item_group.usedAsToolToMake ", options
@_usedToMakeController = @addChild ItemGroupController, '.view__item_group.usedToMake', options @_usedToMakeController = @addChild ItemGroupController, ".view__item_group.usedToMake", options
@_descriptionController = @addChild MarkdownSectionController, '.view__markdown_section', @_descriptionController = @addChild MarkdownSectionController, ".view__markdown_section",
client: @_client client: @_client
editable: true editable: true
modPack: @_modPack modPack: @_modPack
@@ -92,23 +94,23 @@ module.exports = class ItemPageController extends PageController
endEditing: => @_endEditingDescription() endEditing: => @_endEditingDescription()
enterFeedback: @_enterFeedback enterFeedback: @_enterFeedback
@$aboutImage = @$('.about img') @$aboutImage = @$(".about img")
@$craftingPlanButton = @$('.button.craftingPlan') @$craftingPlanButton = @$(".button.craftingPlan")
@$name = @$('.about .title') @$name = @$(".about .title")
@$officialLink = @$('.about a.officialLink') @$officialLink = @$(".about a.officialLink")
@$sourceModLink = @$('.about a.sourceMod') @$sourceModLink = @$(".about a.sourceMod")
@$aboutLinks = @$('.about .right') @$aboutLinks = @$(".about .right")
@$multiblockSection = @$('section.multiblock') @$multiblockSection = @$("section.multiblock")
@$recipeContainer = @$('section.recipes .panel') @$recipeContainer = @$("section.recipes .panel")
@$recipesSection = @$('section.recipes') @$recipesSection = @$("section.recipes")
@$recipesSectionTitle = @$('section.recipes h2') @$recipesSectionTitle = @$("section.recipes h2")
@$similarSection = @$('section.similar') @$similarSection = @$("section.similar")
@$usedAsToolToMakeSection = @$('section.usedAsToolToMake') @$usedAsToolToMakeSection = @$("section.usedAsToolToMake")
@$usedToMakeSection = @$('section.usedToMake') @$usedToMakeSection = @$("section.usedToMake")
@$videosContainer = @$('section.videos .panel') @$videosContainer = @$("section.videos .panel")
@$videosSection = @$('section.videos') @$videosSection = @$("section.videos")
@$videosSectionTitle = @$('section.videos h2') @$videosSectionTitle = @$("section.videos h2")
super super
refresh: -> refresh: ->
@@ -119,7 +121,7 @@ module.exports = class ItemPageController extends PageController
@_descriptionController.imageBase = c.url.itemImageDir @model.itemDisplay @_descriptionController.imageBase = c.url.itemImageDir @model.itemDisplay
if @model.item.detail?.links.length > 0 if @model.item.detail?.links.length > 0
@$officialLink.attr 'href', @model.item.detail.links[0] @$officialLink.attr "href", @model.item.detail.links[0]
@show @$aboutLinks @show @$aboutLinks
else else
@hide @$aboutLinks @hide @$aboutLinks
@@ -155,20 +157,20 @@ module.exports = class ItemPageController extends PageController
events: -> events: ->
return _.extend super, return _.extend super,
'click a.craftingPlan': 'routeLinkClick' "click a.craftingPlan": "routeLinkClick"
'click a.sourceMod': 'routeLinkClick' "click a.sourceMod": "routeLinkClick"
'click .markdown a': 'routeLinkClick' "click .markdown a": "routeLinkClick"
'click .button.craftingPlan': 'craftingPlanButtonClicked' "click .button.craftingPlan": "craftingPlanButtonClicked"
# Private Methods ############################################################################## # Private Methods ##############################################################################
_beginEditingDescription: -> _beginEditingDescription: ->
if not @user? if not @user?
global.site.login() global.site.login()
return w.reject new Error 'must be logged in to edit' return w.reject new Error "must be logged in to edit"
if not @model.item? if not @model.item?
return w.reject new Error 'must have an item' return w.reject new Error "must have an item"
pathArgs = modSlug:@model.item.mod.id, itemSlug:@model.itemDisplay.itemSlug pathArgs = modSlug:@model.item.mod.id, itemSlug:@model.itemDisplay.itemSlug
attributes = attributes =
@@ -179,27 +181,29 @@ module.exports = class ItemPageController extends PageController
@_descriptionFile.fetch() @_descriptionFile.fetch()
.then => .then =>
if @_descriptionFile.encodedData?.length > 0 if @_descriptionFile.encodedData?.length > 0
@model.item.parse @_descriptionFile.getDecodedData 'utf8' parser = new ItemDetailJsonParser item:@model.item
parser.parse @_descriptionFile.getDecodedData "utf8"
else else
@model.item.description = '' @model.item.detail = new ItemDetail item:@model.item
@_descriptionController.model = @model.item.description @_descriptionController.model = @model.item.detail.description
_endEditingDescription: -> _endEditingDescription: ->
oldDescription = @model.item.description oldDescription = @model.item.detail.description
promises = [] promises = []
saveList = [] saveList = []
for imageFile in @_descriptionController.imageFiles for imageFile in @_descriptionController.imageFiles
saveList.push saveList.push
file: imageFile file: imageFile
message: "User-submitted image for #{@model.item.name} from #{global.hostName}" message: "User-submitted image for #{@model.item.displayName} from #{global.hostName}"
@model.item.description = @_descriptionController.model @model.item.detail.description = @_descriptionController.model
@_descriptionFile.setDecodedData @model.item.unparse() parser = new ItemDetailJsonParser item:@model.item
@_descriptionFile.setDecodedData parser.format @model.item.detail
saveList.push saveList.push
file: @_descriptionFile file: @_descriptionFile
message: "User-submitted text for #{@model.item.name} from #{global.hostName}" message: "User-submitted text for #{@model.item.displayName} from #{global.hostName}"
saveNextFile = (fileList)-> saveNextFile = (fileList)->
return w(true) if fileList.length is 0 return w(true) if fileList.length is 0
@@ -211,7 +215,7 @@ module.exports = class ItemPageController extends PageController
saveNextFile saveList saveNextFile saveList
.catch (e)=> .catch (e)=>
@model.item.description = oldDescription @model.item.detail.description = oldDescription
throw e throw e
_refreshDescription: -> _refreshDescription: ->
@@ -225,7 +229,7 @@ module.exports = class ItemPageController extends PageController
recipes = @model.findRecipes() recipes = @model.findRecipes()
if recipes?.length > 0 if recipes?.length > 0
@$recipesSectionTitle.html if recipes.length is 1 then 'Recipe' else 'Recipes' @$recipesSectionTitle.html if recipes.length is 1 then "Recipe" else "Recipes"
for recipe in recipes for recipe in recipes
controller = @_recipeControllers[index] controller = @_recipeControllers[index]
@@ -263,16 +267,16 @@ module.exports = class ItemPageController extends PageController
_refreshSourceMod: -> _refreshSourceMod: ->
mod = @model.item.mod mod = @model.item.mod
@$sourceModLink.attr 'href', c.url.mod @model.itemDisplay @$sourceModLink.attr "href", c.url.mod @model.itemDisplay
@$sourceModLink.text mod.name @$sourceModLink.text mod.name
@show @$sourceModLink @show @$sourceModLink
_refreshUsedAsToolToMake: -> _refreshUsedAsToolToMake: ->
@_usedAsToolToMakeController.title = 'Used as Tool to Make' @_usedAsToolToMakeController.title = "Used as Tool to Make"
@_usedAsToolToMakeController.model = @model.findToolForItems() @_usedAsToolToMakeController.model = @model.findToolForItems()
_refreshUsedToMake: -> _refreshUsedToMake: ->
@_usedToMakeController.title = 'Used to Make' @_usedToMakeController.title = "Used to Make"
@_usedToMakeController.model = @model.findComponentInItems() @_usedToMakeController.model = @model.findComponentInItems()
_refreshVideos: -> _refreshVideos: ->
@@ -281,7 +285,7 @@ module.exports = class ItemPageController extends PageController
videos = @model.item.detail?.videos videos = @model.item.detail?.videos
if videos? and videos.length > 0 if videos? and videos.length > 0
@$videosSectionTitle.html if videos.length is 1 then 'Video' else 'Videos' @$videosSectionTitle.html if videos.length is 1 then "Video" else "Videos"
for video in videos for video in videos
controller = @_videoControllers[index] controller = @_videoControllers[index]
+1 -1
View File
@@ -81,7 +81,7 @@ duration.slow = 1200
exports.gitHub = gitHub = {} exports.gitHub = gitHub = {}
gitHub.file = {} gitHub.file = {}
gitHub.file.itemDescription = {} gitHub.file.itemDescription = {}
gitHub.file.itemDescription.fileName = _.template "item.cg" gitHub.file.itemDescription.fileName = _.template "item.json"
gitHub.file.itemDescription.path = _.template "/data/<%= modSlug %>/items/<%= itemSlug %>" gitHub.file.itemDescription.path = _.template "/data/<%= modSlug %>/items/<%= itemSlug %>"
exports.key = key = {} exports.key = key = {}