Merge branch 'features/mild-master' of https://github.com/YoheiZuho/mastodon into features/material-theme
@ -4,7 +4,25 @@ update_configs:
|
||||
- package_manager: "ruby:bundler"
|
||||
directory: "/"
|
||||
update_schedule: "weekly"
|
||||
# Supported update schedule: live daily weekly monthly
|
||||
version_requirement_updates: "auto"
|
||||
# Supported version requirements: auto widen_ranges increase_versions increase_versions_if_necessary
|
||||
allowed_updates:
|
||||
- match:
|
||||
dependency_type: "all"
|
||||
# Supported dependency types: all indirect direct production development
|
||||
update_type: "all"
|
||||
# Supported update types: all security
|
||||
|
||||
- package_manager: "javascript"
|
||||
directory: "/"
|
||||
update_schedule: "weekly"
|
||||
# Supported update schedule: live daily weekly monthly
|
||||
version_requirement_updates: "auto"
|
||||
# Supported version requirements: auto widen_ranges increase_versions increase_versions_if_necessary
|
||||
allowed_updates:
|
||||
- match:
|
||||
dependency_type: "all"
|
||||
# Supported dependency types: all indirect direct production development
|
||||
update_type: "all"
|
||||
# Supported update types: all security
|
||||
|
2
.gitignore
vendored
@ -58,7 +58,7 @@ yarn-error.log
|
||||
yarn-debug.log
|
||||
|
||||
# Ignore vagrant log files
|
||||
ubuntu-xenial-16.04-cloudimg-console.log
|
||||
*-cloudimg-console.log
|
||||
|
||||
# Ignore Docker option files
|
||||
docker-compose.override.yml
|
||||
|
6
Gemfile
@ -133,7 +133,7 @@ end
|
||||
|
||||
group :development do
|
||||
gem 'active_record_query_trace', '~> 1.7'
|
||||
gem 'annotate', '~> 3.0'
|
||||
gem 'annotate', '~> 3.1'
|
||||
gem 'better_errors', '~> 2.6'
|
||||
gem 'binding_of_caller', '~> 0.7'
|
||||
gem 'bullet', '~> 6.1'
|
||||
@ -141,11 +141,11 @@ group :development do
|
||||
gem 'letter_opener_web', '~> 1.4'
|
||||
gem 'memory_profiler'
|
||||
gem 'rubocop', '~> 0.79', require: false
|
||||
gem 'rubocop-rails', '~> 2.4', require: false
|
||||
gem 'rubocop-rails', '~> 2.5', require: false
|
||||
gem 'brakeman', '~> 4.8', require: false
|
||||
gem 'bundler-audit', '~> 0.6', require: false
|
||||
|
||||
gem 'capistrano', '~> 3.12'
|
||||
gem 'capistrano', '~> 3.13'
|
||||
gem 'capistrano-rails', '~> 1.4'
|
||||
gem 'capistrano-rbenv', '~> 2.1'
|
||||
gem 'capistrano-yarn', '~> 2.0'
|
||||
|
76
Gemfile.lock
@ -82,7 +82,7 @@ GEM
|
||||
public_suffix (>= 2.0.2, < 5.0)
|
||||
airbrussh (1.4.0)
|
||||
sshkit (>= 1.6.1, != 1.7.0)
|
||||
annotate (3.0.3)
|
||||
annotate (3.1.1)
|
||||
activerecord (>= 3.2, < 7.0)
|
||||
rake (>= 10.4, < 14.0)
|
||||
arel (9.0.0)
|
||||
@ -91,23 +91,23 @@ GEM
|
||||
encryptor (~> 3.0.0)
|
||||
av (0.9.0)
|
||||
cocaine (~> 0.5.3)
|
||||
aws-eventstream (1.0.3)
|
||||
aws-partitions (1.286.0)
|
||||
aws-sdk-core (3.92.0)
|
||||
aws-eventstream (~> 1.0, >= 1.0.2)
|
||||
aws-eventstream (1.1.0)
|
||||
aws-partitions (1.296.0)
|
||||
aws-sdk-core (3.94.0)
|
||||
aws-eventstream (~> 1, >= 1.0.2)
|
||||
aws-partitions (~> 1, >= 1.239.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
jmespath (~> 1.0)
|
||||
aws-sdk-kms (1.30.0)
|
||||
aws-sdk-core (~> 3, >= 3.71.0)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sdk-s3 (1.61.1)
|
||||
aws-sdk-s3 (1.61.2)
|
||||
aws-sdk-core (~> 3, >= 3.83.0)
|
||||
aws-sdk-kms (~> 1)
|
||||
aws-sigv4 (~> 1.1)
|
||||
aws-sigv4 (1.1.1)
|
||||
aws-sigv4 (1.1.2)
|
||||
aws-eventstream (~> 1.0, >= 1.0.2)
|
||||
bcrypt (3.1.12)
|
||||
bcrypt (3.1.13)
|
||||
better_errors (2.6.0)
|
||||
coderay (>= 1.0.0)
|
||||
erubi (>= 1.0.0)
|
||||
@ -128,14 +128,13 @@ GEM
|
||||
bundler (>= 1.2.0, < 3)
|
||||
thor (~> 0.18)
|
||||
byebug (11.1.1)
|
||||
capistrano (3.12.1)
|
||||
capistrano (3.13.0)
|
||||
airbrussh (>= 1.0.0)
|
||||
i18n
|
||||
rake (>= 10.0.0)
|
||||
sshkit (>= 1.9.0)
|
||||
capistrano-bundler (1.3.0)
|
||||
capistrano-bundler (1.6.0)
|
||||
capistrano (~> 3.1)
|
||||
sshkit (~> 1.2)
|
||||
capistrano-rails (1.4.0)
|
||||
capistrano (~> 3.1)
|
||||
capistrano-bundler (~> 1.1)
|
||||
@ -202,25 +201,25 @@ GEM
|
||||
dotenv (= 2.7.5)
|
||||
railties (>= 3.2, < 6.1)
|
||||
e2mmap (0.1.0)
|
||||
elasticsearch (7.5.0)
|
||||
elasticsearch-api (= 7.5.0)
|
||||
elasticsearch-transport (= 7.5.0)
|
||||
elasticsearch-api (7.5.0)
|
||||
elasticsearch (7.6.0)
|
||||
elasticsearch-api (= 7.6.0)
|
||||
elasticsearch-transport (= 7.6.0)
|
||||
elasticsearch-api (7.6.0)
|
||||
multi_json
|
||||
elasticsearch-dsl (0.1.8)
|
||||
elasticsearch-transport (7.5.0)
|
||||
faraday (>= 0.14, < 1)
|
||||
elasticsearch-dsl (0.1.9)
|
||||
elasticsearch-transport (7.6.0)
|
||||
faraday (~> 1)
|
||||
multi_json
|
||||
encryptor (3.0.0)
|
||||
equatable (0.6.1)
|
||||
erubi (1.9.0)
|
||||
et-orbi (1.2.3)
|
||||
tzinfo
|
||||
excon (0.71.0)
|
||||
fabrication (2.21.0)
|
||||
excon (0.73.0)
|
||||
fabrication (2.21.1)
|
||||
faker (2.11.0)
|
||||
i18n (>= 1.6, < 2)
|
||||
faraday (0.17.3)
|
||||
faraday (1.0.1)
|
||||
multipart-post (>= 1.2, < 3)
|
||||
fast_blank (1.0.0)
|
||||
fastimage (2.1.7)
|
||||
@ -342,7 +341,7 @@ GEM
|
||||
activesupport (>= 4)
|
||||
railties (>= 4)
|
||||
request_store (~> 1.0)
|
||||
loofah (2.4.0)
|
||||
loofah (2.5.0)
|
||||
crass (~> 1.0.2)
|
||||
nokogiri (>= 1.5.9)
|
||||
mail (2.7.1)
|
||||
@ -376,7 +375,7 @@ GEM
|
||||
nio4r (2.5.2)
|
||||
nokogiri (1.10.9)
|
||||
mini_portile2 (~> 2.4.0)
|
||||
nokogumbo (2.0.1)
|
||||
nokogumbo (2.0.2)
|
||||
nokogiri (~> 1.8, >= 1.8.4)
|
||||
nsa (0.2.7)
|
||||
activesupport (>= 4.2, < 6)
|
||||
@ -408,7 +407,7 @@ GEM
|
||||
parallel (1.19.1)
|
||||
parallel_tests (2.32.0)
|
||||
parallel
|
||||
parser (2.7.0.5)
|
||||
parser (2.7.1.1)
|
||||
ast (~> 2.4.0)
|
||||
parslet (1.8.2)
|
||||
pastel (0.7.3)
|
||||
@ -434,7 +433,7 @@ GEM
|
||||
pry (~> 0.10)
|
||||
pry-rails (0.3.9)
|
||||
pry (>= 0.10.4)
|
||||
public_suffix (4.0.3)
|
||||
public_suffix (4.0.4)
|
||||
puma (4.3.3)
|
||||
nio4r (~> 2.0)
|
||||
pundit (2.1.0)
|
||||
@ -493,25 +492,25 @@ GEM
|
||||
rdf (~> 3.1)
|
||||
redcarpet (3.4.0)
|
||||
redis (4.1.3)
|
||||
redis-actionpack (5.0.2)
|
||||
actionpack (>= 4.0, < 6)
|
||||
redis-rack (>= 1, < 3)
|
||||
redis-actionpack (5.2.0)
|
||||
actionpack (>= 5, < 7)
|
||||
redis-rack (>= 2.1.0, < 3)
|
||||
redis-store (>= 1.1.0, < 2)
|
||||
redis-activesupport (5.0.4)
|
||||
activesupport (>= 3, < 6)
|
||||
redis-store (>= 1.3, < 2)
|
||||
redis-namespace (1.7.0)
|
||||
redis (>= 3.0.4)
|
||||
redis-rack (2.0.4)
|
||||
rack (>= 1.5, < 3)
|
||||
redis-rack (2.1.2)
|
||||
rack (>= 2.0.8, < 3)
|
||||
redis-store (>= 1.2, < 2)
|
||||
redis-rails (5.0.2)
|
||||
redis-actionpack (>= 5.0, < 6)
|
||||
redis-activesupport (>= 5.0, < 6)
|
||||
redis-store (>= 1.2, < 2)
|
||||
redis-store (1.5.0)
|
||||
redis (>= 2.2, < 5)
|
||||
regexp_parser (1.6.0)
|
||||
redis-store (1.8.2)
|
||||
redis (>= 4, < 5)
|
||||
regexp_parser (1.7.0)
|
||||
request_store (1.5.0)
|
||||
rack (>= 1.4)
|
||||
responders (3.0.0)
|
||||
@ -522,7 +521,7 @@ GEM
|
||||
rqrcode (1.1.2)
|
||||
chunky_png (~> 1.0)
|
||||
rqrcode_core (~> 0.1)
|
||||
rqrcode_core (0.1.1)
|
||||
rqrcode_core (0.1.2)
|
||||
rspec-core (3.9.1)
|
||||
rspec-support (~> 3.9.1)
|
||||
rspec-expectations (3.9.1)
|
||||
@ -550,7 +549,8 @@ GEM
|
||||
rainbow (>= 2.2.2, < 4.0)
|
||||
ruby-progressbar (~> 1.7)
|
||||
unicode-display_width (>= 1.4.0, < 1.7)
|
||||
rubocop-rails (2.4.2)
|
||||
rubocop-rails (2.5.2)
|
||||
activesupport
|
||||
rack (>= 1.1)
|
||||
rubocop (>= 0.72.0)
|
||||
ruby-progressbar (1.10.1)
|
||||
@ -667,7 +667,7 @@ DEPENDENCIES
|
||||
active_model_serializers (~> 0.10)
|
||||
active_record_query_trace (~> 1.7)
|
||||
addressable (~> 2.7)
|
||||
annotate (~> 3.0)
|
||||
annotate (~> 3.1)
|
||||
aws-sdk-s3 (~> 1.61)
|
||||
better_errors (~> 2.6)
|
||||
binding_of_caller (~> 0.7)
|
||||
@ -677,7 +677,7 @@ DEPENDENCIES
|
||||
browser
|
||||
bullet (~> 6.1)
|
||||
bundler-audit (~> 0.6)
|
||||
capistrano (~> 3.12)
|
||||
capistrano (~> 3.13)
|
||||
capistrano-rails (~> 1.4)
|
||||
capistrano-rbenv (~> 2.1)
|
||||
capistrano-yarn (~> 2.0)
|
||||
@ -766,7 +766,7 @@ DEPENDENCIES
|
||||
rspec-rails (~> 4.0)
|
||||
rspec-sidekiq (~> 3.0)
|
||||
rubocop (~> 0.79)
|
||||
rubocop-rails (~> 2.4)
|
||||
rubocop-rails (~> 2.5)
|
||||
ruby-progressbar (~> 1.10)
|
||||
sanitize (~> 5.1)
|
||||
sidekiq (~> 6.0)
|
||||
|
@ -80,7 +80,7 @@ A **Vagrant** configuration is included for development purposes.
|
||||
|
||||
Mastodon is **free, open-source software** licensed under **AGPLv3**.
|
||||
|
||||
You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository, or submit translations using Weblate. To get started, take a look at [CONTRIBUTING.md](CONTRIBUTING.md). If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
|
||||
You can open issues for bugs you've found or features you think are missing. You can also submit pull requests to this repository, or submit translations using Crowdin. To get started, take a look at [CONTRIBUTING.md](CONTRIBUTING.md). If your contributions are accepted into Mastodon, you can request to be paid through [our OpenCollective](https://opencollective.com/mastodon).
|
||||
|
||||
**IRC channel**: #mastodon on irc.freenode.net
|
||||
|
||||
|
@ -49,7 +49,7 @@ class ActivityPub::InboxesController < ActivityPub::BaseController
|
||||
ResolveAccountWorker.perform_async(signed_request_account.acct)
|
||||
end
|
||||
|
||||
DeliveryFailureTracker.track_inverse_success!(signed_request_account)
|
||||
DeliveryFailureTracker.reset!(signed_request_account.inbox_url)
|
||||
end
|
||||
|
||||
def process_payload
|
||||
|
@ -19,7 +19,7 @@ module Admin
|
||||
@followers_count = Follow.where(target_account: Account.where(domain: params[:id])).count
|
||||
@reports_count = Report.where(target_account: Account.where(domain: params[:id])).count
|
||||
@blocks_count = Block.where(target_account: Account.where(domain: params[:id])).count
|
||||
@available = DeliveryFailureTracker.available?(Account.select(:shared_inbox_url).where(domain: params[:id]).first&.shared_inbox_url)
|
||||
@available = DeliveryFailureTracker.available?(params[:id])
|
||||
@media_storage = MediaAttachment.where(account: Account.where(domain: params[:id])).sum(:file_file_size)
|
||||
@private_comment = @domain_block&.private_comment
|
||||
@public_comment = @domain_block&.public_comment
|
||||
|
37
app/controllers/settings/pictures_controller.rb
Normal file
@ -0,0 +1,37 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module Settings
|
||||
class PicturesController < BaseController
|
||||
before_action :authenticate_user!
|
||||
before_action :set_account
|
||||
before_action :set_picture
|
||||
|
||||
def destroy
|
||||
if valid_picture
|
||||
account_params = {
|
||||
@picture => nil,
|
||||
(@picture + '_remote_url') => nil,
|
||||
}
|
||||
|
||||
msg = UpdateAccountService.new.call(@account, account_params) ? I18n.t('generic.changes_saved_msg') : nil
|
||||
redirect_to settings_profile_path, notice: msg, status: 303
|
||||
else
|
||||
bad_request
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def set_account
|
||||
@account = current_account
|
||||
end
|
||||
|
||||
def set_picture
|
||||
@picture = params[:id]
|
||||
end
|
||||
|
||||
def valid_picture
|
||||
@picture == 'avatar' || @picture == 'header'
|
||||
end
|
||||
end
|
||||
end
|
@ -10,6 +10,7 @@ class TagsController < ApplicationController
|
||||
before_action :require_signature!, if: -> { request.format == :json && authorized_fetch_mode? }
|
||||
before_action :authenticate_user!, if: :whitelist_mode?
|
||||
before_action :set_tag
|
||||
before_action :set_local
|
||||
before_action :set_body_classes
|
||||
before_action :set_instance_presenter
|
||||
|
||||
@ -24,7 +25,7 @@ class TagsController < ApplicationController
|
||||
format.rss do
|
||||
expires_in 0, public: true
|
||||
|
||||
@statuses = HashtagQueryService.new.call(@tag, filter_params).limit(PAGE_SIZE)
|
||||
@statuses = HashtagQueryService.new.call(@tag, filter_params, nil, @local).limit(PAGE_SIZE)
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
render xml: RSS::TagSerializer.render(@tag, @statuses)
|
||||
@ -33,7 +34,7 @@ class TagsController < ApplicationController
|
||||
format.json do
|
||||
expires_in 3.minutes, public: public_fetch_mode?
|
||||
|
||||
@statuses = HashtagQueryService.new.call(@tag, filter_params, current_account, params[:local]).paginate_by_max_id(PAGE_SIZE, params[:max_id])
|
||||
@statuses = HashtagQueryService.new.call(@tag, filter_params, current_account, @local).paginate_by_max_id(PAGE_SIZE, params[:max_id])
|
||||
@statuses = cache_collection(@statuses, Status)
|
||||
|
||||
render json: collection_presenter, serializer: ActivityPub::CollectionSerializer, adapter: ActivityPub::Adapter, content_type: 'application/activity+json'
|
||||
@ -47,6 +48,10 @@ class TagsController < ApplicationController
|
||||
@tag = Tag.usable.find_normalized!(params[:id])
|
||||
end
|
||||
|
||||
def set_local
|
||||
@local = truthy_param?(:local)
|
||||
end
|
||||
|
||||
def set_body_classes
|
||||
@body_classes = 'with-modals'
|
||||
end
|
||||
|
@ -47,7 +47,7 @@ module Admin::ActionLogsHelper
|
||||
I18n.t('admin.action_logs.deleted_status')
|
||||
end
|
||||
when 'Announcement'
|
||||
truncate(attributes['text'])
|
||||
truncate(attributes['text'].is_a?(Array) ? attributes['text'].last : attributes['text'])
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -105,4 +105,13 @@ module SettingsHelper
|
||||
safe_join([image_tag(account.avatar.url, width: 15, height: 15, alt: display_name(account), class: 'avatar'), content_tag(:span, account.acct, class: 'username')], ' ')
|
||||
end
|
||||
end
|
||||
|
||||
def picture_hint(hint, picture)
|
||||
if picture.original_filename.nil?
|
||||
hint
|
||||
else
|
||||
link = link_to t('generic.delete'), settings_profile_picture_path(picture.name.to_s), data: { method: :delete }
|
||||
safe_join([hint, link], '<br/>'.html_safe)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -113,12 +113,13 @@ export const expandAccountTimeline = (accountId, { maxId, withReplies }
|
||||
export const expandAccountFeaturedTimeline = accountId => expandTimeline(`account:${accountId}:pinned`, `/api/v1/accounts/${accountId}/statuses`, { pinned: true });
|
||||
export const expandAccountMediaTimeline = (accountId, { maxId } = {}) => expandTimeline(`account:${accountId}:media`, `/api/v1/accounts/${accountId}/statuses`, { max_id: maxId, only_media: true, limit: 40 });
|
||||
export const expandListTimeline = (id, { maxId } = {}, done = noOp) => expandTimeline(`list:${id}`, `/api/v1/timelines/list/${id}`, { max_id: maxId }, done);
|
||||
export const expandHashtagTimeline = (hashtag, { maxId, tags } = {}, done = noOp) => {
|
||||
export const expandHashtagTimeline = (hashtag, { maxId, tags, local } = {}, done = noOp) => {
|
||||
return expandTimeline(`hashtag:${hashtag}`, `/api/v1/timelines/tag/${hashtag}`, {
|
||||
max_id: maxId,
|
||||
any: parseTags(tags, 'any'),
|
||||
all: parseTags(tags, 'all'),
|
||||
none: parseTags(tags, 'none'),
|
||||
local: local,
|
||||
}, done);
|
||||
};
|
||||
|
||||
|
@ -68,20 +68,14 @@ class DropdownMenu extends React.PureComponent {
|
||||
handleKeyDown = e => {
|
||||
const items = Array.from(this.node.getElementsByTagName('a'));
|
||||
const index = items.indexOf(document.activeElement);
|
||||
let element;
|
||||
let element = null;
|
||||
|
||||
switch(e.key) {
|
||||
case 'ArrowDown':
|
||||
element = items[index+1];
|
||||
if (element) {
|
||||
element.focus();
|
||||
}
|
||||
element = items[index+1] || items[0];
|
||||
break;
|
||||
case 'ArrowUp':
|
||||
element = items[index-1];
|
||||
if (element) {
|
||||
element.focus();
|
||||
}
|
||||
element = items[index-1] || items[items.length-1];
|
||||
break;
|
||||
case 'Tab':
|
||||
if (e.shiftKey) {
|
||||
@ -89,28 +83,23 @@ class DropdownMenu extends React.PureComponent {
|
||||
} else {
|
||||
element = items[index+1] || items[0];
|
||||
}
|
||||
if (element) {
|
||||
element.focus();
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
}
|
||||
break;
|
||||
case 'Home':
|
||||
element = items[0];
|
||||
if (element) {
|
||||
element.focus();
|
||||
}
|
||||
break;
|
||||
case 'End':
|
||||
element = items[items.length-1];
|
||||
if (element) {
|
||||
element.focus();
|
||||
}
|
||||
break;
|
||||
case 'Escape':
|
||||
this.props.onClose();
|
||||
break;
|
||||
}
|
||||
|
||||
if (element) {
|
||||
element.focus();
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
}
|
||||
}
|
||||
|
||||
handleItemKeyPress = e => {
|
||||
|
@ -4,7 +4,6 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import ImmutablePureComponent from 'react-immutable-pure-component';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
import classNames from 'classnames';
|
||||
import { vote, fetchPoll } from 'mastodon/actions/polls';
|
||||
import Motion from 'mastodon/features/ui/util/optional_motion';
|
||||
import spring from 'react-motion/lib/spring';
|
||||
import escapeTextContentForBrowser from 'escape-html';
|
||||
@ -28,8 +27,9 @@ class Poll extends ImmutablePureComponent {
|
||||
static propTypes = {
|
||||
poll: ImmutablePropTypes.map,
|
||||
intl: PropTypes.object.isRequired,
|
||||
dispatch: PropTypes.func,
|
||||
disabled: PropTypes.bool,
|
||||
refresh: PropTypes.func,
|
||||
onVote: PropTypes.func,
|
||||
};
|
||||
|
||||
state = {
|
||||
@ -100,7 +100,7 @@ class Poll extends ImmutablePureComponent {
|
||||
return;
|
||||
}
|
||||
|
||||
this.props.dispatch(vote(this.props.poll.get('id'), Object.keys(this.state.selected)));
|
||||
this.props.onVote(Object.keys(this.state.selected));
|
||||
};
|
||||
|
||||
handleRefresh = () => {
|
||||
@ -108,7 +108,7 @@ class Poll extends ImmutablePureComponent {
|
||||
return;
|
||||
}
|
||||
|
||||
this.props.dispatch(fetchPoll(this.props.poll.get('id')));
|
||||
this.props.refresh();
|
||||
};
|
||||
|
||||
renderOption (option, optionIndex, showResults) {
|
||||
|
@ -1,8 +1,25 @@
|
||||
import { connect } from 'react-redux';
|
||||
import { debounce } from 'lodash';
|
||||
|
||||
import Poll from 'mastodon/components/poll';
|
||||
import { fetchPoll, vote } from 'mastodon/actions/polls';
|
||||
|
||||
const mapDispatchToProps = (dispatch, { pollId }) => ({
|
||||
refresh: debounce(
|
||||
() => {
|
||||
dispatch(fetchPoll(pollId));
|
||||
},
|
||||
1000,
|
||||
{ leading: true },
|
||||
),
|
||||
|
||||
onVote (choices) {
|
||||
dispatch(vote(pollId, choices));
|
||||
},
|
||||
});
|
||||
|
||||
const mapStateToProps = (state, { pollId }) => ({
|
||||
poll: state.getIn(['polls', pollId]),
|
||||
});
|
||||
|
||||
export default connect(mapStateToProps)(Poll);
|
||||
export default connect(mapStateToProps, mapDispatchToProps)(Poll);
|
||||
|
@ -38,7 +38,7 @@ export default class TimelineContainer extends React.PureComponent {
|
||||
let timeline;
|
||||
|
||||
if (hashtag) {
|
||||
timeline = <HashtagTimeline hashtag={hashtag} />;
|
||||
timeline = <HashtagTimeline hashtag={hashtag} local={local} />;
|
||||
} else {
|
||||
timeline = <PublicTimeline local={local} />;
|
||||
}
|
||||
|
@ -19,6 +19,7 @@ const messages = defineMessages({
|
||||
const mapStateToProps = state => ({
|
||||
accountIds: state.getIn(['user_lists', 'blocks', 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'blocks', 'next']),
|
||||
isLoading: state.getIn(['user_lists', 'blocks', 'isLoading'], true),
|
||||
});
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
@ -31,6 +32,7 @@ class Blocks extends ImmutablePureComponent {
|
||||
shouldUpdateScroll: PropTypes.func,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
hasMore: PropTypes.bool,
|
||||
isLoading: PropTypes.bool,
|
||||
intl: PropTypes.object.isRequired,
|
||||
multiColumn: PropTypes.bool,
|
||||
};
|
||||
@ -44,7 +46,7 @@ class Blocks extends ImmutablePureComponent {
|
||||
}, 300, { leading: true });
|
||||
|
||||
render () {
|
||||
const { intl, accountIds, shouldUpdateScroll, hasMore, multiColumn } = this.props;
|
||||
const { intl, accountIds, shouldUpdateScroll, hasMore, multiColumn, isLoading } = this.props;
|
||||
|
||||
if (!accountIds) {
|
||||
return (
|
||||
@ -63,6 +65,7 @@ class Blocks extends ImmutablePureComponent {
|
||||
scrollKey='blocks'
|
||||
onLoadMore={this.handleLoadMore}
|
||||
hasMore={hasMore}
|
||||
isLoading={isLoading}
|
||||
shouldUpdateScroll={shouldUpdateScroll}
|
||||
emptyMessage={emptyMessage}
|
||||
bindToDocument={!multiColumn}
|
||||
|
@ -50,7 +50,7 @@ class PrivacyDropdownMenu extends React.PureComponent {
|
||||
const index = items.findIndex(item => {
|
||||
return (item.value === value);
|
||||
});
|
||||
let element;
|
||||
let element = null;
|
||||
|
||||
switch(e.key) {
|
||||
case 'Escape':
|
||||
@ -60,18 +60,10 @@ class PrivacyDropdownMenu extends React.PureComponent {
|
||||
this.handleClick(e);
|
||||
break;
|
||||
case 'ArrowDown':
|
||||
element = this.node.childNodes[index + 1];
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.props.onChange(element.getAttribute('data-index'));
|
||||
}
|
||||
element = this.node.childNodes[index + 1] || this.node.firstChild;
|
||||
break;
|
||||
case 'ArrowUp':
|
||||
element = this.node.childNodes[index - 1];
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.props.onChange(element.getAttribute('data-index'));
|
||||
}
|
||||
element = this.node.childNodes[index - 1] || this.node.lastChild;
|
||||
break;
|
||||
case 'Tab':
|
||||
if (e.shiftKey) {
|
||||
@ -79,28 +71,21 @@ class PrivacyDropdownMenu extends React.PureComponent {
|
||||
} else {
|
||||
element = this.node.childNodes[index + 1] || this.node.firstChild;
|
||||
}
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.props.onChange(element.getAttribute('data-index'));
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
}
|
||||
break;
|
||||
case 'Home':
|
||||
element = this.node.firstChild;
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.props.onChange(element.getAttribute('data-index'));
|
||||
}
|
||||
break;
|
||||
case 'End':
|
||||
element = this.node.lastChild;
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.props.onChange(element.getAttribute('data-index'));
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
if (element) {
|
||||
element.focus();
|
||||
this.props.onChange(element.getAttribute('data-index'));
|
||||
e.preventDefault();
|
||||
e.stopPropagation();
|
||||
}
|
||||
}
|
||||
|
||||
handleClick = e => {
|
||||
|
@ -19,6 +19,7 @@ const messages = defineMessages({
|
||||
|
||||
const mapStateToProps = state => ({
|
||||
accountIds: state.getIn(['user_lists', 'follow_requests', 'items']),
|
||||
isLoading: state.getIn(['user_lists', 'follow_requests', 'isLoading'], true),
|
||||
hasMore: !!state.getIn(['user_lists', 'follow_requests', 'next']),
|
||||
locked: !!state.getIn(['accounts', me, 'locked']),
|
||||
domain: state.getIn(['meta', 'domain']),
|
||||
@ -33,6 +34,7 @@ class FollowRequests extends ImmutablePureComponent {
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
shouldUpdateScroll: PropTypes.func,
|
||||
hasMore: PropTypes.bool,
|
||||
isLoading: PropTypes.bool,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
locked: PropTypes.bool,
|
||||
domain: PropTypes.string,
|
||||
@ -49,7 +51,7 @@ class FollowRequests extends ImmutablePureComponent {
|
||||
}, 300, { leading: true });
|
||||
|
||||
render () {
|
||||
const { intl, shouldUpdateScroll, accountIds, hasMore, multiColumn, locked, domain } = this.props;
|
||||
const { intl, shouldUpdateScroll, accountIds, hasMore, multiColumn, locked, domain, isLoading } = this.props;
|
||||
|
||||
if (!accountIds) {
|
||||
return (
|
||||
@ -77,6 +79,7 @@ class FollowRequests extends ImmutablePureComponent {
|
||||
scrollKey='follow_requests'
|
||||
onLoadMore={this.handleLoadMore}
|
||||
hasMore={hasMore}
|
||||
isLoading={isLoading}
|
||||
shouldUpdateScroll={shouldUpdateScroll}
|
||||
emptyMessage={emptyMessage}
|
||||
bindToDocument={!multiColumn}
|
||||
|
@ -22,6 +22,7 @@ const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
accountIds: state.getIn(['user_lists', 'followers', props.params.accountId, 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'followers', props.params.accountId, 'next']),
|
||||
isLoading: state.getIn(['user_lists', 'followers', props.params.accountId, 'isLoading'], true),
|
||||
blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),
|
||||
});
|
||||
|
||||
@ -34,6 +35,7 @@ class Followers extends ImmutablePureComponent {
|
||||
shouldUpdateScroll: PropTypes.func,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
hasMore: PropTypes.bool,
|
||||
isLoading: PropTypes.bool,
|
||||
blockedBy: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
multiColumn: PropTypes.bool,
|
||||
@ -58,7 +60,7 @@ class Followers extends ImmutablePureComponent {
|
||||
}, 300, { leading: true });
|
||||
|
||||
render () {
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props;
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
@ -85,6 +87,7 @@ class Followers extends ImmutablePureComponent {
|
||||
<ScrollableList
|
||||
scrollKey='followers'
|
||||
hasMore={hasMore}
|
||||
isLoading={isLoading}
|
||||
onLoadMore={this.handleLoadMore}
|
||||
shouldUpdateScroll={shouldUpdateScroll}
|
||||
prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}
|
||||
|
@ -22,6 +22,7 @@ const mapStateToProps = (state, props) => ({
|
||||
isAccount: !!state.getIn(['accounts', props.params.accountId]),
|
||||
accountIds: state.getIn(['user_lists', 'following', props.params.accountId, 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'following', props.params.accountId, 'next']),
|
||||
isLoading: state.getIn(['user_lists', 'following', props.params.accountId, 'isLoading'], true),
|
||||
blockedBy: state.getIn(['relationships', props.params.accountId, 'blocked_by'], false),
|
||||
});
|
||||
|
||||
@ -34,6 +35,7 @@ class Following extends ImmutablePureComponent {
|
||||
shouldUpdateScroll: PropTypes.func,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
hasMore: PropTypes.bool,
|
||||
isLoading: PropTypes.bool,
|
||||
blockedBy: PropTypes.bool,
|
||||
isAccount: PropTypes.bool,
|
||||
multiColumn: PropTypes.bool,
|
||||
@ -58,7 +60,7 @@ class Following extends ImmutablePureComponent {
|
||||
}, 300, { leading: true });
|
||||
|
||||
render () {
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn } = this.props;
|
||||
const { shouldUpdateScroll, accountIds, hasMore, blockedBy, isAccount, multiColumn, isLoading } = this.props;
|
||||
|
||||
if (!isAccount) {
|
||||
return (
|
||||
@ -85,6 +87,7 @@ class Following extends ImmutablePureComponent {
|
||||
<ScrollableList
|
||||
scrollKey='following'
|
||||
hasMore={hasMore}
|
||||
isLoading={isLoading}
|
||||
onLoadMore={this.handleLoadMore}
|
||||
shouldUpdateScroll={shouldUpdateScroll}
|
||||
prepend={<HeaderContainer accountId={this.props.params.accountId} hideTabs />}
|
||||
|
@ -4,6 +4,7 @@ import ImmutablePropTypes from 'react-immutable-proptypes';
|
||||
import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
|
||||
import Toggle from 'react-toggle';
|
||||
import AsyncSelect from 'react-select/async';
|
||||
import SettingToggle from '../../notifications/components/setting_toggle';
|
||||
|
||||
const messages = defineMessages({
|
||||
placeholder: { id: 'hashtag.column_settings.select.placeholder', defaultMessage: 'Enter hashtags…' },
|
||||
@ -87,6 +88,8 @@ class ColumnSettings extends React.PureComponent {
|
||||
};
|
||||
|
||||
render () {
|
||||
const { settings, onChange } = this.props;
|
||||
|
||||
return (
|
||||
<div>
|
||||
<div className='column-settings__row'>
|
||||
@ -106,6 +109,10 @@ class ColumnSettings extends React.PureComponent {
|
||||
{this.modeSelect('none')}
|
||||
</div>
|
||||
)}
|
||||
|
||||
<div className='column-settings__row'>
|
||||
<SettingToggle settings={settings} settingPath={['local']} onChange={onChange} label={<FormattedMessage id='community.column_settings.local_only' defaultMessage='Local only' />} />
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
}
|
||||
|
@ -98,21 +98,21 @@ class HashtagTimeline extends React.PureComponent {
|
||||
|
||||
componentDidMount () {
|
||||
const { dispatch } = this.props;
|
||||
const { id, tags } = this.props.params;
|
||||
const { id, tags, local } = this.props.params;
|
||||
|
||||
this._subscribe(dispatch, id, tags);
|
||||
dispatch(expandHashtagTimeline(id, { tags }));
|
||||
dispatch(expandHashtagTimeline(id, { tags, local }));
|
||||
}
|
||||
|
||||
componentWillReceiveProps (nextProps) {
|
||||
const { dispatch, params } = this.props;
|
||||
const { id, tags } = nextProps.params;
|
||||
const { id, tags, local } = nextProps.params;
|
||||
|
||||
if (id !== params.id || !isEqual(tags, params.tags)) {
|
||||
if (id !== params.id || !isEqual(tags, params.tags) || !isEqual(local, params.local)) {
|
||||
this._unsubscribe();
|
||||
this._subscribe(dispatch, id, tags);
|
||||
this.props.dispatch(clearTimeline(`hashtag:${id}`));
|
||||
this.props.dispatch(expandHashtagTimeline(id, { tags }));
|
||||
dispatch(clearTimeline(`hashtag:${id}`));
|
||||
dispatch(expandHashtagTimeline(id, { tags, local }));
|
||||
}
|
||||
}
|
||||
|
||||
@ -125,8 +125,8 @@ class HashtagTimeline extends React.PureComponent {
|
||||
}
|
||||
|
||||
handleLoadMore = maxId => {
|
||||
const { id, tags } = this.props.params;
|
||||
this.props.dispatch(expandHashtagTimeline(id, { maxId, tags }));
|
||||
const { id, tags, local } = this.props.params;
|
||||
this.props.dispatch(expandHashtagTimeline(id, { maxId, tags, local }));
|
||||
}
|
||||
|
||||
render () {
|
||||
|
@ -19,6 +19,7 @@ const messages = defineMessages({
|
||||
const mapStateToProps = state => ({
|
||||
accountIds: state.getIn(['user_lists', 'mutes', 'items']),
|
||||
hasMore: !!state.getIn(['user_lists', 'mutes', 'next']),
|
||||
isLoading: state.getIn(['user_lists', 'mutes', 'isLoading'], true),
|
||||
});
|
||||
|
||||
export default @connect(mapStateToProps)
|
||||
@ -30,6 +31,7 @@ class Mutes extends ImmutablePureComponent {
|
||||
dispatch: PropTypes.func.isRequired,
|
||||
shouldUpdateScroll: PropTypes.func,
|
||||
hasMore: PropTypes.bool,
|
||||
isLoading: PropTypes.bool,
|
||||
accountIds: ImmutablePropTypes.list,
|
||||
intl: PropTypes.object.isRequired,
|
||||
multiColumn: PropTypes.bool,
|
||||
@ -44,7 +46,7 @@ class Mutes extends ImmutablePureComponent {
|
||||
}, 300, { leading: true });
|
||||
|
||||
render () {
|
||||
const { intl, shouldUpdateScroll, hasMore, accountIds, multiColumn } = this.props;
|
||||
const { intl, shouldUpdateScroll, hasMore, accountIds, multiColumn, isLoading } = this.props;
|
||||
|
||||
if (!accountIds) {
|
||||
return (
|
||||
@ -63,6 +65,7 @@ class Mutes extends ImmutablePureComponent {
|
||||
scrollKey='mutes'
|
||||
onLoadMore={this.handleLoadMore}
|
||||
hasMore={hasMore}
|
||||
isLoading={isLoading}
|
||||
shouldUpdateScroll={shouldUpdateScroll}
|
||||
emptyMessage={emptyMessage}
|
||||
bindToDocument={!multiColumn}
|
||||
|
@ -24,19 +24,25 @@ class HashtagTimeline extends React.PureComponent {
|
||||
isLoading: PropTypes.bool.isRequired,
|
||||
hasMore: PropTypes.bool.isRequired,
|
||||
hashtag: PropTypes.string.isRequired,
|
||||
local: PropTypes.bool.isRequired,
|
||||
};
|
||||
|
||||
static defaultProps = {
|
||||
local: false,
|
||||
};
|
||||
|
||||
componentDidMount () {
|
||||
const { dispatch, hashtag } = this.props;
|
||||
const { dispatch, hashtag, local } = this.props;
|
||||
|
||||
dispatch(expandHashtagTimeline(hashtag));
|
||||
dispatch(expandHashtagTimeline(hashtag, { local }));
|
||||
}
|
||||
|
||||
handleLoadMore = () => {
|
||||
const maxId = this.props.statusIds.last();
|
||||
const { dispatch, hashtag, local, statusIds } = this.props;
|
||||
const maxId = statusIds.last();
|
||||
|
||||
if (maxId) {
|
||||
this.props.dispatch(expandHashtagTimeline(this.props.hashtag, { maxId }));
|
||||
dispatch(expandHashtagTimeline(hashtag, { maxId, local }));
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2,12 +2,24 @@ import {
|
||||
NOTIFICATIONS_UPDATE,
|
||||
} from '../actions/notifications';
|
||||
import {
|
||||
FOLLOWERS_FETCH_REQUEST,
|
||||
FOLLOWERS_FETCH_SUCCESS,
|
||||
FOLLOWERS_FETCH_FAIL,
|
||||
FOLLOWERS_EXPAND_REQUEST,
|
||||
FOLLOWERS_EXPAND_SUCCESS,
|
||||
FOLLOWERS_EXPAND_FAIL,
|
||||
FOLLOWING_FETCH_REQUEST,
|
||||
FOLLOWING_FETCH_SUCCESS,
|
||||
FOLLOWING_FETCH_FAIL,
|
||||
FOLLOWING_EXPAND_REQUEST,
|
||||
FOLLOWING_EXPAND_SUCCESS,
|
||||
FOLLOWING_EXPAND_FAIL,
|
||||
FOLLOW_REQUESTS_FETCH_REQUEST,
|
||||
FOLLOW_REQUESTS_FETCH_SUCCESS,
|
||||
FOLLOW_REQUESTS_FETCH_FAIL,
|
||||
FOLLOW_REQUESTS_EXPAND_REQUEST,
|
||||
FOLLOW_REQUESTS_EXPAND_SUCCESS,
|
||||
FOLLOW_REQUESTS_EXPAND_FAIL,
|
||||
FOLLOW_REQUEST_AUTHORIZE_SUCCESS,
|
||||
FOLLOW_REQUEST_REJECT_SUCCESS,
|
||||
} from '../actions/accounts';
|
||||
@ -16,12 +28,20 @@ import {
|
||||
FAVOURITES_FETCH_SUCCESS,
|
||||
} from '../actions/interactions';
|
||||
import {
|
||||
BLOCKS_FETCH_REQUEST,
|
||||
BLOCKS_FETCH_SUCCESS,
|
||||
BLOCKS_FETCH_FAIL,
|
||||
BLOCKS_EXPAND_REQUEST,
|
||||
BLOCKS_EXPAND_SUCCESS,
|
||||
BLOCKS_EXPAND_FAIL,
|
||||
} from '../actions/blocks';
|
||||
import {
|
||||
MUTES_FETCH_REQUEST,
|
||||
MUTES_FETCH_SUCCESS,
|
||||
MUTES_FETCH_FAIL,
|
||||
MUTES_EXPAND_REQUEST,
|
||||
MUTES_EXPAND_SUCCESS,
|
||||
MUTES_EXPAND_FAIL,
|
||||
} from '../actions/mutes';
|
||||
import {
|
||||
DIRECTORY_FETCH_REQUEST,
|
||||
@ -47,12 +67,13 @@ const normalizeList = (state, type, id, accounts, next) => {
|
||||
return state.setIn([type, id], ImmutableMap({
|
||||
next,
|
||||
items: ImmutableList(accounts.map(item => item.id)),
|
||||
isLoading: false,
|
||||
}));
|
||||
};
|
||||
|
||||
const appendToList = (state, type, id, accounts, next) => {
|
||||
return state.updateIn([type, id], map => {
|
||||
return map.set('next', next).update('items', list => list.concat(accounts.map(item => item.id)));
|
||||
return map.set('next', next).set('isLoading', false).update('items', list => list.concat(accounts.map(item => item.id)));
|
||||
});
|
||||
};
|
||||
|
||||
@ -68,10 +89,22 @@ export default function userLists(state = initialState, action) {
|
||||
return normalizeList(state, 'followers', action.id, action.accounts, action.next);
|
||||
case FOLLOWERS_EXPAND_SUCCESS:
|
||||
return appendToList(state, 'followers', action.id, action.accounts, action.next);
|
||||
case FOLLOWERS_FETCH_REQUEST:
|
||||
case FOLLOWERS_EXPAND_REQUEST:
|
||||
return state.setIn(['followers', action.id, 'isLoading'], true);
|
||||
case FOLLOWERS_FETCH_FAIL:
|
||||
case FOLLOWERS_EXPAND_FAIL:
|
||||
return state.setIn(['followers', action.id, 'isLoading'], false);
|
||||
case FOLLOWING_FETCH_SUCCESS:
|
||||
return normalizeList(state, 'following', action.id, action.accounts, action.next);
|
||||
case FOLLOWING_EXPAND_SUCCESS:
|
||||
return appendToList(state, 'following', action.id, action.accounts, action.next);
|
||||
case FOLLOWING_FETCH_REQUEST:
|
||||
case FOLLOWING_EXPAND_REQUEST:
|
||||
return state.setIn(['following', action.id, 'isLoading'], true);
|
||||
case FOLLOWING_FETCH_FAIL:
|
||||
case FOLLOWING_EXPAND_FAIL:
|
||||
return state.setIn(['following', action.id, 'isLoading'], false);
|
||||
case REBLOGS_FETCH_SUCCESS:
|
||||
return state.setIn(['reblogged_by', action.id], ImmutableList(action.accounts.map(item => item.id)));
|
||||
case FAVOURITES_FETCH_SUCCESS:
|
||||
@ -79,9 +112,15 @@ export default function userLists(state = initialState, action) {
|
||||
case NOTIFICATIONS_UPDATE:
|
||||
return action.notification.type === 'follow_request' ? normalizeFollowRequest(state, action.notification) : state;
|
||||
case FOLLOW_REQUESTS_FETCH_SUCCESS:
|
||||
return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
|
||||
return state.setIn(['follow_requests', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next).setIn(['follow_requests', 'isLoading'], false);
|
||||
case FOLLOW_REQUESTS_EXPAND_SUCCESS:
|
||||
return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next);
|
||||
return state.updateIn(['follow_requests', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['follow_requests', 'next'], action.next).setIn(['follow_requests', 'isLoading'], false);
|
||||
case FOLLOW_REQUESTS_FETCH_REQUEST:
|
||||
case FOLLOW_REQUESTS_EXPAND_REQUEST:
|
||||
return state.setIn(['follow_requests', 'isLoading'], true);
|
||||
case FOLLOW_REQUESTS_FETCH_FAIL:
|
||||
case FOLLOW_REQUESTS_EXPAND_FAIL:
|
||||
return state.setIn(['follow_requests', 'isLoading'], false);
|
||||
case FOLLOW_REQUEST_AUTHORIZE_SUCCESS:
|
||||
case FOLLOW_REQUEST_REJECT_SUCCESS:
|
||||
return state.updateIn(['follow_requests', 'items'], list => list.filterNot(item => item === action.id));
|
||||
@ -89,10 +128,22 @@ export default function userLists(state = initialState, action) {
|
||||
return state.setIn(['blocks', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
|
||||
case BLOCKS_EXPAND_SUCCESS:
|
||||
return state.updateIn(['blocks', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['blocks', 'next'], action.next);
|
||||
case BLOCKS_FETCH_REQUEST:
|
||||
case BLOCKS_EXPAND_REQUEST:
|
||||
return state.setIn(['blocks', 'isLoading'], true);
|
||||
case BLOCKS_FETCH_FAIL:
|
||||
case BLOCKS_EXPAND_FAIL:
|
||||
return state.setIn(['blocks', 'isLoading'], false);
|
||||
case MUTES_FETCH_SUCCESS:
|
||||
return state.setIn(['mutes', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
|
||||
case MUTES_EXPAND_SUCCESS:
|
||||
return state.updateIn(['mutes', 'items'], list => list.concat(action.accounts.map(item => item.id))).setIn(['mutes', 'next'], action.next);
|
||||
case MUTES_FETCH_REQUEST:
|
||||
case MUTES_EXPAND_REQUEST:
|
||||
return state.setIn(['mutes', 'isLoading'], true);
|
||||
case MUTES_FETCH_FAIL:
|
||||
case MUTES_EXPAND_FAIL:
|
||||
return state.setIn(['mutes', 'isLoading'], false);
|
||||
case DIRECTORY_FETCH_SUCCESS:
|
||||
return state.setIn(['directory', 'items'], ImmutableList(action.accounts.map(item => item.id))).setIn(['directory', 'isLoading'], false);
|
||||
case DIRECTORY_EXPAND_SUCCESS:
|
||||
|
@ -2,6 +2,45 @@ import EXIF from 'exif-js';
|
||||
|
||||
const MAX_IMAGE_PIXELS = 1638400; // 1280x1280px
|
||||
|
||||
const _browser_quirks = {};
|
||||
|
||||
// Some browsers will automatically draw images respecting their EXIF orientation
|
||||
// while others won't, and the safest way to detect that is to examine how it
|
||||
// is done on a known image.
|
||||
// See https://github.com/w3c/csswg-drafts/issues/4666
|
||||
// and https://github.com/blueimp/JavaScript-Load-Image/commit/1e4df707821a0afcc11ea0720ee403b8759f3881
|
||||
const dropOrientationIfNeeded = (orientation) => new Promise(resolve => {
|
||||
switch (_browser_quirks['image-orientation-automatic']) {
|
||||
case true:
|
||||
resolve(1);
|
||||
break;
|
||||
case false:
|
||||
resolve(orientation);
|
||||
break;
|
||||
default:
|
||||
// black 2x1 JPEG, with the following meta information set:
|
||||
// - EXIF Orientation: 6 (Rotated 90° CCW)
|
||||
const testImageURL =
|
||||
'data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAA' +
|
||||
'AAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBA' +
|
||||
'QEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQE' +
|
||||
'BAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/x' +
|
||||
'ABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAA' +
|
||||
'AAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==';
|
||||
const img = new Image();
|
||||
img.onload = () => {
|
||||
const automatic = (img.width === 1 && img.height === 2);
|
||||
_browser_quirks['image-orientation-automatic'] = automatic;
|
||||
resolve(automatic ? 1 : orientation);
|
||||
};
|
||||
img.onerror = () => {
|
||||
_browser_quirks['image-orientation-automatic'] = false;
|
||||
resolve(orientation);
|
||||
};
|
||||
img.src = testImageURL;
|
||||
}
|
||||
});
|
||||
|
||||
const getImageUrl = inputFile => new Promise((resolve, reject) => {
|
||||
if (window.URL && URL.createObjectURL) {
|
||||
try {
|
||||
@ -38,7 +77,11 @@ const getOrientation = (img, type = 'image/png') => new Promise(resolve => {
|
||||
|
||||
EXIF.getData(img, () => {
|
||||
const orientation = EXIF.getTag(img, 'Orientation');
|
||||
resolve(orientation);
|
||||
if (orientation !== 1) {
|
||||
dropOrientationIfNeeded(orientation).then(resolve).catch(() => resolve(orientation));
|
||||
} else {
|
||||
resolve(orientation);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
|
@ -3,47 +3,53 @@
|
||||
class DeliveryFailureTracker
|
||||
FAILURE_DAYS_THRESHOLD = 7
|
||||
|
||||
def initialize(inbox_url)
|
||||
@inbox_url = inbox_url
|
||||
def initialize(url_or_host)
|
||||
@host = url_or_host.start_with?('https://') || url_or_host.start_with?('http://') ? Addressable::URI.parse(url_or_host).normalized_host : url_or_host
|
||||
end
|
||||
|
||||
def track_failure!
|
||||
Redis.current.sadd(exhausted_deliveries_key, today)
|
||||
Redis.current.sadd('unavailable_inboxes', @inbox_url) if reached_failure_threshold?
|
||||
UnavailableDomain.create(domain: @host) if reached_failure_threshold?
|
||||
end
|
||||
|
||||
def track_success!
|
||||
Redis.current.del(exhausted_deliveries_key)
|
||||
Redis.current.srem('unavailable_inboxes', @inbox_url)
|
||||
UnavailableDomain.find_by(domain: @host)&.destroy
|
||||
end
|
||||
|
||||
def days
|
||||
Redis.current.scard(exhausted_deliveries_key) || 0
|
||||
end
|
||||
|
||||
class << self
|
||||
def filter(arr)
|
||||
arr.reject(&method(:unavailable?))
|
||||
end
|
||||
def available?
|
||||
!UnavailableDomain.where(domain: @host).exists?
|
||||
end
|
||||
|
||||
def unavailable?(url)
|
||||
Redis.current.sismember('unavailable_inboxes', url)
|
||||
alias reset! track_success!
|
||||
|
||||
class << self
|
||||
def without_unavailable(urls)
|
||||
unavailable_domains_map = Rails.cache.fetch('unavailable_domains') { UnavailableDomain.pluck(:domain).each_with_object({}) { |domain, hash| hash[domain] = true } }
|
||||
|
||||
urls.reject do |url|
|
||||
host = Addressable::URI.parse(url).normalized_host
|
||||
unavailable_domains_map[host]
|
||||
end
|
||||
end
|
||||
|
||||
def available?(url)
|
||||
!unavailable?(url)
|
||||
new(url).available?
|
||||
end
|
||||
|
||||
def track_inverse_success!(from_account)
|
||||
new(from_account.inbox_url).track_success! if from_account.inbox_url.present?
|
||||
new(from_account.shared_inbox_url).track_success! if from_account.shared_inbox_url.present?
|
||||
def reset!(url)
|
||||
new(url).reset!
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def exhausted_deliveries_key
|
||||
"exhausted_deliveries:#{@inbox_url}"
|
||||
"exhausted_deliveries:#{@host}"
|
||||
end
|
||||
|
||||
def today
|
||||
|
@ -413,7 +413,7 @@ class Account < ApplicationRecord
|
||||
|
||||
def inboxes
|
||||
urls = reorder(nil).where(protocol: :activitypub).pluck(Arel.sql("distinct coalesce(nullif(accounts.shared_inbox_url, ''), accounts.inbox_url)"))
|
||||
DeliveryFailureTracker.filter(urls)
|
||||
DeliveryFailureTracker.without_unavailable(urls)
|
||||
end
|
||||
|
||||
def search_for(terms, limit = 10, offset = 0)
|
||||
|
@ -16,8 +16,8 @@ class AccountAlias < ApplicationRecord
|
||||
belongs_to :account
|
||||
|
||||
validates :acct, presence: true, domain: { acct: true }
|
||||
validates :uri, presence: true
|
||||
validates :uri, uniqueness: { scope: :account_id }
|
||||
validate :validate_target_account
|
||||
|
||||
before_validation :set_uri
|
||||
after_create :add_to_account
|
||||
@ -44,4 +44,12 @@ class AccountAlias < ApplicationRecord
|
||||
def remove_from_account
|
||||
account.update(also_known_as: account.also_known_as.reject { |x| x == uri })
|
||||
end
|
||||
|
||||
def validate_target_account
|
||||
if uri.blank?
|
||||
errors.add(:acct, I18n.t('migrations.errors.not_found'))
|
||||
elsif ActivityPub::TagManager.instance.uri_for(account) == uri
|
||||
errors.add(:acct, I18n.t('migrations.errors.move_to_self'))
|
||||
end
|
||||
end
|
||||
end
|
||||
|
@ -14,7 +14,7 @@
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
# published_at :datetime
|
||||
# status_ids :bigint is an Array
|
||||
# status_ids :bigint(8) is an Array
|
||||
#
|
||||
|
||||
class Announcement < ApplicationRecord
|
||||
|
@ -27,7 +27,7 @@ class Relay < ApplicationRecord
|
||||
payload = Oj.dump(follow_activity(activity_id))
|
||||
|
||||
update!(state: :pending, follow_activity_id: activity_id)
|
||||
DeliveryFailureTracker.new(inbox_url).track_success!
|
||||
DeliveryFailureTracker.track_success!(inbox_url)
|
||||
ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
|
||||
end
|
||||
|
||||
@ -36,7 +36,7 @@ class Relay < ApplicationRecord
|
||||
payload = Oj.dump(unfollow_activity(activity_id))
|
||||
|
||||
update!(state: :idle, follow_activity_id: nil)
|
||||
DeliveryFailureTracker.new(inbox_url).track_success!
|
||||
DeliveryFailureTracker.track_success!(inbox_url)
|
||||
ActivityPub::DeliveryWorker.perform_async(payload, some_local_account.id, inbox_url)
|
||||
end
|
||||
|
||||
|
22
app/models/unavailable_domain.rb
Normal file
@ -0,0 +1,22 @@
|
||||
# frozen_string_literal: true
|
||||
# == Schema Information
|
||||
#
|
||||
# Table name: unavailable_domains
|
||||
#
|
||||
# id :bigint(8) not null, primary key
|
||||
# domain :string default(""), not null
|
||||
# created_at :datetime not null
|
||||
# updated_at :datetime not null
|
||||
#
|
||||
|
||||
class UnavailableDomain < ApplicationRecord
|
||||
include DomainNormalizable
|
||||
|
||||
after_commit :reset_cache!
|
||||
|
||||
private
|
||||
|
||||
def reset_cache!
|
||||
Rails.cache.delete('unavailable_domains')
|
||||
end
|
||||
end
|
@ -98,6 +98,7 @@ class User < ApplicationRecord
|
||||
|
||||
before_validation :sanitize_languages
|
||||
before_create :set_approved
|
||||
after_commit :send_pending_devise_notifications
|
||||
|
||||
# This avoids a deprecation warning from Rails 5.1
|
||||
# It seems possible that a future release of devise-two-factor will
|
||||
@ -306,11 +307,38 @@ class User < ApplicationRecord
|
||||
protected
|
||||
|
||||
def send_devise_notification(notification, *args)
|
||||
devise_mailer.send(notification, self, *args).deliver_later
|
||||
# This method can be called in `after_update` and `after_commit` hooks,
|
||||
# but we must make sure the mailer is actually called *after* commit,
|
||||
# otherwise it may work on stale data. To do this, figure out if we are
|
||||
# within a transaction.
|
||||
if ActiveRecord::Base.connection.current_transaction.try(:records)&.include?(self)
|
||||
pending_devise_notifications << [notification, args]
|
||||
else
|
||||
render_and_send_devise_message(notification, *args)
|
||||
end
|
||||
end
|
||||
|
||||
private
|
||||
|
||||
def send_pending_devise_notifications
|
||||
pending_devise_notifications.each do |notification, args|
|
||||
render_and_send_devise_message(notification, *args)
|
||||
end
|
||||
|
||||
# Empty the pending notifications array because the
|
||||
# after_commit hook can be called multiple times which
|
||||
# could cause multiple emails to be sent.
|
||||
pending_devise_notifications.clear
|
||||
end
|
||||
|
||||
def pending_devise_notifications
|
||||
@pending_devise_notifications ||= []
|
||||
end
|
||||
|
||||
def render_and_send_devise_message(notification, *args)
|
||||
devise_mailer.send(notification, self, *args).deliver_later
|
||||
end
|
||||
|
||||
def set_approved
|
||||
self.approved = open_registrations? || valid_invitation? || external?
|
||||
end
|
||||
|
@ -171,12 +171,12 @@
|
||||
%th= t('admin.accounts.inbox_url')
|
||||
%td
|
||||
= @account.inbox_url
|
||||
= fa_icon DeliveryFailureTracker.unavailable?(@account.inbox_url) ? 'times' : 'check'
|
||||
= fa_icon DeliveryFailureTracker.available?(@account.inbox_url) ? 'check' : 'times'
|
||||
%tr
|
||||
%th= t('admin.accounts.shared_inbox_url')
|
||||
%td
|
||||
= @account.shared_inbox_url
|
||||
= fa_icon DeliveryFailureTracker.unavailable?(@account.shared_inbox_url) ? 'times' : 'check'
|
||||
= fa_icon DeliveryFailureTracker.available?(@account.shared_inbox_url) ? 'check': 'times'
|
||||
|
||||
%div{ style: 'overflow: hidden' }
|
||||
%div{ style: 'float: right' }
|
||||
|
@ -39,7 +39,7 @@
|
||||
%h4= t 'footer.developers'
|
||||
%ul
|
||||
%li= link_to t('about.documentation'), 'https://docs.joinmastodon.org/'
|
||||
%li= link_to t('about.api'), 'https://docs.joinmastodon.org/api/guidelines/'
|
||||
%li= link_to t('about.api'), 'https://docs.joinmastodon.org/client/intro/'
|
||||
.column-2
|
||||
%h4= link_to t('about.what_is_mastodon'), 'https://joinmastodon.org/'
|
||||
= link_to svg_logo, root_url, class: 'brand'
|
||||
|
@ -23,7 +23,11 @@
|
||||
%th= t('simple_form.labels.account_alias.acct')
|
||||
%th
|
||||
%tbody
|
||||
- @aliases.each do |account_alias|
|
||||
- if @aliases.empty?
|
||||
%tr
|
||||
%td= account_alias.acct
|
||||
%td= table_link_to 'trash', t('aliases.remove'), settings_alias_path(account_alias), data: { method: :delete }
|
||||
%td.muted-hint{ colspan: 2 }= t('aliases.empty')
|
||||
- else
|
||||
- @aliases.each do |account_alias|
|
||||
%tr
|
||||
%td= account_alias.acct
|
||||
%td= table_link_to 'trash', t('aliases.remove'), settings_alias_path(account_alias), data: { method: :delete }
|
||||
|
@ -17,9 +17,9 @@
|
||||
= render 'application/card', account: @account
|
||||
|
||||
.fields-row__column.fields-group.fields-row__column-6
|
||||
= f.input :header, wrapper: :with_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(AccountHeader::LIMIT))
|
||||
= f.input :header, wrapper: :with_label, input_html: { accept: AccountHeader::IMAGE_MIME_TYPES.join(',') }, hint: picture_hint(t('simple_form.hints.defaults.header', dimensions: '1500x500', size: number_to_human_size(AccountHeader::LIMIT)), @account.header)
|
||||
|
||||
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT))
|
||||
= f.input :avatar, wrapper: :with_label, input_html: { accept: AccountAvatar::IMAGE_MIME_TYPES.join(',') }, hint: picture_hint(t('simple_form.hints.defaults.avatar', dimensions: '400x400', size: number_to_human_size(AccountAvatar::LIMIT)), @account.avatar)
|
||||
|
||||
%hr.spacer/
|
||||
|
||||
|
@ -12,14 +12,16 @@
|
||||
%span.poll__number><
|
||||
- if own_votes.include?(index)
|
||||
%i.poll__voted__mark.fa.fa-check
|
||||
= percent.round
|
||||
= Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
|
||||
= "#{percent.round}%"
|
||||
%span.poll__option__text
|
||||
= Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
|
||||
|
||||
%span.poll__chart{ style: "width: #{percent}%" }
|
||||
%span.poll__chart{ style: "width: #{percent}%" }
|
||||
- else
|
||||
%label.poll__option><
|
||||
%span.poll__input{ class: poll.multiple? ? 'checkbox' : nil}><
|
||||
= Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
|
||||
%span.poll__option__text
|
||||
= Formatter.instance.format_poll_option(status, option, autoplay: autoplay)
|
||||
.poll__footer
|
||||
- unless show_results
|
||||
%button.button.button-secondary{ disabled: true }
|
||||
|
@ -12,5 +12,5 @@
|
||||
%h1= "##{@tag.name}"
|
||||
%p= t('about.about_hashtag_html', hashtag: @tag.name)
|
||||
|
||||
#mastodon-timeline{ data: { props: Oj.dump(default_props.merge(hashtag: @tag.name)) }}
|
||||
#mastodon-timeline{ data: { props: Oj.dump(default_props.merge(hashtag: @tag.name, local: @local)) }}
|
||||
#modal-container
|
||||
|
@ -38,7 +38,7 @@
|
||||
%table.input{ align: 'center', cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
%tr
|
||||
%td= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email
|
||||
%td= @resource.unconfirmed_email
|
||||
|
||||
%table.email-table{ cellspacing: 0, cellpadding: 0 }
|
||||
%tbody
|
||||
|
@ -4,6 +4,6 @@
|
||||
|
||||
<%= t 'devise.mailer.email_changed.explanation' %>
|
||||
|
||||
<%= @resource.try(:unconfirmed_email) ? @resource.unconfirmed_email : @resource.email %>
|
||||
<%= @resource.unconfirmed_email %>
|
||||
|
||||
<%= t 'devise.mailer.email_changed.extra' %>
|
||||
|
@ -12,7 +12,7 @@ class ActivityPub::DeliveryWorker
|
||||
HEADERS = { 'Content-Type' => 'application/activity+json' }.freeze
|
||||
|
||||
def perform(json, source_account_id, inbox_url, options = {})
|
||||
return if DeliveryFailureTracker.unavailable?(inbox_url)
|
||||
return unless DeliveryFailureTracker.available?(inbox_url)
|
||||
|
||||
@options = options.with_indifferent_access
|
||||
@json = json
|
||||
@ -23,10 +23,12 @@ class ActivityPub::DeliveryWorker
|
||||
|
||||
perform_request
|
||||
ensure
|
||||
if @performed
|
||||
failure_tracker.track_success!
|
||||
else
|
||||
failure_tracker.track_failure!
|
||||
if @inbox_url.present?
|
||||
if @performed
|
||||
failure_tracker.track_success!
|
||||
else
|
||||
failure_tracker.track_failure!
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
@ -25,7 +25,7 @@ class PostProcessMediaWorker
|
||||
media_attachment = MediaAttachment.find(media_attachment_id)
|
||||
media_attachment.processing = :in_progress
|
||||
media_attachment.save
|
||||
media_attachment.file.reprocess_original!
|
||||
media_attachment.file.reprocess!(:original)
|
||||
media_attachment.processing = :complete
|
||||
media_attachment.save
|
||||
rescue ActiveRecord::RecordNotFound
|
||||
|
@ -23,3 +23,9 @@ module Chewy
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# ElasticSearch uses Faraday internally. Faraday interprets the
|
||||
# http_proxy env variable by default which leads to issues when
|
||||
# Mastodon is run with hidden services enabled, because
|
||||
# ElasticSearch is *not* supposed to be accessed through a proxy
|
||||
Faraday.ignore_env_proxy = true
|
||||
|
@ -635,6 +635,7 @@ en:
|
||||
add_new: Create alias
|
||||
created_msg: Successfully created a new alias. You can now initiate the move from the old account.
|
||||
deleted_msg: Successfully remove the alias. Moving from that account to this one will no longer be possible.
|
||||
empty: You have no aliases.
|
||||
hint_html: If you want to move from another account to this one, here you can create an alias, which is required before you can proceed with moving followers from the old account to this one. This action by itself is <strong>harmless and reversible</strong>. <strong>The account migration is initiated from the old account</strong>.
|
||||
remove: Unlink alias
|
||||
appearance:
|
||||
|
@ -100,7 +100,9 @@ Rails.application.routes.draw do
|
||||
get '/settings', to: redirect('/settings/profile')
|
||||
|
||||
namespace :settings do
|
||||
resource :profile, only: [:show, :update]
|
||||
resource :profile, only: [:show, :update] do
|
||||
resources :pictures, only: :destroy
|
||||
end
|
||||
|
||||
get :preferences, to: redirect('/settings/preferences/appearance')
|
||||
|
||||
|
9
db/migrate/20200407201300_create_unavailable_domains.rb
Normal file
@ -0,0 +1,9 @@
|
||||
class CreateUnavailableDomains < ActiveRecord::Migration[5.2]
|
||||
def change
|
||||
create_table :unavailable_domains do |t|
|
||||
t.string :domain, default: '', null: false, index: { unique: true }
|
||||
|
||||
t.timestamps
|
||||
end
|
||||
end
|
||||
end
|
21
db/migrate/20200407202420_migrate_unavailable_inboxes.rb
Normal file
@ -0,0 +1,21 @@
|
||||
class MigrateUnavailableInboxes < ActiveRecord::Migration[5.2]
|
||||
disable_ddl_transaction!
|
||||
|
||||
def up
|
||||
urls = Redis.current.smembers('unavailable_inboxes')
|
||||
|
||||
hosts = urls.map do |url|
|
||||
Addressable::URI.parse(url).normalized_host
|
||||
end.compact.uniq
|
||||
|
||||
UnavailableDomain.delete_all
|
||||
|
||||
hosts.each do |host|
|
||||
UnavailableDomain.create(domain: host)
|
||||
end
|
||||
|
||||
Redis.current.del(*(['unavailable_inboxes'] + Redis.current.keys('exhausted_deliveries:*')))
|
||||
end
|
||||
|
||||
def down; end
|
||||
end
|
@ -10,7 +10,7 @@
|
||||
#
|
||||
# It's strongly recommended that you check this file into your version control system.
|
||||
|
||||
ActiveRecord::Schema.define(version: 2020_03_12_185443) do
|
||||
ActiveRecord::Schema.define(version: 2020_04_07_202420) do
|
||||
|
||||
# These are extensions that must be enabled in order to support this database
|
||||
enable_extension "plpgsql"
|
||||
@ -769,6 +769,13 @@ ActiveRecord::Schema.define(version: 2020_03_12_185443) do
|
||||
t.index ["uri"], name: "index_tombstones_on_uri"
|
||||
end
|
||||
|
||||
create_table "unavailable_domains", force: :cascade do |t|
|
||||
t.string "domain", default: "", null: false
|
||||
t.datetime "created_at", null: false
|
||||
t.datetime "updated_at", null: false
|
||||
t.index ["domain"], name: "index_unavailable_domains_on_domain", unique: true
|
||||
end
|
||||
|
||||
create_table "user_invite_requests", force: :cascade do |t|
|
||||
t.bigint "user_id"
|
||||
t.text "text"
|
||||
|
@ -4,6 +4,7 @@ services:
|
||||
db:
|
||||
restart: always
|
||||
image: postgres:9.6-alpine
|
||||
shm_size: 256mb
|
||||
networks:
|
||||
- internal_network
|
||||
healthcheck:
|
||||
|
@ -276,7 +276,7 @@ module Mastodon
|
||||
preload_map = Hash.new { |hash, key| hash[key] = [] }
|
||||
|
||||
objects.map do |object|
|
||||
segments = object.key.split('/').first
|
||||
segments = object.key.split('/')
|
||||
model_name = segments.first.classify
|
||||
record_id = segments[2..-2].join.to_i
|
||||
|
||||
|
@ -14,17 +14,6 @@ module Paperclip
|
||||
end
|
||||
end
|
||||
|
||||
def reprocess_original!
|
||||
old_original_path = path(:original)
|
||||
reprocess!(:original)
|
||||
new_original_path = path(:original)
|
||||
|
||||
if new_original_path != old_original_path
|
||||
@queued_for_delete << old_original_path
|
||||
flush_deletes
|
||||
end
|
||||
end
|
||||
|
||||
def variant?(other_filename)
|
||||
return true if original_filename == other_filename
|
||||
return false if original_filename.nil?
|
||||
|
@ -15,7 +15,7 @@ end
|
||||
namespace :emojis do
|
||||
desc 'Generate a unicode to filename mapping'
|
||||
task :generate do
|
||||
source = 'http://www.unicode.org/Public/emoji/11.0/emoji-test.txt'
|
||||
source = 'http://www.unicode.org/Public/emoji/12.0/emoji-test.txt'
|
||||
codes = []
|
||||
dest = Rails.root.join('app', 'javascript', 'mastodon', 'features', 'emoji', 'emoji_map.json')
|
||||
|
||||
|
@ -72,7 +72,7 @@
|
||||
"@rails/ujs": "^6.0.2",
|
||||
"array-includes": "^3.1.1",
|
||||
"arrow-key-navigation": "^1.1.0",
|
||||
"autoprefixer": "^9.7.5",
|
||||
"autoprefixer": "^9.7.6",
|
||||
"axios": "^0.19.2",
|
||||
"babel-loader": "^8.1.0",
|
||||
"babel-plugin-lodash": "^3.3.4",
|
||||
@ -111,7 +111,7 @@
|
||||
"mark-loader": "^0.1.6",
|
||||
"marky": "^1.2.1",
|
||||
"mini-css-extract-plugin": "^0.9.0",
|
||||
"mkdirp": "^1.0.3",
|
||||
"mkdirp": "^1.0.4",
|
||||
"npmlog": "^4.1.2",
|
||||
"object-assign": "^4.1.1",
|
||||
"object-fit-images": "^3.2.3",
|
||||
@ -160,7 +160,7 @@
|
||||
"tesseract.js": "^2.0.0-alpha.16",
|
||||
"throng": "^4.0.0",
|
||||
"tiny-queue": "^0.2.1",
|
||||
"uuid": "^7.0.2",
|
||||
"uuid": "^7.0.3",
|
||||
"wavesurfer.js": "^3.3.1",
|
||||
"webpack": "^4.42.1",
|
||||
"webpack-assets-manifest": "^3.1.1",
|
||||
|
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.4 KiB |
Before Width: | Height: | Size: 6.2 KiB After Width: | Height: | Size: 6.4 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F7DECE" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F7DECE" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#292F33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F7DECE" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F7DECE" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#F7DECE" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#292F33" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#F7DECE" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F3D2A2" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#F3D2A2" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFE51E" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#F3D2A2" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F3D2A2" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#F3D2A2" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#FFE51E" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#F3D2A2" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#D4AB88" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#D4AB88" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#963B22" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#D4AB88" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#D4AB88" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#D4AB88" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#963B22" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#D4AB88" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#AF7E57" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#AF7E57" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#60352A" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#AF7E57" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#AF7E57" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#AF7E57" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#60352A" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#AF7E57" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#7C533E" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#7C533E" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#0B0200" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#7C533E" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#7C533E" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#7C533E" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#0B0200" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#7C533E" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#FFDC5D" d="M2.789 15.057c-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566l-.833-.959zm22.862-3.211c.379.095 1.515.151 2.104.386.477.19 1.122.088 1.073.455-.043.316-.701.317-1.422.371-.722.054-1.949.085-2.39-.113l.635-1.099zM14.698.997c-1.593-.627-4.077.182-4.365 2.043-.287 1.848.239 4.747 1.863 4.572 1.702-.184 3.448-.554 4.138-2.307.69-1.752-.043-3.681-1.636-4.308z"/><path fill="#FFDC5D" d="M15.882 5.757c2.318-2.723-3.266-2.458-3.266-2.458-1.057.038-.329 1.799-.827 2.761-.341.665 1.095 1.018 1.095 1.018s.659-.01.694.79v.007c.008.204-.013.445-.108.769-.473 1.601 1.677 2.582 2.149.978.187-.635.114-1.193.02-1.708l-.009-.046c-.144-.766-.322-1.438.252-2.111z"/><path fill="#FFAC33" d="M16.518 1.64C15.457.398 13.998-.117 11.499.849c-2.183.844-1.366 2.72-.972 2.282.628-.696 1.477-.483 1.477-.483l.66 1.944s.314.189.445-.473 1.017-.729 1.308-.198c.452.826-.139.984-.193 1.478-.17 1.562 1.56 1.502 1.56 1.502s.337.132.912-1.001c.575-1.132.876-3.027-.178-4.26z"/><path fill="#FFDC5D" d="M16.261 28.432c-.378-.1-.67-.432-.807-.785-.059-.152-.245-.89-.245-.89l-2.284.284c.043.214.114.512.185.94.054.324-.089.753.012.954.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.223-.254-.427-.725-.806-.825zm7.51-3.222c-.334-.065-.607-.336-.746-.634-.06-.129-.22-.651-.22-.651l-2.009.274c.05.183.129.438.216.804.066.278-.033.659.066.827.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.177-.233-.415-.603-.749-.668z"/><path fill="#292F33" d="M25.676 11.812c-.242-.036-2.877-.731-3.554-1.052-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.836 1.068c.312-.281 1.748-.596 2.748-1.046.396-.178 1.452-.296 1.982-.81l.017.017c1.396-.979 2.326-2.021 2.722-2.599L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008 1.412 0 2.24-.56 2.24-.56s-.278-.638-.165-1.577c.069-.572.58-1.601.58-2.45 0-.849-.095-1.367.031-1.719s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.893-.133 1.966-.567 1.966-.567s-.096-1.268-.078-1.848c.023-.706.412-2.193.265-2.824-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.365-2.469-.005-3.781-.005-3.781s1.81.804 3.578 1.344c.577.285 2.27.562 3.989.5.432-.016.452-1.233.125-1.282z"/><path fill="#67757F" d="M7.265 13.194c.795-1.126 2.994-4.365 5.435-4.576 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639l-.751.766L13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.685.614-.896.735-.389.223-2.813 1.505-3.334 2.005l.288.368c1.224-.797 3.829-1.949 4.189-2.232zm15.956-1.75c.453.215 1.771.594 2.674.834-.016-.24-.089-.446-.219-.465-.2-.03-2.502-.686-3.513-1.033.212.162.682.465 1.058.664zm-2.139 11.291c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.433 1.658.54 2.703.309-.046.638-.128.938-.216-.613-.262-.707-1.099-.745-1.705z"/><path fill="#67757F" d="M13.135 24.147c-.303-1.149.176-2.906.176-2.906 0-.435-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.21 1.309-5.224.906c-.347-.718-1.03-4.737-1.03-4.737-.213-.025-.499.231-.642.487L12.208 17s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.611 3.468.653 4.008.386 0 .724-.044 1.018-.104-.688-.618-.566-1.979-.853-3.065z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#4289C1" d="M36 5v27s0 4-4 4H4c-4 0-4-4-4-4v-5s25-2 36-22z"/><path fill="#1C6399" d="M31.844 23.243s2.565-1.635 2.258-2.288c-.309-.654-11.778.99-17.528 2.954-8.627 2.947-13.144 7.522-12.526 8.828.617 1.306 7.602 1.953 16.228-.993 5.752-1.964 15.368-7.524 15.06-8.177-.309-.653-3.492-.324-3.492-.324z"/><path fill="#A6D388" d="M31.474 22.747s2.65-1.619 2.349-2.291c-.303-.673-12.042.782-17.949 2.675C7.01 25.972 2.311 30.555 2.916 31.9c.605 1.345 7.723 2.141 16.585-.699 5.91-1.893 15.833-7.383 15.532-8.055-.303-.673-3.559-.399-3.559-.399z"/><path fill="#F5F8FA" d="M31.474 22.747s2.507-1.534 2.358-2.235L3.756 29.978c-.722.837-1.019 1.523-.84 1.922.156.348.755.657 1.7.878l30.395-9.566c.003-.02.029-.051.022-.066-.303-.673-3.559-.399-3.559-.399z"/><path fill="#FFDC5D" d="M14.919 1.309c-1.46-.632-3.707.061-4.116 1.762-.572 2.374.726 4.444 2.239 4.331 1.586-.118 2.568-.436 3.263-2.042.695-1.605.074-3.419-1.386-4.051z"/><path fill="#FFDC5D" d="M15.871 5.765c2.237-2.457-2.957-2.383-2.957-2.383-.983.003-.362 1.661-.853 2.538-.337.607.985.979.985.979s.612.011.62.755v.007c.001.189-.026.413-.124.71-.489 1.472 1.477 2.449 1.965.975.193-.584.143-1.104.071-1.586l-.007-.043c-.109-.715-.253-1.344.3-1.952z"/><path fill="#FFAC33" d="M16.763 1.884c-.697-1.012-3.117-1.965-4.713-.767-1.07-.222-1.517.787-1.445 1.379.057.473 1.209.633 1.469 1.535.209-.217.277-.674.242-.921.356.366.165 1.292 1.592 1.949 1.38.634 1.091 1.862 1.091 1.862s.749-.324 1.281-.9c1.019-1.101 1.251-3.022.483-4.137z"/><path fill="#FFDC5D" d="M16.261 28.432c-.378-.1-.971-.58-1.154-.912-.661-1.197.171-3.476.19-4.777.005-.37-2.213-1.974-2.86-1.016s.991 4.719.812 6.193c-.04.326-.227.814-.126 1.015.101.201.817.74 1.301.839 1.237.255 2.491-.342 2.644-.517.222-.254-.428-.725-.807-.825zm7.51-3.222c-.334-.065-.85-.469-1.016-.753-.29-.498.157-3.642.127-4.946-.35-.234-2.393.926-2.393.926-.437 1.815.817 2.863.659 4.262-.032.284-.17.964-.071 1.132.099.169.752.594 1.178.652 1.088.148 2.141-.443 2.264-.604.178-.234-.414-.604-.748-.669zm3.984-12.977c-.589-.235-1.348-.276-2.104-.386-1.198-.175-2.852-.765-3.529-1.086-.825-.495-2.577-1.661-3.012-1.948S18.093 8.128 17.375 8h-.156c.385.542.609 1.159.748 2.841 0 0 3.319 1.661 3.595 1.753 1.125.375 3.182.366 4.344.512.602.076 1.021-.014 1.499-.047.722-.049 1.38-.055 1.422-.371.05-.367-.595-.265-1.072-.455zM10.999 8.402c-1.666.993-3.368 3.049-3.98 3.914-.36.283-.686.614-.897.736-.389.223-2.154 1.432-3.334 2.005-.354.166-1.458.438-1.992.781-.432.278-.845.262-.727.612.102.302.508.216 1.227.132.719-.084 1.929-.289 2.325-.566.8-.531 3.347-1.156 4.597-2.031.221-.155 2.385-2.163 2.781-2.741.543-1.515.282-2.556 0-2.842z"/><path fill="#292F33" d="M23.042 19.417c-.229-.981-1.5-2.047-2.677-2.948-1.177-.901-2.375-1.438-2.375-1.438.034-.487-.172-1.295-.089-2.016.099-.853.26-1.689.26-1.689s1.633.727 3.402 1.267c.302-.363.618-1.395.559-1.833-.903-.841-2.483-1.754-2.919-2.042s-.837-.637-1.828-.718h-1.639s-.099.856-.749.918C14.337 8.98 13.56 8 13.56 8l-1.748.167c-2.198.338-4 3.024-4.794 4.151-.36.283-.36.283-.526.447.927.602 2.128 1.035 2.128 1.035 1.188-1.024 2.078-1.535 2.474-2.113 0 0 .659 1.356.912 2.388.253 1.032.202 2.925.202 2.925s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884 0 0-.606 1.335-.302 2.484.403 1.529.885 3.468.927 4.008 1.412 0 1.667-.359 1.667-.359s.02-.839.134-1.778c.069-.572.269-1.544.269-2.393 0-.849.217-1.424.343-1.776s.601-1.452.677-2.052c.02-.162.008-.374-.022-.6.534.292 1.493.792 2.084.954.849.232 1.494.595 1.718.79s.376.335.376.335-.201.557-.141 1.516c.055.877.693 1.658.8 2.703.893-.133 1.53-.499 1.53-.499s.079-1.336.098-1.916c.023-.706.412-2.193.265-2.824z"/><path fill="#67757F" d="M7.192 13.168c.795-1.126 3.067-4.339 5.508-4.55 0 0 1.118 1.459 2.565 1.235 1.447-.224 1.482-1.318 1.482-1.318l1.727.149c.494.04.841.148 1.12.281-.163-.101-.304-.189-.391-.246-.435-.287-.837-.638-1.828-.719h-1.639s-.309.699-.751.766S13.56 8 13.56 8l-1.748.167c-2.678.421-4.566 3.941-5.32 4.598.106.104.456.283.7.403z"/><path fill="#67757F" d="M13.762 27.297c-.402-1.36-1.283-4.497-.45-6.056.075-.368-.23-1.357-.318-1.729-.063-.266-.103-2.438-.072-2.717 3.859-.123 5.068-1.763 5.068-1.763s-2.139 1.191-5.354.57c.174-1.719-1.134-4.337-1.134-4.337-.213-.025-.265.168-.408.424 0 0 .774 1.865.912 2.718.137.852.202 2.593.202 2.593s-.005 1.674.058 1.94c.088.372.353 1.449.353 1.884-.952 1.783-.099 2.98.625 6.492.169.008.336.008.518-.019zm7.32-4.562c-.06-.958.024-1.639-.072-1.843-.096-.204-.52-.455-.52-.455s-.201.557-.141 1.516c.055.877.69 1.734.8 2.703.309-.046.406-.073.706-.161-.613-.261-.735-1.154-.773-1.76z"/></svg>
|
Before Width: | Height: | Size: 4.4 KiB After Width: | Height: | Size: 4.5 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#D89882" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F7DECE" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#E0AA94" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#C68F6A" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#F3D2A2" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#D2A077" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D5AB88" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#AA8052" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#D4AB88" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#B78B60" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#845636" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#AF7E57" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#90603E" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#543226" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#7C533E" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#583529" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.4 KiB |
@ -1 +1 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M36 20.363C34.648 19.937 32.158 17 30 17c-3 0-3-7-4-9s-3-4-3-5-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.658.179 7-.136.794-.107 1.493-.357 2-.864 0 0 0 8 2 11 0 0-1 1-2 4s-2 0-2-2-1-5-5-7c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#4289C1" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#EF9645" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 36 36"><path fill="#FFDC5D" d="M36 20.363C34.529 19.5 31.846 18 30 17c-2.638-1.429-3.53-5.558-4.14-7.737C25.256 7.11 23.201 3.737 23 3c-.263-.965-3-2-8 0S7 5 5 5 2 7 1 9s0 2 0 2c1 1 2-2 4-3s3 1 5 0c1.493-.747 4.146.009 6.488-.305.794-.107 2.005-.188 2.512-.695 0 0 .572 6.698 2 11 0 0-.209 1.075-1.209 4.075-.5 1.5-1.791 1.425-2.166.8S17 21 17 20c0-2-1-5-5-7-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9s3 2 7 2c1.943 0 17.812.48 22 .364v-6.001z"/><path fill="#FA743E" d="M21 18c3.745 2.204 12.107.993 12.798.897S36 20.363 36 20.363v4.918H19.626s.348-2.123-.23-3.073C20.396 20.754 21 18 21 18z"/><path fill="#DD551F" d="M8.182 16.405c2.186-1.941 5.633-1.688 8.025.472C15.49 15.504 14.201 14.101 12 13c-1.789-.894-5.658-.683-7 2-2 4 0 8 2 9 .239.119.463.239.681.356-1.814-2.621-1.665-6.025.501-7.951z"/><path fill="#FCAB40" d="M12 18.5c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C12.78 16.513 13.951 16.5 14 16.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028 0-.821.028-1.646.854-.098.097-.226.146-.354.146zm-4 3c-.128 0-.256-.049-.354-.146-.195-.195-.195-.512 0-.707C8.78 19.513 9.951 19.5 10 19.5c.276 0 .5.224.5.5s-.224.5-.5.5c-.028.001-.821.028-1.646.854-.098.097-.226.146-.354.146z"/><path fill="#55ACEE" d="M0 24h36v12H0z"/><path fill="#55ACEE" d="M6 24c3-2 7-5 6-3s-1.001 3 1 2c2-1 5-2 4 0s2 1 3 0 4 0 3 1-9 2-12 2-5-2-5-2z"/></svg>
|
Before Width: | Height: | Size: 1.1 KiB After Width: | Height: | Size: 1.4 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.1 KiB |
Before Width: | Height: | Size: 5.9 KiB After Width: | Height: | Size: 6.2 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.6 KiB |
Before Width: | Height: | Size: 5.5 KiB After Width: | Height: | Size: 4.6 KiB |
1
public/emoji/1f468-1f3fb-200d-1f91d-200d-1f468-1f3fc.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fb-200d-1f91d-200d-1f468-1f3fd.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fb-200d-1f91d-200d-1f468-1f3fe.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fb-200d-1f91d-200d-1f468-1f3ff.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fc-200d-1f91d-200d-1f468-1f3fd.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fc-200d-1f91d-200d-1f468-1f3fe.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fc-200d-1f91d-200d-1f468-1f3ff.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3fe.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
1
public/emoji/1f468-1f3fd-200d-1f91d-200d-1f468-1f3ff.svg
Normal file
After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 5.1 KiB After Width: | Height: | Size: 5.0 KiB |