From 99fd096ddd1cc657a86c41e7e96344b8bb1dc4de Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Sat, 9 Nov 2019 19:53:03 -0600 Subject: boot: track whether private mode is enabled or not --- src/boot/after_store.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'src') diff --git a/src/boot/after_store.js b/src/boot/after_store.js index 226b67d8..cbe0c330 100644 --- a/src/boot/after_store.js +++ b/src/boot/after_store.js @@ -218,6 +218,9 @@ const getNodeInfo = async ({ store }) => { store.dispatch('setInstanceOption', { name: 'backendVersion', value: software.version }) store.dispatch('setInstanceOption', { name: 'pleromaBackend', value: software.name === 'pleroma' }) + const priv = metadata.private + store.dispatch('setInstanceOption', { name: 'private', value: priv }) + const frontendVersion = window.___pleromafe_commit_hash store.dispatch('setInstanceOption', { name: 'frontendVersion', value: frontendVersion }) store.dispatch('setInstanceOption', { name: 'tagPolicyAvailable', value: metadata.federation.mrf_policies.includes('TagPolicy') }) -- cgit v1.2.3-70-g09d2 From 21f1637e437398ec56b6078cf28b58bd4a0299ba Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Mon, 11 Nov 2019 14:14:44 -0600 Subject: nav panel: refactor to use vuex mapState --- src/components/nav_panel/nav_panel.js | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js index aa3f7605..bfcab62e 100644 --- a/src/components/nav_panel/nav_panel.js +++ b/src/components/nav_panel/nav_panel.js @@ -1,4 +1,5 @@ import followRequestFetcher from '../../services/follow_request_fetcher/follow_request_fetcher.service' +import { mapState } from 'vuex' const NavPanel = { created () { @@ -9,17 +10,11 @@ const NavPanel = { followRequestFetcher.startFetching({ store, credentials }) } }, - computed: { - currentUser () { - return this.$store.state.users.currentUser - }, - chat () { - return this.$store.state.chat.channel - }, - followRequestCount () { - return this.$store.state.api.followRequests.length - } - } + computed: mapState({ + currentUser: state => state.users.currentUser, + chat: state => state.chat.channel, + followRequestCount: state => state.api.followRequests.length + }) } export default NavPanel -- cgit v1.2.3-70-g09d2 From 1f9674350cdf7455fe5540d377eb327edf1336ce Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Mon, 11 Nov 2019 14:18:36 -0600 Subject: nav panel: disable TWKN if federation disabled, disable Public and TWKN if privateMode is enabled --- src/components/nav_panel/nav_panel.js | 4 +++- src/components/nav_panel/nav_panel.vue | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/components/nav_panel/nav_panel.js b/src/components/nav_panel/nav_panel.js index bfcab62e..a6426d13 100644 --- a/src/components/nav_panel/nav_panel.js +++ b/src/components/nav_panel/nav_panel.js @@ -13,7 +13,9 @@ const NavPanel = { computed: mapState({ currentUser: state => state.users.currentUser, chat: state => state.chat.channel, - followRequestCount: state => state.api.followRequests.length + followRequestCount: state => state.api.followRequests.length, + privateMode: state => state.instance.private, + federating: state => state.instance.federationPolicy.federating || true }) } diff --git a/src/components/nav_panel/nav_panel.vue b/src/components/nav_panel/nav_panel.vue index 28589bb1..d85c28bd 100644 --- a/src/components/nav_panel/nav_panel.vue +++ b/src/components/nav_panel/nav_panel.vue @@ -28,12 +28,12 @@ -
  • +
  • {{ $t("nav.public_tl") }}
  • -
  • +
  • {{ $t("nav.twkn") }} -- cgit v1.2.3-70-g09d2 From cb5f73148a2dc9341d16326ed606d74e818fb61d Mon Sep 17 00:00:00 2001 From: Ariadne Conill Date: Mon, 11 Nov 2019 14:25:38 -0600 Subject: app: search API is not available in private mode so disable it --- src/App.js | 3 ++- src/App.vue | 1 + 2 files changed, 3 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/App.js b/src/App.js index 04a40e30..e2b0e6db 100644 --- a/src/App.js +++ b/src/App.js @@ -97,7 +97,8 @@ export default { this.$store.state.instance.instanceSpecificPanelContent }, showFeaturesPanel () { return this.$store.state.instance.showFeaturesPanel }, - isMobileLayout () { return this.$store.state.interface.mobileLayout } + isMobileLayout () { return this.$store.state.interface.mobileLayout }, + privateMode () { return this.$store.state.instance.private } }, methods: { scrollToTop () { diff --git a/src/App.vue b/src/App.vue index dbe842ec..1f244b56 100644 --- a/src/App.vue +++ b/src/App.vue @@ -43,6 +43,7 @@ class="nav-icon mobile-hidden" @toggled="onSearchBarToggled" @click.stop.native + v-if="currentUser || !privateMode" /> Date: Mon, 11 Nov 2019 14:37:14 -0600 Subject: side drawer: same treatment --- src/components/side_drawer/side_drawer.js | 6 ++++++ src/components/side_drawer/side_drawer.vue | 6 +++--- 2 files changed, 9 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/components/side_drawer/side_drawer.js b/src/components/side_drawer/side_drawer.js index 567d2e5e..2725d43a 100644 --- a/src/components/side_drawer/side_drawer.js +++ b/src/components/side_drawer/side_drawer.js @@ -34,6 +34,12 @@ const SideDrawer = { }, followRequestCount () { return this.$store.state.api.followRequests.length + }, + privateMode () { + return this.$store.state.instance.private + }, + federating () { + return this.$store.state.instance.federationPolicy.federating || true } }, methods: { diff --git a/src/components/side_drawer/side_drawer.vue b/src/components/side_drawer/side_drawer.vue index 214b8e0c..be18a5d7 100644 --- a/src/components/side_drawer/side_drawer.vue +++ b/src/components/side_drawer/side_drawer.vue @@ -79,12 +79,12 @@
  • -
  • +
  • {{ $t("nav.public_tl") }}
  • -
  • +
  • {{ $t("nav.twkn") }} @@ -99,7 +99,7 @@
    • -
    • +
    • {{ $t("nav.search") }} -- cgit v1.2.3-70-g09d2 From d0075026290c90d8406c7ac81413259a8ae58ec7 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Fri, 15 Nov 2019 08:39:21 +0200 Subject: add fetching for emoji reactions, draft design --- src/components/conversation/conversation.js | 1 + src/components/status/status.js | 6 +++++ src/components/status/status.vue | 28 ++++++++++++++++++++++ src/modules/statuses.js | 14 ++++++++++- src/services/api/api.service.js | 6 +++++ .../backend_interactor_service.js | 2 ++ 6 files changed, 56 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js index 72ee9c39..715804ff 100644 --- a/src/components/conversation/conversation.js +++ b/src/components/conversation/conversation.js @@ -149,6 +149,7 @@ const conversation = { if (!id) return this.highlight = id this.$store.dispatch('fetchFavsAndRepeats', id) + this.$store.dispatch('fetchEmojiReactions', id) }, getHighlight () { return this.isExpanded ? this.highlight : null diff --git a/src/components/status/status.js b/src/components/status/status.js index 4fbd5ac3..8268e615 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -278,6 +278,12 @@ const Status = { hidePostStats () { return this.mergedConfig.hidePostStats }, + emojiReactions () { + return { + '🀔': [{ 'id': 'xyz..' }, { 'id': 'zyx...' }], + '🐻': [{ 'id': 'abc...' }] + } + }, ...mapGetters(['mergedConfig']) }, components: { diff --git a/src/components/status/status.vue b/src/components/status/status.vue index 65778b2e..aae58a5e 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -354,6 +354,17 @@ +
      + +
      +
      currentUser.id === id) }, + addEmojiReactions (state, { id, emojiReactions, currentUser }) { + const status = state.allStatusesObject[id] + status.emojiReactions = emojiReactions + status.reactedWithEmoji = findKey(emojiReactions, { id: currentUser.id }) + }, updateStatusWithPoll (state, { id, poll }) { const status = state.allStatusesObject[id] status.poll = poll @@ -611,6 +616,13 @@ const statuses = { commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser }) }) }, + fetchEmojiReactions ({ rootState, commit }, id) { + rootState.api.backendInteractor.fetchEmojiReactions(id).then( + emojiReactions => { + commit('addEmojiReactions', { id, emojiReactions, currentUser: rootState.users.currentUser }) + } + ) + }, fetchFavs ({ rootState, commit }, id) { rootState.api.backendInteractor.fetchFavoritedByUsers(id) .then(favoritedByUsers => commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser })) diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 8f5eb416..7ef4b74a 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -71,6 +71,7 @@ const MASTODON_MUTE_CONVERSATION = id => `/api/v1/statuses/${id}/mute` const MASTODON_UNMUTE_CONVERSATION = id => `/api/v1/statuses/${id}/unmute` const MASTODON_SEARCH_2 = `/api/v2/search` const MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search' +const PLEROMA_EMOJI_REACTIONS_URL = id => `/api/v1/pleroma/statuses/${id}/emoji_reactions_by` const oldfetch = window.fetch @@ -864,6 +865,10 @@ const fetchRebloggedByUsers = ({ id }) => { return promisedRequest({ url: MASTODON_STATUS_REBLOGGEDBY_URL(id) }).then((users) => users.map(parseUser)) } +const fetchEmojiReactions = ({ id }) => { + return promisedRequest({ url: PLEROMA_EMOJI_REACTIONS_URL(id) }) +} + const reportUser = ({ credentials, userId, statusIds, comment, forward }) => { return promisedRequest({ url: MASTODON_REPORT_USER_URL, @@ -997,6 +1002,7 @@ const apiService = { fetchPoll, fetchFavoritedByUsers, fetchRebloggedByUsers, + fetchEmojiReactions, reportUser, updateNotificationSettings, search2, diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index d6617276..52234fcc 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -143,6 +143,7 @@ const backendInteractorService = credentials => { const fetchFavoritedByUsers = (id) => apiService.fetchFavoritedByUsers({ id }) const fetchRebloggedByUsers = (id) => apiService.fetchRebloggedByUsers({ id }) + const fetchEmojiReactions = (id) => apiService.fetchEmojiReactions({ id }) const reportUser = (params) => apiService.reportUser({ credentials, ...params }) const favorite = (id) => apiService.favorite({ id, credentials }) @@ -210,6 +211,7 @@ const backendInteractorService = credentials => { fetchPoll, fetchFavoritedByUsers, fetchRebloggedByUsers, + fetchEmojiReactions, reportUser, favorite, unfavorite, -- cgit v1.2.3-70-g09d2 From de945ba3e9470b28dd010fb32f658b42053f19d3 Mon Sep 17 00:00:00 2001 From: Shpuld Shpuldson Date: Fri, 15 Nov 2019 16:29:25 +0200 Subject: wip commit, add basic popover for emoji reaction select --- src/components/react_button/react_button.js | 50 ++++++++++++++++++ src/components/react_button/react_button.vue | 78 ++++++++++++++++++++++++++++ src/components/status/status.js | 2 + src/components/status/status.vue | 10 ++-- src/i18n/en.json | 1 + 5 files changed, 138 insertions(+), 3 deletions(-) create mode 100644 src/components/react_button/react_button.js create mode 100644 src/components/react_button/react_button.vue (limited to 'src') diff --git a/src/components/react_button/react_button.js b/src/components/react_button/react_button.js new file mode 100644 index 00000000..d1d15d93 --- /dev/null +++ b/src/components/react_button/react_button.js @@ -0,0 +1,50 @@ +import { mapGetters } from 'vuex' + +const ReactButton = { + props: ['status', 'loggedIn'], + data () { + return { + animated: false, + showTooltip: false, + popperOptions: { + modifiers: { + preventOverflow: { padding: { top: 50 }, boundariesElement: 'viewport' } + } + } + } + }, + methods: { + openReactionSelect () { + console.log('test') + this.showTooltip = true + }, + closeReactionSelect () { + this.showTooltip = false + }, + favorite () { + if (!this.status.favorited) { + this.$store.dispatch('favorite', { id: this.status.id }) + } else { + this.$store.dispatch('unfavorite', { id: this.status.id }) + } + this.animated = true + setTimeout(() => { + this.animated = false + }, 500) + } + }, + computed: { + emojis () { + return this.$store.state.instance.emoji || [] + }, + classes () { + return { + 'icon-smile': true, + 'animate-spin': this.animated + } + }, + ...mapGetters(['mergedConfig']) + } +} + +export default ReactButton diff --git a/src/components/react_button/react_button.vue b/src/components/react_button/react_button.vue new file mode 100644 index 00000000..93638770 --- /dev/null +++ b/src/components/react_button/react_button.vue @@ -0,0 +1,78 @@ + + + + + diff --git a/src/components/status/status.js b/src/components/status/status.js index 8268e615..8c6fc0cf 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -1,5 +1,6 @@ import Attachment from '../attachment/attachment.vue' import FavoriteButton from '../favorite_button/favorite_button.vue' +import ReactButton from '../react_button/react_button.vue' import RetweetButton from '../retweet_button/retweet_button.vue' import Poll from '../poll/poll.vue' import ExtraButtons from '../extra_buttons/extra_buttons.vue' @@ -289,6 +290,7 @@ const Status = { components: { Attachment, FavoriteButton, + ReactButton, RetweetButton, ExtraButtons, PostStatusForm, diff --git a/src/components/status/status.vue b/src/components/status/status.vue index aae58a5e..d455ccf6 100644 --- a/src/components/status/status.vue +++ b/src/components/status/status.vue @@ -356,12 +356,12 @@
      @@ -393,6 +393,10 @@ :logged-in="loggedIn" :status="status" /> + Date: Tue, 19 Nov 2019 17:02:45 +0000 Subject: [i18n] Improve easy/pedantic Japanese switching --- src/i18n/ja.json | 639 ---------------------------------------------- src/i18n/ja_pedantic.json | 639 ++++++++++++++++++++++++++++++++++++++++++++++ src/i18n/messages.js | 2 +- 3 files changed, 640 insertions(+), 640 deletions(-) delete mode 100644 src/i18n/ja.json create mode 100644 src/i18n/ja_pedantic.json (limited to 'src') diff --git a/src/i18n/ja.json b/src/i18n/ja.json deleted file mode 100644 index 2ca7dca8..00000000 --- a/src/i18n/ja.json +++ /dev/null @@ -1,639 +0,0 @@ -{ - "chat": { - "title": "チャット" - }, - "exporter": { - "export": "゚クスポヌト", - "processing": "凊理䞭です。凊理が完了するず、ファむルをダりンロヌドするよう指瀺がありたす。" - }, - "features_panel": { - "chat": "チャット", - "gopher": "Gopher", - "media_proxy": "メディアプロクシ", - "scope_options": "公開範囲遞択", - "text_limit": "文字の数", - "title": "有効な機胜", - "who_to_follow": "おすすめナヌザヌ" - }, - "finder": { - "error_fetching_user": "ナヌザヌ怜玢が゚ラヌになりたした。", - "find_user": "ナヌザヌを探す" - }, - "general": { - "apply": "適甚", - "submit": "送信", - "more": "続き", - "generic_error": "゚ラヌになりたした", - "optional": "省略可", - "show_more": "もっず芋る", - "show_less": "たたむ", - "cancel": "キャンセル", - "disable": "無効", - "enable": "有効", - "confirm": "確認", - "verify": "怜査" - }, - "image_cropper": { - "crop_picture": "画像を切り抜く", - "save": "保存", - "save_without_cropping": "切り抜かずに保存", - "cancel": "キャンセル" - }, - "importer": { - "submit": "送信", - "success": "正垞にむンポヌトされたした。", - "error": "このファむルをむンポヌトするずき、゚ラヌが発生したした。" - }, - "login": { - "login": "ログむン", - "description": "OAuthでログむン", - "logout": "ログアりト", - "password": "パスワヌド", - "placeholder": "䟋: lain", - "register": "登録", - "username": "ナヌザヌ名", - "hint": "䌚話に加わるには、ログむンしおください", - "authentication_code": "認蚌コヌド", - "enter_recovery_code": "リカバリヌコヌドを入力しおください", - "enter_two_factor_code": "2段階認蚌コヌドを入力しおください", - "recovery_code": "リカバリヌコヌド", - "heading" : { - "totp" : "2段階認蚌", - "recovery" : "2段階リカバリヌ" - } - }, - "media_modal": { - "previous": "前", - "next": "次" - }, - "nav": { - "about": "このむンスタンスに぀いお", - "back": "戻る", - "chat": "ロヌカルチャット", - "friend_requests": "フォロヌリク゚スト", - "mentions": "通知", - "interactions": "むンタラクション", - "dms": "ダむレクトメッセヌゞ", - "public_tl": "パブリックタむムラむン", - "timeline": "タむムラむン", - "twkn": "接続しおいるすべおのネットワヌク", - "user_search": "ナヌザヌを探す", - "search": "怜玢", - "who_to_follow": "おすすめナヌザヌ", - "preferences": "蚭定" - }, - "notifications": { - "broken_favorite": "ステヌタスが芋぀かりたせん。探しおいたす...", - "favorited_you": "あなたのステヌタスがお気に入りされたした", - "followed_you": "フォロヌされたした", - "load_older": "叀い通知をみる", - "notifications": "通知", - "read": "読んだ", - "repeated_you": "あなたのステヌタスがリピヌトされたした", - "no_more_notifications": "通知はありたせん" - }, - "polls": { - "add_poll": "投祚を远加", - "add_option": "遞択肢を远加", - "option": "遞択肢", - "votes": "祚", - "vote": "投祚", - "type": "投祚の圢匏", - "single_choice": "択䞀匏", - "multiple_choices": "耇数遞択匏", - "expiry": "投祚期間", - "expires_in": "投祚は {0} で終了したす", - "expired": "投祚は {0} 前に終了したした", - "not_enough_options": "盞異なる遞択肢が䞍足しおいたす" - }, - "emoji": { - "stickers": "ステッカヌ", - "emoji": "絵文字", - "keep_open": "ピッカヌを開いたたたにする", - "search_emoji": "絵文字を怜玢", - "add_emoji": "絵文字を挿入", - "custom": "カスタム絵文字", - "unicode": "Unicode絵文字" - }, - "stickers": { - "add_sticker": "ステッカヌを远加" - }, - "interactions": { - "favs_repeats": "リピヌトずお気に入り", - "follows": "新しいフォロワヌ", - "load_older": "叀いむンタラクションを芋る" - }, - "post_status": { - "new_status": "投皿する", - "account_not_locked_warning": "あなたのアカりントは {0} ではありたせん。あなたをフォロヌすれば、誰でも、フォロワヌ限定のステヌタスを読むこずができたす。", - "account_not_locked_warning_link": "ロックされたアカりント", - "attachments_sensitive": "ファむルをNSFWにする", - "content_type": { - "text/plain": "プレヌンテキスト", - "text/html": "HTML", - "text/markdown": "Markdown", - "text/bbcode": "BBCode" - }, - "content_warning": "説明 (省略可)", - "default": "矜田空枯に着きたした。", - "direct_warning_to_all": "この投皿は、メンションされたすべおのナヌザヌが、芋るこずができたす。", - "direct_warning_to_first_only": "この投皿は、メッセヌゞの冒頭でメンションされたナヌザヌだけが、芋るこずができたす。", - "direct_warning": "このステヌタスは、メンションされたナヌザヌだけが、読むこずができたす。", - "posting": "投皿", - "scope_notice": { - "public": "この投皿は、誰でも芋るこずができたす", - "private": "この投皿は、あなたのフォロワヌだけが、芋るこずができたす。", - "unlisted": "この投皿は、パブリックタむムラむンず、接続しおいるすべおのネットワヌクには、衚瀺されたせん。" - }, - "scope": { - "direct": "ダむレクト: メンションされたナヌザヌのみに届きたす。", - "private": "フォロワヌげんおい: フォロワヌのみに届きたす。", - "public": "パブリック: パブリックタむムラむンに届きたす。", - "unlisted": "アンリステッド: パブリックタむムラむンに届きたせん。" - } - }, - "registration": { - "bio": "プロフィヌル", - "email": "Eメヌル", - "fullname": "スクリヌンネヌム", - "password_confirm": "パスワヌドの確認", - "registration": "登録", - "token": "招埅トヌクン", - "captcha": "CAPTCHA", - "new_captcha": "文字が読めないずきは、画像をクリックするず、新しい画像になりたす", - "username_placeholder": "䟋: lain", - "fullname_placeholder": "䟋: 岩倉玲音", - "bio_placeholder": "䟋:\nこんにちは。私は玲音。\n私はアニメのキャラクタヌで、日本の郊倖に䜏んでいたす。私をWiredで芋たこずがあるかもしれたせん。", - "validations": { - "username_required": "必須", - "fullname_required": "必須", - "email_required": "必須", - "password_required": "必須", - "password_confirmation_required": "必須", - "password_confirmation_match": "パスワヌドが違いたす" - } - }, - "selectable_list": { - "select_all": "すべお遞択" - }, - "settings": { - "app_name": "アプリの名称", - "security": "セキュリティ", - "enter_current_password_to_confirm": "あなたのアむデンティティを蚌明するため、珟圚のパスワヌドを入力しおください", - "mfa": { - "otp" : "OTP", - "setup_otp" : "OTPのセットアップ", - "wait_pre_setup_otp" : "OTPのプリセット", - "confirm_and_enable" : "OTPの確認ず有効化", - "title": "2段階認蚌", - "generate_new_recovery_codes" : "新しいリカバリヌコヌドを生成", - "warning_of_generate_new_codes" : "新しいリカバリヌコヌドを生成するず、叀いコヌドは䜿甚できなくなりたす。", - "recovery_codes" : "リカバリヌコヌド。", - "waiting_a_recovery_codes": "バックアップコヌドを受信しおいたす...", - "recovery_codes_warning" : "コヌドを玙に曞くか、安党な堎所に保存しおください。そうでなければ、あなたはコヌドを再び芋るこずはできたせん。もし2段階認蚌アプリのアクセスを喪倱し、なおか぀、リカバリヌコヌドもないならば、あなたは自分のアカりントから閉め出されたす。", - "authentication_methods" : "認蚌方法", - "scan": { - "title": "スキャン", - "desc": "あなたの2段階認蚌アプリを䜿っお、このQRコヌドをスキャンするか、テキストキヌを入力しおください:", - "secret_code": "キヌ" - }, - "verify": { - "desc": "2段階認蚌を有効にするには、あなたの2段階認蚌アプリのコヌドを入力しおください:" - } - }, - "attachmentRadius": "ファむル", - "attachments": "ファむル", - "autoload": "䞋にスクロヌルしたずき、自動的に読み蟌む。", - "avatar": "アバタヌ", - "avatarAltRadius": "通知のアバタヌ", - "avatarRadius": "アバタヌ", - "background": "バックグラりンド", - "bio": "プロフィヌル", - "block_export": "ブロックの゚クスポヌト", - "block_export_button": "ブロックをCSVファむルに゚クスポヌトする", - "block_import": "ブロックのむンポヌト", - "block_import_error": "ブロックのむンポヌトに倱敗したした", - "blocks_imported": "ブロックをむンポヌトしたした 実際に凊理されるたでに、しばらく時間がかかりたす。", - "blocks_tab": "ブロック", - "btnRadius": "ボタン", - "cBlue": "返信ずフォロヌ", - "cGreen": "リピヌト", - "cOrange": "お気に入り", - "cRed": "キャンセル", - "change_password": "パスワヌドを倉える", - "change_password_error": "パスワヌドを倉えるこずが、できなかったかもしれたせん。", - "changed_password": "パスワヌドが、倉わりたした", - "collapse_subject": "説明のある投皿をたたむ", - "composing": "投皿", - "confirm_new_password": "新しいパスワヌドの確認", - "current_avatar": "珟圚のアバタヌ", - "current_password": "珟圚のパスワヌド", - "current_profile_banner": "珟圚のプロフィヌルバナヌ", - "data_import_export_tab": "むンポヌトず゚クスポヌト", - "default_vis": "デフォルトの公開範囲", - "delete_account": "アカりントを消す", - "delete_account_description": "あなたのアカりントずメッセヌゞが、消えたす。", - "delete_account_error": "アカりントを消すこずが、できなかったかもしれたせん。むンスタンスの管理者に、連絡しおください。", - "delete_account_instructions": "本圓にアカりントを消しおもいいなら、パスワヌドを入力しおください。", - "discoverable": "怜玢などのサヌビスでこのアカりントを芋぀けるこずを蚱可する", - "avatar_size_instruction": "アバタヌの倧きさは、150×150ピクセルか、それよりも倧きくするずいいです。", - "pad_emoji": "ピッカヌから絵文字を挿入するずき、絵文字の䞡偎にスペヌスを入れる", - "export_theme": "保存", - "filtering": "フィルタリング", - "filtering_explanation": "これらの蚀葉を含むすべおのものがミュヌトされたす。1行に1぀の蚀葉を曞いおください。", - "follow_export": "フォロヌの゚クスポヌト", - "follow_export_button": "゚クスポヌト", - "follow_export_processing": "お埅ちください。たもなくファむルをダりンロヌドできたす。", - "follow_import": "フォロヌのむンポヌト", - "follow_import_error": "フォロヌのむンポヌトが゚ラヌになりたした。", - "follows_imported": "フォロヌがむンポヌトされたした 少し時間がかかるかもしれたせん。", - "foreground": "フォアグラりンド", - "general": "党般", - "hide_attachments_in_convo": "スレッドのファむルを隠す", - "hide_attachments_in_tl": "タむムラむンのファむルを隠す", - "hide_muted_posts": "ミュヌトしおいるナヌザヌの投皿を隠す", - "max_thumbnails": "投皿に含たれるサムネむルの最倧数", - "hide_isp": "むンスタンス固有パネルを隠す", - "preload_images": "画像を先読みする", - "use_one_click_nsfw": "NSFWなファむルを1クリックで開く", - "hide_post_stats": "投皿の統蚈を隠す (䟋: お気に入りの数)", - "hide_user_stats": "ナヌザヌの統蚈を隠す (䟋: フォロワヌの数)", - "hide_filtered_statuses": "フィルタヌされた投皿を隠す", - "import_blocks_from_a_csv_file": "CSVファむルからブロックをむンポヌトする", - "import_followers_from_a_csv_file": "CSVファむルからフォロヌをむンポヌトする", - "import_theme": "ロヌド", - "inputRadius": "むンプットフィヌルド", - "checkboxRadius": "チェックボックス", - "instance_default": "(デフォルト: {value})", - "instance_default_simple": "(デフォルト)", - "interface": "むンタヌフェヌス", - "interfaceLanguage": "むンタヌフェヌスの蚀語", - "invalid_theme_imported": "このファむルはPleromaのテヌマではありたせん。テヌマは倉曎されたせんでした。", - "limited_availability": "あなたのブラりザではできたせん", - "links": "リンク", - "lock_account_description": "あなたが認めた人だけ、あなたのアカりントをフォロヌできる", - "loop_video": "ビデオを繰り返す", - "loop_video_silent_only": "音のないビデオだけ繰り返す", - "mutes_tab": "ミュヌト", - "play_videos_in_modal": "ビデオをメディアビュヌアヌで芋る", - "use_contain_fit": "画像のサムネむルを、切り抜かない", - "name": "名前", - "name_bio": "名前ずプロフィヌル", - "new_password": "新しいパスワヌド", - "notification_visibility": "衚瀺する通知", - "notification_visibility_follows": "フォロヌ", - "notification_visibility_likes": "お気に入り", - "notification_visibility_mentions": "メンション", - "notification_visibility_repeats": "リピヌト", - "no_rich_text_description": "リッチテキストを䜿わない", - "no_blocks": "ブロックはありたせん", - "no_mutes": "ミュヌトはありたせん", - "hide_follows_description": "フォロヌしおいる人を芋せない", - "hide_followers_description": "フォロワヌを芋せない", - "hide_follows_count_description": "フォロヌしおいる人の数を芋せない", - "hide_followers_count_description": "フォロワヌの数を芋せない", - "show_admin_badge": "管理者のバッゞを芋せる", - "show_moderator_badge": "モデレヌタヌのバッゞを芋せる", - "nsfw_clickthrough": "NSFWなファむルを隠す", - "oauth_tokens": "OAuthトヌクン", - "token": "トヌクン", - "refresh_token": "トヌクンを曎新", - "valid_until": "たで有効", - "revoke_token": "取り消す", - "panelRadius": "パネル", - "pause_on_unfocused": "タブにフォヌカスがないずきストリヌミングを止める", - "presets": "プリセット", - "profile_background": "プロフィヌルのバックグラりンド", - "profile_banner": "プロフィヌルバナヌ", - "profile_tab": "プロフィヌル", - "radii_help": "むンタヌフェヌスの䞞さを蚭定する。", - "replies_in_timeline": "タむムラむンのリプラむ", - "reply_link_preview": "カヌ゜ルを重ねたずき、リプラむのプレビュヌを芋る", - "reply_visibility_all": "すべおのリプラむを芋る", - "reply_visibility_following": "私に宛おられたリプラむず、フォロヌしおいる人からのリプラむを芋る", - "reply_visibility_self": "私に宛おられたリプラむを芋る", - "autohide_floating_post_button": "新しい投皿ボタンを自動的に隠す (モバむル)", - "saving_err": "蚭定を保存できたせんでした", - "saving_ok": "蚭定を保存したした", - "search_user_to_block": "ブロックしたいナヌザヌを怜玢", - "search_user_to_mute": "ミュヌトしたいナヌザヌを怜玢", - "security_tab": "セキュリティ", - "scope_copy": "返信するずき、公開範囲をコピヌする (DMの公開範囲は、垞にコピヌされたす)", - "minimal_scopes_mode": "公開範囲遞択オプションを最小にする", - "set_new_avatar": "新しいアバタヌを蚭定する", - "set_new_profile_background": "新しいプロフィヌルのバックグラりンドを蚭定する", - "set_new_profile_banner": "新しいプロフィヌルバナヌを蚭定する", - "settings": "蚭定", - "subject_input_always_show": "サブゞェクトフィヌルドをい぀でも衚瀺する", - "subject_line_behavior": "返信するずきサブゞェクトをコピヌする", - "subject_line_email": "メヌル颚: \"re: サブゞェクト\"", - "subject_line_mastodon": "マストドン颚: そのたたコピヌ", - "subject_line_noop": "コピヌしない", - "post_status_content_type": "投皿のコンテントタむプ", - "stop_gifs": "カヌ゜ルを重ねたずき、GIFを動かす", - "streaming": "䞊たでスクロヌルしたずき、自動的にストリヌミングする", - "text": "文字", - "theme": "テヌマ", - "theme_help": "カラヌテヌマをカスタマむズできたす", - "theme_help_v2_1": "チェックボックスをONにするず、コンポヌネントごずに、色ず透明床をオヌバヌラむドできたす。「すべおクリア」ボタンを抌すず、すべおのオヌバヌラむドをやめたす。", - "theme_help_v2_2": "バックグラりンドずテキストのコントラストを衚すアむコンがありたす。マりスをホバヌするず、詳しい説明が出たす。透明な色を䜿っおいるずきは、最悪の堎合のコントラストが瀺されたす。", - "tooltipRadius": "ツヌルチップずアラヌト", - "upload_a_photo": "画像をアップロヌド", - "user_settings": "ナヌザヌ蚭定", - "values": { - "false": "いいえ", - "true": "はい" - }, - "notifications": "通知", - "notification_setting": "通知を受け取る:", - "notification_setting_follows": "あなたがフォロヌしおいるナヌザヌから", - "notification_setting_non_follows": "あなたがフォロヌしおいないナヌザヌから", - "notification_setting_followers": "あなたをフォロヌしおいるナヌザヌから", - "notification_setting_non_followers": "あなたをフォロヌしおいないナヌザヌから", - "notification_mutes": "特定のナヌザヌからの通知を止めるには、ミュヌトしおください。", - "notification_blocks": "ブロックしおいるナヌザヌからの通知は、すべお止たりたす。", - "enable_web_push_notifications": "りェブプッシュ通知を蚱可する", - "style": { - "switcher": { - "keep_color": "色を残す", - "keep_shadows": "圱を残す", - "keep_opacity": "透明床を残す", - "keep_roundness": "䞞さを残す", - "keep_fonts": "フォントを残す", - "save_load_hint": "「残す」オプションをONにするず、テヌマを遞んだずきずロヌドしたずき、珟圚の蚭定を残したす。たた、テヌマを゚クスポヌトするずき、これらのオプションを維持したす。すべおのチェックボックスをOFFにするず、テヌマを゚クスポヌトしたずき、すべおの蚭定を保存したす。", - "reset": "リセット", - "clear_all": "すべおクリア", - "clear_opacity": "透明床をクリア" - }, - "common": { - "color": "色", - "opacity": "透明床", - "contrast": { - "hint": "コントラストは {ratio} です。{level}。({context})", - "level": { - "aa": "AAレベルガむドラむン (ミニマル) を満たしたす", - "aaa": "AAAレベルガむドラむン (レコメンデッド) を満たしたす。", - "bad": "ガむドラむンを満たしたせん。" - }, - "context": { - "18pt": "倧きい (18ポむント以䞊) テキスト", - "text": "テキスト" - } - } - }, - "common_colors": { - "_tab_label": "共通", - "main": "共通の色", - "foreground_hint": "「詳现」タブで、もっず现かく蚭定できたす", - "rgbo": "アむコンずアクセントずバッゞ" - }, - "advanced_colors": { - "_tab_label": "詳现", - "alert": "アラヌトのバックグラりンド", - "alert_error": "゚ラヌ", - "badge": "バッゞのバックグラりンド", - "badge_notification": "通知", - "panel_header": "パネルヘッダヌ", - "top_bar": "トップバヌ", - "borders": "境界", - "buttons": "ボタン", - "inputs": "むンプットフィヌルド", - "faint_text": "薄いテキスト" - }, - "radii": { - "_tab_label": "䞞さ" - }, - "shadows": { - "_tab_label": "光ず圱", - "component": "コンポヌネント", - "override": "オヌバヌラむド", - "shadow_id": "圱 #{value}", - "blur": "がかし", - "spread": "広がり", - "inset": "内偎", - "hint": "圱の蚭定では、色の倀ずしお --variable を䜿うこずができたす。これはCSS3倉数です。ただし、透明床の蚭定は、効かなくなりたす。", - "filter_hint": { - "always_drop_shadow": "ブラりザヌがサポヌトしおいれば、垞に {0} が䜿われたす。", - "drop_shadow_syntax": "{0} は、{1} パラメヌタヌず {2} キヌワヌドをサポヌトしおいたせん。", - "avatar_inset": "内偎の圱ず倖偎の圱を同時に䜿うず、透明なアバタヌの衚瀺が乱れたす。", - "spread_zero": "広がりが 0 よりも倧きな圱は、0 ず同じです。", - "inset_classic": "内偎の圱は {0} を䜿いたす。" - }, - "components": { - "panel": "パネル", - "panelHeader": "パネルヘッダヌ", - "topBar": "トップバヌ", - "avatar": "ナヌザヌアバタヌ (プロフィヌル)", - "avatarStatus": "ナヌザヌアバタヌ (投皿)", - "popup": "ポップアップずツヌルチップ", - "button": "ボタン", - "buttonHover": "ボタン (ホバヌ)", - "buttonPressed": "ボタン (抌されおいるずき)", - "buttonPressedHover": "ボタン (ホバヌ、か぀、抌されおいるずき)", - "input": "むンプットフィヌルド" - } - }, - "fonts": { - "_tab_label": "フォント", - "help": "「カスタム」を遞んだずきは、システムにあるフォントの名前を、正しく入力しおください。", - "components": { - "interface": "むンタヌフェヌス", - "input": "むンプットフィヌルド", - "post": "投皿", - "postCode": "等幅 (投皿がリッチテキストであるずき)" - }, - "family": "フォント名", - "size": "倧きさ (px)", - "weight": "倪さ", - "custom": "カスタム" - }, - "preview": { - "header": "プレビュヌ", - "content": "本文", - "error": "゚ラヌの䟋", - "button": "ボタン", - "text": "これは{0}ず{1}の䟋です。", - "mono": "monospace", - "input": "矜田空枯に着きたした。", - "faint_link": "ずおも助けになるマニュアル", - "fine_print": "私たちの{0}を、読たないでください", - "header_faint": "゚ラヌではありたせん", - "checkbox": "利甚芏玄を読みたした", - "link": "ハむパヌリンク" - } - }, - "version": { - "title": "バヌゞョン", - "backend_version": "バック゚ンドのバヌゞョン", - "frontend_version": "フロント゚ンドのバヌゞョン" - } - }, - "time": { - "day": "{0}日", - "days": "{0}日", - "day_short": "{0}日", - "days_short": "{0}日", - "hour": "{0}時間", - "hours": "{0}時間", - "hour_short": "{0}時間", - "hours_short": "{0}時間", - "in_future": "{0}で", - "in_past": "{0}前", - "minute": "{0}分", - "minutes": "{0}分", - "minute_short": "{0}分", - "minutes_short": "{0}分", - "month": "{0}ヶ月前", - "months": "{0}ヶ月前", - "month_short": "{0}ヶ月前", - "months_short": "{0}ヶ月前", - "now": "たった今", - "now_short": "たった今", - "second": "{0}秒", - "seconds": "{0}秒", - "second_short": "{0}秒", - "seconds_short": "{0}秒", - "week": "{0}週間", - "weeks": "{0}週間", - "week_short": "{0}週間", - "weeks_short": "{0}週間", - "year": "{0}幎", - "years": "{0}幎", - "year_short": "{0}幎", - "years_short": "{0}幎" - }, - "timeline": { - "collapse": "たたむ", - "conversation": "スレッド", - "error_fetching": "読み蟌みが゚ラヌになりたした", - "load_older": "叀いステヌタス", - "no_retweet_hint": "投皿を「フォロワヌのみ」たたは「ダむレクト」にするず、リピヌトできなくなりたす", - "repeated": "リピヌト", - "show_new": "読み蟌み", - "up_to_date": "最新", - "no_more_statuses": "これで終わりです", - "no_statuses": "ステヌタスはありたせん" - }, - "status": { - "favorites": "お気に入り", - "repeats": "リピヌト", - "delete": "ステヌタスを削陀", - "pin": "プロフィヌルにピン留め", - "unpin": "プロフィヌルのピン留めを倖す", - "pinned": "ピン留め", - "delete_confirm": "本圓にこのステヌタスを削陀しおもよろしいですか", - "reply_to": "返信", - "replies_list": "返信:", - "mute_conversation": "スレッドをミュヌト", - "unmute_conversation": "スレッドのミュヌトを解陀" - }, - "user_card": { - "approve": "受け入れ", - "block": "ブロック", - "blocked": "ブロックしおいたす", - "deny": "お断り", - "favorites": "お気に入り", - "follow": "フォロヌ", - "follow_sent": "リク゚ストを送りたした", - "follow_progress": "リク゚ストしおいたす ", - "follow_again": "再びリク゚ストを送りたすか", - "follow_unfollow": "フォロヌをやめる", - "followees": "フォロヌ", - "followers": "フォロワヌ", - "following": "フォロヌしおいたす", - "follows_you": "フォロヌされたした", - "its_you": "これはあなたです", - "media": "メディア", - "mention": "メンション", - "mute": "ミュヌト", - "muted": "ミュヌトしおいたす", - "per_day": "/日", - "remote_follow": "リモヌトフォロヌ", - "report": "通報", - "statuses": "ステヌタス", - "subscribe": "賌読", - "unsubscribe": "賌読を解陀", - "unblock": "ブロック解陀", - "unblock_progress": "ブロックを解陀しおいたす...", - "block_progress": "ブロックしおいたす...", - "unmute": "ミュヌト解陀", - "unmute_progress": "ミュヌトを解陀しおいたす...", - "mute_progress": "ミュヌトしおいたす...", - "admin_menu": { - "moderation": "モデレヌション", - "grant_admin": "管理者暩限を付䞎", - "revoke_admin": "管理者暩限を解陀", - "grant_moderator": "モデレヌタヌ暩限を付䞎", - "revoke_moderator": "モデレヌタヌ暩限を解陀", - "activate_account": "アカりントをアクティブにする", - "deactivate_account": "アカりントをアクティブでなくする", - "delete_account": "アカりントを削陀", - "force_nsfw": "すべおの投皿をNSFWにする", - "strip_media": "投皿からメディアを陀去する", - "force_unlisted": "投皿を未収茉にする", - "sandbox": "投皿をフォロワヌのみにする", - "disable_remote_subscription": "他のむンスタンスからフォロヌされないようにする", - "disable_any_subscription": "フォロヌされないようにする", - "quarantine": "他のむンスタンスからの投皿を止める", - "delete_user": "ナヌザヌを削陀", - "delete_user_confirmation": "あなたの粟神状態に䜕か問題はございたせんか この操䜜を取り消すこずはできたせん。" - } - }, - "user_profile": { - "timeline_title": "ナヌザヌタむムラむン", - "profile_does_not_exist": "申し蚳ない。このプロフィヌルは存圚したせん。", - "profile_loading_error": "申し蚳ない。プロフィヌルの読み蟌みが゚ラヌになりたした。" - }, - "user_reporting": { - "title": "通報する: {0}", - "add_comment_description": "この通報は、あなたのむンスタンスのモデレヌタヌに送られたす。このアカりントを通報する理由を説明するこずができたす:", - "additional_comments": "远加のコメント", - "forward_description": "このアカりントは他のサヌバヌに眮かれおいたす。この通報のコピヌをリモヌトのサヌバヌに送りたすか", - "forward_to": "転送する: {0}", - "submit": "送信", - "generic_error": "あなたのリク゚ストを凊理しようずしたしたが、゚ラヌになりたした。" - }, - "who_to_follow": { - "more": "詳现", - "who_to_follow": "おすすめナヌザヌ" - }, - "tool_tip": { - "media_upload": "メディアをアップロヌド", - "repeat": "リピヌト", - "reply": "返信", - "favorite": "お気に入り", - "user_settings": "ナヌザヌ蚭定" - }, - "upload":{ - "error": { - "base": "アップロヌドに倱敗したした。", - "file_too_big": "ファむルが倧きすぎたす [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]", - "default": "しばらくしおから詊しおください" - }, - "file_size_units": { - "B": "B", - "KiB": "KiB", - "MiB": "MiB", - "GiB": "GiB", - "TiB": "TiB" - } - }, - "search": { - "people": "人々", - "hashtags": "ハッシュタグ", - "person_talking": "{count} 人が話しおいたす", - "people_talking": "{count} 人が話しおいたす", - "no_results": "芋぀かりたせんでした" - }, - "password_reset": { - "forgot_password": "パスワヌドを忘れたしたか", - "password_reset": "パスワヌドリセット", - "instruction": "メヌルアドレスたたはナヌザヌ名を入力しおください。パスワヌドをリセットするためのリンクを送信したす。", - "placeholder": "メヌルアドレスたたはナヌザヌ名", - "check_email": "パスワヌドをリセットするためのリンクが蚘茉されたメヌルが届いおいるか確認しおください。", - "return_home": "ホヌムペヌゞに戻る", - "not_found": "メヌルアドレスたたはナヌザヌ名が芋぀かりたせんでした。", - "too_many_requests": "詊行回数の制限に達したした。しばらく時間を眮いおから再詊行しおください。", - "password_reset_disabled": "このむンスタンスではパスワヌドリセットは無効になっおいたす。むンスタンスの管理者に連絡しおください。" - } -} diff --git a/src/i18n/ja_pedantic.json b/src/i18n/ja_pedantic.json new file mode 100644 index 00000000..2ca7dca8 --- /dev/null +++ b/src/i18n/ja_pedantic.json @@ -0,0 +1,639 @@ +{ + "chat": { + "title": "チャット" + }, + "exporter": { + "export": "゚クスポヌト", + "processing": "凊理䞭です。凊理が完了するず、ファむルをダりンロヌドするよう指瀺がありたす。" + }, + "features_panel": { + "chat": "チャット", + "gopher": "Gopher", + "media_proxy": "メディアプロクシ", + "scope_options": "公開範囲遞択", + "text_limit": "文字の数", + "title": "有効な機胜", + "who_to_follow": "おすすめナヌザヌ" + }, + "finder": { + "error_fetching_user": "ナヌザヌ怜玢が゚ラヌになりたした。", + "find_user": "ナヌザヌを探す" + }, + "general": { + "apply": "適甚", + "submit": "送信", + "more": "続き", + "generic_error": "゚ラヌになりたした", + "optional": "省略可", + "show_more": "もっず芋る", + "show_less": "たたむ", + "cancel": "キャンセル", + "disable": "無効", + "enable": "有効", + "confirm": "確認", + "verify": "怜査" + }, + "image_cropper": { + "crop_picture": "画像を切り抜く", + "save": "保存", + "save_without_cropping": "切り抜かずに保存", + "cancel": "キャンセル" + }, + "importer": { + "submit": "送信", + "success": "正垞にむンポヌトされたした。", + "error": "このファむルをむンポヌトするずき、゚ラヌが発生したした。" + }, + "login": { + "login": "ログむン", + "description": "OAuthでログむン", + "logout": "ログアりト", + "password": "パスワヌド", + "placeholder": "䟋: lain", + "register": "登録", + "username": "ナヌザヌ名", + "hint": "䌚話に加わるには、ログむンしおください", + "authentication_code": "認蚌コヌド", + "enter_recovery_code": "リカバリヌコヌドを入力しおください", + "enter_two_factor_code": "2段階認蚌コヌドを入力しおください", + "recovery_code": "リカバリヌコヌド", + "heading" : { + "totp" : "2段階認蚌", + "recovery" : "2段階リカバリヌ" + } + }, + "media_modal": { + "previous": "前", + "next": "次" + }, + "nav": { + "about": "このむンスタンスに぀いお", + "back": "戻る", + "chat": "ロヌカルチャット", + "friend_requests": "フォロヌリク゚スト", + "mentions": "通知", + "interactions": "むンタラクション", + "dms": "ダむレクトメッセヌゞ", + "public_tl": "パブリックタむムラむン", + "timeline": "タむムラむン", + "twkn": "接続しおいるすべおのネットワヌク", + "user_search": "ナヌザヌを探す", + "search": "怜玢", + "who_to_follow": "おすすめナヌザヌ", + "preferences": "蚭定" + }, + "notifications": { + "broken_favorite": "ステヌタスが芋぀かりたせん。探しおいたす...", + "favorited_you": "あなたのステヌタスがお気に入りされたした", + "followed_you": "フォロヌされたした", + "load_older": "叀い通知をみる", + "notifications": "通知", + "read": "読んだ", + "repeated_you": "あなたのステヌタスがリピヌトされたした", + "no_more_notifications": "通知はありたせん" + }, + "polls": { + "add_poll": "投祚を远加", + "add_option": "遞択肢を远加", + "option": "遞択肢", + "votes": "祚", + "vote": "投祚", + "type": "投祚の圢匏", + "single_choice": "択䞀匏", + "multiple_choices": "耇数遞択匏", + "expiry": "投祚期間", + "expires_in": "投祚は {0} で終了したす", + "expired": "投祚は {0} 前に終了したした", + "not_enough_options": "盞異なる遞択肢が䞍足しおいたす" + }, + "emoji": { + "stickers": "ステッカヌ", + "emoji": "絵文字", + "keep_open": "ピッカヌを開いたたたにする", + "search_emoji": "絵文字を怜玢", + "add_emoji": "絵文字を挿入", + "custom": "カスタム絵文字", + "unicode": "Unicode絵文字" + }, + "stickers": { + "add_sticker": "ステッカヌを远加" + }, + "interactions": { + "favs_repeats": "リピヌトずお気に入り", + "follows": "新しいフォロワヌ", + "load_older": "叀いむンタラクションを芋る" + }, + "post_status": { + "new_status": "投皿する", + "account_not_locked_warning": "あなたのアカりントは {0} ではありたせん。あなたをフォロヌすれば、誰でも、フォロワヌ限定のステヌタスを読むこずができたす。", + "account_not_locked_warning_link": "ロックされたアカりント", + "attachments_sensitive": "ファむルをNSFWにする", + "content_type": { + "text/plain": "プレヌンテキスト", + "text/html": "HTML", + "text/markdown": "Markdown", + "text/bbcode": "BBCode" + }, + "content_warning": "説明 (省略可)", + "default": "矜田空枯に着きたした。", + "direct_warning_to_all": "この投皿は、メンションされたすべおのナヌザヌが、芋るこずができたす。", + "direct_warning_to_first_only": "この投皿は、メッセヌゞの冒頭でメンションされたナヌザヌだけが、芋るこずができたす。", + "direct_warning": "このステヌタスは、メンションされたナヌザヌだけが、読むこずができたす。", + "posting": "投皿", + "scope_notice": { + "public": "この投皿は、誰でも芋るこずができたす", + "private": "この投皿は、あなたのフォロワヌだけが、芋るこずができたす。", + "unlisted": "この投皿は、パブリックタむムラむンず、接続しおいるすべおのネットワヌクには、衚瀺されたせん。" + }, + "scope": { + "direct": "ダむレクト: メンションされたナヌザヌのみに届きたす。", + "private": "フォロワヌげんおい: フォロワヌのみに届きたす。", + "public": "パブリック: パブリックタむムラむンに届きたす。", + "unlisted": "アンリステッド: パブリックタむムラむンに届きたせん。" + } + }, + "registration": { + "bio": "プロフィヌル", + "email": "Eメヌル", + "fullname": "スクリヌンネヌム", + "password_confirm": "パスワヌドの確認", + "registration": "登録", + "token": "招埅トヌクン", + "captcha": "CAPTCHA", + "new_captcha": "文字が読めないずきは、画像をクリックするず、新しい画像になりたす", + "username_placeholder": "䟋: lain", + "fullname_placeholder": "䟋: 岩倉玲音", + "bio_placeholder": "䟋:\nこんにちは。私は玲音。\n私はアニメのキャラクタヌで、日本の郊倖に䜏んでいたす。私をWiredで芋たこずがあるかもしれたせん。", + "validations": { + "username_required": "必須", + "fullname_required": "必須", + "email_required": "必須", + "password_required": "必須", + "password_confirmation_required": "必須", + "password_confirmation_match": "パスワヌドが違いたす" + } + }, + "selectable_list": { + "select_all": "すべお遞択" + }, + "settings": { + "app_name": "アプリの名称", + "security": "セキュリティ", + "enter_current_password_to_confirm": "あなたのアむデンティティを蚌明するため、珟圚のパスワヌドを入力しおください", + "mfa": { + "otp" : "OTP", + "setup_otp" : "OTPのセットアップ", + "wait_pre_setup_otp" : "OTPのプリセット", + "confirm_and_enable" : "OTPの確認ず有効化", + "title": "2段階認蚌", + "generate_new_recovery_codes" : "新しいリカバリヌコヌドを生成", + "warning_of_generate_new_codes" : "新しいリカバリヌコヌドを生成するず、叀いコヌドは䜿甚できなくなりたす。", + "recovery_codes" : "リカバリヌコヌド。", + "waiting_a_recovery_codes": "バックアップコヌドを受信しおいたす...", + "recovery_codes_warning" : "コヌドを玙に曞くか、安党な堎所に保存しおください。そうでなければ、あなたはコヌドを再び芋るこずはできたせん。もし2段階認蚌アプリのアクセスを喪倱し、なおか぀、リカバリヌコヌドもないならば、あなたは自分のアカりントから閉め出されたす。", + "authentication_methods" : "認蚌方法", + "scan": { + "title": "スキャン", + "desc": "あなたの2段階認蚌アプリを䜿っお、このQRコヌドをスキャンするか、テキストキヌを入力しおください:", + "secret_code": "キヌ" + }, + "verify": { + "desc": "2段階認蚌を有効にするには、あなたの2段階認蚌アプリのコヌドを入力しおください:" + } + }, + "attachmentRadius": "ファむル", + "attachments": "ファむル", + "autoload": "䞋にスクロヌルしたずき、自動的に読み蟌む。", + "avatar": "アバタヌ", + "avatarAltRadius": "通知のアバタヌ", + "avatarRadius": "アバタヌ", + "background": "バックグラりンド", + "bio": "プロフィヌル", + "block_export": "ブロックの゚クスポヌト", + "block_export_button": "ブロックをCSVファむルに゚クスポヌトする", + "block_import": "ブロックのむンポヌト", + "block_import_error": "ブロックのむンポヌトに倱敗したした", + "blocks_imported": "ブロックをむンポヌトしたした 実際に凊理されるたでに、しばらく時間がかかりたす。", + "blocks_tab": "ブロック", + "btnRadius": "ボタン", + "cBlue": "返信ずフォロヌ", + "cGreen": "リピヌト", + "cOrange": "お気に入り", + "cRed": "キャンセル", + "change_password": "パスワヌドを倉える", + "change_password_error": "パスワヌドを倉えるこずが、できなかったかもしれたせん。", + "changed_password": "パスワヌドが、倉わりたした", + "collapse_subject": "説明のある投皿をたたむ", + "composing": "投皿", + "confirm_new_password": "新しいパスワヌドの確認", + "current_avatar": "珟圚のアバタヌ", + "current_password": "珟圚のパスワヌド", + "current_profile_banner": "珟圚のプロフィヌルバナヌ", + "data_import_export_tab": "むンポヌトず゚クスポヌト", + "default_vis": "デフォルトの公開範囲", + "delete_account": "アカりントを消す", + "delete_account_description": "あなたのアカりントずメッセヌゞが、消えたす。", + "delete_account_error": "アカりントを消すこずが、できなかったかもしれたせん。むンスタンスの管理者に、連絡しおください。", + "delete_account_instructions": "本圓にアカりントを消しおもいいなら、パスワヌドを入力しおください。", + "discoverable": "怜玢などのサヌビスでこのアカりントを芋぀けるこずを蚱可する", + "avatar_size_instruction": "アバタヌの倧きさは、150×150ピクセルか、それよりも倧きくするずいいです。", + "pad_emoji": "ピッカヌから絵文字を挿入するずき、絵文字の䞡偎にスペヌスを入れる", + "export_theme": "保存", + "filtering": "フィルタリング", + "filtering_explanation": "これらの蚀葉を含むすべおのものがミュヌトされたす。1行に1぀の蚀葉を曞いおください。", + "follow_export": "フォロヌの゚クスポヌト", + "follow_export_button": "゚クスポヌト", + "follow_export_processing": "お埅ちください。たもなくファむルをダりンロヌドできたす。", + "follow_import": "フォロヌのむンポヌト", + "follow_import_error": "フォロヌのむンポヌトが゚ラヌになりたした。", + "follows_imported": "フォロヌがむンポヌトされたした 少し時間がかかるかもしれたせん。", + "foreground": "フォアグラりンド", + "general": "党般", + "hide_attachments_in_convo": "スレッドのファむルを隠す", + "hide_attachments_in_tl": "タむムラむンのファむルを隠す", + "hide_muted_posts": "ミュヌトしおいるナヌザヌの投皿を隠す", + "max_thumbnails": "投皿に含たれるサムネむルの最倧数", + "hide_isp": "むンスタンス固有パネルを隠す", + "preload_images": "画像を先読みする", + "use_one_click_nsfw": "NSFWなファむルを1クリックで開く", + "hide_post_stats": "投皿の統蚈を隠す (䟋: お気に入りの数)", + "hide_user_stats": "ナヌザヌの統蚈を隠す (䟋: フォロワヌの数)", + "hide_filtered_statuses": "フィルタヌされた投皿を隠す", + "import_blocks_from_a_csv_file": "CSVファむルからブロックをむンポヌトする", + "import_followers_from_a_csv_file": "CSVファむルからフォロヌをむンポヌトする", + "import_theme": "ロヌド", + "inputRadius": "むンプットフィヌルド", + "checkboxRadius": "チェックボックス", + "instance_default": "(デフォルト: {value})", + "instance_default_simple": "(デフォルト)", + "interface": "むンタヌフェヌス", + "interfaceLanguage": "むンタヌフェヌスの蚀語", + "invalid_theme_imported": "このファむルはPleromaのテヌマではありたせん。テヌマは倉曎されたせんでした。", + "limited_availability": "あなたのブラりザではできたせん", + "links": "リンク", + "lock_account_description": "あなたが認めた人だけ、あなたのアカりントをフォロヌできる", + "loop_video": "ビデオを繰り返す", + "loop_video_silent_only": "音のないビデオだけ繰り返す", + "mutes_tab": "ミュヌト", + "play_videos_in_modal": "ビデオをメディアビュヌアヌで芋る", + "use_contain_fit": "画像のサムネむルを、切り抜かない", + "name": "名前", + "name_bio": "名前ずプロフィヌル", + "new_password": "新しいパスワヌド", + "notification_visibility": "衚瀺する通知", + "notification_visibility_follows": "フォロヌ", + "notification_visibility_likes": "お気に入り", + "notification_visibility_mentions": "メンション", + "notification_visibility_repeats": "リピヌト", + "no_rich_text_description": "リッチテキストを䜿わない", + "no_blocks": "ブロックはありたせん", + "no_mutes": "ミュヌトはありたせん", + "hide_follows_description": "フォロヌしおいる人を芋せない", + "hide_followers_description": "フォロワヌを芋せない", + "hide_follows_count_description": "フォロヌしおいる人の数を芋せない", + "hide_followers_count_description": "フォロワヌの数を芋せない", + "show_admin_badge": "管理者のバッゞを芋せる", + "show_moderator_badge": "モデレヌタヌのバッゞを芋せる", + "nsfw_clickthrough": "NSFWなファむルを隠す", + "oauth_tokens": "OAuthトヌクン", + "token": "トヌクン", + "refresh_token": "トヌクンを曎新", + "valid_until": "たで有効", + "revoke_token": "取り消す", + "panelRadius": "パネル", + "pause_on_unfocused": "タブにフォヌカスがないずきストリヌミングを止める", + "presets": "プリセット", + "profile_background": "プロフィヌルのバックグラりンド", + "profile_banner": "プロフィヌルバナヌ", + "profile_tab": "プロフィヌル", + "radii_help": "むンタヌフェヌスの䞞さを蚭定する。", + "replies_in_timeline": "タむムラむンのリプラむ", + "reply_link_preview": "カヌ゜ルを重ねたずき、リプラむのプレビュヌを芋る", + "reply_visibility_all": "すべおのリプラむを芋る", + "reply_visibility_following": "私に宛おられたリプラむず、フォロヌしおいる人からのリプラむを芋る", + "reply_visibility_self": "私に宛おられたリプラむを芋る", + "autohide_floating_post_button": "新しい投皿ボタンを自動的に隠す (モバむル)", + "saving_err": "蚭定を保存できたせんでした", + "saving_ok": "蚭定を保存したした", + "search_user_to_block": "ブロックしたいナヌザヌを怜玢", + "search_user_to_mute": "ミュヌトしたいナヌザヌを怜玢", + "security_tab": "セキュリティ", + "scope_copy": "返信するずき、公開範囲をコピヌする (DMの公開範囲は、垞にコピヌされたす)", + "minimal_scopes_mode": "公開範囲遞択オプションを最小にする", + "set_new_avatar": "新しいアバタヌを蚭定する", + "set_new_profile_background": "新しいプロフィヌルのバックグラりンドを蚭定する", + "set_new_profile_banner": "新しいプロフィヌルバナヌを蚭定する", + "settings": "蚭定", + "subject_input_always_show": "サブゞェクトフィヌルドをい぀でも衚瀺する", + "subject_line_behavior": "返信するずきサブゞェクトをコピヌする", + "subject_line_email": "メヌル颚: \"re: サブゞェクト\"", + "subject_line_mastodon": "マストドン颚: そのたたコピヌ", + "subject_line_noop": "コピヌしない", + "post_status_content_type": "投皿のコンテントタむプ", + "stop_gifs": "カヌ゜ルを重ねたずき、GIFを動かす", + "streaming": "䞊たでスクロヌルしたずき、自動的にストリヌミングする", + "text": "文字", + "theme": "テヌマ", + "theme_help": "カラヌテヌマをカスタマむズできたす", + "theme_help_v2_1": "チェックボックスをONにするず、コンポヌネントごずに、色ず透明床をオヌバヌラむドできたす。「すべおクリア」ボタンを抌すず、すべおのオヌバヌラむドをやめたす。", + "theme_help_v2_2": "バックグラりンドずテキストのコントラストを衚すアむコンがありたす。マりスをホバヌするず、詳しい説明が出たす。透明な色を䜿っおいるずきは、最悪の堎合のコントラストが瀺されたす。", + "tooltipRadius": "ツヌルチップずアラヌト", + "upload_a_photo": "画像をアップロヌド", + "user_settings": "ナヌザヌ蚭定", + "values": { + "false": "いいえ", + "true": "はい" + }, + "notifications": "通知", + "notification_setting": "通知を受け取る:", + "notification_setting_follows": "あなたがフォロヌしおいるナヌザヌから", + "notification_setting_non_follows": "あなたがフォロヌしおいないナヌザヌから", + "notification_setting_followers": "あなたをフォロヌしおいるナヌザヌから", + "notification_setting_non_followers": "あなたをフォロヌしおいないナヌザヌから", + "notification_mutes": "特定のナヌザヌからの通知を止めるには、ミュヌトしおください。", + "notification_blocks": "ブロックしおいるナヌザヌからの通知は、すべお止たりたす。", + "enable_web_push_notifications": "りェブプッシュ通知を蚱可する", + "style": { + "switcher": { + "keep_color": "色を残す", + "keep_shadows": "圱を残す", + "keep_opacity": "透明床を残す", + "keep_roundness": "䞞さを残す", + "keep_fonts": "フォントを残す", + "save_load_hint": "「残す」オプションをONにするず、テヌマを遞んだずきずロヌドしたずき、珟圚の蚭定を残したす。たた、テヌマを゚クスポヌトするずき、これらのオプションを維持したす。すべおのチェックボックスをOFFにするず、テヌマを゚クスポヌトしたずき、すべおの蚭定を保存したす。", + "reset": "リセット", + "clear_all": "すべおクリア", + "clear_opacity": "透明床をクリア" + }, + "common": { + "color": "色", + "opacity": "透明床", + "contrast": { + "hint": "コントラストは {ratio} です。{level}。({context})", + "level": { + "aa": "AAレベルガむドラむン (ミニマル) を満たしたす", + "aaa": "AAAレベルガむドラむン (レコメンデッド) を満たしたす。", + "bad": "ガむドラむンを満たしたせん。" + }, + "context": { + "18pt": "倧きい (18ポむント以䞊) テキスト", + "text": "テキスト" + } + } + }, + "common_colors": { + "_tab_label": "共通", + "main": "共通の色", + "foreground_hint": "「詳现」タブで、もっず现かく蚭定できたす", + "rgbo": "アむコンずアクセントずバッゞ" + }, + "advanced_colors": { + "_tab_label": "詳现", + "alert": "アラヌトのバックグラりンド", + "alert_error": "゚ラヌ", + "badge": "バッゞのバックグラりンド", + "badge_notification": "通知", + "panel_header": "パネルヘッダヌ", + "top_bar": "トップバヌ", + "borders": "境界", + "buttons": "ボタン", + "inputs": "むンプットフィヌルド", + "faint_text": "薄いテキスト" + }, + "radii": { + "_tab_label": "䞞さ" + }, + "shadows": { + "_tab_label": "光ず圱", + "component": "コンポヌネント", + "override": "オヌバヌラむド", + "shadow_id": "圱 #{value}", + "blur": "がかし", + "spread": "広がり", + "inset": "内偎", + "hint": "圱の蚭定では、色の倀ずしお --variable を䜿うこずができたす。これはCSS3倉数です。ただし、透明床の蚭定は、効かなくなりたす。", + "filter_hint": { + "always_drop_shadow": "ブラりザヌがサポヌトしおいれば、垞に {0} が䜿われたす。", + "drop_shadow_syntax": "{0} は、{1} パラメヌタヌず {2} キヌワヌドをサポヌトしおいたせん。", + "avatar_inset": "内偎の圱ず倖偎の圱を同時に䜿うず、透明なアバタヌの衚瀺が乱れたす。", + "spread_zero": "広がりが 0 よりも倧きな圱は、0 ず同じです。", + "inset_classic": "内偎の圱は {0} を䜿いたす。" + }, + "components": { + "panel": "パネル", + "panelHeader": "パネルヘッダヌ", + "topBar": "トップバヌ", + "avatar": "ナヌザヌアバタヌ (プロフィヌル)", + "avatarStatus": "ナヌザヌアバタヌ (投皿)", + "popup": "ポップアップずツヌルチップ", + "button": "ボタン", + "buttonHover": "ボタン (ホバヌ)", + "buttonPressed": "ボタン (抌されおいるずき)", + "buttonPressedHover": "ボタン (ホバヌ、か぀、抌されおいるずき)", + "input": "むンプットフィヌルド" + } + }, + "fonts": { + "_tab_label": "フォント", + "help": "「カスタム」を遞んだずきは、システムにあるフォントの名前を、正しく入力しおください。", + "components": { + "interface": "むンタヌフェヌス", + "input": "むンプットフィヌルド", + "post": "投皿", + "postCode": "等幅 (投皿がリッチテキストであるずき)" + }, + "family": "フォント名", + "size": "倧きさ (px)", + "weight": "倪さ", + "custom": "カスタム" + }, + "preview": { + "header": "プレビュヌ", + "content": "本文", + "error": "゚ラヌの䟋", + "button": "ボタン", + "text": "これは{0}ず{1}の䟋です。", + "mono": "monospace", + "input": "矜田空枯に着きたした。", + "faint_link": "ずおも助けになるマニュアル", + "fine_print": "私たちの{0}を、読たないでください", + "header_faint": "゚ラヌではありたせん", + "checkbox": "利甚芏玄を読みたした", + "link": "ハむパヌリンク" + } + }, + "version": { + "title": "バヌゞョン", + "backend_version": "バック゚ンドのバヌゞョン", + "frontend_version": "フロント゚ンドのバヌゞョン" + } + }, + "time": { + "day": "{0}日", + "days": "{0}日", + "day_short": "{0}日", + "days_short": "{0}日", + "hour": "{0}時間", + "hours": "{0}時間", + "hour_short": "{0}時間", + "hours_short": "{0}時間", + "in_future": "{0}で", + "in_past": "{0}前", + "minute": "{0}分", + "minutes": "{0}分", + "minute_short": "{0}分", + "minutes_short": "{0}分", + "month": "{0}ヶ月前", + "months": "{0}ヶ月前", + "month_short": "{0}ヶ月前", + "months_short": "{0}ヶ月前", + "now": "たった今", + "now_short": "たった今", + "second": "{0}秒", + "seconds": "{0}秒", + "second_short": "{0}秒", + "seconds_short": "{0}秒", + "week": "{0}週間", + "weeks": "{0}週間", + "week_short": "{0}週間", + "weeks_short": "{0}週間", + "year": "{0}幎", + "years": "{0}幎", + "year_short": "{0}幎", + "years_short": "{0}幎" + }, + "timeline": { + "collapse": "たたむ", + "conversation": "スレッド", + "error_fetching": "読み蟌みが゚ラヌになりたした", + "load_older": "叀いステヌタス", + "no_retweet_hint": "投皿を「フォロワヌのみ」たたは「ダむレクト」にするず、リピヌトできなくなりたす", + "repeated": "リピヌト", + "show_new": "読み蟌み", + "up_to_date": "最新", + "no_more_statuses": "これで終わりです", + "no_statuses": "ステヌタスはありたせん" + }, + "status": { + "favorites": "お気に入り", + "repeats": "リピヌト", + "delete": "ステヌタスを削陀", + "pin": "プロフィヌルにピン留め", + "unpin": "プロフィヌルのピン留めを倖す", + "pinned": "ピン留め", + "delete_confirm": "本圓にこのステヌタスを削陀しおもよろしいですか", + "reply_to": "返信", + "replies_list": "返信:", + "mute_conversation": "スレッドをミュヌト", + "unmute_conversation": "スレッドのミュヌトを解陀" + }, + "user_card": { + "approve": "受け入れ", + "block": "ブロック", + "blocked": "ブロックしおいたす", + "deny": "お断り", + "favorites": "お気に入り", + "follow": "フォロヌ", + "follow_sent": "リク゚ストを送りたした", + "follow_progress": "リク゚ストしおいたす ", + "follow_again": "再びリク゚ストを送りたすか", + "follow_unfollow": "フォロヌをやめる", + "followees": "フォロヌ", + "followers": "フォロワヌ", + "following": "フォロヌしおいたす", + "follows_you": "フォロヌされたした", + "its_you": "これはあなたです", + "media": "メディア", + "mention": "メンション", + "mute": "ミュヌト", + "muted": "ミュヌトしおいたす", + "per_day": "/日", + "remote_follow": "リモヌトフォロヌ", + "report": "通報", + "statuses": "ステヌタス", + "subscribe": "賌読", + "unsubscribe": "賌読を解陀", + "unblock": "ブロック解陀", + "unblock_progress": "ブロックを解陀しおいたす...", + "block_progress": "ブロックしおいたす...", + "unmute": "ミュヌト解陀", + "unmute_progress": "ミュヌトを解陀しおいたす...", + "mute_progress": "ミュヌトしおいたす...", + "admin_menu": { + "moderation": "モデレヌション", + "grant_admin": "管理者暩限を付䞎", + "revoke_admin": "管理者暩限を解陀", + "grant_moderator": "モデレヌタヌ暩限を付䞎", + "revoke_moderator": "モデレヌタヌ暩限を解陀", + "activate_account": "アカりントをアクティブにする", + "deactivate_account": "アカりントをアクティブでなくする", + "delete_account": "アカりントを削陀", + "force_nsfw": "すべおの投皿をNSFWにする", + "strip_media": "投皿からメディアを陀去する", + "force_unlisted": "投皿を未収茉にする", + "sandbox": "投皿をフォロワヌのみにする", + "disable_remote_subscription": "他のむンスタンスからフォロヌされないようにする", + "disable_any_subscription": "フォロヌされないようにする", + "quarantine": "他のむンスタンスからの投皿を止める", + "delete_user": "ナヌザヌを削陀", + "delete_user_confirmation": "あなたの粟神状態に䜕か問題はございたせんか この操䜜を取り消すこずはできたせん。" + } + }, + "user_profile": { + "timeline_title": "ナヌザヌタむムラむン", + "profile_does_not_exist": "申し蚳ない。このプロフィヌルは存圚したせん。", + "profile_loading_error": "申し蚳ない。プロフィヌルの読み蟌みが゚ラヌになりたした。" + }, + "user_reporting": { + "title": "通報する: {0}", + "add_comment_description": "この通報は、あなたのむンスタンスのモデレヌタヌに送られたす。このアカりントを通報する理由を説明するこずができたす:", + "additional_comments": "远加のコメント", + "forward_description": "このアカりントは他のサヌバヌに眮かれおいたす。この通報のコピヌをリモヌトのサヌバヌに送りたすか", + "forward_to": "転送する: {0}", + "submit": "送信", + "generic_error": "あなたのリク゚ストを凊理しようずしたしたが、゚ラヌになりたした。" + }, + "who_to_follow": { + "more": "詳现", + "who_to_follow": "おすすめナヌザヌ" + }, + "tool_tip": { + "media_upload": "メディアをアップロヌド", + "repeat": "リピヌト", + "reply": "返信", + "favorite": "お気に入り", + "user_settings": "ナヌザヌ蚭定" + }, + "upload":{ + "error": { + "base": "アップロヌドに倱敗したした。", + "file_too_big": "ファむルが倧きすぎたす [{filesize} {filesizeunit} / {allowedsize} {allowedsizeunit}]", + "default": "しばらくしおから詊しおください" + }, + "file_size_units": { + "B": "B", + "KiB": "KiB", + "MiB": "MiB", + "GiB": "GiB", + "TiB": "TiB" + } + }, + "search": { + "people": "人々", + "hashtags": "ハッシュタグ", + "person_talking": "{count} 人が話しおいたす", + "people_talking": "{count} 人が話しおいたす", + "no_results": "芋぀かりたせんでした" + }, + "password_reset": { + "forgot_password": "パスワヌドを忘れたしたか", + "password_reset": "パスワヌドリセット", + "instruction": "メヌルアドレスたたはナヌザヌ名を入力しおください。パスワヌドをリセットするためのリンクを送信したす。", + "placeholder": "メヌルアドレスたたはナヌザヌ名", + "check_email": "パスワヌドをリセットするためのリンクが蚘茉されたメヌルが届いおいるか確認しおください。", + "return_home": "ホヌムペヌゞに戻る", + "not_found": "メヌルアドレスたたはナヌザヌ名が芋぀かりたせんでした。", + "too_many_requests": "詊行回数の制限に達したした。しばらく時間を眮いおから再詊行しおください。", + "password_reset_disabled": "このむンスタンスではパスワヌドリセットは無効になっおいたす。むンスタンスの管理者に連絡しおください。" + } +} diff --git a/src/i18n/messages.js b/src/i18n/messages.js index 774a48e0..c56ae205 100644 --- a/src/i18n/messages.js +++ b/src/i18n/messages.js @@ -23,7 +23,7 @@ const messages = { he: require('./he.json'), hu: require('./hu.json'), it: require('./it.json'), - ja: require('./ja.json'), + ja: require('./ja_pedantic.json'), ja_easy: require('./ja_easy.json'), ko: require('./ko.json'), nb: require('./nb.json'), -- cgit v1.2.3-70-g09d2 From ddb6fb9217789e90490a4ec1ce7a2dd9ced67631 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 24 Nov 2019 13:57:46 +0200 Subject: Backend Interactor service overhaul, removed the need for copypasting --- .../follow_request_card/follow_request_card.js | 4 +- .../moderation_tools/moderation_tools.js | 16 +- .../user_reporting_modal/user_reporting_modal.js | 2 +- src/components/user_settings/user_settings.js | 8 +- src/modules/oauth_tokens.js | 2 +- src/modules/polls.js | 4 +- src/modules/statuses.js | 26 +-- src/modules/users.js | 16 +- .../backend_interactor_service.js | 231 ++------------------- .../follow_manipulate/follow_manipulate.js | 2 +- 10 files changed, 55 insertions(+), 256 deletions(-) (limited to 'src') diff --git a/src/components/follow_request_card/follow_request_card.js b/src/components/follow_request_card/follow_request_card.js index 1a00a1c1..a8931787 100644 --- a/src/components/follow_request_card/follow_request_card.js +++ b/src/components/follow_request_card/follow_request_card.js @@ -7,11 +7,11 @@ const FollowRequestCard = { }, methods: { approveUser () { - this.$store.state.api.backendInteractor.approveUser(this.user.id) + this.$store.state.api.backendInteractor.approveUser({ id: this.user.id }) this.$store.dispatch('removeFollowRequest', this.user) }, denyUser () { - this.$store.state.api.backendInteractor.denyUser(this.user.id) + this.$store.state.api.backendInteractor.denyUser({ id: this.user.id }) this.$store.dispatch('removeFollowRequest', this.user) } } diff --git a/src/components/moderation_tools/moderation_tools.js b/src/components/moderation_tools/moderation_tools.js index 8aadc8c5..5bb76497 100644 --- a/src/components/moderation_tools/moderation_tools.js +++ b/src/components/moderation_tools/moderation_tools.js @@ -45,12 +45,12 @@ const ModerationTools = { toggleTag (tag) { const store = this.$store if (this.tagsSet.has(tag)) { - store.state.api.backendInteractor.untagUser(this.user, tag).then(response => { + store.state.api.backendInteractor.untagUser({ user: this.user, tag }).then(response => { if (!response.ok) { return } store.commit('untagUser', { user: this.user, tag }) }) } else { - store.state.api.backendInteractor.tagUser(this.user, tag).then(response => { + store.state.api.backendInteractor.tagUser({ user: this.user, tag }).then(response => { if (!response.ok) { return } store.commit('tagUser', { user: this.user, tag }) }) @@ -59,21 +59,21 @@ const ModerationTools = { toggleRight (right) { const store = this.$store if (this.user.rights[right]) { - store.state.api.backendInteractor.deleteRight(this.user, right).then(response => { + store.state.api.backendInteractor.deleteRight({ user: this.user, right }).then(response => { if (!response.ok) { return } - store.commit('updateRight', { user: this.user, right: right, value: false }) + store.commit('updateRight', { user: this.user, right, value: false }) }) } else { - store.state.api.backendInteractor.addRight(this.user, right).then(response => { + store.state.api.backendInteractor.addRight({ user: this.user, right }).then(response => { if (!response.ok) { return } - store.commit('updateRight', { user: this.user, right: right, value: true }) + store.commit('updateRight', { user: this.user, right, value: true }) }) } }, toggleActivationStatus () { const store = this.$store const status = !!this.user.deactivated - store.state.api.backendInteractor.setActivationStatus(this.user, status).then(response => { + store.state.api.backendInteractor.setActivationStatus({ user: this.user, status }).then(response => { if (!response.ok) { return } store.commit('updateActivationStatus', { user: this.user, status: status }) }) @@ -85,7 +85,7 @@ const ModerationTools = { const store = this.$store const user = this.user const { id, name } = user - store.state.api.backendInteractor.deleteUser(user) + store.state.api.backendInteractor.deleteUser({ user }) .then(e => { this.$store.dispatch('markStatusesAsDeleted', status => user.id === status.user.id) const isProfile = this.$route.name === 'external-user-profile' || this.$route.name === 'user-profile' diff --git a/src/components/user_reporting_modal/user_reporting_modal.js b/src/components/user_reporting_modal/user_reporting_modal.js index 833fa98a..38cf117b 100644 --- a/src/components/user_reporting_modal/user_reporting_modal.js +++ b/src/components/user_reporting_modal/user_reporting_modal.js @@ -64,7 +64,7 @@ const UserReportingModal = { forward: this.forward, statusIds: this.statusIdsToReport } - this.$store.state.api.backendInteractor.reportUser(params) + this.$store.state.api.backendInteractor.reportUser({ ...params }) .then(() => { this.processing = false this.resetState() diff --git a/src/components/user_settings/user_settings.js b/src/components/user_settings/user_settings.js index 3fdc5340..d5d671e4 100644 --- a/src/components/user_settings/user_settings.js +++ b/src/components/user_settings/user_settings.js @@ -242,7 +242,7 @@ const UserSettings = { }) }, importFollows (file) { - return this.$store.state.api.backendInteractor.importFollows(file) + return this.$store.state.api.backendInteractor.importFollows({ file }) .then((status) => { if (!status) { throw new Error('failed') @@ -250,7 +250,7 @@ const UserSettings = { }) }, importBlocks (file) { - return this.$store.state.api.backendInteractor.importBlocks(file) + return this.$store.state.api.backendInteractor.importBlocks({ file }) .then((status) => { if (!status) { throw new Error('failed') @@ -297,7 +297,7 @@ const UserSettings = { newPassword: this.changePasswordInputs[1], newPasswordConfirmation: this.changePasswordInputs[2] } - this.$store.state.api.backendInteractor.changePassword(params) + this.$store.state.api.backendInteractor.changePassword({ params }) .then((res) => { if (res.status === 'success') { this.changedPassword = true @@ -314,7 +314,7 @@ const UserSettings = { email: this.newEmail, password: this.changeEmailPassword } - this.$store.state.api.backendInteractor.changeEmail(params) + this.$store.state.api.backendInteractor.changeEmail({ params }) .then((res) => { if (res.status === 'success') { this.changedEmail = true diff --git a/src/modules/oauth_tokens.js b/src/modules/oauth_tokens.js index 0159a3f1..907cae4a 100644 --- a/src/modules/oauth_tokens.js +++ b/src/modules/oauth_tokens.js @@ -9,7 +9,7 @@ const oauthTokens = { }) }, revokeToken ({ rootState, commit, state }, id) { - rootState.api.backendInteractor.revokeOAuthToken(id).then((response) => { + rootState.api.backendInteractor.revokeOAuthToken({ id }).then((response) => { if (response.status === 201) { commit('swapTokens', state.tokens.filter(token => token.id !== id)) } diff --git a/src/modules/polls.js b/src/modules/polls.js index e6158b63..92b89a06 100644 --- a/src/modules/polls.js +++ b/src/modules/polls.js @@ -40,7 +40,7 @@ const polls = { commit('mergeOrAddPoll', poll) }, updateTrackedPoll ({ rootState, dispatch, commit }, pollId) { - rootState.api.backendInteractor.fetchPoll(pollId).then(poll => { + rootState.api.backendInteractor.fetchPoll({ pollId }).then(poll => { setTimeout(() => { if (rootState.polls.trackedPolls[pollId]) { dispatch('updateTrackedPoll', pollId) @@ -59,7 +59,7 @@ const polls = { commit('untrackPoll', pollId) }, votePoll ({ rootState, commit }, { id, pollId, choices }) { - return rootState.api.backendInteractor.vote(pollId, choices).then(poll => { + return rootState.api.backendInteractor.vote({ pollId, choices }).then(poll => { commit('mergeOrAddPoll', poll) return poll }) diff --git a/src/modules/statuses.js b/src/modules/statuses.js index f11ffdcd..6a743a4a 100644 --- a/src/modules/statuses.js +++ b/src/modules/statuses.js @@ -551,45 +551,45 @@ const statuses = { favorite ({ rootState, commit }, status) { // Optimistic favoriting... commit('setFavorited', { status, value: true }) - rootState.api.backendInteractor.favorite(status.id) + rootState.api.backendInteractor.favorite({ id: status.id }) .then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser })) }, unfavorite ({ rootState, commit }, status) { // Optimistic unfavoriting... commit('setFavorited', { status, value: false }) - rootState.api.backendInteractor.unfavorite(status.id) + rootState.api.backendInteractor.unfavorite({ id: status.id }) .then(status => commit('setFavoritedConfirm', { status, user: rootState.users.currentUser })) }, fetchPinnedStatuses ({ rootState, dispatch }, userId) { - rootState.api.backendInteractor.fetchPinnedStatuses(userId) + rootState.api.backendInteractor.fetchPinnedStatuses({ id: userId }) .then(statuses => dispatch('addNewStatuses', { statuses, timeline: 'user', userId, showImmediately: true, noIdUpdate: true })) }, pinStatus ({ rootState, dispatch }, statusId) { - return rootState.api.backendInteractor.pinOwnStatus(statusId) + return rootState.api.backendInteractor.pinOwnStatus({ id: statusId }) .then((status) => dispatch('addNewStatuses', { statuses: [status] })) }, unpinStatus ({ rootState, dispatch }, statusId) { - rootState.api.backendInteractor.unpinOwnStatus(statusId) + rootState.api.backendInteractor.unpinOwnStatus({ id: statusId }) .then((status) => dispatch('addNewStatuses', { statuses: [status] })) }, muteConversation ({ rootState, commit }, statusId) { - return rootState.api.backendInteractor.muteConversation(statusId) + return rootState.api.backendInteractor.muteConversation({ id: statusId }) .then((status) => commit('setMutedStatus', status)) }, unmuteConversation ({ rootState, commit }, statusId) { - return rootState.api.backendInteractor.unmuteConversation(statusId) + return rootState.api.backendInteractor.unmuteConversation({ id: statusId }) .then((status) => commit('setMutedStatus', status)) }, retweet ({ rootState, commit }, status) { // Optimistic retweeting... commit('setRetweeted', { status, value: true }) - rootState.api.backendInteractor.retweet(status.id) + rootState.api.backendInteractor.retweet({ id: status.id }) .then(status => commit('setRetweetedConfirm', { status: status.retweeted_status, user: rootState.users.currentUser })) }, unretweet ({ rootState, commit }, status) { // Optimistic unretweeting... commit('setRetweeted', { status, value: false }) - rootState.api.backendInteractor.unretweet(status.id) + rootState.api.backendInteractor.unretweet({ id: status.id }) .then(status => commit('setRetweetedConfirm', { status, user: rootState.users.currentUser })) }, queueFlush ({ rootState, commit }, { timeline, id }) { @@ -604,19 +604,19 @@ const statuses = { }, fetchFavsAndRepeats ({ rootState, commit }, id) { Promise.all([ - rootState.api.backendInteractor.fetchFavoritedByUsers(id), - rootState.api.backendInteractor.fetchRebloggedByUsers(id) + rootState.api.backendInteractor.fetchFavoritedByUsers({ id }), + rootState.api.backendInteractor.fetchRebloggedByUsers({ id }) ]).then(([favoritedByUsers, rebloggedByUsers]) => { commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser }) commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser }) }) }, fetchFavs ({ rootState, commit }, id) { - rootState.api.backendInteractor.fetchFavoritedByUsers(id) + rootState.api.backendInteractor.fetchFavoritedByUsers({ id }) .then(favoritedByUsers => commit('addFavs', { id, favoritedByUsers, currentUser: rootState.users.currentUser })) }, fetchRepeats ({ rootState, commit }, id) { - rootState.api.backendInteractor.fetchRebloggedByUsers(id) + rootState.api.backendInteractor.fetchRebloggedByUsers({ id }) .then(rebloggedByUsers => commit('addRepeats', { id, rebloggedByUsers, currentUser: rootState.users.currentUser })) }, search (store, { q, resolve, limit, offset, following }) { diff --git a/src/modules/users.js b/src/modules/users.js index 14b2d8b5..e1373220 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -32,7 +32,7 @@ const getNotificationPermission = () => { } const blockUser = (store, id) => { - return store.rootState.api.backendInteractor.blockUser(id) + return store.rootState.api.backendInteractor.blockUser({ id }) .then((relationship) => { store.commit('updateUserRelationship', [relationship]) store.commit('addBlockId', id) @@ -43,12 +43,12 @@ const blockUser = (store, id) => { } const unblockUser = (store, id) => { - return store.rootState.api.backendInteractor.unblockUser(id) + return store.rootState.api.backendInteractor.unblockUser({ id }) .then((relationship) => store.commit('updateUserRelationship', [relationship])) } const muteUser = (store, id) => { - return store.rootState.api.backendInteractor.muteUser(id) + return store.rootState.api.backendInteractor.muteUser({ id }) .then((relationship) => { store.commit('updateUserRelationship', [relationship]) store.commit('addMuteId', id) @@ -56,7 +56,7 @@ const muteUser = (store, id) => { } const unmuteUser = (store, id) => { - return store.rootState.api.backendInteractor.unmuteUser(id) + return store.rootState.api.backendInteractor.unmuteUser({ id }) .then((relationship) => store.commit('updateUserRelationship', [relationship])) } @@ -324,11 +324,11 @@ const users = { commit('clearFollowers', userId) }, subscribeUser ({ rootState, commit }, id) { - return rootState.api.backendInteractor.subscribeUser(id) + return rootState.api.backendInteractor.subscribeUser({ id }) .then((relationship) => commit('updateUserRelationship', [relationship])) }, unsubscribeUser ({ rootState, commit }, id) { - return rootState.api.backendInteractor.unsubscribeUser(id) + return rootState.api.backendInteractor.unsubscribeUser({ id }) .then((relationship) => commit('updateUserRelationship', [relationship])) }, registerPushNotifications (store) { @@ -382,7 +382,7 @@ const users = { }) }, searchUsers (store, query) { - return store.rootState.api.backendInteractor.searchUsers(query) + return store.rootState.api.backendInteractor.searchUsers({ query }) .then((users) => { store.commit('addNewUsers', users) return users @@ -394,7 +394,7 @@ const users = { let rootState = store.rootState try { - let data = await rootState.api.backendInteractor.register(userInfo) + let data = await rootState.api.backendInteractor.register({ ...userInfo }) store.commit('signUpSuccess') store.commit('setToken', data.access_token) store.dispatch('loginUser', data.access_token) diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index c16bd1f1..57fdccde 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -3,228 +3,27 @@ import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service import notificationsFetcher from '../notifications_fetcher/notifications_fetcher.service.js' import followRequestFetcher from '../../services/follow_request_fetcher/follow_request_fetcher.service' -const backendInteractorService = credentials => { - const fetchStatus = ({ id }) => { - return apiService.fetchStatus({ id, credentials }) - } - - const fetchConversation = ({ id }) => { - return apiService.fetchConversation({ id, credentials }) - } - - const fetchFriends = ({ id, maxId, sinceId, limit }) => { - return apiService.fetchFriends({ id, maxId, sinceId, limit, credentials }) - } - - const exportFriends = ({ id }) => { - return apiService.exportFriends({ id, credentials }) - } - - const fetchFollowers = ({ id, maxId, sinceId, limit }) => { - return apiService.fetchFollowers({ id, maxId, sinceId, limit, credentials }) - } - - const fetchUser = ({ id }) => { - return apiService.fetchUser({ id, credentials }) - } - - const fetchUserRelationship = ({ id }) => { - return apiService.fetchUserRelationship({ id, credentials }) - } - - const followUser = ({ id, reblogs }) => { - return apiService.followUser({ credentials, id, reblogs }) - } - - const unfollowUser = (id) => { - return apiService.unfollowUser({ credentials, id }) - } - - const blockUser = (id) => { - return apiService.blockUser({ credentials, id }) - } - - const unblockUser = (id) => { - return apiService.unblockUser({ credentials, id }) - } - - const approveUser = (id) => { - return apiService.approveUser({ credentials, id }) - } - - const denyUser = (id) => { - return apiService.denyUser({ credentials, id }) - } - - const startFetchingTimeline = ({ timeline, store, userId = false, tag }) => { +const backendInteractorService = credentials => ({ + startFetchingTimeline ({ timeline, store, userId = false, tag }) { return timelineFetcherService.startFetching({ timeline, store, credentials, userId, tag }) - } + }, - const startFetchingNotifications = ({ store }) => { + startFetchingNotifications ({ store }) { return notificationsFetcher.startFetching({ store, credentials }) - } + }, - const startFetchingFollowRequest = ({ store }) => { + startFetchingFollowRequest ({ store }) { return followRequestFetcher.startFetching({ store, credentials }) - } - - // eslint-disable-next-line camelcase - const tagUser = ({ screen_name }, tag) => { - return apiService.tagUser({ screen_name, tag, credentials }) - } - - // eslint-disable-next-line camelcase - const untagUser = ({ screen_name }, tag) => { - return apiService.untagUser({ screen_name, tag, credentials }) - } - - // eslint-disable-next-line camelcase - const addRight = ({ screen_name }, right) => { - return apiService.addRight({ screen_name, right, credentials }) - } - - // eslint-disable-next-line camelcase - const deleteRight = ({ screen_name }, right) => { - return apiService.deleteRight({ screen_name, right, credentials }) - } - - // eslint-disable-next-line camelcase - const setActivationStatus = ({ screen_name }, status) => { - return apiService.setActivationStatus({ screen_name, status, credentials }) - } - - // eslint-disable-next-line camelcase - const deleteUser = ({ screen_name }) => { - return apiService.deleteUser({ screen_name, credentials }) - } - - const vote = (pollId, choices) => { - return apiService.vote({ credentials, pollId, choices }) - } - - const fetchPoll = (pollId) => { - return apiService.fetchPoll({ credentials, pollId }) - } - - const updateNotificationSettings = ({ settings }) => { - return apiService.updateNotificationSettings({ credentials, settings }) - } - - const fetchMutes = () => apiService.fetchMutes({ credentials }) - const muteUser = (id) => apiService.muteUser({ credentials, id }) - const unmuteUser = (id) => apiService.unmuteUser({ credentials, id }) - const subscribeUser = (id) => apiService.subscribeUser({ credentials, id }) - const unsubscribeUser = (id) => apiService.unsubscribeUser({ credentials, id }) - const fetchBlocks = () => apiService.fetchBlocks({ credentials }) - const fetchOAuthTokens = () => apiService.fetchOAuthTokens({ credentials }) - const revokeOAuthToken = (id) => apiService.revokeOAuthToken({ id, credentials }) - const fetchPinnedStatuses = (id) => apiService.fetchPinnedStatuses({ credentials, id }) - const pinOwnStatus = (id) => apiService.pinOwnStatus({ credentials, id }) - const unpinOwnStatus = (id) => apiService.unpinOwnStatus({ credentials, id }) - const muteConversation = (id) => apiService.muteConversation({ credentials, id }) - const unmuteConversation = (id) => apiService.unmuteConversation({ credentials, id }) - - const getCaptcha = () => apiService.getCaptcha() - const register = (params) => apiService.register({ credentials, params }) - const updateAvatar = ({ avatar }) => apiService.updateAvatar({ credentials, avatar }) - const updateBg = ({ background }) => apiService.updateBg({ credentials, background }) - const updateBanner = ({ banner }) => apiService.updateBanner({ credentials, banner }) - const updateProfile = ({ params }) => apiService.updateProfile({ credentials, params }) - - const importBlocks = (file) => apiService.importBlocks({ file, credentials }) - const importFollows = (file) => apiService.importFollows({ file, credentials }) - - const deleteAccount = ({ password }) => apiService.deleteAccount({ credentials, password }) - const changeEmail = ({ email, password }) => apiService.changeEmail({ credentials, email, password }) - const changePassword = ({ password, newPassword, newPasswordConfirmation }) => - apiService.changePassword({ credentials, password, newPassword, newPasswordConfirmation }) - - const fetchSettingsMFA = () => apiService.settingsMFA({ credentials }) - const generateMfaBackupCodes = () => apiService.generateMfaBackupCodes({ credentials }) - const mfaSetupOTP = () => apiService.mfaSetupOTP({ credentials }) - const mfaConfirmOTP = ({ password, token }) => apiService.mfaConfirmOTP({ credentials, password, token }) - const mfaDisableOTP = ({ password }) => apiService.mfaDisableOTP({ credentials, password }) - - const fetchFavoritedByUsers = (id) => apiService.fetchFavoritedByUsers({ id }) - const fetchRebloggedByUsers = (id) => apiService.fetchRebloggedByUsers({ id }) - const reportUser = (params) => apiService.reportUser({ credentials, ...params }) - - const favorite = (id) => apiService.favorite({ id, credentials }) - const unfavorite = (id) => apiService.unfavorite({ id, credentials }) - const retweet = (id) => apiService.retweet({ id, credentials }) - const unretweet = (id) => apiService.unretweet({ id, credentials }) - const search2 = ({ q, resolve, limit, offset, following }) => - apiService.search2({ credentials, q, resolve, limit, offset, following }) - const searchUsers = (query) => apiService.searchUsers({ query, credentials }) + }, - const backendInteractorServiceInstance = { - fetchStatus, - fetchConversation, - fetchFriends, - exportFriends, - fetchFollowers, - followUser, - unfollowUser, - blockUser, - unblockUser, - fetchUser, - fetchUserRelationship, - verifyCredentials: apiService.verifyCredentials, - startFetchingTimeline, - startFetchingNotifications, - startFetchingFollowRequest, - fetchMutes, - muteUser, - unmuteUser, - subscribeUser, - unsubscribeUser, - fetchBlocks, - fetchOAuthTokens, - revokeOAuthToken, - fetchPinnedStatuses, - pinOwnStatus, - unpinOwnStatus, - muteConversation, - unmuteConversation, - tagUser, - untagUser, - addRight, - deleteRight, - deleteUser, - setActivationStatus, - register, - getCaptcha, - updateAvatar, - updateBg, - updateBanner, - updateProfile, - importBlocks, - importFollows, - deleteAccount, - changeEmail, - changePassword, - fetchSettingsMFA, - generateMfaBackupCodes, - mfaSetupOTP, - mfaConfirmOTP, - mfaDisableOTP, - approveUser, - denyUser, - vote, - fetchPoll, - fetchFavoritedByUsers, - fetchRebloggedByUsers, - reportUser, - favorite, - unfavorite, - retweet, - unretweet, - updateNotificationSettings, - search2, - searchUsers - } + ...Object.entries(apiService).reduce((acc, [key, func]) => { + return { + ...acc, + [key]: (args) => func({ credentials, ...args }) + } + }, {}), - return backendInteractorServiceInstance -} + verifyCredentials: apiService.verifyCredentials +}) export default backendInteractorService diff --git a/src/services/follow_manipulate/follow_manipulate.js b/src/services/follow_manipulate/follow_manipulate.js index 598cb5f7..29b38a0f 100644 --- a/src/services/follow_manipulate/follow_manipulate.js +++ b/src/services/follow_manipulate/follow_manipulate.js @@ -39,7 +39,7 @@ export const requestFollow = (user, store) => new Promise((resolve, reject) => { }) export const requestUnfollow = (user, store) => new Promise((resolve, reject) => { - store.state.api.backendInteractor.unfollowUser(user.id) + store.state.api.backendInteractor.unfollowUser({ id: user.id }) .then((updated) => { store.commit('updateUserRelationship', [updated]) resolve({ -- cgit v1.2.3-70-g09d2 From 319bb4ac2895b8eb62da42e3f95addc9bb67b1a0 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 24 Nov 2019 18:50:28 +0200 Subject: initial streaming work --- src/modules/api.js | 15 ++++++++ src/modules/users.js | 13 ++++--- src/services/api/api.service.js | 40 ++++++++++++++++++++++ .../backend_interactor_service.js | 15 +++++++- 4 files changed, 77 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/modules/api.js b/src/modules/api.js index 1293e3c8..1bf65db5 100644 --- a/src/modules/api.js +++ b/src/modules/api.js @@ -6,6 +6,7 @@ const api = { backendInteractor: backendInteractorService(), fetchers: {}, socket: null, + mastoSocket: null, followRequests: [] }, mutations: { @@ -29,6 +30,20 @@ const api = { } }, actions: { + startMastoSocket (store) { + store.state.mastoSocket = store.state.backendInteractor + .startUserSocket({ + store, + onMessage: (message) => { + if (!message) return + if (message.event === 'notification') { + store.dispatch('addNewNotifications', { notifications: [message.notification], older: false }) + } else if (message.event === 'update') { + store.dispatch('addNewStatuses', { statuses: [message.status], userId: false, showImmediately: false, timeline: 'friends' }) + } + } + }) + }, startFetchingTimeline (store, { timeline = 'friends', tag = false, userId = false }) { // Don't start fetching if we already are. if (store.state.fetchers[timeline]) return diff --git a/src/modules/users.js b/src/modules/users.js index e1373220..861a2f4f 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -469,11 +469,14 @@ const users = { store.dispatch('initializeSocket') } - // Start getting fresh posts. - store.dispatch('startFetchingTimeline', { timeline: 'friends' }) - - // Start fetching notifications - store.dispatch('startFetchingNotifications') + store.dispatch('startMastoSocket').catch((error) => { + console.error(error) + // Start getting fresh posts. + store.dispatch('startFetchingTimeline', { timeline: 'friends' }) + + // Start fetching notifications + store.dispatch('startFetchingNotifications') + }) // Get user mutes store.dispatch('fetchMutes') diff --git a/src/services/api/api.service.js b/src/services/api/api.service.js index 8f5eb416..7f27564f 100644 --- a/src/services/api/api.service.js +++ b/src/services/api/api.service.js @@ -71,6 +71,7 @@ const MASTODON_MUTE_CONVERSATION = id => `/api/v1/statuses/${id}/mute` const MASTODON_UNMUTE_CONVERSATION = id => `/api/v1/statuses/${id}/unmute` const MASTODON_SEARCH_2 = `/api/v2/search` const MASTODON_USER_SEARCH_URL = '/api/v1/accounts/search' +const MASTODON_STREAMING = '/api/v1/streaming' const oldfetch = window.fetch @@ -932,6 +933,45 @@ const search2 = ({ credentials, q, resolve, limit, offset, following }) => { }) } +export const getMastodonSocketURI = ({ credentials, stream, args = {} }) => { + return Object.entries({ + ...(credentials + ? { access_token: credentials } + : {} + ), + stream, + ...args + }).reduce((acc, [key, val]) => { + return acc + `${key}=${val}&` + }, MASTODON_STREAMING + '?') +} + +const MASTODON_STREAMING_EVENTS = new Set([ + 'update', + 'notification', + 'delete', + 'filters_changed' +]) + +export const handleMastoWS = (wsEvent) => { + console.debug('Event', wsEvent) + const { data } = wsEvent + if (!data) return + const parsedEvent = JSON.parse(data) + const { event, payload } = parsedEvent + if (MASTODON_STREAMING_EVENTS.has(event)) { + const data = payload ? JSON.parse(payload) : null + if (event === 'update') { + return { event, status: parseStatus(data) } + } else if (event === 'notification') { + return { event, notification: parseNotification(data) } + } + } else { + console.warn('Unknown event', wsEvent) + return null + } +} + const apiService = { verifyCredentials, fetchTimeline, diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index 57fdccde..0cef4640 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -1,4 +1,4 @@ -import apiService from '../api/api.service.js' +import apiService, { getMastodonSocketURI, handleMastoWS } from '../api/api.service.js' import timelineFetcherService from '../timeline_fetcher/timeline_fetcher.service.js' import notificationsFetcher from '../notifications_fetcher/notifications_fetcher.service.js' import followRequestFetcher from '../../services/follow_request_fetcher/follow_request_fetcher.service' @@ -16,6 +16,19 @@ const backendInteractorService = credentials => ({ return followRequestFetcher.startFetching({ store, credentials }) }, + startUserSocket ({ store, onMessage }) { + const serv = store.rootState.instance.server.replace('https', 'wss') + // const serb = 'ws://localhost:8080/' + const url = serv + getMastodonSocketURI({ credentials, stream: 'user' }) + const socket = new WebSocket(url) + console.log(socket) + if (socket) { + socket.addEventListener('message', (wsEvent) => onMessage(handleMastoWS(wsEvent))) + } else { + throw new Error('failed to connect to socket') + } + }, + ...Object.entries(apiService).reduce((acc, [key, func]) => { return { ...acc, -- cgit v1.2.3-70-g09d2 From 172ebaf4e67358852bfaafd8f069763ca5e602b1 Mon Sep 17 00:00:00 2001 From: Henry Jameson Date: Sun, 24 Nov 2019 22:01:12 +0200 Subject: improved initial notifications fetching --- src/components/notifications/notifications.js | 5 +++++ src/modules/api.js | 23 +++++++++++++++++++--- src/modules/users.js | 2 +- .../backend_interactor_service.js | 9 +++++++-- 4 files changed, 33 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/components/notifications/notifications.js b/src/components/notifications/notifications.js index 6c4054fd..a89c0cdc 100644 --- a/src/components/notifications/notifications.js +++ b/src/components/notifications/notifications.js @@ -47,6 +47,11 @@ const Notifications = { components: { Notification }, + created () { + const { dispatch } = this.$store + + dispatch('fetchAndUpdateNotifications') + }, watch: { unseenCount (count) { if (count > 0) { diff --git a/src/modules/api.js b/src/modules/api.js index 1bf65db5..0e7e5e19 100644 --- a/src/modules/api.js +++ b/src/modules/api.js @@ -31,18 +31,32 @@ const api = { }, actions: { startMastoSocket (store) { - store.state.mastoSocket = store.state.backendInteractor + const { state, dispatch } = store + state.mastoSocket = state.backendInteractor .startUserSocket({ store, onMessage: (message) => { if (!message) return if (message.event === 'notification') { - store.dispatch('addNewNotifications', { notifications: [message.notification], older: false }) + dispatch('addNewNotifications', { + notifications: [message.notification], + older: false + }) } else if (message.event === 'update') { - store.dispatch('addNewStatuses', { statuses: [message.status], userId: false, showImmediately: false, timeline: 'friends' }) + dispatch('addNewStatuses', { + statuses: [message.status], + userId: false, + showImmediately: false, + timeline: 'friends' + }) } } }) + state.mastoSocket.addEventListener('error', error => { + console.error('Error with MastoAPI websocket:', error) + dispatch('startFetchingTimeline', { timeline: 'friends' }) + dispatch('startFetchingNotifications') + }) }, startFetchingTimeline (store, { timeline = 'friends', tag = false, userId = false }) { // Don't start fetching if we already are. @@ -58,6 +72,9 @@ const api = { const fetcher = store.state.backendInteractor.startFetchingNotifications({ store }) store.commit('addFetcher', { fetcherName: 'notifications', fetcher }) }, + fetchAndUpdateNotifications (store) { + store.state.backendInteractor.fetchAndUpdateNotifications({ store }) + }, startFetchingFollowRequest (store) { // Don't start fetching if we already are. if (store.state.fetchers['followRequest']) return diff --git a/src/modules/users.js b/src/modules/users.js index 861a2f4f..eff0c5d5 100644 --- a/src/modules/users.js +++ b/src/modules/users.js @@ -470,7 +470,7 @@ const users = { } store.dispatch('startMastoSocket').catch((error) => { - console.error(error) + console.error('Failed initializing MastoAPI Streaming socket', error) // Start getting fresh posts. store.dispatch('startFetchingTimeline', { timeline: 'friends' }) diff --git a/src/services/backend_interactor_service/backend_interactor_service.js b/src/services/backend_interactor_service/backend_interactor_service.js index 0cef4640..850b7867 100644 --- a/src/services/backend_interactor_service/backend_interactor_service.js +++ b/src/services/backend_interactor_service/backend_interactor_service.js @@ -12,18 +12,23 @@ const backendInteractorService = credentials => ({ return notificationsFetcher.startFetching({ store, credentials }) }, + fetchAndUpdateNotifications ({ store }) { + return notificationsFetcher.fetchAndUpdate({ store, credentials }) + }, + startFetchingFollowRequest ({ store }) { return followRequestFetcher.startFetching({ store, credentials }) }, startUserSocket ({ store, onMessage }) { - const serv = store.rootState.instance.server.replace('https', 'wss') - // const serb = 'ws://localhost:8080/' + const serv = store.rootState.instance.server.replace('http', 'ws') const url = serv + getMastodonSocketURI({ credentials, stream: 'user' }) const socket = new WebSocket(url) console.log(socket) if (socket) { socket.addEventListener('message', (wsEvent) => onMessage(handleMastoWS(wsEvent))) + socket.addEventListener('error', (error) => console.error('WebSocket Error:', error)) + return socket } else { throw new Error('failed to connect to socket') } -- cgit v1.2.3-70-g09d2 From 40e774e05abfce6da3c558c09ce1750c132a580f Mon Sep 17 00:00:00 2001 From: taehoon Date: Mon, 25 Nov 2019 12:25:01 -0500 Subject: restore muted users collapsing logic on other user’s profiles MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/components/conversation/conversation.js | 3 ++- src/components/conversation/conversation.vue | 1 + src/components/status/status.js | 5 +++-- src/components/timeline/timeline.vue | 2 ++ 4 files changed, 8 insertions(+), 3 deletions(-) (limited to 'src') diff --git a/src/components/conversation/conversation.js b/src/components/conversation/conversation.js index 72ee9c39..08283fff 100644 --- a/src/components/conversation/conversation.js +++ b/src/components/conversation/conversation.js @@ -43,7 +43,8 @@ const conversation = { 'collapsable', 'isPage', 'pinnedStatusIdsObject', - 'inProfile' + 'inProfile', + 'profileUserId' ], created () { if (this.isPage) { diff --git a/src/components/conversation/conversation.vue b/src/components/conversation/conversation.vue index 0f1de55f..2e48240a 100644 --- a/src/components/conversation/conversation.vue +++ b/src/components/conversation/conversation.vue @@ -27,6 +27,7 @@ :highlight="getHighlight()" :replies="getReplies(status.id)" :in-profile="inProfile" + :profile-user-id="profileUserId" class="status-fadein panel-body" @goto="setHighlight" @toggleExpanded="toggleExpanded" diff --git a/src/components/status/status.js b/src/components/status/status.js index 714ea6d2..c49e729c 100644 --- a/src/components/status/status.js +++ b/src/components/status/status.js @@ -33,7 +33,8 @@ const Status = { 'noHeading', 'inlineExpanded', 'showPinned', - 'inProfile' + 'inProfile', + 'profileUserId' ], data () { return { @@ -115,7 +116,7 @@ const Status = { return hits }, - muted () { return !this.unmuted && ((!this.inProfile && this.status.user.muted) || (!this.inConversation && this.status.thread_muted) || this.muteWordHits.length > 0) }, + muted () { return !this.unmuted && ((!(this.inProfile && this.status.user.id === this.profileUserId) && this.status.user.muted) || (!this.inConversation && this.status.thread_muted) || this.muteWordHits.length > 0) }, hideFilteredStatuses () { return this.mergedConfig.hideFilteredStatuses }, diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index f1d3903a..93f6f570 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -37,6 +37,7 @@ :collapsable="true" :pinned-status-ids-object="pinnedStatusIdsObject" :in-profile="inProfile" + :profile-user-id="userId" />
      -- cgit v1.2.3-70-g09d2 From 7ebf3602d5d9a8630ffbe239bfe4431655046821 Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 26 Nov 2019 19:57:27 -0500 Subject: move mention button right next to mute button --- src/components/account_actions/account_actions.js | 3 --- src/components/account_actions/account_actions.vue | 18 ++++-------------- src/components/user_card/user_card.js | 3 +++ src/components/user_card/user_card.vue | 8 ++++++++ 4 files changed, 15 insertions(+), 17 deletions(-) (limited to 'src') diff --git a/src/components/account_actions/account_actions.js b/src/components/account_actions/account_actions.js index 204d506a..d2153680 100644 --- a/src/components/account_actions/account_actions.js +++ b/src/components/account_actions/account_actions.js @@ -25,9 +25,6 @@ const AccountActions = { }, reportUser () { this.$store.dispatch('openUserReportingModal', this.user.id) - }, - mentionUser () { - this.$store.dispatch('openPostStatusModal', { replyTo: true, repliedUser: this.user }) } } } diff --git a/src/components/account_actions/account_actions.vue b/src/components/account_actions/account_actions.vue index 046cba93..d3235be1 100644 --- a/src/components/account_actions/account_actions.vue +++ b/src/components/account_actions/account_actions.vue @@ -9,17 +9,7 @@ >
    -

    {{ $t("about.mrf_policy_simple") }}

    +

    + {{ $t("about.mrf_policy_simple") }} +

    {{ $t("about.mrf_policy_simple_accept") }}

    -- cgit v1.2.3-70-g09d2 From 0082ed837ed0b4b9a047520460782562bad0d8aa Mon Sep 17 00:00:00 2001 From: taehoon Date: Sun, 1 Dec 2019 12:56:53 -0500 Subject: versioning the font resources through webpack --- index.html | 2 - src/font/LICENSE.txt | 39 ++++ src/font/README.txt | 75 +++++++ src/font/config.json | 308 +++++++++++++++++++++++++++ src/font/css/animation.css | 85 ++++++++ src/font/css/fontello-codes.css | 48 +++++ src/font/css/fontello-embedded.css | 101 +++++++++ src/font/css/fontello-ie7-codes.css | 48 +++++ src/font/css/fontello-ie7.css | 59 ++++++ src/font/css/fontello.css | 104 +++++++++ src/font/demo.html | 374 +++++++++++++++++++++++++++++++++ src/font/font/fontello.eot | Bin 0 -> 20152 bytes src/font/font/fontello.svg | 104 +++++++++ src/font/font/fontello.ttf | Bin 0 -> 19984 bytes src/font/font/fontello.woff | Bin 0 -> 12248 bytes src/font/font/fontello.woff2 | Bin 0 -> 10392 bytes src/main.js | 3 + static/font/LICENSE.txt | 39 ---- static/font/README.txt | 75 ------- static/font/config.json | 308 --------------------------- static/font/css/animation.css | 85 -------- static/font/css/fontello-codes.css | 48 ----- static/font/css/fontello-embedded.css | 101 --------- static/font/css/fontello-ie7-codes.css | 48 ----- static/font/css/fontello-ie7.css | 59 ------ static/font/css/fontello.css | 104 --------- static/font/demo.html | 374 --------------------------------- static/font/font/fontello.eot | Bin 20152 -> 0 bytes static/font/font/fontello.svg | 104 --------- static/font/font/fontello.ttf | Bin 19984 -> 0 bytes static/font/font/fontello.woff | Bin 12248 -> 0 bytes static/font/font/fontello.woff2 | Bin 10392 -> 0 bytes 32 files changed, 1348 insertions(+), 1347 deletions(-) create mode 100755 src/font/LICENSE.txt create mode 100755 src/font/README.txt create mode 100755 src/font/config.json create mode 100755 src/font/css/animation.css create mode 100755 src/font/css/fontello-codes.css create mode 100755 src/font/css/fontello-embedded.css create mode 100755 src/font/css/fontello-ie7-codes.css create mode 100755 src/font/css/fontello-ie7.css create mode 100755 src/font/css/fontello.css create mode 100755 src/font/demo.html create mode 100755 src/font/font/fontello.eot create mode 100755 src/font/font/fontello.svg create mode 100755 src/font/font/fontello.ttf create mode 100755 src/font/font/fontello.woff create mode 100755 src/font/font/fontello.woff2 delete mode 100755 static/font/LICENSE.txt delete mode 100755 static/font/README.txt delete mode 100755 static/font/config.json delete mode 100755 static/font/css/animation.css delete mode 100755 static/font/css/fontello-codes.css delete mode 100755 static/font/css/fontello-embedded.css delete mode 100755 static/font/css/fontello-ie7-codes.css delete mode 100755 static/font/css/fontello-ie7.css delete mode 100755 static/font/css/fontello.css delete mode 100755 static/font/demo.html delete mode 100755 static/font/font/fontello.eot delete mode 100755 static/font/font/fontello.svg delete mode 100755 static/font/font/fontello.ttf delete mode 100755 static/font/font/fontello.woff delete mode 100755 static/font/font/fontello.woff2 (limited to 'src') diff --git a/index.html b/index.html index fd4e795e..1ff944d9 100644 --- a/index.html +++ b/index.html @@ -6,8 +6,6 @@ Pleroma - - diff --git a/src/font/LICENSE.txt b/src/font/LICENSE.txt new file mode 100755 index 00000000..95966f00 --- /dev/null +++ b/src/font/LICENSE.txt @@ -0,0 +1,39 @@ +Font license info + + +## Font Awesome + + Copyright (C) 2016 by Dave Gandy + + Author: Dave Gandy + License: SIL () + Homepage: http://fortawesome.github.com/Font-Awesome/ + + +## Entypo + + Copyright (C) 2012 by Daniel Bruce + + Author: Daniel Bruce + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://www.entypo.com + + +## Iconic + + Copyright (C) 2012 by P.J. Onori + + Author: P.J. Onori + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://somerandomdude.com/work/iconic/ + + +## Fontelico + + Copyright (C) 2012 by Fontello project + + Author: Crowdsourced, for Fontello project + License: SIL (http://scripts.sil.org/OFL) + Homepage: http://fontello.com + + diff --git a/src/font/README.txt b/src/font/README.txt new file mode 100755 index 00000000..beaab336 --- /dev/null +++ b/src/font/README.txt @@ -0,0 +1,75 @@ +This webfont is generated by http://fontello.com open source project. + + +================================================================================ +Please, note, that you should obey original font licenses, used to make this +webfont pack. Details available in LICENSE.txt file. + +- Usually, it's enough to publish content of LICENSE.txt file somewhere on your + site in "About" section. + +- If your project is open-source, usually, it will be ok to make LICENSE.txt + file publicly available in your repository. + +- Fonts, used in Fontello, don't require a clickable link on your site. + But any kind of additional authors crediting is welcome. +================================================================================ + + +Comments on archive content +--------------------------- + +- /font/* - fonts in different formats + +- /css/* - different kinds of css, for all situations. Should be ok with + twitter bootstrap. Also, you can skip style and assign icon classes + directly to text elements, if you don't mind about IE7. + +- demo.html - demo file, to show your webfont content + +- LICENSE.txt - license info about source fonts, used to build your one. + +- config.json - keeps your settings. You can import it back into fontello + anytime, to continue your work + + +Why so many CSS files ? +----------------------- + +Because we like to fit all your needs :) + +- basic file, .css - is usually enough, it contains @font-face + and character code definitions + +- *-ie7.css - if you need IE7 support, but still don't wish to put char codes + directly into html + +- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face + rules, but still wish to benefit from css generation. That can be very + convenient for automated asset build systems. When you need to update font - + no need to manually edit files, just override old version with archive + content. See fontello source code for examples. + +- *-embedded.css - basic css file, but with embedded WOFF font, to avoid + CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. + We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` + server headers. But if you ok with dirty hack - this file is for you. Note, + that data url moved to separate @font-face to avoid problems with + + + + + + + +
    +

    fontello font demo

    + +
    +
    +
    +
    icon-cancel0xe800
    +
    icon-upload0xe801
    +
    icon-star0xe802
    +
    icon-star-empty0xe803
    +
    +
    +
    icon-retweet0xe804
    +
    icon-eye-off0xe805
    +
    icon-search0xe806
    +
    icon-cog0xe807
    +
    +
    +
    icon-logout0xe808
    +
    icon-down-open0xe809
    +
    icon-attach0xe80a
    +
    icon-picture0xe80b
    +
    +
    +
    icon-video0xe80c
    +
    icon-right-open0xe80d
    +
    icon-left-open0xe80e
    +
    icon-up-open0xe80f
    +
    +
    +
    icon-bell-ringing-o0xe810
    +
    icon-lock0xe811
    +
    icon-globe0xe812
    +
    icon-brush0xe813
    +
    +
    +
    icon-attention0xe814
    +
    icon-plus0xe815
    +
    icon-adjust0xe816
    +
    icon-edit0xe817
    +
    +
    +
    icon-pencil0xe818
    +
    icon-pin0xe819
    +
    icon-wrench0xe81a
    +
    icon-chart-bar0xe81b
    +
    +
    +
    icon-zoom-in0xe81c
    +
    icon-spin30xe832
    +
    icon-spin40xe834
    +
    icon-link-ext0xf08e
    +
    +
    +
    icon-link-ext-alt0xf08f
    +
    icon-menu0xf0c9
    +
    icon-mail-alt0xf0e0
    +
    icon-gauge0xf0e4
    +
    +
    +
    icon-comment-empty0xf0e5
    +
    icon-bell-alt0xf0f3
    +
    icon-plus-squared0xf0fe
    +
    icon-reply0xf112
    +
    +
    +
    icon-smile0xf118
    +
    icon-lock-open-alt0xf13e
    +
    icon-ellipsis0xf141
    +
    icon-play-circled0xf144
    +
    +
    +
    icon-thumbs-up-alt0xf164
    +
    icon-binoculars0xf1e5
    +
    icon-user-plus0xf234
    +
    +
    + + + \ No newline at end of file diff --git a/src/font/font/fontello.eot b/src/font/font/fontello.eot new file mode 100755 index 00000000..1703fd97 Binary files /dev/null and b/src/font/font/fontello.eot differ diff --git a/src/font/font/fontello.svg b/src/font/font/fontello.svg new file mode 100755 index 00000000..f5e497ce --- /dev/null +++ b/src/font/font/fontello.svg @@ -0,0 +1,104 @@ + + + +Copyright (C) 2019 by original authors @ fontello.com + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/src/font/font/fontello.ttf b/src/font/font/fontello.ttf new file mode 100755 index 00000000..e9ed7803 Binary files /dev/null and b/src/font/font/fontello.ttf differ diff --git a/src/font/font/fontello.woff b/src/font/font/fontello.woff new file mode 100755 index 00000000..1d5025d3 Binary files /dev/null and b/src/font/font/fontello.woff differ diff --git a/src/font/font/fontello.woff2 b/src/font/font/fontello.woff2 new file mode 100755 index 00000000..078991eb Binary files /dev/null and b/src/font/font/fontello.woff2 differ diff --git a/src/main.js b/src/main.js index a9db1cff..6469ba5c 100644 --- a/src/main.js +++ b/src/main.js @@ -32,6 +32,9 @@ import VTooltip from 'v-tooltip' import afterStoreSetup from './boot/after_store.js' +import './font/css/fontello.css' +import './font/css/animation.css' + const currentLocale = (window.navigator.language || 'en').split('-')[0] Vue.use(Vuex) diff --git a/static/font/LICENSE.txt b/static/font/LICENSE.txt deleted file mode 100755 index 95966f00..00000000 --- a/static/font/LICENSE.txt +++ /dev/null @@ -1,39 +0,0 @@ -Font license info - - -## Font Awesome - - Copyright (C) 2016 by Dave Gandy - - Author: Dave Gandy - License: SIL () - Homepage: http://fortawesome.github.com/Font-Awesome/ - - -## Entypo - - Copyright (C) 2012 by Daniel Bruce - - Author: Daniel Bruce - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://www.entypo.com - - -## Iconic - - Copyright (C) 2012 by P.J. Onori - - Author: P.J. Onori - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://somerandomdude.com/work/iconic/ - - -## Fontelico - - Copyright (C) 2012 by Fontello project - - Author: Crowdsourced, for Fontello project - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://fontello.com - - diff --git a/static/font/README.txt b/static/font/README.txt deleted file mode 100755 index beaab336..00000000 --- a/static/font/README.txt +++ /dev/null @@ -1,75 +0,0 @@ -This webfont is generated by http://fontello.com open source project. - - -================================================================================ -Please, note, that you should obey original font licenses, used to make this -webfont pack. Details available in LICENSE.txt file. - -- Usually, it's enough to publish content of LICENSE.txt file somewhere on your - site in "About" section. - -- If your project is open-source, usually, it will be ok to make LICENSE.txt - file publicly available in your repository. - -- Fonts, used in Fontello, don't require a clickable link on your site. - But any kind of additional authors crediting is welcome. -================================================================================ - - -Comments on archive content ---------------------------- - -- /font/* - fonts in different formats - -- /css/* - different kinds of css, for all situations. Should be ok with - twitter bootstrap. Also, you can skip style and assign icon classes - directly to text elements, if you don't mind about IE7. - -- demo.html - demo file, to show your webfont content - -- LICENSE.txt - license info about source fonts, used to build your one. - -- config.json - keeps your settings. You can import it back into fontello - anytime, to continue your work - - -Why so many CSS files ? ------------------------ - -Because we like to fit all your needs :) - -- basic file, .css - is usually enough, it contains @font-face - and character code definitions - -- *-ie7.css - if you need IE7 support, but still don't wish to put char codes - directly into html - -- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face - rules, but still wish to benefit from css generation. That can be very - convenient for automated asset build systems. When you need to update font - - no need to manually edit files, just override old version with archive - content. See fontello source code for examples. - -- *-embedded.css - basic css file, but with embedded WOFF font, to avoid - CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. - We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` - server headers. But if you ok with dirty hack - this file is for you. Note, - that data url moved to separate @font-face to avoid problems with - - - - - - - -
    -

    fontello font demo

    - -
    -
    -
    -
    icon-cancel0xe800
    -
    icon-upload0xe801
    -
    icon-star0xe802
    -
    icon-star-empty0xe803
    -
    -
    -
    icon-retweet0xe804
    -
    icon-eye-off0xe805
    -
    icon-search0xe806
    -
    icon-cog0xe807
    -
    -
    -
    icon-logout0xe808
    -
    icon-down-open0xe809
    -
    icon-attach0xe80a
    -
    icon-picture0xe80b
    -
    -
    -
    icon-video0xe80c
    -
    icon-right-open0xe80d
    -
    icon-left-open0xe80e
    -
    icon-up-open0xe80f
    -
    -
    -
    icon-bell-ringing-o0xe810
    -
    icon-lock0xe811
    -
    icon-globe0xe812
    -
    icon-brush0xe813
    -
    -
    -
    icon-attention0xe814
    -
    icon-plus0xe815
    -
    icon-adjust0xe816
    -
    icon-edit0xe817
    -
    -
    -
    icon-pencil0xe818
    -
    icon-pin0xe819
    -
    icon-wrench0xe81a
    -
    icon-chart-bar0xe81b
    -
    -
    -
    icon-zoom-in0xe81c
    -
    icon-spin30xe832
    -
    icon-spin40xe834
    -
    icon-link-ext0xf08e
    -
    -
    -
    icon-link-ext-alt0xf08f
    -
    icon-menu0xf0c9
    -
    icon-mail-alt0xf0e0
    -
    icon-gauge0xf0e4
    -
    -
    -
    icon-comment-empty0xf0e5
    -
    icon-bell-alt0xf0f3
    -
    icon-plus-squared0xf0fe
    -
    icon-reply0xf112
    -
    -
    -
    icon-smile0xf118
    -
    icon-lock-open-alt0xf13e
    -
    icon-ellipsis0xf141
    -
    icon-play-circled0xf144
    -
    -
    -
    icon-thumbs-up-alt0xf164
    -
    icon-binoculars0xf1e5
    -
    icon-user-plus0xf234
    -
    -
    - - - \ No newline at end of file diff --git a/static/font/font/fontello.eot b/static/font/font/fontello.eot deleted file mode 100755 index 1703fd97..00000000 Binary files a/static/font/font/fontello.eot and /dev/null differ diff --git a/static/font/font/fontello.svg b/static/font/font/fontello.svg deleted file mode 100755 index f5e497ce..00000000 --- a/static/font/font/fontello.svg +++ /dev/null @@ -1,104 +0,0 @@ - - - -Copyright (C) 2019 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/static/font/font/fontello.ttf b/static/font/font/fontello.ttf deleted file mode 100755 index e9ed7803..00000000 Binary files a/static/font/font/fontello.ttf and /dev/null differ diff --git a/static/font/font/fontello.woff b/static/font/font/fontello.woff deleted file mode 100755 index 1d5025d3..00000000 Binary files a/static/font/font/fontello.woff and /dev/null differ diff --git a/static/font/font/fontello.woff2 b/static/font/font/fontello.woff2 deleted file mode 100755 index 078991eb..00000000 Binary files a/static/font/font/fontello.woff2 and /dev/null differ -- cgit v1.2.3-70-g09d2 From afd4524c3920f8426051e0673b42f022cb3627fe Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 3 Dec 2019 10:32:46 -0500 Subject: use another approach for versioning font files --- build/webpack.base.conf.js | 11 ++ package.json | 1 + src/font/LICENSE.txt | 39 ---- src/font/README.txt | 75 -------- src/font/config.json | 308 ----------------------------- src/font/css/animation.css | 85 -------- src/font/css/fontello-codes.css | 48 ----- src/font/css/fontello-embedded.css | 101 ---------- src/font/css/fontello-ie7-codes.css | 48 ----- src/font/css/fontello-ie7.css | 59 ------ src/font/css/fontello.css | 104 ---------- src/font/demo.html | 374 ------------------------------------ src/font/font/fontello.eot | Bin 20152 -> 0 bytes src/font/font/fontello.svg | 104 ---------- src/font/font/fontello.ttf | Bin 19984 -> 0 bytes src/font/font/fontello.woff | Bin 12248 -> 0 bytes src/font/font/fontello.woff2 | Bin 10392 -> 0 bytes src/main.js | 4 +- static/fontello.json | 308 +++++++++++++++++++++++++++++ yarn.lock | 191 +++++++++++++++++- 20 files changed, 506 insertions(+), 1354 deletions(-) delete mode 100755 src/font/LICENSE.txt delete mode 100755 src/font/README.txt delete mode 100755 src/font/config.json delete mode 100755 src/font/css/animation.css delete mode 100755 src/font/css/fontello-codes.css delete mode 100755 src/font/css/fontello-embedded.css delete mode 100755 src/font/css/fontello-ie7-codes.css delete mode 100755 src/font/css/fontello-ie7.css delete mode 100755 src/font/css/fontello.css delete mode 100755 src/font/demo.html delete mode 100755 src/font/font/fontello.eot delete mode 100755 src/font/font/fontello.svg delete mode 100755 src/font/font/fontello.ttf delete mode 100755 src/font/font/fontello.woff delete mode 100755 src/font/font/fontello.woff2 create mode 100755 static/fontello.json (limited to 'src') diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js index f8968966..9313ec20 100644 --- a/build/webpack.base.conf.js +++ b/build/webpack.base.conf.js @@ -3,6 +3,7 @@ var config = require('../config') var utils = require('./utils') var projectRoot = path.resolve(__dirname, '../') var ServiceWorkerWebpackPlugin = require('serviceworker-webpack-plugin') +var FontelloPlugin = require("fontello-webpack-plugin") var env = process.env.NODE_ENV // check env & config/index.js to decide weither to enable CSS Sourcemaps for the @@ -11,6 +12,8 @@ var cssSourceMapDev = (env === 'development' && config.dev.cssSourceMap) var cssSourceMapProd = (env === 'production' && config.build.productionSourceMap) var useCssSourceMap = cssSourceMapDev || cssSourceMapProd +var now = Date.now() + module.exports = { entry: { app: './src/main.js' @@ -90,6 +93,14 @@ module.exports = { new ServiceWorkerWebpackPlugin({ entry: path.join(__dirname, '..', 'src/sw.js'), filename: 'sw-pleroma.js' + }), + new FontelloPlugin({ + config: require('../static/fontello.json'), + name: 'fontello', + output: { + css: '[name].' + now + '.css', // [hash] is not supported. Use the current timestamp instead for versioning. + font: 'font/[name].' + now + '.[ext]' + } }) ] } diff --git a/package.json b/package.json index f039d412..648ffbdb 100644 --- a/package.json +++ b/package.json @@ -72,6 +72,7 @@ "eventsource-polyfill": "^0.9.6", "express": "^4.13.3", "file-loader": "^3.0.1", + "fontello-webpack-plugin": "https://github.com/sypl/fontello-webpack-plugin.git#35dac8cfd851bc1b3be19fd97e361516a1be6633", "function-bind": "^1.0.2", "html-webpack-plugin": "^3.0.0", "http-proxy-middleware": "^0.17.2", diff --git a/src/font/LICENSE.txt b/src/font/LICENSE.txt deleted file mode 100755 index 95966f00..00000000 --- a/src/font/LICENSE.txt +++ /dev/null @@ -1,39 +0,0 @@ -Font license info - - -## Font Awesome - - Copyright (C) 2016 by Dave Gandy - - Author: Dave Gandy - License: SIL () - Homepage: http://fortawesome.github.com/Font-Awesome/ - - -## Entypo - - Copyright (C) 2012 by Daniel Bruce - - Author: Daniel Bruce - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://www.entypo.com - - -## Iconic - - Copyright (C) 2012 by P.J. Onori - - Author: P.J. Onori - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://somerandomdude.com/work/iconic/ - - -## Fontelico - - Copyright (C) 2012 by Fontello project - - Author: Crowdsourced, for Fontello project - License: SIL (http://scripts.sil.org/OFL) - Homepage: http://fontello.com - - diff --git a/src/font/README.txt b/src/font/README.txt deleted file mode 100755 index beaab336..00000000 --- a/src/font/README.txt +++ /dev/null @@ -1,75 +0,0 @@ -This webfont is generated by http://fontello.com open source project. - - -================================================================================ -Please, note, that you should obey original font licenses, used to make this -webfont pack. Details available in LICENSE.txt file. - -- Usually, it's enough to publish content of LICENSE.txt file somewhere on your - site in "About" section. - -- If your project is open-source, usually, it will be ok to make LICENSE.txt - file publicly available in your repository. - -- Fonts, used in Fontello, don't require a clickable link on your site. - But any kind of additional authors crediting is welcome. -================================================================================ - - -Comments on archive content ---------------------------- - -- /font/* - fonts in different formats - -- /css/* - different kinds of css, for all situations. Should be ok with - twitter bootstrap. Also, you can skip style and assign icon classes - directly to text elements, if you don't mind about IE7. - -- demo.html - demo file, to show your webfont content - -- LICENSE.txt - license info about source fonts, used to build your one. - -- config.json - keeps your settings. You can import it back into fontello - anytime, to continue your work - - -Why so many CSS files ? ------------------------ - -Because we like to fit all your needs :) - -- basic file, .css - is usually enough, it contains @font-face - and character code definitions - -- *-ie7.css - if you need IE7 support, but still don't wish to put char codes - directly into html - -- *-codes.css and *-ie7-codes.css - if you like to use your own @font-face - rules, but still wish to benefit from css generation. That can be very - convenient for automated asset build systems. When you need to update font - - no need to manually edit files, just override old version with archive - content. See fontello source code for examples. - -- *-embedded.css - basic css file, but with embedded WOFF font, to avoid - CORS issues in Firefox and IE9+, when fonts are hosted on the separate domain. - We strongly recommend to resolve this issue by `Access-Control-Allow-Origin` - server headers. But if you ok with dirty hack - this file is for you. Note, - that data url moved to separate @font-face to avoid problems with - - - - - - - -
    -

    fontello font demo

    - -
    -
    -
    -
    icon-cancel0xe800
    -
    icon-upload0xe801
    -
    icon-star0xe802
    -
    icon-star-empty0xe803
    -
    -
    -
    icon-retweet0xe804
    -
    icon-eye-off0xe805
    -
    icon-search0xe806
    -
    icon-cog0xe807
    -
    -
    -
    icon-logout0xe808
    -
    icon-down-open0xe809
    -
    icon-attach0xe80a
    -
    icon-picture0xe80b
    -
    -
    -
    icon-video0xe80c
    -
    icon-right-open0xe80d
    -
    icon-left-open0xe80e
    -
    icon-up-open0xe80f
    -
    -
    -
    icon-bell-ringing-o0xe810
    -
    icon-lock0xe811
    -
    icon-globe0xe812
    -
    icon-brush0xe813
    -
    -
    -
    icon-attention0xe814
    -
    icon-plus0xe815
    -
    icon-adjust0xe816
    -
    icon-edit0xe817
    -
    -
    -
    icon-pencil0xe818
    -
    icon-pin0xe819
    -
    icon-wrench0xe81a
    -
    icon-chart-bar0xe81b
    -
    -
    -
    icon-zoom-in0xe81c
    -
    icon-spin30xe832
    -
    icon-spin40xe834
    -
    icon-link-ext0xf08e
    -
    -
    -
    icon-link-ext-alt0xf08f
    -
    icon-menu0xf0c9
    -
    icon-mail-alt0xf0e0
    -
    icon-gauge0xf0e4
    -
    -
    -
    icon-comment-empty0xf0e5
    -
    icon-bell-alt0xf0f3
    -
    icon-plus-squared0xf0fe
    -
    icon-reply0xf112
    -
    -
    -
    icon-smile0xf118
    -
    icon-lock-open-alt0xf13e
    -
    icon-ellipsis0xf141
    -
    icon-play-circled0xf144
    -
    -
    -
    icon-thumbs-up-alt0xf164
    -
    icon-binoculars0xf1e5
    -
    icon-user-plus0xf234
    -
    -
    - - - \ No newline at end of file diff --git a/src/font/font/fontello.eot b/src/font/font/fontello.eot deleted file mode 100755 index 1703fd97..00000000 Binary files a/src/font/font/fontello.eot and /dev/null differ diff --git a/src/font/font/fontello.svg b/src/font/font/fontello.svg deleted file mode 100755 index f5e497ce..00000000 --- a/src/font/font/fontello.svg +++ /dev/null @@ -1,104 +0,0 @@ - - - -Copyright (C) 2019 by original authors @ fontello.com - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/src/font/font/fontello.ttf b/src/font/font/fontello.ttf deleted file mode 100755 index e9ed7803..00000000 Binary files a/src/font/font/fontello.ttf and /dev/null differ diff --git a/src/font/font/fontello.woff b/src/font/font/fontello.woff deleted file mode 100755 index 1d5025d3..00000000 Binary files a/src/font/font/fontello.woff and /dev/null differ diff --git a/src/font/font/fontello.woff2 b/src/font/font/fontello.woff2 deleted file mode 100755 index 078991eb..00000000 Binary files a/src/font/font/fontello.woff2 and /dev/null differ diff --git a/src/main.js b/src/main.js index 6469ba5c..fe0fed94 100644 --- a/src/main.js +++ b/src/main.js @@ -32,8 +32,8 @@ import VTooltip from 'v-tooltip' import afterStoreSetup from './boot/after_store.js' -import './font/css/fontello.css' -import './font/css/animation.css' +// import './font/css/fontello.css' +// import './font/css/animation.css' const currentLocale = (window.navigator.language || 'en').split('-')[0] diff --git a/static/fontello.json b/static/fontello.json new file mode 100755 index 00000000..c0cf1727 --- /dev/null +++ b/static/fontello.json @@ -0,0 +1,308 @@ +{ + "name": "", + "css_prefix_text": "icon-", + "css_use_suffix": false, + "hinting": true, + "units_per_em": 1000, + "ascent": 857, + "glyphs": [ + { + "uid": "9bd60140934a1eb9236fd7a8ab1ff6ba", + "css": "spin4", + "code": 59444, + "src": "fontelico" + }, + { + "uid": "5211af474d3a9848f67f945e2ccaf143", + "css": "cancel", + "code": 59392, + "src": "fontawesome" + }, + { + "uid": "eeec3208c90b7b48e804919d0d2d4a41", + "css": "upload", + "code": 59393, + "src": "fontawesome" + }, + { + "uid": "2a6740fc2f9d0edea54205963f662594", + "css": "spin3", + "code": 59442, + "src": "fontelico" + }, + { + "uid": "c6be5a58ee4e63a5ec399c2b0d15cf2c", + "css": "reply", + "code": 61714, + "src": "fontawesome" + }, + { + "uid": "474656633f79ea2f1dad59ff63f6bf07", + "css": "star", + "code": 59394, + "src": "fontawesome" + }, + { + "uid": "d17030afaecc1e1c22349b99f3c4992a", + "css": "star-empty", + "code": 59395, + "src": "fontawesome" + }, + { + "uid": "09feb4465d9bd1364f4e301c9ddbaa92", + "css": "retweet", + "code": 59396, + "src": "fontawesome" + }, + { + "uid": "7fd683b2c518ceb9e5fa6757f2276faa", + "css": "eye-off", + "code": 59397, + "src": "fontawesome" + }, + { + "uid": "73ffeb70554099177620847206c12457", + "css": "binoculars", + "code": 61925, + "src": "fontawesome" + }, + { + "uid": "e99461abfef3923546da8d745372c995", + "css": "cog", + "code": 59399, + "src": "fontawesome" + }, + { + "uid": "1bafeeb1808a5fe24484c7890096901a", + "css": "user-plus", + "code": 62004, + "src": "fontawesome" + }, + { + "uid": "559647a6f430b3aeadbecd67194451dd", + "css": "menu", + "code": 61641, + "src": "fontawesome" + }, + { + "uid": "0d20938846444af8deb1920dc85a29fb", + "css": "logout", + "code": 59400, + "src": "fontawesome" + }, + { + "uid": "ccddff8e8670dcd130e3cb55fdfc2fd0", + "css": "down-open", + "code": 59401, + "src": "fontawesome" + }, + { + "uid": "44b9e75612c5fad5505edd70d071651f", + "css": "attach", + "code": 59402, + "src": "entypo" + }, + { + "uid": "e15f0d620a7897e2035c18c80142f6d9", + "css": "link-ext", + "code": 61582, + "src": "fontawesome" + }, + { + "uid": "e35de5ea31cd56970498e33efbcb8e36", + "css": "link-ext-alt", + "code": 61583, + "src": "fontawesome" + }, + { + "uid": "381da2c2f7fd51f8de877c044d7f439d", + "css": "picture", + "code": 59403, + "src": "fontawesome" + }, + { + "uid": "872d9516df93eb6b776cc4d94bd97dac", + "css": "video", + "code": 59404, + "src": "fontawesome" + }, + { + "uid": "399ef63b1e23ab1b761dfbb5591fa4da", + "css": "right-open", + "code": 59405, + "src": "fontawesome" + }, + { + "uid": "d870630ff8f81e6de3958ecaeac532f2", + "css": "left-open", + "code": 59406, + "src": "fontawesome" + }, + { + "uid": "fe6697b391355dec12f3d86d6d490397", + "css": "up-open", + "code": 59407, + "src": "fontawesome" + }, + { + "uid": "9c1376672bb4f1ed616fdd78a23667e9", + "css": "comment-empty", + "code": 61669, + "src": "fontawesome" + }, + { + "uid": "ccc2329632396dc096bb638d4b46fb98", + "css": "mail-alt", + "code": 61664, + "src": "fontawesome" + }, + { + "uid": "c1f1975c885aa9f3dad7810c53b82074", + "css": "lock", + "code": 59409, + "src": "fontawesome" + }, + { + "uid": "05376be04a27d5a46e855a233d6e8508", + "css": "lock-open-alt", + "code": 61758, + "src": "fontawesome" + }, + { + "uid": "197375a3cea8cb90b02d06e4ddf1433d", + "css": "globe", + "code": 59410, + "src": "fontawesome" + }, + { + "uid": "b3a9e2dab4d19ea3b2f628242c926bfe", + "css": "brush", + "code": 59411, + "src": "iconic" + }, + { + "uid": "9dd9e835aebe1060ba7190ad2b2ed951", + "css": "search", + "code": 59398, + "src": "fontawesome" + }, + { + "uid": "ca90da02d2c6a3183f2458e4dc416285", + "css": "adjust", + "code": 59414, + "src": "fontawesome" + }, + { + "uid": "5e2ab018e3044337bcef5f7e94098ea1", + "css": "thumbs-up-alt", + "code": 61796, + "src": "fontawesome" + }, + { + "uid": "c76b7947c957c9b78b11741173c8349b", + "css": "attention", + "code": 59412, + "src": "fontawesome" + }, + { + "uid": "1a5cfa186647e8c929c2b17b9fc4dac1", + "css": "plus-squared", + "code": 61694, + "src": "fontawesome" + }, + { + "uid": "44e04715aecbca7f266a17d5a7863c68", + "css": "plus", + "code": 59413, + "src": "fontawesome" + }, + { + "uid": "41087bc74d4b20b55059c60a33bf4008", + "css": "edit", + "code": 59415, + "src": "fontawesome" + }, + { + "uid": "5717236f6134afe2d2a278a5c9b3927a", + "css": "play-circled", + "code": 61764, + "src": "fontawesome" + }, + { + "uid": "d35a1d35efeb784d1dc9ac18b9b6c2b6", + "css": "pencil", + "code": 59416, + "src": "fontawesome" + }, + { + "uid": "266d5d9adf15a61800477a5acf9a4462", + "css": "chart-bar", + "code": 59419, + "src": "fontawesome" + }, + { + "uid": "d862a10e1448589215be19702f98f2c1", + "css": "smile", + "code": 61720, + "src": "fontawesome" + }, + { + "uid": "671f29fa10dda08074a4c6a341bb4f39", + "css": "bell-alt", + "code": 61683, + "src": "fontawesome" + }, + { + "uid": "5bb103cd29de77e0e06a52638527b575", + "css": "wrench", + "code": 59418, + "src": "fontawesome" + }, + { + "uid": "5b0772e9484a1a11646793a82edd622a", + "css": "pin", + "code": 59417, + "src": "fontawesome" + }, + { + "uid": "22411a88489225a018f68db737de3c77", + "css": "ellipsis", + "code": 61761, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M214 411V518Q214 540 199 556T161 571H54Q31 571 16 556T0 518V411Q0 388 16 373T54 357H161Q183 357 199 373T214 411ZM500 411V518Q500 540 484 556T446 571H339Q317 571 301 556T286 518V411Q286 388 301 373T339 357H446Q469 357 484 373T500 411ZM786 411V518Q786 540 770 556T732 571H625Q603 571 587 556T571 518V411Q571 388 587 373T625 357H732Q755 357 770 373T786 411Z", + "width": 785.7 + }, + "search": [ + "ellipsis" + ] + }, + { + "uid": "0bef873af785ead27781fdf98b3ae740", + "css": "bell-ringing-o", + "code": 59408, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M497.8 0C468.3 0 444.4 23.9 444.4 53.3 444.4 61.1 446.1 68.3 448.9 75 301.7 96.7 213.3 213.3 213.3 320 213.3 588.3 117.8 712.8 35.6 782.2 35.6 821.1 67.8 853.3 106.7 853.3H355.6C355.6 931.7 419.4 995.6 497.8 995.6S640 931.7 640 853.3H888.9C927.8 853.3 960 821.1 960 782.2 877.8 712.8 782.2 588.3 782.2 320 782.2 213.3 693.9 96.7 546.7 75 549.4 68.3 551.1 61.1 551.1 53.3 551.1 23.9 527.2 0 497.8 0ZM189.4 44.8C108.4 118.6 70.5 215.1 71.1 320.2L142.2 319.8C141.7 231.2 170.4 158.3 237.3 97.4L189.4 44.8ZM806.2 44.8L758.3 97.4C825.2 158.3 853.9 231.2 853.3 319.8L924.4 320.2C925.1 215.1 887.2 118.6 806.2 44.8ZM408.9 844.4C413.9 844.4 417.8 848.3 417.8 853.3 417.8 897.2 453.9 933.3 497.8 933.3 502.8 933.3 506.7 937.2 506.7 942.2S502.8 951.1 497.8 951.1C443.9 951.1 400 907.2 400 853.3 400 848.3 403.9 844.4 408.9 844.4Z", + "width": 1000 + }, + "search": [ + "bell-ringing-o" + ] + }, + { + "uid": "0b2b66e526028a6972d51a6f10281b4b", + "css": "zoom-in", + "code": 59420, + "src": "fontawesome" + }, + { + "uid": "0bda4bc779d4c32623dec2e43bd67ee8", + "css": "gauge", + "code": 61668, + "src": "fontawesome" + } + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock index 4e0d9a22..31209805 100644 --- a/yarn.lock +++ b/yarn.lock @@ -227,6 +227,13 @@ agent-base@2: extend "~3.0.0" semver "~5.0.1" +agent-base@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" + integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== + dependencies: + es6-promisify "^5.0.0" + ajv-errors@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/ajv-errors/-/ajv-errors-1.0.1.tgz#f35986aceb91afadec4102fbd85014950cefa64d" @@ -1165,6 +1172,14 @@ binary-extensions@^1.0.0: version "1.12.0" resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.12.0.tgz#c2d780f53d45bba8317a8902d4ceeaf3a6385b14" +"binary@>= 0.3.0 < 1": + version "0.3.0" + resolved "https://registry.yarnpkg.com/binary/-/binary-0.3.0.tgz#9f60553bc5ce8c3386f3b553cff47462adecaa79" + integrity sha1-n2BVO8XOjDOG87VTz/R0Yq3sqnk= + dependencies: + buffers "~0.1.1" + chainsaw "~0.1.0" + blob@0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" @@ -1347,6 +1362,11 @@ buffer@^4.3.0: ieee754 "^1.1.4" isarray "^1.0.0" +buffers@~0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/buffers/-/buffers-0.1.1.tgz#b24579c3bed4d6d396aeee6d9a8ae7f5482ab7bb" + integrity sha1-skV5w77U1tOWru5tmorn9Ugqt7s= + builtin-modules@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-1.1.1.tgz#270f076c5a72c02f5b65a47df94c5fe3a278892f" @@ -1483,6 +1503,13 @@ chai@^3.5.0: deep-eql "^0.1.3" type-detect "^1.0.0" +chainsaw@~0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/chainsaw/-/chainsaw-0.1.0.tgz#5eab50b28afe58074d0d58291388828b5e5fbc98" + integrity sha1-XqtQsor+WAdNDVgpE4iCi15fvJg= + dependencies: + traverse ">=0.3.0 <0.4" + chalk@^1.0.0, chalk@^1.1.1, chalk@^1.1.3: version "1.1.3" resolved "https://registry.yarnpkg.com/chalk/-/chalk-1.1.3.tgz#a8115c55e4a702fe4d150abd3872822a7e09fc98" @@ -2359,6 +2386,13 @@ encodeurl@~1.0.1, encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" +encoding@^0.1.11: + version "0.1.12" + resolved "https://registry.yarnpkg.com/encoding/-/encoding-0.1.12.tgz#538b66f3ee62cd1ab51ec323829d1f9480c74beb" + integrity sha1-U4tm8+5izRq1HsMjgp0flIDHS+s= + dependencies: + iconv-lite "~0.4.13" + end-of-stream@^1.0.0, end-of-stream@^1.1.0: version "1.4.1" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.1.tgz#ed29634d19baba463b6ce6b80a37213eab71ec43" @@ -2449,6 +2483,18 @@ es-to-primitive@^1.2.0: is-date-object "^1.0.1" is-symbol "^1.0.2" +es6-promise@^4.0.3: + version "4.2.8" + resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" + integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== + +es6-promisify@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" + integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= + dependencies: + es6-promise "^4.0.3" + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" @@ -3010,6 +3056,18 @@ follow-redirects@^1.0.0: dependencies: debug "=3.1.0" +"fontello-webpack-plugin@https://github.com/sypl/fontello-webpack-plugin.git#35dac8cfd851bc1b3be19fd97e361516a1be6633": + version "0.4.8" + resolved "https://github.com/sypl/fontello-webpack-plugin.git#35dac8cfd851bc1b3be19fd97e361516a1be6633" + dependencies: + form-data "^2.1.2" + html-webpack-plugin "^3.2.0" + https-proxy-agent "^2.1.1" + lodash "^4.17.4" + node-fetch "^1.6.3" + unzip "^0.1.11" + webpack-sources "^0.2.0" + for-in@^1.0.1, for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" @@ -3024,6 +3082,15 @@ forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" +form-data@^2.1.2: + version "2.5.1" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.1.tgz#f2cbec57b5e59e23716e128fe44d4e5dd23895f4" + integrity sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.6" + mime-types "^2.1.12" + form-data@~2.3.2: version "2.3.3" resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" @@ -3085,6 +3152,16 @@ fsevents@^1.2.7: nan "^2.12.1" node-pre-gyp "^0.12.0" +"fstream@>= 0.1.30 < 1": + version "0.1.31" + resolved "https://registry.yarnpkg.com/fstream/-/fstream-0.1.31.tgz#7337f058fbbbbefa8c9f561a28cab0849202c988" + integrity sha1-czfwWPu7vvqMn1YaKMqwhJICyYg= + dependencies: + graceful-fs "~3.0.2" + inherits "~2.0.0" + mkdirp "0.5" + rimraf "2" + ftp@~0.3.10: version "0.3.10" resolved "https://registry.yarnpkg.com/ftp/-/ftp-0.3.10.tgz#9197d861ad8142f3e63d5a83bfe4c59f7330885d" @@ -3244,6 +3321,13 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2: version "4.1.15" resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" +graceful-fs@~3.0.2: + version "3.0.12" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-3.0.12.tgz#0034947ce9ed695ec8ab0b854bc919e82b1ffaef" + integrity sha512-J55gaCS4iTTJfTXIxSVw3EMQckcqkpdRv3IR7gu6sq0+tbC363Zx6KH/SEwXASK9JRbhyZmVjJEVJIOxYsB3Qg== + dependencies: + natives "^1.1.3" + "graceful-readlink@>= 1.0.0": version "1.0.1" resolved "https://registry.yarnpkg.com/graceful-readlink/-/graceful-readlink-1.0.1.tgz#4cafad76bc62f02fa039b2f94e9a3dd3a391a725" @@ -3407,7 +3491,7 @@ html-minifier@^3.2.3: relateurl "0.2.x" uglify-js "3.4.x" -html-webpack-plugin@^3.0.0: +html-webpack-plugin@^3.0.0, html-webpack-plugin@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz#b01abbd723acaaa7b37b6af4492ebda03d9dd37b" dependencies: @@ -3493,13 +3577,21 @@ https-proxy-agent@1: debug "2" extend "3" +https-proxy-agent@^2.1.1: + version "2.2.4" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" + integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== + dependencies: + agent-base "^4.3.0" + debug "^3.1.0" + iconv-lite@0.4.23, iconv-lite@^0.4.4: version "0.4.23" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.23.tgz#297871f63be507adcfbfca715d0cd0eed84e9a63" dependencies: safer-buffer ">= 2.1.2 < 3" -iconv-lite@^0.4.24: +iconv-lite@^0.4.24, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" dependencies: @@ -3599,6 +3691,11 @@ inherits@2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" +inherits@~2.0.0: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + ini@~1.3.0: version "1.3.5" resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" @@ -3859,7 +3956,7 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" -is-stream@^1.1.0: +is-stream@^1.0.1, is-stream@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" @@ -4622,6 +4719,14 @@ map-visit@^1.0.0: dependencies: object-visit "^1.0.0" +"match-stream@>= 0.0.2 < 1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/match-stream/-/match-stream-0.0.2.tgz#99eb050093b34dffade421b9ac0b410a9cfa17cf" + integrity sha1-mesFAJOzTf+t5CG5rAtBCpz6F88= + dependencies: + buffers "~0.1.1" + readable-stream "~1.0.0" + math-expression-evaluator@^1.2.14: version "1.2.17" resolved "https://registry.yarnpkg.com/math-expression-evaluator/-/math-expression-evaluator-1.2.17.tgz#de819fdbcd84dccd8fae59c6aeb79615b9d266ac" @@ -4826,7 +4931,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: +mkdirp@0.5, mkdirp@0.5.1, mkdirp@0.5.x, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.0, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" dependencies: @@ -4920,6 +5025,11 @@ native-promise-only@^0.8.1: version "0.8.1" resolved "https://registry.yarnpkg.com/native-promise-only/-/native-promise-only-0.8.1.tgz#20a318c30cb45f71fe7adfbf7b21c99c1472ef11" +natives@^1.1.3: + version "1.1.6" + resolved "https://registry.yarnpkg.com/natives/-/natives-1.1.6.tgz#a603b4a498ab77173612b9ea1acdec4d980f00bb" + integrity sha512-6+TDFewD4yxY14ptjKaS63GVdtKiES1pTPyxn9Jb0rBqPMZ7VcCiooEhPNsr+mqHtMGxa/5c/HhcC4uPEUw/nA== + natural-compare@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" @@ -4973,6 +5083,14 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@^1.6.3: + version "1.7.3" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-1.7.3.tgz#980f6f72d85211a5347c6b2bc18c5b84c3eb47ef" + integrity sha512-NhZ4CsKx7cYm2vSrBAr2PvFOe6sWDf0UYLRqA6svUYg7+/TSfVAu49jYC4BvQ4Sms9SZgdqGBgroqfDhJdTyKQ== + dependencies: + encoding "^0.1.11" + is-stream "^1.0.1" + node-libs-browser@^2.0.0: version "2.2.0" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.0.tgz#c72f60d9d46de08a940dedbb25f3ffa2f9bbaa77" @@ -5249,6 +5367,11 @@ osenv@^0.1.4: os-homedir "^1.0.0" os-tmpdir "^1.0.0" +"over@>= 0.0.5 < 1": + version "0.0.5" + resolved "https://registry.yarnpkg.com/over/-/over-0.0.5.tgz#f29852e70fd7e25f360e013a8ec44c82aedb5708" + integrity sha1-8phS5w/X4l82DgE6jsRMgq7bVwg= + p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -5925,6 +6048,16 @@ public-encrypt@^4.0.0: randombytes "^2.0.1" safe-buffer "^5.1.2" +"pullstream@>= 0.4.1 < 1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/pullstream/-/pullstream-0.4.1.tgz#d6fb3bf5aed697e831150eb1002c25a3f8ae1314" + integrity sha1-1vs79a7Wl+gxFQ6xACwlo/iuExQ= + dependencies: + over ">= 0.0.5 < 1" + readable-stream "~1.0.31" + setimmediate ">= 1.0.2 < 2" + slice-stream ">= 1.0.0 < 2" + pump@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" @@ -6089,7 +6222,7 @@ read-pkg@^2.0.0: string_decoder "~1.1.1" util-deprecate "~1.0.1" -readable-stream@1.0: +readable-stream@1.0, readable-stream@~1.0.0, readable-stream@~1.0.31: version "1.0.34" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" dependencies: @@ -6339,6 +6472,13 @@ rfdc@^1.1.2: version "1.1.4" resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.1.4.tgz#ba72cc1367a0ccd9cf81a870b3b58bd3ad07f8c2" +rimraf@2: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@2.6.3, rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.0, rimraf@^2.6.1, rimraf@^2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -6507,7 +6647,7 @@ set-value@^2.0.0: is-plain-object "^2.0.3" split-string "^3.0.1" -setimmediate@^1.0.4: +"setimmediate@>= 1.0.1 < 2", "setimmediate@>= 1.0.2 < 2", setimmediate@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -6579,6 +6719,13 @@ slice-ansi@^2.1.0: astral-regex "^1.0.0" is-fullwidth-code-point "^2.0.0" +"slice-stream@>= 1.0.0 < 2": + version "1.0.0" + resolved "https://registry.yarnpkg.com/slice-stream/-/slice-stream-1.0.0.tgz#5b33bd66f013b1a7f86460b03d463dec39ad3ea0" + integrity sha1-WzO9ZvATsaf4ZGCwPUY97DmtPqA= + dependencies: + readable-stream "~1.0.31" + smart-buffer@^1.0.13: version "1.1.15" resolved "https://registry.yarnpkg.com/smart-buffer/-/smart-buffer-1.1.15.tgz#7f114b5b65fab3e2a35aa775bb12f0d1c649bf16" @@ -6673,6 +6820,11 @@ sort-keys@^1.0.0: dependencies: is-plain-obj "^1.0.0" +source-list-map@^1.1.1: + version "1.1.2" + resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-1.1.2.tgz#9889019d1024cce55cdc069498337ef6186a11a1" + integrity sha1-mIkBnRAkzOVc3AaUmDN+9hhqEaE= + source-list-map@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" @@ -6704,7 +6856,7 @@ source-map-url@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7: +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.3: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -7102,6 +7254,11 @@ tough-cookie@~2.4.3: psl "^1.1.24" punycode "^1.4.1" +"traverse@>=0.3.0 <0.4": + version "0.3.9" + resolved "https://registry.yarnpkg.com/traverse/-/traverse-0.3.9.tgz#717b8f220cc0bb7b44e40514c22b2e8bbc70d8b9" + integrity sha1-cXuPIgzAu3tE5AUUwisui7xw2Lk= + trim-newlines@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" @@ -7212,6 +7369,18 @@ unset-value@^1.0.0: has-value "^0.3.1" isobject "^3.0.0" +unzip@^0.1.11: + version "0.1.11" + resolved "https://registry.yarnpkg.com/unzip/-/unzip-0.1.11.tgz#89749c63b058d7d90d619f86b98aa1535d3b97f0" + integrity sha1-iXScY7BY19kNYZ+GuYqhU107l/A= + dependencies: + binary ">= 0.3.0 < 1" + fstream ">= 0.1.30 < 1" + match-stream ">= 0.0.2 < 1" + pullstream ">= 0.4.1 < 1" + readable-stream "~1.0.31" + setimmediate ">= 1.0.1 < 2" + upath@^1.1.1: version "1.1.2" resolved "https://registry.yarnpkg.com/upath/-/upath-1.1.2.tgz#3db658600edaeeccbe6db5e684d67ee8c2acd068" @@ -7459,6 +7628,14 @@ webpack-merge@^0.14.1: lodash.isplainobject "^3.2.0" lodash.merge "^3.3.2" +webpack-sources@^0.2.0: + version "0.2.3" + resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-0.2.3.tgz#17c62bfaf13c707f9d02c479e0dcdde8380697fb" + integrity sha1-F8Yr+vE8cH+dAsR54Nzd6DgGl/s= + dependencies: + source-list-map "^1.1.1" + source-map "~0.5.3" + webpack-sources@^1.1.0, webpack-sources@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-1.3.0.tgz#2a28dcb9f1f45fe960d8f1493252b5ee6530fa85" -- cgit v1.2.3-70-g09d2 From 57f46e68e4a0d137e8cb65ba603dfe4b8114ebbf Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 3 Dec 2019 10:34:17 -0500 Subject: remove needless code --- src/main.js | 3 --- 1 file changed, 3 deletions(-) (limited to 'src') diff --git a/src/main.js b/src/main.js index fe0fed94..a9db1cff 100644 --- a/src/main.js +++ b/src/main.js @@ -32,9 +32,6 @@ import VTooltip from 'v-tooltip' import afterStoreSetup from './boot/after_store.js' -// import './font/css/fontello.css' -// import './font/css/animation.css' - const currentLocale = (window.navigator.language || 'en').split('-')[0] Vue.use(Vuex) -- cgit v1.2.3-70-g09d2 From 9d44015ab477634d6b1e42cb096a58453b8d0914 Mon Sep 17 00:00:00 2001 From: taehoon Date: Tue, 3 Dec 2019 11:16:38 -0500 Subject: add animate-spin class --- src/App.scss | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src') diff --git a/src/App.scss b/src/App.scss index 310962b8..925913f2 100644 --- a/src/App.scss +++ b/src/App.scss @@ -855,3 +855,18 @@ nav { .btn.btn-default { min-height: 28px; } + +.animate-spin { + animation: spin 2s infinite linear; + display: inline-block; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + + 100% { + transform: rotate(359deg); + } +} -- cgit v1.2.3-70-g09d2 From 13fc2612ae388dec682829ae2b6211bb3cb8ccb3 Mon Sep 17 00:00:00 2001 From: Wyatt Benno Date: Thu, 5 Dec 2019 11:48:37 +0900 Subject: Change 403 messaging --- src/components/timeline/timeline.js | 7 ++++++- src/components/timeline/timeline.vue | 19 ++++++++++++++++--- src/i18n/en.json | 2 ++ src/modules/statuses.js | 7 +++++++ src/services/api/api.service.js | 10 ++++++++-- .../timeline_fetcher/timeline_fetcher.service.js | 6 ++++++ 6 files changed, 45 insertions(+), 6 deletions(-) (limited to 'src') diff --git a/src/components/timeline/timeline.js b/src/components/timeline/timeline.js index 27a9a55e..6086336c 100644 --- a/src/components/timeline/timeline.js +++ b/src/components/timeline/timeline.js @@ -36,7 +36,12 @@ const Timeline = { } }, computed: { - timelineError () { return this.$store.state.statuses.error }, + timelineError () { + return this.$store.state.statuses.error + }, + error403 () { + return this.$store.state.statuses.error403 + }, newStatusCount () { return this.timeline.newStatusCount }, diff --git a/src/components/timeline/timeline.vue b/src/components/timeline/timeline.vue index 93f6f570..1c45d0f6 100644 --- a/src/components/timeline/timeline.vue +++ b/src/components/timeline/timeline.vue @@ -11,15 +11,22 @@ > {{ $t('timeline.error_fetching') }}
    +
    + {{ $t('timeline.error_403') }} +
    @@ -67,12 +74,18 @@ {{ $t('timeline.no_more_statuses') }}
    + + +