<html> <head> <!-- Load required Bootstrap and BootstrapVue CSS --> <link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap/dist/css/bootstrap.min.css" /> <link type="text/css" rel="stylesheet" href="//unpkg.com/bootstrap-vue@^2/dist/bootstrap-vue.min.css" /> <!-- Load polyfills to support older browsers --> <script src="//polyfill.io/v3/polyfill.min.js?features=es2015%2CMutationObserver"></script> <!-- Load Vue followed by BootstrapVue --> <script src="//unpkg.com/vue@^2/dist/vue.min.js"></script> <script src="//unpkg.com/bootstrap-vue@^2/dist/bootstrap-vue.min.js"></script> <script src="https://unpkg.com/axios/dist/axios.min.js"></script> <title>Counters</title> </head> <body> <div id="app"> <b-navbar> <b-navbar-brand>Counters</b-navbar-brand> <b-navbar-nav> <b-nav-item v-for="item in nav" :href="item.url" :active="item.name === 'Counter'">{{ item.name }}</b-nav-item> </b-navbar-nav> </b-navbar> <b-alert dismissable :show="err" variant="error"> {{ err }} </b-alert> <b-container> <b-row> <b-col cols="5">Password:</b-col> <b-col><b-input v-model="answer"></b-col> </b-row> <b-row v-for="(counter, user) in counters"> {{ user }}: <b-container> <b-row v-for="(count, thing) in counter"> <b-col offset="1"> {{ thing }}: </b-col> <b-col> {{ count }} </b-col> <b-col cols="2"> <button @click="subtract(user,thing,count)">-</button> <button @click="add(user,thing,count)">+</button> </b-col> </b-row> </b-container> </b-row> </b-container> </div> <script> function convertData(data) { var newData = {}; for (let i = 0; i < data.length; i++) { let entry = data[i] if (newData[entry.Nick] === undefined) { newData[entry.Nick] = {} } newData[entry.Nick][entry.Item] = entry.Count; } return newData; } var app = new Vue({ el: '#app', data: { err: '', nav: [], answer: '', correct: 0, counters: {} }, mounted() { axios.get('/nav') .then(resp => { this.nav = resp.data; }) .catch(err => console.log(err)) axios.get('/counter/api') .then(resp => (this.counters = convertData(resp.data))) .catch(err => (this.err = err)); }, methods: { add(user, thing, count) { axios.post('/counter/api', {user: user, thing: thing, action: '++', password: this.answer}) .then(resp => {this.counters = convertData(resp.data); this.err = '';}) .catch(err => this.err = err); }, subtract(user, thing, count) { axios.post('/counter/api', {user: user, thing: thing, action: '--', password: this.answer}) .then(resp => {this.counters = convertData(resp.data); this.err = '';}) .catch(err => this.err = err); } } }) </script> </body> </html>