head.pug 5.8 KB

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