summaryrefslogtreecommitdiff
path: root/src/client/app/common
diff options
context:
space:
mode:
authorsyuilo <Syuilotan@yahoo.co.jp>2018-11-06 01:40:11 +0900
committerGitHub <noreply@github.com>2018-11-06 01:40:11 +0900
commit9f5dc2c0df0cdba1113697bdd71637a404444065 (patch)
treea1d942cf6440f82244ef58ee7ff93103ff70f521 /src/client/app/common
parent:art: (diff)
downloadmisskey-9f5dc2c0df0cdba1113697bdd71637a404444065.tar.gz
misskey-9f5dc2c0df0cdba1113697bdd71637a404444065.tar.bz2
misskey-9f5dc2c0df0cdba1113697bdd71637a404444065.zip
[WIP] Use FontAwesome Component for Vue (#3127)
* wip * Rename * Clean up * Clean up * wip * wip * Enable tree shaking * :v: * :v: * wip * wip * Clean up
Diffstat (limited to 'src/client/app/common')
-rw-r--r--src/client/app/common/views/components/api-settings.vue8
-rw-r--r--src/client/app/common/views/components/connect-failed.troubleshooter.vue28
-rw-r--r--src/client/app/common/views/components/connect-failed.vue2
-rw-r--r--src/client/app/common/views/components/drive-settings.vue2
-rw-r--r--src/client/app/common/views/components/error.vue2
-rw-r--r--src/client/app/common/views/components/file-type-icon.vue2
-rw-r--r--src/client/app/common/views/components/games/reversi/reversi.game.vue10
-rw-r--r--src/client/app/common/views/components/games/reversi/reversi.room.vue6
-rw-r--r--src/client/app/common/views/components/google.vue2
-rw-r--r--src/client/app/common/views/components/media-banner.vue4
-rw-r--r--src/client/app/common/views/components/menu.vue7
-rw-r--r--src/client/app/common/views/components/messaging-room.form.vue6
-rw-r--r--src/client/app/common/views/components/messaging-room.message.vue4
-rw-r--r--src/client/app/common/views/components/messaging-room.vue18
-rw-r--r--src/client/app/common/views/components/messaging.vue8
-rw-r--r--src/client/app/common/views/components/mute-and-block.vue2
-rw-r--r--src/client/app/common/views/components/nav.vue2
-rw-r--r--src/client/app/common/views/components/note-header.vue12
-rw-r--r--src/client/app/common/views/components/note-menu.vue16
-rw-r--r--src/client/app/common/views/components/poll-editor.vue8
-rw-r--r--src/client/app/common/views/components/poll.vue4
-rw-r--r--src/client/app/common/views/components/profile-editor.vue10
-rw-r--r--src/client/app/common/views/components/signin.vue2
-rw-r--r--src/client/app/common/views/components/signup.vue30
-rw-r--r--src/client/app/common/views/components/stream-indicator.vue8
-rw-r--r--src/client/app/common/views/components/tag-cloud.vue6
-rw-r--r--src/client/app/common/views/components/theme.vue18
-rw-r--r--src/client/app/common/views/components/trends.vue6
-rw-r--r--src/client/app/common/views/components/ui/info.vue4
-rw-r--r--src/client/app/common/views/components/uploader.vue4
-rw-r--r--src/client/app/common/views/components/url.vue4
-rw-r--r--src/client/app/common/views/components/visibility-chooser.vue10
-rw-r--r--src/client/app/common/views/pages/follow.vue12
-rw-r--r--src/client/app/common/views/widgets/donation.vue4
-rw-r--r--src/client/app/common/views/widgets/hashtags.vue2
-rw-r--r--src/client/app/common/views/widgets/memo.vue2
-rw-r--r--src/client/app/common/views/widgets/photo-stream.vue6
-rw-r--r--src/client/app/common/views/widgets/posts-monitor.vue4
-rw-r--r--src/client/app/common/views/widgets/rss.vue8
-rw-r--r--src/client/app/common/views/widgets/server.cpu.vue4
-rw-r--r--src/client/app/common/views/widgets/server.disk.vue4
-rw-r--r--src/client/app/common/views/widgets/server.memory.vue4
-rw-r--r--src/client/app/common/views/widgets/server.vue8
-rw-r--r--src/client/app/common/views/widgets/tips.vue4
44 files changed, 161 insertions, 156 deletions
diff --git a/src/client/app/common/views/components/api-settings.vue b/src/client/app/common/views/components/api-settings.vue
index e7cc6e7a88..15b2d00851 100644
--- a/src/client/app/common/views/components/api-settings.vue
+++ b/src/client/app/common/views/components/api-settings.vue
@@ -1,6 +1,6 @@
<template>
<ui-card>
- <div slot="title">%fa:key% API</div>
+ <div slot="title"><fa icon="key"/> API</div>
<section class="fit-top">
<ui-input :value="$store.state.i.token" readonly>
@@ -9,11 +9,11 @@
<p>%i18n:@intro%</p>
<ui-info warn>%i18n:@caution%</ui-info>
<p>%i18n:@regeneration-of-token%</p>
- <ui-button @click="regenerateToken">%fa:sync-alt% %i18n:@regenerate-token%</ui-button>
+ <ui-button @click="regenerateToken"><fa icon="sync-alt"/> %i18n:@regenerate-token%</ui-button>
</section>
<section>
- <header>%fa:terminal% %i18n:@console.title%</header>
+ <header><fa icon="terminal"/> %i18n:@console.title%</header>
<ui-input v-model="endpoint">
<span>%i18n:@console.endpoint%</span>
</ui-input>
@@ -22,7 +22,7 @@
</ui-textarea>
<ui-button @click="send" :disabled="sending">
<template v-if="sending">%i18n:@console.sending%</template>
- <template v-else>%fa:paper-plane% %i18n:@console.send%</template>
+ <template v-else><fa icon="paper-plane"/> %i18n:@console.send%</template>
</ui-button>
<ui-textarea v-if="res" v-model="res" readonly tall>
<span>%i18n:@console.response%</span>
diff --git a/src/client/app/common/views/components/connect-failed.troubleshooter.vue b/src/client/app/common/views/components/connect-failed.troubleshooter.vue
index f64cae6b4b..544bb7eaa2 100644
--- a/src/client/app/common/views/components/connect-failed.troubleshooter.vue
+++ b/src/client/app/common/views/components/connect-failed.troubleshooter.vue
@@ -1,35 +1,35 @@
<template>
<div class="troubleshooter">
<div class="body">
- <h1>%fa:wrench%%i18n:@title%</h1>
+ <h1><fa icon="wrench"/>%i18n:@title%</h1>
<div>
<p :data-wip="network == null">
<template v-if="network != null">
- <template v-if="network">%fa:check%</template>
- <template v-if="!network">%fa:times%</template>
+ <template v-if="network"><fa icon="check"/></template>
+ <template v-if="!network"><fa icon="times"/></template>
</template>
{{ network == null ? '%i18n:@checking-network%' : '%i18n:@network%' }}<mk-ellipsis v-if="network == null"/>
</p>
<p v-if="network == true" :data-wip="internet == null">
<template v-if="internet != null">
- <template v-if="internet">%fa:check%</template>
- <template v-if="!internet">%fa:times%</template>
+ <template v-if="internet"><fa icon="check"/></template>
+ <template v-if="!internet"><fa icon="times"/></template>
</template>
{{ internet == null ? '%i18n:@checking-internet%' : '%i18n:@internet%' }}<mk-ellipsis v-if="internet == null"/>
</p>
<p v-if="internet == true" :data-wip="server == null">
<template v-if="server != null">
- <template v-if="server">%fa:check%</template>
- <template v-if="!server">%fa:times%</template>
+ <template v-if="server"><fa icon="check"/></template>
+ <template v-if="!server"><fa icon="times"/></template>
</template>
{{ server == null ? '%i18n:@checking-server%' : '%i18n:@server%' }}<mk-ellipsis v-if="server == null"/>
</p>
</div>
<p v-if="!end">%i18n:@finding%<mk-ellipsis/></p>
- <p v-if="network === false"><b>%fa:exclamation-triangle%%i18n:@no-network%</b><br>%i18n:@no-network-desc%</p>
- <p v-if="internet === false"><b>%fa:exclamation-triangle%%i18n:@no-internet%</b><br>%i18n:@no-internet-desc%</p>
- <p v-if="server === false"><b>%fa:exclamation-triangle%%i18n:@no-server%</b><br>%i18n:@no-server-desc%</p>
- <p v-if="server === true" class="success"><b>%fa:info-circle%%i18n:@success%</b><br>%i18n:@success-desc%</p>
+ <p v-if="network === false"><b><fa icon="exclamation-triangle"/>%i18n:@no-network%</b><br>%i18n:@no-network-desc%</p>
+ <p v-if="internet === false"><b><fa icon="exclamation-triangle"/>%i18n:@no-internet%</b><br>%i18n:@no-internet-desc%</p>
+ <p v-if="server === false"><b><fa icon="exclamation-triangle"/>%i18n:@no-server%</b><br>%i18n:@no-server-desc%</p>
+ <p v-if="server === true" class="success"><b><fa icon="info-circle"/>%i18n:@success%</b><br>%i18n:@success-desc%</p>
</div>
<footer>
<a href="/assets/flush.html">%i18n:@flush%</a> | <a href="/assets/version.html">%i18n:@set-version%</a>
@@ -100,7 +100,7 @@ export default Vue.extend({
color #444
border-bottom solid 1px #eee
- > [data-fa]
+ > [data-icon]
margin-right 0.25em
> div
@@ -115,7 +115,7 @@ export default Vue.extend({
&[data-wip]
color #888
- > [data-fa]
+ > [data-icon]
margin-right 0.25em
&.times
@@ -132,7 +132,7 @@ export default Vue.extend({
border-top solid 1px #eee
> b
- > [data-fa]
+ > [data-icon]
margin-right 0.25em
&.success
diff --git a/src/client/app/common/views/components/connect-failed.vue b/src/client/app/common/views/components/connect-failed.vue
index 36cae05665..8567f9a15c 100644
--- a/src/client/app/common/views/components/connect-failed.vue
+++ b/src/client/app/common/views/components/connect-failed.vue
@@ -1,6 +1,6 @@
<template>
<div class="mk-connect-failed">
- <img src="data:image/jpeg;base64,%base64:/assets/error.jpg%" alt=""/>
+ <img src="https://raw.githubusercontent.com/syuilo/misskey/develop/src/client/assets/error.jpg" alt=""/>
<h1>%i18n:@title%</h1>
<p class="text">
<span>{{ '%i18n:@description%'.substr(0, '%i18n:@description%'.indexOf('{')) }}</span>
diff --git a/src/client/app/common/views/components/drive-settings.vue b/src/client/app/common/views/components/drive-settings.vue
index 3b45a68730..1d0da3a53f 100644
--- a/src/client/app/common/views/components/drive-settings.vue
+++ b/src/client/app/common/views/components/drive-settings.vue
@@ -1,6 +1,6 @@
<template>
<ui-card>
- <div slot="title">%fa:cloud% %i18n:common.drive%</div>
+ <div slot="title"><fa icon="cloud"/> %i18n:common.drive%</div>
<section v-if="!fetching" class="juakhbxthdewydyreaphkepoxgxvfogn">
<div class="meter"><div :style="meterStyle"></div></div>
diff --git a/src/client/app/common/views/components/error.vue b/src/client/app/common/views/components/error.vue
index 7381cf5376..902e4f31d4 100644
--- a/src/client/app/common/views/components/error.vue
+++ b/src/client/app/common/views/components/error.vue
@@ -1,6 +1,6 @@
<template>
<div class="wjqjnyhzogztorhrdgcpqlkxhkmuetgj">
- <p>%fa:exclamation-triangle% %i18n:common.error.title%</p>
+ <p><fa icon="exclamation-triangle"/> %i18n:common.error.title%</p>
<ui-button @click="() => $emit('retry')">%i18n:common.error.retry%</ui-button>
</div>
</template>
diff --git a/src/client/app/common/views/components/file-type-icon.vue b/src/client/app/common/views/components/file-type-icon.vue
index b7e868d1f7..3a9fe768d1 100644
--- a/src/client/app/common/views/components/file-type-icon.vue
+++ b/src/client/app/common/views/components/file-type-icon.vue
@@ -1,6 +1,6 @@
<template>
<span class="mk-file-type-icon">
- <template v-if="kind == 'image'">%fa:file-image%</template>
+ <template v-if="kind == 'image'"><fa icon="file-image"/></template>
</span>
</template>
diff --git a/src/client/app/common/views/components/games/reversi/reversi.game.vue b/src/client/app/common/views/components/games/reversi/reversi.game.vue
index 608e1c182d..b2cf8b4d9d 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.game.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.game.vue
@@ -1,6 +1,6 @@
<template>
<div class="xqnhankfuuilcwvhgsopeqncafzsquya">
- <button class="go-index" v-if="selfNav" @click="goIndex">%fa:arrow-left%</button>
+ <button class="go-index" v-if="selfNav" @click="goIndex"><fa icon="arrow-left"/></button>
<header><b><router-link :to="blackUser | userPage">{{ blackUser | userName }}</router-link></b>(%i18n:common.reversi.black%) vs <b><router-link :to="whiteUser | userPage">{{ whiteUser | userName }}</router-link></b>(%i18n:common.reversi.white%)</header>
<div style="overflow: hidden; line-height: 28px;">
@@ -51,13 +51,13 @@
<div class="player" v-if="game.isEnded">
<div>
- <button @click="logPos = 0" :disabled="logPos == 0">%fa:angle-double-left%</button>
- <button @click="logPos--" :disabled="logPos == 0">%fa:angle-left%</button>
+ <button @click="logPos = 0" :disabled="logPos == 0"><fa icon="angle-double-left"/></button>
+ <button @click="logPos--" :disabled="logPos == 0"><fa icon="angle-left"/></button>
</div>
<span>{{ logPos }} / {{ logs.length }}</span>
<div>
- <button @click="logPos++" :disabled="logPos == logs.length">%fa:angle-right%</button>
- <button @click="logPos = logs.length" :disabled="logPos == logs.length">%fa:angle-double-right%</button>
+ <button @click="logPos++" :disabled="logPos == logs.length"><fa icon="angle-right"/></button>
+ <button @click="logPos = logs.length" :disabled="logPos == logs.length"><fa icon="angle-double-right"/></button>
</div>
</div>
diff --git a/src/client/app/common/views/components/games/reversi/reversi.room.vue b/src/client/app/common/views/components/games/reversi/reversi.room.vue
index 29c6794f69..7571d69af9 100644
--- a/src/client/app/common/views/components/games/reversi/reversi.room.vue
+++ b/src/client/app/common/views/components/games/reversi/reversi.room.vue
@@ -17,13 +17,13 @@
</header>
<div>
- <div class="random" v-if="game.settings.map == null">%fa:dice%</div>
+ <div class="random" v-if="game.settings.map == null"><fa icon="dice"/></div>
<div class="board" v-else :style="{ 'grid-template-rows': `repeat(${ game.settings.map.length }, 1fr)`, 'grid-template-columns': `repeat(${ game.settings.map[0].length }, 1fr)` }">
<div v-for="(x, i) in game.settings.map.join('')"
:data-none="x == ' '"
@click="onPixelClick(i, x)">
- <template v-if="x == 'b'"><template v-if="$store.state.device.darkmode">%fa:circle R%</template><template v-else>%fa:circle%</template></template>
- <template v-if="x == 'w'"><template v-if="$store.state.device.darkmode">%fa:circle%</template><template v-else>%fa:circle R%</template></template>
+ <template v-if="x == 'b'"><template v-if="$store.state.device.darkmode"><fa :icon="['far', 'circle']"/></template><template v-else><fa icon="circle"/></template></template>
+ <template v-if="x == 'w'"><template v-if="$store.state.device.darkmode"><fa :icon="['far', 'circle']"/></template><template v-else><fa icon="circle"/></template></template>
</div>
</div>
</div>
diff --git a/src/client/app/common/views/components/google.vue b/src/client/app/common/views/components/google.vue
index ac71a5e56d..1d710bc3c9 100644
--- a/src/client/app/common/views/components/google.vue
+++ b/src/client/app/common/views/components/google.vue
@@ -1,7 +1,7 @@
<template>
<div class="mk-google">
<input type="search" v-model="query" :placeholder="q">
- <button @click="search">%fa:search% %i18n:common.search%</button>
+ <button @click="search"><fa icon="search"/> %i18n:common.search%</button>
</div>
</template>
diff --git a/src/client/app/common/views/components/media-banner.vue b/src/client/app/common/views/components/media-banner.vue
index 0f5981d3c4..00a7f22e45 100644
--- a/src/client/app/common/views/components/media-banner.vue
+++ b/src/client/app/common/views/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:exclamation-triangle%</span>
+ <span class="icon"><fa icon="exclamation-triangle"/></span>
<b>%i18n:@sensitive%</b>
<span>%i18n:@click-to-show%</span>
</div>
@@ -18,7 +18,7 @@
:title="media.name"
:download="media.name"
>
- <span class="icon">%fa:download%</span>
+ <span class="icon"><fa icon="download"/></span>
<b>{{ media.name }}</b>
</a>
</div>
diff --git a/src/client/app/common/views/components/menu.vue b/src/client/app/common/views/components/menu.vue
index be2c03f54c..e085bf4bb9 100644
--- a/src/client/app/common/views/components/menu.vue
+++ b/src/client/app/common/views/components/menu.vue
@@ -4,7 +4,9 @@
<div class="popover" :class="{ hukidasi }" ref="popover">
<template v-for="item, i in items">
<div v-if="item === null"></div>
- <button v-if="item" @click="clicked(item.action)" v-html="item.icon ? item.icon + ' ' + item.text : item.text" :tabindex="i"></button>
+ <button v-if="item" @click="clicked(item.action)" :tabindex="i">
+ <fa v-if="item.icon" :icon="item.icon"/>{{ item.text }}
+ </button>
</template>
</div>
</div>
@@ -188,6 +190,9 @@ export default Vue.extend({
color var(--primaryForeground)
background var(--primaryDarken10)
+ > [data-icon]
+ margin-right 4px
+
> div
margin 8px 0
height 1px
diff --git a/src/client/app/common/views/components/messaging-room.form.vue b/src/client/app/common/views/components/messaging-room.form.vue
index c93fd7f78d..3bd04bdbce 100644
--- a/src/client/app/common/views/components/messaging-room.form.vue
+++ b/src/client/app/common/views/components/messaging-room.form.vue
@@ -14,13 +14,13 @@
<div class="file" @click="file = null" v-if="file">{{ file.name }}</div>
<mk-uploader ref="uploader" @uploaded="onUploaded"/>
<button class="send" @click="send" :disabled="!canSend || sending" title="%i18n:@send%">
- <template v-if="!sending">%fa:paper-plane%</template><template v-if="sending">%fa:spinner .spin%</template>
+ <template v-if="!sending"><fa icon="paper-plane"/></template><template v-if="sending"><fa icon="spinner .spin"/></template>
</button>
<button class="attach-from-local" @click="chooseFile" title="%i18n:@attach-from-local%">
- %fa:upload%
+ <fa icon="upload"/>
</button>
<button class="attach-from-drive" @click="chooseFileFromDrive" title="%i18n:@attach-from-drive%">
- %fa:R folder-open%
+ <fa :icon="['far', 'folder-open']"/>
</button>
<input ref="file" type="file" @change="onChangeFile"/>
</div>
diff --git a/src/client/app/common/views/components/messaging-room.message.vue b/src/client/app/common/views/components/messaging-room.message.vue
index 77bf55c52c..08540468ce 100644
--- a/src/client/app/common/views/components/messaging-room.message.vue
+++ b/src/client/app/common/views/components/messaging-room.message.vue
@@ -24,7 +24,7 @@
<footer>
<span class="read" v-if="isMe && message.isRead">%i18n:@is-read%</span>
<mk-time :time="message.createdAt"/>
- <template v-if="message.is_edited">%fa:pencil-alt%</template>
+ <template v-if="message.is_edited"><fa icon="pencil-alt"/></template>
</footer>
</div>
</div>
@@ -179,7 +179,7 @@ export default Vue.extend({
font-size 10px
color var(--messagingRoomMessageInfo)
- > [data-fa]
+ > [data-icon]
margin-left 4px
&:not([data-is-me])
diff --git a/src/client/app/common/views/components/messaging-room.vue b/src/client/app/common/views/components/messaging-room.vue
index d982b10a25..577617c49a 100644
--- a/src/client/app/common/views/components/messaging-room.vue
+++ b/src/client/app/common/views/components/messaging-room.vue
@@ -4,11 +4,11 @@
@drop.prevent.stop="onDrop"
>
<div class="body">
- <p class="init" v-if="init">%fa:spinner .spin%%i18n:common.loading%</p>
- <p class="empty" v-if="!init && messages.length == 0">%fa:info-circle%%i18n:@empty%</p>
- <p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages">%fa:flag%%i18n:@no-history%</p>
+ <p class="init" v-if="init"><fa icon="spinner .spin"/>%i18n:common.loading%</p>
+ <p class="empty" v-if="!init && messages.length == 0"><fa icon="info-circle"/>%i18n:@empty%</p>
+ <p class="no-history" v-if="!init && messages.length > 0 && !existMoreMessages"><fa icon="flag"/>%i18n:@no-history%</p>
<button class="more" :class="{ fetching: fetchingMoreMessages }" v-if="existMoreMessages" @click="fetchMoreMessages" :disabled="fetchingMoreMessages">
- <template v-if="fetchingMoreMessages">%fa:spinner .pulse .fw%</template>{{ fetchingMoreMessages ? '%i18n:common.loading%' : '%i18n:@more%' }}
+ <template v-if="fetchingMoreMessages"><fa icon="spinner .pulse" fixed-width/></template>{{ fetchingMoreMessages ? '%i18n:common.loading%' : '%i18n:@more%' }}
</button>
<template v-for="(message, i) in _messages">
<x-message :message="message" :key="message.id"/>
@@ -20,7 +20,7 @@
<footer>
<transition name="fade">
<div class="new-message" v-show="showIndicator">
- <button @click="onIndicatorClick">%fa:arrow-circle-down%%i18n:@new-message%</button>
+ <button @click="onIndicatorClick"><i><fa icon="arrow-circle-down"/></i>%i18n:@new-message%</button>
</div>
</transition>
<x-form :user="user" ref="form"/>
@@ -280,7 +280,7 @@ export default Vue.extend({
color var(--messagingRoomInfo)
opacity 0.5
- [data-fa]
+ [data-icon]
margin-right 4px
> .no-history
@@ -292,7 +292,7 @@ export default Vue.extend({
color var(--messagingRoomInfo)
opacity 0.5
- [data-fa]
+ [data-icon]
margin-right 4px
> .more
@@ -313,7 +313,7 @@ export default Vue.extend({
&.fetching
cursor wait
- > [data-fa]
+ > [data-icon]
margin-right 4px
> .message
@@ -381,7 +381,7 @@ export default Vue.extend({
&:active
background var(--primaryDarken10)
- > [data-fa]
+ > i
position absolute
top 0
left 10px
diff --git a/src/client/app/common/views/components/messaging.vue b/src/client/app/common/views/components/messaging.vue
index f5b5e232f6..fe6c001c87 100644
--- a/src/client/app/common/views/components/messaging.vue
+++ b/src/client/app/common/views/components/messaging.vue
@@ -2,7 +2,7 @@
<div class="mk-messaging" :data-compact="compact">
<div class="search" v-if="!compact" :style="{ top: headerTop + 'px' }">
<div class="form">
- <label for="search-input">%fa:search%</label>
+ <label for="search-input"><i><fa icon="search"/></i></label>
<input v-model="q" type="search" @input="search" @keydown="onSearchKeydown" placeholder="%i18n:@search-user%"/>
</div>
<div class="result">
@@ -45,7 +45,7 @@
</template>
</div>
<p class="no-history" v-if="!fetching && messages.length == 0">%i18n:@no-history%</p>
- <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
+ <p class="fetching" v-if="fetching"><fa icon="spinner .pulse" fixed-width/>%i18n:common.loading%<mk-ellipsis/></p>
</div>
</template>
@@ -213,7 +213,7 @@ export default Vue.extend({
width 38px
pointer-events none
- > [data-fa]
+ > i
display block
position absolute
top 0
@@ -418,7 +418,7 @@ export default Vue.extend({
text-align center
color #aaa
- > [data-fa]
+ > [data-icon]
margin-right 4px
// TODO: element base media query
diff --git a/src/client/app/common/views/components/mute-and-block.vue b/src/client/app/common/views/components/mute-and-block.vue
index 8aac74c4e2..e4627726f2 100644
--- a/src/client/app/common/views/components/mute-and-block.vue
+++ b/src/client/app/common/views/components/mute-and-block.vue
@@ -1,6 +1,6 @@
<template>
<ui-card>
- <div slot="title">%fa:ban% %i18n:@mute-and-block%</div>
+ <div slot="title"><fa icon="ban"/> %i18n:@mute-and-block%</div>
<section>
<header>%i18n:@mute%</header>
diff --git a/src/client/app/common/views/components/nav.vue b/src/client/app/common/views/components/nav.vue
index 27e66358e4..5ae4486c08 100644
--- a/src/client/app/common/views/components/nav.vue
+++ b/src/client/app/common/views/components/nav.vue
@@ -8,7 +8,7 @@
<i>・</i>
<a href="/dev">%i18n:@develop%</a>
<i>・</i>
- <a href="https://twitter.com/misskey_xyz" target="_blank">Follow us on %fa:B twitter%</a>
+ <a href="https://twitter.com/misskey_xyz" target="_blank">Follow us on <fa :icon="['fab', 'twitter']"/></a>
</span>
</template>
diff --git a/src/client/app/common/views/components/note-header.vue b/src/client/app/common/views/components/note-header.vue
index 5966a5c376..4a94e5b6e9 100644
--- a/src/client/app/common/views/components/note-header.vue
+++ b/src/client/app/common/views/components/note-header.vue
@@ -6,18 +6,18 @@
<span class="is-bot" v-if="note.user.isBot">bot</span>
<span class="is-cat" v-if="note.user.isCat">cat</span>
<span class="username"><mk-acct :user="note.user"/></span>
- <span class="is-verified" v-if="note.user.isVerified" title="%i18n:common.verified-user%">%fa:star%</span>
+ <span class="is-verified" v-if="note.user.isVerified" title="%i18n:common.verified-user%"><fa icon="star"/></span>
<div class="info">
<span class="app" v-if="note.app && !mini">via <b>{{ note.app.name }}</b></span>
- <span class="mobile" v-if="note.viaMobile">%fa:mobile-alt%</span>
+ <span class="mobile" v-if="note.viaMobile"><fa icon="mobile-alt"/></span>
<router-link class="created-at" :to="note | notePage">
<mk-time :time="note.createdAt"/>
</router-link>
<span class="visibility" v-if="note.visibility != 'public'">
- <template v-if="note.visibility == 'home'">%fa:home%</template>
- <template v-if="note.visibility == 'followers'">%fa:unlock%</template>
- <template v-if="note.visibility == 'specified'">%fa:envelope%</template>
- <template v-if="note.visibility == 'private'">%fa:lock%</template>
+ <template v-if="note.visibility == 'home'"><fa icon="home"/></template>
+ <template v-if="note.visibility == 'followers'"><fa icon="unlock"/></template>
+ <template v-if="note.visibility == 'specified'"><fa icon="envelope"/></template>
+ <template v-if="note.visibility == 'private'"><fa icon="lock"/></template>
</span>
</div>
</header>
diff --git a/src/client/app/common/views/components/note-menu.vue b/src/client/app/common/views/components/note-menu.vue
index 6b96974d5b..524a3d8fec 100644
--- a/src/client/app/common/views/components/note-menu.vue
+++ b/src/client/app/common/views/components/note-menu.vue
@@ -15,18 +15,18 @@ export default Vue.extend({
computed: {
items() {
const items = [{
- icon: '%fa:info-circle%',
+ icon: 'info-circle',
text: '%i18n:@detail%',
action: this.detail
}, {
- icon: '%fa:link%',
+ icon: 'link',
text: '%i18n:@copy-link%',
action: this.copyLink
}];
if (this.note.uri) {
items.push({
- icon: '%fa:external-link-square-alt%',
+ icon: 'external-link-square-alt',
text: '%i18n:@remote%',
action: () => {
window.open(this.note.uri, '_blank');
@@ -38,13 +38,13 @@ export default Vue.extend({
if (this.note.isFavorited) {
items.push({
- icon: '%fa:star%',
+ icon: 'star',
text: '%i18n:@unfavorite%',
action: this.unfavorite
});
} else {
items.push({
- icon: '%fa:star%',
+ icon: 'star',
text: '%i18n:@favorite%',
action: this.favorite
});
@@ -53,13 +53,13 @@ export default Vue.extend({
if (this.note.userId == this.$store.state.i.id) {
if ((this.$store.state.i.pinnedNoteIds || []).includes(this.note.id)) {
items.push({
- icon: '%fa:thumbtack%',
+ icon: 'thumbtack',
text: '%i18n:@unpin%',
action: this.unpin
});
} else {
items.push({
- icon: '%fa:thumbtack%',
+ icon: 'thumbtack',
text: '%i18n:@pin%',
action: this.pin
});
@@ -69,7 +69,7 @@ export default Vue.extend({
if (this.note.userId == this.$store.state.i.id || this.$store.state.i.isAdmin) {
items.push(null);
items.push({
- icon: '%fa:trash-alt R%',
+ icon: ['far', 'trash-alt'],
text: '%i18n:@delete%',
action: this.del
});
diff --git a/src/client/app/common/views/components/poll-editor.vue b/src/client/app/common/views/components/poll-editor.vue
index b5c57d48a5..2df84a2f88 100644
--- a/src/client/app/common/views/components/poll-editor.vue
+++ b/src/client/app/common/views/components/poll-editor.vue
@@ -1,19 +1,19 @@
<template>
<div class="mk-poll-editor">
<p class="caution" v-if="choices.length < 2">
- %fa:exclamation-triangle%%i18n:@no-only-one-choice%
+ <fa icon="exclamation-triangle"/>%i18n:@no-only-one-choice%
</p>
<ul ref="choices">
<li v-for="(choice, i) in choices">
<input :value="choice" @input="onInput(i, $event)" :placeholder="'%i18n:@choice-n%'.replace('{}', i + 1)">
<button @click="remove(i)" title="%i18n:@remove%">
- %fa:times%
+ <fa icon="times"/>
</button>
</li>
</ul>
<button class="add" v-if="choices.length < 10" @click="add">%i18n:@add%</button>
<button class="destroy" @click="destroy" title="%i18n:@destroy%">
- %fa:times%
+ <fa icon="times"/>
</button>
</div>
</template>
@@ -76,7 +76,7 @@ export default Vue.extend({
font-size 0.8em
color #f00
- > [data-fa]
+ > [data-icon]
margin-right 4px
> ul
diff --git a/src/client/app/common/views/components/poll.vue b/src/client/app/common/views/components/poll.vue
index 0dc2622f9b..0550fd3761 100644
--- a/src/client/app/common/views/components/poll.vue
+++ b/src/client/app/common/views/components/poll.vue
@@ -4,7 +4,7 @@
<li v-for="choice in poll.choices" :key="choice.id" @click="vote(choice.id)" :class="{ voted: choice.voted }" :title="!isVoted ? '%i18n:@vote-to%'.replace('{}', choice.text) : ''">
<div class="backdrop" :style="{ 'width': (showResult ? (choice.votes / total * 100) : 0) + '%' }"></div>
<span>
- <template v-if="choice.isVoted">%fa:check%</template>
+ <template v-if="choice.isVoted"><fa icon="check"/></template>
<span>{{ choice.text }}</span>
<span class="votes" v-if="showResult">({{ '%i18n:@vote-count%'.replace('{}', choice.votes) }})</span>
</span>
@@ -100,7 +100,7 @@ export default Vue.extend({
transition width 1s ease
> span
- > [data-fa]
+ > [data-icon]
margin-right 4px
> .votes
diff --git a/src/client/app/common/views/components/profile-editor.vue b/src/client/app/common/views/components/profile-editor.vue
index 10bdc0b579..4e324b08d3 100644
--- a/src/client/app/common/views/components/profile-editor.vue
+++ b/src/client/app/common/views/components/profile-editor.vue
@@ -1,6 +1,6 @@
<template>
<ui-card>
- <div slot="title">%fa:user% %i18n:@title%</div>
+ <div slot="title"><fa icon="user"/> %i18n:@title%</div>
<section class="fit-top">
<ui-form :disabled="saving">
@@ -16,12 +16,12 @@
<ui-input v-model="location">
<span>%i18n:@location%</span>
- <span slot="prefix">%fa:map-marker-alt%</span>
+ <span slot="prefix"><fa icon="map-marker-alt"/></span>
</ui-input>
<ui-input v-model="birthday" type="date">
<span>%i18n:@birthday%</span>
- <span slot="prefix">%fa:birthday-cake%</span>
+ <span slot="prefix"><fa icon="birthday-cake"/></span>
</ui-input>
<ui-textarea v-model="description" :max="500">
@@ -30,13 +30,13 @@
<ui-input type="file" @change="onAvatarChange">
<span>%i18n:@avatar%</span>
- <span slot="icon">%fa:image%</span>
+ <span slot="icon"><fa icon="image"/></span>
<span slot="text" v-if="avatarUploading">%i18n:@uploading%<mk-ellipsis/></span>
</ui-input>
<ui-input type="file" @change="onBannerChange">
<span>%i18n:@banner%</span>
- <span slot="icon">%fa:image%</span>
+ <span slot="icon"><fa icon="image"/></span>
<span slot="text" v-if="bannerUploading">%i18n:@uploading%<mk-ellipsis/></span>
</ui-input>
diff --git a/src/client/app/common/views/components/signin.vue b/src/client/app/common/views/components/signin.vue
index 0b81daf176..cd24cdd8d0 100644
--- a/src/client/app/common/views/components/signin.vue
+++ b/src/client/app/common/views/components/signin.vue
@@ -8,7 +8,7 @@
</ui-input>
<ui-input v-model="password" type="password" required styl="fill">
<span>%i18n:@password%</span>
- <span slot="prefix">%fa:lock%</span>
+ <span slot="prefix"><fa icon="lock"/></span>
</ui-input>
<ui-input v-if="user && user.twoFactorEnabled" v-model="token" type="number" required styl="fill"/>
<ui-button type="submit" :disabled="signing">{{ signing ? '%i18n:@signing-in%' : '%i18n:@signin%' }}</ui-button>
diff --git a/src/client/app/common/views/components/signup.vue b/src/client/app/common/views/components/signup.vue
index 8e06b13491..bc023b3393 100644
--- a/src/client/app/common/views/components/signup.vue
+++ b/src/client/app/common/views/components/signup.vue
@@ -3,36 +3,36 @@
<template v-if="meta">
<ui-input v-if="meta.disableRegistration" v-model="invitationCode" type="text" :autocomplete="Math.random()" spellcheck="false" required styl="fill">
<span>%i18n:@invitation-code%</span>
- <span slot="prefix">%fa:id-card-alt%</span>
+ <span slot="prefix"><fa icon="id-card-alt"/></span>
<p slot="text" v-html="'%i18n:@invitation-info%'.replace('{}', meta.maintainer.url)"></p>
</ui-input>
<ui-input v-model="username" type="text" pattern="^[a-zA-Z0-9_]{1,20}$" :autocomplete="Math.random()" spellcheck="false" required @input="onChangeUsername" styl="fill">
<span>%i18n:@username%</span>
<span slot="prefix">@</span>
<span slot="suffix">@{{ host }}</span>
- <p slot="text" v-if="usernameState == 'wait'" style="color:#999">%fa:spinner .pulse .fw% %i18n:@checking%</p>
- <p slot="text" v-if="usernameState == 'ok'" style="color:#3CB7B5">%fa:check .fw% %i18n:@available%</p>
- <p slot="text" v-if="usernameState == 'unavailable'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@unavailable%</p>
- <p slot="text" v-if="usernameState == 'error'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@error%</p>
- <p slot="text" v-if="usernameState == 'invalid-format'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@invalid-format%</p>
- <p slot="text" v-if="usernameState == 'min-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-short%</p>
- <p slot="text" v-if="usernameState == 'max-range'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@too-long%</p>
+ <p slot="text" v-if="usernameState == 'wait'" style="color:#999"><fa icon="spinner .pulse" fixed-width/> %i18n:@checking%</p>
+ <p slot="text" v-if="usernameState == 'ok'" style="color:#3CB7B5"><fa icon="check" fixed-width/> %i18n:@available%</p>
+ <p slot="text" v-if="usernameState == 'unavailable'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> %i18n:@unavailable%</p>
+ <p slot="text" v-if="usernameState == 'error'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> %i18n:@error%</p>
+ <p slot="text" v-if="usernameState == 'invalid-format'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> %i18n:@invalid-format%</p>
+ <p slot="text" v-if="usernameState == 'min-range'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> %i18n:@too-short%</p>
+ <p slot="text" v-if="usernameState == 'max-range'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> %i18n:@too-long%</p>
</ui-input>
<ui-input v-model="password" type="password" :autocomplete="Math.random()" required @input="onChangePassword" :with-password-meter="true" styl="fill">
<span>%i18n:@password%</span>
- <span slot="prefix">%fa:lock%</span>
+ <span slot="prefix"><fa icon="lock"/></span>
<div slot="text">
- <p slot="text" v-if="passwordStrength == 'low'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@weak-password%</p>
- <p slot="text" v-if="passwordStrength == 'medium'" style="color:#3CB7B5">%fa:check .fw% %i18n:@normal-password%</p>
- <p slot="text" v-if="passwordStrength == 'high'" style="color:#3CB7B5">%fa:check .fw% %i18n:@strong-password%</p>
+ <p slot="text" v-if="passwordStrength == 'low'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> %i18n:@weak-password%</p>
+ <p slot="text" v-if="passwordStrength == 'medium'" style="color:#3CB7B5"><fa icon="check" fixed-width/> %i18n:@normal-password%</p>
+ <p slot="text" v-if="passwordStrength == 'high'" style="color:#3CB7B5"><fa icon="check" fixed-width/> %i18n:@strong-password%</p>
</div>
</ui-input>
<ui-input v-model="retypedPassword" type="password" :autocomplete="Math.random()" required @input="onChangePasswordRetype" styl="fill">
<span>%i18n:@password% (%i18n:@retype%)</span>
- <span slot="prefix">%fa:lock%</span>
+ <span slot="prefix"><fa icon="lock"/></span>
<div slot="text">
- <p slot="text" v-if="passwordRetypeState == 'match'" style="color:#3CB7B5">%fa:check .fw% %i18n:@password-matched%</p>
- <p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161">%fa:exclamation-triangle .fw% %i18n:@password-not-matched%</p>
+ <p slot="text" v-if="passwordRetypeState == 'match'" style="color:#3CB7B5"><fa icon="check" fixed-width/> %i18n:@password-matched%</p>
+ <p slot="text" v-if="passwordRetypeState == 'not-match'" style="color:#FF1161"><fa icon="exclamation-triangle" fixed-width/> %i18n:@password-not-matched%</p>
</div>
</ui-input>
<div v-if="meta.recaptchaSitekey != null" class="g-recaptcha" :data-sitekey="meta.recaptchaSitekey" style="margin: 16px 0;"></div>
diff --git a/src/client/app/common/views/components/stream-indicator.vue b/src/client/app/common/views/components/stream-indicator.vue
index 12bf78f130..d639261fdc 100644
--- a/src/client/app/common/views/components/stream-indicator.vue
+++ b/src/client/app/common/views/components/stream-indicator.vue
@@ -1,15 +1,15 @@
<template>
<div class="mk-stream-indicator">
<p v-if="stream.state == 'initializing'">
- %fa:spinner .pulse%
+ <fa icon="spinner .pulse"/>
<span>%i18n:@connecting%<mk-ellipsis/></span>
</p>
<p v-if="stream.state == 'reconnecting'">
- %fa:spinner .pulse%
+ <fa icon="spinner .pulse"/>
<span>%i18n:@reconnecting%<mk-ellipsis/></span>
</p>
<p v-if="stream.state == 'connected'">
- %fa:check%
+ <fa icon="check"/>
<span>%i18n:@connected%</span>
</p>
</div>
@@ -80,7 +80,7 @@ export default Vue.extend({
display block
margin 0
- > [data-fa]
+ > [data-icon]
margin-right 0.25em
</style>
diff --git a/src/client/app/common/views/components/tag-cloud.vue b/src/client/app/common/views/components/tag-cloud.vue
index 5cc828082f..5a1768828c 100644
--- a/src/client/app/common/views/components/tag-cloud.vue
+++ b/src/client/app/common/views/components/tag-cloud.vue
@@ -1,7 +1,7 @@
<template>
<div class="jtivnzhfwquxpsfidertopbmwmchmnmo">
- <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
- <p class="empty" v-else-if="tags.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
+ <p class="fetching" v-if="fetching"><fa icon="spinner .pulse" fixed-width/>%i18n:common.loading%<mk-ellipsis/></p>
+ <p class="empty" v-else-if="tags.length == 0"><fa icon="exclamation-circle"/>%i18n:@empty%</p>
<div v-else>
<vue-word-cloud
:words="tags.slice(0, 20).map(x => [x.name, x.count])"
@@ -74,7 +74,7 @@ export default Vue.extend({
text-align center
color #aaa
- > [data-fa]
+ > [data-icon]
margin-right 4px
> div
diff --git a/src/client/app/common/views/components/theme.vue b/src/client/app/common/views/components/theme.vue
index c1c73b97cd..d4e8d155e9 100644
--- a/src/client/app/common/views/components/theme.vue
+++ b/src/client/app/common/views/components/theme.vue
@@ -25,7 +25,7 @@
</label>
<details class="creator">
- <summary>%fa:palette% %i18n:@create-a-theme%</summary>
+ <summary><fa icon="palette"/> %i18n:@create-a-theme%</summary>
<div>
<span>%i18n:@base-theme%:</span>
<ui-radio v-model="myThemeBase" value="light">%i18n:@base-theme-light%</ui-radio>
@@ -51,23 +51,23 @@
<div style="padding-bottom:8px;">%i18n:@text-color%:</div>
<color-picker v-model="myThemeText"/>
</div>
- <ui-button @click="preview()">%fa:eye% %i18n:@preview-created-theme%</ui-button>
- <ui-button primary @click="gen()">%fa:save R% %i18n:@save-created-theme%</ui-button>
+ <ui-button @click="preview()"><fa icon="eye"/> %i18n:@preview-created-theme%</ui-button>
+ <ui-button primary @click="gen()"><fa :icon="['far', 'save']"/> %i18n:@save-created-theme%</ui-button>
</details>
<details>
- <summary>%fa:download% %i18n:@install-a-theme%</summary>
- <ui-button @click="import_()">%fa:file-import% %i18n:@import%</ui-button>
+ <summary><fa icon="download"/> %i18n:@install-a-theme%</summary>
+ <ui-button @click="import_()"><fa icon="file-import"/> %i18n:@import%</ui-button>
<input ref="file" type="file" accept=".misskeytheme" style="display:none;" @change="onUpdateImportFile"/>
<p>%i18n:@import-by-code%:</p>
<ui-textarea v-model="installThemeCode">
<span>%i18n:@theme-code%</span>
</ui-textarea>
- <ui-button @click="() => install(this.installThemeCode)">%fa:check% %i18n:@install%</ui-button>
+ <ui-button @click="() => install(this.installThemeCode)"><fa icon="check"/> %i18n:@install%</ui-button>
</details>
<details>
- <summary>%fa:folder-open% %i18n:@manage-themes%</summary>
+ <summary><fa icon="folder-open"/> %i18n:@manage-themes%</summary>
<ui-select v-model="selectedThemeId" placeholder="%i18n:@select-theme%">
<optgroup label="%i18n:@builtin-themes%">
<option v-for="x in builtinThemes" :value="x.id" :key="x.id">{{ x.name }}</option>
@@ -89,8 +89,8 @@
<ui-textarea readonly :value="selectedThemeCode">
<span>%i18n:@theme-code%</span>
</ui-textarea>
- <ui-button @click="export_()" link :download="`${selectedTheme.name}.misskeytheme`" ref="export">%fa:box% %i18n:@export%</ui-button>
- <ui-button @click="uninstall()" v-if="!builtinThemes.some(t => t.id == selectedTheme.id)">%fa:trash-alt R% %i18n:@uninstall%</ui-button>
+ <ui-button @click="export_()" link :download="`${selectedTheme.name}.misskeytheme`" ref="export"><fa icon="box"/> %i18n:@export%</ui-button>
+ <ui-button @click="uninstall()" v-if="!builtinThemes.some(t => t.id == selectedTheme.id)"><fa :icon="['far', 'trash-alt']"/> %i18n:@uninstall%</ui-button>
</template>
</details>
</div>
diff --git a/src/client/app/common/views/components/trends.vue b/src/client/app/common/views/components/trends.vue
index 3d36d7449c..ea3f854c6e 100644
--- a/src/client/app/common/views/components/trends.vue
+++ b/src/client/app/common/views/components/trends.vue
@@ -1,7 +1,7 @@
<template>
<div class="csqvmxybqbycalfhkxvyfrgbrdalkaoc">
- <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
- <p class="empty" v-else-if="stats.length == 0">%fa:exclamation-circle%%i18n:@empty%</p>
+ <p class="fetching" v-if="fetching"><fa icon="spinner .pulse" fixed-width/>%i18n:common.loading%<mk-ellipsis/></p>
+ <p class="empty" v-else-if="stats.length == 0"><fa icon="exclamation-circle"/>%i18n:@empty%</p>
<!-- トランジションを有効にするとなぜかメモリリークする -->
<transition-group v-else tag="div" name="chart">
<div v-for="stat in stats" :key="stat.tag">
@@ -58,7 +58,7 @@ export default Vue.extend({
color var(--text)
opacity 0.7
- > [data-fa]
+ > [data-icon]
margin-right 4px
> div
diff --git a/src/client/app/common/views/components/ui/info.vue b/src/client/app/common/views/components/ui/info.vue
index 3d62a3c7aa..30fd8cb344 100644
--- a/src/client/app/common/views/components/ui/info.vue
+++ b/src/client/app/common/views/components/ui/info.vue
@@ -1,7 +1,7 @@
<template>
<div class="ymxyweixqwsxauxldgpvecjepnwxbylu" :class="{ warn }">
- <i v-if="warn">%fa:exclamation-triangle%</i>
- <i v-else>%fa:info-circle%</i>
+ <i v-if="warn"><fa icon="exclamation-triangle"/></i>
+ <i v-else><fa icon="info-circle"/></i>
<slot></slot>
</div>
</template>
diff --git a/src/client/app/common/views/components/uploader.vue b/src/client/app/common/views/components/uploader.vue
index b812064bbb..67ad7ecc99 100644
--- a/src/client/app/common/views/components/uploader.vue
+++ b/src/client/app/common/views/components/uploader.vue
@@ -3,7 +3,7 @@
<ol v-if="uploads.length > 0">
<li v-for="ctx in uploads" :key="ctx.id">
<div class="img" :style="{ backgroundImage: `url(${ ctx.img })` }"></div>
- <p class="name">%fa:spinner .pulse%{{ ctx.name }}</p>
+ <p class="name"><fa icon="spinner .pulse"/>{{ ctx.name }}</p>
<p class="status">
<span class="initing" v-if="ctx.progress == undefined">%i18n:@waiting%<mk-ellipsis/></span>
<span class="kb" v-if="ctx.progress != undefined">{{ String(Math.floor(ctx.progress.value / 1024)).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') }}<i>KB</i> / {{ String(Math.floor(ctx.progress.max / 1024)).replace(/(\d)(?=(\d\d\d)+(?!\d))/g, '$1,') }}<i>KB</i></span>
@@ -155,7 +155,7 @@ export default Vue.extend({
text-overflow ellipsis
overflow hidden
- > [data-fa]
+ > [data-icon]
margin-right 4px
> .status
diff --git a/src/client/app/common/views/components/url.vue b/src/client/app/common/views/components/url.vue
index 04a1f30135..8698cb4a06 100644
--- a/src/client/app/common/views/components/url.vue
+++ b/src/client/app/common/views/components/url.vue
@@ -6,7 +6,7 @@
<span class="pathname" v-if="pathname != ''">{{ pathname }}</span>
<span class="query">{{ query }}</span>
<span class="hash">{{ hash }}</span>
- %fa:external-link-square-alt%
+ <fa icon="external-link-square-alt"/>
</a>
</template>
@@ -40,7 +40,7 @@ export default Vue.extend({
<style lang="stylus" scoped>
.mk-url
word-break break-all
- > [data-fa]
+ > [data-icon]
padding-left 2px
font-size .9em
font-weight 400
diff --git a/src/client/app/common/views/components/visibility-chooser.vue b/src/client/app/common/views/components/visibility-chooser.vue
index 02f33bfbc0..62ec9c35e8 100644
--- a/src/client/app/common/views/components/visibility-chooser.vue
+++ b/src/client/app/common/views/components/visibility-chooser.vue
@@ -3,34 +3,34 @@
<div class="backdrop" ref="backdrop" @click="close"></div>
<div class="popover" :class="{ compact }" ref="popover">
<div @click="choose('public')" :class="{ active: v == 'public' }">
- <div>%fa:globe%</div>
+ <div><fa icon="globe"/></div>
<div>
<span>%i18n:@public%</span>
</div>
</div>
<div @click="choose('home')" :class="{ active: v == 'home' }">
- <div>%fa:home%</div>
+ <div><fa icon="home"/></div>
<div>
<span>%i18n:@home%</span>
<span>%i18n:@home-desc%</span>
</div>
</div>
<div @click="choose('followers')" :class="{ active: v == 'followers' }">
- <div>%fa:unlock%</div>
+ <div><fa icon="unlock"/></div>
<div>
<span>%i18n:@followers%</span>
<span>%i18n:@followers-desc%</span>
</div>
</div>
<div @click="choose('specified')" :class="{ active: v == 'specified' }">
- <div>%fa:envelope%</div>
+ <div><fa icon="envelope"/></div>
<div>
<span>%i18n:@specified%</span>
<span>%i18n:@specified-desc%</span>
</div>
</div>
<div @click="choose('private')" :class="{ active: v == 'private' }">
- <div>%fa:lock%</div>
+ <div><fa icon="lock"/></div>
<div>
<span>%i18n:@private%</span>
</div>
diff --git a/src/client/app/common/views/pages/follow.vue b/src/client/app/common/views/pages/follow.vue
index 92f24fb538..b800d65d14 100644
--- a/src/client/app/common/views/pages/follow.vue
+++ b/src/client/app/common/views/pages/follow.vue
@@ -19,13 +19,13 @@
@click="onClick"
:disabled="followWait">
<template v-if="!followWait">
- <template v-if="user.hasPendingFollowRequestFromYou && user.isLocked">%fa:hourglass-half% %i18n:@request-pending%</template>
- <template v-else-if="user.hasPendingFollowRequestFromYou && !user.isLocked">%fa:hourglass-start% %i18n:@follow-processing%</template>
- <template v-else-if="user.isFollowing">%fa:minus% %i18n:@following%</template>
- <template v-else-if="!user.isFollowing && user.isLocked">%fa:plus% %i18n:@follow-request%</template>
- <template v-else-if="!user.isFollowing && !user.isLocked">%fa:plus% %i18n:@follow%</template>
+ <template v-if="user.hasPendingFollowRequestFromYou && user.isLocked"><fa icon="hourglass-half"/> %i18n:@request-pending%</template>
+ <template v-else-if="user.hasPendingFollowRequestFromYou && !user.isLocked"><fa icon="hourglass-start"/> %i18n:@follow-processing%</template>
+ <template v-else-if="user.isFollowing"><fa icon="minus"/> %i18n:@following%</template>
+ <template v-else-if="!user.isFollowing && user.isLocked"><fa icon="plus"/> %i18n:@follow-request%</template>
+ <template v-else-if="!user.isFollowing && !user.isLocked"><fa icon="plus"/> %i18n:@follow%</template>
</template>
- <template v-else>%fa:spinner .pulse .fw%</template>
+ <template v-else><fa icon="spinner .pulse" fixed-width/></template>
</button>
</div>
</template>
diff --git a/src/client/app/common/views/widgets/donation.vue b/src/client/app/common/views/widgets/donation.vue
index b025b41e7d..4ef1557f97 100644
--- a/src/client/app/common/views/widgets/donation.vue
+++ b/src/client/app/common/views/widgets/donation.vue
@@ -2,7 +2,7 @@
<div>
<mk-widget-container :show-header="false">
<article class="dolfvtibguprpxxhfndqaosjitixjohx">
- <h1>%fa:heart%%i18n:@title%</h1>
+ <h1><fa icon="heart"/>%i18n:@title%</h1>
<p v-if="meta">
{{ '%i18n:@text%'.substr(0, '%i18n:@text%'.indexOf('{')) }}
<a :href="meta.maintainer.url">{{ meta.maintainer.name }}</a>
@@ -41,7 +41,7 @@ export default define({
margin 0 0 5px 0
font-size 1em
- > [data-fa]
+ > [data-icon]
margin-right 0.25em
> p
diff --git a/src/client/app/common/views/widgets/hashtags.vue b/src/client/app/common/views/widgets/hashtags.vue
index 0cb6b2df10..656c683171 100644
--- a/src/client/app/common/views/widgets/hashtags.vue
+++ b/src/client/app/common/views/widgets/hashtags.vue
@@ -1,7 +1,7 @@
<template>
<div class="mkw-hashtags">
<mk-widget-container :show-header="!props.compact">
- <template slot="header">%fa:hashtag%%i18n:@title%</template>
+ <template slot="header"><fa icon="hashtag"/>%i18n:@title%</template>
<div class="mkw-hashtags--body" :data-mobile="platform == 'mobile'">
<mk-trends/>
diff --git a/src/client/app/common/views/widgets/memo.vue b/src/client/app/common/views/widgets/memo.vue
index be8b18a4e9..07d0c58345 100644
--- a/src/client/app/common/views/widgets/memo.vue
+++ b/src/client/app/common/views/widgets/memo.vue
@@ -1,7 +1,7 @@
<template>
<div class="mkw-memo">
<mk-widget-container :show-header="!props.compact">
- <template slot="header">%fa:R sticky-note%%i18n:@title%</template>
+ <template slot="header"><fa :icon="['far', 'sticky-note']"/>%i18n:@title%</template>
<div class="mkw-memo--body">
<textarea v-model="text" placeholder="%i18n:@memo%" @input="onChange"></textarea>
diff --git a/src/client/app/common/views/widgets/photo-stream.vue b/src/client/app/common/views/widgets/photo-stream.vue
index fd711b2761..9c6ce129b7 100644
--- a/src/client/app/common/views/widgets/photo-stream.vue
+++ b/src/client/app/common/views/widgets/photo-stream.vue
@@ -1,9 +1,9 @@
<template>
<div class="mkw-photo-stream" :class="$style.root" :data-melt="props.design == 2">
<mk-widget-container :show-header="props.design == 0" :naked="props.design == 2">
- <template slot="header">%fa:camera%%i18n:@title%</template>
+ <template slot="header"><fa icon="camera"/>%i18n:@title%</template>
- <p :class="$style.fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
+ <p :class="$style.fetching" v-if="fetching"><fa icon="spinner .pulse" fixed-width/>%i18n:common.loading%<mk-ellipsis/></p>
<div :class="$style.stream" v-if="!fetching && images.length > 0">
<div v-for="image in images" :class="$style.img" :style="`background-image: url(${image.thumbnailUrl || image.url})`"></div>
</div>
@@ -94,7 +94,7 @@ export default define({
text-align center
color #aaa
- > [data-fa]
+ > [data-icon]
margin-right 4px
</style>
diff --git a/src/client/app/common/views/widgets/posts-monitor.vue b/src/client/app/common/views/widgets/posts-monitor.vue
index c62533d1ee..4527489f52 100644
--- a/src/client/app/common/views/widgets/posts-monitor.vue
+++ b/src/client/app/common/views/widgets/posts-monitor.vue
@@ -1,8 +1,8 @@
<template>
<div class="mkw-posts-monitor">
<mk-widget-container :show-header="props.design == 0" :naked="props.design == 2">
- <template slot="header">%fa:chart-line%%i18n:@title%</template>
- <button slot="func" @click="toggle" title="%i18n:@toggle%">%fa:sort%</button>
+ <template slot="header"><fa icon="chart-line"/>%i18n:@title%</template>
+ <button slot="func" @click="toggle" title="%i18n:@toggle%"><fa icon="sort"/></button>
<div class="qpdmibaztplkylerhdbllwcokyrfxeyj" :class="{ dual: props.view == 0 }">
<svg :viewBox="`0 0 ${ viewBoxX } ${ viewBoxY }`" v-show="props.view != 2">
diff --git a/src/client/app/common/views/widgets/rss.vue b/src/client/app/common/views/widgets/rss.vue
index 68ab8e3a57..2fc97c8043 100644
--- a/src/client/app/common/views/widgets/rss.vue
+++ b/src/client/app/common/views/widgets/rss.vue
@@ -1,11 +1,11 @@
<template>
<div class="mkw-rss">
<mk-widget-container :show-header="!props.compact">
- <template slot="header">%fa:rss-square%RSS</template>
- <button slot="func" title="設定" @click="setting">%fa:cog%</button>
+ <template slot="header"><fa icon="rss-square"/>RSS</template>
+ <button slot="func" title="設定" @click="setting"><fa icon="cog"/></button>
<div class="mkw-rss--body" :data-mobile="platform == 'mobile'">
- <p class="fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
+ <p class="fetching" v-if="fetching"><fa icon="spinner .pulse" fixed-width/>%i18n:common.loading%<mk-ellipsis/></p>
<div class="feed" v-else>
<a v-for="item in items" :href="item.link" target="_blank">{{ item.title }}</a>
</div>
@@ -85,7 +85,7 @@ export default define({
text-align center
color #aaa
- > [data-fa]
+ > [data-icon]
margin-right 4px
&[data-mobile]
diff --git a/src/client/app/common/views/widgets/server.cpu.vue b/src/client/app/common/views/widgets/server.cpu.vue
index 2034aee0eb..986577c51f 100644
--- a/src/client/app/common/views/widgets/server.cpu.vue
+++ b/src/client/app/common/views/widgets/server.cpu.vue
@@ -2,7 +2,7 @@
<div class="cpu">
<x-pie class="pie" :value="usage"/>
<div>
- <p>%fa:microchip%CPU</p>
+ <p><fa icon="microchip"/>CPU</p>
<p>{{ meta.cpu.cores }} Cores</p>
<p>{{ meta.cpu.model }}</p>
</div>
@@ -57,7 +57,7 @@ export default Vue.extend({
&:first-child
font-weight bold
- > [data-fa]
+ > [data-icon]
margin-right 4px
&:after
diff --git a/src/client/app/common/views/widgets/server.disk.vue b/src/client/app/common/views/widgets/server.disk.vue
index 667576ab76..039c4f5c29 100644
--- a/src/client/app/common/views/widgets/server.disk.vue
+++ b/src/client/app/common/views/widgets/server.disk.vue
@@ -2,7 +2,7 @@
<div class="disk">
<x-pie class="pie" :value="usage"/>
<div>
- <p>%fa:R hdd%Storage</p>
+ <p><fa :icon="['far', 'hdd']"/>Storage</p>
<p>Total: {{ total | bytes(1) }}</p>
<p>Free: {{ available | bytes(1) }}</p>
<p>Used: {{ used | bytes(1) }}</p>
@@ -65,7 +65,7 @@ export default Vue.extend({
&:first-child
font-weight bold
- > [data-fa]
+ > [data-icon]
margin-right 4px
&:after
diff --git a/src/client/app/common/views/widgets/server.memory.vue b/src/client/app/common/views/widgets/server.memory.vue
index 9e12884cf9..d7ad04b08f 100644
--- a/src/client/app/common/views/widgets/server.memory.vue
+++ b/src/client/app/common/views/widgets/server.memory.vue
@@ -2,7 +2,7 @@
<div class="memory">
<x-pie class="pie" :value="usage"/>
<div>
- <p>%fa:flask%Memory</p>
+ <p><fa icon="flask"/>Memory</p>
<p>Total: {{ total | bytes(1) }}</p>
<p>Used: {{ used | bytes(1) }}</p>
<p>Free: {{ free | bytes(1) }}</p>
@@ -65,7 +65,7 @@ export default Vue.extend({
&:first-child
font-weight bold
- > [data-fa]
+ > [data-icon]
margin-right 4px
&:after
diff --git a/src/client/app/common/views/widgets/server.vue b/src/client/app/common/views/widgets/server.vue
index 62d75e2bf6..18c2af1e4b 100644
--- a/src/client/app/common/views/widgets/server.vue
+++ b/src/client/app/common/views/widgets/server.vue
@@ -1,10 +1,10 @@
<template>
<div class="mkw-server">
<mk-widget-container :show-header="props.design == 0" :naked="props.design == 2">
- <template slot="header">%fa:server%%i18n:@title%</template>
- <button slot="func" @click="toggle" title="%i18n:@toggle%">%fa:sort%</button>
+ <template slot="header"><fa icon="server"/>%i18n:@title%</template>
+ <button slot="func" @click="toggle" title="%i18n:@toggle%"><fa icon="sort"/></button>
- <p :class="$style.fetching" v-if="fetching">%fa:spinner .pulse .fw%%i18n:common.loading%<mk-ellipsis/></p>
+ <p :class="$style.fetching" v-if="fetching"><fa icon="spinner .pulse" fixed-width/>%i18n:common.loading%<mk-ellipsis/></p>
<template v-if="!fetching">
<x-cpu-memory v-show="props.view == 0" :connection="connection"/>
<x-cpu v-show="props.view == 1" :connection="connection" :meta="meta"/>
@@ -87,7 +87,7 @@ export default define({
text-align center
color #aaa
- > [data-fa]
+ > [data-icon]
margin-right 4px
</style>
diff --git a/src/client/app/common/views/widgets/tips.vue b/src/client/app/common/views/widgets/tips.vue
index 7bb11d4656..3ed6548801 100644
--- a/src/client/app/common/views/widgets/tips.vue
+++ b/src/client/app/common/views/widgets/tips.vue
@@ -1,6 +1,6 @@
<template>
<div class="mkw-tips">
- <p ref="tip">%fa:R lightbulb%<span v-html="tip"></span></p>
+ <p ref="tip"><fa :icon="['far', 'lightbulb']"/><span v-html="tip"></span></p>
</div>
</template>
@@ -88,7 +88,7 @@ export default define({
font-size 0.7em
color #999
- > [data-fa]
+ > [data-icon]
margin-right 4px
kbd