Merge commit 'fcf012c6026418b6c76bff173eec944e0c25913f' into glitch-soc/merge-upstream
Conflicts: - `vite.config.mts`: Upstream changed a line adjacent to one glitch-soc modified due to its theming system. Adapted upstream's change. - `yarn.lock`: Upstream updated a dependency next to one glitch-soc added. Updated the dependency as upstream did.
@ -1,6 +1,6 @@
|
||||
defaults
|
||||
> 0.2%
|
||||
firefox >= 78
|
||||
> 0.2% and not ios < 15.6
|
||||
firefox >= 91
|
||||
ios >= 15.6
|
||||
not dead
|
||||
not OperaMini all
|
||||
|
||||
6
.github/workflows/codeql.yml
vendored
@ -35,7 +35,7 @@ jobs:
|
||||
|
||||
# Initializes the CodeQL tools for scanning.
|
||||
- name: Initialize CodeQL
|
||||
uses: github/codeql-action/init@e46ed2cbd01164d986452f91f178727624ae40d7 # v4
|
||||
uses: github/codeql-action/init@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4
|
||||
with:
|
||||
languages: ${{ matrix.language }}
|
||||
# If you wish to specify custom queries, you can do so here or in a config file.
|
||||
@ -48,7 +48,7 @@ jobs:
|
||||
# Autobuild attempts to build any compiled languages (C/C++, C#, Go, or Java).
|
||||
# If this step fails, then you should remove it and run the build manually (see below)
|
||||
- name: Autobuild
|
||||
uses: github/codeql-action/autobuild@e46ed2cbd01164d986452f91f178727624ae40d7 # v4
|
||||
uses: github/codeql-action/autobuild@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4
|
||||
|
||||
# ℹ️ Command-line programs to run using the OS shell.
|
||||
# 📚 See https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#jobsjob_idstepsrun
|
||||
@ -61,6 +61,6 @@ jobs:
|
||||
# ./location_of_script_within_repo/buildscript.sh
|
||||
|
||||
- name: Perform CodeQL Analysis
|
||||
uses: github/codeql-action/analyze@e46ed2cbd01164d986452f91f178727624ae40d7 # v4
|
||||
uses: github/codeql-action/analyze@9e0d7b8d25671d64c341c19c0152d693099fb5ba # v4
|
||||
with:
|
||||
category: '/language:${{matrix.language}}'
|
||||
|
||||
2
.github/workflows/crowdin-download.yml
vendored
@ -53,7 +53,7 @@ jobs:
|
||||
|
||||
# Create or update the pull request
|
||||
- name: Create Pull Request
|
||||
uses: peter-evans/create-pull-request@c0f553fe549906ede9cf27b5156039d195d2ece0 # v8
|
||||
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8
|
||||
with:
|
||||
commit-message: 'New Crowdin translations'
|
||||
title: 'New Crowdin Translations (automated)'
|
||||
|
||||
2
.github/workflows/lint-css.yml
vendored
@ -13,7 +13,6 @@ on:
|
||||
- '**/*.css'
|
||||
- '**/*.scss'
|
||||
- '.github/workflows/lint-css.yml'
|
||||
- '.github/stylelint-matcher.json'
|
||||
|
||||
pull_request:
|
||||
paths:
|
||||
@ -24,7 +23,6 @@ on:
|
||||
- '**/*.css'
|
||||
- '**/*.scss'
|
||||
- '.github/workflows/lint-css.yml'
|
||||
- '.github/stylelint-matcher.json'
|
||||
|
||||
jobs:
|
||||
lint:
|
||||
|
||||
2
.github/workflows/lint-haml.yml
vendored
@ -6,7 +6,6 @@ on:
|
||||
- 'main'
|
||||
- 'stable-*'
|
||||
paths:
|
||||
- '.github/workflows/haml-lint-problem-matcher.json'
|
||||
- '.github/workflows/lint-haml.yml'
|
||||
- '.haml-lint*.yml'
|
||||
- '.rubocop*.yml'
|
||||
@ -16,7 +15,6 @@ on:
|
||||
|
||||
pull_request:
|
||||
paths:
|
||||
- '.github/workflows/haml-lint-problem-matcher.json'
|
||||
- '.github/workflows/lint-haml.yml'
|
||||
- '.haml-lint*.yml'
|
||||
- '.rubocop*.yml'
|
||||
|
||||
2
.github/workflows/lint-ruby.yml
vendored
@ -10,7 +10,6 @@ on:
|
||||
- '.rubocop*.yml'
|
||||
- '.ruby-version'
|
||||
- 'bin/rubocop'
|
||||
- 'config/brakeman.ignore'
|
||||
- '**/*.rb'
|
||||
- '**/*.rake'
|
||||
- '.github/workflows/lint-ruby.yml'
|
||||
@ -21,7 +20,6 @@ on:
|
||||
- '.rubocop*.yml'
|
||||
- '.ruby-version'
|
||||
- 'bin/rubocop'
|
||||
- 'config/brakeman.ignore'
|
||||
- '**/*.rb'
|
||||
- '**/*.rake'
|
||||
- '.github/workflows/lint-ruby.yml'
|
||||
|
||||
4
Gemfile
@ -102,10 +102,10 @@ gem 'rdf-normalize', '~> 0.5'
|
||||
|
||||
gem 'prometheus_exporter', '~> 2.2', require: false
|
||||
|
||||
gem 'opentelemetry-api', '~> 1.9.0'
|
||||
gem 'opentelemetry-api', '~> 1.10.0'
|
||||
|
||||
group :opentelemetry do
|
||||
gem 'opentelemetry-exporter-otlp', '~> 0.33.0', require: false
|
||||
gem 'opentelemetry-exporter-otlp', '~> 0.34.0', require: false
|
||||
gem 'opentelemetry-instrumentation-active_job', '~> 0.12.0', require: false
|
||||
gem 'opentelemetry-instrumentation-active_model_serializers', '~> 0.25.0', require: false
|
||||
gem 'opentelemetry-instrumentation-concurrent_ruby', '~> 0.25.0', require: false
|
||||
|
||||
18
Gemfile.lock
@ -507,11 +507,11 @@ GEM
|
||||
openssl (4.0.1)
|
||||
openssl-signature_algorithm (1.3.0)
|
||||
openssl (> 2.0)
|
||||
opentelemetry-api (1.9.0)
|
||||
opentelemetry-api (1.10.0)
|
||||
logger
|
||||
opentelemetry-common (0.24.0)
|
||||
opentelemetry-common (0.25.0)
|
||||
opentelemetry-api (~> 1.0)
|
||||
opentelemetry-exporter-otlp (0.33.0)
|
||||
opentelemetry-exporter-otlp (0.34.0)
|
||||
google-protobuf (>= 3.18)
|
||||
googleapis-common-protos-types (~> 1.3)
|
||||
opentelemetry-api (~> 1.1)
|
||||
@ -574,19 +574,19 @@ GEM
|
||||
opentelemetry-instrumentation-base (~> 0.25)
|
||||
opentelemetry-instrumentation-sidekiq (0.29.0)
|
||||
opentelemetry-instrumentation-base (~> 0.25)
|
||||
opentelemetry-registry (0.5.0)
|
||||
opentelemetry-registry (0.6.0)
|
||||
opentelemetry-api (~> 1.1)
|
||||
opentelemetry-sdk (1.11.0)
|
||||
opentelemetry-sdk (1.12.0)
|
||||
logger
|
||||
opentelemetry-api (~> 1.1)
|
||||
opentelemetry-common (~> 0.20)
|
||||
opentelemetry-registry (~> 0.2)
|
||||
opentelemetry-semantic_conventions
|
||||
opentelemetry-semantic_conventions (1.37.0)
|
||||
opentelemetry-semantic_conventions (1.37.1)
|
||||
opentelemetry-api (~> 1.0)
|
||||
orm_adapter (0.5.0)
|
||||
ostruct (0.6.3)
|
||||
ox (2.14.25)
|
||||
ox (2.14.26)
|
||||
bigdecimal (>= 3.0)
|
||||
parallel (1.28.0)
|
||||
parser (3.3.11.1)
|
||||
@ -1020,8 +1020,8 @@ DEPENDENCIES
|
||||
omniauth-rails_csrf_protection (~> 2.0)
|
||||
omniauth-saml (~> 2.0)
|
||||
omniauth_openid_connect (~> 0.8.0)
|
||||
opentelemetry-api (~> 1.9.0)
|
||||
opentelemetry-exporter-otlp (~> 0.33.0)
|
||||
opentelemetry-api (~> 1.10.0)
|
||||
opentelemetry-exporter-otlp (~> 0.34.0)
|
||||
opentelemetry-instrumentation-active_job (~> 0.12.0)
|
||||
opentelemetry-instrumentation-active_model_serializers (~> 0.25.0)
|
||||
opentelemetry-instrumentation-concurrent_ruby (~> 0.25.0)
|
||||
|
||||
67
app/controllers/api/v1/statuses/contexts_controller.rb
Normal file
@ -0,0 +1,67 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
class Api::V1::Statuses::ContextsController < Api::BaseController
|
||||
include Authorization
|
||||
include AsyncRefreshesConcern
|
||||
|
||||
before_action -> { authorize_if_got_token! :read, :'read:statuses' }
|
||||
before_action :set_status
|
||||
|
||||
# This API was originally unlimited, pagination cannot be introduced without
|
||||
# breaking backwards-compatibility. Arbitrarily high number to cover most
|
||||
# conversations as quasi-unlimited, it would be too much work to render more
|
||||
# than this anyway
|
||||
CONTEXT_LIMIT = 4_096
|
||||
|
||||
# This remains expensive and we don't want to show everything to logged-out users
|
||||
ANCESTORS_LIMIT = 40
|
||||
DESCENDANTS_LIMIT = 60
|
||||
DESCENDANTS_DEPTH_LIMIT = 20
|
||||
|
||||
def show
|
||||
cache_if_unauthenticated!
|
||||
|
||||
ancestors_limit = CONTEXT_LIMIT
|
||||
descendants_limit = CONTEXT_LIMIT
|
||||
descendants_depth_limit = nil
|
||||
|
||||
if current_account.nil?
|
||||
ancestors_limit = ANCESTORS_LIMIT
|
||||
descendants_limit = DESCENDANTS_LIMIT
|
||||
descendants_depth_limit = DESCENDANTS_DEPTH_LIMIT
|
||||
end
|
||||
|
||||
ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(ancestors_limit, current_account)
|
||||
descendants_results = @status.descendants(descendants_limit, current_account, descendants_depth_limit)
|
||||
loaded_ancestors = preload_collection(ancestors_results, Status)
|
||||
loaded_descendants = preload_collection(descendants_results, Status)
|
||||
|
||||
@context = Context.new(ancestors: loaded_ancestors, descendants: loaded_descendants)
|
||||
statuses = [@status] + @context.ancestors + @context.descendants
|
||||
|
||||
refresh_key = "context:#{@status.id}:refresh"
|
||||
async_refresh = AsyncRefresh.new(refresh_key)
|
||||
|
||||
if async_refresh.running?
|
||||
add_async_refresh_header(async_refresh)
|
||||
elsif !current_account.nil? && @status.should_fetch_replies?
|
||||
add_async_refresh_header(AsyncRefresh.create(refresh_key, count_results: true))
|
||||
|
||||
WorkerBatch.new.within do |batch|
|
||||
batch.connect(refresh_key, threshold: 1.0)
|
||||
ActivityPub::FetchAllRepliesWorker.perform_async(@status.id, { 'batch_id' => batch.id })
|
||||
end
|
||||
end
|
||||
|
||||
render json: @context, serializer: REST::ContextSerializer, relationships: StatusRelationshipsPresenter.new(statuses, current_user&.account_id)
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_status
|
||||
@status = Status.find(params[:status_id])
|
||||
authorize @status, :show?
|
||||
rescue ActiveRecord::RecordNotFound, Mastodon::NotPermittedError
|
||||
not_found
|
||||
end
|
||||
end
|
||||
@ -2,14 +2,13 @@
|
||||
|
||||
class Api::V1::StatusesController < Api::BaseController
|
||||
include Authorization
|
||||
include AsyncRefreshesConcern
|
||||
include Api::InteractionPoliciesConcern
|
||||
|
||||
before_action -> { authorize_if_got_token! :read, :'read:statuses' }, except: [:create, :update, :destroy]
|
||||
before_action -> { doorkeeper_authorize! :write, :'write:statuses' }, only: [:create, :update, :destroy]
|
||||
before_action :require_user!, except: [:index, :show, :context]
|
||||
before_action :require_user!, except: [:index, :show]
|
||||
before_action :set_statuses, only: [:index]
|
||||
before_action :set_status, only: [:show, :context]
|
||||
before_action :set_status, only: [:show]
|
||||
before_action :set_thread, only: [:create]
|
||||
before_action :set_quoted_status, only: [:create]
|
||||
before_action :check_statuses_limit, only: [:index]
|
||||
@ -17,17 +16,6 @@ class Api::V1::StatusesController < Api::BaseController
|
||||
override_rate_limit_headers :create, family: :statuses
|
||||
override_rate_limit_headers :update, family: :statuses
|
||||
|
||||
# This API was originally unlimited, pagination cannot be introduced without
|
||||
# breaking backwards-compatibility. Arbitrarily high number to cover most
|
||||
# conversations as quasi-unlimited, it would be too much work to render more
|
||||
# than this anyway
|
||||
CONTEXT_LIMIT = 4_096
|
||||
|
||||
# This remains expensive and we don't want to show everything to logged-out users
|
||||
ANCESTORS_LIMIT = 40
|
||||
DESCENDANTS_LIMIT = 60
|
||||
DESCENDANTS_DEPTH_LIMIT = 20
|
||||
|
||||
def index
|
||||
@statuses = preload_collection(@statuses, Status)
|
||||
render json: @statuses, each_serializer: REST::StatusSerializer
|
||||
@ -39,44 +27,6 @@ class Api::V1::StatusesController < Api::BaseController
|
||||
render json: @status, serializer: REST::StatusSerializer
|
||||
end
|
||||
|
||||
def context
|
||||
cache_if_unauthenticated!
|
||||
|
||||
ancestors_limit = CONTEXT_LIMIT
|
||||
descendants_limit = CONTEXT_LIMIT
|
||||
descendants_depth_limit = nil
|
||||
|
||||
if current_account.nil?
|
||||
ancestors_limit = ANCESTORS_LIMIT
|
||||
descendants_limit = DESCENDANTS_LIMIT
|
||||
descendants_depth_limit = DESCENDANTS_DEPTH_LIMIT
|
||||
end
|
||||
|
||||
ancestors_results = @status.in_reply_to_id.nil? ? [] : @status.ancestors(ancestors_limit, current_account)
|
||||
descendants_results = @status.descendants(descendants_limit, current_account, descendants_depth_limit)
|
||||
loaded_ancestors = preload_collection(ancestors_results, Status)
|
||||
loaded_descendants = preload_collection(descendants_results, Status)
|
||||
|
||||
@context = Context.new(ancestors: loaded_ancestors, descendants: loaded_descendants)
|
||||
statuses = [@status] + @context.ancestors + @context.descendants
|
||||
|
||||
refresh_key = "context:#{@status.id}:refresh"
|
||||
async_refresh = AsyncRefresh.new(refresh_key)
|
||||
|
||||
if async_refresh.running?
|
||||
add_async_refresh_header(async_refresh)
|
||||
elsif !current_account.nil? && @status.should_fetch_replies?
|
||||
add_async_refresh_header(AsyncRefresh.create(refresh_key, count_results: true))
|
||||
|
||||
WorkerBatch.new.within do |batch|
|
||||
batch.connect(refresh_key, threshold: 1.0)
|
||||
ActivityPub::FetchAllRepliesWorker.perform_async(@status.id, { 'batch_id' => batch.id })
|
||||
end
|
||||
end
|
||||
|
||||
render json: @context, serializer: REST::ContextSerializer, relationships: StatusRelationshipsPresenter.new(statuses, current_user&.account_id)
|
||||
end
|
||||
|
||||
def create
|
||||
@status = PostStatusService.new.call(
|
||||
current_user.account,
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
class CustomCssController < ActionController::Base # rubocop:disable Rails/ApplicationController
|
||||
def show
|
||||
expires_in 1.month, public: true
|
||||
render content_type: 'text/css'
|
||||
render content_type: :css
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
@ -223,7 +223,14 @@ module LanguagesHelper
|
||||
'zh-YUE': ['Cantonese', '廣東話'].freeze,
|
||||
}.freeze
|
||||
|
||||
SUPPORTED_LOCALES = {}.merge(ISO_639_1).merge(ISO_639_1_REGIONAL).merge(ISO_639_3).freeze
|
||||
# Since nan is not translated but nan-TW is translated,
|
||||
# to enable the ISO-639-3 language-code with the regional variant but no
|
||||
# official name, we use a specific hash for nan-TW
|
||||
ISO_639_3_REGIONAL = {
|
||||
'nan-TW': ['Hokkien (Taiwan)', '臺語 (Hô-ló話)'].freeze,
|
||||
}.freeze
|
||||
|
||||
SUPPORTED_LOCALES = {}.merge(ISO_639_1).merge(ISO_639_1_REGIONAL).merge(ISO_639_3).merge(ISO_639_3_REGIONAL).freeze
|
||||
|
||||
# For ISO-639-1 and ISO-639-3 language codes, we have their official
|
||||
# names, but for some translations, we need the names of the
|
||||
@ -233,7 +240,6 @@ module LanguagesHelper
|
||||
'es-AR': 'Español (Argentina)',
|
||||
'es-MX': 'Español (México)',
|
||||
'fr-CA': 'Français (Canadien)',
|
||||
'nan-TW': '臺語 (Hô-ló話)',
|
||||
'pt-BR': 'Português (Brasil)',
|
||||
'pt-PT': 'Português (Portugal)',
|
||||
'sr-Latn': 'Srpski (latinica)',
|
||||
|
||||
@ -7,7 +7,7 @@ import api from 'mastodon/api';
|
||||
import { browserHistory } from 'mastodon/components/router';
|
||||
import { countableText } from 'mastodon/features/compose/util/counter';
|
||||
import { tagHistory } from 'mastodon/settings';
|
||||
import { fetchCustomEmojiData } from '@/mastodon/features/emoji/picker';
|
||||
import { emojiMartSearch } from '@/mastodon/features/emoji/picker';
|
||||
|
||||
import { showAlert, showAlertForError } from './alerts';
|
||||
import { useEmoji } from './emojis';
|
||||
@ -593,9 +593,9 @@ const fetchComposeSuggestionsAccounts = throttle((dispatch, token) => {
|
||||
}, 200, { leading: true, trailing: true });
|
||||
|
||||
const fetchComposeSuggestionsEmojis = async (dispatch, token) => {
|
||||
const custom = await fetchCustomEmojiData();
|
||||
const { search } = await import('@/mastodon/features/emoji/emoji_mart_search_light');
|
||||
const results = search(token.replace(':', ''), { maxResults: 5, custom });
|
||||
// Right now we are hard-coding the locale to English since the picker search only supports English.
|
||||
// Once we replace the legacy picker we can remove this and use the actual locale of the user.
|
||||
const results = await emojiMartSearch(token, 'en', 5);
|
||||
dispatch(readyComposeSuggestionsEmojis(token, results));
|
||||
};
|
||||
|
||||
|
||||
@ -317,9 +317,10 @@ function useColumnWrap() {
|
||||
if (element) {
|
||||
listRef.current = element;
|
||||
observer.observe(element);
|
||||
handleRecalculate();
|
||||
}
|
||||
},
|
||||
[observer],
|
||||
[handleRecalculate, observer],
|
||||
);
|
||||
|
||||
return { wrapperRef: wrapperRefCallback };
|
||||
|
||||
@ -1,22 +1,20 @@
|
||||
import type { FC } from 'react';
|
||||
|
||||
import { useCustomEmojis } from '@/mastodon/hooks/useCustomEmojis';
|
||||
|
||||
import { Emoji } from './emoji';
|
||||
|
||||
interface LegacyEmoji {
|
||||
colons: string;
|
||||
id: string;
|
||||
custom?: boolean;
|
||||
native?: string;
|
||||
imageUrl?: string;
|
||||
}
|
||||
|
||||
export const AutosuggestEmoji: FC<{ emoji: LegacyEmoji }> = ({ emoji }) => {
|
||||
const emojis = useCustomEmojis();
|
||||
const colons = `:${emoji.id}:`;
|
||||
return (
|
||||
<div className='autosuggest-emoji'>
|
||||
<Emoji code={emoji.native ?? emoji.colons} customEmoji={emojis} />
|
||||
<div className='autosuggest-emoji__name'>{emoji.colons}</div>
|
||||
<Emoji code={emoji.native ?? colons} />
|
||||
<div className='autosuggest-emoji__name'>{colons}</div>
|
||||
</div>
|
||||
);
|
||||
};
|
||||
|
||||
@ -11,6 +11,7 @@ import AutosuggestAccountContainer from '../features/compose/containers/autosugg
|
||||
|
||||
import { AutosuggestEmoji } from './autosuggest_emoji';
|
||||
import { AutosuggestHashtag } from './autosuggest_hashtag';
|
||||
import { LocalCustomEmojiProvider } from './emoji/context';
|
||||
|
||||
const textAtCursorMatchesToken = (str, caretPosition, searchTokens) => {
|
||||
let word;
|
||||
@ -219,15 +220,17 @@ export default class AutosuggestInput extends ImmutablePureComponent {
|
||||
spellCheck={spellCheck}
|
||||
/>
|
||||
|
||||
<Overlay show={!(suggestionsHidden || suggestions.isEmpty())} offset={[0, 0]} placement='bottom' target={this.input} popperConfig={{ strategy: 'fixed' }}>
|
||||
{({ props }) => (
|
||||
<div {...props}>
|
||||
<div className='autosuggest-textarea__suggestions' style={{ width: this.input?.clientWidth }}>
|
||||
{suggestions.map(this.renderSuggestion)}
|
||||
<LocalCustomEmojiProvider>
|
||||
<Overlay show={!(suggestionsHidden || suggestions.isEmpty())} offset={[0, 0]} placement='bottom' target={this.input} popperConfig={{ strategy: 'fixed' }}>
|
||||
{({ props }) => (
|
||||
<div {...props}>
|
||||
<div className='autosuggest-textarea__suggestions' style={{ width: this.input?.clientWidth }}>
|
||||
{suggestions.map(this.renderSuggestion)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</Overlay>
|
||||
)}
|
||||
</Overlay>
|
||||
</LocalCustomEmojiProvider>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
||||
@ -12,6 +12,7 @@ import AutosuggestAccountContainer from '../features/compose/containers/autosugg
|
||||
|
||||
import { AutosuggestEmoji } from './autosuggest_emoji';
|
||||
import { AutosuggestHashtag } from './autosuggest_hashtag';
|
||||
import { LocalCustomEmojiProvider } from './emoji/context';
|
||||
|
||||
const textAtCursorMatchesToken = (str, caretPosition) => {
|
||||
let word;
|
||||
@ -218,15 +219,17 @@ const AutosuggestTextarea = forwardRef(({
|
||||
lang={lang}
|
||||
/>
|
||||
|
||||
<Overlay show={!(suggestionsHidden || suggestions.isEmpty())} offset={[0, 0]} placement='bottom' target={textareaRef} popperConfig={{ strategy: 'fixed' }}>
|
||||
{({ props }) => (
|
||||
<div {...props}>
|
||||
<div className='autosuggest-textarea__suggestions' style={{ width: textareaRef.current?.clientWidth }}>
|
||||
{suggestions.map(renderSuggestion)}
|
||||
<LocalCustomEmojiProvider>
|
||||
<Overlay show={!(suggestionsHidden || suggestions.isEmpty())} offset={[0, 0]} placement='bottom' target={textareaRef} popperConfig={{ strategy: 'fixed' }}>
|
||||
{({ props }) => (
|
||||
<div {...props}>
|
||||
<div className='autosuggest-textarea__suggestions' style={{ width: textareaRef.current?.clientWidth }}>
|
||||
{suggestions.map(renderSuggestion)}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
</Overlay>
|
||||
)}
|
||||
</Overlay>
|
||||
</LocalCustomEmojiProvider>
|
||||
</div>
|
||||
);
|
||||
});
|
||||
|
||||
@ -1,4 +1,9 @@
|
||||
import type { MouseEventHandler, PropsWithChildren } from 'react';
|
||||
import type {
|
||||
FC,
|
||||
MouseEventHandler,
|
||||
PropsWithChildren,
|
||||
ReactNode,
|
||||
} from 'react';
|
||||
import {
|
||||
createContext,
|
||||
useCallback,
|
||||
@ -8,6 +13,7 @@ import {
|
||||
} from 'react';
|
||||
|
||||
import { cleanExtraEmojis } from '@/mastodon/features/emoji/normalize';
|
||||
import { useCustomEmojis } from '@/mastodon/hooks/useCustomEmojis';
|
||||
import { autoPlayGif } from '@/mastodon/initial_state';
|
||||
import { polymorphicForwardRef } from '@/types/polymorphic';
|
||||
import type {
|
||||
@ -103,3 +109,10 @@ export const CustomEmojiProvider = ({
|
||||
</CustomEmojiContext.Provider>
|
||||
);
|
||||
};
|
||||
|
||||
export const LocalCustomEmojiProvider: FC<{ children: ReactNode }> = ({
|
||||
children,
|
||||
}) => {
|
||||
const emojis = useCustomEmojis();
|
||||
return <CustomEmojiProvider emojis={emojis}>{children}</CustomEmojiProvider>;
|
||||
};
|
||||
|
||||
@ -19,7 +19,6 @@ import {
|
||||
stringToEmojiState,
|
||||
tokenizeText,
|
||||
} from '@/mastodon/features/emoji/render';
|
||||
import type { ExtraCustomEmojiMap } from '@/mastodon/features/emoji/types';
|
||||
|
||||
import { AnimateEmojiContext, CustomEmojiContext } from './context';
|
||||
|
||||
@ -27,19 +26,14 @@ interface EmojiProps {
|
||||
code: string;
|
||||
showFallback?: boolean;
|
||||
showLoading?: boolean;
|
||||
customEmoji?: ExtraCustomEmojiMap | null;
|
||||
}
|
||||
|
||||
export const Emoji: FC<EmojiProps> = ({
|
||||
code,
|
||||
showFallback = true,
|
||||
showLoading = true,
|
||||
customEmoji: customEmojiOverride,
|
||||
}) => {
|
||||
let customEmoji = useContext(CustomEmojiContext);
|
||||
if (customEmojiOverride) {
|
||||
customEmoji = customEmojiOverride;
|
||||
}
|
||||
const customEmoji = useContext(CustomEmojiContext);
|
||||
|
||||
// First, set the emoji state based on the input code.
|
||||
const [state, setState] = useState(() =>
|
||||
|
||||
@ -566,7 +566,7 @@ class Status extends ImmutablePureComponent {
|
||||
/>
|
||||
);
|
||||
}
|
||||
} else if (status.get('tagged_collections').size) {
|
||||
} else if (status.get('tagged_collections').size && !status.get('quote')) {
|
||||
const firstLinkedCollection = status.get('tagged_collections').first();
|
||||
if (firstLinkedCollection) {
|
||||
media = (
|
||||
|
||||
@ -25,6 +25,7 @@ export function usePinnedStatusIds({
|
||||
tagged,
|
||||
pinned: true,
|
||||
replies: true,
|
||||
boosts: true,
|
||||
});
|
||||
|
||||
const dispatch = useAppDispatch();
|
||||
|
||||
@ -1,177 +0,0 @@
|
||||
import { emojiIndex } from 'emoji-mart';
|
||||
import { pick } from 'lodash';
|
||||
|
||||
import { search } from '../emoji_mart_search_light';
|
||||
|
||||
const trimEmojis = emoji => pick(emoji, ['id', 'unified', 'native', 'custom']);
|
||||
|
||||
describe('emoji_index', () => {
|
||||
it('should give same result for emoji_index_light and emoji-mart', () => {
|
||||
const expected = [
|
||||
{
|
||||
id: 'pineapple',
|
||||
unified: '1f34d',
|
||||
native: '🍍',
|
||||
},
|
||||
];
|
||||
expect(search('pineapple').map(trimEmojis)).toEqual(expected);
|
||||
expect(emojiIndex.search('pineapple').map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
|
||||
it('orders search results correctly', () => {
|
||||
const expected = [
|
||||
{
|
||||
id: 'apple',
|
||||
unified: '1f34e',
|
||||
native: '🍎',
|
||||
},
|
||||
{
|
||||
id: 'pineapple',
|
||||
unified: '1f34d',
|
||||
native: '🍍',
|
||||
},
|
||||
{
|
||||
id: 'green_apple',
|
||||
unified: '1f34f',
|
||||
native: '🍏',
|
||||
},
|
||||
{
|
||||
id: 'iphone',
|
||||
unified: '1f4f1',
|
||||
native: '📱',
|
||||
},
|
||||
];
|
||||
expect(search('apple').map(trimEmojis)).toEqual(expected);
|
||||
expect(emojiIndex.search('apple').map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
|
||||
it('can include/exclude categories', () => {
|
||||
expect(search('flag', { include: ['people'] })).toEqual([]);
|
||||
expect(emojiIndex.search('flag', { include: ['people'] })).toEqual([]);
|
||||
});
|
||||
|
||||
it('(different behavior from emoji-mart) do not erases custom emoji if not passed again', () => {
|
||||
const custom = [
|
||||
{
|
||||
id: 'mastodon',
|
||||
name: 'mastodon',
|
||||
short_names: ['mastodon'],
|
||||
text: '',
|
||||
emoticons: [],
|
||||
keywords: ['mastodon'],
|
||||
imageUrl: 'http://example.com',
|
||||
custom: true,
|
||||
},
|
||||
];
|
||||
search('', { custom });
|
||||
emojiIndex.search('', { custom });
|
||||
const expected = [];
|
||||
const lightExpected = [
|
||||
{
|
||||
id: 'mastodon',
|
||||
custom: true,
|
||||
},
|
||||
];
|
||||
expect(search('masto').map(trimEmojis)).toEqual(lightExpected);
|
||||
expect(emojiIndex.search('masto').map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
|
||||
it('(different behavior from emoji-mart) erases custom emoji if another is passed', () => {
|
||||
const custom = [
|
||||
{
|
||||
id: 'mastodon',
|
||||
name: 'mastodon',
|
||||
short_names: ['mastodon'],
|
||||
text: '',
|
||||
emoticons: [],
|
||||
keywords: ['mastodon'],
|
||||
imageUrl: 'http://example.com',
|
||||
custom: true,
|
||||
},
|
||||
];
|
||||
search('', { custom });
|
||||
emojiIndex.search('', { custom });
|
||||
const expected = [];
|
||||
expect(search('masto', { custom: [] }).map(trimEmojis)).toEqual(expected);
|
||||
expect(emojiIndex.search('masto').map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
|
||||
it('handles custom emoji', () => {
|
||||
const custom = [
|
||||
{
|
||||
id: 'mastodon',
|
||||
name: 'mastodon',
|
||||
short_names: ['mastodon'],
|
||||
text: '',
|
||||
emoticons: [],
|
||||
keywords: ['mastodon'],
|
||||
imageUrl: 'http://example.com',
|
||||
custom: true,
|
||||
},
|
||||
];
|
||||
search('', { custom });
|
||||
emojiIndex.search('', { custom });
|
||||
const expected = [
|
||||
{
|
||||
id: 'mastodon',
|
||||
custom: true,
|
||||
},
|
||||
];
|
||||
expect(search('masto', { custom }).map(trimEmojis)).toEqual(expected);
|
||||
expect(emojiIndex.search('masto', { custom }).map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
|
||||
it('should filter only emojis we care about, exclude pineapple', () => {
|
||||
const emojisToShowFilter = emoji => emoji.unified !== '1F34D';
|
||||
expect(search('apple', { emojisToShowFilter }).map((obj) => obj.id))
|
||||
.not.toContain('pineapple');
|
||||
expect(emojiIndex.search('apple', { emojisToShowFilter }).map((obj) => obj.id))
|
||||
.not.toContain('pineapple');
|
||||
});
|
||||
|
||||
it('does an emoji whose unified name is irregular', () => {
|
||||
const expected = [
|
||||
{
|
||||
'id': 'water_polo',
|
||||
'unified': '1f93d',
|
||||
'native': '🤽',
|
||||
},
|
||||
{
|
||||
'id': 'man-playing-water-polo',
|
||||
'unified': '1f93d-200d-2642-fe0f',
|
||||
'native': '🤽♂️',
|
||||
},
|
||||
{
|
||||
'id': 'woman-playing-water-polo',
|
||||
'unified': '1f93d-200d-2640-fe0f',
|
||||
'native': '🤽♀️',
|
||||
},
|
||||
];
|
||||
expect(search('polo').map(trimEmojis)).toEqual(expected);
|
||||
expect(emojiIndex.search('polo').map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
|
||||
it('can search for thinking_face', () => {
|
||||
const expected = [
|
||||
{
|
||||
id: 'thinking_face',
|
||||
unified: '1f914',
|
||||
native: '🤔',
|
||||
},
|
||||
];
|
||||
expect(search('thinking_fac').map(trimEmojis)).toEqual(expected);
|
||||
expect(emojiIndex.search('thinking_fac').map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
|
||||
it('can search for woman-facepalming', () => {
|
||||
const expected = [
|
||||
{
|
||||
id: 'woman-facepalming',
|
||||
unified: '1f926-200d-2640-fe0f',
|
||||
native: '🤦♀️',
|
||||
},
|
||||
];
|
||||
expect(search('woman-facep').map(trimEmojis)).toEqual(expected);
|
||||
expect(emojiIndex.search('woman-facep').map(trimEmojis)).toEqual(expected);
|
||||
});
|
||||
});
|
||||
@ -46,6 +46,8 @@ const loadDB = (() => {
|
||||
return loadPromise;
|
||||
})();
|
||||
|
||||
type ScoreMap = Map<string, AnyEmojiData & { score: number }>;
|
||||
|
||||
export async function search({
|
||||
query,
|
||||
locale: localeString,
|
||||
@ -75,7 +77,7 @@ export async function search({
|
||||
|
||||
// Create an array of emoji results
|
||||
const db = await loadDB();
|
||||
const resultArrays: Map<string, AnyEmojiData>[] = [];
|
||||
const resultArrays: ScoreMap[] = [];
|
||||
for (let i = 0; i < queryTokens.length; i++) {
|
||||
const token = queryTokens[i];
|
||||
if (!token) continue;
|
||||
@ -90,14 +92,21 @@ export async function search({
|
||||
db.getAllFromIndex(locale, 'tokens', range),
|
||||
db.getAllFromIndex('custom', 'tokens', range),
|
||||
]);
|
||||
const resultMap = new Map<string, AnyEmojiData>([
|
||||
...unicodeResults.map(
|
||||
(emoji) => [emoji.hexcode, emoji] as [string, AnyEmojiData],
|
||||
),
|
||||
...customResults.map(
|
||||
(emoji) => [emoji.shortcode, emoji] as [string, AnyEmojiData],
|
||||
),
|
||||
]);
|
||||
const resultMap: ScoreMap = new Map();
|
||||
for (const emoji of unicodeResults) {
|
||||
const score = getScoreForEmoji(emoji, token);
|
||||
if (score === null) {
|
||||
continue;
|
||||
}
|
||||
resultMap.set(emoji.hexcode, { ...emoji, score });
|
||||
}
|
||||
for (const emoji of customResults) {
|
||||
const score = getScoreForEmoji(emoji, token);
|
||||
if (score === null) {
|
||||
continue;
|
||||
}
|
||||
resultMap.set(emoji.shortcode, { ...emoji, score });
|
||||
}
|
||||
log('found %d results for token "%s"', resultMap.size, token);
|
||||
resultArrays.push(resultMap);
|
||||
}
|
||||
@ -106,7 +115,7 @@ export async function search({
|
||||
const results = Array.from(
|
||||
resultArrays
|
||||
.reduce((prev, curr) => {
|
||||
const intersection = new Map<string, AnyEmojiData>();
|
||||
const intersection: ScoreMap = new Map();
|
||||
for (const [code, emoji] of prev) {
|
||||
if (curr.has(code)) {
|
||||
intersection.set(code, emoji);
|
||||
@ -115,33 +124,7 @@ export async function search({
|
||||
return intersection;
|
||||
})
|
||||
.values(),
|
||||
);
|
||||
|
||||
results.sort((a, b) => {
|
||||
// Checks if a or b has the last token exactly, or only a prefix.
|
||||
const aHasToken = a.tokens.includes(lastToken);
|
||||
const bHasToken = b.tokens.includes(lastToken);
|
||||
if (aHasToken && !bHasToken) {
|
||||
return -1;
|
||||
} else if (!aHasToken && bHasToken) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// If one is a custom emoji, prioritize it over Unicode emojis.
|
||||
if ('category' in a) {
|
||||
return -1;
|
||||
} else if ('category' in b) {
|
||||
return 1;
|
||||
}
|
||||
|
||||
// If both are Unicode emojis, prioritize by order.
|
||||
if ('order' in a && 'order' in b) {
|
||||
return (a.order ?? 0) - (b.order ?? 0); // If these are both Unicode emojis, sort by order.
|
||||
}
|
||||
|
||||
// ¯\_(ツ)_/¯
|
||||
return 0;
|
||||
});
|
||||
).toSorted((a, b) => a.score - b.score);
|
||||
|
||||
const time = performance.measure('emoji-search-end', 'emoji-search-start');
|
||||
log(
|
||||
@ -157,6 +140,24 @@ export async function search({
|
||||
return results;
|
||||
}
|
||||
|
||||
function getScoreForEmoji(emoji: AnyEmojiData, query: string) {
|
||||
const id = 'shortcode' in emoji ? emoji.shortcode : emoji.label;
|
||||
if (id === query) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
let index = 1;
|
||||
for (const token of [id, emoji.tokens]) {
|
||||
const tokenIndex = token.indexOf(query);
|
||||
if (tokenIndex !== -1) {
|
||||
return index + tokenIndex / token.length;
|
||||
}
|
||||
index++;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
export async function putEmojiData(emojis: CompactEmoji[], locale: Locale) {
|
||||
loadedLocales.add(locale);
|
||||
const db = await loadDB();
|
||||
@ -252,6 +253,12 @@ export async function loadEmojiByHexcode(
|
||||
return skinHexcodeToEmoji(hexcode, skinResult);
|
||||
}
|
||||
|
||||
export async function loadAllUnicodeEmojis(localeString: string) {
|
||||
const locale = await toLoadedLocale(localeString);
|
||||
const db = await loadDB();
|
||||
return db.getAll(locale);
|
||||
}
|
||||
|
||||
export async function loadCustomEmojiByShortcode(shortcode: string) {
|
||||
const db = await loadDB();
|
||||
return db.get('custom', shortcode);
|
||||
@ -285,6 +292,11 @@ export async function loadLegacyShortcodesByShortcode(shortcode: string) {
|
||||
);
|
||||
}
|
||||
|
||||
export async function loadAllShortcodes() {
|
||||
const db = await loadDB();
|
||||
return db.getAll('shortcodes');
|
||||
}
|
||||
|
||||
// Private functions
|
||||
|
||||
async function syncLocales(db: Database) {
|
||||
|
||||
@ -1,57 +0,0 @@
|
||||
import type { BaseEmoji, EmojiData, NimbleEmojiIndex } from 'emoji-mart';
|
||||
import type { Category, Data, Emoji } from 'emoji-mart/dist-es/utils/data';
|
||||
|
||||
/*
|
||||
* The 'search' property, although not defined in the [`Emoji`]{@link node_modules/@types/emoji-mart/dist-es/utils/data.d.ts#Emoji} type,
|
||||
* is used in the application.
|
||||
* This could be due to an oversight by the library maintainer.
|
||||
* The `search` property is defined and used [here]{@link node_modules/emoji-mart/dist/utils/data.js#uncompress}.
|
||||
*/
|
||||
export type Search = string;
|
||||
/*
|
||||
* The 'skins' property does not exist in the application data.
|
||||
* This could be a potential area of refactoring or error handling.
|
||||
* The non-existence of 'skins' property is evident at [this location]{@link app/javascript/mastodon/features/emoji/emoji_compressed.js:121}.
|
||||
*/
|
||||
type Skins = null;
|
||||
|
||||
type Filename = string;
|
||||
type UnicodeFilename = string;
|
||||
export type FilenameData = [
|
||||
filename: Filename,
|
||||
unicodeFilename?: UnicodeFilename,
|
||||
][];
|
||||
export type ShortCodesToEmojiDataKey =
|
||||
| EmojiData['id']
|
||||
| BaseEmoji['native']
|
||||
| keyof NimbleEmojiIndex['emojis'];
|
||||
|
||||
type SearchData = [
|
||||
BaseEmoji['native'],
|
||||
Emoji['short_names'],
|
||||
Search,
|
||||
Emoji['unified'],
|
||||
];
|
||||
|
||||
export type ShortCodesToEmojiData = Record<
|
||||
ShortCodesToEmojiDataKey,
|
||||
[FilenameData, SearchData]
|
||||
>;
|
||||
type EmojisWithoutShortCodes = FilenameData;
|
||||
|
||||
type EmojiCompressed = [
|
||||
ShortCodesToEmojiData,
|
||||
Skins,
|
||||
Category[],
|
||||
Data['aliases'],
|
||||
EmojisWithoutShortCodes,
|
||||
];
|
||||
|
||||
/*
|
||||
* `emoji_compressed.js` uses `babel-plugin-preval`, which makes it difficult to convert to TypeScript.
|
||||
* As a temporary solution, we are allowing a default export here to apply the TypeScript type `EmojiCompressed` to the JS file export.
|
||||
* - {@link app/javascript/mastodon/features/emoji/emoji_compressed.js}
|
||||
*/
|
||||
declare const emojiCompressed: EmojiCompressed;
|
||||
|
||||
export default emojiCompressed; // eslint-disable-line import/no-default-export
|
||||
@ -1,138 +0,0 @@
|
||||
// @preval
|
||||
// http://www.unicode.org/Public/emoji/5.0/emoji-test.txt
|
||||
// This file contains the compressed version of the emoji data from
|
||||
// both emoji_map.json and from emoji-mart's emojiIndex and data objects.
|
||||
// It's designed to be emitted in an array format to take up less space
|
||||
// over the wire.
|
||||
|
||||
// This version comment should be bumped each time the emoji data is changed
|
||||
// to ensure that the prevaled file is regenerated by Babel
|
||||
// version: 4
|
||||
|
||||
import { NimbleEmojiIndex } from 'emoji-mart';
|
||||
import { uncompress as emojiMartUncompress } from 'emoji-mart/dist/utils/data';
|
||||
|
||||
import data from './emoji_data.json';
|
||||
import emojiMap from './emoji_map.json';
|
||||
import { unicodeToFilename, unicodeToUnifiedName } from './unicode_utils';
|
||||
|
||||
emojiMartUncompress(data);
|
||||
|
||||
const emojiMartData = data;
|
||||
const emojiIndex = new NimbleEmojiIndex(emojiMartData);
|
||||
|
||||
const excluded = ['®', '©', '™'];
|
||||
const skinTones = ['🏻', '🏼', '🏽', '🏾', '🏿'];
|
||||
const shortcodeMap = {};
|
||||
|
||||
const shortCodesToEmojiData = {};
|
||||
const emojisWithoutShortCodes = [];
|
||||
|
||||
Object.keys(emojiIndex.emojis).forEach((key) => {
|
||||
let emoji = emojiIndex.emojis[key];
|
||||
|
||||
// Emojis with skin tone modifiers are stored like this
|
||||
if (Object.hasOwn(emoji, '1')) {
|
||||
emoji = emoji['1'];
|
||||
}
|
||||
|
||||
shortcodeMap[emoji.native] = emoji.id;
|
||||
});
|
||||
|
||||
const stripModifiers = (unicode) => {
|
||||
skinTones.forEach((tone) => {
|
||||
unicode = unicode.replace(tone, '');
|
||||
});
|
||||
|
||||
return unicode;
|
||||
};
|
||||
|
||||
Object.keys(emojiMap).forEach((key) => {
|
||||
if (excluded.includes(key)) {
|
||||
delete emojiMap[key];
|
||||
return;
|
||||
}
|
||||
|
||||
const normalizedKey = stripModifiers(key);
|
||||
let shortcode = shortcodeMap[normalizedKey];
|
||||
|
||||
if (!shortcode) {
|
||||
shortcode = shortcodeMap[normalizedKey + '\uFE0F'];
|
||||
}
|
||||
|
||||
const filename = emojiMap[key];
|
||||
|
||||
const filenameData = [key];
|
||||
|
||||
if (unicodeToFilename(key) !== filename) {
|
||||
// filename can't be derived using unicodeToFilename
|
||||
filenameData.push(filename);
|
||||
}
|
||||
|
||||
if (typeof shortcode === 'undefined') {
|
||||
emojisWithoutShortCodes.push(filenameData);
|
||||
} else {
|
||||
if (!Array.isArray(shortCodesToEmojiData[shortcode])) {
|
||||
shortCodesToEmojiData[shortcode] = [[]];
|
||||
}
|
||||
|
||||
shortCodesToEmojiData[shortcode][0].push(filenameData);
|
||||
}
|
||||
});
|
||||
|
||||
Object.keys(emojiIndex.emojis).forEach((key) => {
|
||||
let emoji = emojiIndex.emojis[key];
|
||||
|
||||
// Emojis with skin tone modifiers are stored like this
|
||||
if (Object.hasOwn(emoji, '1')) {
|
||||
emoji = emoji['1'];
|
||||
}
|
||||
|
||||
const { native } = emoji;
|
||||
let { short_names, search, unified } = emojiMartData.emojis[key];
|
||||
|
||||
if (short_names[0] !== key) {
|
||||
throw new Error(
|
||||
'The compressor expects the first short_code to be the ' +
|
||||
'key. It may need to be rewritten if the emoji change such that this ' +
|
||||
'is no longer the case.',
|
||||
);
|
||||
}
|
||||
|
||||
short_names = short_names.slice(1); // first short name can be inferred from the key
|
||||
|
||||
const searchData = [native, short_names, search];
|
||||
|
||||
if (unicodeToUnifiedName(native) !== unified) {
|
||||
// unified name can't be derived from unicodeToUnifiedName
|
||||
searchData.push(unified);
|
||||
}
|
||||
|
||||
if (!Array.isArray(shortCodesToEmojiData[key])) {
|
||||
shortCodesToEmojiData[key] = [[]];
|
||||
}
|
||||
|
||||
shortCodesToEmojiData[key].push(searchData);
|
||||
});
|
||||
|
||||
// JSON.parse/stringify is to emulate what @preval is doing and avoid any
|
||||
// inconsistent behavior in dev mode
|
||||
export default JSON.parse(
|
||||
JSON.stringify([
|
||||
shortCodesToEmojiData,
|
||||
/*
|
||||
* The property `skins` is not found in the current context.
|
||||
* This could potentially lead to issues when interacting with modules or data structures
|
||||
* that expect the presence of `skins` property.
|
||||
* Currently, no definitions or references to `skins` property can be found in:
|
||||
* - {@link node_modules/emoji-mart/dist/utils/data.js}
|
||||
* - {@link node_modules/emoji-mart/data/all.json}
|
||||
* - {@link app/javascript/mastodon/features/emoji/emoji_compressed.d.ts#Skins}
|
||||
* Future refactorings or updates should consider adding definitions or handling for `skins` property.
|
||||
*/
|
||||
emojiMartData.skins,
|
||||
emojiMartData.categories,
|
||||
emojiMartData.aliases,
|
||||
emojisWithoutShortCodes,
|
||||
]),
|
||||
);
|
||||
@ -1,50 +0,0 @@
|
||||
// The output of this module is designed to mimic emoji-mart's
|
||||
// "data" object, such that we can use it for a light version of emoji-mart's
|
||||
// emojiIndex.search functionality.
|
||||
import type { BaseEmoji } from 'emoji-mart';
|
||||
import type { Emoji } from 'emoji-mart/dist-es/utils/data';
|
||||
import emojiCompressed from 'virtual:mastodon-emoji-compressed';
|
||||
import type {
|
||||
Search,
|
||||
ShortCodesToEmojiData,
|
||||
} from 'virtual:mastodon-emoji-compressed';
|
||||
|
||||
import { unicodeToUnifiedName } from './unicode_utils';
|
||||
|
||||
type Emojis = Record<
|
||||
NonNullable<keyof ShortCodesToEmojiData>,
|
||||
{
|
||||
native: BaseEmoji['native'];
|
||||
search: Search;
|
||||
short_names: Emoji['short_names'];
|
||||
unified: Emoji['unified'];
|
||||
}
|
||||
>;
|
||||
|
||||
const [
|
||||
shortCodesToEmojiData,
|
||||
_skins,
|
||||
categories,
|
||||
short_names,
|
||||
_emojisWithoutShortCodes,
|
||||
] = emojiCompressed;
|
||||
|
||||
const emojis: Emojis = {};
|
||||
|
||||
// decompress
|
||||
Object.keys(shortCodesToEmojiData).forEach((shortCode) => {
|
||||
const emojiData = shortCodesToEmojiData[shortCode];
|
||||
if (!emojiData) return;
|
||||
|
||||
const [_filenameData, searchData] = emojiData;
|
||||
const [native, short_names, search, unified] = searchData;
|
||||
|
||||
emojis[shortCode] = {
|
||||
native,
|
||||
search,
|
||||
short_names: short_names ? [shortCode].concat(short_names) : undefined,
|
||||
unified: unified ?? unicodeToUnifiedName(native),
|
||||
};
|
||||
});
|
||||
|
||||
export { emojis, categories, short_names };
|
||||
@ -1,185 +0,0 @@
|
||||
// This code is largely borrowed from:
|
||||
// https://github.com/missive/emoji-mart/blob/5f2ffcc/src/utils/emoji-index.js
|
||||
|
||||
import { emojis, categories } from './emoji_mart_data_light';
|
||||
import { getData, getSanitizedData, uniq, intersect } from './emoji_utils';
|
||||
|
||||
let originalPool = {};
|
||||
let index = {};
|
||||
let emojisList = {};
|
||||
let emoticonsList = {};
|
||||
let customEmojisList = [];
|
||||
|
||||
for (let emoji in emojis) {
|
||||
let emojiData = emojis[emoji];
|
||||
let { short_names, emoticons } = emojiData;
|
||||
let id = short_names[0];
|
||||
|
||||
if (emoticons) {
|
||||
emoticons.forEach(emoticon => {
|
||||
if (emoticonsList[emoticon]) {
|
||||
return;
|
||||
}
|
||||
|
||||
emoticonsList[emoticon] = id;
|
||||
});
|
||||
}
|
||||
|
||||
emojisList[id] = getSanitizedData(id);
|
||||
originalPool[id] = emojiData;
|
||||
}
|
||||
|
||||
function clearCustomEmojis(pool) {
|
||||
customEmojisList.forEach((emoji) => {
|
||||
let emojiId = emoji.id || emoji.short_names[0];
|
||||
|
||||
delete pool[emojiId];
|
||||
delete emojisList[emojiId];
|
||||
});
|
||||
}
|
||||
|
||||
function addCustomToPool(custom, pool) {
|
||||
if (customEmojisList.length) clearCustomEmojis(pool);
|
||||
|
||||
custom.forEach((emoji) => {
|
||||
let emojiId = emoji.id || emoji.short_names[0];
|
||||
|
||||
if (emojiId && !pool[emojiId]) {
|
||||
pool[emojiId] = getData(emoji);
|
||||
emojisList[emojiId] = getSanitizedData(emoji);
|
||||
}
|
||||
});
|
||||
|
||||
customEmojisList = custom;
|
||||
index = {};
|
||||
}
|
||||
|
||||
function search(value, { emojisToShowFilter, maxResults, include, exclude, custom } = {}) {
|
||||
if (custom !== undefined) {
|
||||
if (customEmojisList !== custom)
|
||||
addCustomToPool(custom, originalPool);
|
||||
} else {
|
||||
custom = [];
|
||||
}
|
||||
|
||||
maxResults = maxResults || 75;
|
||||
include = include || [];
|
||||
exclude = exclude || [];
|
||||
|
||||
let results = null,
|
||||
pool = originalPool;
|
||||
|
||||
if (value.length) {
|
||||
if (value === '-' || value === '-1') {
|
||||
return [emojisList['-1']];
|
||||
}
|
||||
|
||||
let values = value.toLowerCase().split(/[\s|,\-_]+/),
|
||||
allResults = [];
|
||||
|
||||
if (values.length > 2) {
|
||||
values = [values[0], values[1]];
|
||||
}
|
||||
|
||||
if (include.length || exclude.length) {
|
||||
pool = {};
|
||||
|
||||
categories.forEach(category => {
|
||||
let isIncluded = include && include.length ? include.indexOf(category.name.toLowerCase()) > -1 : true;
|
||||
let isExcluded = exclude && exclude.length ? exclude.indexOf(category.name.toLowerCase()) > -1 : false;
|
||||
if (!isIncluded || isExcluded) {
|
||||
return;
|
||||
}
|
||||
|
||||
category.emojis.forEach(emojiId => pool[emojiId] = emojis[emojiId]);
|
||||
});
|
||||
|
||||
if (custom.length) {
|
||||
let customIsIncluded = include && include.length ? include.indexOf('custom') > -1 : true;
|
||||
let customIsExcluded = exclude && exclude.length ? exclude.indexOf('custom') > -1 : false;
|
||||
if (customIsIncluded && !customIsExcluded) {
|
||||
addCustomToPool(custom, pool);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const searchValue = (value) => {
|
||||
let aPool = pool,
|
||||
aIndex = index,
|
||||
length = 0;
|
||||
|
||||
for (let charIndex = 0; charIndex < value.length; charIndex++) {
|
||||
const char = value[charIndex];
|
||||
length++;
|
||||
|
||||
aIndex[char] = aIndex[char] || {};
|
||||
aIndex = aIndex[char];
|
||||
|
||||
if (!aIndex.results) {
|
||||
let scores = {};
|
||||
|
||||
aIndex.results = [];
|
||||
aIndex.pool = {};
|
||||
|
||||
for (let id in aPool) {
|
||||
let emoji = aPool[id],
|
||||
{ search } = emoji,
|
||||
sub = value.slice(0, length),
|
||||
subIndex = search.indexOf(sub);
|
||||
|
||||
if (subIndex !== -1) {
|
||||
let score = subIndex + 1;
|
||||
if (sub === id) score = 0;
|
||||
|
||||
aIndex.results.push(emojisList[id]);
|
||||
aIndex.pool[id] = emoji;
|
||||
|
||||
scores[id] = score;
|
||||
}
|
||||
}
|
||||
|
||||
aIndex.results.sort((a, b) => {
|
||||
let aScore = scores[a.id],
|
||||
bScore = scores[b.id];
|
||||
|
||||
return aScore - bScore;
|
||||
});
|
||||
}
|
||||
|
||||
aPool = aIndex.pool;
|
||||
}
|
||||
|
||||
return aIndex.results;
|
||||
};
|
||||
|
||||
if (values.length > 1) {
|
||||
results = searchValue(value);
|
||||
} else {
|
||||
results = [];
|
||||
}
|
||||
|
||||
allResults = values.map(searchValue).filter(a => a);
|
||||
|
||||
if (allResults.length > 1) {
|
||||
allResults = intersect.apply(null, allResults);
|
||||
} else if (allResults.length) {
|
||||
allResults = allResults[0];
|
||||
}
|
||||
|
||||
results = uniq(results.concat(allResults));
|
||||
}
|
||||
|
||||
if (results) {
|
||||
if (emojisToShowFilter) {
|
||||
results = results.filter((result) => emojisToShowFilter(emojis[result.id]));
|
||||
}
|
||||
|
||||
if (results && results.length > maxResults) {
|
||||
results = results.slice(0, maxResults);
|
||||
}
|
||||
}
|
||||
|
||||
return results;
|
||||
}
|
||||
|
||||
export { search };
|
||||
@ -1,217 +0,0 @@
|
||||
// This code is largely borrowed from:
|
||||
// https://github.com/missive/emoji-mart/blob/5f2ffcc/src/utils/index.js
|
||||
|
||||
import * as data from './emoji_mart_data_light';
|
||||
|
||||
const buildSearch = (data) => {
|
||||
const search = [];
|
||||
|
||||
let addToSearch = (strings, split) => {
|
||||
if (!strings) {
|
||||
return;
|
||||
}
|
||||
|
||||
(Array.isArray(strings) ? strings : [strings]).forEach((string) => {
|
||||
(split ? string.split(/[-|_|\s]+/) : [string]).forEach((s) => {
|
||||
s = s.toLowerCase();
|
||||
|
||||
if (search.indexOf(s) === -1) {
|
||||
search.push(s);
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
|
||||
addToSearch(data.short_names, true);
|
||||
addToSearch(data.name, true);
|
||||
addToSearch(data.keywords, false);
|
||||
addToSearch(data.emoticons, false);
|
||||
|
||||
return search.join(',');
|
||||
};
|
||||
|
||||
const _String = String;
|
||||
|
||||
const stringFromCodePoint = _String.fromCodePoint || function () {
|
||||
let MAX_SIZE = 0x4000;
|
||||
let codeUnits = [];
|
||||
let highSurrogate;
|
||||
let lowSurrogate;
|
||||
let index = -1;
|
||||
let length = arguments.length;
|
||||
if (!length) {
|
||||
return '';
|
||||
}
|
||||
let result = '';
|
||||
while (++index < length) {
|
||||
let codePoint = Number(arguments[index]);
|
||||
if (
|
||||
!isFinite(codePoint) || // `NaN`, `+Infinity`, or `-Infinity`
|
||||
codePoint < 0 || // not a valid Unicode code point
|
||||
codePoint > 0x10FFFF || // not a valid Unicode code point
|
||||
Math.floor(codePoint) !== codePoint // not an integer
|
||||
) {
|
||||
throw RangeError('Invalid code point: ' + codePoint);
|
||||
}
|
||||
if (codePoint <= 0xFFFF) { // BMP code point
|
||||
codeUnits.push(codePoint);
|
||||
} else { // Astral code point; split in surrogate halves
|
||||
// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae
|
||||
codePoint -= 0x10000;
|
||||
highSurrogate = (codePoint >> 10) + 0xD800;
|
||||
lowSurrogate = (codePoint % 0x400) + 0xDC00;
|
||||
codeUnits.push(highSurrogate, lowSurrogate);
|
||||
}
|
||||
if (index + 1 === length || codeUnits.length > MAX_SIZE) {
|
||||
result += String.fromCharCode.apply(null, codeUnits);
|
||||
codeUnits.length = 0;
|
||||
}
|
||||
}
|
||||
return result;
|
||||
};
|
||||
|
||||
|
||||
const _JSON = JSON;
|
||||
|
||||
const COLONS_REGEX = /^(?::([^:]+):)(?::skin-tone-(\d):)?$/;
|
||||
const SKINS = [
|
||||
'1F3FA', '1F3FB', '1F3FC',
|
||||
'1F3FD', '1F3FE', '1F3FF',
|
||||
];
|
||||
|
||||
function unifiedToNative(unified) {
|
||||
let unicodes = unified.split('-'),
|
||||
codePoints = unicodes.map((u) => `0x${u}`);
|
||||
|
||||
return stringFromCodePoint.apply(null, codePoints);
|
||||
}
|
||||
|
||||
function sanitize(emoji) {
|
||||
let { name, short_names, skin_tone, skin_variations, emoticons, unified, custom, imageUrl } = emoji,
|
||||
id = emoji.id || short_names[0],
|
||||
colons = `:${id}:`;
|
||||
|
||||
if (custom) {
|
||||
return {
|
||||
id,
|
||||
name,
|
||||
colons,
|
||||
emoticons,
|
||||
custom,
|
||||
imageUrl,
|
||||
};
|
||||
}
|
||||
|
||||
if (skin_tone) {
|
||||
colons += `:skin-tone-${skin_tone}:`;
|
||||
}
|
||||
|
||||
return {
|
||||
id,
|
||||
name,
|
||||
colons,
|
||||
emoticons,
|
||||
unified: unified.toLowerCase(),
|
||||
skin: skin_tone || (skin_variations ? 1 : null),
|
||||
native: unifiedToNative(unified),
|
||||
};
|
||||
}
|
||||
|
||||
function getSanitizedData() {
|
||||
return sanitize(getData(...arguments));
|
||||
}
|
||||
|
||||
function getData(emoji, skin, set) {
|
||||
let emojiData = {};
|
||||
|
||||
if (typeof emoji === 'string') {
|
||||
let matches = emoji.match(COLONS_REGEX);
|
||||
|
||||
if (matches) {
|
||||
emoji = matches[1];
|
||||
|
||||
if (matches[2]) {
|
||||
skin = parseInt(matches[2]);
|
||||
}
|
||||
}
|
||||
|
||||
if (Object.hasOwn(data.short_names, emoji)) {
|
||||
emoji = data.short_names[emoji];
|
||||
}
|
||||
|
||||
if (Object.hasOwn(data.emojis, emoji)) {
|
||||
emojiData = data.emojis[emoji];
|
||||
}
|
||||
} else if (emoji.id) {
|
||||
if (Object.hasOwn(data.short_names, emoji.id)) {
|
||||
emoji.id = data.short_names[emoji.id];
|
||||
}
|
||||
|
||||
if (Object.hasOwn(data.emojis, emoji.id)) {
|
||||
emojiData = data.emojis[emoji.id];
|
||||
skin = skin || emoji.skin;
|
||||
}
|
||||
}
|
||||
|
||||
if (!Object.keys(emojiData).length) {
|
||||
emojiData = emoji;
|
||||
emojiData.custom = true;
|
||||
|
||||
if (!emojiData.search) {
|
||||
emojiData.search = buildSearch(emoji);
|
||||
}
|
||||
}
|
||||
|
||||
emojiData.emoticons = emojiData.emoticons || [];
|
||||
emojiData.variations = emojiData.variations || [];
|
||||
|
||||
if (emojiData.skin_variations && skin > 1 && set) {
|
||||
emojiData = JSON.parse(_JSON.stringify(emojiData));
|
||||
|
||||
let skinKey = SKINS[skin - 1],
|
||||
variationData = emojiData.skin_variations[skinKey];
|
||||
|
||||
if (!variationData.variations && emojiData.variations) {
|
||||
delete emojiData.variations;
|
||||
}
|
||||
|
||||
if (variationData[`has_img_${set}`]) {
|
||||
emojiData.skin_tone = skin;
|
||||
|
||||
for (let k in variationData) {
|
||||
let v = variationData[k];
|
||||
emojiData[k] = v;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (emojiData.variations && emojiData.variations.length) {
|
||||
emojiData = JSON.parse(_JSON.stringify(emojiData));
|
||||
emojiData.unified = emojiData.variations.shift();
|
||||
}
|
||||
|
||||
return emojiData;
|
||||
}
|
||||
|
||||
function uniq(arr) {
|
||||
return arr.reduce((acc, item) => {
|
||||
if (acc.indexOf(item) === -1) {
|
||||
acc.push(item);
|
||||
}
|
||||
return acc;
|
||||
}, []);
|
||||
}
|
||||
|
||||
function intersect(a, b) {
|
||||
const uniqA = uniq(a);
|
||||
const uniqB = uniq(b);
|
||||
|
||||
return uniqA.filter(item => uniqB.indexOf(item) >= 0);
|
||||
}
|
||||
|
||||
export {
|
||||
getData,
|
||||
getSanitizedData,
|
||||
uniq,
|
||||
intersect,
|
||||
};
|
||||
@ -75,6 +75,36 @@ export async function fetchCustomEmojiData() {
|
||||
return customEmojis;
|
||||
}
|
||||
|
||||
type LegacyEmoji =
|
||||
| { id: string; custom?: false; native: string }
|
||||
| {
|
||||
id: string;
|
||||
custom: true;
|
||||
};
|
||||
|
||||
// Replicates the old legacy search function.
|
||||
export async function emojiMartSearch(
|
||||
token: string,
|
||||
locale: string,
|
||||
limit = 5,
|
||||
): Promise<LegacyEmoji[]> {
|
||||
const query = token.replace(':', '').toLowerCase().trim();
|
||||
if (!query.length) {
|
||||
return [];
|
||||
}
|
||||
|
||||
const { search } = await import('./database');
|
||||
const results = await search({ query, locale, limit });
|
||||
return results.map((emoji) =>
|
||||
'shortcode' in emoji
|
||||
? { id: emoji.shortcode, custom: true }
|
||||
: {
|
||||
id: emoji.label.replaceAll(' ', '_').toLowerCase(),
|
||||
native: emoji.unicode,
|
||||
},
|
||||
);
|
||||
}
|
||||
|
||||
export function usePickerEmojis() {
|
||||
const [, setLoaded] = useState(customEmojis !== null);
|
||||
|
||||
|
||||
@ -1,9 +1,12 @@
|
||||
import { useEffect, useState } from 'react';
|
||||
|
||||
import type { ExtraCustomEmojiMap } from '../features/emoji/types';
|
||||
import { emojiLogger } from '../features/emoji/utils';
|
||||
|
||||
let emojis: ExtraCustomEmojiMap | null = null;
|
||||
|
||||
const log = emojiLogger('useCustomEmojis');
|
||||
|
||||
export function useCustomEmojis() {
|
||||
const [, setLoaded] = useState(emojis !== null);
|
||||
useEffect(() => {
|
||||
@ -21,6 +24,7 @@ async function loadEmojisIntoCache() {
|
||||
const { loadAllCustomEmoji } = await import('../features/emoji/database');
|
||||
const emojisRaw = await loadAllCustomEmoji();
|
||||
if (emojisRaw === null) {
|
||||
log('Custom emojis not loaded yet');
|
||||
return;
|
||||
}
|
||||
|
||||
@ -32,4 +36,5 @@ async function loadEmojisIntoCache() {
|
||||
static_url: emoji.static_url,
|
||||
};
|
||||
}
|
||||
log('Loaded %d custom emojis into cache', Object.keys(emojis).length);
|
||||
}
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Загружаецца калекцыя…",
|
||||
"collections.detail.revoke_inclusion": "Прыбраць сябе",
|
||||
"collections.detail.sensitive_content": "Адчувальнае змесціва",
|
||||
"collections.detail.sensitive_note": "У гэтай калекцыі прысутнічаюць уліковыя запісы і кантэнт, змесціва якіх можа падацца адчувальным для некаторых карыстальнікаў.",
|
||||
"collections.detail.share": "Падзяліцца гэтай калекцыяй",
|
||||
"collections.detail.you_are_in_this_collection": "Вас уключылі ў гэтую калекцыю",
|
||||
"collections.edit_details": "Рэдагаваць падрабязнасці",
|
||||
|
||||
@ -327,11 +327,15 @@
|
||||
"annual_report.summary.share_on_mastodon": "Rhannwch ar Mastodon",
|
||||
"attachments_list.unprocessed": "(heb eu prosesu)",
|
||||
"audio.hide": "Cuddio sain",
|
||||
"block_modal.no_collections": "Does dim modd i'r un ohonoch ychwanegu'ch gilydd at gasgliadau. Byddwch yn cael eich tynnu'n awtomatig o gasgliadau presennol eich gilydd, os yw'n berthnasol.",
|
||||
"block_modal.remote_users_caveat": "Byddwn yn gofyn i'r gweinydd {domain} barchu eich penderfyniad. Fodd bynnag, nid yw cydymffurfiad wedi'i warantu gan y gall rhai gweinyddwyr drin rhwystrau mewn ffyrdd gwahanol. Mae'n bosibl y bydd postiadau cyhoeddus yn dal i fod yn weladwy i ddefnyddwyr nad ydynt wedi mewngofnodi.",
|
||||
"block_modal.show_less": "Dangos llai",
|
||||
"block_modal.show_more": "Dangos rhagor",
|
||||
"block_modal.they_cant_mention": "Gallwch chi ddim sôn am, dilyn, na dyfynnu eich gilydd.",
|
||||
"block_modal.they_cant_see_posts": "Byddan nhw ddim yn gallu gweld eich cynnwys a fyddwch chi ddim yn gweld eu cynnwys nhw.",
|
||||
"block_modal.they_will_know": "Gallan nhw weld eu bod wedi'u rhwystro.",
|
||||
"block_modal.title": "Blocio defnyddiwr?",
|
||||
"block_modal.you_wont_see_mentions": "Fyddwch chi ddim yn gweld postiadau gan eraill sy'n eu crybwyll.",
|
||||
"boost_modal.combo": "Mae modd pwyso {combo} er mwyn hepgor hyn tro nesa",
|
||||
"boost_modal.reblog": "Hybu postiad?",
|
||||
"boost_modal.undo_reblog": "Dad-hybu postiad?",
|
||||
@ -390,7 +394,7 @@
|
||||
"collections.detail.loading": "Yn llwytho casgliad…",
|
||||
"collections.detail.revoke_inclusion": "Tynnu fi",
|
||||
"collections.detail.sensitive_content": "Cynnwys sensitif",
|
||||
"collections.detail.sensitive_note": "Mae'r casgliad hwn yn cynnwys cyfrifon a chynnwys a allai fod yn sensitif i rai defnyddwyr.",
|
||||
"collections.detail.sensitive_note": "Efallai na fydd y disgrifiad a'r cyfrifon yn addas i bob darllenydd.",
|
||||
"collections.detail.share": "Rhannu'r casgliad hwn",
|
||||
"collections.detail.you_are_in_this_collection": "Rydych chi wedi'ch cynnwys yn y casgliad hwn",
|
||||
"collections.edit_details": "Golygu manylion",
|
||||
@ -421,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Rydych chi wedi ychwanegu'r nifer mwyaf o gyfrifon",
|
||||
"collections.sensitive": "Sensitif",
|
||||
"collections.share_short": "Rhannu",
|
||||
"collections.sort_alphabetical": "Yn nhrefn yr Wyddor",
|
||||
"collections.sort_by": "Trefnu yn ôl:",
|
||||
"collections.sort_date_added": "Dyddiad ychwanegu",
|
||||
"collections.sort_last_active": "Yn weithgar ddiwethaf",
|
||||
"collections.sort_most_followers": "Mwyaf o ddilynwyr",
|
||||
"collections.suggestions.can_not_add": "Dim modd ei ychwanegu",
|
||||
"collections.suggestions.can_not_add_desc": "Efallai bod y cyfrifon hyn wedi dewis peidio â chael eu darganfod, neu efallai eu bod ar weinydd nad yw'n cefnogi casgliadau.",
|
||||
"collections.suggestions.must_follow": "Rhaid dilyn yn gyntaf",
|
||||
@ -632,6 +641,7 @@
|
||||
"empty_column.blocks": "Dydych chi heb rwystro unrhyw ddefnyddwyr eto.",
|
||||
"empty_column.bookmarked_statuses": "Does gennych chi ddim unrhyw bostiad wedi'u cadw fel nod tudalen eto. Pan fyddwch yn gosod nod tudalen i un, mi fydd yn ymddangos yma.",
|
||||
"empty_column.collections.featured_in": "Dydych chi heb gael eich ychwanegu at unrhyw gasgliadau eto.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Er mwyn i bobl eich ychwanegu at gasgliadau, mae angen i chi ganiatáu i chi ymddangos mewn profiadau darganfod o<link> Dewisiadau > Preifatrwydd a chyrhaeddiad</link>",
|
||||
"empty_column.community": "Mae'r ffrwd lleol yn wag. Beth am ysgrifennu rhywbeth cyhoeddus!",
|
||||
"empty_column.direct": "Does gennych chi unrhyw grybwylliadau preifat eto. Pan fyddwch chi'n anfon neu'n derbyn un, bydd yn ymddangos yma.",
|
||||
"empty_column.disabled_feed": "Mae'r ffrwd hon wedi'i hanalluogi gan weinyddwyr eich gweinydd.",
|
||||
@ -777,6 +787,7 @@
|
||||
"info_button.label": "Cymorth",
|
||||
"info_button.what_is_alt_text": "<h1>Beth yw testun amgen?</h1><p> Mae Testun Amgen yn darparu disgrifiadau delwedd ar gyfer pobl â nam ar eu golwg, cysylltiadau lled band isel, neu'r rhai sy'n ceisio cyd-destun ychwanegol.</p><p> Gallwch wella hygyrchedd a dealltwriaeth i bawb trwy ysgrifennu testun amgen clir, cryno a gwrthrychol.</p><ul><li> Dal elfennau pwysig</li><li> Crynhoi testun mewn delweddau</li><li> Defnyddiwch strwythur brawddegau rheolaidd</li><li> Osgoi gwybodaeth ddiangen</li><li> Canolbwyntio ar dueddiadau a chanfyddiadau allweddol mewn delweddau cymhleth (fel diagramau neu fapiau)</li></ul>",
|
||||
"interaction_modal.action": "I ryngweithio â phostiad {name}, mae angen i chi fewngofnodi i'ch cyfrif ar ba bynnag weinydd Mastodon rydych chi'n ei ddefnyddio.",
|
||||
"interaction_modal.action_follow": "I ddilyn {name}, mae angen i chi fewngofnodi i'ch cyfrif ar ba bynnag weinydd Mastodon rydych chi'n ei ddefnyddio.",
|
||||
"interaction_modal.go": "Mynd",
|
||||
"interaction_modal.no_account_yet": "Dim cyfrif eto?",
|
||||
"interaction_modal.on_another_server": "Ar weinydd gwahanol",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Indlæser samling…",
|
||||
"collections.detail.revoke_inclusion": "Fjern mig",
|
||||
"collections.detail.sensitive_content": "Følsomt indhold",
|
||||
"collections.detail.sensitive_note": "Denne samling indeholder konti og indhold, der kan være følsomt for nogle brugere.",
|
||||
"collections.detail.sensitive_note": "Beskrivelsen og kontiene er muligvis ikke egnet for alle.",
|
||||
"collections.detail.share": "Del denne samling",
|
||||
"collections.detail.you_are_in_this_collection": "Du er med i denne samling",
|
||||
"collections.edit_details": "Rediger detaljer",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Du har tilføjet det maksimale antal konti",
|
||||
"collections.sensitive": "Sensitivt",
|
||||
"collections.share_short": "Del",
|
||||
"collections.sort_alphabetical": "Alfabetisk",
|
||||
"collections.sort_by": "Sortér efter:",
|
||||
"collections.sort_date_added": "Dato tilføjet",
|
||||
"collections.sort_last_active": "Senest aktiv",
|
||||
"collections.sort_most_followers": "Flest følgere",
|
||||
"collections.suggestions.can_not_add": "Kan ikke tilføjes",
|
||||
"collections.suggestions.can_not_add_desc": "Disse konti kan have fravalgt opdagelse, eller de kan være på en server, der ikke understøtter samlinger.",
|
||||
"collections.suggestions.must_follow": "Skal følge først",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Du har ikke blokeret nogle brugere endnu.",
|
||||
"empty_column.bookmarked_statuses": "Du har ingen bogmærkede indlæg endnu. Når du bogmærker ét, vil det dukke op hér.",
|
||||
"empty_column.collections.featured_in": "Du er ikke blevet tilføjet til nogen samlinger endnu.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "For at andre kan føje dig til samlinger, skal du give tilladelse til at blive vist i opdagelsesfunktioner under <link>Præferencer > Fortrolighed og rækkevidde</link>",
|
||||
"empty_column.community": "Den lokale tidslinje er tom. Skriv noget offentligt for at sætte tingene i gang!",
|
||||
"empty_column.direct": "Du har ikke nogen private omtaler endnu. Når du sender eller modtager en, vil den blive vist her.",
|
||||
"empty_column.disabled_feed": "Dette feed er blevet deaktiveret af dine serveradministratorer.",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Sammlung wird geladen …",
|
||||
"collections.detail.revoke_inclusion": "Mich entfernen",
|
||||
"collections.detail.sensitive_content": "Inhaltswarnung",
|
||||
"collections.detail.sensitive_note": "Diese Sammlung enthält Profile und Inhalte, die manche als anstößig empfinden.",
|
||||
"collections.detail.sensitive_note": "Die Beschreibung und Konten sind möglicherweise nicht für alle geeignet.",
|
||||
"collections.detail.share": "Sammlung teilen",
|
||||
"collections.detail.you_are_in_this_collection": "Du bist ein Teil dieser Sammlung",
|
||||
"collections.edit_details": "Details bearbeiten",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Du hast die Höchstzahl an Konten hinzugefügt",
|
||||
"collections.sensitive": "Inhaltswarnung",
|
||||
"collections.share_short": "Teilen",
|
||||
"collections.sort_alphabetical": "Alphabetisch",
|
||||
"collections.sort_by": "Sortierung:",
|
||||
"collections.sort_date_added": "Datum des Hinzufügens",
|
||||
"collections.sort_last_active": "Neueste Aktivität",
|
||||
"collections.sort_most_followers": "Followerzahl",
|
||||
"collections.suggestions.can_not_add": "Kann nicht hinzugefügt werden",
|
||||
"collections.suggestions.can_not_add_desc": "Diese Konten möchten möglicherweise nicht entdeckt werden oder deren Server unterstützt noch keine Sammlungen.",
|
||||
"collections.suggestions.must_follow": "Profil muss gefolgt werden",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Du hast bisher keine Profile blockiert.",
|
||||
"empty_column.bookmarked_statuses": "Du hast bisher keine Beiträge als Lesezeichen abgelegt. Sobald du einen Beitrag als Lesezeichen speicherst, wird er hier erscheinen.",
|
||||
"empty_column.collections.featured_in": "Du wurdest noch keiner Sammlung hinzugefügt.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Damit du zu Sammlungen hinzugefügt werden kannst, muss „Mich beim Entdecken berücksichtigen“ unter <link>Einstellungen > Datenschutz und Reichweite</link> aktiviert werden",
|
||||
"empty_column.community": "Die lokale Timeline ist leer. Schreibe einen öffentlichen Beitrag, um den Stein ins Rollen zu bringen!",
|
||||
"empty_column.direct": "Du hast noch keine privaten Erwähnungen. Sobald du eine sendest oder erhältst, wird sie hier erscheinen.",
|
||||
"empty_column.disabled_feed": "Diesen Feed haben deine Server-Administrator*innen deaktiviert.",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Γίνεται φόρτωση της συλλογής…",
|
||||
"collections.detail.revoke_inclusion": "Αφαίρεσε με",
|
||||
"collections.detail.sensitive_content": "Ευαίσθητο περιεχόμενο",
|
||||
"collections.detail.sensitive_note": "Αυτή η συλλογή περιέχει λογαριασμούς και περιεχόμενο που μπορεί να είναι ευαίσθητα σε ορισμένους χρήστες.",
|
||||
"collections.detail.sensitive_note": "Η περιγραφή και οι λογαριασμοί μπορεί να μην είναι κατάλληλα για όλους τους θεατές.",
|
||||
"collections.detail.share": "Κοινοποιήστε αυτήν τη συλλογή",
|
||||
"collections.detail.you_are_in_this_collection": "Είστε αναδεδειγμένοι σε αυτήν τη συλλογή",
|
||||
"collections.edit_details": "Επεξεργασία λεπτομερειών",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Έχετε προσθέσει τον μέγιστο αριθμό λογαριασμών",
|
||||
"collections.sensitive": "Ευαίσθητο",
|
||||
"collections.share_short": "Κοινοποίηση",
|
||||
"collections.sort_alphabetical": "Αλφαβητικά",
|
||||
"collections.sort_by": "Ταξινόμηση κατά:",
|
||||
"collections.sort_date_added": "Ημερομηνία προσθήκης",
|
||||
"collections.sort_last_active": "Τελευταία ενεργός",
|
||||
"collections.sort_most_followers": "Περισσότεροι ακόλουθοι",
|
||||
"collections.suggestions.can_not_add": "Δεν μπορεί να προστεθεί",
|
||||
"collections.suggestions.can_not_add_desc": "Αυτοί οι λογαριασμοί μπορεί να έχουν εξαιρεθεί από την ανακάλυψη, ή μπορεί να είναι σε έναν διακομιστή που δεν υποστηρίζει συλλογές.",
|
||||
"collections.suggestions.must_follow": "Πρέπει να τον ακολουθήσετε πρώτα",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Δεν έχεις αποκλείσει κανέναν χρήστη ακόμη.",
|
||||
"empty_column.bookmarked_statuses": "Δεν έχεις καμία ανάρτηση με σελιδοδείκτη ακόμη. Μόλις βάλεις κάποιον, θα εμφανιστεί εδώ.",
|
||||
"empty_column.collections.featured_in": "Δεν έχετε προστεθεί ακόμη σε καμία συλλογή.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Προκειμένου ο κόσμος να σας προσθέσει σε συλλογές, πρέπει να επιτρέψετε την ανάδειξή σας σε εμπειρίες ανακάλυψης από τις <link>Προτιμήσεις > Ιδιωτικότητα και προσιτότητα</link>",
|
||||
"empty_column.community": "Η τοπική ροή είναι κενή. Γράψε κάτι δημόσια για να αρχίσει να κυλά η μπάλα!",
|
||||
"empty_column.direct": "Δεν έχεις καμία ιδιωτική επισήμανση ακόμη. Όταν στείλεις ή λάβεις μία, θα εμφανιστεί εδώ.",
|
||||
"empty_column.disabled_feed": "Αυτή η ροή έχει απενεργοποιηθεί από τους διαχειριστές του διακομιστή σας.",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Loading collection…",
|
||||
"collections.detail.revoke_inclusion": "Remove me",
|
||||
"collections.detail.sensitive_content": "Sensitive content",
|
||||
"collections.detail.sensitive_note": "This collection contains accounts and content that may be sensitive to some users.",
|
||||
"collections.detail.share": "Share this collection",
|
||||
"collections.detail.you_are_in_this_collection": "You're featured in this collection",
|
||||
"collections.edit_details": "Edit details",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Cargando colección…",
|
||||
"collections.detail.revoke_inclusion": "Quitarme",
|
||||
"collections.detail.sensitive_content": "Contenido sensible",
|
||||
"collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que pueden ser sensibles a algunos usuarios.",
|
||||
"collections.detail.sensitive_note": "La descripción y las cuentas pueden no ser adecuadas para todos los espectadores.",
|
||||
"collections.detail.share": "Compartir esta colección",
|
||||
"collections.detail.you_are_in_this_collection": "Te destacaron en esta colección",
|
||||
"collections.edit_details": "Editar detalles",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Agregaste el número máximo de cuentas",
|
||||
"collections.sensitive": "Sensible",
|
||||
"collections.share_short": "Compartir",
|
||||
"collections.sort_alphabetical": "Alfabéticamente",
|
||||
"collections.sort_by": "Ordenar por:",
|
||||
"collections.sort_date_added": "Fecha de agregado",
|
||||
"collections.sort_last_active": "Última actividad",
|
||||
"collections.sort_most_followers": "Más seguidores",
|
||||
"collections.suggestions.can_not_add": "No se puede agregar",
|
||||
"collections.suggestions.can_not_add_desc": "Estas cuentas pueden haber optado por no ser descubiertas, o podrían estar en un servidor que no soporta colecciones.",
|
||||
"collections.suggestions.must_follow": "Deben seguirse primero",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Todavía no bloqueaste a ningún usuario.",
|
||||
"empty_column.bookmarked_statuses": "Todavía no tenés mensajes guardados en \"Marcadores\". Cuando guardés uno en \"Marcadores\", se mostrará acá.",
|
||||
"empty_column.collections.featured_in": "Todavía no te agregaron a ninguna colección.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Para que la gente pueda agregarte a colecciones, tenés que permitir que te destacen en las experiencias de descubrimiento en <link>Configuración > Privacidad y alcance</link>",
|
||||
"empty_column.community": "La línea temporal local está vacía. ¡Escribí algo en modo público para que se empiece a correr la bola!",
|
||||
"empty_column.direct": "Todavía no tenés ninguna mención privada. Cuando enviés o recibás una, se mostrará acá.",
|
||||
"empty_column.disabled_feed": "Esta línea temporal fue deshabilitada por los administradores de tu servidor.",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Cargando colección…",
|
||||
"collections.detail.revoke_inclusion": "Excluirme",
|
||||
"collections.detail.sensitive_content": "Contenido sensible",
|
||||
"collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que pueden resultar sensibles para algunos usuarios.",
|
||||
"collections.detail.sensitive_note": "La descripción y cuentas pueden no ser adecuadas para todas las personas.",
|
||||
"collections.detail.share": "Compartir esta colección",
|
||||
"collections.detail.you_are_in_this_collection": "Apareces en esta colección",
|
||||
"collections.edit_details": "Editar detalles",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas",
|
||||
"collections.sensitive": "Sensible",
|
||||
"collections.share_short": "Compartir",
|
||||
"collections.sort_alphabetical": "Alfabético",
|
||||
"collections.sort_by": "Orden:",
|
||||
"collections.sort_date_added": "Añadido a fecha",
|
||||
"collections.sort_last_active": "Última actividad",
|
||||
"collections.sort_most_followers": "Más seguidores",
|
||||
"collections.suggestions.can_not_add": "No puede ser añadida",
|
||||
"collections.suggestions.can_not_add_desc": "Es posible que estas cuentas hayan optado por no ser descubiertas, o que se encuentren en un servidor que no soporta colecciones.",
|
||||
"collections.suggestions.must_follow": "Primero tienes que seguirla",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
|
||||
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
|
||||
"empty_column.collections.featured_in": "Aún no te han añadido a ninguna colección.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Para que la gente pueda añadirte a colecciones, debes permitir ser destacado en algoritmos de descubrimiento desde <link>Preferencias > Privacidad y alcance</link>",
|
||||
"empty_column.community": "La cronología local está vacía. ¡Escribe algo públicamente para ponerla en marcha!",
|
||||
"empty_column.direct": "Aún no tienes ninguna mención privada. Cuando envíes o recibas una, aparecerá aquí.",
|
||||
"empty_column.disabled_feed": "Esta cronología fue desactivada por los administradores de tu servidor.",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Cargando colección…",
|
||||
"collections.detail.revoke_inclusion": "Sácame de aquí",
|
||||
"collections.detail.sensitive_content": "Contenido sensible",
|
||||
"collections.detail.sensitive_note": "Esta colección contiene cuentas y contenido que puede ser sensible para algunos usuarios.",
|
||||
"collections.detail.sensitive_note": "La descripción y cuentas pueden no ser adecuadas para todas las personas.",
|
||||
"collections.detail.share": "Compartir esta colección",
|
||||
"collections.detail.you_are_in_this_collection": "Apareces en esta colección",
|
||||
"collections.edit_details": "Editar detalles",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Has añadido el número máximo de cuentas",
|
||||
"collections.sensitive": "Sensible",
|
||||
"collections.share_short": "Compartir",
|
||||
"collections.sort_alphabetical": "Alfabético",
|
||||
"collections.sort_by": "Orden:",
|
||||
"collections.sort_date_added": "Añadido a fecha",
|
||||
"collections.sort_last_active": "Última actividad",
|
||||
"collections.sort_most_followers": "Más seguidores",
|
||||
"collections.suggestions.can_not_add": "No puede ser añadida",
|
||||
"collections.suggestions.can_not_add_desc": "Estas cuentas pueden haber optado por no ser descubiertas, o podrían estar en un servidor que no soporta colecciones.",
|
||||
"collections.suggestions.must_follow": "Primero tienes que seguirla",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Aún no has bloqueado a ningún usuario.",
|
||||
"empty_column.bookmarked_statuses": "Aún no tienes ninguna publicación guardada como marcador. Cuando guardes una, se mostrará aquí.",
|
||||
"empty_column.collections.featured_in": "Aún no te han añadido a ninguna colección.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Para que la gente pueda añadirte a colecciones, debes permitir ser destacado en algoritmos de descubrimiento desde <link>Preferencias > Privacidad y alcance</link>",
|
||||
"empty_column.community": "La línea de tiempo local está vacía. ¡Escribe algo para empezar la fiesta!",
|
||||
"empty_column.direct": "Aún no tienes menciones privadas. Cuando envíes o recibas una, aparecerán aquí.",
|
||||
"empty_column.disabled_feed": "Esta cronología ha sido desactivada por los administradores del servidor.",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Kogumiku laadimine…",
|
||||
"collections.detail.revoke_inclusion": "Eemalda mind",
|
||||
"collections.detail.sensitive_content": "Tundlik sisu",
|
||||
"collections.detail.sensitive_note": "Selles kogumikus on kontosid ja sisu, mis võib mõne inimese jaoks olla tundlik.",
|
||||
"collections.detail.sensitive_note": "Kirjeldus ja kontod ei pruugi kõigi vaatajate jaoks sobivad olla.",
|
||||
"collections.detail.share": "Jaga seda kogumikku",
|
||||
"collections.detail.you_are_in_this_collection": "Sa oled selles kogumikus esile tõstetud",
|
||||
"collections.edit_details": "Muuda üksikasju",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Oled lisanud maksimumarv kontosid",
|
||||
"collections.sensitive": "Tundlik",
|
||||
"collections.share_short": "Jaga",
|
||||
"collections.sort_alphabetical": "Tähestikuline",
|
||||
"collections.sort_by": "Sortimine:",
|
||||
"collections.sort_date_added": "Lisamisaeg",
|
||||
"collections.sort_last_active": "Viimati aktiivne",
|
||||
"collections.sort_most_followers": "Enim jälgijaid",
|
||||
"collections.suggestions.can_not_add": "Ei saa lisada",
|
||||
"collections.suggestions.can_not_add_desc": "Need kontod võivad olla loobunud avalikustamisest või asuvad serveris, mis ei toeta kogumikke.",
|
||||
"collections.suggestions.must_follow": "Kõigepealt peab jälgima",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "بار کردن مجموعه…",
|
||||
"collections.detail.revoke_inclusion": "حذفم کن",
|
||||
"collections.detail.sensitive_content": "محتوای حسّاس",
|
||||
"collections.detail.sensitive_note": "این مجموعه شامل حسابها و محتواییست که ممکن است برای برخی کاربران حسّاس باشند.",
|
||||
"collections.detail.share": "همرسانی این مجموعه",
|
||||
"collections.detail.you_are_in_this_collection": "در این مجموعه معرّفی شدهاید",
|
||||
"collections.edit_details": "ویرایش جزییات",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Ladataan kokoelmaa…",
|
||||
"collections.detail.revoke_inclusion": "Poista minut",
|
||||
"collections.detail.sensitive_content": "Arkaluonteista sisältöä",
|
||||
"collections.detail.sensitive_note": "Tämä kokoelma sisältää tilejä ja sisältöä, jotka saattavat olla arkaluonteisia joillekin käyttäjille.",
|
||||
"collections.detail.sensitive_note": "Kuvaus ja tilit eivät välttämättä sovellu kaikille.",
|
||||
"collections.detail.share": "Jaa tämä kokoelma",
|
||||
"collections.detail.you_are_in_this_collection": "Esiinnyt tässä kokoelmassa",
|
||||
"collections.edit_details": "Muokkaa tietoja",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Olet lisännyt enimmäismäärän tilejä",
|
||||
"collections.sensitive": "Arkaluonteinen",
|
||||
"collections.share_short": "Jaa",
|
||||
"collections.sort_alphabetical": "Aakkosjärjestys",
|
||||
"collections.sort_by": "Järjestys:",
|
||||
"collections.sort_date_added": "Lisäyspäivämäärä",
|
||||
"collections.sort_last_active": "Viimeksi aktiivisena",
|
||||
"collections.sort_most_followers": "Eniten seuraajia",
|
||||
"collections.suggestions.can_not_add": "Ei voi lisätä",
|
||||
"collections.suggestions.can_not_add_desc": "Nämä tilit ovat ehkä jättäytyneet löydettävyyden ulkopuolelle, tai ne saattavat olla palvelimella, joka ei tue kokoelmia.",
|
||||
"collections.suggestions.must_follow": "Täytyy ensin seurata",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Et ole vielä estänyt käyttäjiä.",
|
||||
"empty_column.bookmarked_statuses": "Et ole vielä lisännyt julkaisuja kirjanmerkkeihisi. Kun lisäät yhden, se näkyy tässä.",
|
||||
"empty_column.collections.featured_in": "Sinua ei ole vielä lisätty mihinkään kokoelmaan.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Jotta sinut voi lisätä kokoelmiin, esittely löydettävyyskokemuksissa on sallittava kohdassa <link>Asetukset > Yksityisyys ja tavoittavuus</link>",
|
||||
"empty_column.community": "Paikallinen aikajana on tyhjä. Kirjoita jotain julkista, niin homma lähtee käyntiin!",
|
||||
"empty_column.direct": "Yksityismainintoja ei vielä ole. Jos lähetät tai sinulle lähetetään sellaisia, näet ne täällä.",
|
||||
"empty_column.disabled_feed": "Palvelimen ylläpito on poistanut käytöstä tämän syötteen.",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Chargement de la collection…",
|
||||
"collections.detail.revoke_inclusion": "Me retirer",
|
||||
"collections.detail.sensitive_content": "Contenu sensible",
|
||||
"collections.detail.sensitive_note": "Cette collection contient des comptes et du contenu qui peut être sensibles.",
|
||||
"collections.detail.share": "Partager la collection",
|
||||
"collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection",
|
||||
"collections.edit_details": "Modifier les détails",
|
||||
@ -636,6 +635,7 @@
|
||||
"empty_column.blocks": "Vous n’avez bloqué aucun compte pour le moment.",
|
||||
"empty_column.bookmarked_statuses": "Vous n'avez pas de publications parmi vos signets. Lorsque vous en ajouterez une, elle apparaîtra ici.",
|
||||
"empty_column.collections.featured_in": "Vous n'avez pas encore été ajouté·e à une collection.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Afin que l'on puisse vous ajouter à des collections, vous devez autoriser d'apparaître dans les expériences de découverte depuis <link>Vie privée et visibilité</link>",
|
||||
"empty_column.community": "Le fil local est vide. Écrivez donc quelque chose pour le remplir!",
|
||||
"empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en envoyez ou en recevez, elles apparaîtront ici.",
|
||||
"empty_column.disabled_feed": "Ce flux a été désactivé par les administrateur·rice·s de votre serveur.",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Chargement de la collection…",
|
||||
"collections.detail.revoke_inclusion": "Me retirer",
|
||||
"collections.detail.sensitive_content": "Contenu sensible",
|
||||
"collections.detail.sensitive_note": "Cette collection contient des comptes et du contenu qui peut être sensibles.",
|
||||
"collections.detail.share": "Partager la collection",
|
||||
"collections.detail.you_are_in_this_collection": "Vous faites partie de cette collection",
|
||||
"collections.edit_details": "Modifier les détails",
|
||||
@ -636,6 +635,7 @@
|
||||
"empty_column.blocks": "Vous n’avez bloqué aucun compte pour le moment.",
|
||||
"empty_column.bookmarked_statuses": "Vous n'avez pas de message en marque-page. Lorsque vous en ajouterez un, il apparaîtra ici.",
|
||||
"empty_column.collections.featured_in": "Vous n'avez pas encore été ajouté·e à une collection.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Afin que l'on puisse vous ajouter à des collections, vous devez autoriser d'apparaître dans les expériences de découverte depuis <link>Vie privée et visibilité</link>",
|
||||
"empty_column.community": "Le fil public local est vide. Écrivez donc quelque chose pour le remplir !",
|
||||
"empty_column.direct": "Vous n'avez pas encore de mentions privées. Quand vous en enverrez ou recevrez, elles apparaîtront ici.",
|
||||
"empty_column.disabled_feed": "Ce flux a été désactivé par les administrateur·rice·s de votre serveur.",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Ag lódáil an bhailiúcháin…",
|
||||
"collections.detail.revoke_inclusion": "Bain mé",
|
||||
"collections.detail.sensitive_content": "Ábhar íogair",
|
||||
"collections.detail.sensitive_note": "Tá cuntais agus ábhar sa bhailiúchán seo a d'fhéadfadh a bheith íogair do roinnt úsáideoirí.",
|
||||
"collections.detail.share": "Comhroinn an bailiúchán seo",
|
||||
"collections.detail.you_are_in_this_collection": "Tá tú le feiceáil sa bhailiúchán seo",
|
||||
"collections.edit_details": "Cuir sonraí in eagar",
|
||||
|
||||
@ -388,7 +388,6 @@
|
||||
"collections.detail.loading": "A’ luchdadh a’ chruinneachaidh…",
|
||||
"collections.detail.revoke_inclusion": "Thoir air falbh mi",
|
||||
"collections.detail.sensitive_content": "Susbaint fhrionasach",
|
||||
"collections.detail.sensitive_note": "Tha cunntasan is susbaint sa chruinneachadh seo a dh’fhaodadh a bhith frionasach do chuid.",
|
||||
"collections.detail.share": "Co-roinn an cruinneachadh seo",
|
||||
"collections.detail.you_are_in_this_collection": "Thathar do bhrosnachadh sa chruinneachadh seo",
|
||||
"collections.edit_details": "Deasaich am fiosrachadh",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Cargando colección…",
|
||||
"collections.detail.revoke_inclusion": "Quítame de aí",
|
||||
"collections.detail.sensitive_content": "Contido sensible",
|
||||
"collections.detail.sensitive_note": "Esta colección presenta contas e contido que poderían ser sensibles para algunhas persoas.",
|
||||
"collections.detail.sensitive_note": "A descrición e contas poderían non ser axeitadas para todas as persoas.",
|
||||
"collections.detail.share": "Compartir esta colección",
|
||||
"collections.detail.you_are_in_this_collection": "Engadíronte a esta colección",
|
||||
"collections.edit_details": "Editar detalles",
|
||||
@ -636,6 +636,7 @@
|
||||
"empty_column.blocks": "Aínda non bloqueaches a ningún usuaria.",
|
||||
"empty_column.bookmarked_statuses": "Aínda non marcaches ningunha publicación. Cando o fagas, aparecerán aquí.",
|
||||
"empty_column.collections.featured_in": "Non te engadiron a ningunha colección.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Para que outras persoas poidan engadirte ás súas coleccións ter que conceder permiso para descubrimento da conta en <link>Preferencias > Privacidade e alcance</link>",
|
||||
"empty_column.community": "A cronoloxía local está baleira. Escribe algo de xeito público para espallalo!",
|
||||
"empty_column.direct": "Aínda non tes mencións privadas. Cando envíes ou recibas unha, aparecerá aquí.",
|
||||
"empty_column.disabled_feed": "A administración do teu servidor desactivou esta canle.",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "טוען אוסף…",
|
||||
"collections.detail.revoke_inclusion": "הסירוני",
|
||||
"collections.detail.sensitive_content": "תוכן רגיש",
|
||||
"collections.detail.sensitive_note": "האוסף מכיל חשבונות ותכנים שאולי יחשבו רגישים לחלק מהמשתמשים.",
|
||||
"collections.detail.share": "שיתוף אוסף",
|
||||
"collections.detail.you_are_in_this_collection": "אתם מופיעים באוסף זה",
|
||||
"collections.edit_details": "עריכת פרטים",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Gyűjtemény betöltése…",
|
||||
"collections.detail.revoke_inclusion": "Saját magam eltávolítása",
|
||||
"collections.detail.sensitive_content": "Kényes tartalom",
|
||||
"collections.detail.sensitive_note": "Ebben a gyűjteményben egyesek számára érzékeny fiókok és tartalmak vannak.",
|
||||
"collections.detail.share": "Gyűjtemény megosztása",
|
||||
"collections.detail.you_are_in_this_collection": "Kiemeltek téged ebben a gyűjteményhez",
|
||||
"collections.edit_details": "Részletek szerkesztése",
|
||||
@ -636,6 +635,7 @@
|
||||
"empty_column.blocks": "Még senkit sem tiltottál le.",
|
||||
"empty_column.bookmarked_statuses": "Még nincs egyetlen könyvjelzőzött bejegyzésed sem. Ha könyvjelzőzöl egyet, itt fog megjelenni.",
|
||||
"empty_column.collections.featured_in": "Még nem adtak hozzá egyetlen gyűjteményhez sem.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Hogy mások hozzáadhassanak gyűjteményekhez, engedélyezned kell a kiemelést a felfedezési élményekben a <link>Beállítások > Adatvédelem és elérés</link> alatt",
|
||||
"empty_column.community": "A helyi idővonal üres. Tégy közzé valamit nyilvánosan, hogy elindítsd az eseményeket!",
|
||||
"empty_column.direct": "Még nincs egy személyes említésed sem. Küldéskor vagy fogadáskor itt fognak megjelenni.",
|
||||
"empty_column.disabled_feed": "A kiszolgálód rendszergazdái letiltották ezt a hírfolyamot.",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Hleð inn safni…",
|
||||
"collections.detail.revoke_inclusion": "Fjarlægja mig",
|
||||
"collections.detail.sensitive_content": "Viðkvæmt efni",
|
||||
"collections.detail.sensitive_note": "Þetta safn inniheldur aðganga og efni sem sumir notendur gætu verið viðkvæmir fyrir.",
|
||||
"collections.detail.share": "Deila þessu safni",
|
||||
"collections.detail.you_are_in_this_collection": "Þú kemur fyrir í þessu safni",
|
||||
"collections.edit_details": "Breyta ítarupplýsingum",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Caricamento della collezione…",
|
||||
"collections.detail.revoke_inclusion": "Rimuovimi",
|
||||
"collections.detail.sensitive_content": "Contenuto sensibile",
|
||||
"collections.detail.sensitive_note": "Questa collezione contiene account e contenuto che potrebbero essere sensibili ad alcuni utenti.",
|
||||
"collections.detail.sensitive_note": "La descrizione e gli account potrebbero non essere adatti a tutti i tipi di pubblico.",
|
||||
"collections.detail.share": "Condividi questa collezione",
|
||||
"collections.detail.you_are_in_this_collection": "Sei presente in questa collezione",
|
||||
"collections.edit_details": "Modifica i dettagli",
|
||||
@ -636,6 +636,7 @@
|
||||
"empty_column.blocks": "Non hai ancora bloccato alcun utente.",
|
||||
"empty_column.bookmarked_statuses": "Non hai ancora salvato nei segnalibri alcun post. Quando lo farai, apparirà qui.",
|
||||
"empty_column.collections.featured_in": "Non sei ancora stato/a aggiunto/a ad alcuna collezione.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Affinché le persone possano aggiungerti alle collezioni, è necessario consentire che il profilo sia visibile nelle esperienze di scoperta tramite <link>Preferenze > Privacy e visibilità</link>",
|
||||
"empty_column.community": "La cronologia locale è vuota. Scrivi qualcosa pubblicamente per dare inizio alla festa!",
|
||||
"empty_column.direct": "Non hai ancora alcuna menzione privata. Quando ne invierai o riceverai una, apparirà qui.",
|
||||
"empty_column.disabled_feed": "Questo feed è stato disabilitato dagli amministratori del tuo server.",
|
||||
@ -905,7 +906,7 @@
|
||||
"navigation_bar.mutes": "Utenti silenziati",
|
||||
"navigation_bar.opened_in_classic_interface": "Post, account e altre pagine specifiche sono aperti per impostazione predefinita nella classica interfaccia web.",
|
||||
"navigation_bar.preferences": "Preferenze",
|
||||
"navigation_bar.privacy_and_reach": "Privacy e copertura",
|
||||
"navigation_bar.privacy_and_reach": "Privacy e visibilità",
|
||||
"navigation_bar.search": "Cerca",
|
||||
"navigation_bar.search_trends": "Cerca / In tendenza",
|
||||
"navigation_panel.collapse_followed_tags": "Comprimi il menù degli hashtag seguiti",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "載入收藏……",
|
||||
"collections.detail.revoke_inclusion": "Kā我suá掉",
|
||||
"collections.detail.sensitive_content": "敏感ê內容",
|
||||
"collections.detail.sensitive_note": "Tsit ê收藏包含對一寡用者敏感ê口座kap內容。",
|
||||
"collections.detail.share": "分享tsit ê收藏",
|
||||
"collections.detail.you_are_in_this_collection": "Lí已經hőng加kàu tsit ê收藏",
|
||||
"collections.edit_details": "編輯詳細",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Verzameling laden…",
|
||||
"collections.detail.revoke_inclusion": "Verwijder mij",
|
||||
"collections.detail.sensitive_content": "Gevoelige inhoud",
|
||||
"collections.detail.sensitive_note": "Deze verzameling bevat accounts en inhoud die mogelijk gevoelig zijn voor sommige gebruikers.",
|
||||
"collections.detail.sensitive_note": "De omschrijving en accounts zijn mogelijk niet voor iedereen geschikt.",
|
||||
"collections.detail.share": "Deze verzameling delen",
|
||||
"collections.detail.you_are_in_this_collection": "Je wordt in deze verzameling uitgelicht",
|
||||
"collections.edit_details": "Gegevens bewerken",
|
||||
@ -636,6 +636,7 @@
|
||||
"empty_column.blocks": "Je hebt nog geen gebruikers geblokkeerd.",
|
||||
"empty_column.bookmarked_statuses": "Jij hebt nog geen berichten aan je bladwijzers toegevoegd. Wanneer je er een aan jouw bladwijzers toevoegt, valt deze hier te zien.",
|
||||
"empty_column.collections.featured_in": "Je bent aan nog geen enkele verzameling toegevoegd.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Om ervoor te zorgen dat mensen je aan verzamelingen kunnen toevoegen, moet je jouw account en berichten laten uitlichten door Mastodon onder <link>Instellingen > Privacy en bereik</link>",
|
||||
"empty_column.community": "De lokale tijdlijn is nog leeg. Plaats een openbaar bericht om de spits af te bijten!",
|
||||
"empty_column.direct": "Je hebt nog geen privéberichten. Wanneer je er een verstuurt of ontvangt, komen deze hier te staan.",
|
||||
"empty_column.disabled_feed": "Deze tijdlijn is uitgeschakeld door je serverbeheerders.",
|
||||
|
||||
@ -384,7 +384,6 @@
|
||||
"collections.detail.loading": "Lastar inn samling…",
|
||||
"collections.detail.revoke_inclusion": "Fjern meg",
|
||||
"collections.detail.sensitive_content": "Ømtolig innhald",
|
||||
"collections.detail.sensitive_note": "Denne samlinga inneheld kontoar og innhald som kan vera ømtolige for nokre menneske.",
|
||||
"collections.detail.share": "Del denne samlinga",
|
||||
"collections.detail.you_are_in_this_collection": "Du er framheva i denne samlinga",
|
||||
"collections.edit_details": "Rediger detaljar",
|
||||
|
||||
@ -17,7 +17,7 @@
|
||||
"account.activity": "Atividade",
|
||||
"account.add_note": "Adicionar nota pessoal",
|
||||
"account.add_or_remove_from_list": "Adicionar ou remover de listas",
|
||||
"account.badges.admin": "Administrador",
|
||||
"account.badges.admin": "Admin",
|
||||
"account.badges.blocked": "Bloqueado",
|
||||
"account.badges.bot": "Robô",
|
||||
"account.badges.domain_blocked": "Domínio bloqueado",
|
||||
@ -32,7 +32,7 @@
|
||||
"account.copy": "Copiar link do perfil",
|
||||
"account.direct": "Mencione em privado @{name}",
|
||||
"account.disable_notifications": "Cancelar notificações de @{name}",
|
||||
"account.edit_note": "Editar a nota pessoal",
|
||||
"account.edit_note": "Editar nota pessoal",
|
||||
"account.edit_profile": "Editar perfil",
|
||||
"account.edit_profile_short": "Editar",
|
||||
"account.enable_notifications": "Notificar quando @{name} publicar",
|
||||
@ -44,13 +44,13 @@
|
||||
"account.featured.accounts": "Perfis",
|
||||
"account.featured.collections": "Coleções",
|
||||
"account.featured.new_collection": "Nova coleção",
|
||||
"account.field_overflow": "Mostrar todo conteúdo",
|
||||
"account.filters.all": "Todas atividades",
|
||||
"account.filters.boosts_toggle": "Mostrar impulsos",
|
||||
"account.field_overflow": "Exibir conteúdo inteiro",
|
||||
"account.filters.all": "Toda atividade",
|
||||
"account.filters.boosts_toggle": "Exibir impulsos",
|
||||
"account.filters.posts_boosts": "Publicações e impulsos",
|
||||
"account.filters.posts_only": "Publicações",
|
||||
"account.filters.posts_replies": "Publicações e respostas",
|
||||
"account.filters.replies_toggle": "Mostrar respostas",
|
||||
"account.filters.replies_toggle": "Exibir respostas",
|
||||
"account.follow": "Seguir",
|
||||
"account.follow_back": "Seguir de volta",
|
||||
"account.follow_back_short": "Seguir de volta",
|
||||
@ -70,17 +70,17 @@
|
||||
"account.hide_reblogs": "Ocultar impulsos de @{name}",
|
||||
"account.in_memoriam": "In Memoriam.",
|
||||
"account.join_modal.day": "Dia",
|
||||
"account.join_modal.me": "Você uniu-se a {server} em",
|
||||
"account.join_modal.me_anniversary": "Feliz Fediversário! Você uniu-se a {server} em",
|
||||
"account.join_modal.me_today": "É o seu primeiro dia em {server}!",
|
||||
"account.join_modal.other": "{name} uniu-se a {server} em",
|
||||
"account.join_modal.me": "Você juntou-se à {server} em",
|
||||
"account.join_modal.me_anniversary": "Feliz Fediversário! Você juntou-se à {server} em",
|
||||
"account.join_modal.me_today": "É seu primeiro dia em {server}!",
|
||||
"account.join_modal.other": "{name} juntou-se à {server} em",
|
||||
"account.join_modal.other_today": "Este é o primeiro dia de {name} em {server}!",
|
||||
"account.join_modal.share.celebrate": "Compartilhe uma postagem comemorativa",
|
||||
"account.join_modal.share.intro": "Compartilhe uma postagem de introdução",
|
||||
"account.join_modal.share.welcome": "Compartilhe uma postagem de boas-vindas",
|
||||
"account.join_modal.share.celebrate": "Compartilhar publicação comemorativa",
|
||||
"account.join_modal.share.intro": "Compartilhar publicação de introdução",
|
||||
"account.join_modal.share.welcome": "Compartilhar publicação de boas-vindas",
|
||||
"account.join_modal.years": "{number, plural, one {ano} other {anos}}",
|
||||
"account.joined_short": "Entrou",
|
||||
"account.languages": "Mudar idiomas inscritos",
|
||||
"account.languages": "Alterar idiomas inscritos",
|
||||
"account.last_active": "Última atividade",
|
||||
"account.link_verified_on": "A propriedade deste link foi verificada em {date}",
|
||||
"account.locked_info": "Trancado. Seguir requer aprovação manual do perfil.",
|
||||
@ -91,16 +91,16 @@
|
||||
"account.menu.block_domain": "Bloquear {domain}",
|
||||
"account.menu.copied": "Link da conta copiado para área de transferência",
|
||||
"account.menu.copy": "Copiar link",
|
||||
"account.menu.direct": "Mencionar em privado",
|
||||
"account.menu.hide_reblogs": "Ocultar impulsos na linha do tempo",
|
||||
"account.menu.direct": "Mencionar privadamente",
|
||||
"account.menu.hide_reblogs": "Ocultar impulsos na timeline",
|
||||
"account.menu.mention": "Mencionar",
|
||||
"account.menu.mute": "Silenciar conta",
|
||||
"account.menu.note.description": "Visível apenas para você",
|
||||
"account.menu.open_original_page": "Veja em {domain}",
|
||||
"account.menu.note.description": "Visível somente para você",
|
||||
"account.menu.open_original_page": "Ver em {domain}",
|
||||
"account.menu.remove_follower": "Remover seguidor",
|
||||
"account.menu.report": "Denunciar conta",
|
||||
"account.menu.share": "Compartilhar…",
|
||||
"account.menu.show_reblogs": "Mostrar impulsos na linha do tempo",
|
||||
"account.menu.show_reblogs": "Exibir impulsos na timeline",
|
||||
"account.menu.unblock": "Desbloquear conta",
|
||||
"account.menu.unblock_domain": "Desbloquear {domain}",
|
||||
"account.menu.unmute": "Deixar de silenciar a conta",
|
||||
@ -112,21 +112,21 @@
|
||||
"account.mutual": "Vocês se seguem",
|
||||
"account.name.copy": "Copiar usuário",
|
||||
"account.name.help.domain": "{domain} é o servidor que hospeda o perfil e publicações do usuário.",
|
||||
"account.name.help.domain_self": "{domain} é o seu servidor que hospeda seu perfil e publicações.",
|
||||
"account.name.help.footer": "Assim como pode enviar e-mails para pessoas usando diferentes provedores de e-mail, você pode interagir com pessoas em outros servidor do Mastodon, e com qualquer um em outros apps da Fediverse.",
|
||||
"account.name.help.header": "Um identificador é como um endereço de endereço eletrônico",
|
||||
"account.name.help.username": "{username} é o nome de usuário da conta neste servidor. Alguém em outro servidor pode ter o mesmo nome de usuário.",
|
||||
"account.name.help.username_self": "{username} é seu nome de usuário neste servidor. Alguém em outro servidor pode ter o mesmo nome de usuário.",
|
||||
"account.name_info": "O que isto significa?",
|
||||
"account.name.help.domain_self": "{domain} é o servidor que hospeda seu perfil e suas publicações.",
|
||||
"account.name.help.footer": "Assim como você pode enviar e-mails para outras pessoas usando endereços de e-mail diferentes, você pode interagir com usuários em outros servidores do Mastodon, e com qualquer um dos outros aplicativos do Fediverso.",
|
||||
"account.name.help.header": "Um nome de usuário é como um e-mail",
|
||||
"account.name.help.username": "{username} é o usuário desta conta em seu próprio servidor. Alguém do mesmo servidor talvez possua o mesmo usuário.",
|
||||
"account.name.help.username_self": "{username} é seu usuário neste servidor. Alguém em outro servidor talvez possua o mesmo usuário.",
|
||||
"account.name_info": "O que isso quer dizer?",
|
||||
"account.no_bio": "Nenhuma descrição fornecida.",
|
||||
"account.node_modal.callout": "Notas pessoais são visíveis apenas para você.",
|
||||
"account.node_modal.edit_title": "Editar a nota pessoal",
|
||||
"account.node_modal.error_unknown": "Não foi possível salvar a nota",
|
||||
"account.node_modal.callout": "Notas pessoais são visíveis somente para você.",
|
||||
"account.node_modal.edit_title": "Editar nota pessoal",
|
||||
"account.node_modal.error_unknown": "Não foi possível salvar nota",
|
||||
"account.node_modal.field_label": "Nota Pessoal",
|
||||
"account.node_modal.save": "Guardar",
|
||||
"account.node_modal.save": "Salvar",
|
||||
"account.node_modal.title": "Adicionar nota pessoal",
|
||||
"account.note.edit_button": "Editar",
|
||||
"account.note.title": "Nota pessoal (visível apenas para você)",
|
||||
"account.note.title": "Nota pessoal (visível só para você)",
|
||||
"account.open_original_page": "Abrir a página original",
|
||||
"account.pending": "Pendente",
|
||||
"account.posts": "Publicações",
|
||||
@ -137,7 +137,7 @@
|
||||
"account.show_reblogs": "Mostrar impulsos de @{name}",
|
||||
"account.statuses_counter": "{count, plural, one {{counter} publicação} other {{counter} publicações}}",
|
||||
"account.timeline.pinned": "Fixado",
|
||||
"account.timeline.pinned.view_all": "Ver todas as publicações fixadas",
|
||||
"account.timeline.pinned.view_all": "Ver publicações fixadas",
|
||||
"account.unblock": "Desbloquear @{name}",
|
||||
"account.unblock_domain": "Desbloquear domínio {domain}",
|
||||
"account.unblock_domain_short": "Desbloquear",
|
||||
@ -147,40 +147,40 @@
|
||||
"account.unmute": "Dessilenciar @{name}",
|
||||
"account.unmute_notifications_short": "Ativar som de notificações",
|
||||
"account.unmute_short": "Desativar silêncio",
|
||||
"account_edit.advanced_settings.bot_hint": "Sinalizar a outros que a conta realiza principalmente ações automatizadas e pode não ser monitoriada",
|
||||
"account_edit.advanced_settings.bot_label": "Conta automatizada",
|
||||
"account_edit.advanced_settings.title": "Configurações avançadas",
|
||||
"account_edit.advanced_settings.bot_hint": "Alertar a todos que a conta realiza ações automáticas que talvez não sejam monitoradas",
|
||||
"account_edit.advanced_settings.bot_label": "Conta automática",
|
||||
"account_edit.advanced_settings.title": "Opções avançadas",
|
||||
"account_edit.bio.add_label": "Adicionar biografia",
|
||||
"account_edit.bio.edit_label": "Editar Biografia",
|
||||
"account_edit.bio.placeholder": "Insira uma breve introdução para ajudar as outras pessoas a te identificar.",
|
||||
"account_edit.bio.title": "Bio",
|
||||
"account_edit.bio.edit_label": "Editar biografia",
|
||||
"account_edit.bio.placeholder": "Escreva uma curta introdução para ajudar os outros a identificarem você.",
|
||||
"account_edit.bio.title": "Biografia",
|
||||
"account_edit.bio_modal.add_title": "Adicionar biografia",
|
||||
"account_edit.bio_modal.edit_title": "Editar biografia",
|
||||
"account_edit.column_button": "Feito",
|
||||
"account_edit.column_button": "Concluído",
|
||||
"account_edit.column_title": "Editar perfil",
|
||||
"account_edit.custom_fields.add_label": "Acrescentar campo",
|
||||
"account_edit.custom_fields.edit_label": "Editar campo",
|
||||
"account_edit.custom_fields.placeholder": "Insira seus pronomes, links externos ou qualquer coisa que queira compartilhar.",
|
||||
"account_edit.custom_fields.reorder_button": "Reordenar campos",
|
||||
"account_edit.custom_fields.tip_content": "Você pode facilmente dar credibilidade à sua conta Mastodon verificando os links para os seus sites.",
|
||||
"account_edit.custom_fields.add_label": "Novo espaço",
|
||||
"account_edit.custom_fields.edit_label": "Editar espaço",
|
||||
"account_edit.custom_fields.placeholder": "Adicione seus pronomes, links externos ou qualquer coisa que deseja compartilhar.",
|
||||
"account_edit.custom_fields.reorder_button": "Reordenar espaços",
|
||||
"account_edit.custom_fields.tip_content": "Você pode adicionar credibilidade facilmente a sua conta ao verificar qualquer link para seus sites.",
|
||||
"account_edit.custom_fields.tip_title": "Dica: Adicionando links verificados",
|
||||
"account_edit.custom_fields.title": "Campos personalizados",
|
||||
"account_edit.custom_fields.verified_hint": "Como adiciono um link verificado?",
|
||||
"account_edit.display_name.add_label": "Acrescentar nome de exibição",
|
||||
"account_edit.custom_fields.title": "Espaços personalizados",
|
||||
"account_edit.custom_fields.verified_hint": "Como adicionar um link verificado?",
|
||||
"account_edit.display_name.add_label": "Adicionar nome de exibição",
|
||||
"account_edit.display_name.edit_label": "Editar nome de exibição",
|
||||
"account_edit.display_name.placeholder": "Seu nome de exibição é a forma com que seu nome aparece em seu perfil e em suas linhas do tempo.",
|
||||
"account_edit.display_name.placeholder": "O nome de exibição é como seu nome aparece em seu perfil e em timelines.",
|
||||
"account_edit.display_name.title": "Nome de exibição",
|
||||
"account_edit.featured_hashtags.edit_label": "Acrescentar hashtags",
|
||||
"account_edit.featured_hashtags.placeholder": "Ajude outros a identificar e ter acesso rápido a seus tópicos favoritos.",
|
||||
"account_edit.featured_hashtags.title": "Hashtags em destaque",
|
||||
"account_edit.field_actions.delete": "Remover campo",
|
||||
"account_edit.field_actions.edit": "Editar campo",
|
||||
"account_edit.field_delete_modal.confirm": "Tem certeza que deseja excluir este campo personalizado? Esta ação não pode ser desfeita.",
|
||||
"account_edit.featured_hashtags.edit_label": "Adicionar tags",
|
||||
"account_edit.featured_hashtags.placeholder": "Ajude todos a identificarem, e acessarem rapidamente seus tópicos favoritos.",
|
||||
"account_edit.featured_hashtags.title": "Tags em destaque",
|
||||
"account_edit.field_actions.delete": "Remover espaço",
|
||||
"account_edit.field_actions.edit": "Editar espaço",
|
||||
"account_edit.field_delete_modal.confirm": "Deseja mesmo excluir este espaço? Esta ação não pode ser desfeita.",
|
||||
"account_edit.field_delete_modal.delete_button": "Excluir",
|
||||
"account_edit.field_delete_modal.title": "Excluir campo personalizado?",
|
||||
"account_edit.field_edit_modal.add_title": "Adicionar campo personalizado",
|
||||
"account_edit.field_delete_modal.title": "Remover espaço?",
|
||||
"account_edit.field_edit_modal.add_title": "Adicionar espaço",
|
||||
"account_edit.field_edit_modal.discard_confirm": "Descartar",
|
||||
"account_edit.field_edit_modal.discard_message": "Você possui alterações não salvas. Tem certeza de que deseja descartá-las?",
|
||||
"account_edit.field_edit_modal.discard_message": "Você possui alterações não salvas. Deseja mesmo descartá-las?",
|
||||
"account_edit.field_edit_modal.edit_title": "Editar campo personalizado",
|
||||
"account_edit.field_edit_modal.length_warning": "Limite de caracteres recomendados ultrapassado. Usuários em telefones podem não conseguir ver o espaço completo.",
|
||||
"account_edit.field_edit_modal.link_emoji_warning": "Recomendamos não utilizar emojis personalizados combinados com URLs. Campos personalizados contendo ambos serão exibidos apenas como texto em vez de link, para evitar confusão dos usuários.",
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Carregando coleção…",
|
||||
"collections.detail.revoke_inclusion": "Remover-me",
|
||||
"collections.detail.sensitive_content": "Conteúdo sensível",
|
||||
"collections.detail.sensitive_note": "Esta coleção contém contas e conteúdo que podem ser sensíveis a alguns usuários.",
|
||||
"collections.detail.sensitive_note": "A descrição e as contas talvez possam não ser adequadas para todos.",
|
||||
"collections.detail.share": "Compartilhar esta coleção",
|
||||
"collections.detail.you_are_in_this_collection": "Você aparece nesta coleção",
|
||||
"collections.edit_details": "Editar detalhes",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Você acrescentou o número máximo de contas",
|
||||
"collections.sensitive": "Sensível",
|
||||
"collections.share_short": "Compartilhar",
|
||||
"collections.sort_alphabetical": "Alfabética",
|
||||
"collections.sort_by": "Ordenar por:",
|
||||
"collections.sort_date_added": "Data adicionada",
|
||||
"collections.sort_last_active": "Última atividade",
|
||||
"collections.sort_most_followers": "Mais seguidores",
|
||||
"collections.suggestions.can_not_add": "Não pôde ser adicionado",
|
||||
"collections.suggestions.can_not_add_desc": "Estas contas podem ter optado para não serem exibidas na página de descobrir, ou podem estar em um servidor que não suporta coleções.",
|
||||
"collections.suggestions.must_follow": "Você deve seguir primeiro",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Nada aqui.",
|
||||
"empty_column.bookmarked_statuses": "Nada aqui. Quando você salvar uma publicação, ela aparecerá aqui.",
|
||||
"empty_column.collections.featured_in": "Você ainda não foi adicionado a nenhuma coleção.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Para as pessoas adicionarem você às coleções, você precisa permitir destaque de experiências de descoberta através de <link>Preferências > Privacidade e alcance</link>",
|
||||
"empty_column.community": "A linha local está vazia. Publique algo para começar!",
|
||||
"empty_column.direct": "Você ainda não tem mensagens privadas. Quando você enviar ou receber uma, será exibida aqui.",
|
||||
"empty_column.disabled_feed": "Este feed foi desativado pelos administradores de seu servidor.",
|
||||
|
||||
@ -373,7 +373,6 @@
|
||||
"collections.detail.loading": "A carregar a coleção…",
|
||||
"collections.detail.revoke_inclusion": "Remover-me",
|
||||
"collections.detail.sensitive_content": "Conteúdo sensível",
|
||||
"collections.detail.sensitive_note": "Esta coleção contém contas e conteúdos que podem ser sensíveis para alguns utilizadores.",
|
||||
"collections.detail.share": "Partilhar esta coleção",
|
||||
"collections.detail.you_are_in_this_collection": "Está em destaque nesta coleção",
|
||||
"collections.edit_details": "Editar detalhes",
|
||||
|
||||
@ -389,7 +389,7 @@
|
||||
"collections.detail.loading": "Po ngarkohet koleksion…",
|
||||
"collections.detail.revoke_inclusion": "Hiqmëni",
|
||||
"collections.detail.sensitive_content": "Lëndë rezervat",
|
||||
"collections.detail.sensitive_note": "Ky koleksion përmban llogari dhe lëndë që mund të jetë me spec për disa përdorues.",
|
||||
"collections.detail.sensitive_note": "Përshkrimi dhe llogaritë mund të mos jenë të përshtatshme për krejt parësit.",
|
||||
"collections.detail.share": "Ndajeni këtë koleksion me të tjerë",
|
||||
"collections.detail.you_are_in_this_collection": "Shfaqeni te ky koleksion",
|
||||
"collections.edit_details": "Përpunoni hollësi",
|
||||
@ -420,6 +420,11 @@
|
||||
"collections.search_accounts_max_reached": "Keni shtuar numrin maksimum të llogarive",
|
||||
"collections.sensitive": "Rezervat",
|
||||
"collections.share_short": "Ndajeni me të tjerë",
|
||||
"collections.sort_alphabetical": "Alfabetit",
|
||||
"collections.sort_by": "Renditi sipas:",
|
||||
"collections.sort_date_added": "Datës së shtimit",
|
||||
"collections.sort_last_active": "Aktiv së fundi më",
|
||||
"collections.sort_most_followers": "Shumicës së ndjekësve",
|
||||
"collections.suggestions.can_not_add": "S’mund të shtohet",
|
||||
"collections.suggestions.can_not_add_desc": "Këto llogari kanë zgjedhur të lihen jashtë zbulimi, ose mund të gjenden në një shërbyes që s’mbulon koleksione.",
|
||||
"collections.suggestions.must_follow": "Duhet të ndjekin së pari",
|
||||
@ -631,6 +636,7 @@
|
||||
"empty_column.blocks": "S’keni bllokuar ende ndonjë përdorues.",
|
||||
"empty_column.bookmarked_statuses": "S’keni faqeruajtur ende ndonjë mesazh. Kur faqeruani një të tillë, ai do të shfaqet këtu.",
|
||||
"empty_column.collections.featured_in": "S’jeni shtuar ende te ndonjë koleksion.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Që njerëzit t’ju shtojnë te koleksione, lypset të lejoni shfaqjen si i zgjedhur në raste zbulimi, që nga <link>Parapëlqime > Privatësi dhe shtrirje</link>",
|
||||
"empty_column.community": "Rrjedha kohore vendore është e zbrazët. Shkruani diçka publikisht që t’i hyhet valles!",
|
||||
"empty_column.direct": "S’keni ende ndonjë përmendje private. Kur dërgoni ose merrni një të tillë, do të shfaqet këtu.",
|
||||
"empty_column.disabled_feed": "Kjo prurje është çaktivizuar nga përgjegjësit e shërbyesit tuaj.",
|
||||
|
||||
@ -394,7 +394,6 @@
|
||||
"collections.detail.loading": "Laddar samling…",
|
||||
"collections.detail.revoke_inclusion": "Ta bort mig",
|
||||
"collections.detail.sensitive_content": "Känsligt innehåll",
|
||||
"collections.detail.sensitive_note": "Denna samling innehåller konton och innehåll som kan vara känsliga för vissa användare.",
|
||||
"collections.detail.share": "Dela denna samling",
|
||||
"collections.detail.you_are_in_this_collection": "Du är med i denna samling",
|
||||
"collections.edit_details": "Redigera detaljer",
|
||||
@ -425,6 +424,10 @@
|
||||
"collections.search_accounts_max_reached": "Du har lagt till maximalt antal konton",
|
||||
"collections.sensitive": "Känsligt",
|
||||
"collections.share_short": "Dela",
|
||||
"collections.sort_alphabetical": "Alfabetiskt",
|
||||
"collections.sort_by": "Sortera efter:",
|
||||
"collections.sort_last_active": "Senast aktiv",
|
||||
"collections.sort_most_followers": "Flest följare",
|
||||
"collections.suggestions.can_not_add": "Kan inte läggas till",
|
||||
"collections.suggestions.can_not_add_desc": "Dessa konton kan ha valt bort upptäckt, eller kan de vara på en server som inte stöder samlingar.",
|
||||
"collections.suggestions.must_follow": "Måste följa först",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Koleksiyon yükleniyor…",
|
||||
"collections.detail.revoke_inclusion": "Beni çıkar",
|
||||
"collections.detail.sensitive_content": "Hassas içerik",
|
||||
"collections.detail.sensitive_note": "Bu koleksiyon bazı kullanıcılar için hassas olabilecek hesap ve içerik içerebilir.",
|
||||
"collections.detail.sensitive_note": "Bu açıklama ve hesaplar her izleyiciye uygun olmayabilir.",
|
||||
"collections.detail.share": "Bu koleksiyonu paylaş",
|
||||
"collections.detail.you_are_in_this_collection": "Bu koleksiyonda öne çıkanlardasınız",
|
||||
"collections.edit_details": "Ayrıntıları düzenle",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Maksimum hesabı eklediniz",
|
||||
"collections.sensitive": "Hassas",
|
||||
"collections.share_short": "Paylaş",
|
||||
"collections.sort_alphabetical": "Alfabetik",
|
||||
"collections.sort_by": "Sıralama:",
|
||||
"collections.sort_date_added": "Ekleme tarihi",
|
||||
"collections.sort_last_active": "Son etkinlik",
|
||||
"collections.sort_most_followers": "En fazla takipçi",
|
||||
"collections.suggestions.can_not_add": "Eklenemez",
|
||||
"collections.suggestions.can_not_add_desc": "Bu hesaplar, keşfedilmek istemiyor veya koleksiyonları desteklemeyen bir sunucuda yer alıyor olabilirler.",
|
||||
"collections.suggestions.must_follow": "İlk önce takip etmelisiniz",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "Henüz herhangi bir kullanıcıyı engellemedin.",
|
||||
"empty_column.bookmarked_statuses": "Henüz yer imine eklediğin toot yok. Bir tanesi yer imine eklendiğinde burada görünür.",
|
||||
"empty_column.collections.featured_in": "Henüz herhangi bir koleksiyona eklenmediniz.",
|
||||
"empty_column.collections.featured_in_undiscoverable": "Kullanıcıların sizi koleksiyonlarına ekleyebilmesi için, <link>Tercihler > Gizlilik ve erişim</link> bölümünden keşif deneyimlerinde öne çıkarılmaya izin vermeniz gerekir",
|
||||
"empty_column.community": "Yerel zaman çizelgesi boş. Daha fazla eğlence için herkese açık bir gönderi paylaşın!",
|
||||
"empty_column.direct": "Henüz doğrudan değinmeniz yok. Bir tane gönderdiğinizde veya aldığınızda burada listelenecek.",
|
||||
"empty_column.disabled_feed": "Bu akış sunucu yöneticileri tarafından devre dışı bırakılmıştır.",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "Đang tải gói khởi đầu…",
|
||||
"collections.detail.revoke_inclusion": "Xóa tôi",
|
||||
"collections.detail.sensitive_content": "Nội dung nhạy cảm",
|
||||
"collections.detail.sensitive_note": "Gói khởi đầu này chứa các tài khoản và nội dung có thể nhạy cảm đối với một số người.",
|
||||
"collections.detail.sensitive_note": "Phần mô tả và nội dung có thể không phù hợp với tất cả người xem.",
|
||||
"collections.detail.share": "Chia sẻ gói khởi đầu này",
|
||||
"collections.detail.you_are_in_this_collection": "Bạn đã được thêm vào gói khởi đầu này",
|
||||
"collections.edit_details": "Sửa chi tiết",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "Bạn đã đạt đến số lượng tài khoản tối đa",
|
||||
"collections.sensitive": "Nhạy cảm",
|
||||
"collections.share_short": "Chia sẻ",
|
||||
"collections.sort_alphabetical": "Bảng chữ cái",
|
||||
"collections.sort_by": "Sắp xếp theo:",
|
||||
"collections.sort_date_added": "Ngày thêm",
|
||||
"collections.sort_last_active": "Hoạt động lần cuối",
|
||||
"collections.sort_most_followers": "Nhiều người theo dõi nhất",
|
||||
"collections.suggestions.can_not_add": "Không thể thêm",
|
||||
"collections.suggestions.can_not_add_desc": "Những tài khoản này không muốn khám phá, hoặc họ ở trên máy chủ chưa hỗ trợ gói khởi đầu.",
|
||||
"collections.suggestions.must_follow": "Cần theo dõi trước",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "正在加载收藏列表…",
|
||||
"collections.detail.revoke_inclusion": "移除我",
|
||||
"collections.detail.sensitive_content": "敏感内容",
|
||||
"collections.detail.sensitive_note": "此收藏列表可能包含某些对部分用户而言为敏感内容的账号或内容。",
|
||||
"collections.detail.sensitive_note": "列表说明及其中的账号可能不适合所有人查看。",
|
||||
"collections.detail.share": "分享此收藏列表",
|
||||
"collections.detail.you_are_in_this_collection": "你被添加到了此收藏列表",
|
||||
"collections.edit_details": "编辑详情",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "你添加的账号数量已达上限",
|
||||
"collections.sensitive": "敏感内容",
|
||||
"collections.share_short": "分享",
|
||||
"collections.sort_alphabetical": "按字母顺序",
|
||||
"collections.sort_by": "排序方式:",
|
||||
"collections.sort_date_added": "按添加日期",
|
||||
"collections.sort_last_active": "按最后活跃顺序",
|
||||
"collections.sort_most_followers": "按关注者最多",
|
||||
"collections.suggestions.can_not_add": "无法添加",
|
||||
"collections.suggestions.can_not_add_desc": "这些账号可能已主动选择不可被发现,或是他们所在的服务器尚不支持收藏列表。",
|
||||
"collections.suggestions.must_follow": "必须先关注",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "你还未屏蔽任何用户。",
|
||||
"empty_column.bookmarked_statuses": "你还没有给任何嘟文添加书签。添加书签后的嘟文会显示在这里。",
|
||||
"empty_column.collections.featured_in": "你还没有被添加到收藏列表过。",
|
||||
"empty_column.collections.featured_in_undiscoverable": "如果想让其他人将你添加到收藏列表,请前往<link>偏好设置 > 隐私与可达性</link>在发现功能中允许推荐",
|
||||
"empty_column.community": "本站时间线还没有内容,写点什么并公开发布,让它活跃起来吧!",
|
||||
"empty_column.direct": "你还未使用过私下提及。当你发出或者收到私下提及时,它将显示在此。",
|
||||
"empty_column.disabled_feed": "此动态已被你的服务器管理员禁用。",
|
||||
|
||||
@ -394,7 +394,7 @@
|
||||
"collections.detail.loading": "讀取收藏名單中...",
|
||||
"collections.detail.revoke_inclusion": "移除我",
|
||||
"collections.detail.sensitive_content": "敏感內容",
|
||||
"collections.detail.sensitive_note": "此收藏名單可能包含對某些使用者敏感之帳號或內容。",
|
||||
"collections.detail.sensitive_note": "內容說明與帳號也許不適合所有瀏覽者。",
|
||||
"collections.detail.share": "分享此收藏名單",
|
||||
"collections.detail.you_are_in_this_collection": "您已被加入至此收藏名單",
|
||||
"collections.edit_details": "編輯詳細資料",
|
||||
@ -425,6 +425,11 @@
|
||||
"collections.search_accounts_max_reached": "您新增之帳號數已達上限",
|
||||
"collections.sensitive": "敏感內容",
|
||||
"collections.share_short": "分享",
|
||||
"collections.sort_alphabetical": "按字母順序",
|
||||
"collections.sort_by": "排序依據:",
|
||||
"collections.sort_date_added": "新增日期",
|
||||
"collections.sort_last_active": "最後上線",
|
||||
"collections.sort_most_followers": "最多跟隨者",
|
||||
"collections.suggestions.can_not_add": "無法被新增",
|
||||
"collections.suggestions.can_not_add_desc": "這些帳號可能選擇退出探索功能,或他們所在之伺服器未支援收藏名單。",
|
||||
"collections.suggestions.must_follow": "您必須先跟隨",
|
||||
@ -636,6 +641,7 @@
|
||||
"empty_column.blocks": "您尚未封鎖任何使用者。",
|
||||
"empty_column.bookmarked_statuses": "您還沒有新增任何書籤。當您新增書籤時,它將於此顯示。",
|
||||
"empty_column.collections.featured_in": "您尚未被加入至任何收藏名單。",
|
||||
"empty_column.collections.featured_in_undiscoverable": "如欲被其他人將您加入至收藏名單,您必須於 <link>偏好設定 > 隱私權與觸及</link> 啟用探索相關功能",
|
||||
"empty_column.community": "本站時間軸是空的。快公開嘟些文搶頭香啊!",
|
||||
"empty_column.direct": "您還沒有收到任何私訊。當您私訊別人或收到私訊時,它將於此顯示。",
|
||||
"empty_column.disabled_feed": "此內容已被您的伺服器管理員停用。",
|
||||
|
||||
59
app/javascript/types/virtual.d.ts
vendored
@ -1,59 +0,0 @@
|
||||
declare module 'virtual:mastodon-emoji-compressed' {
|
||||
import type { BaseEmoji, EmojiData, NimbleEmojiIndex } from 'emoji-mart';
|
||||
import type { Category, Data, Emoji } from 'emoji-mart/dist-es/utils/data';
|
||||
/*
|
||||
* The 'search' property, although not defined in the [`Emoji`]{@link node_modules/@types/emoji-mart/dist-es/utils/data.d.ts#Emoji} type,
|
||||
* is used in the application.
|
||||
* This could be due to an oversight by the library maintainer.
|
||||
* The `search` property is defined and used [here]{@link node_modules/emoji-mart/dist/utils/data.js#uncompress}.
|
||||
*/
|
||||
export type Search = string;
|
||||
/*
|
||||
* The 'skins' property does not exist in the application data.
|
||||
* This could be a potential area of refactoring or error handling.
|
||||
* The non-existence of 'skins' property is evident at [this location]{@link app/javascript/mastodon/features/emoji/emoji_compressed.js:121}.
|
||||
*/
|
||||
type Skins = null;
|
||||
|
||||
type Filename = string;
|
||||
type UnicodeFilename = string;
|
||||
export type FilenameData = [
|
||||
filename: Filename,
|
||||
unicodeFilename?: UnicodeFilename,
|
||||
][];
|
||||
export type ShortCodesToEmojiDataKey =
|
||||
| EmojiData['id']
|
||||
| BaseEmoji['native']
|
||||
| keyof NimbleEmojiIndex['emojis'];
|
||||
|
||||
type SearchData = [
|
||||
BaseEmoji['native'],
|
||||
Emoji['short_names'],
|
||||
Search,
|
||||
Emoji['unified'],
|
||||
];
|
||||
|
||||
export type ShortCodesToEmojiData = Record<
|
||||
ShortCodesToEmojiDataKey,
|
||||
[FilenameData, SearchData]
|
||||
>;
|
||||
type EmojisWithoutShortCodes = FilenameData;
|
||||
|
||||
type EmojiCompressed = [
|
||||
ShortCodesToEmojiData,
|
||||
Skins,
|
||||
Category[],
|
||||
Data['aliases'],
|
||||
EmojisWithoutShortCodes,
|
||||
Data,
|
||||
];
|
||||
|
||||
/*
|
||||
* `emoji_compressed.js` uses `babel-plugin-preval`, which makes it difficult to convert to TypeScript.
|
||||
* As a temporary solution, we are allowing a default export here to apply the TypeScript type `EmojiCompressed` to the JS file export.
|
||||
* - {@link app/javascript/mastodon/features/emoji/emoji_compressed.js}
|
||||
*/
|
||||
declare const emojiCompressed: EmojiCompressed;
|
||||
|
||||
export default emojiCompressed; // eslint-disable-line import/no-default-export
|
||||
}
|
||||
@ -361,8 +361,15 @@ cy:
|
||||
updated_msg: Cyhoeddiad wedi'i ddiweddaru'n llwyddiannus!
|
||||
collections:
|
||||
accounts: Cyfrifon
|
||||
back_to_account: Nôl i dudalen y cyfrif
|
||||
back_to_report: Nôl i dudalen yr adroddiad
|
||||
batch:
|
||||
add_to_report: 'Ychwanegu at adroddiad #%{id}'
|
||||
remove_from_report: Dileu o'r adroddiad
|
||||
report: Adroddiadau
|
||||
collection_title: Casgliad gan %{name}
|
||||
contents: Cynnwys
|
||||
no_collection_selected: Heb newid unrhyw gasgliad am nad oedd un wedi'i ddewis
|
||||
number_of_accounts:
|
||||
few: "%{count} cyfrif"
|
||||
many: "%{count} cyfrif"
|
||||
@ -371,6 +378,7 @@ cy:
|
||||
two: "%{count} cyfrif"
|
||||
zero: "%{count} cyfrif"
|
||||
open: Agor
|
||||
title: Casgliadau cyfrifon - @%{name}
|
||||
view_publicly: Gweld yn gyhoeddus
|
||||
critical_update_pending: Diweddariad hanfodol ar ei ffordd
|
||||
custom_emojis:
|
||||
|
||||
@ -349,6 +349,7 @@ da:
|
||||
back_to_report: Tilbage til anmeldelsesside
|
||||
batch:
|
||||
add_to_report: 'Føj til anmeldelse #%{id}'
|
||||
remove_from_report: Fjern fra anmeldelse
|
||||
report: Anmeldelse
|
||||
collection_title: Indsamling af %{name}
|
||||
contents: Indhold
|
||||
|
||||
@ -349,6 +349,7 @@ de:
|
||||
back_to_report: Zurück zu den Meldungen
|
||||
batch:
|
||||
add_to_report: Der Meldung Nr. %{id} hinzufügen
|
||||
remove_from_report: Aus der Meldung entfernen
|
||||
report: Meldung
|
||||
collection_title: Sammlung von %{name}
|
||||
contents: Inhalte
|
||||
|
||||
@ -349,6 +349,7 @@ el:
|
||||
back_to_report: Πίσω στη σελίδα αναφοράς
|
||||
batch:
|
||||
add_to_report: 'Προσθήκη στην αναφορά #%{id}'
|
||||
remove_from_report: Αφαίρεση από την αναφορά
|
||||
report: Αναφορά
|
||||
collection_title: Συλλογή από %{name}
|
||||
contents: Περιεχόμενα
|
||||
|
||||
@ -349,6 +349,7 @@ es-AR:
|
||||
back_to_report: Volver a la página de la denuncia
|
||||
batch:
|
||||
add_to_report: Agregar a la denuncia N°%{id}
|
||||
remove_from_report: Quitar de la denuncia
|
||||
report: Denunciar
|
||||
collection_title: Colección de %{name}
|
||||
contents: Contenidos
|
||||
|
||||
@ -349,6 +349,7 @@ es-MX:
|
||||
back_to_report: Volver a la página del informe
|
||||
batch:
|
||||
add_to_report: 'Añadir al informe #%{id}'
|
||||
remove_from_report: Quitar del informe
|
||||
report: Informe
|
||||
collection_title: Colección de %{name}
|
||||
contents: Contenidos
|
||||
|
||||
@ -349,6 +349,7 @@ es:
|
||||
back_to_report: Volver a la página del informe
|
||||
batch:
|
||||
add_to_report: 'Añadir al informe #%{id}'
|
||||
remove_from_report: Quitar del informe
|
||||
report: Informar
|
||||
collection_title: Colección de %{name}
|
||||
contents: Contenidos
|
||||
@ -1299,7 +1300,7 @@ es:
|
||||
animations_and_accessibility: Animaciones y accesibilidad
|
||||
boosting_preferences: Preferencias de impulso
|
||||
boosting_preferences_info_html: "<strong>Consejo:</strong> Sin importar los ajustes, pulsar <kbd>Mayus</kbd> al hacer <kbd>clic</kbd> en el icono de %{icon} Impulsar, dará impulso inmediatamente."
|
||||
discovery: Descubrir
|
||||
discovery: Descubrimiento
|
||||
localization:
|
||||
body: Mastodon es traducido con la ayuda de voluntarios.
|
||||
guide_link: https://es.crowdin.com/project/mastodon
|
||||
|
||||
@ -349,6 +349,7 @@ et:
|
||||
back_to_report: Tagasi raporti lehele
|
||||
batch:
|
||||
add_to_report: 'Lisa raportile #%{id}'
|
||||
remove_from_report: Eemalda raportist
|
||||
report: Raport
|
||||
collection_title: Kasutaja %{name} kogumikud
|
||||
contents: Sisu
|
||||
|
||||
@ -349,6 +349,7 @@ fi:
|
||||
back_to_report: Takaisin raporttisivulle
|
||||
batch:
|
||||
add_to_report: Lisää raporttiin nro %{id}
|
||||
remove_from_report: Poista raportista
|
||||
report: Raportoi
|
||||
collection_title: Kokoelma, koonnut %{name}
|
||||
contents: Sisältö
|
||||
@ -499,9 +500,12 @@ fi:
|
||||
email_subscriptions:
|
||||
accounts:
|
||||
account: Tili
|
||||
active: Käytössä
|
||||
empty:
|
||||
hint: Millään tilillä ei ole vielä tilaajia.
|
||||
no_lists_yet: Ei vielä listoja
|
||||
inactive: Poissa käytöstä
|
||||
last_email: Viimeisin sähköpostiviesti
|
||||
lead: Alla näkyvät tilit, jotka ovat ottaneet ominaisuuden käyttöön ja joilla on tilaajia.
|
||||
status: Tila
|
||||
subscribers: Tilaajia
|
||||
@ -512,21 +516,35 @@ fi:
|
||||
compliance_settings:
|
||||
additional_footer_text:
|
||||
action: Hallitse
|
||||
hint: Valinnainen teksti, joka näkyy vain uutiskirjeiden alatunnisteessa
|
||||
title: Alatunnisteen lisäteksti
|
||||
lead: Sähköpostiuutiskirjeitä voidaan pitää markkinointiviesteinä riippuen lainkäyttöalueesta, jossa toimit.
|
||||
privacy_policy:
|
||||
action: Hallitse
|
||||
hint: Jokaisen sähköpostiviestin alatunnisteessa on linkki tähän käytäntöön
|
||||
title: Tietosuojakäytäntö
|
||||
danger_zone:
|
||||
disable_feature:
|
||||
action: Poista käytöstä
|
||||
hint: Poista ominaisuus käytöstä kaikilta tileiltä
|
||||
title: Poista ominaisuus käytöstä
|
||||
erase_all_data:
|
||||
action: Hävitä tiedot
|
||||
hint: Poistaa kaikki sähköpostiosoitteet pysyvästi kaikilta postituslistoilta
|
||||
title: Hävitä kaikki tiedot
|
||||
title: Vaaravyöhyke
|
||||
disabled_msg: Sähköpostitilaukset on poistettu käytöstä onnistuneesti.
|
||||
index:
|
||||
disabled:
|
||||
cannot_be_enabled: Tekninen palveluntarjoajasi ei ole ottanut tätä omainaisuutta käyttöön palvelimellasi.
|
||||
get_started: Aloita
|
||||
title: Sähköpostiuutiskirjeet
|
||||
purged_msg: Kaikki sähköpostitilausten tiedot hävitetään.
|
||||
roles:
|
||||
accounts: Tilejä
|
||||
edit_role: Muokkaa roolia
|
||||
empty:
|
||||
hint: Kenelläkään ei ole oikeutta käyttää tätä ominaisuutta.
|
||||
manage_roles: Hallitse rooleja
|
||||
role_name: Roolin nimi
|
||||
title: Roolit
|
||||
@ -534,6 +552,8 @@ fi:
|
||||
show:
|
||||
enable_feature: Ota ominaisuus käyttöön
|
||||
important_information: Tärkeää tietoa
|
||||
list:
|
||||
3_privacy_policy_warning: Palvelimen ylläpito saa pääsyn kerättyihin henkilötietoihin (sähköpostiosoitteisiin). Siksi palvelimen tietosuojakäytäntö ja käyttöehdot on päivitettävä ennen tämän ominaisuuden käyttöä.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Tuo sallittuja verkkotunnuksia
|
||||
@ -839,6 +859,7 @@ fi:
|
||||
manage_custom_emojis: Hallita mukautettuja emojeita
|
||||
manage_custom_emojis_description: Sallii käyttäjien hallita palvelimen mukautettuja emojeita
|
||||
manage_email_subscriptions: Hallita sähköpostitilauksia
|
||||
manage_email_subscriptions_description: Salli käyttäjien, jolla on tämä käyttöoikeus, ottaa sähköpostiuutiskirjeominaisuus käyttöön tilillään
|
||||
manage_federation: Hallita federointia
|
||||
manage_federation_description: Sallii käyttäjien estää tai sallia federointi muiden verkkotunnusten kanssa ja hallita toimitusta
|
||||
manage_invites: Hallita kutsuja
|
||||
@ -1795,6 +1816,8 @@ fi:
|
||||
moderation_warning:
|
||||
summary_html: Olet sovelluksessa, joka ei tue uusinta Mastodonin versiota. %{link}.
|
||||
title: Olet saanut moderointivaroituksen.
|
||||
severed_relationships:
|
||||
title: Menetetty yhteydet palvelimeen %{name}
|
||||
notification_mailer:
|
||||
admin:
|
||||
report:
|
||||
|
||||
@ -349,6 +349,7 @@ it:
|
||||
back_to_report: Torna alla pagina di segnalazione
|
||||
batch:
|
||||
add_to_report: 'Aggiungi alla segnalazione #%{id}'
|
||||
remove_from_report: Rimuovi dalla segnalazione
|
||||
report: Segnala
|
||||
collection_title: Collezione di %{name}
|
||||
contents: Contenuti
|
||||
@ -749,7 +750,7 @@ it:
|
||||
mark_as_sensitive_description_html: I contenuti nei post segnalati saranno segnati come sensibili e verrà registrata una sanzione per aiutarti a prendere ulteriori provvedimenti sulle future infrazioni dello stesso account.
|
||||
other_description_html: Vedi altre opzioni per controllare il comportamento dell'account e personalizzare la comunicazione all'account segnalato.
|
||||
resolve_description_html: Nessuna azione sarà intrapresa contro l'account segnalato, nessuna sanzione registrata, e la segnalazione sarà chiusa.
|
||||
silence_description_html: L'account sarà visibile solo a coloro che lo seguono o lo cercano manualmente, limitandone fortemente la raggiungibilità. Può sempre essere annullato. Chiude tutte le segnalazioni contro questo account.
|
||||
silence_description_html: L'account sarà visibile solo a coloro che già lo seguono o lo cercano manualmente, limitandone fortemente la sua visibilità. Può sempre essere annullato. Chiude tutte le segnalazioni contro questo account.
|
||||
suspend_description_html: L'account e tutti i suoi contenuti saranno inaccessibili ed eventualmente cancellati, e interagire con esso sarà impossibile. Reversibile entro 30 giorni. Chiude tutte le segnalazioni contro questo account.
|
||||
actions_description_html: Decidi quale azione intraprendere per risolvere questa segnalazione. Se intraprendi un'azione punitiva nei confronti dell'account segnalato, gli verrà inviata una notifica via e-mail, tranne quando è selezionata la categoria <strong>Spam</strong>.
|
||||
actions_description_remote_html: Decide quali azioni intraprendere per risolvere la relazione. Questo influenzerà solo come <strong>il tuo</strong> server comunica con questo account remoto e ne gestisce il contenuto.
|
||||
@ -812,7 +813,7 @@ it:
|
||||
actions:
|
||||
delete_html: Rimuovi i post offensivi
|
||||
mark_as_sensitive_html: Contrassegna i file multimediali dei post offensivi come sensibili
|
||||
silence_html: Limita severamente la portata di <strong>@%{acct}</strong> rendendo il suo profilo e il suo contenuto visibili solo a persone che già li seguono o che lo guardano manualmente
|
||||
silence_html: Limita fortemente la visibilità di <strong>@%{acct}</strong> rendendo il suo profilo e i suoi contenuti visibili solo alle persone che già lo seguono o che cercano manualmente il suo profilo
|
||||
suspend_html: Sospendere <strong>@%{acct}</strong>, rendendo il suo profilo e i suoi contenuti inaccessibili e impossibilitandone l'interazione
|
||||
close_report: 'Contrassegna la segnalazione #%{id} come risolta'
|
||||
close_reports_html: Contrassegna <strong>tutte</strong> le segnalazioni contro <strong>@%{acct}</strong> come risolte
|
||||
@ -971,7 +972,7 @@ it:
|
||||
warning_hint: Ti consigliamo di utilizzare “Approvazione richiesta per la registrazione” a meno che tu non sia sicuro che il tuo team di moderazione possa gestire lo spam e le registrazioni dannose in modo tempestivo.
|
||||
security:
|
||||
authorized_fetch: Richiede l'autenticazione dai server federati
|
||||
authorized_fetch_hint: La richiesta di autenticazione da server federati consente un'applicazione più rigorosa dei blocchi sia a livello di utente che a livello di server. Tuttavia, ciò comporta una riduzione delle prestazioni, riduce la portata delle tue risposte e potrebbe introdurre problemi di compatibilità con alcuni servizi federati. Inoltre, ciò non impedirà agli attori dedicati di recuperare i tuoi post pubblici e account.
|
||||
authorized_fetch_hint: Richiedere l'autenticazione da server federati consente un'applicazione più rigorosa dei blocchi sia a livello utente che a livello server. Tuttavia, ciò comporta un calo delle prestazioni, riduce la visibilità delle tue risposte e potrebbe causare problemi di compatibilità con alcuni servizi federati. Inoltre, questo non impedirà ad attori dedicati di accedere ai tuoi post e account pubblici.
|
||||
authorized_fetch_overridden_hint: Al momento non puoi modificare questa impostazione perché è sostituita da una variabile di ambiente.
|
||||
federation_authentication: Applicazione dell'autenticazione della federazione
|
||||
title: Impostazioni del server
|
||||
@ -1923,11 +1924,11 @@ it:
|
||||
hint_html: "<strong>Personalizza il modo in cui vuoi che il tuo profilo e i tuoi post vengano trovati.</strong> Una varietà di funzionalità in Mastodon possono aiutarti a raggiungere un pubblico più ampio se abilitato. Prenditi un momento per rivedere queste impostazioni per assicurarti che si adattino al tuo caso d'uso."
|
||||
privacy: Privacy
|
||||
privacy_hint_html: Controlla quanto tu voglia mostrare a beneficio degli altri. Le persone scoprono profili interessanti e app fantastiche sfogliando il seguito di altre persone e vedendo da quali app pubblichino, ma potresti preferire tenerlo nascosto.
|
||||
reach: Copertura
|
||||
reach: Visibilità
|
||||
reach_hint_html: Controlla se vuoi essere scoperto e seguito da nuove persone. Vuoi che i tuoi post vengano visualizzati nella schermata Esplora? Vuoi che altre persone ti vedano tra i loro consigli di utenti da seguire? Vuoi accettare automaticamente tutti i nuovi follower o avere un controllo granulare su ciascuno di essi?
|
||||
search: Cerca
|
||||
search_hint_html: Controlla come vuoi essere trovato. Vuoi che le persone ti trovino in base a ciò che hai postato pubblicamente? Vuoi che le persone al di fuori di Mastodon trovino il tuo profilo durante la ricerca sul web? Si prega di notare che l'esclusione totale da tutti i motori di ricerca non può essere garantita per le informazioni pubbliche.
|
||||
title: Privacy e copertura
|
||||
title: Privacy e visibilità
|
||||
privacy_policy:
|
||||
title: Informativa sulla privacy
|
||||
reactions:
|
||||
@ -2107,7 +2108,7 @@ it:
|
||||
unlisted_long: Nascosto dai risultati di ricerca di Mastodon, dalle tendenze e dalle timeline pubbliche
|
||||
statuses_cleanup:
|
||||
enabled: Cancella automaticamente i vecchi post
|
||||
enabled_hint: Cancella automaticamente i tuoi post quando diventano più vecchi di una soglia di età specificata, a meno che non corrispondano a una delle eccezioni sotto
|
||||
enabled_hint: Cancella automaticamente i tuoi post una volta raggiunta una soglia di età specificata, a meno che non corrispondano a una delle eccezioni sotto
|
||||
exceptions: Eccezioni
|
||||
explanation: L'eliminazione automatica viene eseguita con bassa priorità. Potrebbe verificarsi un ritardo tra il raggiungimento della soglia di età e la rimozione.
|
||||
ignore_favs: Ignora preferiti
|
||||
|
||||
@ -349,6 +349,7 @@ nl:
|
||||
back_to_report: Terug naar de rapportagepagina
|
||||
batch:
|
||||
add_to_report: 'Aan rapportage #%{id} toevoegen'
|
||||
remove_from_report: Uit de rapportage verwijderen
|
||||
report: Rapportage
|
||||
collection_title: Verzameling van %{name}
|
||||
contents: Inhoud
|
||||
@ -557,10 +558,10 @@ nl:
|
||||
enable_feature: Functionaliteit inschakelen
|
||||
important_information: Belangrijke informatie
|
||||
list:
|
||||
1_permission_explanation: Wanneer deze functie is ingeschakeld, kunnen klanten met de bijbehorende machtigingen een e-mailverzamelformulier toevoegen aan hun profielen.
|
||||
2_feature_explanation: Wanneer bezoekers zich aanmelden op een accountprofielpagina en hun abonnement bevestigen, zullen zij e-mail updates ontvangen wanneer het account nieuwe openbare berichten aanmaakt.
|
||||
3_privacy_policy_warning: Serverbeheerders hebben toegang tot verzamelde PII (e-mailadressen). Daarom moeten het privacybeleid en de Servicevoorwaarden voor de server worden bijgewerkt voordat deze functie wordt gebruikt.
|
||||
4_cost_warning: E-mails kunnen kosten in rekening brengen, afhankelijk van de hosting-installatie. Overleg met uw hostingprovider voordat u deze optie inschakelt, omdat deze het aantal e-mails van uw server drastisch kan verhogen.
|
||||
1_permission_explanation: Wanneer deze functionaliteit is ingeschakeld, kunnen accounts met de bijbehorende rechten een e-mailaanmeldformulier aan hun profiel toevoegen.
|
||||
2_feature_explanation: Wanneer bezoekers zich op een accountprofiel aanmelden en hun abonnement bevestigen, zullen zij e-mailupdates ontvangen wanneer het account nieuwe openbare berichten plaatst.
|
||||
3_privacy_policy_warning: Serverbeheerders hebben toegang tot verzamelde Persoonlijk Identificeerbare Informatie (e-mailadressen). Daarom moeten voordat deze functioniteit wordt gebruikt het privacybeleid en de gebruiksvoorwaarden voor de server worden bijgewerkt.
|
||||
4_cost_warning: E-mails kunnen, afhankelijk van de gebruikte hosting, kosten met zich meebrengen. Overleg met je hostingprovider voordat je dit inschakelt, omdat deze functionaliteit het aantal e-mails van je server drastisch kan verhogen.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Toegestane domeinen importeren
|
||||
@ -866,7 +867,7 @@ nl:
|
||||
manage_custom_emojis: Lokale emoji's beheren
|
||||
manage_custom_emojis_description: Staat gebruikers toe om lokale emoji's op de server te beheren
|
||||
manage_email_subscriptions: E-mailabonnementen beheren
|
||||
manage_email_subscriptions_description: Gebruikers met deze machtiging toestaan om de nieuwsbrieffunctie per e-mail voor hun account in te schakelen
|
||||
manage_email_subscriptions_description: Gebruikers met deze rechten toestaan om e-mailnieuwsbrieven voor hun account in te schakelen
|
||||
manage_federation: Federatie beheren
|
||||
manage_federation_description: Staat gebruikers toe om federatie met andere domeinen te blokkeren of toe te staan en om de bezorging te bepalen
|
||||
manage_invites: Uitnodigingen beheren
|
||||
|
||||
@ -349,6 +349,7 @@ pt-BR:
|
||||
back_to_report: Voltar à página de denúncia
|
||||
batch:
|
||||
add_to_report: 'Adicionar à denúncia #%{id}'
|
||||
remove_from_report: Remover da denúncia
|
||||
report: Denunciar
|
||||
collection_title: Coleção de %{name}
|
||||
contents: Conteúdo
|
||||
@ -548,6 +549,19 @@ pt-BR:
|
||||
empty:
|
||||
hint: Ninguém ter permissão para usar este recurso.
|
||||
no_roles_added: Nenhuma função adicionada
|
||||
lead: As contas com os seguintes cargos podem ativar este recurso em seus perfis.
|
||||
manage_roles: Gerenciar cargos
|
||||
role_name: Nome do cargo
|
||||
title: Cargos
|
||||
setups:
|
||||
show:
|
||||
enable_feature: Ativar recurso
|
||||
important_information: Informações importantes
|
||||
list:
|
||||
1_permission_explanation: Assim que este recurso for ativado, as contas com as permissões designadas podem adicionar um formulário de coleção de e-mails em seus perfis.
|
||||
2_feature_explanation: Quando os visitantes registrarem no perfil da conta e confirmarem a assinatura, eles receberam atualizações por e-mail caso a conta publique.
|
||||
3_privacy_policy_warning: Admins do servidor terão acesso aos PII (e-mails) coletados. Como tal, a política de privacidade e termos de serviço do servidor deve ser atualizada antes de usar este recurso.
|
||||
4_cost_warning: Os e-mails talvez sofram uma taxa dependendo da hospedagem. Entre em contato com o hóspede antes de ativá-lo, já que este recurso talvez aumente drasticamente a quantidade de e-mails enviados ao servidor.
|
||||
export_domain_allows:
|
||||
new:
|
||||
title: Importar domínios permitidos
|
||||
@ -853,6 +867,7 @@ pt-BR:
|
||||
manage_custom_emojis: Gerenciar Emojis Personalizados
|
||||
manage_custom_emojis_description: Permite aos usuários gerenciar emojis personalizados no servidor
|
||||
manage_email_subscriptions: Gerenciar assinaturas do e-mail
|
||||
manage_email_subscriptions_description: Permitir usuários com esta permissão de ativar o recurso de e-mails de novidades na conta deles
|
||||
manage_federation: Gerenciar Federação
|
||||
manage_federation_description: Permite aos usuários bloquear ou permitir federação com outros domínios e controlar a entregabilidade
|
||||
manage_invites: Gerenciar convites
|
||||
|
||||
@ -3,8 +3,8 @@ el:
|
||||
simple_form:
|
||||
hints:
|
||||
account:
|
||||
attribution_domains: Μία ανά γραμμή. Προστατεύει από ψευδείς ιδιότητες.
|
||||
discoverable: Μπορεί να αναδειχθείτε σε συλλογές που δημιουργήθηκαν από άλλους χρήστες. Εσείς και οι δημόσιες αναρτήσεις σας μπορεί επίσης να προτείνονται στους χρήστες σε άλλες εμπειρίες ανακάλυψης σε όλη το Mastodon.
|
||||
attribution_domains: Μία ανά γραμμή. Προστατεύει από ψευδείς αναφορές συντάκτη.
|
||||
discoverable: Μπορεί να αναδειχθείς σε συλλογές που δημιουργήθηκαν από άλλους χρήστες. Εσύ και οι δημόσιες αναρτήσεις σου μπορεί επίσης να προτείνονται στους χρήστες σε άλλες εμπειρίες ανακάλυψης σε όλο το Mastodon.
|
||||
display_name: Το πλήρες ή το αστείο σου όνομα.
|
||||
fields: Η αρχική σου σελίδα, αντωνυμίες, ηλικία, ό,τι θες.
|
||||
indexable: Οι δημόσιες αναρτήσεις σου μπορεί να εμφανιστούν στα αποτελέσματα αναζήτησης στο Mastodon. Άτομα που έχουν αλληλεπιδράσει με τις αναρτήσεις σου μπορεί να είναι σε θέση να τις αναζητήσουν όπως και να 'χει.
|
||||
@ -179,7 +179,7 @@ el:
|
||||
url: Πού θα σταλούν τα γεγονότα
|
||||
labels:
|
||||
account:
|
||||
attribution_domains: Ιστοσελίδες που επιτρέπεται να σας αναφέρουν
|
||||
attribution_domains: Ιστοσελίδες που επιτρέπεται να σε αναφέρουν
|
||||
discoverable: Ανάδειξέ με σε εμπειρίες ανακάλυψης
|
||||
fields:
|
||||
name: Ετικέτα
|
||||
|
||||
@ -92,6 +92,7 @@ fi:
|
||||
closed_registrations_message: Näkyy, kun rekisteröityminen on suljettu
|
||||
content_cache_retention_period: Kaikki muiden palvelinten julkaisut (mukaan lukien tehostukset ja vastaukset) poistuvat, kun määritetty määrä päiviä on kulunut, lukuun ottamatta paikallisen käyttäjän vuorovaikutusta näiden julkaisujen kanssa. Tämä sisältää julkaisut, jotka paikallinen käyttäjä on merkinnyt kirjanmerkiksi tai suosikiksi. Myös yksityismaininnat eri palvelinten käyttäjien välillä menetetään, eikä niitä voi palauttaa. Tämä asetus on tarkoitettu käytettäväksi erityistapauksissa ja rikkoo monia käyttäjien odotuksia, kun sitä sovelletaan yleiskäyttöön.
|
||||
custom_css: Voit käyttää mukautettuja tyylejä Mastodonin selainversiossa.
|
||||
email_footer_text: Valinnainen teksti, joka näkyy vain uutiskirjeiden alatunnisteessa.
|
||||
favicon: WEBP, PNG, GIF tai JPG. Korvaa oletusarvoisen Mastodonin sivustokuvakkeen haluamallasi kuvakkeella.
|
||||
landing_page: Valitsee, minkä sivun uudet kävijät näkevät saapuessaan palvelimellesi. Jos valitset ”Trendit”, trendien tulee olla käytössä Löydettävyys-asetuksissa. Jos valitset ”Paikallinen syöte”, kohta ”Pääsy paikallisia julkaisuja esitteleviin livesyötteisiin” tulee asettaa arvoon ”Kaikki” Löydettävyys-asetuksissa.
|
||||
mascot: Korvaa kuvituksen edistyneessä selainkäyttöliittymässä.
|
||||
@ -323,6 +324,9 @@ fi:
|
||||
trendable_by_default: Salli trendit ilman ennakkotarkastusta
|
||||
trends: Ota trendit käyttöön
|
||||
wrapstodon: Ota Wrapstodon käyttöön
|
||||
form_email_subscriptions_confirmation:
|
||||
agreement_email_volume: Ymmärrän, että tämän ominaisuuden käyttöönotto voi kasvattaa palvelimelta lähetettävän sähköpostin määrää merkittävästi ja että olen yksin vastuussa siitä aiheutuvista kustannuksista.
|
||||
agreement_privacy_and_terms: Olen päivittänyt tietosuojakäytännön ja käyttöehdot.
|
||||
interactions:
|
||||
must_be_follower: Estä ilmoitukset käyttäjiltä, jotka eivät seuraa sinua
|
||||
must_be_following: Estä ilmoitukset käyttäjiltä, joita et seuraa
|
||||
|
||||
@ -325,7 +325,7 @@ nl:
|
||||
trends: Trends inschakelen
|
||||
wrapstodon: Wrapstodon inschakelen
|
||||
form_email_subscriptions_confirmation:
|
||||
agreement_email_volume: Ik begrijp dat het inschakelen van deze functie de hoeveelheid e-mails die van de server wordt verzonden aanzienlijk kan verhogen en dat ik alleen verantwoordelijk ben voor alle gemaakte kosten.
|
||||
agreement_email_volume: Ik begrijp dat het inschakelen van deze functionaliteit de hoeveelheid e-mails die door de server wordt verzonden aanzienlijk kan verhogen en dat ik alleen verantwoordelijk ben voor alle gemaakte kosten.
|
||||
agreement_privacy_and_terms: Ik heb het Privacybeleid en de Gebruiksvoorwaarden bijgewerkt.
|
||||
interactions:
|
||||
must_be_follower: Meldingen van mensen die jou niet volgen blokkeren
|
||||
|
||||
@ -349,6 +349,7 @@ sq:
|
||||
back_to_report: Mbrapsht te faqja e raportimit
|
||||
batch:
|
||||
add_to_report: 'Shtoje te raportimi #%{id}'
|
||||
remove_from_report: Hiqe nga raportimi
|
||||
report: Raportim
|
||||
collection_title: Koleksion nga %{name}
|
||||
contents: Lëndë
|
||||
|
||||
@ -345,12 +345,19 @@ sv:
|
||||
updated_msg: Kungörelsen uppdaterades!
|
||||
collections:
|
||||
accounts: Konton
|
||||
back_to_account: Tillbaka till kontosidan
|
||||
back_to_report: Tillbaka till rapportsidan
|
||||
batch:
|
||||
add_to_report: 'Lägg till i rapport #%{id}'
|
||||
report: Rapportera
|
||||
collection_title: Samling av %{name}
|
||||
contents: Innehåll
|
||||
no_collection_selected: Inga samlingar ändrades eftersom inga valdes
|
||||
number_of_accounts:
|
||||
one: 1 konto
|
||||
other: "%{count} konton"
|
||||
open: Öppna
|
||||
title: Kontosamlingar - @%{name}
|
||||
view_publicly: Visa offentligt
|
||||
critical_update_pending: Kritisk uppdatering väntar
|
||||
custom_emojis:
|
||||
|
||||
@ -349,6 +349,7 @@ tr:
|
||||
back_to_report: Bildirim sayfasına geri dön
|
||||
batch:
|
||||
add_to_report: "#%{id} raporuna ekle"
|
||||
remove_from_report: Bildirimden kaldır
|
||||
report: Bildirim
|
||||
collection_title: "%{name} koleksiyonu"
|
||||
contents: İçerikler
|
||||
|
||||
@ -345,6 +345,7 @@ vi:
|
||||
back_to_report: Quay lại trang báo cáo
|
||||
batch:
|
||||
add_to_report: 'Thêm vào báo cáo #%{id}'
|
||||
remove_from_report: Xóa khỏi báo cáo
|
||||
report: Báo cáo
|
||||
collection_title: Gói khởi đầu bởi %{name}
|
||||
contents: Nội dung
|
||||
|
||||
@ -345,6 +345,7 @@ zh-CN:
|
||||
back_to_report: 返回举报页
|
||||
batch:
|
||||
add_to_report: '添加到举报 #%{id}'
|
||||
remove_from_report: 从举报中移除
|
||||
report: 举报
|
||||
collection_title: "%{name} 的收藏列表"
|
||||
contents: 内容
|
||||
|
||||
@ -345,6 +345,7 @@ zh-TW:
|
||||
back_to_report: 回到檢舉報告頁面
|
||||
batch:
|
||||
add_to_report: '新增至報告 #%{id}'
|
||||
remove_from_report: 自檢舉報告中移除
|
||||
report: 檢舉
|
||||
collection_title: "%{name} 的收藏名單"
|
||||
contents: 內容
|
||||
|
||||
@ -29,6 +29,7 @@ namespace :api, format: false do
|
||||
resources :reblogged_by, controller: :reblogged_by_accounts, only: :index
|
||||
resources :favourited_by, controller: :favourited_by_accounts, only: :index
|
||||
resource :reblog, only: :create
|
||||
resource :context, only: :show
|
||||
post :unreblog, to: 'reblogs#destroy'
|
||||
|
||||
resources :quotes, only: :index do
|
||||
@ -56,10 +57,6 @@ namespace :api, format: false do
|
||||
|
||||
post :translate, to: 'translations#create'
|
||||
end
|
||||
|
||||
member do
|
||||
get :context
|
||||
end
|
||||
end
|
||||
|
||||
namespace :timelines do
|
||||
|
||||
@ -1,26 +0,0 @@
|
||||
import type { Plugin } from 'vite';
|
||||
|
||||
export function MastodonEmojiCompressed(): Plugin {
|
||||
const virtualModuleId = 'virtual:mastodon-emoji-compressed';
|
||||
const resolvedVirtualModuleId = '\0' + virtualModuleId;
|
||||
|
||||
return {
|
||||
name: 'mastodon-emoji-compressed',
|
||||
resolveId(id) {
|
||||
if (id === virtualModuleId) {
|
||||
return resolvedVirtualModuleId;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
},
|
||||
async load(id) {
|
||||
if (id === resolvedVirtualModuleId) {
|
||||
const { default: emojiCompressed } =
|
||||
await import('../../app/javascript/mastodon/features/emoji/emoji_compressed.mjs');
|
||||
return `export default ${JSON.stringify(emojiCompressed)};`;
|
||||
}
|
||||
|
||||
return undefined;
|
||||
},
|
||||
};
|
||||
}
|
||||
@ -64,7 +64,7 @@ namespace :emojis do
|
||||
codes = []
|
||||
dest = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json')
|
||||
|
||||
puts "Downloading emojos from source... (#{source})"
|
||||
puts "Downloading emojis from source... (#{source})"
|
||||
|
||||
HTTP.get(source).to_s.split("\n").each do |line|
|
||||
next if line.start_with? '#'
|
||||
@ -72,11 +72,13 @@ namespace :emojis do
|
||||
parts = line.split(';').map(&:strip)
|
||||
next if parts.size < 2
|
||||
|
||||
codes << [parts[0], parts[1].start_with?('fully-qualified')]
|
||||
codes << [parts[0], parts[1].split.first]
|
||||
end
|
||||
|
||||
grouped_codes = codes.reduce([]) do |agg, current|
|
||||
if current[1]
|
||||
qualification = current[1]
|
||||
|
||||
if qualification == 'fully-qualified' || qualification == 'component' || agg.empty?
|
||||
agg << [current[0]]
|
||||
else
|
||||
agg.last << current[0]
|
||||
@ -100,7 +102,7 @@ namespace :emojis do
|
||||
map = map.sort { |a, b| a[0].size <=> b[0].size }.to_h
|
||||
|
||||
File.write(dest, JSON.dump(map))
|
||||
puts "Wrote emojo to destination! (#{dest})"
|
||||
puts "Wrote emoji to destination! (#{dest})"
|
||||
end
|
||||
|
||||
desc 'Generate emoji variants with white borders'
|
||||
|
||||
@ -1,7 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M24 26.799v-2.566c2-1.348 4.08-3.779 4.703-6.896.186.103.206.17.413.17.991 0 1.709-1.287 1.709-2.873 0-1.562-.823-2.827-1.794-2.865.187-.674.293-1.577.293-2.735C29.324 5.168 26 .527 18.541.527c-6.629 0-10.777 4.641-10.777 8.507 0 1.123.069 2.043.188 2.755-.911.137-1.629 1.352-1.629 2.845 0 1.587.804 2.873 1.796 2.873.206 0 .025-.067.209-.17C8.952 20.453 11 22.885 13 24.232v2.414c-5 .645-12 3.437-12 6.23v1.061C1 35 2.076 35 3.137 35h29.725C33.924 35 35 35 35 33.938v-1.061c0-2.615-6-5.225-11-6.078z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#269" d="M24 26.799v-2.566c2-1.348 4.08-3.779 4.703-6.896.186.103.206.17.413.17.991 0 1.709-1.287 1.709-2.873 0-1.562-.823-2.827-1.794-2.865.187-.674.293-1.577.293-2.735C29.324 5.168 26 .527 18.541.527c-6.629 0-10.777 4.641-10.777 8.507 0 1.123.069 2.043.188 2.755-.911.137-1.629 1.352-1.629 2.845 0 1.587.804 2.873 1.796 2.873.206 0 .025-.067.209-.17C8.952 20.453 11 22.885 13 24.232v2.414c-5 .645-12 3.437-12 6.23v1.061C1 35 2.076 35 3.137 35h29.725C33.924 35 35 35 35 33.938v-1.061c0-2.615-6-5.225-11-6.078z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 1.2 KiB |
@ -1,9 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M29 20.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.068 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13.477 2.384 2.484 4.243 3.484 5.274v1.847c-4 .492-7 2.628-7 4.765v.81c0 .812.823.812 1.634.812h18.73c.813 0 1.636 0 1.636-.812v-.81c0-2.001-3-3.997-6-4.649z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17 28.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.069 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13C4.993 23.876 7 25.735 8 26.766v1.847c-4 .492-7 2.628-7 4.765v.811C1 35 1.823 35 2.634 35h18.73c.813 0 1.636 0 1.636-.812v-.811c0-2-3-3.996-6-4.648z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#55ACEE" d="M29 20.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.068 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13.477 2.384 2.484 4.243 3.484 5.274v1.847c-4 .492-7 2.628-7 4.765v.81c0 .812.823.812 1.634.812h18.73c.813 0 1.636 0 1.636-.812v-.81c0-2.001-3-3.997-6-4.649z"/>
|
||||
<path fill="#269" d="M17 28.729v-1.963c1-1.03 2.914-2.89 3.391-5.273.142.079.055.13.213.13.758 0 1.256-.983 1.256-2.197 0-1.194-.656-2.161-1.399-2.191.143-.516.212-1.206.212-2.092 0-2.956-2.549-6.505-8.253-6.505-5.069 0-8.244 3.549-8.244 6.505 0 .858.051 1.562.142 2.107-.697.105-1.247 1.033-1.247 2.175 0 1.214.614 2.197 1.373 2.197.157 0-.069-.051.072-.13C4.993 23.876 7 25.735 8 26.766v1.847c-4 .492-7 2.628-7 4.765v.811C1 35 1.823 35 2.634 35h18.73c.813 0 1.636 0 1.636-.812v-.811c0-2-3-3.996-6-4.648z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 2.2 KiB |
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 30h1v6h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z"/>
|
||||
<path fill="#292F33" d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z"/>
|
||||
<path fill="#292F33" d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z"/>
|
||||
<path fill="#F7DECE" d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z"/>
|
||||
<path fill="#DF1F32" d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z"/>
|
||||
<path fill="#662113" d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z"/>
|
||||
<path fill="#C1694F" d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z"/>
|
||||
<path fill="#292F33" d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 30h1v6h-1z"/>
|
||||
<path fill="#292F33" d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M30 36v-1c0-3.313-1.687-6-5-6H11c-3.313 0-5 2.687-5 6v1h24z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.626 29.456c1.344.976 2.195 1.194 3.36 1.194s2.016-.218 3.36-1.194v-2.938h-6.721v2.938z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.62 27.816c.938 1.059 2.1 1.345 3.364 1.345 1.264 0 2.426-.287 3.364-1.345v-2.691H14.62v2.691z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M25.565 20.08c0-1.116-.565-2.021-1.263-2.021-.064 0-.125.015-.186.03-.009-.03-.016-.06-.026-.089H11.883c-.01.029-.016.059-.026.089-.061-.015-.123-.03-.186-.03-.698 0-1.263.905-1.263 2.021 0 1.025.479 1.863 1.097 1.994.489 3.734 3.201 6.595 6.482 6.595s5.993-2.861 6.482-6.595c.618-.132 1.096-.969 1.096-1.994z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.987 26.143c-2.123 0-2.774-.544-2.884-.653-.197-.197-.197-.517 0-.714.191-.191.497-.197.695-.018.04.029.556.376 2.188.376 1.695 0 2.186-.374 2.191-.377.197-.196.506-.187.704.01.197.197.187.527-.011.724-.109.108-.761.652-2.883.652zm.578-3.123h-1.156c-.318 0-.578-.26-.578-.578 0-.318.26-.578.578-.578h1.156c.318 0 .578.26.578.578 0 .318-.261.578-.578.578z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.904 20.9c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c-.001.424-.348.771-.771.771zm6.165 0c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c0 .424-.347.771-.771.771z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M12.578 30.461l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm10.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 31h1v5h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M30 36v-1c0-3.313-1.687-6-5-6H11c-3.313 0-5 2.687-5 6v1h24z"/>
|
||||
<path fill="#292F33" d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z"/>
|
||||
<path fill="#F7DECE" d="M14.626 29.456c1.344.976 2.195 1.194 3.36 1.194s2.016-.218 3.36-1.194v-2.938h-6.721v2.938z"/>
|
||||
<path fill="#EEC2AD" d="M14.62 27.816c.938 1.059 2.1 1.345 3.364 1.345 1.264 0 2.426-.287 3.364-1.345v-2.691H14.62v2.691z"/>
|
||||
<path fill="#F7DECE" d="M25.565 20.08c0-1.116-.565-2.021-1.263-2.021-.064 0-.125.015-.186.03-.009-.03-.016-.06-.026-.089H11.883c-.01.029-.016.059-.026.089-.061-.015-.123-.03-.186-.03-.698 0-1.263.905-1.263 2.021 0 1.025.479 1.863 1.097 1.994.489 3.734 3.201 6.595 6.482 6.595s5.993-2.861 6.482-6.595c.618-.132 1.096-.969 1.096-1.994z"/>
|
||||
<path fill="#C1694F" d="M17.987 26.143c-2.123 0-2.774-.544-2.884-.653-.197-.197-.197-.517 0-.714.191-.191.497-.197.695-.018.04.029.556.376 2.188.376 1.695 0 2.186-.374 2.191-.377.197-.196.506-.187.704.01.197.197.187.527-.011.724-.109.108-.761.652-2.883.652zm.578-3.123h-1.156c-.318 0-.578-.26-.578-.578 0-.318.26-.578.578-.578h1.156c.318 0 .578.26.578.578 0 .318-.261.578-.578.578z"/>
|
||||
<path fill="#662113" d="M14.904 20.9c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c-.001.424-.348.771-.771.771zm6.165 0c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c0 .424-.347.771-.771.771z"/>
|
||||
<path fill="#292F33" d="M12.578 30.461l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm10.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 31h1v5h-1z"/>
|
||||
<path fill="#292F33" d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M29.192 36v-1c0-3.314-2.686-6-6-6H11.808c-2.761 0-5 2.239-5 5v2h22.384z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M9 18c0 4.971 4.029 5 9 5s9-.029 9-5c0-.153-4.563-.998-9-1-4.562-.002-9 .843-9 1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.587 29.169l3.414 1.493 3.415-1.493v-3.415h-6.829z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.587 27.558c1.038 1.173 2.011 1.467 3.411 1.467 1.399 0 2.379-.295 3.418-1.467v-3.414h-6.829v3.414z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M20.76 9.97c-1.476-.478-4.95-.347-5.818.782-2.258.043-4.907 2.084-5.254 4.776-.344 2.665.422 3.902.695 5.905.309 2.27 1.585 2.996 2.605 3.3 1.468 1.939 3.028 1.856 5.648 1.856 5.116 0 7.553-3.423 7.769-9.238.13-3.517-1.934-6.18-5.645-7.381z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M23.686 17.6c-.495-.685-1.129-1.237-2.518-1.433.521.239 1.02 1.064 1.086 1.52.065.456.13.825-.282.369-1.653-1.827-3.452-1.107-5.236-2.223-1.246-.779-1.625-1.641-1.625-1.641s-.152 1.151-2.041 2.323c-.548.34-1.201 1.097-1.563 2.214-.261.803-.18 1.52-.18 2.744 0 3.574 2.945 6.578 6.578 6.578s6.578-3.031 6.578-6.578c0-2.223-.233-3.092-.797-3.873z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.636 23.3h-1.462c-.202 0-.365-.163-.365-.365s.163-.365.365-.365h1.462c.202 0 .365.163.365.365s-.163.365-.365.365z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.981 20.742c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731.404 0 .731.327.731.731v.731c0 .403-.327.731-.731.731zm5.848 0c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731s.731.327.731.731v.731c-.001.403-.328.731-.731.731z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.001 26.352c-2.112 0-2.76-.541-2.869-.65-.196-.196-.196-.514 0-.711.19-.19.495-.195.692-.018.04.028.553.374 2.177.374 1.687 0 2.175-.372 2.179-.376.196-.195.504-.186.7.011.196.196.186.523-.011.72-.107.109-.756.65-2.868.65" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 18V6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12h18zM12.943 30.461l-4.34.737c-.253.043-.493-.144-.533-.416l-.146-.988c-.04-.272.134-.529.388-.572l4.34-.737c.253-.043.493.144.534.416l.146.988c.039.271-.135.529-.389.572zm10.138 0l4.34.737c.253.043.493-.144.534-.416l.146-.988c.04-.272-.134-.529-.388-.572l-4.34-.737c-.253-.043-.493.144-.534.416l-.146.988c-.04.271.135.529.388.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9.414 6.113 9.414S24.125 18 24.125 18H25s-.307 10.461-7 10.461S11 18 11 18h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 31h1v5h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M29.192 36v-1c0-3.314-2.686-6-6-6H11.808c-2.761 0-5 2.239-5 5v2h22.384z"/>
|
||||
<path fill="#292F33" d="M9 18c0 4.971 4.029 5 9 5s9-.029 9-5c0-.153-4.563-.998-9-1-4.562-.002-9 .843-9 1z"/>
|
||||
<path fill="#F7DECE" d="M14.587 29.169l3.414 1.493 3.415-1.493v-3.415h-6.829z"/>
|
||||
<path fill="#EEC2AD" d="M14.587 27.558c1.038 1.173 2.011 1.467 3.411 1.467 1.399 0 2.379-.295 3.418-1.467v-3.414h-6.829v3.414z"/>
|
||||
<path fill="#292F33" d="M20.76 9.97c-1.476-.478-4.95-.347-5.818.782-2.258.043-4.907 2.084-5.254 4.776-.344 2.665.422 3.902.695 5.905.309 2.27 1.585 2.996 2.605 3.3 1.468 1.939 3.028 1.856 5.648 1.856 5.116 0 7.553-3.423 7.769-9.238.13-3.517-1.934-6.18-5.645-7.381z"/>
|
||||
<path fill="#F7DECE" d="M23.686 17.6c-.495-.685-1.129-1.237-2.518-1.433.521.239 1.02 1.064 1.086 1.52.065.456.13.825-.282.369-1.653-1.827-3.452-1.107-5.236-2.223-1.246-.779-1.625-1.641-1.625-1.641s-.152 1.151-2.041 2.323c-.548.34-1.201 1.097-1.563 2.214-.261.803-.18 1.52-.18 2.744 0 3.574 2.945 6.578 6.578 6.578s6.578-3.031 6.578-6.578c0-2.223-.233-3.092-.797-3.873z"/>
|
||||
<path fill="#C1694F" d="M18.636 23.3h-1.462c-.202 0-.365-.163-.365-.365s.163-.365.365-.365h1.462c.202 0 .365.163.365.365s-.163.365-.365.365z"/>
|
||||
<path fill="#662113" d="M14.981 20.742c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731.404 0 .731.327.731.731v.731c0 .403-.327.731-.731.731zm5.848 0c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731s.731.327.731.731v.731c-.001.403-.328.731-.731.731z"/>
|
||||
<path fill="#C1694F" d="M18.001 26.352c-2.112 0-2.76-.541-2.869-.65-.196-.196-.196-.514 0-.711.19-.19.495-.195.692-.018.04.028.553.374 2.177.374 1.687 0 2.175-.372 2.179-.376.196-.195.504-.186.7.011.196.196.186.523-.011.72-.107.109-.756.65-2.868.65"/>
|
||||
<path fill="#292F33" d="M27 18V6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12h18zM12.943 30.461l-4.34.737c-.253.043-.493-.144-.533-.416l-.146-.988c-.04-.272.134-.529.388-.572l4.34-.737c.253-.043.493.144.534.416l.146.988c.039.271-.135.529-.389.572zm10.138 0l4.34.737c.253.043.493-.144.534-.416l.146-.988c.04-.272-.134-.529-.388-.572l-4.34-.737c-.253-.043-.493.144-.534.416l-.146.988c-.04.271.135.529.388.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9.414 6.113 9.414S24.125 18 24.125 18H25s-.307 10.461-7 10.461S11 18 11 18h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 31h1v5h-1z"/>
|
||||
<path fill="#292F33" d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.6 KiB |
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 30h1v6h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z"/>
|
||||
<path fill="#292F33" d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z"/>
|
||||
<path fill="#FFE51E" d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z"/>
|
||||
<path fill="#F3D2A2" d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z"/>
|
||||
<path fill="#DF1F32" d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z"/>
|
||||
<path fill="#662113" d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z"/>
|
||||
<path fill="#C1694F" d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z"/>
|
||||
<path fill="#292F33" d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 30h1v6h-1z"/>
|
||||
<path fill="#292F33" d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M30 36v-1c0-3.313-1.687-6-5-6H11c-3.313 0-5 2.687-5 6v1h24z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.626 29.456c1.344.976 2.195 1.194 3.36 1.194s2.016-.218 3.36-1.194v-2.938h-6.721v2.938z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.62 27.816c.938 1.059 2.1 1.345 3.364 1.345 1.264 0 2.426-.287 3.364-1.345v-2.691H14.62v2.691z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M25.565 20.08c0-1.116-.565-2.021-1.263-2.021-.064 0-.125.015-.186.03-.009-.03-.016-.06-.026-.089H11.883c-.01.029-.016.059-.026.089-.061-.015-.123-.03-.186-.03-.698 0-1.263.905-1.263 2.021 0 1.025.479 1.863 1.097 1.994.489 3.734 3.201 6.595 6.482 6.595s5.993-2.861 6.482-6.595c.618-.132 1.096-.969 1.096-1.994z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.987 26.143c-2.123 0-2.774-.544-2.884-.653-.197-.197-.197-.517 0-.714.191-.191.497-.197.695-.018.04.029.556.376 2.188.376 1.695 0 2.186-.374 2.191-.377.197-.196.506-.187.704.01.197.197.187.527-.011.724-.109.108-.761.652-2.883.652zm.578-3.123h-1.156c-.318 0-.578-.26-.578-.578 0-.318.26-.578.578-.578h1.156c.318 0 .578.26.578.578 0 .318-.261.578-.578.578z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.904 20.9c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c-.001.424-.348.771-.771.771zm6.165 0c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c0 .424-.347.771-.771.771z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M12.578 30.461l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm10.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 31h1v5h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M30 36v-1c0-3.313-1.687-6-5-6H11c-3.313 0-5 2.687-5 6v1h24z"/>
|
||||
<path fill="#292F33" d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z"/>
|
||||
<path fill="#F3D2A2" d="M14.626 29.456c1.344.976 2.195 1.194 3.36 1.194s2.016-.218 3.36-1.194v-2.938h-6.721v2.938z"/>
|
||||
<path fill="#E2C196" d="M14.62 27.816c.938 1.059 2.1 1.345 3.364 1.345 1.264 0 2.426-.287 3.364-1.345v-2.691H14.62v2.691z"/>
|
||||
<path fill="#F3D2A2" d="M25.565 20.08c0-1.116-.565-2.021-1.263-2.021-.064 0-.125.015-.186.03-.009-.03-.016-.06-.026-.089H11.883c-.01.029-.016.059-.026.089-.061-.015-.123-.03-.186-.03-.698 0-1.263.905-1.263 2.021 0 1.025.479 1.863 1.097 1.994.489 3.734 3.201 6.595 6.482 6.595s5.993-2.861 6.482-6.595c.618-.132 1.096-.969 1.096-1.994z"/>
|
||||
<path fill="#C1694F" d="M17.987 26.143c-2.123 0-2.774-.544-2.884-.653-.197-.197-.197-.517 0-.714.191-.191.497-.197.695-.018.04.029.556.376 2.188.376 1.695 0 2.186-.374 2.191-.377.197-.196.506-.187.704.01.197.197.187.527-.011.724-.109.108-.761.652-2.883.652zm.578-3.123h-1.156c-.318 0-.578-.26-.578-.578 0-.318.26-.578.578-.578h1.156c.318 0 .578.26.578.578 0 .318-.261.578-.578.578z"/>
|
||||
<path fill="#662113" d="M14.904 20.9c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c-.001.424-.348.771-.771.771zm6.165 0c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c0 .424-.347.771-.771.771z"/>
|
||||
<path fill="#292F33" d="M12.578 30.461l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm10.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 31h1v5h-1z"/>
|
||||
<path fill="#292F33" d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M29.192 36v-1c0-3.314-2.686-6-6-6H11.808c-2.761 0-5 2.239-5 5v2h22.384z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M9 18c0 4.971 4.029 5 9 5s9-.029 9-5c0-.153-4.563-.998-9-1-4.562-.002-9 .843-9 1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.587 29.169l3.414 1.493 3.415-1.493v-3.415h-6.829z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.587 27.558c1.038 1.173 2.011 1.467 3.411 1.467 1.399 0 2.379-.295 3.418-1.467v-3.414h-6.829v3.414z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M20.76 9.97c-1.476-.478-4.95-.347-5.818.782-2.258.043-4.907 2.084-5.254 4.776-.344 2.665.422 3.902.695 5.905.309 2.27 1.585 2.996 2.605 3.3 1.468 1.939 3.028 1.856 5.648 1.856 5.116 0 7.553-3.423 7.769-9.238.13-3.517-1.934-6.18-5.645-7.381z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M23.686 17.6c-.495-.685-1.129-1.237-2.518-1.433.521.239 1.02 1.064 1.086 1.52.065.456.13.825-.282.369-1.653-1.827-3.452-1.107-5.236-2.223-1.246-.779-1.625-1.641-1.625-1.641s-.152 1.151-2.041 2.323c-.548.34-1.201 1.097-1.563 2.214-.261.803-.18 1.52-.18 2.744 0 3.574 2.945 6.578 6.578 6.578s6.578-3.031 6.578-6.578c0-2.223-.233-3.092-.797-3.873z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.636 23.3h-1.462c-.202 0-.365-.163-.365-.365s.163-.365.365-.365h1.462c.202 0 .365.163.365.365s-.163.365-.365.365z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.981 20.742c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731.404 0 .731.327.731.731v.731c0 .403-.327.731-.731.731zm5.848 0c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731s.731.327.731.731v.731c-.001.403-.328.731-.731.731z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.001 26.352c-2.112 0-2.76-.541-2.869-.65-.196-.196-.196-.514 0-.711.19-.19.495-.195.692-.018.04.028.553.374 2.177.374 1.687 0 2.175-.372 2.179-.376.196-.195.504-.186.7.011.196.196.186.523-.011.72-.107.109-.756.65-2.868.65" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 18V6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12h18zM12.943 30.461l-4.34.737c-.253.043-.493-.144-.533-.416l-.146-.988c-.04-.272.134-.529.388-.572l4.34-.737c.253-.043.493.144.534.416l.146.988c.039.271-.135.529-.389.572zm10.138 0l4.34.737c.253.043.493-.144.534-.416l.146-.988c.04-.272-.134-.529-.388-.572l-4.34-.737c-.253-.043-.493.144-.534.416l-.146.988c-.04.271.135.529.388.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9.414 6.113 9.414S24.125 18 24.125 18H25s-.307 10.461-7 10.461S11 18 11 18h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 31h1v5h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M29.192 36v-1c0-3.314-2.686-6-6-6H11.808c-2.761 0-5 2.239-5 5v2h22.384z"/>
|
||||
<path fill="#292F33" d="M9 18c0 4.971 4.029 5 9 5s9-.029 9-5c0-.153-4.563-.998-9-1-4.562-.002-9 .843-9 1z"/>
|
||||
<path fill="#F3D2A2" d="M14.587 29.169l3.414 1.493 3.415-1.493v-3.415h-6.829z"/>
|
||||
<path fill="#E2C196" d="M14.587 27.558c1.038 1.173 2.011 1.467 3.411 1.467 1.399 0 2.379-.295 3.418-1.467v-3.414h-6.829v3.414z"/>
|
||||
<path fill="#FFE51E" d="M20.76 9.97c-1.476-.478-4.95-.347-5.818.782-2.258.043-4.907 2.084-5.254 4.776-.344 2.665.422 3.902.695 5.905.309 2.27 1.585 2.996 2.605 3.3 1.468 1.939 3.028 1.856 5.648 1.856 5.116 0 7.553-3.423 7.769-9.238.13-3.517-1.934-6.18-5.645-7.381z"/>
|
||||
<path fill="#F3D2A2" d="M23.686 17.6c-.495-.685-1.129-1.237-2.518-1.433.521.239 1.02 1.064 1.086 1.52.065.456.13.825-.282.369-1.653-1.827-3.452-1.107-5.236-2.223-1.246-.779-1.625-1.641-1.625-1.641s-.152 1.151-2.041 2.323c-.548.34-1.201 1.097-1.563 2.214-.261.803-.18 1.52-.18 2.744 0 3.574 2.945 6.578 6.578 6.578s6.578-3.031 6.578-6.578c0-2.223-.233-3.092-.797-3.873z"/>
|
||||
<path fill="#C1694F" d="M18.636 23.3h-1.462c-.202 0-.365-.163-.365-.365s.163-.365.365-.365h1.462c.202 0 .365.163.365.365s-.163.365-.365.365z"/>
|
||||
<path fill="#662113" d="M14.981 20.742c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731.404 0 .731.327.731.731v.731c0 .403-.327.731-.731.731zm5.848 0c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731s.731.327.731.731v.731c-.001.403-.328.731-.731.731z"/>
|
||||
<path fill="#C1694F" d="M18.001 26.352c-2.112 0-2.76-.541-2.869-.65-.196-.196-.196-.514 0-.711.19-.19.495-.195.692-.018.04.028.553.374 2.177.374 1.687 0 2.175-.372 2.179-.376.196-.195.504-.186.7.011.196.196.186.523-.011.72-.107.109-.756.65-2.868.65"/>
|
||||
<path fill="#292F33" d="M27 18V6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12h18zM12.943 30.461l-4.34.737c-.253.043-.493-.144-.533-.416l-.146-.988c-.04-.272.134-.529.388-.572l4.34-.737c.253-.043.493.144.534.416l.146.988c.039.271-.135.529-.389.572zm10.138 0l4.34.737c.253.043.493-.144.534-.416l.146-.988c.04-.272-.134-.529-.388-.572l-4.34-.737c-.253-.043-.493.144-.534.416l-.146.988c-.04.271.135.529.388.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9.414 6.113 9.414S24.125 18 24.125 18H25s-.307 10.461-7 10.461S11 18 11 18h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 31h1v5h-1z"/>
|
||||
<path fill="#292F33" d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.6 KiB |
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 30h1v6h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z"/>
|
||||
<path fill="#292F33" d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z"/>
|
||||
<path fill="#963B22" d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z"/>
|
||||
<path fill="#D5AB88" d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z"/>
|
||||
<path fill="#DF1F32" d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z"/>
|
||||
<path fill="#662113" d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z"/>
|
||||
<path fill="#C1694F" d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z"/>
|
||||
<path fill="#292F33" d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 30h1v6h-1z"/>
|
||||
<path fill="#292F33" d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M30 36v-1c0-3.313-1.687-6-5-6H11c-3.313 0-5 2.687-5 6v1h24z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.626 29.456c1.344.976 2.195 1.194 3.36 1.194s2.016-.218 3.36-1.194v-2.938h-6.721v2.938z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.62 27.816c.938 1.059 2.1 1.345 3.364 1.345 1.264 0 2.426-.287 3.364-1.345v-2.691H14.62v2.691z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M25.565 20.08c0-1.116-.565-2.021-1.263-2.021-.064 0-.125.015-.186.03-.009-.03-.016-.06-.026-.089H11.883c-.01.029-.016.059-.026.089-.061-.015-.123-.03-.186-.03-.698 0-1.263.905-1.263 2.021 0 1.025.479 1.863 1.097 1.994.489 3.734 3.201 6.595 6.482 6.595s5.993-2.861 6.482-6.595c.618-.132 1.096-.969 1.096-1.994z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.987 26.143c-2.123 0-2.774-.544-2.884-.653-.197-.197-.197-.517 0-.714.191-.191.497-.197.695-.018.04.029.556.376 2.188.376 1.695 0 2.186-.374 2.191-.377.197-.196.506-.187.704.01.197.197.187.527-.011.724-.109.108-.761.652-2.883.652zm.578-3.123h-1.156c-.318 0-.578-.26-.578-.578 0-.318.26-.578.578-.578h1.156c.318 0 .578.26.578.578 0 .318-.261.578-.578.578z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.904 20.9c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c-.001.424-.348.771-.771.771zm6.165 0c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c0 .424-.347.771-.771.771z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M12.578 30.461l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm10.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 31h1v5h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M30 36v-1c0-3.313-1.687-6-5-6H11c-3.313 0-5 2.687-5 6v1h24z"/>
|
||||
<path fill="#292F33" d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z"/>
|
||||
<path fill="#D5AB88" d="M14.626 29.456c1.344.976 2.195 1.194 3.36 1.194s2.016-.218 3.36-1.194v-2.938h-6.721v2.938z"/>
|
||||
<path fill="#CC9B7A" d="M14.62 27.816c.938 1.059 2.1 1.345 3.364 1.345 1.264 0 2.426-.287 3.364-1.345v-2.691H14.62v2.691z"/>
|
||||
<path fill="#D5AB88" d="M25.565 20.08c0-1.116-.565-2.021-1.263-2.021-.064 0-.125.015-.186.03-.009-.03-.016-.06-.026-.089H11.883c-.01.029-.016.059-.026.089-.061-.015-.123-.03-.186-.03-.698 0-1.263.905-1.263 2.021 0 1.025.479 1.863 1.097 1.994.489 3.734 3.201 6.595 6.482 6.595s5.993-2.861 6.482-6.595c.618-.132 1.096-.969 1.096-1.994z"/>
|
||||
<path fill="#C1694F" d="M17.987 26.143c-2.123 0-2.774-.544-2.884-.653-.197-.197-.197-.517 0-.714.191-.191.497-.197.695-.018.04.029.556.376 2.188.376 1.695 0 2.186-.374 2.191-.377.197-.196.506-.187.704.01.197.197.187.527-.011.724-.109.108-.761.652-2.883.652zm.578-3.123h-1.156c-.318 0-.578-.26-.578-.578 0-.318.26-.578.578-.578h1.156c.318 0 .578.26.578.578 0 .318-.261.578-.578.578z"/>
|
||||
<path fill="#662113" d="M14.904 20.9c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c-.001.424-.348.771-.771.771zm6.165 0c-.424 0-.771-.347-.771-.771v-.771c0-.424.347-.771.771-.771.424 0 .771.347.771.771v.771c0 .424-.347.771-.771.771z"/>
|
||||
<path fill="#292F33" d="M12.578 30.461l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm10.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 31h1v5h-1z"/>
|
||||
<path fill="#292F33" d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |
@ -1,31 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M29.192 36v-1c0-3.314-2.686-6-6-6H11.808c-2.761 0-5 2.239-5 5v2h22.384z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M9 18c0 4.971 4.029 5 9 5s9-.029 9-5c0-.153-4.563-.998-9-1-4.562-.002-9 .843-9 1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.587 29.169l3.414 1.493 3.415-1.493v-3.415h-6.829z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.587 27.558c1.038 1.173 2.011 1.467 3.411 1.467 1.399 0 2.379-.295 3.418-1.467v-3.414h-6.829v3.414z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M20.76 9.97c-1.476-.478-4.95-.347-5.818.782-2.258.043-4.907 2.084-5.254 4.776-.344 2.665.422 3.902.695 5.905.309 2.27 1.585 2.996 2.605 3.3 1.468 1.939 3.028 1.856 5.648 1.856 5.116 0 7.553-3.423 7.769-9.238.13-3.517-1.934-6.18-5.645-7.381z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M23.686 17.6c-.495-.685-1.129-1.237-2.518-1.433.521.239 1.02 1.064 1.086 1.52.065.456.13.825-.282.369-1.653-1.827-3.452-1.107-5.236-2.223-1.246-.779-1.625-1.641-1.625-1.641s-.152 1.151-2.041 2.323c-.548.34-1.201 1.097-1.563 2.214-.261.803-.18 1.52-.18 2.744 0 3.574 2.945 6.578 6.578 6.578s6.578-3.031 6.578-6.578c0-2.223-.233-3.092-.797-3.873z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.636 23.3h-1.462c-.202 0-.365-.163-.365-.365s.163-.365.365-.365h1.462c.202 0 .365.163.365.365s-.163.365-.365.365z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M14.981 20.742c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731.404 0 .731.327.731.731v.731c0 .403-.327.731-.731.731zm5.848 0c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731s.731.327.731.731v.731c-.001.403-.328.731-.731.731z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.001 26.352c-2.112 0-2.76-.541-2.869-.65-.196-.196-.196-.514 0-.711.19-.19.495-.195.692-.018.04.028.553.374 2.177.374 1.687 0 2.175-.372 2.179-.376.196-.195.504-.186.7.011.196.196.186.523-.011.72-.107.109-.756.65-2.868.65" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 18V6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12h18zM12.943 30.461l-4.34.737c-.253.043-.493-.144-.533-.416l-.146-.988c-.04-.272.134-.529.388-.572l4.34-.737c.253-.043.493.144.534.416l.146.988c.039.271-.135.529-.389.572zm10.138 0l4.34.737c.253.043.493-.144.534-.416l.146-.988c.04-.272-.134-.529-.388-.572l-4.34-.737c-.253-.043-.493.144-.534.416l-.146.988c-.04.271.135.529.388.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9.414 6.113 9.414S24.125 18 24.125 18H25s-.307 10.461-7 10.461S11 18 11 18h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 31h1v5h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M29.192 36v-1c0-3.314-2.686-6-6-6H11.808c-2.761 0-5 2.239-5 5v2h22.384z"/>
|
||||
<path fill="#292F33" d="M9 18c0 4.971 4.029 5 9 5s9-.029 9-5c0-.153-4.563-.998-9-1-4.562-.002-9 .843-9 1z"/>
|
||||
<path fill="#D4AB88" d="M14.587 29.169l3.414 1.493 3.415-1.493v-3.415h-6.829z"/>
|
||||
<path fill="#CC9B7A" d="M14.587 27.558c1.038 1.173 2.011 1.467 3.411 1.467 1.399 0 2.379-.295 3.418-1.467v-3.414h-6.829v3.414z"/>
|
||||
<path fill="#963B22" d="M20.76 9.97c-1.476-.478-4.95-.347-5.818.782-2.258.043-4.907 2.084-5.254 4.776-.344 2.665.422 3.902.695 5.905.309 2.27 1.585 2.996 2.605 3.3 1.468 1.939 3.028 1.856 5.648 1.856 5.116 0 7.553-3.423 7.769-9.238.13-3.517-1.934-6.18-5.645-7.381z"/>
|
||||
<path fill="#D4AB88" d="M23.686 17.6c-.495-.685-1.129-1.237-2.518-1.433.521.239 1.02 1.064 1.086 1.52.065.456.13.825-.282.369-1.653-1.827-3.452-1.107-5.236-2.223-1.246-.779-1.625-1.641-1.625-1.641s-.152 1.151-2.041 2.323c-.548.34-1.201 1.097-1.563 2.214-.261.803-.18 1.52-.18 2.744 0 3.574 2.945 6.578 6.578 6.578s6.578-3.031 6.578-6.578c0-2.223-.233-3.092-.797-3.873z"/>
|
||||
<path fill="#C1694F" d="M18.636 23.3h-1.462c-.202 0-.365-.163-.365-.365s.163-.365.365-.365h1.462c.202 0 .365.163.365.365s-.163.365-.365.365z"/>
|
||||
<path fill="#662113" d="M14.981 20.742c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731.404 0 .731.327.731.731v.731c0 .403-.327.731-.731.731zm5.848 0c-.404 0-.731-.327-.731-.731v-.731c0-.404.327-.731.731-.731s.731.327.731.731v.731c-.001.403-.328.731-.731.731z"/>
|
||||
<path fill="#C1694F" d="M18.001 26.352c-2.112 0-2.76-.541-2.869-.65-.196-.196-.196-.514 0-.711.19-.19.495-.195.692-.018.04.028.553.374 2.177.374 1.687 0 2.175-.372 2.179-.376.196-.195.504-.186.7.011.196.196.186.523-.011.72-.107.109-.756.65-2.868.65"/>
|
||||
<path fill="#292F33" d="M27 18V6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12h18zM12.943 30.461l-4.34.737c-.253.043-.493-.144-.533-.416l-.146-.988c-.04-.272.134-.529.388-.572l4.34-.737c.253-.043.493.144.534.416l.146.988c.039.271-.135.529-.389.572zm10.138 0l4.34.737c.253.043.493-.144.534-.416l.146-.988c.04-.272-.134-.529-.388-.572l-4.34-.737c-.253-.043-.493.144-.534.416l-.146.988c-.04.271.135.529.388.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9.414 6.113 9.414S24.125 18 24.125 18H25s-.307 10.461-7 10.461S11 18 11 18h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 31h1v5h-1z"/>
|
||||
<path fill="#292F33" d="M21.38 27.816C21.38 29.391 19.144 30 18 30s-3.38-.609-3.38-2.184c0 0-.62-.127-.62 1.184s1.888 3 4 3 4-1.689 4-3-.62-1.184-.62-1.184z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 5.6 KiB |
@ -1,27 +0,0 @@
|
||||
<?xml version="1.0"?>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2 -2 40 40" style="background: black;">
|
||||
<g>
|
||||
<path d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M17.5 30h1v6h-1z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
<path d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z" stroke="white" stroke-linejoin="round" stroke-width="4px"/>
|
||||
</g>
|
||||
<path fill="#DD2E44" d="M28 36v-2.5c0-3.313-1.687-5.5-5-5.5H13c-3.313 0-5 2.187-5 5.5V36h20z"/>
|
||||
<path fill="#292F33" d="M27 6c0-3.3-2.7-6-6-6h-6c-3.3 0-6 2.7-6 6v12c0 4.971 4.029 5 9 5s9-.029 9-5V6z"/>
|
||||
<path fill="#60352A" d="M18 18H9.679s-.016 1.731.01 2.844c.06 2.517.342 5.496 1.539 5.496 1.594 0 3.616-1.549 6.715-1.549 3.099 0 5.166 1.549 6.715 1.549 1.293 0 1.506-1.09 1.542-5.345.008-.846.009-2.995.009-2.995H18z"/>
|
||||
<path fill="#AF7E57" d="M24.94 18.883c0-.298-.013-.592-.035-.883H10.983c-.022.291-.035.585-.035.883 0 3.545 1.598 6.483 3.915 7.881v1.749c1.249.907 2.041 1.153 3.124 1.153 1.083 0 1.874-.246 3.124-1.153v-1.799c2.27-1.418 3.829-4.329 3.829-7.831z"/>
|
||||
<path fill="#DF1F32" d="M17.944 25.551c-1.368 0-2.084-.676-2.161-.754-.228-.228-.228-.597 0-.824.226-.225.59-.227.819-.006.03.027.47.418 1.342.418.885 0 1.325-.402 1.344-.419.232-.218.599-.211.821.017.221.229.221.589-.003.814-.078.077-.794.754-2.162.754z"/>
|
||||
<path fill="#60352A" d="M15.17 20.731h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652zm5.764 0h-.137c-.358 0-.652-.293-.652-.652v-.858c0-.358.293-.652.652-.652h.137c.358 0 .652.293.652.652v.858c0 .359-.293.652-.652.652z"/>
|
||||
<path fill="#915A34" d="M18.679 22.958h-1.391c-.212 0-.385-.173-.385-.385v-.081c0-.212.173-.385.385-.385h1.391c.212 0 .385.173.385.385v.081c0 .212-.173.385-.385.385z"/>
|
||||
<path fill="#292F33" d="M13.578 29.492l-4.653.737c-.272.043-.529-.144-.572-.416l-.156-.988c-.043-.272.144-.529.416-.572l4.653-.737c.272-.043.529.144.572.416l.156.988c.043.271-.144.529-.416.572zm8.87 0l4.653.737c.272.043.529-.144.572-.416l.156-.988c.043-.272-.144-.529-.416-.572l-4.653-.737c-.272-.043-.529.144-.572.416l-.156.988c-.043.271.144.529.416.572z"/>
|
||||
<path fill="#99AAB5" d="M11.875 18s-.174 9 6.113 9 6.137-9 6.137-9H25s-.307 10-7 10-7-10-7-10h.875z"/>
|
||||
<path fill="#F5F8FA" d="M17.5 30h1v6h-1z"/>
|
||||
<path fill="#292F33" d="M21.13 26.971c0 1.459-2.071 2.022-3.13 2.022-1 0-3.13-.563-3.13-2.022 0 0-.574-.117-.574 1.096 0 1.214 1.704 2.778 3.704 2.778 1.956 0 3.704-1.564 3.704-2.778 0-1.213-.574-1.096-.574-1.096z"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 4.8 KiB |