head.pug 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  1. doctype html
  2. html(lang='en')
  3. head
  4. meta(charset="utf-8")
  5. meta(name="viewport" content="width=device-width, initial-scale=1")
  6. link(rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.4/css/bulma.min.css")
  7. title ELEC0017 Project
  8. script(src="https://cdn.jsdelivr.net/npm/vue")
  9. script(src="https://unpkg.com/axios/dist/axios.min.js")
  10. body
  11. #app
  12. .tabs
  13. ul
  14. li(v-for="menu in menus" :class="{'is-active': menu_selected === menu}")
  15. a(@click="menu_selected = menu") {{ menu }}
  16. section.section
  17. article.message.is-warning(v-show="error")
  18. .message-header
  19. p Error
  20. button.delete(@click="error = null")
  21. .message-body {{ error }}
  22. template(v-if="menu_selected === 'admins'")
  23. include admins
  24. template(v-else-if="menu_selected === 'boards'")
  25. include boards
  26. template(v-else)
  27. include index
  28. script.
  29. axios.defaults.validateStatus = function (status) {
  30. return status >= 200 && status < 410;
  31. }
  32. axios.interceptors.response.use(function (response) {
  33. if (response.status >= 400) {
  34. app.error = response.data;
  35. return Promise.reject(response);
  36. } else if (response.status == 307 || response.status == 306) {
  37. console.log(response);
  38. }
  39. return response;
  40. }, function (error) {
  41. return Promise.reject(error);
  42. });
  43. var app = new Vue({
  44. el: '#app',
  45. data: {
  46. menus: ['index', 'boards', 'admins'],
  47. menu_selected: 'index',
  48. config: {},
  49. admin: {new_user: "", new_pass: ""},
  50. board: {new_id: "", new_key: "", new_keysize: 128},
  51. error: ""
  52. },
  53. methods: {
  54. admin_delete: function(admin) {
  55. let self = this;
  56. axios.delete('/admin/user/' + admin).then(function (res) {
  57. self.config = res.data;
  58. })
  59. },
  60. admin_create: function () {
  61. let self = this;
  62. const params = new URLSearchParams();
  63. params.append('username', self.admin.new_user);
  64. params.append('password', self.admin.new_pass);
  65. axios.post('/admin/user', params).then(function (res) {
  66. self.admin.new_user = ""
  67. self.admin.new_pass = ""
  68. self.config = res.data;
  69. })
  70. },
  71. board_delete: function (id) {
  72. let self = this;
  73. axios.delete('/admin/board/' + id).then(function (res) {
  74. self.config = res.data;
  75. })
  76. },
  77. board_create: function () {
  78. let self = this;
  79. const params = new URLSearchParams();
  80. params.append('id', self.board.new_id);
  81. params.append('key', self.board.new_key);
  82. params.append('keysize', self.board.new_keysize);
  83. axios.post('/admin/board', params).then(function (res) {
  84. self.board = {new_id: "", new_key: "", new_keysize: 128}
  85. self.config = res.data;
  86. })
  87. }
  88. },
  89. mounted: function () {
  90. let self = this;
  91. axios.get('/admin/config').then(function (res) {
  92. self.config = res.data;
  93. })
  94. },
  95. filters: {
  96. timeSince: function (datestr) {
  97. if (datestr === "0001-01-01T00:00:00Z") return "never";
  98. let date = new Date(datestr);
  99. let delta = new Date() - date;
  100. if (delta > 1000*60*60*24) {
  101. let year = d.getFullYear();
  102. let month = '' + (d.getMonth() + 1);
  103. let day = '' + d.getDate();
  104. if (month.length < 2) month = '0' + month;
  105. if (day.length < 2) day = '0' + day;
  106. return [year, month, day].join('/');
  107. }
  108. let seconds = Math.floor(delta / 1000);
  109. let interval = Math.floor(seconds / 3600);
  110. if (interval > 1) {
  111. return interval + " hours";
  112. }
  113. interval = Math.floor(seconds / 60);
  114. if (interval > 1) {
  115. return interval + " minutes";
  116. }
  117. return Math.floor(seconds) + " seconds";
  118. }
  119. }
  120. })