logo

pleroma-fe

My custom branche(s) on git.pleroma.social/pleroma/pleroma-fe git clone https://anongit.hacktivis.me/git/pleroma-fe.git/

navigation_entry.vue (3473B)


  1. <template>
  2. <OptionalRouterLink
  3. v-slot="{ isActive, href, navigate } = {}"
  4. :to="routeTo"
  5. >
  6. <li
  7. class="NavigationEntry menu-item"
  8. :class="{ '-active': isActive }"
  9. v-bind="$attrs"
  10. >
  11. <component
  12. :is="routeTo ? 'a' : 'button'"
  13. class="main-link"
  14. :href="href"
  15. @click="navigate"
  16. >
  17. <span>
  18. <FAIcon
  19. v-if="item.icon"
  20. fixed-width
  21. class="fa-scale-110 menu-icon"
  22. :icon="item.icon"
  23. />
  24. </span>
  25. <img
  26. v-if="item.iconEmojiUrl"
  27. class="menu-icon iconEmoji iconEmoji-image"
  28. :src="item.iconEmojiUrl"
  29. :alt="item.iconEmoji"
  30. :title="item.iconEmoji"
  31. >
  32. <span
  33. v-else-if="item.iconEmoji"
  34. class="menu-icon iconEmoji"
  35. >
  36. <span>
  37. {{ item.iconEmoji }}
  38. </span>
  39. </span>
  40. <span
  41. v-else-if="item.iconLetter"
  42. class="icon iconLetter fa-scale-110 menu-icon"
  43. >{{ item.iconLetter }}</span>
  44. <span class="label">
  45. {{ item.labelRaw || $t(item.label) }}
  46. </span>
  47. </component>
  48. <slot />
  49. <div
  50. v-if="item.badgeGetter && getters[item.badgeGetter]"
  51. class="badge"
  52. :class="[`-${item.badgeStyle}`]"
  53. >
  54. {{ getters[item.badgeGetter] }}
  55. </div>
  56. <div
  57. v-else-if="item.badgeGetter && item.store && this[`${item.store}Store`][item.badgeGetter]"
  58. class="badge badge-notification"
  59. >
  60. {{ this[`${item.store}Store`][item.badgeGetter] }}
  61. </div>
  62. <button
  63. v-if="showPin && currentUser"
  64. type="button"
  65. class="button-unstyled extra-button"
  66. :title="$t(isPinned ? 'general.unpin' : 'general.pin' )"
  67. :aria-pressed="!!isPinned"
  68. @click.stop.prevent="togglePin(item.name)"
  69. >
  70. <FAIcon
  71. v-if="showPin && currentUser"
  72. fixed-width
  73. class="fa-scale-110"
  74. :class="{ 'veryfaint': !isPinned(item.name) }"
  75. :transform="!isPinned(item.name) ? 'rotate-45' : ''"
  76. icon="thumbtack"
  77. />
  78. </button>
  79. </li>
  80. </OptionalRouterLink>
  81. </template>
  82. <script src="./navigation_entry.js"></script>
  83. <style lang="scss">
  84. .NavigationEntry.menu-item {
  85. --__line-height: 2.5em;
  86. --__horizontal-gap: 0.5em;
  87. --__vertical-gap: 0.4em;
  88. padding: var(--__vertical-gap) var(--__horizontal-gap);
  89. display: grid;
  90. grid-template-columns: 1fr;
  91. grid-auto-columns: var(--__line-height);
  92. grid-auto-flow: column;
  93. grid-gap: var(--__horizontal-gap);
  94. align-items: baseline;
  95. &[aria-expanded] {
  96. padding-right: var(--__horizontal-gap);
  97. }
  98. .main-link {
  99. line-height: var(--__line-height);
  100. box-sizing: border-box;
  101. }
  102. .menu-icon {
  103. line-height: var(--__line-height);
  104. padding: 0;
  105. width: var(--__line-height);
  106. margin-right: var(--__horizontal-gap);
  107. }
  108. .timelines-chevron,
  109. .extra-button {
  110. line-height: var(--__line-height);
  111. width: 100%;
  112. padding: 0;
  113. text-align: center;
  114. }
  115. .badge {
  116. justify-self: center;
  117. }
  118. .iconEmoji {
  119. display: inline-block;
  120. text-align: center;
  121. object-fit: contain;
  122. vertical-align: middle;
  123. height: var(--__line-height);
  124. width: var(--__line-height);
  125. > span {
  126. font-size: 1.5rem;
  127. }
  128. }
  129. img.iconEmoji {
  130. padding: 0.25rem;
  131. box-sizing: border-box;
  132. }
  133. }
  134. </style>