main.js 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import Vue from 'vue'
  2. import VueRouter from 'vue-router'
  3. import Vuex from 'vuex'
  4. import axios from 'axios'
  5. import VueAxios from 'vue-axios'
  6. import App from './App'
  7. import store from './store/index'
  8. import Index from './components/routes/Index'
  9. import Start from './components/routes/Start'
  10. import Category from './components/routes/Category'
  11. import Thread from './components/routes/Thread'
  12. import ThreadNew from './components/routes/ThreadNew'
  13. import Admin from './components/routes/Admin'
  14. import AdminDashboard from './components/routes/AdminDashboard'
  15. import AdminUsers from './components/routes/AdminUsers'
  16. import AdminSettings from './components/routes/AdminSettings'
  17. let { onResize } = require('./assets/js/flexBoxGridCorrect.js')
  18. onResize('.index_categories', 'index_category');
  19. Vue.use(VueRouter)
  20. Vue.use(Vuex)
  21. Vue.use(VueAxios, axios)
  22. const router = new VueRouter({
  23. routes: [
  24. { path: '/', component: Index },
  25. { path: '/start', component: Start },
  26. { path: '/category/:category', component: Category },
  27. { path: '/thread/:slug/:id', component: Thread },
  28. { path: '/thread/new', component: ThreadNew },
  29. { path: '/admin', redirect: '/admin/dashboard', component: Admin, children: [
  30. { path: 'dashboard', component: AdminDashboard },
  31. { path: 'settings', component: AdminSettings },
  32. { path: 'users', component: AdminUsers }
  33. ] }
  34. ],
  35. mode: 'history'
  36. })
  37. Vue.filter('formatDate', function (value, format = '', join = ' ') {
  38. if(typeof value !== 'object') {
  39. value = new Date(value)
  40. }
  41. //Add leading zero if under 10
  42. function lz(num) {
  43. if(num < 10) {
  44. return '0' + num;
  45. } else {
  46. return '' + num;
  47. }
  48. }
  49. function formatSegment(segment) {
  50. if(segment === 'time') {
  51. return value.toTimeString().slice(0, 5);
  52. }
  53. if(segment === 'date') {
  54. return (
  55. lz(value.getDate()) + '/' +
  56. lz(value.getMonth() + 1) + '/' +
  57. value.getUTCFullYear()
  58. );
  59. }
  60. }
  61. return format.split('|').map(formatSegment).join(join);
  62. });
  63. Vue.filter('stripTags', function (value) {
  64. let div = document.createElement('div')
  65. div.innerHTML = value
  66. return div.textContent
  67. });
  68. Vue.filter('truncate', function (value, length) {
  69. if(value <= length) {
  70. return value
  71. } else {
  72. return value.slice(0, length) + '...'
  73. }
  74. });
  75. new Vue({
  76. el: '#app',
  77. template: '<App/>',
  78. store,
  79. components: { App },
  80. router
  81. })