main.js 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  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 Thread from './components/routes/Thread'
  11. import ThreadNew from './components/routes/ThreadNew'
  12. import User from './components/routes/User'
  13. import UserPosts from './components/routes/UserPosts'
  14. import UserThreads from './components/routes/UserThreads'
  15. import Admin from './components/routes/Admin'
  16. import AdminDashboard from './components/routes/AdminDashboard'
  17. import AdminUsers from './components/routes/AdminUsers'
  18. import AdminSettings from './components/routes/AdminSettings'
  19. let { onResize } = require('./assets/js/flexBoxGridCorrect.js')
  20. onResize('.index_categories', 'index_category');
  21. Vue.use(VueRouter)
  22. Vue.use(Vuex)
  23. Vue.use(VueAxios, axios)
  24. const router = new VueRouter({
  25. routes: [
  26. { path: '/', redirect: '/category/all' },
  27. { path: '/category/:category', component: Index },
  28. { path: '/start', component: Start },
  29. { path: '/thread/:slug/:id', component: Thread },
  30. { path: '/thread/:slug/:id/:post_number', 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. let sinceNow = new Date(new Date() - value)
  49. //Add leading zero if under 10
  50. function lz(num) {
  51. if(num < 10) {
  52. return '0' + num;
  53. } else {
  54. return '' + num;
  55. }
  56. }
  57. function p(word, num) {
  58. if(num === 1) {
  59. return word
  60. } else {
  61. return word + 's'
  62. }
  63. }
  64. //2 minutes
  65. if(sinceNow <= 1000*60*2) {
  66. return 'Just now'
  67. } else if(sinceNow <= 1000*60*60) {
  68. return sinceNow.getMinutes() + ' minutes ago'
  69. } else if(sinceNow <= 1000*60*60*24) {
  70. let hours = sinceNow.getHours()
  71. return hours + ' ' + p('hour', hours) + ' ago'
  72. } else if(sinceNow <= 1000*60*60*24*2) {
  73. let days = Math.floor(sinceNow / 1000*60*60*24)
  74. return days + ' ' + p('day', days) + ' ago'
  75. } else {
  76. return (
  77. lz(value.getDate()) + '/' +
  78. lz(value.getMonth() + 1) + '/' +
  79. value.getUTCFullYear()
  80. );
  81. }
  82. });
  83. Vue.filter('stripTags', function (value) {
  84. let div = document.createElement('div')
  85. div.innerHTML = value
  86. return div.textContent
  87. });
  88. Vue.filter('truncate', function (value, length) {
  89. if(value.length <= length) {
  90. return value
  91. } else {
  92. return value.slice(0, length) + '...'
  93. }
  94. });
  95. Vue.filter('pluralize', function(number, value) {
  96. if(number === 1) {
  97. return value
  98. } else {
  99. return value + 's'
  100. }
  101. })
  102. new Vue({
  103. el: '#app',
  104. template: '<App/>',
  105. store,
  106. components: { App },
  107. router
  108. })