diff --git a/src/css/main.scss b/src/css/main.scss
index ee93094f7..f0868f76c 100644
--- a/src/css/main.scss
+++ b/src/css/main.scss
@@ -57,10 +57,12 @@ $color-background: #AAC9FF;
$color-background-panel: #FFFFFF;
$color-background-toolbar: rgba(255, 255, 255, 0.75);
$color-content: rgba(230, 230, 230, 0.90);
-$color-error-new: #CD0000;
$color-error: #F3C2C2;
+$color-error-new: #CD0000;
$color-footer: #3D1D09;
$color-footer-text: #FFFFFF;
+$color-link: #0000FF;
+$color-text: #000000;
// Z-Index Layers //////////////////////////////////////////////////////////////////////////////////
diff --git a/src/css/templates/index.scss b/src/css/templates/index.scss
index 987f78f4e..67ae54cad 100644
--- a/src/css/templates/index.scss
+++ b/src/css/templates/index.scss
@@ -9,8 +9,10 @@ All rights reserved.
@import 'crafting_table';
@import 'feedback';
@import 'inventory';
+@import 'item';
@import 'item_page';
@import 'mod';
@import 'mod_pack';
+@import 'mod_page';
@import 'recipe';
@import 'stack';
diff --git a/src/css/templates/item.scss b/src/css/templates/item.scss
new file mode 100644
index 000000000..dcd6130ae
--- /dev/null
+++ b/src/css/templates/item.scss
@@ -0,0 +1,46 @@
+/*
+Crafting Guide - item.scss
+
+Copyright (c) 2015 by Redwood Labs
+All rights reserved.
+*/
+
+.view__item {
+ a {
+ text-decoration: none;
+ width: 100%;
+
+ &:hover {
+ .itemName {
+ color: $color-link;
+ text-decoration: underline;
+ }
+
+ table {
+ background: $color-gray-faint;
+ }
+ }
+ }
+
+ table {
+ width: 100%;
+ }
+
+ td.itemName {
+ color: $color-text;
+ font-family: $font-family-normal;
+ font-size: $font-size-normal;
+ font-weight: bold;
+ padding-left: 1em;
+ text-align: left;
+ vertical-align: middle;
+ }
+
+ td.itemIcon {
+ width: 3.6em;
+
+ img {
+ height: 3.6em; width: 3.6em;
+ }
+ }
+}
diff --git a/src/css/templates/mod.scss b/src/css/templates/mod.scss
index 2f380c661..0538e3a3c 100644
--- a/src/css/templates/mod.scss
+++ b/src/css/templates/mod.scss
@@ -25,7 +25,7 @@ All rights reserved.
p {
font-family: $font-family-normal;
font-size: $font-size-normal;
-// text-decoration: underline;
+ text-decoration: underline;
}
}
diff --git a/src/css/templates/mod_page.scss b/src/css/templates/mod_page.scss
new file mode 100644
index 000000000..22281719c
--- /dev/null
+++ b/src/css/templates/mod_page.scss
@@ -0,0 +1,93 @@
+/*
+Crafting Guide - mod_page.scss
+
+Copyright (c) 2014 by Redwood Labs
+All rights reserved.
+*/
+
+.view__mod_page {
+ & > div {
+ vertical-align: top;
+ display: inline-block;
+ }
+
+ .sidebar {
+ position: relative; width: 18.75%;
+ padding: 1em;
+
+ .titleImage {
+ position: relative; height: 16em; width: 16em;
+ margin-bottom: 2em;
+
+ img {
+ position: relative; width: 100%;
+ }
+ }
+
+ .version {
+ position: relative; width: 80%;
+ margin: 0 10%;
+ margin-bottom: 1em;
+ }
+
+ .homePage {
+ position: relative; width: 80%;
+ margin: 0 10%;
+
+ p {
+ font-family: $font-family-normal;
+ font-size: $font-size-normal;
+ text-align: center;
+ }
+ }
+ }
+
+ .mainBody {
+ position: relative; width: 81.25%;
+ padding: 1em;
+ padding-top: 2em;
+
+ .name {
+ font-family: $font-family-header;
+ font-size: $font-size-x-large;
+ margin: 0;
+ }
+
+ .byline {
+ margin: 0.25em 0 2em 0;
+
+ p {
+ font-family: $font-family-normal;
+ font-size: $font-size-small;
+ font-style: italic;
+ }
+ }
+
+ .description {
+ margin-bottom: 4em;
+
+ p {
+ font-family: $font-family-normal;
+ font-size: $font-size-large;
+ }
+ }
+
+ .section {
+ h2 {
+ font-family: $font-family-header;
+ font-size: $font-size-large;
+ }
+
+ .panel {
+ background: white;
+ padding: 1em;
+
+ & > div {
+ position: relative; width: 33%;
+ display: inline-block;
+ padding: 0.5em;
+ }
+ }
+ }
+ }
+}
diff --git a/src/data/applied_energistics_2/mod.cg b/src/data/applied_energistics_2/mod.cg
index 5b65a1e5d..ebf5eb581 100644
--- a/src/data/applied_energistics_2/mod.cg
+++ b/src/data/applied_energistics_2/mod.cg
@@ -3,6 +3,6 @@ schema: 1
name: Applied Energistics 2
author: AlgorithmX2
description: A technical mod which adds an advanced, computer-based storage system
-url: http://www.mod-buildcraft.com
+homePageUrl: http://www.mod-buildcraft.com
version: rv1-stable-1
diff --git a/src/data/buildcraft/logo.png b/src/data/buildcraft/logo.png
new file mode 100644
index 000000000..93cd42219
Binary files /dev/null and b/src/data/buildcraft/logo.png differ
diff --git a/src/data/buildcraft/mod.cg b/src/data/buildcraft/mod.cg
index b2f0ad6fe..e5b1b1967 100644
--- a/src/data/buildcraft/mod.cg
+++ b/src/data/buildcraft/mod.cg
@@ -3,6 +3,6 @@ schema: 1
name: Buildcraft
author: SpaceToad
description: A technical mod which adds power generation, mining, and building systems
-url: http://www.mod-buildcraft.com
+homePageUrl: http://www.mod-buildcraft.com
version: 6.2.6
diff --git a/src/data/industrial_craft_2/logo.png b/src/data/industrial_craft_2/logo.png
new file mode 100644
index 000000000..a88dc55ed
Binary files /dev/null and b/src/data/industrial_craft_2/logo.png differ
diff --git a/src/data/industrial_craft_2/mod.cg b/src/data/industrial_craft_2/mod.cg
index bfa5abbe2..b33c47305 100644
--- a/src/data/industrial_craft_2/mod.cg
+++ b/src/data/industrial_craft_2/mod.cg
@@ -3,7 +3,7 @@ schema: 1
name: Industrial Craft 2
author: Alblaka
description: A technical mod adding multi-tiered power systems, mining and ore processing, and powered armor
-url: http://wiki.industrial-craft.net/
+homePageUrl: http://wiki.industrial-craft.net/
version: experimental-2.2.663
version: classic-1.7.10-6
diff --git a/src/data/minecraft/mod.cg b/src/data/minecraft/mod.cg
index c7097eeff..b821f31ed 100644
--- a/src/data/minecraft/mod.cg
+++ b/src/data/minecraft/mod.cg
@@ -3,6 +3,6 @@ schema: 1
name: Minecraft
author: Mojang
description: The basic game by itself
-url: http://www.minecraft.net
+homePageUrl: http://www.minecraft.net
version: 1.7.10
diff --git a/src/data/thermal_expansion/mod.cg b/src/data/thermal_expansion/mod.cg
index 0fe46d2e9..3bd83d648 100644
--- a/src/data/thermal_expansion/mod.cg
+++ b/src/data/thermal_expansion/mod.cg
@@ -3,6 +3,6 @@ schema: 1
name: Thermal Expansion
author: Team CoFH
description: A technical mod which adds ore processing, item transportion, fluid handling, and many new ores.
-url: http://teamcofh.com/thermal-expansion/
+homePageUrl: http://teamcofh.com/thermal-expansion/
version: 4.0.0B8-23
diff --git a/src/design/pages.graffle/data.plist b/src/design/pages.graffle/data.plist
index c21ecc0c0..fe5389591 100644
--- a/src/design/pages.graffle/data.plist
+++ b/src/design/pages.graffle/data.plist
@@ -514,10 +514,10 @@
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
-{\colortbl;\red255\green255\blue255;\red0\green0\blue0;\red0\green0\blue255;}
+{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
-\f0\b\fs36 \cf2 Quarry}
+\f0\b\fs36 \cf0 Quarry}
VerticalPad
0
@@ -950,7 +950,7 @@ by SpaceToad}
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;}
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
@@ -1082,15 +1082,14 @@ by SpaceToad}
dWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBW
ZXN0aWJ1bHVtIGVmZmljaXR1ciB1bHRyaWNlcyBjb21t
b2RvhoQCaUkBgaYBkoSEhAxOU0RpY3Rpb25hcnkAlIQB
- aQWShJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyEBVsy
- OGNdBgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAIQB
- Zg6EAWMAnQGdAJ0AhpKElpYGTlNLZXJuhpKEhIQITlNO
- dW1iZXIAhIQHTlNWYWx1ZQCUhAEqhIQBZKEAhpKElpYH
- TlNDb2xvcoaShISEB05TQ29sb3IAlJ0ChARmZmZmAAAA
- AYaShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh
+ aQSShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh
cmFncmFwaFN0eWxlAJSEBENDQFMAAISEhAdOU0FycmF5
- AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYNTlNTdHJv
- a2VDb2xvcoaShKOdA4QCZmYAAYaGhg==
+ AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYHTlNDb2xv
+ coaShISEB05TQ29sb3IAlIQBYwKEBGZmZmYAAAABhpKE
+ lpYGTlNGb250hpKEhIQGTlNGb250HpSZHIQFWzI4Y10G
+ AAAAFAAAAP/+SABlAGwAdgBlAHQAaQBjAGEAhAFmDp8A
+ nwGfAJ8AhpKElpYGTlNLZXJuhpKEhIQITlNOdW1iZXIA
+ hIQHTlNWYWx1ZQCUhAEqhIQBZKcAhoaG
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
@@ -1192,7 +1191,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;}
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
@@ -1215,7 +1214,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort
ManualSizeImage
YES
Offset
- {0.01932367192046051, -0}
+ {0.019323671920460469, -0}
Shape
Rectangle
Style
@@ -1230,7 +1229,7 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort
ImageSizing
0
Offset
- {0.01932367192046051, -0}
+ {0.019323671920460469, -0}
shadow
@@ -1634,16 +1633,15 @@ Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tort
BAtzdHJlYW10eXBlZIHoA4QBQISEhBJOU0F0dHJpYnV0
ZWRTdHJpbmcAhIQITlNPYmplY3QAhZKEhIQITlNTdHJp
bmcBlIQBKwxieSBTcGFjZVRvYWSGhAJpSQEMkoSEhAxO
- U0RpY3Rpb25hcnkAlIQBaQWShJaWBk5TS2VyboaShISE
- CE5TTnVtYmVyAISEB05TVmFsdWUAlIQBKoSEAWSdAIaS
- hJaWBk5TRm9udIaShISEBk5TRm9udB6UmSyEBVs0NGNd
- BgAAACQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAC0ATwBi
- AGwAaQBxAHUAZQCEAWYMhAFjAKEBoQChAIaShJaWDU5T
- U3Ryb2tlQ29sb3KGkoSEhAdOU0NvbG9yAJShA4QCZmYA
- AYaShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh
- cmFncmFwaFN0eWxlAJSEBENDQFMAAISEhAdOU0FycmF5
- AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYHTlNDb2xv
- coaShKOhAoQEZmZmZgAAAAGGhoY=
+ U0RpY3Rpb25hcnkAlIQBaQSShJaWEE5TUGFyYWdyYXBo
+ U3R5bGWGkoSEhBBOU1BhcmFncmFwaFN0eWxlAJSEBEND
+ QFMAAISEhAdOU0FycmF5AJSZAIaBIAqEBFszZl0OJIPN
+ zEw9hpKElpYHTlNDb2xvcoaShISEB05TQ29sb3IAlIQB
+ YwKEBGZmZmYAAAABhpKElpYGTlNGb250hpKEhIQGTlNG
+ b250HpSZLIQFWzQ0Y10GAAAAJAAAAP/+SABlAGwAdgBl
+ AHQAaQBjAGEALQBPAGIAbABpAHEAdQBlAIQBZgyfAJ8B
+ nwCfAIaShJaWBk5TS2VyboaShISECE5TTnVtYmVyAISE
+ B05TVmFsdWUAlIQBKoSEAWSnAIaGhg==
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
@@ -2024,7 +2022,7 @@ BuildCraft 6.1 Preview: More Robots!}
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;}
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
@@ -2156,17 +2154,15 @@ BuildCraft 6.1 Preview: More Robots!}
dWx0cmljZXMgcG9zdWVyZSBjdWJpbGlhIEN1cmFlOyBW
ZXN0aWJ1bHVtIGVmZmljaXR1ciB1bHRyaWNlcyBjb21t
b2RvhoQCaUkBgaYBkoSEhAxOU0RpY3Rpb25hcnkAlIQB
- aQaShJaWBk5TS2VyboaShISECE5TTnVtYmVyAISEB05T
- VmFsdWUAlIQBKoSEAWSdAIaShJaWDU5TU3Ryb2tlQ29s
- b3KGkoSEhAdOU0NvbG9yAJSEAWMChARmZmZmAAAAAYaS
- hJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyEBVsyOGNd
- BgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAIQBZg6f
- AJ8BnwCfAIaShJaWB05TQ29sb3KGkp+ShJaWEE5TUGFy
- YWdyYXBoU3R5bGWGkoSEhBdOU011dGFibGVQYXJhZ3Jh
- cGhTdHlsZQCEhBBOU1BhcmFncmFwaFN0eWxlAJSEBEND
- QFMAAISEhA5OU011dGFibGVBcnJheQCEhAdOU0FycmF5
+ aQWShJaWBk5TRm9udIaShISEBk5TRm9udB6UmRyEBVsy
+ OGNdBgAAABQAAAD//kgAZQBsAHYAZQB0AGkAYwBhAIQB
+ Zg6EAWMAnQGdAJ0AhpKElpYGTlNLZXJuhpKEhIQITlNO
+ dW1iZXIAhIQHTlNWYWx1ZQCUhAEqhIQBZKEAhpKElpYH
+ TlNDb2xvcoaShISEB05TQ29sb3IAlJ0ChARmZmZmAAAA
+ AYaShJaWEE5TUGFyYWdyYXBoU3R5bGWGkoSEhBBOU1Bh
+ cmFncmFwaFN0eWxlAJSEBENDQFMAAISEhAdOU0FycmF5
AJSZAIaBIAqEBFszZl0OJIPNzEw9hpKElpYNTlNTdHJv
- a2VXaWR0aIaShJucnZ0AhoaG
+ a2VDb2xvcoaShKOdA4QCZmYAAYaGhg==
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
@@ -2176,7 +2172,7 @@ BuildCraft 6.1 Preview: More Robots!}
\pard\pardeftab720\sl280
\f0\fs28 \cf2 \expnd0\expndtw0\kerning0
-\outl0\strokewidth0 \strokec2 Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tortor. Nulla eget molestie metus. Cras vulputate felis ut lectus iaculis, nec iaculis dui auctor. Sed nisl nisl, feugiat mollis elit vel, gravida euismod est. Vivamus porttitor tempus euismod. Proin at condimentum nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum efficitur ultrices commodo}
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Proin ac efficitur tortor. Nulla eget molestie metus. Cras vulputate felis ut lectus iaculis, nec iaculis dui auctor. Sed nisl nisl, feugiat mollis elit vel, gravida euismod est. Vivamus porttitor tempus euismod. Proin at condimentum nibh. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Vestibulum efficitur ultrices commodo}
VerticalPad
0
@@ -2263,7 +2259,7 @@ BuildCraft 6.1 Preview: More Robots!}
0
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;}
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
@@ -2478,7 +2474,7 @@ BuildCraft 6.1 Preview: More Robots!}
10
Text
{\rtf1\ansi\ansicpg1252\cocoartf1343\cocoasubrtf160
-\cocoascreenfonts1{\fonttbl\f0\fnil\fcharset0 PressStart2P-Regular;}
+\cocoascreenfonts1{\fonttbl\f0\fswiss\fcharset0 Helvetica;}
{\colortbl;\red255\green255\blue255;}
\pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
@@ -2811,7 +2807,7 @@ BuildCraft 6.1 Preview: More Robots!}
MasterSheets
ModificationDate
- 2015-01-19 19:14:03 +0000
+ 2015-01-28 21:33:51 +0000
Modifier
Andrew Miner
NotesVisible
@@ -2891,8 +2887,6 @@ BuildCraft 6.1 Preview: More Robots!}
Canvas 1
- Frame
- {{558, -0}, {1998, 1417}}
ListView
OutlineWidth
@@ -2905,8 +2899,6 @@ BuildCraft 6.1 Preview: More Robots!}
SidebarWidth
168
- VisibleRegion
- {{-320, 0}, {1801, 1275}}
Zoom
1
ZoomValues
diff --git a/src/scripts/constants.coffee b/src/scripts/constants.coffee
index 30750c5a4..08cf9d139 100644
--- a/src/scripts/constants.coffee
+++ b/src/scripts/constants.coffee
@@ -49,12 +49,13 @@ ModelState.loading = 'loading'
ModelState.loaded = 'loaded'
ModelState.failed = 'failed'
-exports.Url = Url = {}
-Url.itemIcon = _.template "/data/<%= modSlug %>/<%= modVersion %>/images/<%= slug %>.png"
-Url.item = _.template "/item/<%= slug %>"
-Url.mod = _.template "/mod/<%= modSlug %>"
-Url.modData = _.template "/data/<%= modSlug %>/mod.cg"
-Url.modVersion = _.template "/data/<%= modSlug %>/<%= modVersion %>/mod-version.cg"
+exports.Url = Url = {}
+Url.itemIcon = _.template "/data/<%= modSlug %>/<%= modVersion %>/images/<%= slug %>.png"
+Url.item = _.template "/item/<%= slug %>"
+Url.mod = _.template "/mod/<%= modSlug %>"
+Url.modData = _.template "/data/<%= modSlug %>/mod.cg"
+Url.modVersion = _.template "/data/<%= modSlug %>/<%= modVersion %>/mod-version.cg"
+Url.modLogoImage = _.template "/data/<%= modSlug %>/logo.png"
exports.UrlParam = UrlParam = {}
UrlParam.quantity = 'count'
diff --git a/src/scripts/controllers/item_controller.coffee b/src/scripts/controllers/item_controller.coffee
new file mode 100644
index 000000000..0a305f0f9
--- /dev/null
+++ b/src/scripts/controllers/item_controller.coffee
@@ -0,0 +1,36 @@
+###
+Crafting Guide - item_controller.coffee
+
+Copyright (c) 2015 by Redwood Labs
+All rights reserved.
+###
+
+BaseController = require './base_controller'
+{Url} = require '../constants'
+
+########################################################################################################################
+
+module.exports = class ItemController extends BaseController
+
+ constructor: (options={})->
+ 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 = 'item'
+ super options
+
+ @_modPack = options.modPack
+
+ # BaseController Overrides #####################################################################
+
+ onDidRender: ->
+ @$icon = @$('img')
+ @$name = @$('.itemName')
+ @$nameLink = @$('a')
+ super
+
+ refresh: ->
+ display = @_modPack.findItemDisplay @model.slug
+
+ @$icon.attr 'src', Url.itemIcon display
+ @$name.html display.itemName
+ @$nameLink.attr 'href', Url.item display
diff --git a/src/scripts/controllers/mod_controller.coffee b/src/scripts/controllers/mod_controller.coffee
index 8a63359fe..23ce9be36 100644
--- a/src/scripts/controllers/mod_controller.coffee
+++ b/src/scripts/controllers/mod_controller.coffee
@@ -37,6 +37,7 @@ module.exports = class ModController extends BaseController
@$nameLink = @$('.name a')
@$nameText = @$('.name p')
@$description = @$('.description p')
+
super
refresh: ->
@@ -59,7 +60,7 @@ module.exports = class ModController extends BaseController
option.attr 'selected', 'selected'
@$version.append option
- # @$nameLink.attr 'href', Url.mod modSlug:@model.slug
+ @$nameLink.attr 'href', Url.mod modSlug:@model.slug
@$nameText.html @model.name
@$description.html @model.description
diff --git a/src/scripts/controllers/mod_page_controller.coffee b/src/scripts/controllers/mod_page_controller.coffee
index 6cd16d7c6..bcc13133b 100644
--- a/src/scripts/controllers/mod_page_controller.coffee
+++ b/src/scripts/controllers/mod_page_controller.coffee
@@ -5,10 +5,12 @@ Copyright (c) 2015 by Redwood Labs
All rights reserved.
###
-BaseController = require './base_controller'
-{Duration} = require '../constants'
-ModPack = require '../models/mod_pack'
-RecipeController = require './recipe_controller'
+BaseController = require './base_controller'
+{Duration} = require '../constants'
+Mod = require '../models/mod'
+ModPack = require '../models/mod_pack'
+ItemController = require './item_controller'
+{Url} = require '../constants'
########################################################################################################################
@@ -20,52 +22,117 @@ module.exports = class ModPageController extends BaseController
options.templateName = 'mod_page'
super options
- @_modPack = options.modPack
- @_recipeControllers = []
- @_delayStep = options.delayStep
+ @_delayStep = options.delayStep
+ @_effectiveModVersion = null
+ @_itemControllers = []
+ @_modPack = options.modPack
+
+ Object.defineProperties this,
+ effectiveModVersion: {get:@_getEffectiveModVersion}
+
+ # Event Methods ################################################################################
+
+ onVersionChanged: ->
+ version = @$versionSelector.val()
+ logger.debug "new version: #{version}"
+ modVersion = @model.getModVersion version
+ logger.debug "new mod version: #{modVersion}"
+ @_effectiveModVersion = modVersion
+ if modVersion? then modVersion.fetch()
+ @refresh()
# BaseController Overrides #####################################################################
onDidRender: ->
- @$title = @$('h1')
- @$recipes = @$('.recipes')
+ @$name = @$('.name')
+ @$byline = @$('.byline p')
+ @$description = @$('.description p')
+ @$homePageLink = @$('.homePage')
+ @$items = @$('.items .panel')
+ @$titleImage = @$('.titleImage img')
+ @$versionSelector = @$('select.version')
+ @$wikiLink = @$('.wiki')
+
super
refresh: ->
- @$title.html if @model? then @model.name else ''
-
- controllerIndex = 0
- delay = 0
- if @model?.activeModVersion?.isLoaded
- @$recipes.show duration:Duration.fast
- @model.eachItem (item)=>
- recipe = item.getPrimaryRecipe()
- return if not recipe
-
- item.eachRecipe (recipe)=>
- controller = @_recipeControllers[controllerIndex]
- if not controller?
- _.delay (=> @_createRecipeController recipe), delay
- delay += @_delayStep
- else
- controller.model = recipe
- controllerIndex += 1
- else
- @$recipes.hide duration:Duration.fast
-
- while @_recipeControllers.length > controllerIndex
- controller = @_recipeControllers.pop()
- controller.$el.slideUp duration:Duration.fast, complete:-> @remove()
+ @$name.html if @model? then @model.name else ''
+ @$byline.html if @model? then "by #{@model.author}" else ''
+ @$titleImage.attr 'src', (if @model? then Url.modLogoImage(modSlug:@model.slug) else '')
+ @$description.html if @model? then @model.description else ''
+ @_refreshHomePageLink()
+ @_refreshItems()
+ @_refreshVersions()
super
+ # Backbone.View Methods ########################################################################
+
+ events:
+ 'change select.version': 'onVersionChanged'
+
# Private Methods ##############################################################################
- _createRecipeController: (recipe)->
- controller = new RecipeController model:recipe, modPack:@_modPack
+ _createItemController: (item)->
+ controller = new ItemController model:item, modPack:@_modPack
controller.$el.hide()
controller.render()
- @_recipeControllers.push controller
- @$recipes.append controller.$el
+ @_itemControllers.push controller
+ @$items.append controller.$el
controller.$el.slideDown duration:Duration.fast
+
+ _getEffectiveModVersion: ->
+ return @_effectiveModVersion if @_effectiveModVersion?
+ return null unless @model?
+
+ modVersion = @model.activeModVersion
+ modVersion ?= @model.getModVersion Mod.Version.Latest
+ return modVersion
+
+ _refreshHomePageLink: ->
+ if @model.homePageUrl?
+ @$homePageLink.fadeIn duration:Duration.fast
+ @$homePageLink.attr 'href', @model.homePageUrl
+ else
+ @$homePageLink.fadeOut duration:Duration.fast
+
+ _refreshItems: ->
+ controllerIndex = 0
+ delay = 0
+
+ effectiveModVersion = @effectiveModVersion
+ if effectiveModVersion?
+ @$items.show duration:Duration.fast
+ effectiveModVersion.eachItem (item)=>
+ controller = @_itemControllers[controllerIndex]
+ if not controller?
+ _.delay (=> @_createItemController item), delay
+ delay += @_delayStop
+ else
+ controller.model = item
+ controllerIndex += 1
+ else
+ @$items.hide duration:Duration.fast
+
+ while @_itemControllers.length > controllerIndex
+ controller = @_itemControllers.pop()
+ controller.$el.slideUp duration:Duration.fast, complete:-> @remove()
+
+ _refreshVersions: ->
+ @$versionSelector.empty()
+ return unless @model?
+
+ effectiveModVersion = @effectiveModVersion
+ versionCount = 0
+ @model.eachModVersion (modVersion)=>
+ option = $("")
+ if modVersion is effectiveModVersion
+ option.attr 'selected', 'selected'
+ @$versionSelector.append option
+ versionCount++
+
+ if versionCount <= 1
+ @$versionSelector.attr 'disabled', 'disabled'
+ else
+ @$versionSelector.removeAttr 'disabled'
diff --git a/src/scripts/models/mod.coffee b/src/scripts/models/mod.coffee
index 57f4a8d01..4ba6f2a68 100644
--- a/src/scripts/models/mod.coffee
+++ b/src/scripts/models/mod.coffee
@@ -19,7 +19,7 @@ module.exports = class Mod extends BaseModel
attributes.author ?= ''
attributes.description ?= ''
attributes.name ?= ''
- attributes.primaryUrl ?= null
+ attributes.homePageUrl ?= null
super attributes, options
@_activeModVersion = null
@@ -62,9 +62,18 @@ module.exports = class Mod extends BaseModel
return unless @_activeModVersion?
@_activeModVersion.eachName callback
- findItem: (slug)->
- return unless @_activeModVersion?
- @_activeModVersion.findItem slug
+ findItem: (slug, options={})->
+ options.includeDisabled ?= false
+
+ if not options.includeDisabled
+ return unless @_activeModVersion?
+ return @_activeModVersion.findItem slug
+ else
+ for modVersion in @_modVersions
+ item = modVersion.findItem slug
+ return item if item?
+
+ return null
findItemByName: (name)->
return unless @_activeModVersion?
@@ -100,6 +109,14 @@ module.exports = class Mod extends BaseModel
for modVersion in @_modVersions
callback modVersion
+ getModVersion: (version)->
+ return null if version is Mod.Version.None
+ return @_modVersions[@_modVersions.length-1] if version is Mod.Version.Latest
+
+ for modVersion in @_modVersions
+ return modVersion if modVersion.version is version
+ return null
+
getActiveVersion: ->
return @_activeVersion
diff --git a/src/scripts/models/mod_pack.coffee b/src/scripts/models/mod_pack.coffee
index d63613c66..e7f1d29a2 100644
--- a/src/scripts/models/mod_pack.coffee
+++ b/src/scripts/models/mod_pack.coffee
@@ -22,10 +22,12 @@ module.exports = class ModPack extends BaseModel
# Public Methods ###############################################################################
- findItem: (slug)->
+ findItem: (slug, options={})->
+ options.includeDisabled ?= false
+
for mod in @_mods
- continue unless mod.enabled
- item = mod.findItem slug
+ continue unless mod.enabled or options.includeDisabled
+ item = mod.findItem slug, options
return item if item?
return null
@@ -42,7 +44,7 @@ module.exports = class ModPack extends BaseModel
findItemDisplay: (slug)->
result = {}
- item = @findItem slug
+ item = @findItem slug, includeDisabled:true
if item?
result.modSlug = item.modVersion.modSlug
result.modVersion = item.modVersion.version
diff --git a/src/scripts/models/parser_versions/mod_parser_v1.coffee b/src/scripts/models/parser_versions/mod_parser_v1.coffee
index cfd4419d0..90e7716ed 100644
--- a/src/scripts/models/parser_versions/mod_parser_v1.coffee
+++ b/src/scripts/models/parser_versions/mod_parser_v1.coffee
@@ -42,11 +42,11 @@ module.exports = class ModParserV2 extends CommandParserVersionBase
if name.length is 0 then throw new Error '"name" cannot be empty'
@_rawData.name = name
- _command_url: (url='')->
- if @_rawData.url? then throw new Error 'duplicate declaration of "url"'
- if url.length is 0 then throw new Error 'url cannot be empty'
+ _command_homePageUrl: (homePageUrl='')->
+ if @_rawData.homePageUrl? then throw new Error 'duplicate declaration of "homePageUrl"'
+ if homePageUrl.length is 0 then throw new Error 'homePageUrl cannot be empty'
- @_rawData.url = url
+ @_rawData.homePageUrl = homePageUrl
_command_version: (version='')->
if version.length is 0 then throw new Error 'version cannot be empty'
@@ -58,13 +58,13 @@ module.exports = class ModParserV2 extends CommandParserVersionBase
_buildMod: (rawData, model)->
if not rawData.name? then throw new Error 'the "name" declaration is required'
- if not rawData.url? then throw new Error 'the "url" declaration is required'
+ if not rawData.homePageUrl? then throw new Error 'the "homePageUrl" declaration is required'
if not rawData.versions? then throw new Error 'at least one "version" declaration is required'
model.author = rawData.author if rawData.author?
model.description = rawData.description if rawData.description?
model.name = rawData.name
- model.primaryUrl = rawData.url
+ model.homePageUrl = rawData.homePageUrl
for version in rawData.versions
model.addModVersion new ModVersion modSlug:model.slug, version:version
diff --git a/src/templates/item.jade b/src/templates/item.jade
new file mode 100644
index 000000000..f210ca3c3
--- /dev/null
+++ b/src/templates/item.jade
@@ -0,0 +1,13 @@
+//-
+//- Crafting Guide - item.jade
+//-
+//- Copyright (c) 2015 by Redwood Labs
+//- All rights reserved.
+//-
+
+.view__item
+ a
+ table
+ tr
+ td.itemIcon: img
+ td.itemName(width="*")
diff --git a/src/templates/mod_page.jade b/src/templates/mod_page.jade
index b4587dd6e..848b93ad3 100644
--- a/src/templates/mod_page.jade
+++ b/src/templates/mod_page.jade
@@ -6,7 +6,16 @@
//-
.view__mod_page
- h1
+ .sidebar
+ .titleImage: img
+ select.version
+ a.homePage: p Offical Home Page
- .recipes
- h2 Recipes
+ .mainBody
+ h1.name
+ .byline: p
+ .description: p
+
+ .section.items
+ h2 Items
+ .panel