head.pug 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  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-if="menu_selected === 'logs'")
  27. include logs
  28. template(v-else)
  29. include index
  30. script.
  31. axios.defaults.validateStatus = function (status) {
  32. return status >= 200 && status < 410;
  33. }
  34. axios.interceptors.response.use(function (response) {
  35. if (response.status >= 400) {
  36. app.error = response.data;
  37. return Promise.reject(response);
  38. } else if (response.status == 307 || response.status == 306) {
  39. // console.log(response);
  40. }
  41. return response;
  42. }, function (error) {
  43. return Promise.reject(error);
  44. });
  45. var app = new Vue({
  46. el: '#app',
  47. data: {
  48. menus: ['index', 'boards', 'admins', 'logs'],
  49. menu_selected: 'index',
  50. config: {},
  51. admin: {new_user: "", new_pass: ""},
  52. board: {new_id: "", new_key: "", new_keysize: 128},
  53. error: "",
  54. srvlogs: [],
  55. log_timer: null
  56. },
  57. methods: {
  58. get_logs: function() {
  59. let self = this;
  60. axios.get('/admin/logs').then(function (res) {
  61. self.srvlogs = res.data;
  62. self.log_timer = window.setTimeout(self.get_logs, 1500);
  63. })
  64. },
  65. admin_delete: function(admin) {
  66. let self = this;
  67. axios.delete('/admin/user/' + admin).then(function (res) {
  68. self.config = res.data;
  69. })
  70. },
  71. admin_create: function () {
  72. let self = this;
  73. const params = new URLSearchParams();
  74. params.append('username', self.admin.new_user);
  75. params.append('password', self.admin.new_pass);
  76. axios.post('/admin/user', params).then(function (res) {
  77. self.admin.new_user = ""
  78. self.admin.new_pass = ""
  79. self.config = res.data;
  80. })
  81. },
  82. board_delete: function (id) {
  83. let self = this;
  84. axios.delete('/admin/board/' + id).then(function (res) {
  85. self.config = res.data;
  86. })
  87. },
  88. board_create: function () {
  89. let self = this;
  90. const params = new URLSearchParams();
  91. params.append('id', self.board.new_id);
  92. params.append('key', self.board.new_key);
  93. params.append('keysize', self.board.new_keysize);
  94. axios.post('/admin/board', params).then(function (res) {
  95. self.board = {new_id: "", new_key: "", new_keysize: 128}
  96. self.config = res.data;
  97. })
  98. }
  99. },
  100. mounted: function () {
  101. let self = this;
  102. axios.get('/admin/config').then(function (res) {
  103. self.config = res.data;
  104. })
  105. },
  106. watch: {
  107. menu_selected: function (now, old) {
  108. let self = this;
  109. if (now === old) return;
  110. if (now==="logs") {
  111. console.log("Timer ready");
  112. self.get_logs();
  113. } else {
  114. console.log("Timer removed");
  115. window.clearTimeout(self.log_timer);
  116. }
  117. }
  118. },
  119. filters: {
  120. timeSince: function (datestr) {
  121. if (datestr === "0001-01-01T00:00:00Z" || datestr === "1970-01-01T01:00:00+01:00") return "never";
  122. let date = new Date(datestr);
  123. let delta = new Date() - date;
  124. if (delta > 1000*60*60*24) {
  125. let year = date.getFullYear();
  126. let month = '' + (date.getMonth() + 1);
  127. let day = '' + date.getDate();
  128. if (month.length < 2) month = '0' + month;
  129. if (day.length < 2) day = '0' + day;
  130. return [year, month, day].join('/');
  131. }
  132. let seconds = Math.floor(delta / 1000);
  133. let interval = Math.floor(seconds / 3600);
  134. if (interval > 1) {
  135. return interval + " hours";
  136. }
  137. interval = Math.floor(seconds / 60);
  138. if (interval > 1) {
  139. return interval + " minutes";
  140. }
  141. return Math.floor(seconds) + " seconds";
  142. }
  143. }
  144. })