favorite_button.vue (2389B)
- <template>
- <div class="FavoriteButton">
- <button
- v-if="loggedIn"
- class="button-unstyled interactive"
- :class="status.favorited && '-favorited'"
- :title="$t('tool_tip.favorite')"
- @click.prevent="favorite()"
- >
- <FALayers class="fa-scale-110 fa-old-padding-layer">
- <FAIcon
- class="fa-scale-110"
- :icon="[status.favorited ? 'fas' : 'far', 'star']"
- :spin="animated"
- />
- <FAIcon
- v-if="status.favorited"
- class="active-marker"
- transform="shrink-6 up-9 right-12"
- icon="check"
- />
- <FAIcon
- v-if="!status.favorited"
- class="focus-marker"
- transform="shrink-6 up-9 right-12"
- icon="plus"
- />
- <FAIcon
- v-else
- class="focus-marker"
- transform="shrink-6 up-9 right-12"
- icon="minus"
- />
- </FALayers>
- </button>
- <a
- v-else
- class="button-unstyled interactive"
- target="_blank"
- role="button"
- :title="$t('tool_tip.favorite')"
- :href="remoteInteractionLink"
- >
- <FALayers class="fa-scale-110 fa-old-padding-layer">
- <FAIcon
- class="fa-scale-110"
- :icon="['far', 'star']"
- />
- <FAIcon
- class="focus-marker"
- transform="shrink-6 up-9 right-12"
- icon="plus"
- />
- </FALayers>
- </a>
- <span
- v-if="!mergedConfig.hidePostStats && status.fave_num > 0"
- class="action-counter"
- >
- {{ status.fave_num }}
- </span>
- </div>
- </template>
- <script src="./favorite_button.js"></script>
- <style lang="scss">
- @import "../../mixins";
- .FavoriteButton {
- display: flex;
- > :first-child {
- padding: 10px;
- margin: -10px -8px -10px -10px;
- }
- .action-counter {
- pointer-events: none;
- user-select: none;
- }
- .interactive {
- .svg-inline--fa {
- animation-duration: 0.6s;
- }
- &:hover .svg-inline--fa,
- &.-favorited .svg-inline--fa {
- color: var(--cOrange);
- }
- @include unfocused-style {
- .focus-marker {
- visibility: hidden;
- }
- .active-marker {
- visibility: visible;
- }
- }
- @include focused-style {
- .focus-marker {
- visibility: visible;
- }
- .active-marker {
- visibility: hidden;
- }
- }
- }
- }
- </style>