1
0
mirror of https://github.com/kihashi/stardew_community_checklist.git synced 2025-10-19 08:03:17 +00:00

Merge branch 'release/1.4' into gh-pages

This commit is contained in:
John Cleaver 2016-04-15 21:36:23 -04:00
commit 6c0cf9998c
5 changed files with 128 additions and 15 deletions

View File

@ -1,2 +1,71 @@
# Stardew Community Checklist # Stardew Community Checklist
A checklist for the Community Center Bundles in Stardew Valley A checklist for the Community Center Bundles in Stardew Valley
SCC is an application for keeping track of the community center bundles in Stardew Valley. When I started playing the
game, I spent a decent amount of time searching the wiki trying to figure out what items I needed for the community
center and keeping track of which ones I had already turned in. I started working on this as a way to help myself out
playing the game. Of course, I finished the community center bundles before I finished the site, but I figured that
maybe someone else would get some use out of it.
A live version of the site is available at the following link:
---
# http://www.stardewcommunitychecklist.com/
---
Note: The layout makes pretty big use of [Flexbox](https://www.w3.org/TR/css-flexbox-1/), which is not quite finalized.
I've tested the site in Chrome, Firefox, and Safari. IE seems to have
[some problems with text layout](http://i.imgur.com/smeMuAi.png), though.
# Features
* View items by bundle, alphabetically, by season, or by the skill involved in getting the item.
* View Bundle and Room completion rates.
* Filter out completed items and bundles.
* Spoiler Free Mode -- Hide the text, season, and skill information for items as well as bundle rewards.
* Item Search -- Want to see if an item is in a bundle? Search for it in the Alphabetical list!
* Save your progress -- Whenever you make a change to the checklist, it is saved to your browser's local storage.
* Import and Export -- Want to take your data to another computer? Export the data string and import it at another
computer.
## Item Information
An item block looks like this:
![Item Block Image](http://i.imgur.com/VbsR6Su.png)
In it, you can see the item name, where it can be obtained, which bundles it is in (and whether you have it checked off
for those bundles), which seasons it can be obtained in, and which skills can be used in getting it. Want to check it
off? Simply click the button for the appropriate bundle.
# Things to come
I have some planned features listed below, but I am open to feature requests.
If you think of something, please, list it below or
[open an issue](https://github.com/kihashi/stardew_community_checklist/issues/new).
* Season Completion Rate
* Skill Completion Rate
* Season Exclusive Toggle -- In the Season tab, shows items that can only be obtained in the selected season.
* (Maybe) Import data from Stardew Valley Save Files
# Development
SCC is a single page application, so all it needs is a web server. You can use any web server that you like, but I
prefer to use the built-in python web server, which is available on any platform with Python installed.
```
# Python 3.5
python -m http.server
```
Libraries and Frameworks used:
* [vuejs](http://vuejs.org/)
* [Bulma](http://bulma.io/)
Feature requests and pull requests are certainly welcome. I still need to clean up a lot of things in the repository
(For example, I changed naming styles part way through and the item "cards" need to be made into a vue component so they
aren't repeated), but the code should *mostly* be easy to figure out. I suspect there are optimizations to be done in
the searching and filtering logic as well.

View File

@ -1,5 +1,21 @@
{ {
"versions": [ "versions": [
{
"id": "Version 1.4",
"date": "2016-04-16",
"link": "Version-1.4",
"changes": [
"Fixed a bug where items skills were always being hidden",
"Updated Season and Skill tabs to sort alphabetically",
"Updated to Bulma 0.0.20",
"Added a text decoration to completed bundles",
"Fixed a bug with side-panel styling",
"Reduced the margin size of the room names so they all fit properly in their container.",
"Updated the bundles nav to be included in 'Hide Completed'",
"Hide Completed and Hide Spoilers settings are now saved.",
"Added a more thorough readme."
]
},
{ {
"id": "Version 1.3", "id": "Version 1.3",
"date": "2016-04-15", "date": "2016-04-15",

View File

@ -5,7 +5,7 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<title>Stardew Valley Community Checklist</title> <title>Stardew Valley Community Checklist</title>
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.0.19/css/bulma.min.css"/> href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.0.20/css/bulma.min.css"/>
<link type="text/css" rel="stylesheet" <link type="text/css" rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"/> href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css"/>
<link type="text/css" rel="stylesheet" href="main.css"/> <link type="text/css" rel="stylesheet" href="main.css"/>
@ -73,7 +73,7 @@
</div> </div>
<div class="header-right header-menu"> <div class="header-right header-menu">
<span class="header-item"> <span class="header-item">
<a class="button" v-on:click="hideCompleted = !hideCompleted"> <a class="button" v-on:click="toggleHideCompleted">
<span class="icon"> <span class="icon">
<i class="fa" v-bind:class="[hideCompleted ? 'fa-check-square-o' : 'fa-square-o']"></i> <i class="fa" v-bind:class="[hideCompleted ? 'fa-check-square-o' : 'fa-square-o']"></i>
</span> </span>
@ -84,7 +84,7 @@
</span> </span>
<span class="header-item"> <span class="header-item">
<p class="control has-addons"> <p class="control has-addons">
<a class="button" v-on:click="hideSpoilers = !hideSpoilers"> <a class="button" v-on:click="toggleHideSpoilers">
<span class="icon"> <span class="icon">
<i class="fa" v-bind:class="[hideSpoilers ? 'fa-check-square-o' : 'fa-square-o']"></i> <i class="fa" v-bind:class="[hideSpoilers ? 'fa-check-square-o' : 'fa-square-o']"></i>
</span> </span>
@ -205,7 +205,7 @@
<div class="container is-fluid"> <div class="container is-fluid">
<div class="columns"> <div class="columns">
<div class="column is-2"> <div class="column is-2">
<nav class="panels"> <nav class="panel">
<p class="panel-heading"> <p class="panel-heading">
Bundles Bundles
</p> </p>
@ -217,13 +217,17 @@
{{ room.name }} {{ room.name }}
</a> </a>
</p> </p>
<a class="panel-block" href="#" v-for="bundle in static.bundles | filterBy active_room in 'room'" <template v-for="bundle in static.bundles | filterBy active_room in 'room'">
<a class="panel-block" href="#"
id="panel-bundle-{{ bundle.id }}" v-bind:class="[bundle.id == active_bundle ? 'is-active' : '']" id="panel-bundle-{{ bundle.id }}" v-bind:class="[bundle.id == active_bundle ? 'is-active' : '']"
v-on:click.stop="change_bundle(bundle.id)"> v-on:click.stop="change_bundle(bundle.id)" v-if="!(hideCompleted && isBundleComplete(bundle.id))">
<span class="panel-icon"> <span class="panel-icon">
<i class="fa fa-archive"></i> <i class="fa fa-archive"></i>
</span> {{ bundle.name }} </span>
<span v-bind:class="[isBundleComplete(bundle.id) ? 'bundle-complete' : '']">{{ bundle.name }}</span>
</a> </a>
</template>
</nav> </nav>
</div> </div>
<div class="column"> <div class="column">
@ -395,7 +399,7 @@
<div class="container is-fluid"> <div class="container is-fluid">
<div class="columns"> <div class="columns">
<div class="column is-2"> <div class="column is-2">
<nav class="panels"> <nav class="panel">
<p class="panel-heading"> <p class="panel-heading">
Seasons Seasons
</p> </p>
@ -412,7 +416,7 @@
<h3 class="title">{{ getSeasonName(active_season) }}</h3> <h3 class="title">{{ getSeasonName(active_season) }}</h3>
<progress class="progress is-info" value="" max=""></progress> <progress class="progress is-info" value="" max=""></progress>
<div class="columns is-multiline"> <div class="columns is-multiline">
<template v-for="item in static.items | seasonFilter active_season"> <template v-for="item in static.items | seasonFilter active_season | orderBy 'name'">
<div class="column is-3 is-flex" v-if="!(hideCompleted && isCompleted(item))"> <div class="column is-3 is-flex" v-if="!(hideCompleted && isCompleted(item))">
<div class="card is-fullwidth is-flex eq-line"> <div class="card is-fullwidth is-flex eq-line">
<header class="card-header"> <header class="card-header">
@ -475,7 +479,7 @@
<div class="container is-fluid"> <div class="container is-fluid">
<div class="columns"> <div class="columns">
<div class="column is-2"> <div class="column is-2">
<nav class="panels"> <nav class="panel">
<p class="panel-heading"> <p class="panel-heading">
Skills Skills
</p> </p>
@ -492,7 +496,7 @@
<h3 class="title">{{ getSkillName(active_skill) }}</h3> <h3 class="title">{{ getSkillName(active_skill) }}</h3>
<progress class="progress is-info" value="" max=""></progress> <progress class="progress is-info" value="" max=""></progress>
<div class="columns is-multiline"> <div class="columns is-multiline">
<template v-for="item in static.items | filterBy active_skill in 'skills'"> <template v-for="item in static.items | filterBy active_skill in 'skills' | orderBy 'name'">
<div class="column is-3 is-flex" v-if="!(hideCompleted && isCompleted(item))"> <div class="column is-3 is-flex" v-if="!(hideCompleted && isCompleted(item))">
<div class="card is-fullwidth is-flex eq-line"> <div class="card is-fullwidth is-flex eq-line">
<header class="card-header"> <header class="card-header">

View File

@ -18,3 +18,11 @@
.button{ .button{
flex-wrap: wrap; flex-wrap: wrap;
} }
.panel-tabs a {
padding: 3px;
}
.bundle-complete {
text-decoration: line-through;
}

16
main.js
View File

@ -35,6 +35,14 @@ var v = new Vue({
if(spoilers !== null && spoilers !== ""){ if(spoilers !== null && spoilers !== ""){
this.spoilers = JSON.parse(spoilers); this.spoilers = JSON.parse(spoilers);
} }
hideCompleted = localStorage.getItem('hideCompleted');
if(hideCompleted !== null && hideCompleted !== ""){
this.hideCompleted = hideCompleted;
}
hideSpoilers = localStorage.getItem('hideSpoilers');
if(hideSpoilers !== null && hideSpoilers !== ""){
this.hideSpoilers = hideSpoilers;
}
}, },
computed: { computed: {
user_data_serialized: function(){ user_data_serialized: function(){
@ -105,6 +113,14 @@ var v = new Vue({
change_skill: function(new_skill){ change_skill: function(new_skill){
this.active_skill = new_skill; this.active_skill = new_skill;
}, },
toggleHideCompleted: function(){
this.hideCompleted = !this.hideCompleted;
localStorage.setItem('hideCompleted', this.hideCompleted);
},
toggleHideSpoilers: function(){
this.hideSpoilers = !this.hideSpoilers;
localStorage.setItem('hideSpoilers', this.hideSpoilers);
},
addItemToBundle: function(bundleId, itemId, itemPosition){ addItemToBundle: function(bundleId, itemId, itemPosition){
this.user_data[bundleId].push({item: itemId, position: itemPosition}); this.user_data[bundleId].push({item: itemId, position: itemPosition});
}, },