diff --git a/src/components/attachment/attachment.js b/src/components/attachment/attachment.js index cb31020dde21798bdeb70484ac71d855a925363e..e23fcb1b44e7117aee2234c50de99ea0631398f5 100644 --- a/src/components/attachment/attachment.js +++ b/src/components/attachment/attachment.js @@ -3,6 +3,20 @@ import VideoAttachment from '../video_attachment/video_attachment.vue' import nsfwImage from '../../assets/nsfw.png' import fileTypeService from '../../services/file_type/file_type.service.js' import { mapGetters } from 'vuex' +import { library } from '@fortawesome/fontawesome-svg-core' +import { + faFile, + faMusic, + faImage, + faVideo +} from '@fortawesome/free-solid-svg-icons' + +library.add( + faFile, + faMusic, + faImage, + faVideo +) const Attachment = { props: [ @@ -39,10 +53,10 @@ const Attachment = { return this.attachment.description }, placeholderIconClass () { - if (this.type === 'image') return 'icon-picture' - if (this.type === 'video') return 'icon-video' - if (this.type === 'audio') return 'icon-music' - return 'icon-doc' + if (this.type === 'image') return 'image' + if (this.type === 'video') return 'video' + if (this.type === 'audio') return 'music' + return 'file' }, referrerpolicy () { return this.$store.state.instance.mediaProxyAvailable ? '' : 'no-referrer' diff --git a/src/components/attachment/attachment.vue b/src/components/attachment/attachment.vue index 19c713d50502f2d95989f00dc7b78b6d70a47d07..0b7a3f9ca6b3bb41db24709e0ebda0b456966046 100644 --- a/src/components/attachment/attachment.vue +++ b/src/components/attachment/attachment.vue @@ -12,7 +12,7 @@ :alt="attachment.description" :title="attachment.description" > - <span :class="placeholderIconClass" /> + <FAIcon :icon="placeholderIconClass" /> <b>{{ nsfw ? "NSFW / " : "" }}</b>{{ placeholderName }} </a> </div> @@ -36,9 +36,9 @@ :src="nsfwImage" :class="{'small': isSmall}" > - <i + <FAIcon v-if="type === 'video'" - class="play-icon icon-play-circled" + class="play-icon" icon="play-circle" /> </a> <div @@ -83,9 +83,9 @@ @play="$emit('play')" @pause="$emit('pause')" /> - <i + <FAIcon v-if="!allowPlay" - class="play-icon icon-play-circled" + class="play-icon" icon="play-circle" /> </a> @@ -142,6 +142,10 @@ white-space: nowrap; text-overflow: ellipsis; max-width: 100%; + + svg { + color: inherit; + } } .nsfw-placeholder { diff --git a/src/components/chat_panel/chat_panel.vue b/src/components/chat_panel/chat_panel.vue index fc06f5429b004e9044da7ea1de8d85ba0808fd8b..51b9956384ba3724ec4f0ed95c1bc7daea7af6cd 100644 --- a/src/components/chat_panel/chat_panel.vue +++ b/src/components/chat_panel/chat_panel.vue @@ -11,7 +11,7 @@ > <div class="title"> <span>{{ $t('shoutbox.title') }}</span> - <i + <FAIcon v-if="floating" icon="times" /> @@ -63,7 +63,7 @@ @click.stop.prevent="togglePanel" > <div class="title"> - <FAIcon icon="bullhorn" /> + <FAIcon class="icon" icon="bullhorn" /> {{ $t('shoutbox.title') }} </div> </div> @@ -87,7 +87,8 @@ .chat-panel { .chat-heading { cursor: pointer; - .icon-comment-empty { + + .icon { color: $fallback--text; color: var(--text, $fallback--text); } diff --git a/src/components/global_notice_list/global_notice_list.vue b/src/components/global_notice_list/global_notice_list.vue index 2965cd0d24c187d1351814fc77f609707b5472dc..3a7139f4fc842575af2ab2c013879290b3591ea2 100644 --- a/src/components/global_notice_list/global_notice_list.vue +++ b/src/components/global_notice_list/global_notice_list.vue @@ -9,7 +9,7 @@ <div class="notice-message"> {{ $t(notice.messageKey, notice.messageArgs) }} </div> - <i + <FAIcon class="button-icon" icon="times" @click="closeNotice(notice)" /> diff --git a/src/components/image_cropper/image_cropper.js b/src/components/image_cropper/image_cropper.js index 9027b6ebf3e70102fa1b1a084bba128328182b00..59e4d07ef590f13353cabcccf09ea92c44cf51a0 100644 --- a/src/components/image_cropper/image_cropper.js +++ b/src/components/image_cropper/image_cropper.js @@ -2,11 +2,13 @@ import Cropper from 'cropperjs' import 'cropperjs/dist/cropper.css' import { library } from '@fortawesome/fontawesome-svg-core' import { - faTimes + faTimes, + faCircleNotch } from '@fortawesome/free-solid-svg-icons' library.add( - faTimes + faTimes, + faCircleNotch ) const ImageCropper = { diff --git a/src/components/image_cropper/image_cropper.vue b/src/components/image_cropper/image_cropper.vue index 389b06b968d979acbafd9b986d0428e12eae18a9..e69cbd0b517e348d2385558710d28f86b8bfdca9 100644 --- a/src/components/image_cropper/image_cropper.vue +++ b/src/components/image_cropper/image_cropper.vue @@ -31,9 +31,10 @@ @click="submit(false)" v-text="saveWithoutCroppingText" /> - <i + <FAIcon v-if="submitting" - class="icon-spin4 animate-spin" + spin + icon="circle-notch" /> </div> <div diff --git a/src/components/importer/importer.js b/src/components/importer/importer.js index c5f9e4d25e8d1e523426920221c992231a8c5bd3..59f9beb141bb0f1aaa38e693b0aef0f59b0dd710 100644 --- a/src/components/importer/importer.js +++ b/src/components/importer/importer.js @@ -1,3 +1,14 @@ +import { library } from '@fortawesome/fontawesome-svg-core' +import { + faCircleNotch, + faTimes +} from '@fortawesome/free-solid-svg-icons' + +library.add( + faCircleNotch, + faTimes +) + const Importer = { props: { submitHandler: { diff --git a/src/components/importer/importer.vue b/src/components/importer/importer.vue index ed923d59e6cf9d54a5f35c6b0c74b7013223cb27..c4fe5b002d08003dcb210f867c21d009608599dc 100644 --- a/src/components/importer/importer.vue +++ b/src/components/importer/importer.vue @@ -7,9 +7,11 @@ @change="change" > </form> - <i + <FAIcon v-if="submitting" - class="icon-spin4 animate-spin importer-uploading" + class="importer-uploading" + spin + icon="circle-notch" /> <button v-else @@ -19,15 +21,15 @@ {{ submitButtonLabel }} </button> <div v-if="success"> - <i - class="icon-cross" + <FAIcon + icon="times" @click="dismiss" /> <p>{{ successMessage }}</p> </div> <div v-else-if="error"> - <i - class="icon-cross" + <FAIcon + icon="times" @click="dismiss" /> <p>{{ errorMessage }}</p> diff --git a/src/components/login_form/login_form.vue b/src/components/login_form/login_form.vue index 34f49576bc1dfede86eb97fd9c43ee1e29cf7487..f6b767a2ac80f639f5726c167167341920705a77 100644 --- a/src/components/login_form/login_form.vue +++ b/src/components/login_form/login_form.vue @@ -76,7 +76,7 @@ > <div class="alert error"> {{ error }} - <i + <FAIcon class="button-icon" icon="times" @click="clearError" /> diff --git a/src/components/mfa_form/recovery_form.vue b/src/components/mfa_form/recovery_form.vue index 8e98054ede2e8771578c5644cc377d57280ba51f..61dbda2427ca196e0ab2fe3b2e9890f5732fbd14 100644 --- a/src/components/mfa_form/recovery_form.vue +++ b/src/components/mfa_form/recovery_form.vue @@ -54,7 +54,7 @@ > <div class="alert error"> {{ error }} - <i + <FAIcon class="button-icon" icon="times" @click="clearError" /> diff --git a/src/components/mfa_form/totp_form.vue b/src/components/mfa_form/totp_form.vue index bad2286f7a6b43e9a954280eca851630b2a8c7d0..0c6412eaecc6e650f0d92d2e807514965edbc312 100644 --- a/src/components/mfa_form/totp_form.vue +++ b/src/components/mfa_form/totp_form.vue @@ -56,8 +56,10 @@ > <div class="alert error"> {{ error }} - <i - class="button-icon" icon="times" + <FAIcon + size="lg" + class="button-icon" + icon="times" @click="clearError" /> </div> diff --git a/src/components/password_reset/password_reset.vue b/src/components/password_reset/password_reset.vue index 8e8225ed78d83eef7dab12ae252a471bccfc0c3b..3fe42b848a002b73944b9e358f03f1789fa9a21d 100644 --- a/src/components/password_reset/password_reset.vue +++ b/src/components/password_reset/password_reset.vue @@ -122,7 +122,7 @@ padding-right: 2rem; } - .icon-cancel { + .dismiss { cursor: pointer; } } diff --git a/src/components/poll/poll_form.vue b/src/components/poll/poll_form.vue index 8c4ada8924546fb5f81ad81569a7f07b72bfd3af..f3e7a7165824d9daef7e48c98165f25c994b89fd 100644 --- a/src/components/poll/poll_form.vue +++ b/src/components/poll/poll_form.vue @@ -26,6 +26,7 @@ > <FAIcon icon="times" + class="delete" @click="deleteOption(index)" /> </div> @@ -129,6 +130,14 @@ width: 1.5em; margin-left: -1.5em; z-index: 1; + + .delete { + cursor: pointer; + + &:hover { + color: inherit; + } + } } .poll-type-expiry { diff --git a/src/components/post_status_form/post_status_form.js b/src/components/post_status_form/post_status_form.js index e763baa83b0a32598cff0dc4dda452436242ac38..1bdf9833b6705b4186091ccda3215b6b59708e0a 100644 --- a/src/components/post_status_form/post_status_form.js +++ b/src/components/post_status_form/post_status_form.js @@ -19,7 +19,8 @@ import { faPollH, faUpload, faBan, - faTimes + faTimes, + faCircleNotch } from '@fortawesome/free-solid-svg-icons' library.add( @@ -28,7 +29,8 @@ library.add( faPollH, faUpload, faBan, - faTimes + faTimes, + faCircleNotch ) const buildMentionsString = ({ user, attentions = [] }, currentUser) => { diff --git a/src/components/post_status_form/post_status_form.vue b/src/components/post_status_form/post_status_form.vue index 817b2fa015533699d09f282b8a666348a9e4288e..428b8560b8ecd4a4143780b3867526bddc63fb46 100644 --- a/src/components/post_status_form/post_status_form.vue +++ b/src/components/post_status_form/post_status_form.vue @@ -85,9 +85,10 @@ {{ $t('post_status.preview') }} <i :class="showPreview ? 'icon-left-open' : 'icon-right-open'" /> </a> - <i + <FAIcon v-show="previewLoading" - class="icon-spin3 animate-spin" + spin + icon="circle-notch" /> </div> <div @@ -284,8 +285,10 @@ class="alert error" > Error: {{ error }} - <i - class="button-icon" icon="times" + <FAIcon + class="button-icon" + size="lg" + icon="times" @click="clearError" /> </div> @@ -295,7 +298,7 @@ :key="file.url" class="media-upload-wrapper" > - <i + <FAIcon class="button-icon" icon="times" @click="removeMediaFile(file)" /> @@ -379,10 +382,6 @@ padding-left: 0.5em; display: flex; width: 100%; - - .icon-spin3 { - margin-left: auto; - } } .preview-toggle { @@ -477,7 +476,7 @@ text-align: right; } - .icon-chart-bar { + .poll-icon { cursor: pointer; } @@ -490,19 +489,6 @@ margin-bottom: .5em; width: 18em; - .icon-cancel { - display: inline-block; - position: static; - margin: 0; - padding-bottom: 0; - margin-left: $fallback--attachmentRadius; - margin-left: var(--attachmentRadius, $fallback--attachmentRadius); - background-color: $fallback--fg; - background-color: var(--btn, $fallback--fg); - border-bottom-left-radius: 0; - border-bottom-right-radius: 0; - } - img, video { object-fit: contain; max-height: 10em; @@ -525,7 +511,7 @@ flex-direction: column; } - .media-upload-wrapper .attachments { + .attachments .media-upload-wrapper{ padding: 0 0.5em; .attachment { @@ -534,11 +520,14 @@ position: relative; } - i { + .button-icon { position: absolute; margin: 10px; - padding: 5px; + margin: .75em; + padding: .5em; background: rgba(230,230,230,0.6); + z-index: 2; + color: black; border-radius: $fallback--attachmentRadius; border-radius: var(--attachmentRadius, $fallback--attachmentRadius); font-weight: bold; @@ -615,11 +604,6 @@ cursor: not-allowed; } - .icon-cancel { - cursor: pointer; - z-index: 4; - } - @keyframes fade-in { from { opacity: 0; } to { opacity: 0.6; } diff --git a/src/components/settings_modal/tabs/profile_tab.js b/src/components/settings_modal/tabs/profile_tab.js index 220372188418c7774b2b68ddbd21c455112555aa..a3e4feafcbecb4ed00dcb8ee8d52a3ac3bb4d6f4 100644 --- a/src/components/settings_modal/tabs/profile_tab.js +++ b/src/components/settings_modal/tabs/profile_tab.js @@ -11,12 +11,14 @@ import Checkbox from 'src/components/checkbox/checkbox.vue' import { library } from '@fortawesome/fontawesome-svg-core' import { faTimes, - faPlus + faPlus, + faCircleNotch } from '@fortawesome/free-solid-svg-icons' library.add( faTimes, - faPlus + faPlus, + faCircleNotch ) const ProfileTab = { diff --git a/src/components/settings_modal/tabs/profile_tab.scss b/src/components/settings_modal/tabs/profile_tab.scss index e14cf054c3c9a8b8f6c19b8afd22821709c16ae3..e821f952da74a6d1ea004c2f1b3d1aeab96f91b9 100644 --- a/src/components/settings_modal/tabs/profile_tab.scss +++ b/src/components/settings_modal/tabs/profile_tab.scss @@ -119,10 +119,8 @@ &>.icon-container { width: 20px; - - &>.icon-cancel { - vertical-align: sub; - } + align-self: center; + margin: 0 .2em .5em; } } } diff --git a/src/components/settings_modal/tabs/profile_tab.vue b/src/components/settings_modal/tabs/profile_tab.vue index 7013b65df57f2b4758936b5c966bfe5fb4b7bcf3..773c77de21b2b702a5e7397182c603921c567954 100644 --- a/src/components/settings_modal/tabs/profile_tab.vue +++ b/src/components/settings_modal/tabs/profile_tab.vue @@ -127,7 +127,7 @@ <div class="icon-container" > - <i + <FAIcon v-show="newFields.length > 1" icon="times" @click="deleteField(i)" @@ -166,7 +166,7 @@ :src="user.profile_image_url_original" class="current-avatar" > - <i + <FAIcon v-if="!isDefaultAvatar && pickAvatarBtnVisible" :title="$t('settings.reset_avatar')" class="reset-button" icon="times" @@ -194,7 +194,7 @@ <h2>{{ $t('settings.profile_banner') }}</h2> <div class="banner-background-preview"> <img :src="user.cover_photo"> - <i + <FAIcon v-if="!isDefaultBanner" :title="$t('settings.reset_profile_banner')" class="reset-button" icon="times" @@ -214,9 +214,11 @@ @change="uploadFile('banner', $event)" > </div> - <i + <FAIcon v-if="bannerUploading" - class=" icon-spin4 animate-spin uploading" + class="uploading" + spin + icon="circle-notch" /> <button v-else-if="bannerPreview" @@ -230,7 +232,7 @@ class="alert error" > Error: {{ bannerUploadError }} - <i + <FAIcon class="button-icon" icon="times" @click="clearUploadError('banner')" /> @@ -240,7 +242,7 @@ <h2>{{ $t('settings.profile_background') }}</h2> <div class="banner-background-preview"> <img :src="user.background_image"> - <i + <FAIcon v-if="!isDefaultBackground" :title="$t('settings.reset_profile_background')" class="reset-button" icon="times" @@ -260,9 +262,11 @@ @change="uploadFile('background', $event)" > </div> - <i + <FAIcon v-if="backgroundUploading" - class=" icon-spin4 animate-spin uploading" + class="uploading" + spin + icon="circle-notch" /> <button v-else-if="backgroundPreview" @@ -276,8 +280,10 @@ class="alert error" > Error: {{ backgroundUploadError }} - <i - class="button-icon" icon="times" + <FAIcon + size="lg" + class="button-icon" + icon="times" @click="clearUploadError('background')" /> </div> diff --git a/src/components/status/status.scss b/src/components/status/status.scss index cd5366ed6a2fc9fc3eb427ebf1e3da934230ef66..ea9e538d42292b7df25718600ba72da6a6dd1475 100644 --- a/src/components/status/status.scss +++ b/src/components/status/status.scss @@ -156,11 +156,6 @@ $status-margin: 0.75em; text-overflow: ellipsis; overflow-x: hidden; } - - .icon-reply { - // mirror the icon - transform: scaleX(-1); - } } & .reply-to-popover, diff --git a/src/components/status_content/status_content.js b/src/components/status_content/status_content.js index df095de35e7cc4a218a43e0cc4e4ba616949df8b..a6f79d766f0c4d87c6aeba00a41251ad398d107e 100644 --- a/src/components/status_content/status_content.js +++ b/src/components/status_content/status_content.js @@ -7,6 +7,24 @@ import fileType from 'src/services/file_type/file_type.service' import { processHtml } from 'src/services/tiny_post_html_processor/tiny_post_html_processor.service.js' import { mentionMatchesUrl, extractTagFromUrl } from 'src/services/matcher/matcher.service.js' import { mapGetters, mapState } from 'vuex' +import { library } from '@fortawesome/fontawesome-svg-core' +import { + faCircleNotch, + faFile, + faMusic, + faImage, + faLink, + faPollH +} from '@fortawesome/free-solid-svg-icons' + +library.add( + faCircleNotch, + faFile, + faMusic, + faImage, + faLink, + faPollH +) const StatusContent = { name: 'StatusContent', diff --git a/src/components/status_content/status_content.vue b/src/components/status_content/status_content.vue index f7fb5ee23f6ad5691f8a74b478c4a94be6408fd8..321cd4772c1c3e4fc3b71d0a66bc9a64c6e85dc7 100644 --- a/src/components/status_content/status_content.vue +++ b/src/components/status_content/status_content.vue @@ -55,29 +55,29 @@ @click.prevent="toggleShowMore" > {{ $t("status.show_content") }} - <span + <FAIcon v-if="attachmentTypes.includes('image')" - class="icon-picture" + icon="image" /> - <span + <FAIcon v-if="attachmentTypes.includes('video')" - class="icon-video" + icon="video" /> - <span + <FAIcon v-if="attachmentTypes.includes('audio')" - class="icon-music" + icon="music" /> - <span + <FAIcon v-if="attachmentTypes.includes('unknown')" - class="icon-doc" + icon="file" /> - <span + <FAIcon v-if="status.poll && status.poll.options" - class="icon-chart-bar" + icon="poll-h" /> - <span + <FAIcon v-if="status.card" - class="icon-link" + icon="link" /> </a> <a @@ -182,6 +182,10 @@ $status-margin: 0.75em; text-align: center; display: inline-block; word-break: break-all; + + svg { + color: inherit; + } } img, video { diff --git a/src/components/user_profile/user_profile.js b/src/components/user_profile/user_profile.js index 201727d49a046cdd90a8e5fca43a9aa7de2a1c4f..c0b55a6ceca12941363eb6937cd5c5eaa1aa12a8 100644 --- a/src/components/user_profile/user_profile.js +++ b/src/components/user_profile/user_profile.js @@ -6,6 +6,14 @@ import Conversation from '../conversation/conversation.vue' import TabSwitcher from 'src/components/tab_switcher/tab_switcher.js' import List from '../list/list.vue' import withLoadMore from '../../hocs/with_load_more/with_load_more' +import { library } from '@fortawesome/fontawesome-svg-core' +import { + faCircleNotch +} from '@fortawesome/free-solid-svg-icons' + +library.add( + faCircleNotch +) const FollowerList = withLoadMore({ fetch: (props, $store) => $store.dispatch('fetchFollowers', props.userId), diff --git a/src/components/user_profile/user_profile.vue b/src/components/user_profile/user_profile.vue index b26499b43bc50b77f08cdd763299f3ca5bc66f5e..f1f518402348f8443440b42779e2f63b132e4e60 100644 --- a/src/components/user_profile/user_profile.vue +++ b/src/components/user_profile/user_profile.vue @@ -122,9 +122,10 @@ </div> <div class="panel-body"> <span v-if="error">{{ error }}</span> - <i + <FAIcon v-else - class="icon-spin3 animate-spin" + spin + icon="circle-notch" /> </div> </div> @@ -142,6 +143,7 @@ .user-profile-fields { margin: 0 0.5em; + img { object-fit: contain; vertical-align: middle;