main.vue 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. <script>
  2. const { jwt } = require('./security')
  3. const gravatar = require('gravatar')
  4. import VueRouter from 'vue-router'
  5. import Home from './home.vue'
  6. import Signup from './signup.vue'
  7. import Signin from './signin.vue'
  8. import Confirm from './confirm.vue'
  9. import Dashboard from './dashboard.vue'
  10. import Feed from './feed.vue'
  11. import NewFeed from './new-feed.vue'
  12. const router = new VueRouter({
  13. routes: [
  14. { path: '', component: Home },
  15. { path: '/signup', component: Signup },
  16. { path: '/signin', component: Signin },
  17. { path: '/confirm/:email', component: Confirm },
  18. { path: '/dashboard', component: Dashboard },
  19. { path: '/feeds/new', component: NewFeed },
  20. { path: '/feeds/:id', component: Feed }
  21. ]
  22. })
  23. router.beforeEach((to, from, next) => {
  24. console.log(to, from)
  25. next()
  26. })
  27. export default {
  28. router,
  29. data() {
  30. return {
  31. drawer: null,
  32. jwt
  33. }
  34. },
  35. computed: {
  36. gravatar() {
  37. return jwt.token && gravatar.url(jwt.identity.email, {
  38. size: 24,
  39. default: 'retro'
  40. })
  41. },
  42. name() {
  43. return jwt.token && jwt.identity.name
  44. }
  45. },
  46. methods: {
  47. signout() {
  48. jwt.token = null
  49. this.$router.push('/')
  50. }
  51. }
  52. }
  53. </script>
  54. <template>
  55. <v-app dark>
  56. <v-navigation-drawer clipped fixed app v-model="drawer">
  57. <!-- <v-toolbar flat>
  58. <v-toolbar-side-icon v-on:click="drawer = !drawer" />
  59. <v-toolbar-title>RSS Archive</v-toolbar-title>
  60. </v-toolbar> -->
  61. <v-list>
  62. <v-list-tile v-if="jwt.token">
  63. <v-list-tile-action>
  64. <img :src="gravatar" />
  65. </v-list-tile-action>
  66. <v-list-tile-title>{{name}}</v-list-tile-title>
  67. </v-list-tile>
  68. <v-list-tile v-if="!jwt.token" to="/signin">
  69. <v-list-tile-action>
  70. <v-icon>account_circle</v-icon>
  71. </v-list-tile-action>
  72. <v-list-tile-title>Sign in</v-list-tile-title>
  73. </v-list-tile>
  74. <v-list-tile v-if="!jwt.token" to="/signup">
  75. <v-list-tile-action>
  76. <v-icon>person_add</v-icon>
  77. </v-list-tile-action>
  78. <v-list-tile-title>Sign up</v-list-tile-title>
  79. </v-list-tile>
  80. <v-list-tile v-if="jwt.token" @click="signout">
  81. <v-list-tile-action>
  82. <v-icon>account_circle</v-icon>
  83. </v-list-tile-action>
  84. <v-list-tile-title>Sign out</v-list-tile-title>
  85. </v-list-tile>
  86. <v-list-tile to="/">
  87. <v-list-tile-action>
  88. <v-icon>home</v-icon>
  89. </v-list-tile-action>
  90. <v-list-tile-title>Home</v-list-tile-title>
  91. </v-list-tile>
  92. </v-list>
  93. <v-divider></v-divider>
  94. </v-navigation-drawer>
  95. <v-toolbar app fixed clipped-left color="primary">
  96. <v-toolbar-side-icon v-on:click="drawer = !drawer" />
  97. <v-toolbar-title>RSS Archive</v-toolbar-title>
  98. </v-toolbar>
  99. <v-content>
  100. <v-container>
  101. <router-view />
  102. </v-container>
  103. </v-content>
  104. </v-app>
  105. </template>
  106. <style scoped>
  107. .hero {
  108. text-align: center;
  109. }
  110. </style>