main.js 2.6 KB

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