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:
commit
6c0cf9998c
69
README.md
69
README.md
@ -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:
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
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.
|
||||||
|
|||||||
@ -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",
|
||||||
|
|||||||
26
index.html
26
index.html
@ -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">
|
||||||
|
|||||||
8
main.css
8
main.css
@ -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
16
main.js
@ -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});
|
||||||
},
|
},
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user