diff --git a/src/client/models/site/markdown_image_list.coffee b/src/client/models/site/markdown_image_list.coffee index 42821fad3..a11755541 100644 --- a/src/client/models/site/markdown_image_list.coffee +++ b/src/client/models/site/markdown_image_list.coffee @@ -5,26 +5,22 @@ # All rights reserved. # -{BaseModel} = require('crafting-guide-common').deprecated +{Observable} = require("crafting-guide-common").util MarkdownImage = require './markdown_image' ######################################################################################################################## -module.exports = class MarkdownImageList extends BaseModel +module.exports = class MarkdownImageList extends Observable - constructor: (attributes={}, options={})-> - attributes.imageBase ?= '' - attributes.markdownText ?= null - super attributes, options + constructor: (options={})-> + super - @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() # Public Methods ############################################################################### @@ -46,22 +42,43 @@ module.exports = class MarkdownImageList extends BaseModel # 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, - 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 ############################################################################## @@ -79,8 +96,8 @@ module.exports = class MarkdownImageList extends BaseModel image = @_images[fileName] if not image? image = new MarkdownImage {fileName:fileName, path:@imageBase}, {client:@client} - @listenTo image, c.event.change, => @trigger c.event.change, this - @trigger c.event.add, this, image + image.on Observable::CHANGE, this, "_onImageChanged" + @trigger Observable::ADD, image changed = true newImages[fileName] = image @@ -92,4 +109,7 @@ module.exports = class MarkdownImageList extends BaseModel if changed @_images = newImages - @trigger c.event.change, this + @trigger Observable::CHANGE + + _onImageChanged: -> + @trigger Observable::CHANGE diff --git a/src/client/models/site/markdown_image_list.test.coffee b/src/client/models/site/markdown_image_list.test.coffee index 58e458766..2bc701570 100644 --- a/src/client/models/site/markdown_image_list.test.coffee +++ b/src/client/models/site/markdown_image_list.test.coffee @@ -16,7 +16,7 @@ list = null describe 'markdown_image_list.coffee', -> beforeEach -> - list = new MarkdownImageList {}, client:{fetchFile:sinon.stub().returns(w.promise(->))} + list = new MarkdownImageList client:{fetchFile:sinon.stub().returns(w.promise(->))} describe '_analyzeMarkdownText', -> diff --git a/src/client/site/common/markdown_section/markdown_image_list/markdown_image_list_controller.coffee b/src/client/site/common/markdown_section/markdown_image_list/markdown_image_list_controller.coffee index 81db1a92d..d2468583d 100644 --- a/src/client/site/common/markdown_section/markdown_image_list/markdown_image_list_controller.coffee +++ b/src/client/site/common/markdown_section/markdown_image_list/markdown_image_list_controller.coffee @@ -5,20 +5,24 @@ # All rights reserved. # -BaseController = require '../../../base_controller' -MarkdownImageController = require './markdown_image/markdown_image_controller' -MarkdownImageList = require '../../../../models/site/markdown_image_list' +_ = require "../../../../../underscore" +c = require "../../../../../common/constants" +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 + _.extend this, Observable constructor: (options={})-> - options.model ?= new MarkdownImageList {}, {client:options.client} - options.templateName = 'common/markdown_section/markdown_image_list' + options.model ?= new MarkdownImageList client:options.client + options.templateName = "common/markdown_section/markdown_image_list" super options - @imageBase = '' + @imageBase = "" @_valid = null # Public Methods ############################################################################### @@ -33,31 +37,24 @@ module.exports = class MarkdownImageListController extends BaseController @model.reset() # 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, - imageBase: {get:@prototype.getImageBase, set:@prototype.setImageBase} - markdownText: {get:@prototype.getMarkdownText, set:@prototype.setMarkdownText} - valid: {get:@prototype.getValid} + + imageBase: + 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 ##################################################################### @@ -66,7 +63,7 @@ module.exports = class MarkdownImageListController extends BaseController @_setValid @model.valid onDidRender: -> - @$imageContainer = @$('.image_container') + @$imageContainer = @$(".image_container") super refresh: -> @@ -90,10 +87,6 @@ module.exports = class MarkdownImageListController extends BaseController # Private Methods ############################################################################## - _setValid: (newValid)-> - oldValid = @_valid - return if newValid is oldValid - - @_valid = newValid - @trigger c.event.change + ':valid', this, oldValid, newValid + _setValid: (valid)-> + @_valid = valid @trigger c.event.change diff --git a/src/client/site/common/markdown_section/markdown_section_controller.coffee b/src/client/site/common/markdown_section/markdown_section_controller.coffee index 5bfe2ac0c..0f9020ff1 100644 --- a/src/client/site/common/markdown_section/markdown_section_controller.coffee +++ b/src/client/site/common/markdown_section/markdown_section_controller.coffee @@ -5,28 +5,28 @@ # All rights reserved. # -BaseController = require '../../base_controller' -convertMarkdown = require 'marked' +BaseController = require "../../base_controller" +convertMarkdown = require "marked" 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 @::State = - appologizing: 'applogizing' - confirming: 'confirming' - creating: 'creating' - editing: 'editing' - previewing: 'previewing' - viewing: 'viewing' - waiting: 'waiting' + appologizing: "applogizing" + confirming: "confirming" + creating: "creating" + editing: "editing" + previewing: "previewing" + viewing: "viewing" + waiting: "waiting" 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.templateName = 'common/markdown_section' + options.templateName = "common/markdown_section" @_state = @State.waiting super options @@ -34,9 +34,9 @@ module.exports = class MarkdownSectionController extends BaseController @_confirmationMessage = options.confirmationMessage @_confirmDuration = options.confirmationDuration or 5000 @_enterFeedback = options.enterFeedback or -> # do nothing - @_imageBase = options.imageBase or '' + @_imageBase = options.imageBase or "" @_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 # 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 ################################################################################ onCancelClicked: (event)-> - tracker.trackEvent c.tracking.category.markdown, 'cancel' + tracker.trackEvent c.tracking.category.markdown, "cancel" @model = @_originalModel @resetToDefaultState() @@ -72,7 +72,7 @@ module.exports = class MarkdownSectionController extends BaseController onEditClicked: (event)-> return false unless @editable - tracker.trackEvent c.tracking.category.markdown, 'edit' + tracker.trackEvent c.tracking.category.markdown, "edit" @_originalModel = @model @state = @State.waiting @_beginEditing() @@ -86,22 +86,22 @@ module.exports = class MarkdownSectionController extends BaseController return false onQuestionClicked: (event)-> - @_enterFeedback '' + @_enterFeedback "" return false onPreviewClicked: (event)-> - tracker.trackEvent c.tracking.category.markdown, 'preview' + tracker.trackEvent c.tracking.category.markdown, "preview" @_updatePreview() @state = @State.previewing return false onReturnClicked: (event)-> - tracker.trackEvent c.tracking.category.markdown, 'return' + tracker.trackEvent c.tracking.category.markdown, "return" @state = @State.editing return false onSaveClicked: (event)-> - tracker.trackEvent c.tracking.category.markdown, 'save' + tracker.trackEvent c.tracking.category.markdown, "save" @state = @State.waiting @_endEditing() .then => @@ -133,7 +133,7 @@ module.exports = class MarkdownSectionController extends BaseController return unless newImageBase isnt oldImageBase @_imageBase = newImageBase - @trigger c.event.change + ':imageBase', this, oldImageBase, newImageBase + @trigger c.event.change + ":imageBase", this, oldImageBase, newImageBase @trigger c.event.change, this getImageFiles: -> @@ -148,7 +148,7 @@ module.exports = class MarkdownSectionController extends BaseController @_state = 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() Object.defineProperties @prototype, @@ -160,21 +160,21 @@ module.exports = class MarkdownSectionController extends BaseController # BaseController Overrides ##################################################################### onDidRender: -> - @_imageListController = @addChild MarkdownImageListController, '.view__markdown_image_list', + @_imageListController = @addChild MarkdownImageListController, ".view__markdown_image_list", client: @_client imageBase: @_imageBase - @on c.event.change + ':imageBase', => @_imageListController.model.imageBase = @_imageBase - @listenTo @_imageListController, c.event.change + ':valid', => @tryRefresh() + @on c.event.change + ":imageBase", => @_imageListController.model.imageBase = @_imageBase + @listenTo @_imageListController, c.event.change + ":valid", => @tryRefresh() - @$errorPanel = @$('.error') - @$errorText = @$('.error p') - @$markdownPanel = @$('.markdown') - @$previewButton = @$('.button.preview') - @$questionPanel = @$('.question') - @$saveButton = @$('.button.save') - @$sizer = @$('.sizer') - @$textarea = @$('textarea') - @$title = @$('h2') + @$errorPanel = @$(".error") + @$errorText = @$(".error p") + @$markdownPanel = @$(".markdown") + @$previewButton = @$(".button.preview") + @$questionPanel = @$(".question") + @$saveButton = @$(".button.save") + @$sizer = @$(".sizer") + @$textarea = @$("textarea") + @$title = @$("h2") @resetToDefaultState() @@ -200,14 +200,14 @@ module.exports = class MarkdownSectionController extends BaseController events: -> return _.extend super, - 'click .markdown a': 'routeLinkClick' - 'click .button.cancel': 'onCancelClicked' - 'click .button.edit': 'onEditClicked' - 'click .button.preview': 'onPreviewClicked' - 'click .button.return': 'onReturnClicked' - 'click .button.save': 'onSaveClicked' - 'click .question a': 'onQuestionClicked' - 'input textarea': 'onTextChanged' + "click .markdown a": "routeLinkClick" + "click .button.cancel": "onCancelClicked" + "click .button.edit": "onEditClicked" + "click .button.preview": "onPreviewClicked" + "click .button.return": "onReturnClicked" + "click .button.save": "onSaveClicked" + "click .question a": "onQuestionClicked" + "input textarea": "onTextChanged" # Private Methods ############################################################################## @@ -228,14 +228,14 @@ module.exports = class MarkdownSectionController extends BaseController _updateButtonStates: -> for $button in [ @$previewButton, @$saveButton ] if @_imageListController.valid - $button.prop 'disabled', false + $button.prop "disabled", false else - $button.prop 'disabled', true + $button.prop "disabled", true _updateSizer: -> text = @model if @model? - text = text.replace /\n/g, '
' + text = text.replace /\n/g, "
" @$sizer.html text @@ -255,22 +255,22 @@ module.exports = class MarkdownSectionController extends BaseController logger.verbose => "Updating markdown section visibility for state: #{@state}" elements = - appologizingPanel: @$('.appologizing') - cancelButton: @$('.button.cancel') - confirmingPanel: @$('.confirming') - creatingPanel: @$('.creating') - editButton: @$('.button.edit') - editorPanel: @$('.editor') - footerPanel: @$('.footer') - imageList: @$('.view__markdown_image_list') + appologizingPanel: @$(".appologizing") + cancelButton: @$(".button.cancel") + confirmingPanel: @$(".confirming") + creatingPanel: @$(".creating") + editButton: @$(".button.edit") + editorPanel: @$(".editor") + footerPanel: @$(".footer") + imageList: @$(".view__markdown_image_list") markdownPanel: @$markdownPanel previewButton: @$previewButton - returnButton: @$('.button.return') + returnButton: @$(".button.return") saveButton: @$saveButton - waitingPanel: @$('.waiting') + waitingPanel: @$(".waiting") visible = {} - errorText = '' + errorText = "" if @state is @State.appologizing visible = appologizingPanel:true diff --git a/src/client/site/item_page/item_page.jade b/src/client/site/item_page/item_page.jade index 0a417a23c..c98a873ff 100644 --- a/src/client/site/item_page/item_page.jade +++ b/src/client/site/item_page/item_page.jade @@ -7,7 +7,7 @@ .content.view__item_page .left - include ../common/youtube/youtube.jade + // include ../common/youtube/youtube.jade .right .about diff --git a/src/client/site/item_page/item_page_controller.coffee b/src/client/site/item_page/item_page_controller.coffee index d095b5c3b..c1a2215ea 100644 --- a/src/client/site/item_page/item_page_controller.coffee +++ b/src/client/site/item_page/item_page_controller.coffee @@ -5,17 +5,19 @@ # All rights reserved. # -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" -PageController = require "../page_controller" -RecipeController = require "../common/recipe/recipe_controller" -RecipeDisplay = require "../../models/site/recipe_display" -VideoController = require "../common/video/video_controller" -w = require "when" +EditableFile = require "../../models/site/editable_file" +{Item} = require("crafting-guide-common").models +{ItemDetail} = require("crafting-guide-common").models +{ItemDetailJsonParser} = require("crafting-guide-common").parsing +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" +PageController = require "../page_controller" +RecipeController = require "../common/recipe/recipe_controller" +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: -> return [ - $("Browse") - $("#{@model.itemDisplay.mod.displayName}") + $("Browse") + $("#{@model.itemDisplay.mod.displayName}") $("#{@model.itemDisplay.name}") ] @@ -62,7 +64,7 @@ module.exports = class ItemPageController extends PageController return null unless item? display = new ItemDisplay item - return $("Random Item") + return $("Random Item") getMetaDescription: -> data = itemName:@model.item.displayName, modName:@model.item.mod.displayName @@ -79,11 +81,11 @@ module.exports = class ItemPageController extends PageController onDidRender: -> options = imageLoader:@_imageLoader, modPack:@_modPack, router:@_router, show:false - @_similarItemsController = @addChild ItemGroupController, '.view__item_group.similar', options - @_usedAsToolToMakeController = @addChild ItemGroupController, '.view__item_group.usedAsToolToMake ', options - @_usedToMakeController = @addChild ItemGroupController, '.view__item_group.usedToMake', options + @_similarItemsController = @addChild ItemGroupController, ".view__item_group.similar", options + @_usedAsToolToMakeController = @addChild ItemGroupController, ".view__item_group.usedAsToolToMake ", options + @_usedToMakeController = @addChild ItemGroupController, ".view__item_group.usedToMake", options - @_descriptionController = @addChild MarkdownSectionController, '.view__markdown_section', + @_descriptionController = @addChild MarkdownSectionController, ".view__markdown_section", client: @_client editable: true modPack: @_modPack @@ -92,23 +94,23 @@ module.exports = class ItemPageController extends PageController endEditing: => @_endEditingDescription() enterFeedback: @_enterFeedback - @$aboutImage = @$('.about img') - @$craftingPlanButton = @$('.button.craftingPlan') - @$name = @$('.about .title') - @$officialLink = @$('.about a.officialLink') - @$sourceModLink = @$('.about a.sourceMod') - @$aboutLinks = @$('.about .right') + @$aboutImage = @$(".about img") + @$craftingPlanButton = @$(".button.craftingPlan") + @$name = @$(".about .title") + @$officialLink = @$(".about a.officialLink") + @$sourceModLink = @$(".about a.sourceMod") + @$aboutLinks = @$(".about .right") - @$multiblockSection = @$('section.multiblock') - @$recipeContainer = @$('section.recipes .panel') - @$recipesSection = @$('section.recipes') - @$recipesSectionTitle = @$('section.recipes h2') - @$similarSection = @$('section.similar') - @$usedAsToolToMakeSection = @$('section.usedAsToolToMake') - @$usedToMakeSection = @$('section.usedToMake') - @$videosContainer = @$('section.videos .panel') - @$videosSection = @$('section.videos') - @$videosSectionTitle = @$('section.videos h2') + @$multiblockSection = @$("section.multiblock") + @$recipeContainer = @$("section.recipes .panel") + @$recipesSection = @$("section.recipes") + @$recipesSectionTitle = @$("section.recipes h2") + @$similarSection = @$("section.similar") + @$usedAsToolToMakeSection = @$("section.usedAsToolToMake") + @$usedToMakeSection = @$("section.usedToMake") + @$videosContainer = @$("section.videos .panel") + @$videosSection = @$("section.videos") + @$videosSectionTitle = @$("section.videos h2") super refresh: -> @@ -119,7 +121,7 @@ module.exports = class ItemPageController extends PageController @_descriptionController.imageBase = c.url.itemImageDir @model.itemDisplay 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 else @hide @$aboutLinks @@ -155,20 +157,20 @@ module.exports = class ItemPageController extends PageController events: -> return _.extend super, - 'click a.craftingPlan': 'routeLinkClick' - 'click a.sourceMod': 'routeLinkClick' - 'click .markdown a': 'routeLinkClick' - 'click .button.craftingPlan': 'craftingPlanButtonClicked' + "click a.craftingPlan": "routeLinkClick" + "click a.sourceMod": "routeLinkClick" + "click .markdown a": "routeLinkClick" + "click .button.craftingPlan": "craftingPlanButtonClicked" # Private Methods ############################################################################## _beginEditingDescription: -> if not @user? 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? - 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 attributes = @@ -179,27 +181,29 @@ module.exports = class ItemPageController extends PageController @_descriptionFile.fetch() .then => if @_descriptionFile.encodedData?.length > 0 - @model.item.parse @_descriptionFile.getDecodedData 'utf8' + parser = new ItemDetailJsonParser item:@model.item + parser.parse @_descriptionFile.getDecodedData "utf8" else - @model.item.description = '' + @model.item.detail = new ItemDetail item:@model.item - @_descriptionController.model = @model.item.description + @_descriptionController.model = @model.item.detail.description _endEditingDescription: -> - oldDescription = @model.item.description + oldDescription = @model.item.detail.description promises = [] saveList = [] for imageFile in @_descriptionController.imageFiles saveList.push 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 - @_descriptionFile.setDecodedData @model.item.unparse() + @model.item.detail.description = @_descriptionController.model + parser = new ItemDetailJsonParser item:@model.item + @_descriptionFile.setDecodedData parser.format @model.item.detail saveList.push 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)-> return w(true) if fileList.length is 0 @@ -211,7 +215,7 @@ module.exports = class ItemPageController extends PageController saveNextFile saveList .catch (e)=> - @model.item.description = oldDescription + @model.item.detail.description = oldDescription throw e _refreshDescription: -> @@ -225,7 +229,7 @@ module.exports = class ItemPageController extends PageController recipes = @model.findRecipes() 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 controller = @_recipeControllers[index] @@ -263,16 +267,16 @@ module.exports = class ItemPageController extends PageController _refreshSourceMod: -> mod = @model.item.mod - @$sourceModLink.attr 'href', c.url.mod @model.itemDisplay + @$sourceModLink.attr "href", c.url.mod @model.itemDisplay @$sourceModLink.text mod.name @show @$sourceModLink _refreshUsedAsToolToMake: -> - @_usedAsToolToMakeController.title = 'Used as Tool to Make' + @_usedAsToolToMakeController.title = "Used as Tool to Make" @_usedAsToolToMakeController.model = @model.findToolForItems() _refreshUsedToMake: -> - @_usedToMakeController.title = 'Used to Make' + @_usedToMakeController.title = "Used to Make" @_usedToMakeController.model = @model.findComponentInItems() _refreshVideos: -> @@ -281,7 +285,7 @@ module.exports = class ItemPageController extends PageController videos = @model.item.detail?.videos 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 controller = @_videoControllers[index] diff --git a/src/common/constants.coffee b/src/common/constants.coffee index 8c1214f7a..4799b4d04 100644 --- a/src/common/constants.coffee +++ b/src/common/constants.coffee @@ -81,7 +81,7 @@ duration.slow = 1200 exports.gitHub = gitHub = {} gitHub.file = {} 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 %>" exports.key = key = {}