From 96ddd1bd4df6658d7cd788f628424a740e7b471d Mon Sep 17 00:00:00 2001 From: Andrew Miner Date: Tue, 24 Mar 2015 17:12:25 -0700 Subject: [PATCH] Update markdown parsing to allow wiki links Any link inside a item detail page's markdown description which does not have a URL will be assumed to be the name of an item covered by Crafting Guide and an URL will be added to reference the appropiate browse page. --- .../controllers/item_page_controller.coffee | 6 ++-- src/coffee/main.coffee | 7 +++-- src/coffee/models/item_page.coffee | 30 +++++++++++++++++-- src/scss/main.scss | 1 + src/scss/markdown.scss | 10 +++++++ 5 files changed, 46 insertions(+), 8 deletions(-) diff --git a/src/coffee/controllers/item_page_controller.coffee b/src/coffee/controllers/item_page_controller.coffee index cf68ce113..4a113236c 100644 --- a/src/coffee/controllers/item_page_controller.coffee +++ b/src/coffee/controllers/item_page_controller.coffee @@ -113,7 +113,7 @@ module.exports = class ItemPageController extends PageController return _.extend super, 'click a.craftingPlan': 'routeLinkClick' 'click .byline a': 'routeLinkClick' - 'click .markdown': 'routeLinkClick' + 'click .markdown a': 'routeLinkClick' 'click button': 'craftingPlanButtonClicked' # Private Methods ############################################################################## @@ -132,9 +132,9 @@ module.exports = class ItemPageController extends PageController description = @model.compileDescription() if description? @$descriptionPanel.html description - @show @$descriptionPanel + @show @$descriptionSection else - @hide @$descriptionPanel + @hide @$descriptionSection _refreshRecipes: -> @_recipeControllers ?= [] diff --git a/src/coffee/main.coffee b/src/coffee/main.coffee index bfedb339f..0b171f21b 100644 --- a/src/coffee/main.coffee +++ b/src/coffee/main.coffee @@ -32,9 +32,10 @@ switch window.location.hostname global.env = 'production' logger.level = Logger.INFO -global.router = new CraftingGuideRouter -global.util = require 'util' -global.views = views +global.router = new CraftingGuideRouter +global.util = require 'util' +global.views = views +global.markdown = global.markdown.markdown global.feedbackController = new FeedbackController el:'.view__feedback' feedbackController.render() diff --git a/src/coffee/models/item_page.coffee b/src/coffee/models/item_page.coffee index 2638475a6..60b6f0575 100644 --- a/src/coffee/models/item_page.coffee +++ b/src/coffee/models/item_page.coffee @@ -8,6 +8,7 @@ All rights reserved. BaseModel = require './base_model' CraftingPlan = require './crafting_plan' {Event} = require '../constants' +{Url} = require '../constants' ######################################################################################################################## @@ -22,8 +23,33 @@ module.exports = class ItemPage extends BaseModel compileDescription: -> return null unless @item?.description? - description = _.parseMarkdown @item.description - return description + + tree = markdown.parse @item.description, 'Maruku' + refs = tree[1].references + + findLinkRefs = (node)=> + logger.debug "inspecting a #{node[0]}" + if node[0] is 'link_ref' + name = node[2] + logger.debug "found a link_ref for #{name}" + item = @modPack.findItemByName node[2] + if item? + logger.debug "found related item: #{item}" + node[0] = 'link' + node[1].href = Url.item itemSlug:item.slug.item, modSlug:item.slug.mod + delete node[1].ref + else + for index in [1...node.length] + if _.isArray node[index] + for child in node[index] + logger.indent() + findLinkRefs child + logger.outdent() + + findLinkRefs tree + + html = markdown.renderJsonML markdown.toHTMLTree tree + return html findComponentInItems: -> return @_findRecipesMatching (recipe)=> recipe.requires @item.slug diff --git a/src/scss/main.scss b/src/scss/main.scss index 3f721b288..8a09b65f9 100644 --- a/src/scss/main.scss +++ b/src/scss/main.scss @@ -75,6 +75,7 @@ $color-error-new: #CD0000; $color-footer: #3D1D09; $color-footer-text: #FFFFFF; $color-link: #0000FF; +$color-link-subtle: #545A99; $color-text: #000000; // Z-Index Layers ////////////////////////////////////////////////////////////////////////////////// diff --git a/src/scss/markdown.scss b/src/scss/markdown.scss index 1e89387a7..555b792d5 100644 --- a/src/scss/markdown.scss +++ b/src/scss/markdown.scss @@ -7,6 +7,16 @@ All rights reserved. .markdown { + a { + color: $color-link-subtle; + text-decoration: none; + + &:hover { + color: $color-link; + text-decoration: underline; + } + } + h1 { font-family: $font-family-normal; font-size: $font-size-large;