doctype html html(lang='en') head meta(charset="utf-8") meta(name="viewport" content="width=device-width, initial-scale=1") link(rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.4/css/bulma.min.css") title ELEC0017 Project script(src="https://cdn.jsdelivr.net/npm/vue") script(src="https://unpkg.com/axios/dist/axios.min.js") body #app .tabs ul li(v-for="menu in menus" :class="{'is-active': menu_selected === menu}") a(@click="menu_selected = menu") {{ menu }} section.section article.message.is-warning(v-show="error") .message-header p Error button.delete(@click="error = null") .message-body {{ error }} template(v-if="menu_selected === 'admins'") include admins template(v-else-if="menu_selected === 'boards'") include boards template(v-else) include index script. axios.defaults.validateStatus = function (status) { return status >= 200 && status < 410; } axios.interceptors.response.use(function (response) { if (response.status >= 400) { app.error = response.data; return Promise.reject(response); } else if (response.status == 307 || response.status == 306) { console.log(response); } return response; }, function (error) { return Promise.reject(error); }); var app = new Vue({ el: '#app', data: { menus: ['index', 'boards', 'admins'], menu_selected: 'index', config: {}, admin: {new_user: "", new_pass: ""}, board: {new_id: "", new_key: "", new_keysize: 128}, error: "" }, methods: { admin_delete: function(admin) { let self = this; axios.delete('/admin/user/' + admin).then(function (res) { self.config = res.data; }) }, admin_create: function () { let self = this; const params = new URLSearchParams(); params.append('username', self.admin.new_user); params.append('password', self.admin.new_pass); axios.post('/admin/user', params).then(function (res) { self.admin.new_user = "" self.admin.new_pass = "" self.config = res.data; }) }, board_delete: function (id) { let self = this; axios.delete('/admin/board/' + id).then(function (res) { self.config = res.data; }) }, board_create: function () { let self = this; const params = new URLSearchParams(); params.append('id', self.board.new_id); params.append('key', self.board.new_key); params.append('keysize', self.board.new_keysize); axios.post('/admin/board', params).then(function (res) { self.board = {new_id: "", new_key: "", new_keysize: 128} self.config = res.data; }) } }, mounted: function () { let self = this; axios.get('/admin/config').then(function (res) { self.config = res.data; }) }, filters: { timeSince: function (datestr) { if (datestr === "0001-01-01T00:00:00Z") return "never"; let date = new Date(datestr); let delta = new Date() - date; if (delta > 1000*60*60*24) { let year = d.getFullYear(); let month = '' + (d.getMonth() + 1); let day = '' + d.getDate(); if (month.length < 2) month = '0' + month; if (day.length < 2) day = '0' + day; return [year, month, day].join('/'); } let seconds = Math.floor(delta / 1000); let interval = Math.floor(seconds / 3600); if (interval > 1) { return interval + " hours"; } interval = Math.floor(seconds / 60); if (interval > 1) { return interval + " minutes"; } return Math.floor(seconds) + " seconds"; } } })