nav-header.vue 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. <template lang='pug'>
  2. v-toolbar(color='black', dark, app, clipped-left, fixed, flat)
  3. v-menu(open-on-hover, offset-y, bottom, left, min-width='250')
  4. v-toolbar-side-icon(slot='activator')
  5. v-icon view_module
  6. v-list(dense).py-0
  7. v-list-tile(avatar, href='/')
  8. v-list-tile-avatar: v-icon(color='blue') home
  9. v-list-tile-content Home
  10. v-list-tile(avatar, @click='pageNew')
  11. v-list-tile-avatar: v-icon(color='green') add_box
  12. v-list-tile-content New Page
  13. v-divider.my-0
  14. v-subheader Current Page
  15. v-list-tile(avatar, @click='pageEdit')
  16. v-list-tile-avatar: v-icon(color='indigo') edit
  17. v-list-tile-content Edit
  18. v-list-tile(avatar, @click='pageHistory')
  19. v-list-tile-avatar: v-icon(color='indigo') history
  20. v-list-tile-content History
  21. v-list-tile(avatar, @click='pageSource')
  22. v-list-tile-avatar: v-icon(color='indigo') code
  23. v-list-tile-content View Source
  24. v-list-tile(avatar, @click='pageMove')
  25. v-list-tile-avatar: v-icon(color='indigo') forward
  26. v-list-tile-content Move / Rename
  27. v-list-tile(avatar, @click='pageDelete')
  28. v-list-tile-avatar: v-icon(color='red darken-2') delete
  29. v-list-tile-content Delete
  30. v-divider.my-0
  31. v-subheader Assets
  32. v-list-tile(avatar, @click='')
  33. v-list-tile-avatar: v-icon(color='blue-grey') burst_mode
  34. v-list-tile-content Images &amp; Files
  35. v-toolbar-title.ml-2
  36. span.subheading {{title}}
  37. v-spacer
  38. transition(name='navHeaderSearch')
  39. v-text-field(
  40. ref='searchField',
  41. v-if='searchIsShown && $vuetify.breakpoint.mdAndUp',
  42. v-model='search',
  43. clearable,
  44. color='white',
  45. label='Search...',
  46. single-line,
  47. solo
  48. flat
  49. hide-details,
  50. prepend-inner-icon='search',
  51. :loading='searchIsLoading',
  52. @keyup.enter='searchEnter'
  53. )
  54. v-progress-linear(
  55. indeterminate,
  56. slot='progress',
  57. height='2',
  58. color='blue'
  59. )
  60. v-spacer
  61. .navHeaderLoading.mr-3
  62. v-progress-circular(indeterminate, color='blue', :size='22', :width='2' v-show='isLoading')
  63. slot(name='actions')
  64. v-btn(v-if='searchIsShown && $vuetify.breakpoint.smAndDown', icon)
  65. v-icon(color='grey') search
  66. v-tooltip(bottom)
  67. v-btn(icon, href='/a', slot='activator')
  68. v-icon(color='grey') settings
  69. span Admin
  70. v-menu(offset-y, min-width='300')
  71. v-tooltip(bottom, slot='activator')
  72. v-btn(icon, slot='activator')
  73. v-icon(color='grey') account_circle
  74. span Account
  75. v-list.py-0
  76. v-list-tile.py-3(avatar)
  77. v-list-tile-avatar
  78. v-avatar.red(:size='40'): span.white--text.subheading JD
  79. v-list-tile-content
  80. v-list-tile-title John Doe
  81. v-list-tile-sub-title john.doe@example.com
  82. v-divider.my-0
  83. v-list-tile(href='/p')
  84. v-list-tile-action: v-icon(color='red') person
  85. v-list-tile-title Profile
  86. v-list-tile(href='/logout')
  87. v-list-tile-action: v-icon(color='red') exit_to_app
  88. v-list-tile-title Logout
  89. </template>
  90. <script>
  91. import { get } from 'vuex-pathify'
  92. export default {
  93. props: {
  94. dense: {
  95. type: Boolean,
  96. default: false
  97. },
  98. hideSearch: {
  99. type: Boolean,
  100. default: false
  101. }
  102. },
  103. data() {
  104. return {
  105. menuIsShown: true,
  106. searchIsLoading: false,
  107. searchIsShown: true,
  108. search: ''
  109. }
  110. },
  111. computed: {
  112. isLoading: get('isLoading'),
  113. title: get('site/title')
  114. },
  115. created() {
  116. if (this.hideSearch || this.dense) {
  117. this.searchIsShown = false
  118. }
  119. },
  120. methods: {
  121. searchEnter() {
  122. this.searchIsLoading = true
  123. },
  124. pageNew () {
  125. },
  126. pageEdit () {
  127. },
  128. pageHistory () {
  129. },
  130. pageSource () {
  131. },
  132. pageMove () {
  133. },
  134. pageDelete () {
  135. }
  136. }
  137. }
  138. </script>
  139. <style lang='scss'>
  140. .navHeaderSearch {
  141. &-enter-active, &-leave-active {
  142. transition: opacity .25s ease, transform .25s ease;
  143. opacity: 1;
  144. }
  145. &-enter-active {
  146. transition-delay: .25s;
  147. }
  148. &-enter, &-leave-to {
  149. opacity: 0;
  150. transform: scale(.7, .7);
  151. }
  152. }
  153. .navHeaderLoading { // To avoid search bar jumping
  154. width: 22px;
  155. }
  156. </style>