habitica/website/client
negue 87f39b4273 item pinning (#8918)
* toggle pinned state of items server + client

* pin quests / add pin src

* add officially pinned items and api to get in app rewards

* update schema and get items deatils

* update pin actions to the new logic

* show countBadge only with a number

* extract getPinKey - pin seasonal items

* togglePinned in buy-dialogs

* add pinKey to shop items

* wip

* wip

* fix path

* togglePinnedItem as common.op / use in client

* fix linting

* pinning: getItemInfo and save in db path and type

* make api more consistent, fix bugs

* updates

* fix bugs

* update actions to current api

* marketGear

* change to pinType

* add mystery_set to getItemInfo

* fix isPinned

* ignore animals

* list shopItems (initial)

* shopItem now has default popoverconent, itemclass and price / currency - list pinned items as rewards - attributes to gear

* show buyModal for the rewards

* show mystery_set icon

* add info whether item is suggested

* write migration, fix style issues

* pin potion and armoire

* make potion, armoire not unpinnable

* show notes for armoire and potion, add default items for new users

* show unpin notification

* add/remove pinned gear on class-change

* remove pinned & add new gear on purchase - refactoring pinning methods - fixes

* always allow to purchase armoire

* highlight item if suggested
2017-08-14 19:15:32 +02:00
..
assets [WIP] multiplefixes for items / equipment / stable (#8938) 2017-08-13 18:18:46 +02:00
components item pinning (#8918) 2017-08-14 19:15:32 +02:00
directives [WIP] multiplefixes for items / equipment / stable (#8938) 2017-08-13 18:18:46 +02:00
filters Client Tasks (#8889) 2017-07-22 20:30:08 +02:00
libs [WIP] multiple fixes (#8916) 2017-08-07 19:04:46 -06:00
mixins New client more updates (#8934) 2017-08-09 10:56:48 -06:00
store item pinning (#8918) 2017-08-14 19:15:32 +02:00
.babelrc Client: Header & Menu & Icons (#8770) 2017-06-08 12:04:19 -07:00
.eslintrc Client: Header & Menu & Icons (#8770) 2017-06-08 12:04:19 -07:00
app.vue New client tour (#8921) 2017-08-02 20:15:00 -06:00
index.html New client random catchup (#8891) 2017-07-25 08:24:40 -06:00
main.js New client popups profile andmore (#8907) 2017-08-01 12:52:49 -06:00
README.md minor text fixes: accurate flavour text for Golden Knight testimonies collection quest, etc (#8826) 2017-06-26 22:35:29 +01:00
readme.md minor text fixes: accurate flavour text for Golden Knight testimonies collection quest, etc (#8826) 2017-06-26 22:35:29 +01:00
router.js New client misc with some more misc (#8929) 2017-08-07 14:26:17 -06:00

#Running

  • Open a terminal and type npm run client:dev
  • Open a second terminal and type npm start

#Preparation Reading

  • Vue 2 (https://vuejs.org)

  • Webpack (https://webpack.github.io/) is the build system and it includes plugins for code transformation, right now we have: BabelJS for ES6 transpilation, eslint for code style, less and postcss for css compilation. The code comes from https://github.com/vuejs-templates/webpack which is a Webpack template for Vue, with some small modifications to adapt it to our use case. Docs http://vuejs-templates.github.io/webpack/

  • Were using .vue files that make it possible to have HTML, JS and CSS for each component together in a single location. Theyre implemented as a webpack plugin and the docs can be found here http://vue-loader.vuejs.org/en/

  • SemanticUI is the UI framework http://semantic-ui.com/. So far Ive only used the CSS part, it also has JS plugins but Ive yet to use them. It supports theming so if its not too difficult well want to customize the base theme with our own styles instead of writing CSS rules to override the original styling.

The code is in /website/client. Were using something very similar to Vuex (equivalent of Reacts Redux) for state management http://vuex.vuejs.org/en/index.html

The API is almost the same except that we dont use mutations but only actions because it would make it difficult to work with common code

The project is developed directly in the develop branch as long as well be able to avoid splitting it into a different branch.

So far most of the work has been on the template, so theres no complex logic to understand. The only thing I would suggest you to read about is Vuex for data management: its basically a Flux implementation: theres a central store that hold the data for the entire app, and every change to the data must happen through an action, the data cannot be mutated directly.