Add a "Random Item" link to the breadcrumb bar

fixes #216
This commit is contained in:
Andrew Miner
2016-05-07 12:25:21 -07:00
parent 841fac38d3
commit da1419d6b6
8 changed files with 87 additions and 38 deletions
+6
View File
@@ -93,6 +93,12 @@ module.exports = class Mod extends BaseModel
# Item Methods ################################################################################# # Item Methods #################################################################################
chooseRandomItem: ->
effectiveModVersion = @_activeModVersion or @getModVersion Mod.Version.Latest
return null unless effectiveModVersion?
return effectiveModVersion.chooseRandomItem()
eachItem: (callback)-> eachItem: (callback)->
effectiveModVersion = @_activeModVersion or @getModVersion Mod.Version.Latest effectiveModVersion = @_activeModVersion or @getModVersion Mod.Version.Latest
effectiveModVersion.eachItem callback effectiveModVersion.eachItem callback
+6
View File
@@ -25,6 +25,12 @@ module.exports = class ModPack extends BaseModel
# Item Methods ################################################################################# # Item Methods #################################################################################
chooseRandomItem: ->
return null unless @_mods.length > 0
modIndex = Math.floor Math.random() * @_mods.length
return @_mods[modIndex].chooseRandomItem()
findItem: (itemSlug, options={})-> findItem: (itemSlug, options={})->
options.includeDisabled ?= false options.includeDisabled ?= false
@@ -59,6 +59,10 @@ module.exports = class ModVersion extends BaseModel
return null if result.length is 0 return null if result.length is 0
return result return result
chooseRandomItem: ->
itemIndex = Math.floor Math.random() * @_slugs.length
return @_slugs[itemIndex]
eachItem: (callback)-> eachItem: (callback)->
for slug in @_slugs for slug in @_slugs
item = @findItem slug item = @findItem slug
+3 -1
View File
@@ -21,4 +21,6 @@
.button.search: .bezel: p Search .button.search: .bezel: p Search
.button.login: .bezel: p Login .button.login: .bezel: p Login
.breadcrumbs .breadcrumb-bar
.breadcrumbs
.extra-nav
+32 -31
View File
@@ -15,10 +15,6 @@
display : flex; display : flex;
align-items : center; align-items : center;
@include screen-size(mobile) {
display : none;
}
a { a {
flex : 0 0 auto; flex : 0 0 auto;
height : $size-minecraft-block * 1.5; height : $size-minecraft-block * 1.5;
@@ -29,30 +25,15 @@
position : relative; position : relative;
height : $size-minecraft-block * 1.5; height : $size-minecraft-block * 1.5;
width : $size-minecraft-block * 1.5; width : $size-minecraft-block * 1.5;
@include screen-size(desktop) {
top : -$size-minecraft-block * 0.5;
left : -$size-minecraft-block * 0.5;
height : $size-minecraft-block * 2.0;
width : $size-minecraft-block * 2.0;
}
} }
} }
h1 { h1 {
flex: 1 1 auto; flex: 1 1 auto;
white-space: nowrap; white-space: nowrap;
@include screen-size(tablet) {
font-size : $font-size-xlarge;
}
} }
.addthis_sharing_toolbox { .addthis_sharing_toolbox {
@include screen-size(mobile) {
display: none;
}
flex : 0 0 auto; flex : 0 0 auto;
min-height : 37px; // actual size of addthis component min-height : 37px; // actual size of addthis component
min-width : 144px; min-width : 144px;
@@ -97,26 +78,40 @@
} }
} }
.breadcrumbs { .breadcrumb-bar {
background: $color-screen; background: $color-screen;
padding: 0 ($size-margin-medium + $size-margin-large);
font-family: $font-family-control; font-family: $font-family-control;
font-size: $font-size-medium; font-size: $font-size-medium;
padding-left: $size-margin-medium + $size-margin-large;
line-height: $font-size-medium + 2 * $size-margin-small; line-height: $font-size-medium + 2 * $size-margin-small;
text-indent: -$size-margin-large;
&:before { display: flex;
content: "";
margin-right: $size-margin-medium; .breadcrumbs {
flex: 1 1 75%;
text-indent: -$size-margin-large;
&:before {
content: "";
margin-right: $size-margin-medium;
}
a {
text-decoration: underline;
}
span {
margin: 0 $size-margin-medium;
}
} }
a { .extra-nav {
text-decoration: underline; flex: 1 1 25%;
} align-self: flex-end;
span { text-align: right;
margin: 0 $size-margin-medium;
} }
} }
} }
@@ -157,5 +152,11 @@
display: none; display: none;
} }
} }
.breadcrumb-bar {
.extra-nav {
display: none;
}
}
} }
} }
@@ -64,6 +64,7 @@ module.exports = class HeaderController extends BaseController
@$('.addthis_sharing_toolbox').addClass 'placeholder' @$('.addthis_sharing_toolbox').addClass 'placeholder'
@$breadcrumbs = @$('.breadcrumbs') @$breadcrumbs = @$('.breadcrumbs')
@$extraNav = @$('.extra-nav')
@$loginButtonLabel = @$('.button.login p') @$loginButtonLabel = @$('.button.login p')
@$title = $('title') @$title = $('title')
super super
@@ -77,6 +78,7 @@ module.exports = class HeaderController extends BaseController
@$loginButtonLabel.text if global.site.user? then "Logout" else "Login" @$loginButtonLabel.text if global.site.user? then "Logout" else "Login"
@_refreshBreadcrumbs() @_refreshBreadcrumbs()
@_refreshExtraNav()
@_refreshSelectedNavButton() @_refreshSelectedNavButton()
@_refreshTitle() @_refreshTitle()
super super
@@ -85,12 +87,12 @@ module.exports = class HeaderController extends BaseController
events: -> events: ->
_.extend super, _.extend super,
'click .craft': 'onCraft' 'click .craft': 'onCraft'
'click .browse': 'onBrowse' 'click .browse': 'onBrowse'
'click .login': 'onLogin' 'click .login': 'onLogin'
'click .news': 'onNews' 'click .news': 'onNews'
'click .search': 'onSearch' 'click .search': 'onSearch'
'click .breadcrumbs a': 'routeLinkClick' 'click .breadcrumb-bar a': 'routeLinkClick'
# Private Methods ############################################################################## # Private Methods ##############################################################################
@@ -109,6 +111,17 @@ module.exports = class HeaderController extends BaseController
else else
@hide @$breadcrumbs @hide @$breadcrumbs
_refreshExtraNav: ->
extraNavContent = @model?.controller?.getExtraNav()
if extraNavContent?
@$extraNav.empty()
@$extraNav.append extraNavContent
@show @$extraNav
else
@hide @$extraNav
_refreshSelectedNavButton: -> _refreshSelectedNavButton: ->
return unless @model?.page? return unless @model?.page?
@@ -68,6 +68,15 @@ module.exports = class ItemPageController extends PageController
$("<b>#{display.itemName}</b>") $("<b>#{display.itemName}</b>")
] ]
getExtraNav: ->
console.warn "getExtraNav()"
itemSlug = @_modPack.chooseRandomItem()
console.warn " itemSlug: #{itemSlug}"
return null unless itemSlug?
itemDisplay = @_modPack.findItemDisplay itemSlug
return $("<a href='#{itemDisplay.itemUrl}'>Random Item</a>")
getMetaDescription: -> getMetaDescription: ->
return null unless @_itemSlug? return null unless @_itemSlug?
display = @_modPack.findItemDisplay @_itemSlug display = @_modPack.findItemDisplay @_itemSlug
@@ -83,6 +92,10 @@ module.exports = class ItemPageController extends PageController
# BaseController Overrides ##################################################################### # BaseController Overrides #####################################################################
onDidModelChange: ->
@trigger c.event.change
super
onDidRender: -> onDidRender: ->
options = imageLoader:@_imageLoader, modPack:@_modPack, router:@_router, show:false options = imageLoader:@_imageLoader, modPack:@_modPack, router:@_router, show:false
@_multiblockController = @addChild MultiblockViewerController, '.view__multiblock_viewer', options @_multiblockController = @addChild MultiblockViewerController, '.view__multiblock_viewer', options
+4
View File
@@ -19,6 +19,10 @@ module.exports = class PageController extends BaseController
getBreadcrumbs: -> getBreadcrumbs: ->
return [] return []
getExtraNav: ->
# subclasses may override this to provide extra content in the right-hand side of the breadcrumb bar
return null
getMetaDescription: -> getMetaDescription: ->
# subclasses should override this to return the page-specific text for the meta description tag # subclasses should override this to return the page-specific text for the meta description tag
return null return null