diff options
| author | syuilo <Syuilotan@yahoo.co.jp> | 2021-04-20 23:22:59 +0900 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2021-04-20 23:22:59 +0900 |
| commit | 11349561d697b11df7bcaa3d57ed3498eb4dd3c5 (patch) | |
| tree | 8dfe96ed7c9b695872b7d416383920355621d3c3 /src/client/components | |
| parent | Tweak style (diff) | |
| download | sharkey-11349561d697b11df7bcaa3d57ed3498eb4dd3c5.tar.gz sharkey-11349561d697b11df7bcaa3d57ed3498eb4dd3c5.tar.bz2 sharkey-11349561d697b11df7bcaa3d57ed3498eb4dd3c5.zip | |
Use FontAwesome as web font instead of vue component (#7469)
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* wip
* Update yarn.lock
* wip
* wip
Diffstat (limited to 'src/client/components')
60 files changed, 316 insertions, 479 deletions
diff --git a/src/client/components/abuse-report-window.vue b/src/client/components/abuse-report-window.vue index df5b594c0b..d9e1c3966b 100644 --- a/src/client/components/abuse-report-window.vue +++ b/src/client/components/abuse-report-window.vue @@ -1,7 +1,7 @@ <template> <XWindow ref="window" :initial-width="400" :initial-height="500" :can-resize="true" @closed="$emit('closed')"> <template #header> - <Fa :icon="faExclamationCircle" style="margin-right: 0.5em;"/> + <i class="fas fa-exclamation-circle" style="margin-right: 0.5em;"></i> <I18n :src="$ts.reportAbuseOf" tag="span"> <template #name> <b><MkAcct :user="user"/></b> @@ -24,7 +24,6 @@ <script lang="ts"> import { defineComponent, markRaw } from 'vue'; -import { faExclamationCircle } from '@fortawesome/free-solid-svg-icons'; import XWindow from '@client/components/ui/window.vue'; import MkTextarea from '@client/components/ui/textarea.vue'; import MkButton from '@client/components/ui/button.vue'; @@ -53,7 +52,6 @@ export default defineComponent({ data() { return { comment: this.initialComment || '', - faExclamationCircle, }; }, diff --git a/src/client/components/channel-follow-button.vue b/src/client/components/channel-follow-button.vue index dc0c0faa1f..6f9405b97f 100644 --- a/src/client/components/channel-follow-button.vue +++ b/src/client/components/channel-follow-button.vue @@ -6,21 +6,20 @@ > <template v-if="!wait"> <template v-if="isFollowing"> - <span v-if="full">{{ $ts.unfollow }}</span><Fa :icon="faMinus"/> + <span v-if="full">{{ $ts.unfollow }}</span><i class="fas fa-minus"></i> </template> <template v-else> - <span v-if="full">{{ $ts.follow }}</span><Fa :icon="faPlus"/> + <span v-if="full">{{ $ts.follow }}</span><i class="fas fa-plus"></i> </template> </template> <template v-else> - <span v-if="full">{{ $ts.processing }}</span><Fa :icon="faSpinner" pulse fixed-width/> + <span v-if="full">{{ $ts.processing }}</span><i class="fas fa-spinner fa-pulse fa-fw"></i> </template> </button> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faSpinner, faPlus, faMinus, } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -40,7 +39,6 @@ export default defineComponent({ return { isFollowing: this.channel.isFollowing, wait: false, - faSpinner, faPlus, faMinus, }; }, diff --git a/src/client/components/channel-preview.vue b/src/client/components/channel-preview.vue index 4dc633bcb7..eb00052a78 100644 --- a/src/client/components/channel-preview.vue +++ b/src/client/components/channel-preview.vue @@ -2,10 +2,10 @@ <MkA :to="`/channels/${channel.id}`" class="eftoefju _panel" tabindex="-1"> <div class="banner" :style="bannerStyle"> <div class="fade"></div> - <div class="name"><Fa :icon="faSatelliteDish"/> {{ channel.name }}</div> + <div class="name"><i class="fas fa-satellite-dish"></i> {{ channel.name }}</div> <div class="status"> <div> - <Fa :icon="faUsers" fixed-width/> + <i class="fas fa-users fa-fw"></i> <I18n :src="$ts._channel.usersCount" tag="span" style="margin-left: 4px;"> <template #n> <b>{{ channel.usersCount }}</b> @@ -13,7 +13,7 @@ </I18n> </div> <div> - <Fa :icon="faPencilAlt" fixed-width/> + <i class="fas fa-pencil-alt fa-fw"></i> <I18n :src="$ts._channel.notesCount" tag="span" style="margin-left: 4px;"> <template #n> <b>{{ channel.notesCount }}</b> @@ -35,7 +35,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faSatelliteDish, faUsers, faPencilAlt } from '@fortawesome/free-solid-svg-icons'; export default defineComponent({ props: { @@ -57,7 +56,6 @@ export default defineComponent({ data() { return { - faSatelliteDish, faUsers, faPencilAlt, }; }, }); diff --git a/src/client/components/date-separated-list.vue b/src/client/components/date-separated-list.vue index 0f2823d392..2a861adb09 100644 --- a/src/client/components/date-separated-list.vue +++ b/src/client/components/date-separated-list.vue @@ -1,7 +1,5 @@ <script lang="ts"> import { defineComponent, h, TransitionGroup } from 'vue'; -import { faAngleUp, faAngleDown } from '@fortawesome/free-solid-svg-icons'; -import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'; export default defineComponent({ props: { @@ -73,17 +71,15 @@ export default defineComponent({ class: 'date' }, [ h('span', [ - h(FontAwesomeIcon, { - class: 'icon', - icon: faAngleUp, + h('i', { + class: 'fas fa-angle-up icon', }), this.getDateText(item.createdAt) ]), h('span', [ this.getDateText(this.items[i + 1].createdAt), - h(FontAwesomeIcon, { - class: 'icon', - icon: faAngleDown, + h('i', { + class: 'fas fa-angle-down icon', }) ]) ])); diff --git a/src/client/components/dialog.vue b/src/client/components/dialog.vue index ef30715343..83ea40922c 100644 --- a/src/client/components/dialog.vue +++ b/src/client/components/dialog.vue @@ -2,15 +2,15 @@ <MkModal ref="modal" @click="done(true)" @closed="$emit('closed')"> <div class="mk-dialog"> <div class="icon" v-if="icon"> - <Fa :icon="icon"/> + <i :class="icon"></i> </div> <div class="icon" v-else-if="!input && !select" :class="type"> - <Fa :icon="faCheck" v-if="type === 'success'"/> - <Fa :icon="faTimesCircle" v-if="type === 'error'"/> - <Fa :icon="faExclamationTriangle" v-if="type === 'warning'"/> - <Fa :icon="faInfoCircle" v-if="type === 'info'"/> - <Fa :icon="faQuestionCircle" v-if="type === 'question'"/> - <Fa :icon="faSpinner" pulse v-if="type === 'waiting'"/> + <i v-if="type === 'success'" class="fas fa-check"></i> + <i v-else-if="type === 'error'" class="fas fa-times-circle"></i> + <i v-else-if="type === 'warning'" class="fas fa-exclamation-triangle"></i> + <i v-else-if="type === 'info'" class="fas fa-information-circle"></i> + <i v-else-if="type === 'question'" class="fas fa-question-circle"></i> + <i v-else-if="type === 'waiting'" class="fas fa-spinner fa-pulse"></i> </div> <header v-if="title"><Mfm :text="title"/></header> <div class="body" v-if="text"><Mfm :text="text"/></div> @@ -38,8 +38,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faSpinner, faInfoCircle, faExclamationTriangle, faCheck } from '@fortawesome/free-solid-svg-icons'; -import { faTimesCircle, faQuestionCircle } from '@fortawesome/free-regular-svg-icons'; import MkModal from '@client/components/ui/modal.vue'; import MkButton from '@client/components/ui/button.vue'; import MkInput from '@client/components/ui/input.vue'; @@ -99,7 +97,6 @@ export default defineComponent({ return { inputValue: this.input && this.input.default ? this.input.default : null, selectedValue: this.select ? this.select.default ? this.select.default : this.select.items ? this.select.items[0].value : this.select.groupedItems[0].items[0].value : null, - faTimesCircle, faQuestionCircle, faSpinner, faInfoCircle, faExclamationTriangle, faCheck }; }, diff --git a/src/client/components/drive-file-thumbnail.vue b/src/client/components/drive-file-thumbnail.vue index aadf22ed77..2cb1d98618 100644 --- a/src/client/components/drive-file-thumbnail.vue +++ b/src/client/components/drive-file-thumbnail.vue @@ -1,31 +1,21 @@ <template> <div class="zdjebgpv" ref="thumbnail"> <ImgWithBlurhash v-if="isThumbnailAvailable" :hash="file.blurhash" :src="file.thumbnailUrl" :alt="file.name" :title="file.name" :style="`object-fit: ${ fit }`"/> - <Fa :icon="faFileImage" class="icon" v-else-if="is === 'image'"/> - <Fa :icon="faFileVideo" class="icon" v-else-if="is === 'video'"/> - <Fa :icon="faMusic" class="icon" v-else-if="is === 'audio' || is === 'midi'"/> - <Fa :icon="faFileCsv" class="icon" v-else-if="is === 'csv'"/> - <Fa :icon="faFilePdf" class="icon" v-else-if="is === 'pdf'"/> - <Fa :icon="faFileAlt" class="icon" v-else-if="is === 'textfile'"/> - <Fa :icon="faFileArchive" class="icon" v-else-if="is === 'archive'"/> - <Fa :icon="faFile" class="icon" v-else/> - <Fa :icon="faFilm" class="icon-sub" v-if="isThumbnailAvailable && is === 'video'"/> + <i v-else-if="is === 'image'" class="fas fa-file-image icon"></i> + <i v-else-if="is === 'video'" class="fas fa-file-video icon"></i> + <i v-else-if="is === 'audio' || is === 'midi'" class="fas fa-music icon"></i> + <i v-else-if="is === 'csv'" class="fas fa-file-csv icon"></i> + <i v-else-if="is === 'pdf'" class="fas fa-file-pdf icon"></i> + <i v-else-if="is === 'textfile'" class="fas fa-file-alt icon"></i> + <i v-else-if="is === 'archive'" class="fas fa-file-archive icon"></i> + <i v-else class="fas fa-file icon"></i> + + <i v-if="isThumbnailAvailable && is === 'video'" class="fas fa-film icon-sub"></i> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { - faFile, - faFileAlt, - faFileImage, - faMusic, - faFileVideo, - faFileCsv, - faFilePdf, - faFileArchive, - faFilm - } from '@fortawesome/free-solid-svg-icons'; import ImgWithBlurhash from '@client/components/img-with-blurhash.vue'; import { ColdDeviceStorage } from '@client/store'; @@ -49,15 +39,6 @@ export default defineComponent({ isContextmenuShowing: false, isDragging: false, - faFile, - faFileAlt, - faFileImage, - faMusic, - faFileVideo, - faFileCsv, - faFilePdf, - faFileArchive, - faFilm }; }, computed: { diff --git a/src/client/components/drive.file.vue b/src/client/components/drive.file.vue index fb8b50d25a..293465e428 100644 --- a/src/client/components/drive.file.vue +++ b/src/client/components/drive.file.vue @@ -32,8 +32,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons'; -import { faDownload, faLink, faICursor, faTrashAlt } from '@fortawesome/free-solid-svg-icons'; import copyToClipboard from '@client/scripts/copy-to-clipboard'; import MkDriveFileThumbnail from './drive-file-thumbnail.vue'; import bytes from '@client/filters/bytes'; @@ -87,22 +85,22 @@ export default defineComponent({ action: this.rename }, { text: this.file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive, - icon: this.file.isSensitive ? faEye : faEyeSlash, + icon: this.file.isSensitive ? 'fas fa-eye' : 'fas fa-eye-slash', action: this.toggleSensitive }, null, { text: this.$ts.copyUrl, - icon: faLink, + icon: 'fas fa-link', action: this.copyUrl }, { type: 'a', href: this.file.url, target: '_blank', text: this.$ts.download, - icon: faDownload, + icon: 'fas fa-download', download: this.file.name }, null, { text: this.$ts.delete, - icon: faTrashAlt, + icon: 'fas fa-trash-alt', danger: true, action: this.deleteFile }]; diff --git a/src/client/components/drive.folder.vue b/src/client/components/drive.folder.vue index 2822c85680..6ddd392527 100644 --- a/src/client/components/drive.folder.vue +++ b/src/client/components/drive.folder.vue @@ -15,8 +15,8 @@ :title="title" > <p class="name"> - <template v-if="hover"><Fa :icon="faFolderOpen" fixed-width/></template> - <template v-if="!hover"><Fa :icon="faFolder" fixed-width/></template> + <template v-if="hover"><i class="fas fa-folder-open fa-fw"></i></template> + <template v-if="!hover"><i class="fas fa-folder fa-fw"></i></template> {{ folder.name }} </p> <p class="upload" v-if="$store.state.uploadFolder == folder.id"> @@ -28,9 +28,7 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faFolder, faFolderOpen, faTrashAlt, faWindowRestore } from '@fortawesome/free-regular-svg-icons'; import * as os from '@client/os'; -import { faICursor } from '@fortawesome/free-solid-svg-icons'; export default defineComponent({ props: { @@ -57,7 +55,6 @@ export default defineComponent({ hover: false, draghover: false, isDragging: false, - faFolder, faFolderOpen }; }, @@ -241,7 +238,7 @@ export default defineComponent({ onContextmenu(e) { os.contextMenu([{ text: this.$ts.openInWindow, - icon: faWindowRestore, + icon: 'fas fa-window-restore', action: () => { os.popup(import('./drive-window.vue'), { initialFolder: this.folder @@ -254,7 +251,7 @@ export default defineComponent({ action: this.rename }, null, { text: this.$ts.delete, - icon: faTrashAlt, + icon: 'fas fa-trash-alt', danger: true, action: this.deleteFolder }], e); @@ -312,7 +309,7 @@ export default defineComponent({ font-size: 0.9em; color: var(--desktopDriveFolderFg); - > [data-icon] { + > i { margin-right: 4px; margin-left: 2px; text-align: left; diff --git a/src/client/components/drive.nav-folder.vue b/src/client/components/drive.nav-folder.vue index 89a267b19f..913a1b5f92 100644 --- a/src/client/components/drive.nav-folder.vue +++ b/src/client/components/drive.nav-folder.vue @@ -7,14 +7,13 @@ @dragleave="onDragleave" @drop.stop="onDrop" > - <i v-if="folder == null"><Fa :icon="faCloud"/></i> + <i v-if="folder == null" class="fas fa-cloud"></i> <span>{{ folder == null ? $ts.drive : folder.name }}</span> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faCloud } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -29,7 +28,6 @@ export default defineComponent({ return { hover: false, draghover: false, - faCloud }; }, diff --git a/src/client/components/drive.vue b/src/client/components/drive.vue index 103ae9c11e..bd5bd8008b 100644 --- a/src/client/components/drive.vue +++ b/src/client/components/drive.vue @@ -4,10 +4,10 @@ <div class="path" @contextmenu.prevent.stop="() => {}"> <XNavFolder :class="{ current: folder == null }"/> <template v-for="f in hierarchyFolders"> - <span class="separator"><Fa :icon="faAngleRight"/></span> + <span class="separator"><i class="fas fa-angle-right"></i></span> <XNavFolder :folder="f"/> </template> - <span class="separator" v-if="folder != null"><Fa :icon="faAngleRight"/></span> + <span class="separator" v-if="folder != null"><i class="fas fa-angle-right"></i></span> <span class="folder current" v-if="folder != null">{{ folder.name }}</span> </div> </nav> @@ -47,13 +47,11 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faAngleRight, faFolderPlus, faICursor, faLink, faUpload } from '@fortawesome/free-solid-svg-icons'; import XNavFolder from './drive.nav-folder.vue'; import XFolder from './drive.folder.vue'; import XFile from './drive.file.vue'; import MkButton from './ui/button.vue'; import * as os from '@client/os'; -import { faTrashAlt } from '@fortawesome/free-regular-svg-icons'; export default defineComponent({ components: { @@ -125,7 +123,6 @@ export default defineComponent({ ), moreFilesElement: null as Element, - faAngleRight }; }, @@ -606,11 +603,11 @@ export default defineComponent({ type: 'label' }, { text: this.$ts.upload, - icon: faUpload, + icon: 'fas fa-upload', action: () => { this.selectLocalFile(); } }, { text: this.$ts.fromUrl, - icon: faLink, + icon: 'fas fa-link', action: () => { this.urlUpload(); } }, null, { text: this.folder ? this.folder.name : this.$ts.drive, @@ -621,11 +618,11 @@ export default defineComponent({ action: () => { this.renameFolder(this.folder); } } : undefined, this.folder ? { text: this.$ts.deleteFolder, - icon: faTrashAlt, + icon: 'fas fa-trash-alt', action: () => { this.deleteFolder(this.folder); } } : undefined, { text: this.$ts.createFolder, - icon: faFolderPlus, + icon: 'fas fa-folder-plus', action: () => { this.createFolder(); } }]; }, @@ -693,7 +690,7 @@ export default defineComponent({ opacity: 0.5; cursor: default; - > [data-icon] { + > i { margin: 0; } } diff --git a/src/client/components/emoji-picker.section.vue b/src/client/components/emoji-picker.section.vue index 944c507bdc..0ea3761429 100644 --- a/src/client/components/emoji-picker.section.vue +++ b/src/client/components/emoji-picker.section.vue @@ -1,7 +1,7 @@ <template> <section> <header class="_acrylic" @click="shown = !shown"> - <Fa :icon="shown ? faChevronDown : faChevronUp" :key="shown" fixed-width class="toggle"/> <slot></slot> ({{ emojis.length }}) + <i class="toggle fa-fw" :class="shown ? 'fas fa-chevron-down' : 'fas fa-chevron-up'"></i> <slot></slot> ({{ emojis.length }}) </header> <div v-if="shown"> <button v-for="emoji in emojis" @@ -17,7 +17,6 @@ <script lang="ts"> import { defineComponent, markRaw } from 'vue'; -import { faChevronUp, faChevronDown } from '@fortawesome/free-solid-svg-icons'; import { getStaticImageUrl } from '@client/scripts/get-static-image-url'; export default defineComponent({ @@ -36,7 +35,6 @@ export default defineComponent({ return { getStaticImageUrl, shown: this.initialShown, - faChevronUp, faChevronDown, }; }, diff --git a/src/client/components/emoji-picker.vue b/src/client/components/emoji-picker.vue index a212c15049..9bec319af2 100644 --- a/src/client/components/emoji-picker.vue +++ b/src/client/components/emoji-picker.vue @@ -42,7 +42,7 @@ </section> <section> - <header class="_acrylic"><Fa :icon="faClock" fixed-width/> {{ $ts.recentUsed }}</header> + <header class="_acrylic"><i class="far fa-clock fa-fw"></i> {{ $ts.recentUsed }}</header> <div> <button v-for="emoji in $store.state.recentlyUsedEmojis" class="_button" @@ -64,10 +64,10 @@ </div> </div> <div class="tabs"> - <button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><Fa :icon="faAsterisk" fixed-width/></button> - <button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><Fa :icon="faLaugh" fixed-width/></button> - <button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><Fa :icon="faLeaf" fixed-width/></button> - <button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><Fa :icon="faHashtag" fixed-width/></button> + <button class="_button tab" :class="{ active: tab === 'index' }" @click="tab = 'index'"><i class="fas fa-asterisk fa-fw"></i></button> + <button class="_button tab" :class="{ active: tab === 'custom' }" @click="tab = 'custom'"><i class="fas fa-laugh fa-fw"></i></button> + <button class="_button tab" :class="{ active: tab === 'unicode' }" @click="tab = 'unicode'"><i class="fas fa-leaf fa-fw"></i></button> + <button class="_button tab" :class="{ active: tab === 'tags' }" @click="tab = 'tags'"><i class="fas fa-hashtag fa-fw"></i></button> </div> </div> </template> @@ -76,8 +76,6 @@ import { defineComponent, markRaw } from 'vue'; import { emojilist } from '@/misc/emojilist'; import { getStaticImageUrl } from '@client/scripts/get-static-image-url'; -import { faAsterisk, faLeaf, faUtensils, faFutbol, faCity, faDice, faGlobe, faClock, faUser, faChevronDown, faShapes, faBicycle, faHashtag } from '@fortawesome/free-solid-svg-icons'; -import { faHeart, faFlag, faLaugh } from '@fortawesome/free-regular-svg-icons'; import Particle from '@client/components/particle.vue'; import * as os from '@client/os'; import { isDeviceTouch } from '@client/scripts/is-device-touch'; @@ -117,7 +115,6 @@ export default defineComponent({ searchResultUnicode: [], tab: 'index', categories: ['face', 'people', 'animals_and_nature', 'food_and_drink', 'activity', 'travel_and_places', 'objects', 'symbols', 'flags'], - faGlobe, faClock, faChevronDown, faAsterisk, faLaugh, faUtensils, faLeaf, faShapes, faBicycle, faHashtag, }; }, diff --git a/src/client/components/file-type-icon.vue b/src/client/components/file-type-icon.vue index 2da9ba0cbd..95200b98c2 100644 --- a/src/client/components/file-type-icon.vue +++ b/src/client/components/file-type-icon.vue @@ -1,12 +1,11 @@ <template> <span class="mk-file-type-icon"> - <template v-if="kind == 'image'"><Fa :icon="faFileImage"/></template> + <template v-if="kind == 'image'"><i class="fas fa-file-image"></i></template> </span> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faFileImage } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -18,7 +17,6 @@ export default defineComponent({ }, data() { return { - faFileImage }; }, computed: { diff --git a/src/client/components/follow-button.vue b/src/client/components/follow-button.vue index d2dc9223bd..7199183c66 100644 --- a/src/client/components/follow-button.vue +++ b/src/client/components/follow-button.vue @@ -6,30 +6,29 @@ > <template v-if="!wait"> <template v-if="hasPendingFollowRequestFromYou && user.isLocked"> - <span v-if="full">{{ $ts.followRequestPending }}</span><Fa :icon="faHourglassHalf"/> + <span v-if="full">{{ $ts.followRequestPending }}</span><i class="fas fa-hourglass-half"></i> </template> <template v-else-if="hasPendingFollowRequestFromYou && !user.isLocked"> <!-- つまりリモートフォローの場合。 --> - <span v-if="full">{{ $ts.processing }}</span><Fa :icon="faSpinner" pulse/> + <span v-if="full">{{ $ts.processing }}</span><i class="fas fa-spinner fa-pulse"></i> </template> <template v-else-if="isFollowing"> - <span v-if="full">{{ $ts.unfollow }}</span><Fa :icon="faMinus"/> + <span v-if="full">{{ $ts.unfollow }}</span><i class="fas fa-minus"></i> </template> <template v-else-if="!isFollowing && user.isLocked"> - <span v-if="full">{{ $ts.followRequest }}</span><Fa :icon="faPlus"/> + <span v-if="full">{{ $ts.followRequest }}</span><i class="fas fa-plus"></i> </template> <template v-else-if="!isFollowing && !user.isLocked"> - <span v-if="full">{{ $ts.follow }}</span><Fa :icon="faPlus"/> + <span v-if="full">{{ $ts.follow }}</span><i class="fas fa-plus"></i> </template> </template> <template v-else> - <span v-if="full">{{ $ts.processing }}</span><Fa :icon="faSpinner" pulse fixed-width/> + <span v-if="full">{{ $ts.processing }}</span><i class="fas fa-spinner fa-pulse fa-fw"></i> </template> </button> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faSpinner, faPlus, faMinus, faHourglassHalf } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -56,7 +55,6 @@ export default defineComponent({ hasPendingFollowRequestFromYou: this.user.hasPendingFollowRequestFromYou, wait: false, connection: null, - faSpinner, faPlus, faMinus, faHourglassHalf }; }, diff --git a/src/client/components/form/info.vue b/src/client/components/form/info.vue index a9224c7e65..9fdcbdca62 100644 --- a/src/client/components/form/info.vue +++ b/src/client/components/form/info.vue @@ -1,8 +1,8 @@ <template> <div class="fzenkabp _formItem"> <div class="_formPanel" :class="{ warn }"> - <i v-if="warn"><Fa :icon="faExclamationTriangle"/></i> - <i v-else><Fa :icon="faInfoCircle"/></i> + <i v-if="warn" class="fas fa-exclamation-triangle"></i> + <i v-else class="fas fa-info-circle"></i> <slot></slot> </div> </div> @@ -10,7 +10,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faInfoCircle, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; export default defineComponent({ props: { @@ -22,7 +21,6 @@ export default defineComponent({ }, data() { return { - faInfoCircle, faExclamationTriangle }; } }); diff --git a/src/client/components/form/input.vue b/src/client/components/form/input.vue index c0fa3e716e..942ac4dfd2 100644 --- a/src/client/components/form/input.vue +++ b/src/client/components/form/input.vue @@ -30,13 +30,12 @@ </div> <template #caption><slot name="desc"></slot></template> - <FormButton v-if="manualSave && changed" @click="updated" primary><Fa :icon="faSave"/> {{ $ts.save }}</FormButton> + <FormButton v-if="manualSave && changed" @click="updated" primary><i class="fas fa-save"></i> {{ $ts.save }}</FormButton> </FormGroup> </template> <script lang="ts"> import { defineComponent, onMounted, onUnmounted, nextTick, ref, watch, computed, toRefs } from 'vue'; -import { faExclamationCircle, faSave } from '@fortawesome/free-solid-svg-icons'; import './form.scss'; import FormButton from './button.vue'; import FormGroup from './group.vue'; @@ -191,7 +190,6 @@ export default defineComponent({ onInput, onKeydown, updated, - faExclamationCircle, faSave, }; }, }); diff --git a/src/client/components/form/link.vue b/src/client/components/form/link.vue index af36bcf22c..e1d13c6431 100644 --- a/src/client/components/form/link.vue +++ b/src/client/components/form/link.vue @@ -5,7 +5,7 @@ <span class="text"><slot></slot></span> <span class="right"> <span class="text"><slot name="suffix"></slot></span> - <Fa :icon="faExternalLinkAlt" class="icon"/> + <i class="fas fa-external-link-alt icon"></i> </span> </a> <MkA class="main _button _formPanel _formClickable" :class="{ active }" :to="to" :behavior="behavior" v-else> @@ -13,7 +13,7 @@ <span class="text"><slot></slot></span> <span class="right"> <span class="text"><slot name="suffix"></slot></span> - <Fa :icon="faChevronRight" class="icon"/> + <i class="fas fa-chevron-right icon"></i> </span> </MkA> </div> @@ -21,7 +21,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faChevronRight, faExternalLinkAlt } from '@fortawesome/free-solid-svg-icons'; import './form.scss'; export default defineComponent({ @@ -45,7 +44,6 @@ export default defineComponent({ }, data() { return { - faChevronRight, faExternalLinkAlt }; } }); diff --git a/src/client/components/form/select.vue b/src/client/components/form/select.vue index 01f28587dc..1c5a473451 100644 --- a/src/client/components/form/select.vue +++ b/src/client/components/form/select.vue @@ -14,7 +14,7 @@ <slot></slot> </select> <div class="suffix"> - <Fa :icon="faChevronDown"/> + <i class="fas fa-chevron-down"></i> </div> </div> <div class="_formCaption"><slot name="caption"></slot></div> @@ -23,7 +23,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faChevronDown } from '@fortawesome/free-solid-svg-icons'; import './form.scss'; export default defineComponent({ @@ -47,7 +46,6 @@ export default defineComponent({ }, data() { return { - faChevronDown, }; }, computed: { diff --git a/src/client/components/form/textarea.vue b/src/client/components/form/textarea.vue index 135e16c259..8f42581a9b 100644 --- a/src/client/components/form/textarea.vue +++ b/src/client/components/form/textarea.vue @@ -18,13 +18,12 @@ </div> <template #caption><slot name="desc"></slot></template> - <FormButton v-if="manualSave && changed" @click="updated" primary><Fa :icon="faSave"/> {{ $ts.save }}</FormButton> + <FormButton v-if="manualSave && changed" @click="updated" primary><i class="fas fa-save"></i> {{ $ts.save }}</FormButton> </FormGroup> </template> <script lang="ts"> import { defineComponent, ref, toRefs, watch } from 'vue'; -import { faSave } from '@fortawesome/free-solid-svg-icons'; import './form.scss'; import FormButton from './button.vue'; import FormGroup from './group.vue'; @@ -106,7 +105,6 @@ export default defineComponent({ changed, focus, onInput, - faSave, }; } }); diff --git a/src/client/components/global/a.vue b/src/client/components/global/a.vue index 7ad62a7310..952dfb1841 100644 --- a/src/client/components/global/a.vue +++ b/src/client/components/global/a.vue @@ -6,7 +6,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faExpandAlt, faColumns, faExternalLinkAlt, faLink, faWindowMaximize } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; import copyToClipboard from '@client/scripts/copy-to-clipboard'; import { router } from '@client/router'; @@ -57,31 +56,31 @@ export default defineComponent({ type: 'label', text: this.to, }, { - icon: faWindowMaximize, + icon: 'fas fa-window-maximize', text: this.$ts.openInWindow, action: () => { os.pageWindow(this.to); } }, this.sideViewHook ? { - icon: faColumns, + icon: 'fas fa-columns', text: this.$ts.openInSideView, action: () => { this.sideViewHook(this.to); } } : undefined, { - icon: faExpandAlt, + icon: 'fas fa-expand-alt', text: this.$ts.showInPage, action: () => { this.$router.push(this.to); } }, null, { - icon: faExternalLinkAlt, + icon: 'fas fa-external-link-alt', text: this.$ts.openInNewTab, action: () => { window.open(this.to, '_blank'); } }, { - icon: faLink, + icon: 'fas fa-link', text: this.$ts.copyLink, action: () => { copyToClipboard(`${url}${this.to}`); diff --git a/src/client/components/global/error.vue b/src/client/components/global/error.vue index af989b1c57..05a508a653 100644 --- a/src/client/components/global/error.vue +++ b/src/client/components/global/error.vue @@ -2,7 +2,7 @@ <transition :name="$store.state.animation ? 'zoom' : ''" appear> <div class="mjndxjcg"> <img src="https://xn--931a.moe/assets/error.jpg" class="_ghost"/> - <p><Fa :icon="faExclamationTriangle"/> {{ $ts.somethingHappened }}</p> + <p><i class="fas fa-exclamation-triangle"></i> {{ $ts.somethingHappened }}</p> <MkButton @click="() => $emit('retry')" class="button">{{ $ts.retry }}</MkButton> </div> </transition> @@ -10,7 +10,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; import MkButton from '@client/components/ui/button.vue'; export default defineComponent({ @@ -19,7 +18,6 @@ export default defineComponent({ }, data() { return { - faExclamationTriangle }; }, }); diff --git a/src/client/components/global/url.vue b/src/client/components/global/url.vue index f68a3c00be..e633a57bd8 100644 --- a/src/client/components/global/url.vue +++ b/src/client/components/global/url.vue @@ -15,13 +15,12 @@ <span class="pathname" v-if="pathname != ''">{{ self ? pathname.substr(1) : pathname }}</span> <span class="query">{{ query }}</span> <span class="hash">{{ hash }}</span> - <Fa :icon="faExternalLinkSquareAlt" v-if="target === '_blank'" class="icon"/> + <i v-if="target === '_blank'" class="fas fa-external-link-square-alt icon"></i> </component> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faExternalLinkSquareAlt } from '@fortawesome/free-solid-svg-icons'; import { toUnicode as decodePunycode } from 'punycode/'; import { url as local } from '@client/config'; import { isDeviceTouch } from '@client/scripts/is-device-touch'; @@ -55,7 +54,6 @@ export default defineComponent({ hideTimer: null, checkTimer: null, close: null, - faExternalLinkSquareAlt }; }, created() { diff --git a/src/client/components/google.vue b/src/client/components/google.vue index 20dc1f825a..6d8ae0b5bf 100644 --- a/src/client/components/google.vue +++ b/src/client/components/google.vue @@ -1,13 +1,12 @@ <template> <div class="mk-google"> <input type="search" v-model="query" :placeholder="q"> - <button @click="search"><Fa :icon="faSearch"/> {{ $ts.search }}</button> + <button @click="search"><i class="fas fa-search"></i> {{ $ts.search }}</button> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faSearch } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -15,7 +14,6 @@ export default defineComponent({ data() { return { query: null, - faSearch }; }, mounted() { diff --git a/src/client/components/instance-stats.vue b/src/client/components/instance-stats.vue index 75abefc2fe..aa01f1c806 100644 --- a/src/client/components/instance-stats.vue +++ b/src/client/components/instance-stats.vue @@ -3,7 +3,7 @@ <div class="stats" v-if="info"> <div class="_panel"> <div> - <b><Fa :icon="faUser"/>{{ $ts.users }}</b> + <b><i class="fas fa-user"></i>{{ $ts.users }}</b> <small>{{ $ts.local }}</small> </div> <div> @@ -23,7 +23,7 @@ </div> <div class="_panel"> <div> - <b><Fa :icon="faUser"/>{{ $ts.users }}</b> + <b><i class="fas fa-user"></i>{{ $ts.users }}</b> <small>{{ $ts.remote }}</small> </div> <div> @@ -43,7 +43,7 @@ </div> <div class="_panel"> <div> - <b><Fa :icon="faPencilAlt"/>{{ $ts.notes }}</b> + <b><i class="fas fa-pencil-alt"></i>{{ $ts.notes }}</b> <small>{{ $ts.local }}</small> </div> <div> @@ -63,7 +63,7 @@ </div> <div class="_panel"> <div> - <b><Fa :icon="faPencilAlt"/>{{ $ts.notes }}</b> + <b><i class="fas fa-pencil-alt"></i>{{ $ts.notes }}</b> <small>{{ $ts.remote }}</small> </div> <div> @@ -84,7 +84,7 @@ </div> <section class="_card"> - <div class="_title" style="position: relative;"><Fa :icon="faChartBar"/> {{ $ts.statistics }}<button @click="fetchChart" class="_button" style="position: absolute; right: 0; bottom: 0; top: 0; padding: inherit;"><Fa :icon="faSync"/></button></div> + <div class="_title" style="position: relative;"><i class="fas fa-chart-bar"></i> {{ $ts.statistics }}<button @click="fetchChart" class="_button" style="position: absolute; right: 0; bottom: 0; top: 0; padding: inherit;"><i class="fas fa-sync"></i></button></div> <div class="_content" style="margin-top: -8px;"> <div class="selects" style="display: flex;"> <MkSelect v-model:value="chartSrc" style="margin: 0; flex: 1;"> @@ -123,7 +123,6 @@ <script lang="ts"> import { defineComponent, markRaw } from 'vue'; -import { faChartBar, faUser, faPencilAlt, faSync } from '@fortawesome/free-solid-svg-icons'; import Chart from 'chart.js'; import MkSelect from './ui/select.vue'; import number from '@client/filters/number'; @@ -173,7 +172,6 @@ export default defineComponent({ chartInstance: null, chartSrc: 'notes', chartSpan: 'hour', - faChartBar, faUser, faPencilAlt, faSync } }, @@ -666,7 +664,7 @@ export default defineComponent({ > b { display: block; - > [data-icon] { + > i { width: 16px; margin-right: 8px; } diff --git a/src/client/components/launch-pad.vue b/src/client/components/launch-pad.vue index 7610b44eb5..e3d24c70f2 100644 --- a/src/client/components/launch-pad.vue +++ b/src/client/components/launch-pad.vue @@ -4,28 +4,28 @@ <div class="main"> <template v-for="item in items"> <button v-if="item.action" class="_button" @click="$event => { item.action($event); close(); }"> - <Fa :icon="item.icon" class="icon"/> + <i class="icon" :class="item.icon"></i> <div class="text">{{ item.text }}</div> - <i v-if="item.indicate"><Fa :icon="faCircle"/></i> + <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> </button> <MkA v-else :to="item.to" @click.passive="close()"> - <Fa :icon="item.icon" class="icon"/> + <i class="icon" :class="item.icon"></i> <div class="text">{{ item.text }}</div> - <i v-if="item.indicate"><Fa :icon="faCircle"/></i> + <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> </MkA> </template> </div> <div class="sub"> <MkA to="/docs" @click.passive="close()"> - <Fa :icon="faQuestionCircle" class="icon"/> + <i class="fas fa-question-circle icon"></i> <div class="text">{{ $ts.help }}</div> </MkA> <MkA to="/about" @click.passive="close()"> - <Fa :icon="faInfoCircle" class="icon"/> + <i class="fas fa-info-circle icon"></i> <div class="text">{{ $t('aboutX', { x: instanceName }) }}</div> </MkA> <MkA to="/about-misskey" @click.passive="close()"> - <Fa :icon="faInfoCircle" class="icon"/> + <i class="fas fa-info-circle icon"></i> <div class="text">{{ $ts.aboutMisskey }}</div> </MkA> </div> @@ -35,7 +35,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faQuestionCircle, faInfoCircle, faCircle } from '@fortawesome/free-solid-svg-icons'; import MkModal from '@client/components/ui/modal.vue'; import { sidebarDef } from '@client/sidebar'; import { instanceName } from '@client/config'; @@ -52,7 +51,6 @@ export default defineComponent({ menuDef: sidebarDef, items: [], instanceName, - faQuestionCircle, faInfoCircle, faCircle, }; }, @@ -127,7 +125,7 @@ export default defineComponent({ line-height: 1.5em; } - > i { + > .indicator { position: absolute; top: 32px; left: 32px; diff --git a/src/client/components/link.vue b/src/client/components/link.vue index cc7db8c2f5..9712c778a9 100644 --- a/src/client/components/link.vue +++ b/src/client/components/link.vue @@ -5,13 +5,12 @@ :title="url" > <slot></slot> - <Fa :icon="faExternalLinkSquareAlt" v-if="target === '_blank'" class="icon"/> + <i v-if="target === '_blank'" class="fas fa-external-link-square-alt icon"></i> </component> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faExternalLinkSquareAlt } from '@fortawesome/free-solid-svg-icons'; import { url as local } from '@client/config'; import { isDeviceTouch } from '@client/scripts/is-device-touch'; import * as os from '@client/os'; @@ -38,7 +37,6 @@ export default defineComponent({ hideTimer: null, checkTimer: null, close: null, - faExternalLinkSquareAlt }; }, methods: { diff --git a/src/client/components/media-banner.vue b/src/client/components/media-banner.vue index 29d7c727f6..34065557bf 100644 --- a/src/client/components/media-banner.vue +++ b/src/client/components/media-banner.vue @@ -1,7 +1,7 @@ <template> <div class="mk-media-banner"> <div class="sensitive" v-if="media.isSensitive && hide" @click="hide = false"> - <span class="icon"><Fa :icon="faExclamationTriangle"/></span> + <span class="icon"><i class="fas fa-exclamation-triangle"></i></span> <b>{{ $ts.sensitive }}</b> <span>{{ $ts.clickToShow }}</span> </div> @@ -19,7 +19,7 @@ :title="media.name" :download="media.name" > - <span class="icon"><Fa icon="download"/></span> + <span class="icon"><i class="fas fa-download"></i></span> <b>{{ media.name }}</b> </a> </div> @@ -27,7 +27,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; import { ColdDeviceStorage } from '@client/store'; @@ -41,7 +40,6 @@ export default defineComponent({ data() { return { hide: true, - faExclamationTriangle }; }, mounted() { diff --git a/src/client/components/media-image.vue b/src/client/components/media-image.vue index 5760466138..0573b2592d 100644 --- a/src/client/components/media-image.vue +++ b/src/client/components/media-image.vue @@ -3,13 +3,13 @@ <ImgWithBlurhash class="bg" :hash="image.blurhash" :title="image.name"/> <div class="text"> <div> - <b><Fa :icon="faExclamationTriangle"/> {{ $ts.sensitive }}</b> + <b><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> <span>{{ $ts.clickToShow }}</span> </div> </div> </div> <div class="gqnyydlz" :style="{ background: color }" v-else> - <i><Fa :icon="faEyeSlash" @click="hide = true"/></i> + <i class="fas fa-eye-slash" @click="hide = true"></i> <a :href="image.url" :title="image.name" @@ -23,7 +23,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faExclamationTriangle, faEyeSlash } from '@fortawesome/free-solid-svg-icons'; import { getStaticImageUrl } from '@client/scripts/get-static-image-url'; import { extractAvgColorFromBlurhash } from '@client/scripts/extract-avg-color-from-blurhash'; import ImageViewer from './image-viewer.vue'; @@ -47,7 +46,6 @@ export default defineComponent({ return { hide: true, color: null, - faExclamationTriangle, faEyeSlash, }; }, computed: { diff --git a/src/client/components/media-video.vue b/src/client/components/media-video.vue index b6f63cb65d..020b5e93a8 100644 --- a/src/client/components/media-video.vue +++ b/src/client/components/media-video.vue @@ -1,7 +1,7 @@ <template> <div class="icozogqfvdetwohsdglrbswgrejoxbdj" v-if="hide" @click="hide = false"> <div> - <b><Fa :icon="faExclamationTriangle"/> {{ $ts.sensitive }}</b> + <b><i class="fas fa-exclamation-triangle"></i> {{ $ts.sensitive }}</b> <span>{{ $ts.clickToShow }}</span> </div> </div> @@ -18,13 +18,12 @@ :type="video.type" > </video> - <i><Fa :icon="faEyeSlash" @click="hide = true"/></i> + <i class="fas fa-eye-slash" @click="hide = true"></i> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faExclamationTriangle, faEyeSlash } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -37,8 +36,6 @@ export default defineComponent({ data() { return { hide: true, - faExclamationTriangle, - faEyeSlash }; }, created() { diff --git a/src/client/components/modal-page-window.vue b/src/client/components/modal-page-window.vue index 474a67f985..a391a8de35 100644 --- a/src/client/components/modal-page-window.vue +++ b/src/client/components/modal-page-window.vue @@ -2,12 +2,12 @@ <MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')"> <div class="hrmcaedk _popup _narrow_" :style="{ width: `${width}px`, height: (height ? `min(${height}px, 100%)` : '100%') }"> <div class="header"> - <button class="_button" @click="back()" v-if="history.length > 0"><Fa :icon="faChevronLeft"/></button> + <button class="_button" @click="back()" v-if="history.length > 0"><i class="fas fa-chevron-left"></i></button> <button class="_button" style="pointer-events: none;" v-else><!-- マージンのバランスを取るためのダミー --></button> <span class="title"> <XHeader :info="pageInfo" :with-back="false"/> </span> - <button class="_button" @click="$refs.modal.close()"><Fa :icon="faTimes"/></button> + <button class="_button" @click="$refs.modal.close()"><i class="fas fa-times"></i></button> </div> <div class="body _flat_"> <keep-alive> @@ -20,7 +20,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faExternalLinkAlt, faExpandAlt, faLink, faChevronLeft, faColumns, faTimes } from '@fortawesome/free-solid-svg-icons'; import MkModal from '@client/components/ui/modal.vue'; import XHeader from '@client/ui/_common_/header.vue'; import { popout } from '@client/scripts/popout'; @@ -76,7 +75,6 @@ export default defineComponent({ component: this.initialComponent, props: this.initialProps, history: [], - faChevronLeft, faTimes, }; }, @@ -90,29 +88,29 @@ export default defineComponent({ type: 'label', text: this.path, }, { - icon: faExpandAlt, + icon: 'fas fa-expand-alt', text: this.$ts.showInPage, action: this.expand }, this.sideViewHook ? { - icon: faColumns, + icon: 'fas fa-columns', text: this.$ts.openInSideView, action: () => { this.sideViewHook(this.path); this.$refs.window.close(); } } : undefined, { - icon: faExternalLinkAlt, + icon: 'fas fa-external-link-alt', text: this.$ts.popout, action: this.popout }, null, { - icon: faExternalLinkAlt, + icon: 'fas fa-external-link-alt', text: this.$ts.openInNewTab, action: () => { window.open(this.url, '_blank'); this.$refs.window.close(); } }, { - icon: faLink, + icon: 'fas fa-link', text: this.$ts.copyLink, action: () => { copyToClipboard(this.url); diff --git a/src/client/components/note-detailed.vue b/src/client/components/note-detailed.vue index 50e76e5299..6040ad378f 100644 --- a/src/client/components/note-detailed.vue +++ b/src/client/components/note-detailed.vue @@ -12,7 +12,7 @@ <XSub :note="appearNote.reply" class="reply-to" v-if="appearNote.reply"/> <div class="renote" v-if="isRenote"> <MkAvatar class="avatar" :user="note.user"/> - <Fa :icon="faRetweet"/> + <i class="fas fa-retweet"></i> <I18n :src="$ts.renotedBy" tag="span"> <template #user> <MkA class="name" :to="userPage(note.user)" v-user-preview="note.userId"> @@ -22,15 +22,15 @@ </I18n> <div class="info"> <button class="_button time" @click="showRenoteMenu()" ref="renoteTime"> - <Fa class="dropdownIcon" v-if="isMyRenote" :icon="faEllipsisH"/> + <i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> <MkTime :time="note.createdAt"/> </button> <span class="visibility" v-if="note.visibility !== 'public'"> - <Fa v-if="note.visibility === 'home'" :icon="faHome"/> - <Fa v-if="note.visibility === 'followers'" :icon="faUnlock"/> - <Fa v-if="note.visibility === 'specified'" :icon="faEnvelope"/> + <i v-if="note.visibility === 'home'" class="fas fa-home"></i> + <i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></i> + <i v-else-if="note.visibility === 'specified'" class="fas fa-envelope"></i> </span> - <span class="localOnly" v-if="note.localOnly"><Fa :icon="faBiohazard"/></span> + <span class="localOnly" v-if="note.localOnly"><i class="fas fa-biohazard"></i></span> </div> </div> <article class="article" @contextmenu.stop="onContextmenu"> @@ -42,14 +42,14 @@ <MkUserName :user="appearNote.user"/> </MkA> <span class="is-bot" v-if="appearNote.user.isBot">bot</span> - <span class="admin" v-if="appearNote.user.isAdmin"><Fa :icon="faBookmark"/></span> - <span class="moderator" v-if="!appearNote.user.isAdmin && appearNote.user.isModerator"><Fa :icon="farBookmark"/></span> + <span class="admin" v-if="appearNote.user.isAdmin"><i class="fas fa-bookmark"></i></span> + <span class="moderator" v-if="!appearNote.user.isAdmin && appearNote.user.isModerator"><i class="far fa-bookmark"></i></span> <span class="visibility" v-if="appearNote.visibility !== 'public'"> - <Fa v-if="appearNote.visibility === 'home'" :icon="faHome"/> - <Fa v-if="appearNote.visibility === 'followers'" :icon="faUnlock"/> - <Fa v-if="appearNote.visibility === 'specified'" :icon="faEnvelope"/> + <i v-if="appearNote.visibility === 'home'" class="fas fa-home"></i> + <i v-else-if="appearNote.visibility === 'followers'" class="fas fa-unlock"></i> + <i v-else-if="appearNote.visibility === 'specified'" class="fas fa-envelope"></i> </span> - <span class="localOnly" v-if="appearNote.localOnly"><Fa :icon="faBiohazard"/></span> + <span class="localOnly" v-if="appearNote.localOnly"><i class="fas fa-biohazard"></i></span> </div> <div class="username"><MkAcct :user="appearNote.user"/></div> <MkInstanceTicker v-if="showTicker" class="ticker" :instance="appearNote.user.instance"/> @@ -64,7 +64,7 @@ <div class="content" v-show="appearNote.cw == null || showContent"> <div class="text"> <span v-if="appearNote.isHidden" style="opacity: 0.5">({{ $ts.private }})</span> - <MkA class="reply" v-if="appearNote.replyId" :to="`/notes/${appearNote.replyId}`"><Fa :icon="faReply"/></MkA> + <MkA class="reply" v-if="appearNote.replyId" :to="`/notes/${appearNote.replyId}`"><i class="fas fa-reply"></i></MkA> <Mfm v-if="appearNote.text" :text="appearNote.text" :author="appearNote.user" :i="$i" :custom-emojis="appearNote.emojis"/> <a class="rp" v-if="appearNote.renote != null">RN:</a> </div> @@ -75,33 +75,33 @@ <MkUrlPreview v-for="url in urls" :url="url" :key="url" :compact="true" :detail="true" class="url-preview"/> <div class="renote" v-if="appearNote.renote"><XNotePreview :note="appearNote.renote"/></div> </div> - <MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><Fa :icon="faSatelliteDish"/> {{ appearNote.channel.name }}</MkA> + <MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="fas fa-satellite-dish"></i> {{ appearNote.channel.name }}</MkA> </div> <footer class="footer"> <div class="info"> - <span class="mobile" v-if="note.viaMobile"><Fa :icon="faMobileAlt"/></span> + <span class="mobile" v-if="note.viaMobile"><i class="fas fa-mobile-alt"></i></span> <MkTime class="created-at" :time="note.createdAt" mode="detail"/> </div> <XReactionsViewer :note="appearNote" ref="reactionsViewer"/> <button @click="reply()" class="button _button"> - <template v-if="appearNote.reply"><Fa :icon="faReplyAll"/></template> - <template v-else><Fa :icon="faReply"/></template> + <template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template> + <template v-else><i class="fas fa-reply"></i></template> <p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p> </button> <button v-if="canRenote" @click="renote()" class="button _button" ref="renoteButton"> - <Fa :icon="faRetweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p> + <i class="fas fa-retweet"></i><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p> </button> <button v-else class="button _button"> - <Fa :icon="faBan"/> + <i class="fas fa-ban"></i> </button> <button v-if="appearNote.myReaction == null" class="button _button" @click="react()" ref="reactButton"> - <Fa :icon="faPlus"/> + <i class="fas fa-plus"></i> </button> <button v-if="appearNote.myReaction != null" class="button _button reacted" @click="undoReact(appearNote)" ref="reactButton"> - <Fa :icon="faMinus"/> + <i class="fas fa-minus"></i> </button> <button class="button _button" @click="menu()" ref="menuButton"> - <Fa :icon="faEllipsisH"/> + <i class="fas fa-ellipsis-h"></i> </button> </footer> </div> @@ -121,8 +121,6 @@ <script lang="ts"> import { defineAsyncComponent, defineComponent, markRaw } from 'vue'; -import { faSatelliteDish, faBolt, faTimes, faBullhorn, faStar, faLink, faExternalLinkSquareAlt, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faQuoteRight, faInfoCircle, faBiohazard, faPlug, faExclamationCircle, faPaperclip, faShareAlt } from '@fortawesome/free-solid-svg-icons'; -import { faCopy, faTrashAlt, faEdit, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons'; import * as mfm from 'mfm-js'; import { sum } from '../../prelude/array'; import XSub from './note.sub.vue'; @@ -143,14 +141,6 @@ import { noteActions, noteViewInterruptors } from '@client/store'; import { reactionPicker } from '@client/scripts/reaction-picker'; import { extractUrlFromMfm } from '@/misc/extract-url-from-mfm'; -function markRawAll(...xs) { - for (const x of xs) { - markRaw(x); - } -} - -markRawAll(faEdit, faBolt, faTimes, faBullhorn, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faBiohazard, faPlug, faSatelliteDish); - // TODO: note.vueとほぼ同じなので共通化したい export default defineComponent({ components: { @@ -188,7 +178,6 @@ export default defineComponent({ showContent: false, isDeleted: false, muted: false, - faEdit, faBolt, faTimes, faBullhorn, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faBiohazard, faPlug, faSatelliteDish }; }, @@ -467,7 +456,7 @@ export default defineComponent({ this.blur(); os.modalMenu([{ text: this.$ts.renote, - icon: faRetweet, + icon: 'fas fa-retweet', action: () => { os.api('notes/create', { renoteId: this.appearNote.id @@ -475,7 +464,7 @@ export default defineComponent({ } }, { text: this.$ts.quote, - icon: faQuoteRight, + icon: 'fas fa-quote-right', action: () => { os.post({ renote: this.appearNote, @@ -611,62 +600,62 @@ export default defineComponent({ }); menu = [{ - icon: faCopy, + icon: 'fas fa-copy', text: this.$ts.copyContent, action: this.copyContent }, { - icon: faLink, + icon: 'fas fa-link', text: this.$ts.copyLink, action: this.copyLink }, (this.appearNote.url || this.appearNote.uri) ? { - icon: faExternalLinkSquareAlt, + icon: 'fas fa-external-link-square-alt', text: this.$ts.showOnRemote, action: () => { window.open(this.appearNote.url || this.appearNote.uri, '_blank'); } } : undefined, { - icon: faShareAlt, + icon: 'fas fa-share-alt', text: this.$ts.share, action: this.share }, null, statePromise.then(state => state.isFavorited ? { - icon: faStar, + icon: 'fas fa-star', text: this.$ts.unfavorite, action: () => this.toggleFavorite(false) } : { - icon: faStar, + icon: 'fas fa-star', text: this.$ts.favorite, action: () => this.toggleFavorite(true) }), { - icon: faPaperclip, + icon: 'fas fa-paperclip', text: this.$ts.clip, action: () => this.clip() }, (this.appearNote.userId != this.$i.id) ? statePromise.then(state => state.isWatching ? { - icon: faEyeSlash, + icon: 'fas fa-eye-slash', text: this.$ts.unwatch, action: () => this.toggleWatch(false) } : { - icon: faEye, + icon: 'fas fa-eye', text: this.$ts.watch, action: () => this.toggleWatch(true) }) : undefined, this.appearNote.userId == this.$i.id ? (this.$i.pinnedNoteIds || []).includes(this.appearNote.id) ? { - icon: faThumbtack, + icon: 'fas fa-thumbtack', text: this.$ts.unpin, action: () => this.togglePin(false) } : { - icon: faThumbtack, + icon: 'fas fa-thumbtack', text: this.$ts.pin, action: () => this.togglePin(true) } : undefined, ...(this.$i.isModerator || this.$i.isAdmin ? [ null, { - icon: faBullhorn, + icon: 'fas fa-bullhorn', text: this.$ts.promote, action: this.promote }] @@ -675,7 +664,7 @@ export default defineComponent({ ...(this.appearNote.userId != this.$i.id ? [ null, { - icon: faExclamationCircle, + icon: 'fas fa-exclamation-circle', text: this.$ts.reportAbuse, action: () => { const u = `${url}/notes/${this.appearNote.id}`; @@ -690,12 +679,12 @@ export default defineComponent({ ...(this.appearNote.userId == this.$i.id || this.$i.isModerator || this.$i.isAdmin ? [ null, this.appearNote.userId == this.$i.id ? { - icon: faEdit, + icon: 'fas fa-edit', text: this.$ts.deleteAndEdit, action: this.delEdit } : undefined, { - icon: faTrashAlt, + icon: 'fas fa-trash-alt', text: this.$ts.delete, danger: true, action: this.del @@ -705,15 +694,15 @@ export default defineComponent({ .filter(x => x !== undefined); } else { menu = [{ - icon: faCopy, + icon: 'fas fa-copy', text: this.$ts.copyContent, action: this.copyContent }, { - icon: faLink, + icon: 'fas fa-link', text: this.$ts.copyLink, action: this.copyLink }, (this.appearNote.url || this.appearNote.uri) ? { - icon: faExternalLinkSquareAlt, + icon: 'fas fa-external-link-square-alt', text: this.$ts.showOnRemote, action: () => { window.open(this.appearNote.url || this.appearNote.uri, '_blank'); @@ -724,7 +713,7 @@ export default defineComponent({ if (noteActions.length > 0) { menu = menu.concat([null, ...noteActions.map(action => ({ - icon: faPlug, + icon: 'fas fa-plug', text: action.title, action: () => { action.handler(this.appearNote); @@ -763,7 +752,7 @@ export default defineComponent({ if (!this.isMyRenote) return; os.modalMenu([{ text: this.$ts.unrenote, - icon: faTrashAlt, + icon: 'fas fa-trash-alt', danger: true, action: () => { os.api('notes/delete', { @@ -806,7 +795,7 @@ export default defineComponent({ async clip() { const clips = await os.api('clips/list'); os.modalMenu([{ - icon: faPlus, + icon: 'fas fa-plus', text: this.$ts.createNew, action: async () => { const { canceled, result } = await os.form(this.$ts.createNewClip, { @@ -943,7 +932,7 @@ export default defineComponent({ border-radius: 6px; } - > [data-icon] { + > i { margin-right: 4px; } diff --git a/src/client/components/note-header.vue b/src/client/components/note-header.vue index ab40c5fd4a..1cd6463f9b 100644 --- a/src/client/components/note-header.vue +++ b/src/client/components/note-header.vue @@ -5,27 +5,25 @@ </MkA> <span class="is-bot" v-if="note.user.isBot">bot</span> <span class="username"><MkAcct :user="note.user"/></span> - <span class="admin" v-if="note.user.isAdmin"><Fa :icon="faBookmark"/></span> - <span class="moderator" v-if="!note.user.isAdmin && note.user.isModerator"><Fa :icon="farBookmark"/></span> + <span class="admin" v-if="note.user.isAdmin"><i class="fas fa-bookmark"></i></span> + <span class="moderator" v-if="!note.user.isAdmin && note.user.isModerator"><i class="far fa-bookmark"></i></span> <div class="info"> - <span class="mobile" v-if="note.viaMobile"><Fa :icon="faMobileAlt"/></span> + <span class="mobile" v-if="note.viaMobile"><i class="fas fa-mobile-alt"></i></span> <MkA class="created-at" :to="notePage(note)"> <MkTime :time="note.createdAt"/> </MkA> <span class="visibility" v-if="note.visibility !== 'public'"> - <Fa v-if="note.visibility === 'home'" :icon="faHome"/> - <Fa v-if="note.visibility === 'followers'" :icon="faUnlock"/> - <Fa v-if="note.visibility === 'specified'" :icon="faEnvelope"/> + <i v-if="note.visibility === 'home'" class="fas fa-home"></i> + <i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></i> + <i v-else-if="note.visibility === 'specified'" class="fas fa-envelope"></i> </span> - <span class="localOnly" v-if="note.localOnly"><Fa :icon="faBiohazard"/></span> + <span class="localOnly" v-if="note.localOnly"><i class="fas fa-biohazard"></i></span> </div> </header> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faHome, faUnlock, faEnvelope, faMobileAlt, faBookmark, faBiohazard } from '@fortawesome/free-solid-svg-icons'; -import { faBookmark as farBookmark } from '@fortawesome/free-regular-svg-icons'; import notePage from '../filters/note'; import { userPage } from '../filters/user'; import * as os from '@client/os'; @@ -40,7 +38,6 @@ export default defineComponent({ data() { return { - faHome, faUnlock, faEnvelope, faMobileAlt, faBookmark, farBookmark, faBiohazard }; }, diff --git a/src/client/components/note.vue b/src/client/components/note.vue index 0e153033ca..504d07c0eb 100644 --- a/src/client/components/note.vue +++ b/src/client/components/note.vue @@ -9,12 +9,12 @@ v-size="{ max: [500, 450, 350, 300] }" > <XSub :note="appearNote.reply" class="reply-to" v-if="appearNote.reply"/> - <div class="info" v-if="pinned"><Fa :icon="faThumbtack"/> {{ $ts.pinnedNote }}</div> - <div class="info" v-if="appearNote._prId_"><Fa :icon="faBullhorn"/> {{ $ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ $ts.hideThisNote }} <Fa :icon="faTimes"/></button></div> - <div class="info" v-if="appearNote._featuredId_"><Fa :icon="faBolt"/> {{ $ts.featured }}</div> + <div class="info" v-if="pinned"><i class="fas fa-thumbtack"></i> {{ $ts.pinnedNote }}</div> + <div class="info" v-if="appearNote._prId_"><i class="fas fa-bullhorn"></i> {{ $ts.promotion }}<button class="_textButton hide" @click="readPromo()">{{ $ts.hideThisNote }} <i class="fas fa-times"></i></button></div> + <div class="info" v-if="appearNote._featuredId_"><i class="fas fa-bolt"></i> {{ $ts.featured }}</div> <div class="renote" v-if="isRenote"> <MkAvatar class="avatar" :user="note.user"/> - <Fa :icon="faRetweet"/> + <i class="fas fa-retweet"></i> <I18n :src="$ts.renotedBy" tag="span"> <template #user> <MkA class="name" :to="userPage(note.user)" v-user-preview="note.userId"> @@ -24,15 +24,15 @@ </I18n> <div class="info"> <button class="_button time" @click="showRenoteMenu()" ref="renoteTime"> - <Fa class="dropdownIcon" v-if="isMyRenote" :icon="faEllipsisH"/> + <i v-if="isMyRenote" class="fas fa-ellipsis-h dropdownIcon"></i> <MkTime :time="note.createdAt"/> </button> <span class="visibility" v-if="note.visibility !== 'public'"> - <Fa v-if="note.visibility === 'home'" :icon="faHome"/> - <Fa v-if="note.visibility === 'followers'" :icon="faUnlock"/> - <Fa v-if="note.visibility === 'specified'" :icon="faEnvelope"/> + <i v-if="note.visibility === 'home'" class="fas fa-home"></i> + <i v-else-if="note.visibility === 'followers'" class="fas fa-unlock"></i> + <i v-else-if="note.visibility === 'specified'" class="fas fa-envelope"></i> </span> - <span class="localOnly" v-if="note.localOnly"><Fa :icon="faBiohazard"/></span> + <span class="localOnly" v-if="note.localOnly"><i class="fas fa-biohazard"></i></span> </div> </div> <article class="article" @contextmenu.stop="onContextmenu"> @@ -48,7 +48,7 @@ <div class="content" :class="{ collapsed }" v-show="appearNote.cw == null || showContent"> <div class="text"> <span v-if="appearNote.isHidden" style="opacity: 0.5">({{ $ts.private }})</span> - <MkA class="reply" v-if="appearNote.replyId" :to="`/notes/${appearNote.replyId}`"><Fa :icon="faReply"/></MkA> + <MkA class="reply" v-if="appearNote.replyId" :to="`/notes/${appearNote.replyId}`"><i class="fas fa-reply"></i></MkA> <Mfm v-if="appearNote.text" :text="appearNote.text" :author="appearNote.user" :i="$i" :custom-emojis="appearNote.emojis"/> <a class="rp" v-if="appearNote.renote != null">RN:</a> </div> @@ -62,29 +62,29 @@ <span>{{ $ts.showMore }}</span> </button> </div> - <MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><Fa :icon="faSatelliteDish"/> {{ appearNote.channel.name }}</MkA> + <MkA v-if="appearNote.channel && !inChannel" class="channel" :to="`/channels/${appearNote.channel.id}`"><i class="fas fa-satellite-dish"></i> {{ appearNote.channel.name }}</MkA> </div> <footer class="footer"> <XReactionsViewer :note="appearNote" ref="reactionsViewer"/> <button @click="reply()" class="button _button"> - <template v-if="appearNote.reply"><Fa :icon="faReplyAll"/></template> - <template v-else><Fa :icon="faReply"/></template> + <template v-if="appearNote.reply"><i class="fas fa-reply-all"></i></template> + <template v-else><i class="fas fa-reply"></i></template> <p class="count" v-if="appearNote.repliesCount > 0">{{ appearNote.repliesCount }}</p> </button> <button v-if="canRenote" @click="renote()" class="button _button" ref="renoteButton"> - <Fa :icon="faRetweet"/><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p> + <i class="fas fa-retweet"></i><p class="count" v-if="appearNote.renoteCount > 0">{{ appearNote.renoteCount }}</p> </button> <button v-else class="button _button"> - <Fa :icon="faBan"/> + <i class="fas fa-ban"></i> </button> <button v-if="appearNote.myReaction == null" class="button _button" @click="react()" ref="reactButton"> - <Fa :icon="faPlus"/> + <i class="fas fa-plus"></i> </button> <button v-if="appearNote.myReaction != null" class="button _button reacted" @click="undoReact(appearNote)" ref="reactButton"> - <Fa :icon="faMinus"/> + <i class="fas fa-minus"></i> </button> <button class="button _button" @click="menu()" ref="menuButton"> - <Fa :icon="faEllipsisH"/> + <i class="fas fa-ellipsis-h"></i> </button> </footer> </div> @@ -103,8 +103,6 @@ <script lang="ts"> import { defineAsyncComponent, defineComponent, markRaw } from 'vue'; -import { faSatelliteDish, faBolt, faTimes, faBullhorn, faStar, faLink, faExternalLinkSquareAlt, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faQuoteRight, faInfoCircle, faBiohazard, faPlug, faExclamationCircle, faPaperclip, faShareAlt } from '@fortawesome/free-solid-svg-icons'; -import { faCopy, faTrashAlt, faEdit, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons'; import * as mfm from 'mfm-js'; import { sum } from '../../prelude/array'; import XSub from './note.sub.vue'; @@ -125,14 +123,6 @@ import { noteActions, noteViewInterruptors } from '@client/store'; import { reactionPicker } from '@client/scripts/reaction-picker'; import { extractUrlFromMfm } from '@/misc/extract-url-from-mfm'; -function markRawAll(...xs) { - for (const x of xs) { - markRaw(x); - } -} - -markRawAll(faEdit, faBolt, faTimes, faBullhorn, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faBiohazard, faPlug, faSatelliteDish); - export default defineComponent({ components: { XSub, @@ -174,7 +164,6 @@ export default defineComponent({ collapsed: false, isDeleted: false, muted: false, - faEdit, faBolt, faTimes, faBullhorn, faPlus, faMinus, faRetweet, faReply, faReplyAll, faEllipsisH, faHome, faUnlock, faEnvelope, faThumbtack, faBan, faBiohazard, faPlug, faSatelliteDish }; }, @@ -442,7 +431,7 @@ export default defineComponent({ this.blur(); os.modalMenu([{ text: this.$ts.renote, - icon: faRetweet, + icon: 'fas fa-retweet', action: () => { os.api('notes/create', { renoteId: this.appearNote.id @@ -450,7 +439,7 @@ export default defineComponent({ } }, { text: this.$ts.quote, - icon: faQuoteRight, + icon: 'fas fa-quote-right', action: () => { os.post({ renote: this.appearNote, @@ -586,62 +575,62 @@ export default defineComponent({ }); menu = [{ - icon: faCopy, + icon: 'fas fa-copy', text: this.$ts.copyContent, action: this.copyContent }, { - icon: faLink, + icon: 'fas fa-link', text: this.$ts.copyLink, action: this.copyLink }, (this.appearNote.url || this.appearNote.uri) ? { - icon: faExternalLinkSquareAlt, + icon: 'fas fa-external-link-square-alt', text: this.$ts.showOnRemote, action: () => { window.open(this.appearNote.url || this.appearNote.uri, '_blank'); } } : undefined, { - icon: faShareAlt, + icon: 'fas fa-share-alt', text: this.$ts.share, action: this.share }, null, statePromise.then(state => state.isFavorited ? { - icon: faStar, + icon: 'fas fa-star', text: this.$ts.unfavorite, action: () => this.toggleFavorite(false) } : { - icon: faStar, + icon: 'fas fa-star', text: this.$ts.favorite, action: () => this.toggleFavorite(true) }), { - icon: faPaperclip, + icon: 'fas fa-paperclip', text: this.$ts.clip, action: () => this.clip() }, (this.appearNote.userId != this.$i.id) ? statePromise.then(state => state.isWatching ? { - icon: faEyeSlash, + icon: 'fas fa-eye-slash', text: this.$ts.unwatch, action: () => this.toggleWatch(false) } : { - icon: faEye, + icon: 'fas fa-eye', text: this.$ts.watch, action: () => this.toggleWatch(true) }) : undefined, this.appearNote.userId == this.$i.id ? (this.$i.pinnedNoteIds || []).includes(this.appearNote.id) ? { - icon: faThumbtack, + icon: 'fas fa-thumbtack', text: this.$ts.unpin, action: () => this.togglePin(false) } : { - icon: faThumbtack, + icon: 'fas fa-thumbtack', text: this.$ts.pin, action: () => this.togglePin(true) } : undefined, ...(this.$i.isModerator || this.$i.isAdmin ? [ null, { - icon: faBullhorn, + icon: 'fas fa-bullhorn', text: this.$ts.promote, action: this.promote }] @@ -650,7 +639,7 @@ export default defineComponent({ ...(this.appearNote.userId != this.$i.id ? [ null, { - icon: faExclamationCircle, + icon: 'fas fa-exclamation-circle', text: this.$ts.reportAbuse, action: () => { const u = `${url}/notes/${this.appearNote.id}`; @@ -665,12 +654,12 @@ export default defineComponent({ ...(this.appearNote.userId == this.$i.id || this.$i.isModerator || this.$i.isAdmin ? [ null, this.appearNote.userId == this.$i.id ? { - icon: faEdit, + icon: 'fas fa-edit', text: this.$ts.deleteAndEdit, action: this.delEdit } : undefined, { - icon: faTrashAlt, + icon: 'fas fa-trash-alt', text: this.$ts.delete, danger: true, action: this.del @@ -680,15 +669,15 @@ export default defineComponent({ .filter(x => x !== undefined); } else { menu = [{ - icon: faCopy, + icon: 'fas fa-copy', text: this.$ts.copyContent, action: this.copyContent }, { - icon: faLink, + icon: 'fas fa-link', text: this.$ts.copyLink, action: this.copyLink }, (this.appearNote.url || this.appearNote.uri) ? { - icon: faExternalLinkSquareAlt, + icon: 'fas fa-external-link-square-alt', text: this.$ts.showOnRemote, action: () => { window.open(this.appearNote.url || this.appearNote.uri, '_blank'); @@ -699,7 +688,7 @@ export default defineComponent({ if (noteActions.length > 0) { menu = menu.concat([null, ...noteActions.map(action => ({ - icon: faPlug, + icon: 'fas fa-plug', text: action.title, action: () => { action.handler(this.appearNote); @@ -738,7 +727,7 @@ export default defineComponent({ if (!this.isMyRenote) return; os.modalMenu([{ text: this.$ts.unrenote, - icon: faTrashAlt, + icon: 'fas fa-trash-alt', danger: true, action: () => { os.api('notes/delete', { @@ -781,7 +770,7 @@ export default defineComponent({ async clip() { const clips = await os.api('clips/list'); os.modalMenu([{ - icon: faPlus, + icon: 'fas fa-plus', text: this.$ts.createNew, action: async () => { const { canceled, result } = await os.form(this.$ts.createNewClip, { @@ -909,7 +898,7 @@ export default defineComponent({ white-space: pre; color: #d28a3f; - > [data-icon] { + > i { margin-right: 4px; } @@ -945,7 +934,7 @@ export default defineComponent({ border-radius: 6px; } - > [data-icon] { + > i { margin-right: 4px; } diff --git a/src/client/components/notification.vue b/src/client/components/notification.vue index 2b8b440ced..9badd7a708 100644 --- a/src/client/components/notification.vue +++ b/src/client/components/notification.vue @@ -4,15 +4,15 @@ <MkAvatar v-if="notification.user" class="icon" :user="notification.user"/> <img v-else-if="notification.icon" class="icon" :src="notification.icon" alt=""/> <div class="sub-icon" :class="notification.type"> - <Fa :icon="faPlus" v-if="notification.type === 'follow'"/> - <Fa :icon="faClock" v-else-if="notification.type === 'receiveFollowRequest'"/> - <Fa :icon="faCheck" v-else-if="notification.type === 'followRequestAccepted'"/> - <Fa :icon="faIdCardAlt" v-else-if="notification.type === 'groupInvited'"/> - <Fa :icon="faRetweet" v-else-if="notification.type === 'renote'"/> - <Fa :icon="faReply" v-else-if="notification.type === 'reply'"/> - <Fa :icon="faAt" v-else-if="notification.type === 'mention'"/> - <Fa :icon="faQuoteLeft" v-else-if="notification.type === 'quote'"/> - <Fa :icon="faPollH" v-else-if="notification.type === 'pollVote'"/> + <i v-if="notification.type === 'follow'" class="fas fa-plus"></i> + <i v-else-if="notification.type === 'receiveFollowRequest'" class="fas fa-clock"></i> + <i v-else-if="notification.type === 'followRequestAccepted'" class="fas fa-check"></i> + <i v-else-if="notification.type === 'groupInvited'" class="fas fa-id-card-alt"></i> + <i v-else-if="notification.type === 'renote'" class="fas fa-retweet"></i> + <i v-else-if="notification.type === 'reply'" class="fas fa-reply"></i> + <i v-else-if="notification.type === 'mention'" class="fas fa-at"></i> + <i v-else-if="notification.type === 'quote'" class="fas fa-quote-left"></i> + <i v-else-if="notification.type === 'pollVote'" class="fas fa-poll-h"></i> <XReactionIcon v-else-if="notification.type === 'reaction'" :reaction="notification.reaction" :custom-emojis="notification.note.emojis" :no-style="true"/> </div> </div> @@ -23,14 +23,14 @@ <MkTime :time="notification.createdAt" v-if="withTime" class="time"/> </header> <MkA v-if="notification.type === 'reaction'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> - <Fa :icon="faQuoteLeft"/> + <i class="fas fa-quote-left"></i> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> - <Fa :icon="faQuoteRight"/> + <i class="fas fa-quote-right"></i> </MkA> <MkA v-if="notification.type === 'renote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note.renote)"> - <Fa :icon="faQuoteLeft"/> + <i class="fas fa-quote-left"></i> <Mfm :text="getNoteSummary(notification.note.renote)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.renote.emojis"/> - <Fa :icon="faQuoteRight"/> + <i class="fas fa-quote-right"></i> </MkA> <MkA v-if="notification.type === 'reply'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> @@ -42,9 +42,9 @@ <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> </MkA> <MkA v-if="notification.type === 'pollVote'" class="text" :to="notePage(notification.note)" :title="getNoteSummary(notification.note)"> - <Fa :icon="faQuoteLeft"/> + <i class="fas fa-quote-left"></i> <Mfm :text="getNoteSummary(notification.note)" :plain="true" :nowrap="!full" :custom-emojis="notification.note.emojis"/> - <Fa :icon="faQuoteRight"/> + <i class="fas fa-quote-right"></i> </MkA> <span v-if="notification.type === 'follow'" class="text" style="opacity: 0.6;">{{ $ts.youGotNewFollower }}<div v-if="full"><MkFollowButton :user="notification.user" :full="true"/></div></span> <span v-if="notification.type === 'followRequestAccepted'" class="text" style="opacity: 0.6;">{{ $ts.followRequestAccepted }}</span> @@ -59,8 +59,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faIdCardAlt, faPlus, faQuoteLeft, faQuoteRight, faRetweet, faReply, faAt, faCheck, faPollH } from '@fortawesome/free-solid-svg-icons'; -import { faClock } from '@fortawesome/free-regular-svg-icons'; import { getNoteSummary } from '@/misc/get-note-summary'; import XReactionIcon from './reaction-icon.vue'; import MkFollowButton from './follow-button.vue'; @@ -96,7 +94,6 @@ export default defineComponent({ groupInviteDone: false, connection: null, readObserver: null, - faIdCardAlt, faPlus, faQuoteLeft, faQuoteRight, faRetweet, faReply, faAt, faClock, faCheck, faPollH }; }, @@ -271,17 +268,17 @@ export default defineComponent({ overflow: hidden; text-overflow: ellipsis; - > [data-icon] { + > i { vertical-align: super; font-size: 50%; opacity: 0.5; } - > [data-icon]:first-child { + > i:first-child { margin-right: 4px; } - > [data-icon]:last-child { + > i:last-child { margin-left: 4px; } } diff --git a/src/client/components/page-window.vue b/src/client/components/page-window.vue index 1afde25501..26499f7054 100644 --- a/src/client/components/page-window.vue +++ b/src/client/components/page-window.vue @@ -11,7 +11,7 @@ <XHeader :info="pageInfo" :with-back="false"/> </template> <template #buttons> - <button class="_button" @click="back()" v-if="history.length > 0"><Fa :icon="faChevronLeft"/></button> + <button class="_button" @click="back()" v-if="history.length > 0"><i class="fas fa-chevron-left"></i></button> <button class="_button" style="pointer-events: none;" v-else><!-- マージンのバランスを取るためのダミー --></button> </template> <div class="yrolvcoq _flat_"> @@ -22,7 +22,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faExternalLinkAlt, faExpandAlt, faLink, faChevronLeft, faColumns } from '@fortawesome/free-solid-svg-icons'; import XWindow from '@client/components/ui/window.vue'; import XHeader from '@client/ui/_common_/header.vue'; import { popout } from '@client/scripts/popout'; @@ -76,7 +75,6 @@ export default defineComponent({ component: this.initialComponent, props: this.initialProps, history: [], - faChevronLeft, }; }, @@ -90,29 +88,29 @@ export default defineComponent({ type: 'label', text: this.path, }, { - icon: faExpandAlt, + icon: 'fas fa-expand-alt', text: this.$ts.showInPage, action: this.expand }, this.sideViewHook ? { - icon: faColumns, + icon: 'fas fa-columns', text: this.$ts.openInSideView, action: () => { this.sideViewHook(this.path); this.$refs.window.close(); } } : undefined, { - icon: faExternalLinkAlt, + icon: 'fas fa-external-link-alt', text: this.$ts.popout, action: this.popout }, null, { - icon: faExternalLinkAlt, + icon: 'fas fa-external-link-alt', text: this.$ts.openInNewTab, action: () => { window.open(this.url, '_blank'); this.$refs.window.close(); } }, { - icon: faLink, + icon: 'fas fa-link', text: this.$ts.copyLink, action: () => { copyToClipboard(this.url); diff --git a/src/client/components/page/page.post.vue b/src/client/components/page/page.post.vue index 926d06ae80..1dfb506d5f 100644 --- a/src/client/components/page/page.post.vue +++ b/src/client/components/page/page.post.vue @@ -1,13 +1,15 @@ <template> <div class="ngbfujlo"> <MkTextarea :value="text" readonly style="margin: 0;"></MkTextarea> - <MkButton class="button" primary @click="post()" :disabled="posting || posted"><Fa v-if="posted" :icon="faCheck"/><Fa v-else :icon="faPaperPlane"/></MkButton> + <MkButton class="button" primary @click="post()" :disabled="posting || posted"> + <i v-if="posted" class="fas fa-check"></i> + <i v-else class="fas fa-paper-plane"></i> + </MkButton> </div> </template> <script lang="ts"> import { defineComponent, PropType } from 'vue'; -import { faCheck, faPaperPlane } from '@fortawesome/free-solid-svg-icons'; import MkTextarea from '../ui/textarea.vue'; import MkButton from '../ui/button.vue'; import { apiUrl } from '@client/config'; @@ -35,7 +37,6 @@ export default defineComponent({ text: this.hpml.interpolate(this.block.text), posted: false, posting: false, - faCheck, faPaperPlane }; }, watch: { diff --git a/src/client/components/poll-editor.vue b/src/client/components/poll-editor.vue index 3503d3df71..0ade2c3ba0 100644 --- a/src/client/components/poll-editor.vue +++ b/src/client/components/poll-editor.vue @@ -1,7 +1,7 @@ <template> <div class="zmdxowus"> <p class="caution" v-if="choices.length < 2"> - <Fa :icon="faExclamationTriangle"/>{{ $ts._poll.noOnlyOneChoice }} + <i class="fas fa-exclamation-triangle"></i>{{ $ts._poll.noOnlyOneChoice }} </p> <ul ref="choices"> <li v-for="(choice, i) in choices" :key="i"> @@ -9,7 +9,7 @@ <span>{{ $t('_poll.choiceN', { n: i + 1 }) }}</span> </MkInput> <button @click="remove(i)" class="_button"> - <Fa :icon="faTimes"/> + <i class="fas fa-times"></i> </button> </li> </ul> @@ -50,7 +50,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faExclamationTriangle, faTimes } from '@fortawesome/free-solid-svg-icons'; import { addTime } from '../../prelude/time'; import { formatDateTimeString } from '@/misc/format-time-string'; import MkInput from './ui/input.vue'; @@ -84,7 +83,6 @@ export default defineComponent({ atTime: '00:00', after: 0, unit: 'second', - faExclamationTriangle, faTimes }; }, @@ -190,7 +188,7 @@ export default defineComponent({ font-size: 0.8em; color: #f00; - > [data-icon] { + > i { margin-right: 4px; } } diff --git a/src/client/components/poll.vue b/src/client/components/poll.vue index 6cf6a8e918..463ddab721 100644 --- a/src/client/components/poll.vue +++ b/src/client/components/poll.vue @@ -4,7 +4,7 @@ <li v-for="(choice, i) in poll.choices" :key="i" @click="vote(i)" :class="{ voted: choice.voted }"> <div class="backdrop" :style="{ 'width': `${showResult ? (choice.votes / total * 100) : 0}%` }"></div> <span> - <template v-if="choice.isVoted"><Fa :icon="faCheck"/></template> + <template v-if="choice.isVoted"><i class="fas fa-check"></i></template> <Mfm :text="choice.text" :plain="true" :custom-emojis="note.emojis"/> <span class="votes" v-if="showResult">({{ $t('_poll.votesCount', { n: choice.votes }) }})</span> </span> @@ -23,7 +23,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faCheck } from '@fortawesome/free-solid-svg-icons'; import { sum } from '../../prelude/array'; import * as os from '@client/os'; @@ -38,7 +37,6 @@ export default defineComponent({ return { remaining: -1, showResult: false, - faCheck }; }, computed: { @@ -135,7 +133,7 @@ export default defineComponent({ > span { position: relative; - > [data-icon] { + > i { margin-right: 4px; } diff --git a/src/client/components/post-form-attaches.vue b/src/client/components/post-form-attaches.vue index f2eed30441..eba7e7af36 100644 --- a/src/client/components/post-form-attaches.vue +++ b/src/client/components/post-form-attaches.vue @@ -5,7 +5,7 @@ <div @click="showFileMenu(element, $event)" @contextmenu.prevent="showFileMenu(element, $event)"> <MkDriveFileThumbnail :data-id="element.id" class="thumbnail" :file="element" fit="cover"/> <div class="sensitive" v-if="element.isSensitive"> - <Fa class="icon" :icon="faExclamationTriangle"/> + <i class="fas fa-exclamation-triangle icon"></i> </div> </div> </template> @@ -16,8 +16,6 @@ <script lang="ts"> import { defineComponent, defineAsyncComponent } from 'vue'; -import { faTimesCircle, faEye, faEyeSlash } from '@fortawesome/free-regular-svg-icons'; -import { faExclamationTriangle, faICursor } from '@fortawesome/free-solid-svg-icons'; import MkDriveFileThumbnail from './drive-file-thumbnail.vue' import * as os from '@client/os'; @@ -44,7 +42,6 @@ export default defineComponent({ return { menu: null as Promise<null> | null, - faExclamationTriangle }; }, @@ -100,11 +97,11 @@ export default defineComponent({ action: () => { this.rename(file) } }, { text: file.isSensitive ? this.$ts.unmarkAsSensitive : this.$ts.markAsSensitive, - icon: file.isSensitive ? faEyeSlash : faEye, + icon: file.isSensitive ? 'fas fa-eye-slash' : 'fas fa-eye', action: () => { this.toggleSensitive(file) } }, { text: this.$ts.attachCancel, - icon: faTimesCircle, + icon: 'fas fa-times-circle', action: () => { this.detachMedia(file.id) } }], ev.currentTarget || ev.target).then(() => this.menu = null); } diff --git a/src/client/components/post-form.vue b/src/client/components/post-form.vue index 4c6a9ebc95..c5186577f3 100644 --- a/src/client/components/post-form.vue +++ b/src/client/components/post-form.vue @@ -7,31 +7,31 @@ @drop.stop="onDrop" > <header> - <button v-if="!fixed" class="cancel _button" @click="cancel"><Fa :icon="faTimes"/></button> + <button v-if="!fixed" class="cancel _button" @click="cancel"><i class="fas fa-times"></i></button> <div> <span class="text-count" :class="{ over: textLength > max }">{{ max - textLength }}</span> - <span class="local-only" v-if="localOnly"><Fa :icon="faBiohazard"/></span> + <span class="local-only" v-if="localOnly"><i class="fas fa-biohazard"></i></span> <button class="_button visibility" @click="setVisibility" ref="visibilityButton" v-tooltip="$ts.visibility" :disabled="channel != null"> - <span v-if="visibility === 'public'"><Fa :icon="faGlobe"/></span> - <span v-if="visibility === 'home'"><Fa :icon="faHome"/></span> - <span v-if="visibility === 'followers'"><Fa :icon="faUnlock"/></span> - <span v-if="visibility === 'specified'"><Fa :icon="faEnvelope"/></span> + <span v-if="visibility === 'public'"><i class="fas fa-globe"></i></span> + <span v-if="visibility === 'home'"><i class="fas fa-home"></i></span> + <span v-if="visibility === 'followers'"><i class="fas fa-unlock"></i></span> + <span v-if="visibility === 'specified'"><i class="fas fa-envelope"></i></span> </button> - <button class="submit _buttonPrimary" :disabled="!canPost" @click="post">{{ submitText }}<Fa :icon="reply ? faReply : renote ? faQuoteRight : faPaperPlane"/></button> + <button class="submit _buttonPrimary" :disabled="!canPost" @click="post">{{ submitText }}<i :class="reply ? 'fas fa-reply' : renote ? 'fas fa-quote-right' : 'fas fa-paper-plane'"></i></button> </div> </header> <div class="form" :class="{ fixed }"> <XNotePreview class="preview" v-if="reply" :note="reply"/> <XNotePreview class="preview" v-if="renote" :note="renote"/> - <div class="with-quote" v-if="quoteId"><Fa icon="quote-left"/> {{ $ts.quoteAttached }}<button @click="quoteId = null"><Fa icon="times"/></button></div> + <div class="with-quote" v-if="quoteId"><i class="fas fa-quote-left"></i> {{ $ts.quoteAttached }}<button @click="quoteId = null"><i class="fas fa-times"></i></button></div> <div v-if="visibility === 'specified'" class="to-specified"> <span style="margin-right: 8px;">{{ $ts.recipient }}</span> <div class="visibleUsers"> <span v-for="u in visibleUsers" :key="u.id"> <MkAcct :user="u"/> - <button class="_button" @click="removeVisibleUser(u)"><Fa :icon="faTimes"/></button> + <button class="_button" @click="removeVisibleUser(u)"><i class="fas fa-times"></i></button> </span> - <button @click="addVisibleUser" class="_buttonPrimary"><Fa :icon="faPlus" fixed-width/></button> + <button @click="addVisibleUser" class="_buttonPrimary"><i class="fas fa-plus fa-fw"></i></button> </div> </div> <MkInfo warn v-if="hasNotSpecifiedMentions" class="hasNotSpecifiedMentions">{{ $ts.notSpecifiedMentionWarning }} - <button class="_textButton" @click="addMissingMention()">{{ $ts.add }}</button></MkInfo> @@ -40,12 +40,12 @@ <XPostFormAttaches class="attaches" :files="files" @updated="updateFiles" @detach="detachFile" @changeSensitive="updateFileSensitive" @changeName="updateFileName"/> <XPollEditor v-if="poll" :poll="poll" @destroyed="poll = null" @updated="onPollUpdate"/> <footer> - <button class="_button" @click="chooseFileFrom" v-tooltip="$ts.attachFile"><Fa :icon="faPhotoVideo"/></button> - <button class="_button" @click="togglePoll" :class="{ active: poll }" v-tooltip="$ts.poll"><Fa :icon="faPollH"/></button> - <button class="_button" @click="useCw = !useCw" :class="{ active: useCw }" v-tooltip="$ts.useCw"><Fa :icon="faEyeSlash"/></button> - <button class="_button" @click="insertMention" v-tooltip="$ts.mention"><Fa :icon="faAt"/></button> - <button class="_button" @click="insertEmoji" v-tooltip="$ts.emoji"><Fa :icon="faLaughSquint"/></button> - <button class="_button" @click="showActions" v-tooltip="$ts.plugin" v-if="postFormActions.length > 0"><Fa :icon="faPlug"/></button> + <button class="_button" @click="chooseFileFrom" v-tooltip="$ts.attachFile"><i class="fas fa-photo-video"></i></button> + <button class="_button" @click="togglePoll" :class="{ active: poll }" v-tooltip="$ts.poll"><i class="fas fa-poll-h"></i></button> + <button class="_button" @click="useCw = !useCw" :class="{ active: useCw }" v-tooltip="$ts.useCw"><i class="fas fa-eye-slash"></i></button> + <button class="_button" @click="insertMention" v-tooltip="$ts.mention"><i class="fas fa-at"></i></button> + <button class="_button" @click="insertEmoji" v-tooltip="$ts.emoji"><i class="fas fa-laugh-squint"></i></button> + <button class="_button" @click="showActions" v-tooltip="$ts.plugin" v-if="postFormActions.length > 0"><i class="fas fa-plug"></i></button> </footer> </div> </div> @@ -53,8 +53,6 @@ <script lang="ts"> import { defineComponent, defineAsyncComponent } from 'vue'; -import { faReply, faQuoteRight, faPaperPlane, faTimes, faUpload, faPollH, faGlobe, faHome, faUnlock, faEnvelope, faPlus, faPhotoVideo, faAt, faBiohazard, faPlug } from '@fortawesome/free-solid-svg-icons'; -import { faEyeSlash, faLaughSquint } from '@fortawesome/free-regular-svg-icons'; import insertTextAtCursor from 'insert-text-at-cursor'; import { length } from 'stringz'; import { toASCII } from 'punycode/'; @@ -155,7 +153,6 @@ export default defineComponent({ } }), postFormActions, - faReply, faQuoteRight, faPaperPlane, faTimes, faUpload, faPollH, faGlobe, faHome, faUnlock, faEnvelope, faEyeSlash, faLaughSquint, faPlus, faPhotoVideo, faAt, faBiohazard, faPlug }; }, @@ -724,7 +721,7 @@ export default defineComponent({ opacity: 0.7; } - > [data-icon] { + > i { margin-left: 6px; } } diff --git a/src/client/components/remote-caution.vue b/src/client/components/remote-caution.vue index c9c5ceea4c..985ae44694 100644 --- a/src/client/components/remote-caution.vue +++ b/src/client/components/remote-caution.vue @@ -1,10 +1,9 @@ <template> -<div class="jmgmzlwq _block"><Fa :icon="faExclamationTriangle" style="margin-right: 8px;"/>{{ $ts.remoteUserCaution }}<a :href="href" rel="nofollow noopener" target="_blank">{{ $ts.showOnRemote }}</a></div> +<div class="jmgmzlwq _block"><i class="fas fa-exclamation-triangle" style="margin-right: 8px;"></i>{{ $ts.remoteUserCaution }}<a :href="href" rel="nofollow noopener" target="_blank">{{ $ts.showOnRemote }}</a></div> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -16,7 +15,6 @@ export default defineComponent({ }, data() { return { - faExclamationTriangle }; } }); diff --git a/src/client/components/signin.vue b/src/client/components/signin.vue index 1cd79bac1d..2c883e0c32 100755 --- a/src/client/components/signin.vue +++ b/src/client/components/signin.vue @@ -10,7 +10,7 @@ </MkInput> <MkInput v-model:value="password" type="password" :with-password-toggle="true" v-if="!user || user && !user.usePasswordLessLogin" required> <span>{{ $ts.password }}</span> - <template #prefix><Fa :icon="faLock"/></template> + <template #prefix><i class="fas fa-lock"></i></template> </MkInput> <MkButton type="submit" primary :disabled="signing" style="margin: 0 auto;">{{ signing ? $ts.loggingIn : $ts.login }}</MkButton> </div> @@ -28,20 +28,20 @@ <p style="margin-bottom:0;">{{ $ts.twoStepAuthentication }}</p> <MkInput v-model:value="password" type="password" :with-password-toggle="true" v-if="user && user.usePasswordLessLogin" required> <span>{{ $ts.password }}</span> - <template #prefix><Fa :icon="faLock"/></template> + <template #prefix><i class="fas fa-lock"></i></template> </MkInput> <MkInput v-model:value="token" type="text" pattern="^[0-9]{6}$" autocomplete="off" spellcheck="false" required> <span>{{ $ts.token }}</span> - <template #prefix><Fa :icon="faGavel"/></template> + <template #prefix><i class="fas fa-gavel"></i></template> </MkInput> <MkButton type="submit" :disabled="signing" primary style="margin: 0 auto;">{{ signing ? $ts.loggingIn : $ts.login }}</MkButton> </div> </div> </div> <div class="social _section"> - <a class="_borderButton _gap" v-if="meta && meta.enableTwitterIntegration" :href="`${apiUrl}/signin/twitter`"><Fa :icon="faTwitter" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Twitter' }) }}</a> - <a class="_borderButton _gap" v-if="meta && meta.enableGithubIntegration" :href="`${apiUrl}/signin/github`"><Fa :icon="faGithub" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'GitHub' }) }}</a> - <a class="_borderButton _gap" v-if="meta && meta.enableDiscordIntegration" :href="`${apiUrl}/signin/discord`"><Fa :icon="faDiscord" style="margin-right: 4px;"/>{{ $t('signinWith', { x: 'Discord' }) }}</a> + <a class="_borderButton _gap" v-if="meta && meta.enableTwitterIntegration" :href="`${apiUrl}/signin/twitter`"><i class="fab fa-twitter" style="margin-right: 4px;"></i>{{ $t('signinWith', { x: 'Twitter' }) }}</a> + <a class="_borderButton _gap" v-if="meta && meta.enableGithubIntegration" :href="`${apiUrl}/signin/github`"><i class="fab fa-github" style="margin-right: 4px;"></i>{{ $t('signinWith', { x: 'GitHub' }) }}</a> + <a class="_borderButton _gap" v-if="meta && meta.enableDiscordIntegration" :href="`${apiUrl}/signin/discord`"><i class="fab fa-discord" style="margin-right: 4px;"></i>{{ $t('signinWith', { x: 'Discord' }) }}</a> </div> </form> </template> @@ -49,8 +49,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; import { toUnicode } from 'punycode/'; -import { faLock, faGavel } from '@fortawesome/free-solid-svg-icons'; -import { faTwitter, faDiscord, faGithub } from '@fortawesome/free-brands-svg-icons'; import MkButton from './ui/button.vue'; import MkInput from './ui/input.vue'; import { apiUrl, host } from '@client/config'; @@ -92,7 +90,6 @@ export default defineComponent({ credential: null, challengeData: null, queryingKey: false, - faLock, faGavel, faTwitter, faDiscord, faGithub }; }, diff --git a/src/client/components/signup.vue b/src/client/components/signup.vue index 66d01213bc..7b40561adf 100644 --- a/src/client/components/signup.vue +++ b/src/client/components/signup.vue @@ -3,37 +3,37 @@ <template v-if="meta"> <MkInput v-if="meta.disableRegistration" v-model:value="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required> <span>{{ $ts.invitationCode }}</span> - <template #prefix><Fa :icon="faKey"/></template> + <template #prefix><i class="fas fa-key"></i></template> </MkInput> <MkInput v-model:value="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @update:value="onChangeUsername"> <span>{{ $ts.username }}</span> <template #prefix>@</template> <template #suffix>@{{ host }}</template> <template #desc> - <span v-if="usernameState == 'wait'" style="color:#999"><Fa :icon="faSpinner" pulse fixed-width/> {{ $ts.checking }}</span> - <span v-if="usernameState == 'ok'" style="color:#3CB7B5"><Fa :icon="faCheck" fixed-width/> {{ $ts.available }}</span> - <span v-if="usernameState == 'unavailable'" style="color:#FF1161"><Fa :icon="faExclamationTriangle" fixed-width/> {{ $ts.unavailable }}</span> - <span v-if="usernameState == 'error'" style="color:#FF1161"><Fa :icon="faExclamationTriangle" fixed-width/> {{ $ts.error }}</span> - <span v-if="usernameState == 'invalid-format'" style="color:#FF1161"><Fa :icon="faExclamationTriangle" fixed-width/> {{ $ts.usernameInvalidFormat }}</span> - <span v-if="usernameState == 'min-range'" style="color:#FF1161"><Fa :icon="faExclamationTriangle" fixed-width/> {{ $ts.tooShort }}</span> - <span v-if="usernameState == 'max-range'" style="color:#FF1161"><Fa :icon="faExclamationTriangle" fixed-width/> {{ $ts.tooLong }}</span> + <span v-if="usernameState == 'wait'" style="color:#999"><i class="fas fa-spinner fa-pulse fa-fw"></i> {{ $ts.checking }}</span> + <span v-if="usernameState == 'ok'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.available }}</span> + <span v-if="usernameState == 'unavailable'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.unavailable }}</span> + <span v-if="usernameState == 'error'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.error }}</span> + <span v-if="usernameState == 'invalid-format'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.usernameInvalidFormat }}</span> + <span v-if="usernameState == 'min-range'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooShort }}</span> + <span v-if="usernameState == 'max-range'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.tooLong }}</span> </template> </MkInput> <MkInput v-model:value="password" type="password" :autocomplete="Math.random()" required @update:value="onChangePassword"> <span>{{ $ts.password }}</span> - <template #prefix><Fa :icon="faLock"/></template> + <template #prefix><i class="fas fa-lock"></i></template> <template #desc> - <p v-if="passwordStrength == 'low'" style="color:#FF1161"><Fa :icon="faExclamationTriangle" fixed-width/> {{ $ts.weakPassword }}</p> - <p v-if="passwordStrength == 'medium'" style="color:#3CB7B5"><Fa :icon="faCheck" fixed-width/> {{ $ts.normalPassword }}</p> - <p v-if="passwordStrength == 'high'" style="color:#3CB7B5"><Fa :icon="faCheck" fixed-width/> {{ $ts.strongPassword }}</p> + <p v-if="passwordStrength == 'low'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.weakPassword }}</p> + <p v-if="passwordStrength == 'medium'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.normalPassword }}</p> + <p v-if="passwordStrength == 'high'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.strongPassword }}</p> </template> </MkInput> <MkInput v-model:value="retypedPassword" type="password" :autocomplete="Math.random()" required @update:value="onChangePasswordRetype"> <span>{{ $ts.password }} ({{ $ts.retype }})</span> - <template #prefix><Fa :icon="faLock"/></template> + <template #prefix><i class="fas fa-lock"></i></template> <template #desc> - <p v-if="passwordRetypeState == 'match'" style="color:#3CB7B5"><Fa :icon="faCheck" fixed-width/> {{ $ts.passwordMatched }}</p> - <p v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><Fa :icon="faExclamationTriangle" fixed-width/> {{ $ts.passwordNotMatched }}</p> + <p v-if="passwordRetypeState == 'match'" style="color:#3CB7B5"><i class="fas fa-check fa-fw"></i> {{ $ts.passwordMatched }}</p> + <p v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><i class="fas fa-exclamation-triangle fa-fw"></i> {{ $ts.passwordNotMatched }}</p> </template> </MkInput> <label v-if="meta.tosUrl" class="tou"> @@ -53,7 +53,6 @@ <script lang="ts"> import { defineComponent, defineAsyncComponent } from 'vue'; -import { faLock, faExclamationTriangle, faSpinner, faCheck, faKey } from '@fortawesome/free-solid-svg-icons'; const getPasswordStrength = require('syuilo-password-strength'); import { toUnicode } from 'punycode/'; import { host, url } from '@client/config'; @@ -96,7 +95,6 @@ export default defineComponent({ ToSAgreement: false, hCaptchaResponse: null, reCaptchaResponse: null, - faLock, faExclamationTriangle, faSpinner, faCheck, faKey } }, diff --git a/src/client/components/sub-note-content.vue b/src/client/components/sub-note-content.vue index 384bcb4563..ff89a9887b 100644 --- a/src/client/components/sub-note-content.vue +++ b/src/client/components/sub-note-content.vue @@ -3,7 +3,7 @@ <div class="body"> <span v-if="note.isHidden" style="opacity: 0.5">({{ $ts.private }})</span> <span v-if="note.deletedAt" style="opacity: 0.5">({{ $ts.deleted }})</span> - <MkA class="reply" v-if="note.replyId" :to="`/notes/${note.replyId}`"><Fa :icon="faReply"/></MkA> + <MkA class="reply" v-if="note.replyId" :to="`/notes/${note.replyId}`"><i class="fas fa-reply"></i></MkA> <Mfm v-if="note.text" :text="note.text" :author="note.user" :i="$i" :custom-emojis="note.emojis"/> <MkA class="rp" v-if="note.renoteId" :to="`/notes/${note.renoteId}`">RN: ...</MkA> </div> @@ -20,7 +20,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faReply } from '@fortawesome/free-solid-svg-icons'; import XPoll from './poll.vue'; import XMediaList from './media-list.vue'; import * as os from '@client/os'; @@ -38,7 +37,6 @@ export default defineComponent({ }, data() { return { - faReply }; } }); diff --git a/src/client/components/taskmanager.vue b/src/client/components/taskmanager.vue index 1339e2e352..cb8cb78748 100644 --- a/src/client/components/taskmanager.vue +++ b/src/client/components/taskmanager.vue @@ -1,7 +1,7 @@ <template> <XWindow ref="window" :initial-width="650" :initial-height="420" :can-resize="true" @closed="$emit('closed')"> <template #header> - <Fa :icon="faTerminal" style="margin-right: 0.5em;"/>Task Manager + <i class="fas fa-terminal" style="margin-right: 0.5em;"></i>Task Manager </template> <div class="qljqmnzj _monospace"> <MkTab v-model:value="tab" style="border-bottom: solid 0.5px var(--divider);"> @@ -78,7 +78,6 @@ <script lang="ts"> import { defineComponent, markRaw, onBeforeUnmount, ref, shallowRef } from 'vue'; -import { faTerminal } from '@fortawesome/free-solid-svg-icons'; import XWindow from '@client/components/ui/window.vue'; import MkTab from '@client/components/tab.vue'; import MkButton from '@client/components/ui/button.vue'; @@ -139,7 +138,6 @@ export default defineComponent({ pools, killPopup, showReq, - faTerminal, }; }, }); diff --git a/src/client/components/ui/container.vue b/src/client/components/ui/container.vue index ecd48876e8..cfd928518e 100644 --- a/src/client/components/ui/container.vue +++ b/src/client/components/ui/container.vue @@ -5,8 +5,8 @@ <div class="sub"> <slot name="func"></slot> <button class="_button" v-if="foldable" @click="() => showBody = !showBody"> - <template v-if="showBody"><Fa :icon="faAngleUp"/></template> - <template v-else><Fa :icon="faAngleDown"/></template> + <template v-if="showBody"><i class="fas fa-angle-up"></i></template> + <template v-else><i class="fas fa-angle-down"></i></template> </button> </div> </header> @@ -28,7 +28,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faAngleUp, faAngleDown } from '@fortawesome/free-solid-svg-icons'; export default defineComponent({ props: { @@ -68,7 +67,6 @@ export default defineComponent({ showBody: this.expanded, omitted: null, ignoreOmit: false, - faAngleUp, faAngleDown }; }, mounted() { @@ -169,7 +167,7 @@ export default defineComponent({ margin: 0; padding: 12px 16px; - > ::v-deep([data-icon]) { + > ::v-deep(i) { margin-right: 6px; } diff --git a/src/client/components/ui/folder.vue b/src/client/components/ui/folder.vue index aee3c0ccaa..4281ec7778 100644 --- a/src/client/components/ui/folder.vue +++ b/src/client/components/ui/folder.vue @@ -4,8 +4,8 @@ <div class="title"><slot name="header"></slot></div> <div class="divider"></div> <button class="_button"> - <template v-if="showBody"><Fa :icon="faAngleUp"/></template> - <template v-else><Fa :icon="faAngleDown"/></template> + <template v-if="showBody"><i class="fas fa-angle-up"></i></template> + <template v-else><i class="fas fa-angle-down"></i></template> </button> </header> <transition name="folder-toggle" @@ -23,7 +23,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faAngleUp, faAngleDown } from '@fortawesome/free-solid-svg-icons'; const localStoragePrefix = 'ui:folder:'; @@ -43,7 +42,6 @@ export default defineComponent({ data() { return { showBody: (this.persistKey && localStorage.getItem(localStoragePrefix + this.persistKey)) ? localStorage.getItem(localStoragePrefix + this.persistKey) === 't' : this.expanded, - faAngleUp, faAngleDown }; }, watch: { @@ -109,7 +107,7 @@ export default defineComponent({ margin: 0; padding: 12px 16px 12px 0; - > [data-icon] { + > i { margin-right: 6px; } diff --git a/src/client/components/ui/info.vue b/src/client/components/ui/info.vue index ad1b9ebb58..513682ef55 100644 --- a/src/client/components/ui/info.vue +++ b/src/client/components/ui/info.vue @@ -1,14 +1,13 @@ <template> <div class="fpezltsf" :class="{ warn }"> - <i v-if="warn"><Fa :icon="faExclamationTriangle"/></i> - <i v-else><Fa :icon="faInfoCircle"/></i> + <i v-if="warn" class="fas fa-exclamation-triangle"></i> + <i v-else class="fas fa-info-circle"></i> <slot></slot> </div> </template> <script lang="ts"> import { defineComponent } from 'vue'; -import { faInfoCircle, faExclamationTriangle } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -21,7 +20,6 @@ export default defineComponent({ }, data() { return { - faInfoCircle, faExclamationTriangle }; } }); diff --git a/src/client/components/ui/input.vue b/src/client/components/ui/input.vue index 302d96d026..7415d9896b 100644 --- a/src/client/components/ui/input.vue +++ b/src/client/components/ui/input.vue @@ -5,7 +5,7 @@ <span class="label" ref="labelEl"><slot></slot></span> <span class="title" ref="title"> <slot name="title"></slot> - <span class="warning" v-if="invalid"><Fa :icon="faExclamationCircle"/>{{ $refs.input.validationMessage }}</span> + <span class="warning" v-if="invalid"><i class="fas fa-exclamation-circle"></i>{{ $refs.input.validationMessage }}</span> </span> <div class="prefix" ref="prefixEl"><slot name="prefix"></slot></div> <input v-if="debounce" ref="inputEl" @@ -56,7 +56,6 @@ <script lang="ts"> import { defineComponent, onMounted, onUnmounted, nextTick, ref, watch, computed, toRefs } from 'vue'; import debounce from 'v-debounce'; -import { faExclamationCircle } from '@fortawesome/free-solid-svg-icons'; import * as os from '@client/os'; export default defineComponent({ @@ -205,7 +204,6 @@ export default defineComponent({ focus, onInput, onKeydown, - faExclamationCircle, }; }, }); diff --git a/src/client/components/ui/menu.vue b/src/client/components/ui/menu.vue index 1550fe40c7..eb96450774 100644 --- a/src/client/components/ui/menu.vue +++ b/src/client/components/ui/menu.vue @@ -13,25 +13,25 @@ <span><MkEllipsis/></span> </span> <MkA v-else-if="item.type === 'link'" :to="item.to" @click.passive="close()" :tabindex="i" class="_button item"> - <Fa v-if="item.icon" :icon="item.icon" fixed-width/> + <i v-if="item.icon" class="fa-fw" :class="item.icon"></i> <MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> <span>{{ item.text }}</span> - <i v-if="item.indicate"><Fa :icon="faCircle"/></i> + <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> </MkA> <a v-else-if="item.type === 'a'" :href="item.href" :target="item.target" :download="item.download" @click="close()" :tabindex="i" class="_button item"> - <Fa v-if="item.icon" :icon="item.icon" fixed-width/> + <i v-if="item.icon" class="fa-fw" :class="item.icon"></i> <span>{{ item.text }}</span> - <i v-if="item.indicate"><Fa :icon="faCircle"/></i> + <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> </a> <button v-else-if="item.type === 'user'" @click="clicked(item.action, $event)" :tabindex="i" class="_button item"> <MkAvatar :user="item.user" class="avatar"/><MkUserName :user="item.user"/> - <i v-if="item.indicate"><Fa :icon="faCircle"/></i> + <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> </button> <button v-else @click="clicked(item.action, $event)" :tabindex="i" class="_button item" :class="{ danger: item.danger }"> - <Fa v-if="item.icon" :icon="item.icon" fixed-width/> + <i v-if="item.icon" class="fa-fw" :class="item.icon"></i> <MkAvatar v-if="item.avatar" :user="item.avatar" class="avatar"/> <span>{{ item.text }}</span> - <i v-if="item.indicate"><Fa :icon="faCircle"/></i> + <span v-if="item.indicate" class="indicator"><i class="fas fa-circle"></i></span> </button> </template> <span v-if="_items.length === 0" class="none item"> @@ -42,7 +42,6 @@ <script lang="ts"> import { defineComponent, ref } from 'vue'; -import { faCircle } from '@fortawesome/free-solid-svg-icons'; import { focusPrev, focusNext } from '@client/scripts/focus'; import contains from '@client/scripts/contains'; @@ -65,7 +64,6 @@ export default defineComponent({ data() { return { _items: [], - faCircle, }; }, computed: { @@ -207,7 +205,7 @@ export default defineComponent({ opacity: 0.7; } - > [data-icon] { + > i { margin-right: 4px; width: 20px; } @@ -218,7 +216,7 @@ export default defineComponent({ height: 20px; } - > i { + > .indicator { position: absolute; top: 5px; left: 13px; diff --git a/src/client/components/ui/modal-window.vue b/src/client/components/ui/modal-window.vue index 90b803801d..2d2b587662 100644 --- a/src/client/components/ui/modal-window.vue +++ b/src/client/components/ui/modal-window.vue @@ -2,12 +2,12 @@ <MkModal ref="modal" @click="$emit('click')" @closed="$emit('closed')"> <div class="ebkgoccj _popup _narrow_" @keydown="onKeydown" :style="{ width: `${width}px`, height: scroll ? (height ? `${height}px` : null) : (height ? `min(${height}px, 100%)` : '100%') }"> <div class="header"> - <button class="_button" v-if="withOkButton" @click="$emit('close')"><Fa :icon="faTimes"/></button> + <button class="_button" v-if="withOkButton" @click="$emit('close')"><i class="fas fa-times"></i></button> <span class="title"> <slot name="header"></slot> </span> - <button class="_button" v-if="!withOkButton" @click="$emit('close')"><Fa :icon="faTimes"/></button> - <button class="_button" v-if="withOkButton" @click="$emit('ok')" :disabled="okButtonDisabled"><Fa :icon="faCheck"/></button> + <button class="_button" v-if="!withOkButton" @click="$emit('close')"><i class="fas fa-times"></i></button> + <button class="_button" v-if="withOkButton" @click="$emit('ok')" :disabled="okButtonDisabled"><i class="fas fa-check"></i></button> </div> <div class="body" v-if="padding"> <div class="_section"> @@ -23,7 +23,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faTimes, faCheck } from '@fortawesome/free-solid-svg-icons'; import MkModal from './modal.vue'; export default defineComponent({ @@ -72,7 +71,6 @@ export default defineComponent({ data() { return { - faTimes, faCheck }; }, diff --git a/src/client/components/ui/select.vue b/src/client/components/ui/select.vue index d9250a62cd..e78c44fe0d 100644 --- a/src/client/components/ui/select.vue +++ b/src/client/components/ui/select.vue @@ -15,7 +15,7 @@ </select> <div class="suffix"> <slot name="suffix"> - <Fa :icon="faChevronDown"/> + <i class="fas fa-chevron-down"></i> </slot> </div> </div> @@ -25,7 +25,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faChevronDown } from '@fortawesome/free-solid-svg-icons'; export default defineComponent({ props: { @@ -49,7 +48,6 @@ export default defineComponent({ data() { return { focused: false, - faChevronDown, }; }, computed: { diff --git a/src/client/components/ui/window.vue b/src/client/components/ui/window.vue index 70676cdaf5..ce621ac6fd 100644 --- a/src/client/components/ui/window.vue +++ b/src/client/components/ui/window.vue @@ -4,13 +4,13 @@ <div class="body _popup _shadow _narrow_" @mousedown="onBodyMousedown" @keydown="onKeydown"> <div class="header" :class="{ mini }" @contextmenu.prevent.stop="onContextmenu"> <slot v-if="closeRight" name="buttons"><button class="_button" style="pointer-events: none;"></button></slot> - <button v-else class="_button" @click="close()"><Fa :icon="faTimes"/></button> + <button v-else class="_button" @click="close()"><i class="fas fa-times"></i></button> <span class="title" @mousedown.prevent="onHeaderMousedown" @touchstart.prevent="onHeaderMousedown"> <slot name="header"></slot> </span> - <button v-if="closeRight" class="_button" @click="close()"><Fa :icon="faTimes"/></button> + <button v-if="closeRight" class="_button" @click="close()"><i class="fas fa-times"></i></button> <slot v-else name="buttons"><button class="_button" style="pointer-events: none;"></button></slot> </div> <div class="body" v-if="padding"> @@ -38,7 +38,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faTimes, faCheck } from '@fortawesome/free-solid-svg-icons'; import contains from '@client/scripts/contains'; import * as os from '@client/os'; @@ -114,7 +113,6 @@ export default defineComponent({ return { showing: true, id: Math.random().toString(), // TODO: UUIDとかにする - faTimes }; }, diff --git a/src/client/components/url-preview.vue b/src/client/components/url-preview.vue index 7495da6f24..1d44b04578 100644 --- a/src/client/components/url-preview.vue +++ b/src/client/components/url-preview.vue @@ -1,6 +1,6 @@ <template> <div v-if="playerEnabled" class="player" :style="`padding: ${(player.height || 0) / (player.width || 1) * 100}% 0 0`"> - <button class="disablePlayer" @click="playerEnabled = false" :title="$ts.disablePlayer"><Fa icon="times"/></button> + <button class="disablePlayer" @click="playerEnabled = false" :title="$ts.disablePlayer"><i class="fas fa-times"></i></button> <iframe :src="player.url + (player.url.match(/\?/) ? '&autoplay=1&auto_play=1' : '?autoplay=1&auto_play=1')" :width="player.width || '100%'" :heigth="player.height || 250" frameborder="0" allow="autoplay; encrypted-media" allowfullscreen /> </div> <div v-else-if="tweetId && tweetExpanded" class="twitter" ref="twitter"> @@ -10,7 +10,7 @@ <transition name="zoom" mode="out-in"> <component :is="self ? 'MkA' : 'a'" :class="{ compact }" :[attr]="self ? url.substr(local.length) : url" rel="nofollow noopener" :target="target" :title="url" v-if="!fetching"> <div class="thumbnail" v-if="thumbnail" :style="`background-image: url('${thumbnail}')`"> - <button class="_button" v-if="!playerEnabled && player.url" @click.prevent="playerEnabled = true" :title="$ts.enablePlayer"><Fa :icon="faPlayCircle"/></button> + <button class="_button" v-if="!playerEnabled && player.url" @click.prevent="playerEnabled = true" :title="$ts.enablePlayer"><i class="fas fa-play-circle"></i></button> </div> <article> <header> @@ -26,7 +26,7 @@ </transition> <div class="expandTweet" v-if="tweetId"> <a @click="tweetExpanded = true"> - <Fa :icon="faTwitter"/> {{ $ts.expandTweet }} + <i class="fab fa-twitter"></i> {{ $ts.expandTweet }} </a> </div> </div> @@ -34,8 +34,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faPlayCircle } from '@fortawesome/free-regular-svg-icons'; -import { faTwitter } from '@fortawesome/free-brands-svg-icons'; import { url as local, lang } from '@client/config'; import * as os from '@client/os'; @@ -83,7 +81,6 @@ export default defineComponent({ self: self, attr: self ? 'to' : 'href', target: self ? null : '_blank', - faPlayCircle, faTwitter }; }, diff --git a/src/client/components/user-list.vue b/src/client/components/user-list.vue index 38d9df63bb..a7162ddcc2 100644 --- a/src/client/components/user-list.vue +++ b/src/client/components/user-list.vue @@ -9,7 +9,7 @@ <MkUserInfo class="user" v-for="user in users" :user="user" :key="user.id"/> </div> <button class="more" v-appear="$store.state.enableInfiniteScroll ? fetchMore : null" @click="fetchMore" :class="{ fetching: moreFetching }" v-show="more" :disabled="moreFetching"> - <template v-if="moreFetching"><Fa icon="spinner" pulse fixed-width/></template>{{ moreFetching ? $ts.loading : $ts.loadMore }} + <template v-if="moreFetching"><i class="fas fa-spinner fa-pulse fa-fw"></i></template>{{ moreFetching ? $ts.loading : $ts.loadMore }} </button> </div> </template> @@ -83,7 +83,7 @@ export default defineComponent({ cursor: wait; } - > [data-icon] { + > i { margin-right: 4px; } } diff --git a/src/client/components/user-select-dialog.vue b/src/client/components/user-select-dialog.vue index a243e182e8..620c8eee28 100644 --- a/src/client/components/user-select-dialog.vue +++ b/src/client/components/user-select-dialog.vue @@ -44,7 +44,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faTimes, faCheck } from '@fortawesome/free-solid-svg-icons'; import MkInput from './ui/input.vue'; import XModalWindow from '@client/components/ui/modal-window.vue'; import * as os from '@client/os'; @@ -67,7 +66,6 @@ export default defineComponent({ recentUsers: [], users: [], selected: null, - faTimes, faCheck }; }, diff --git a/src/client/components/users-dialog.vue b/src/client/components/users-dialog.vue index ebf867f702..90cd926f0c 100644 --- a/src/client/components/users-dialog.vue +++ b/src/client/components/users-dialog.vue @@ -2,7 +2,7 @@ <div class="mk-users-dialog"> <div class="header"> <span>{{ title }}</span> - <button class="_button" @click="close()"><Fa :icon="faTimes"/></button> + <button class="_button" @click="close()"><i class="fas fa-times"></i></button> </div> <div class="users"> @@ -16,7 +16,7 @@ </div> <button class="more _button" v-appear="$store.state.enableInfiniteScroll ? fetchMore : null" @click="fetchMore" v-show="more" :disabled="moreFetching"> <template v-if="!moreFetching">{{ $ts.loadMore }}</template> - <template v-if="moreFetching"><Fa :icon="faSpinner" pulse fixed-width/></template> + <template v-if="moreFetching"><i class="fas fa-spinner fa-pulse fa-fw"></i></template> </button> <p class="empty" v-if="empty">{{ $ts.noUsers }}</p> @@ -27,7 +27,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faTimes } from '@fortawesome/free-solid-svg-icons'; import paging from '@client/scripts/paging'; import { userPage } from '../filters/user'; @@ -50,7 +49,6 @@ export default defineComponent({ data() { return { - faTimes }; }, diff --git a/src/client/components/visibility-picker.vue b/src/client/components/visibility-picker.vue index caa2b116a6..492ec092e3 100644 --- a/src/client/components/visibility-picker.vue +++ b/src/client/components/visibility-picker.vue @@ -2,28 +2,28 @@ <MkModal ref="modal" :src="src" @click="$refs.modal.close()" @closed="$emit('closed')"> <div class="gqyayizv _popup"> <button class="_button" @click="choose('public')" :class="{ active: v == 'public' }" data-index="1" key="public"> - <div><Fa :icon="faGlobe"/></div> + <div><i class="fas fa-globe"></i></div> <div> <span>{{ $ts._visibility.public }}</span> <span>{{ $ts._visibility.publicDescription }}</span> </div> </button> <button class="_button" @click="choose('home')" :class="{ active: v == 'home' }" data-index="2" key="home"> - <div><Fa :icon="faHome"/></div> + <div><i class="fas fa-home"></i></div> <div> <span>{{ $ts._visibility.home }}</span> <span>{{ $ts._visibility.homeDescription }}</span> </div> </button> <button class="_button" @click="choose('followers')" :class="{ active: v == 'followers' }" data-index="3" key="followers"> - <div><Fa :icon="faUnlock"/></div> + <div><i class="fas fa-unlock"></i></div> <div> <span>{{ $ts._visibility.followers }}</span> <span>{{ $ts._visibility.followersDescription }}</span> </div> </button> <button :disabled="localOnly" class="_button" @click="choose('specified')" :class="{ active: v == 'specified' }" data-index="4" key="specified"> - <div><Fa :icon="faEnvelope"/></div> + <div><i class="fas fa-envelope"></i></div> <div> <span>{{ $ts._visibility.specified }}</span> <span>{{ $ts._visibility.specifiedDescription }}</span> @@ -31,12 +31,12 @@ </button> <div class="divider"></div> <button class="_button localOnly" @click="localOnly = !localOnly" :class="{ active: localOnly }" data-index="5" key="localOnly"> - <div><Fa :icon="faBiohazard"/></div> + <div><i class="fas fa-biohazard"></i></div> <div> <span>{{ $ts._visibility.localOnly }}</span> <span>{{ $ts._visibility.localOnlyDescription }}</span> </div> - <div><Fa :icon="localOnly ? faToggleOn : faToggleOff" :key="localOnly"/></div> + <div><i :class="localOnly ? 'fas fa-toggle-on' : 'fas fa-toggle-off'"></i></div> </button> </div> </MkModal> @@ -44,8 +44,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faGlobe, faUnlock, faHome, faBiohazard, faToggleOn, faToggleOff } from '@fortawesome/free-solid-svg-icons'; -import { faEnvelope } from '@fortawesome/free-regular-svg-icons'; import MkModal from '@client/components/ui/modal.vue'; export default defineComponent({ @@ -70,7 +68,6 @@ export default defineComponent({ return { v: this.currentVisibility, localOnly: this.currentLocalOnly, - faGlobe, faUnlock, faEnvelope, faHome, faBiohazard, faToggleOn, faToggleOff } }, watch: { diff --git a/src/client/components/waiting-dialog.vue b/src/client/components/waiting-dialog.vue index c3a265af9c..97f18842e2 100644 --- a/src/client/components/waiting-dialog.vue +++ b/src/client/components/waiting-dialog.vue @@ -1,8 +1,8 @@ <template> <MkModal ref="modal" @click="success ? done() : () => {}" @closed="$emit('closed')"> <div class="iuyakobc" :class="{ iconOnly: (text == null) || success }"> - <Fa class="icon success" v-if="success" :icon="faCheck"/> - <Fa class="icon waiting" v-else :icon="faSpinner" pulse/> + <i v-if="success" class="fas fa-check icon success"></i> + <i v-else class="fas fa-spinner fa-pulse icon waiting"></i> <div class="text" v-if="text && !success">{{ text }}<MkEllipsis/></div> </div> </MkModal> @@ -10,7 +10,6 @@ <script lang="ts"> import { defineComponent } from 'vue'; -import { faCheck, faSpinner } from '@fortawesome/free-solid-svg-icons'; import MkModal from '@client/components/ui/modal.vue'; export default defineComponent({ @@ -37,7 +36,6 @@ export default defineComponent({ data() { return { - faCheck, faSpinner, }; }, diff --git a/src/client/components/widgets.vue b/src/client/components/widgets.vue index 993b843cb1..790ca56112 100644 --- a/src/client/components/widgets.vue +++ b/src/client/components/widgets.vue @@ -6,7 +6,7 @@ <template #label>{{ $ts.selectWidget }}</template> <option v-for="widget in widgetDefs" :value="widget" :key="widget">{{ $t(`_widgets.${widget}`) }}</option> </MkSelect> - <MkButton inline @click="addWidget" primary><Fa :icon="faPlus"/> {{ $ts.add }}</MkButton> + <MkButton inline @click="addWidget" primary><i class="fas fa-plus"></i> {{ $ts.add }}</MkButton> <MkButton inline @click="$emit('exit')">{{ $ts.close }}</MkButton> </header> <XDraggable @@ -16,8 +16,8 @@ > <template #item="{element}"> <div class="customize-container"> - <button class="config _button" @click.prevent.stop="configWidget(element.id)"><Fa :icon="faCog"/></button> - <button class="remove _button" @click.prevent.stop="removeWidget(element)"><Fa :icon="faTimes"/></button> + <button class="config _button" @click.prevent.stop="configWidget(element.id)"><i class="fas fa-cog"></i></button> + <button class="remove _button" @click.prevent.stop="removeWidget(element)"><i class="fas fa-times"></i></button> <component :is="`mkw-${element.name}`" :widget="element" :setting-callback="setting => settings[element.id] = setting" :column="column" @updateProps="updateWidget(element.id, $event)"/> </div> </template> @@ -30,7 +30,6 @@ <script lang="ts"> import { defineComponent, defineAsyncComponent } from 'vue'; import { v4 as uuid } from 'uuid'; -import { faTimes, faCog, faPlus } from '@fortawesome/free-solid-svg-icons'; import MkSelect from '@client/components/ui/select.vue'; import MkButton from '@client/components/ui/button.vue'; import { widgets as widgetDefs } from '@client/widgets'; @@ -59,7 +58,6 @@ export default defineComponent({ widgetAdderSelected: null, widgetDefs, settings: {}, - faTimes, faPlus, faCog }; }, |