main.js 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import IO from 'socket.io-client'
  2. window.socket = IO()
  3. import Vue from 'vue'
  4. import VueRouter from 'vue-router'
  5. import Vuex from 'vuex'
  6. import axios from 'axios'
  7. import VueAxios from 'vue-axios'
  8. import App from './App'
  9. import store from './store/index'
  10. import Index from './components/routes/Index'
  11. import P from './components/routes/P'
  12. import Start from './components/routes/Start'
  13. import Thread from './components/routes/Thread'
  14. import ThreadNew from './components/routes/ThreadNew'
  15. import User from './components/routes/User'
  16. import UserPosts from './components/routes/UserPosts'
  17. import UserThreads from './components/routes/UserThreads'
  18. import Settings from './components/routes/Settings'
  19. import SettingsGeneral from './components/routes/SettingsGeneral'
  20. import SettingsAccount from './components/routes/SettingsAccount'
  21. let { onResize } = require('./assets/js/flexBoxGridCorrect.js')
  22. onResize('.index_categories', 'index_category');
  23. Vue.use(VueRouter)
  24. Vue.use(Vuex)
  25. Vue.use(VueAxios, axios)
  26. const router = new VueRouter({
  27. routes: [
  28. { path: '/', redirect: '/category/all' },
  29. { path: '/category/:category', component: Index },
  30. { path: '/p/:id', component: P },
  31. { path: '/start', component: Start },
  32. { path: '/thread/:slug/:id', component: Thread },
  33. { path: '/thread/:slug/:id/:post_number', name: 'thread-post', component: Thread },
  34. { path: '/thread/new', component: ThreadNew },
  35. { path: '/user/:username', redirect: '/user/:username/posts', component: User, children: [
  36. { path: 'posts', component: UserPosts },
  37. { path: 'threads', component: UserThreads }
  38. ] },
  39. { path: '/settings', redirect: '/settings/general', component: Settings, children: [
  40. { path: 'general', component: SettingsGeneral },
  41. { path: 'account', component: SettingsAccount }
  42. ] }
  43. ],
  44. mode: 'history'
  45. })
  46. Vue.filter('formatDate', function (value, format = '', join = ' ') {
  47. if(typeof value !== 'object') {
  48. value = new Date(value)
  49. }
  50. let sinceNow = new Date(new Date() - value)
  51. //Add leading zero if under 10
  52. function lz(num) {
  53. if(num < 10) {
  54. return '0' + num;
  55. } else {
  56. return '' + num;
  57. }
  58. }
  59. function p(word, num) {
  60. if(num === 1) {
  61. return word
  62. } else {
  63. return word + 's'
  64. }
  65. }
  66. //2 minutes
  67. if(sinceNow <= 1000*60*2) {
  68. return 'Just now'
  69. } else if(sinceNow <= 1000*60*60) {
  70. return sinceNow.getMinutes() + ' minutes ago'
  71. } else if(sinceNow <= 1000*60*60*24) {
  72. let hours = sinceNow.getHours()
  73. return hours + ' ' + p('hour', hours) + ' ago'
  74. } else if(sinceNow <= 1000*60*60*24*2) {
  75. let days = Math.floor(sinceNow / (1000*60*60*24))
  76. return days + ' ' + p('day', days) + ' ago at ' + value.toTimeString().slice(0, 5)
  77. } else {
  78. return (
  79. lz(value.getDate()) + '/' +
  80. lz(value.getMonth() + 1) + '/' +
  81. value.getUTCFullYear()
  82. );
  83. }
  84. });
  85. Vue.filter('stripTags', function (value) {
  86. let div = document.createElement('div')
  87. div.innerHTML = value
  88. return div.textContent
  89. });
  90. Vue.filter('truncate', function (value, length) {
  91. if(value.length <= length) {
  92. return value
  93. } else {
  94. return value.slice(0, length) + '...'
  95. }
  96. });
  97. Vue.filter('pluralize', function(number, value) {
  98. if(number === 1) {
  99. return value
  100. } else {
  101. return value + 's'
  102. }
  103. })
  104. let Root = new Vue({
  105. el: '#app',
  106. template: '<App/>',
  107. store,
  108. components: { App },
  109. router
  110. })
  111. let usernameCookie = document.cookie
  112. .split(';')
  113. .map(c => c.split('='))
  114. .filter(pair => pair[0].trim() === 'username')
  115. .map(pair => pair[1])[0]
  116. if(usernameCookie) Root.$store.commit('setUsername', usernameCookie)