feat(rss): add podcast-namespace tags for platforms + previousUrl tag

- add podcast:id tag
- add podcast:funding tag
- add podcast:social tag
- add podcast:previousUrl tag
- add missing platforms with icons
- update platforms table to include social and funding platforms
- rename platform_links table to podcasts_platforms
- move podcast import methods from podcast controller
- update import functionality to insert platforms from rss

closes #73, #75, #76, #80
This commit is contained in:
Benjamin Bellamy 2020-11-18 17:17:56 +00:00 committed by Yassine Doghri
parent 7ee579d054
commit dbba8dc581
70 changed files with 1121 additions and 465 deletions

View File

@ -32,6 +32,7 @@ $routes->setAutoRoute(false);
$routes->addPlaceholder('podcastName', '[a-zA-Z0-9\_]{1,191}');
$routes->addPlaceholder('slug', '[a-zA-Z0-9\-]{1,191}');
$routes->addPlaceholder('base64', '[A-Za-z0-9\.\_]+\-{0,2}');
$routes->addPlaceholder('platformType', '\bpodcasting|\bsocial|\bfunding');
/**
* --------------------------------------------------------------------
@ -69,6 +70,8 @@ $routes->add('audio/(:base64)/(:any)', 'Analytics::hit/$1/$2', [
$routes->get('.well-known/unknown-useragents', 'UnknownUserAgents');
$routes->get('.well-known/unknown-useragents/(:num)', 'UnknownUserAgents/$1');
$routes->get('.well-known/platforms', 'Platform');
// Admin area
$routes->group(
config('App')->adminGateway,
@ -94,11 +97,11 @@ $routes->group(
$routes->post('new', 'Podcast::attemptCreate', [
'filter' => 'permission:podcasts-create',
]);
$routes->get('import', 'Podcast::import', [
$routes->get('import', 'PodcastImport', [
'as' => 'podcast-import',
'filter' => 'permission:podcasts-import',
]);
$routes->post('import', 'Podcast::attemptImport', [
$routes->post('import', 'PodcastImport::attemptImport', [
'filter' => 'permission:podcasts-import',
]);
@ -280,25 +283,44 @@ $routes->group(
});
});
$routes->group('settings', function ($routes) {
$routes->get('/', 'PodcastSettings/$1', [
'as' => 'podcast-settings',
]);
$routes->get('platforms', 'PodcastSettings::platforms/$1', [
'as' => 'platforms',
'filter' => 'permission:podcast-manage_platforms',
]);
$routes->post(
'platforms',
'PodcastSettings::attemptPlatformsUpdate/$1',
['filter' => 'permission:podcast-manage_platforms']
);
$routes->add(
'platforms/(:num)/remove-link',
'PodcastSettings::removePlatformLink/$1/$2',
$routes->group('platforms', function ($routes) {
$routes->get(
'/',
'PodcastPlatform::platforms/$1/podcasting',
[
'as' => 'platforms-remove',
'as' => 'platforms-podcasting',
'filter' => 'permission:podcast-manage_platforms',
]
);
$routes->get(
'social',
'PodcastPlatform::platforms/$1/social',
[
'as' => 'platforms-social',
'filter' => 'permission:podcast-manage_platforms',
]
);
$routes->get(
'funding',
'PodcastPlatform::platforms/$1/funding',
[
'as' => 'platforms-funding',
'filter' => 'permission:podcast-manage_platforms',
]
);
$routes->post(
'save/(:platformType)',
'PodcastPlatform::attemptPlatformsUpdate/$1/$2',
[
'as' => 'platforms-save',
'filter' => 'permission:podcast-manage_platforms',
]
);
$routes->add(
'(:slug)/podcast-platform-remove',
'PodcastPlatform::removePodcastPlatform/$1/$2',
[
'as' => 'podcast-platform-remove',
'filter' => 'permission:podcast-manage_platforms',
]
);

View File

@ -13,7 +13,6 @@ use App\Models\LanguageModel;
use App\Models\PodcastModel;
use App\Models\EpisodeModel;
use Config\Services;
use League\HTMLToMarkdown\HtmlConverter;
class Podcast extends BaseController
{
@ -202,233 +201,6 @@ class Podcast extends BaseController
return redirect()->route('podcast-view', [$newPodcastId]);
}
public function import()
{
helper(['form', 'misc']);
$languageOptions = (new LanguageModel())->getLanguageOptions();
$categoryOptions = (new CategoryModel())->getCategoryOptions();
$data = [
'languageOptions' => $languageOptions,
'categoryOptions' => $categoryOptions,
'browserLang' => get_browser_language(
$this->request->getServer('HTTP_ACCEPT_LANGUAGE')
),
];
return view('admin/podcast/import', $data);
}
public function attemptImport()
{
helper(['media', 'misc']);
$rules = [
'imported_feed_url' => 'required|validate_url',
'season_number' => 'is_natural_no_zero|permit_empty',
'max_episodes' => 'is_natural_no_zero|permit_empty',
];
if (!$this->validate($rules)) {
return redirect()
->back()
->withInput()
->with('errors', $this->validator->getErrors());
}
try {
$feed = simplexml_load_file(
$this->request->getPost('imported_feed_url')
);
} catch (\ErrorException $ex) {
return redirect()
->back()
->withInput()
->with('errors', [
$ex->getMessage() .
': <a href="' .
$this->request->getPost('imported_feed_url') .
'" rel="noreferrer noopener" target="_blank">' .
$this->request->getPost('imported_feed_url') .
' ⎋</a>',
]);
}
$nsItunes = $feed->channel[0]->children(
'http://www.itunes.com/dtds/podcast-1.0.dtd'
);
$nsPodcast = $feed->channel[0]->children(
'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md'
);
if ((string) $nsPodcast->locked === 'yes') {
return redirect()
->back()
->withInput()
->with('errors', [lang('PodcastImport.lock_import')]);
}
$converter = new HtmlConverter();
$channelDescriptionHtml = $feed->channel[0]->description;
$podcast = new \App\Entities\Podcast([
'name' => $this->request->getPost('name'),
'imported_feed_url' => $this->request->getPost('imported_feed_url'),
'new_feed_url' => base_url(
route_to('podcast_feed', $this->request->getPost('name'))
),
'title' => $feed->channel[0]->title,
'description_markdown' => $converter->convert(
$channelDescriptionHtml
),
'description_html' => $channelDescriptionHtml,
'image' => download_file($nsItunes->image->attributes()),
'language_code' => $this->request->getPost('language'),
'category_id' => $this->request->getPost('category'),
'parental_advisory' => empty($nsItunes->explicit)
? null
: (in_array($nsItunes->explicit, ['yes', 'true'])
? 'explicit'
: (in_array($nsItunes->explicit, ['no', 'false'])
? 'clean'
: null)),
'owner_name' => $nsItunes->owner->name,
'owner_email' => $nsItunes->owner->email,
'publisher' => $nsItunes->author,
'type' => empty($nsItunes->type) ? 'episodic' : $nsItunes->type,
'copyright' => $feed->channel[0]->copyright,
'is_blocked' => empty($nsItunes->block)
? false
: $nsItunes->block === 'yes',
'is_completed' => empty($nsItunes->complete)
? false
: $nsItunes->complete === 'yes',
'created_by' => user(),
'updated_by' => user(),
]);
$podcastModel = new PodcastModel();
$db = \Config\Database::connect();
$db->transStart();
if (!($newPodcastId = $podcastModel->insert($podcast, true))) {
$db->transRollback();
return redirect()
->back()
->withInput()
->with('errors', $podcastModel->errors());
}
$authorize = Services::authorization();
$podcastAdminGroup = $authorize->group('podcast_admin');
$podcastModel->addPodcastContributor(
user()->id,
$newPodcastId,
$podcastAdminGroup->id
);
$numberItems = $feed->channel[0]->item->count();
$lastItem =
!empty($this->request->getPost('max_episodes')) &&
$this->request->getPost('max_episodes') < $numberItems
? $this->request->getPost('max_episodes')
: $numberItems;
$slugs = [];
// For each Episode:
for ($itemNumber = 1; $itemNumber <= $lastItem; $itemNumber++) {
$item = $feed->channel[0]->item[$numberItems - $itemNumber];
$nsItunes = $item->children(
'http://www.itunes.com/dtds/podcast-1.0.dtd'
);
$slug = slugify(
$this->request->getPost('slug_field') === 'title'
? $item->title
: basename($item->link)
);
if (in_array($slug, $slugs)) {
$slugNumber = 2;
while (in_array($slug . '-' . $slugNumber, $slugs)) {
$slugNumber++;
}
$slug = $slug . '-' . $slugNumber;
}
$slugs[] = $slug;
$itemDescriptionHtml =
$this->request->getPost('description_field') === 'summary'
? $nsItunes->summary
: ($this->request->getPost('description_field') ===
'subtitle_summary'
? $nsItunes->subtitle . '<br/>' . $nsItunes->summary
: $item->description);
$newEpisode = new \App\Entities\Episode([
'podcast_id' => $newPodcastId,
'guid' => empty($item->guid) ? null : $item->guid,
'title' => $item->title,
'slug' => $slug,
'enclosure' => download_file($item->enclosure->attributes()),
'description_markdown' => $converter->convert(
$itemDescriptionHtml
),
'description_html' => $itemDescriptionHtml,
'image' =>
!$nsItunes->image || empty($nsItunes->image->attributes())
? null
: download_file($nsItunes->image->attributes()),
'parental_advisory' => empty($nsItunes->explicit)
? null
: (in_array($nsItunes->explicit, ['yes', 'true'])
? 'explicit'
: (in_array($nsItunes->explicit, ['no', 'false'])
? 'clean'
: null)),
'number' =>
$this->request->getPost('force_renumber') === 'yes'
? $itemNumber
: (!empty($nsItunes->episode)
? $nsItunes->episode
: null),
'season_number' => empty(
$this->request->getPost('season_number')
)
? (!empty($nsItunes->season)
? $nsItunes->season
: null)
: $this->request->getPost('season_number'),
'type' => empty($nsItunes->episodeType)
? 'full'
: $nsItunes->episodeType,
'is_blocked' => empty($nsItunes->block)
? false
: $nsItunes->block === 'yes',
'created_by' => user(),
'updated_by' => user(),
'published_at' => strtotime($item->pubDate),
]);
$episodeModel = new EpisodeModel();
if (!$episodeModel->insert($newEpisode)) {
// FIXME: What shall we do?
return redirect()
->back()
->withInput()
->with('errors', $episodeModel->errors());
}
}
$db->transComplete();
return redirect()->route('podcast-view', [$newPodcastId]);
}
public function edit()
{
helper('form');

View File

@ -0,0 +1,307 @@
<?php
/**
* @copyright 2020 Podlibre
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
namespace App\Controllers\Admin;
use App\Models\CategoryModel;
use App\Models\LanguageModel;
use App\Models\PodcastModel;
use App\Models\EpisodeModel;
use App\Models\PlatformModel;
use Config\Services;
use League\HTMLToMarkdown\HtmlConverter;
class PodcastImport extends BaseController
{
/**
* @var \App\Entities\Podcast|null
*/
protected $podcast;
public function _remap($method, ...$params)
{
if (count($params) > 0) {
if (
!($this->podcast = (new PodcastModel())->getPodcastById(
$params[0]
))
) {
throw \CodeIgniter\Exceptions\PageNotFoundException::forPageNotFound();
}
}
return $this->$method();
}
public function index()
{
helper(['form', 'misc']);
$languageOptions = (new LanguageModel())->getLanguageOptions();
$categoryOptions = (new CategoryModel())->getCategoryOptions();
$data = [
'languageOptions' => $languageOptions,
'categoryOptions' => $categoryOptions,
'browserLang' => get_browser_language(
$this->request->getServer('HTTP_ACCEPT_LANGUAGE')
),
];
return view('admin/podcast/import', $data);
}
public function attemptImport()
{
helper(['media', 'misc']);
$rules = [
'imported_feed_url' => 'required|validate_url',
'season_number' => 'is_natural_no_zero|permit_empty',
'max_episodes' => 'is_natural_no_zero|permit_empty',
];
if (!$this->validate($rules)) {
return redirect()
->back()
->withInput()
->with('errors', $this->validator->getErrors());
}
try {
$feed = simplexml_load_file(
$this->request->getPost('imported_feed_url')
);
} catch (\ErrorException $ex) {
return redirect()
->back()
->withInput()
->with('errors', [
$ex->getMessage() .
': <a href="' .
$this->request->getPost('imported_feed_url') .
'" rel="noreferrer noopener" target="_blank">' .
$this->request->getPost('imported_feed_url') .
' ⎋</a>',
]);
}
$nsItunes = $feed->channel[0]->children(
'http://www.itunes.com/dtds/podcast-1.0.dtd'
);
$nsPodcast = $feed->channel[0]->children(
'https://github.com/Podcastindex-org/podcast-namespace/blob/main/docs/1.0.md'
);
if ((string) $nsPodcast->locked === 'yes') {
return redirect()
->back()
->withInput()
->with('errors', [lang('PodcastImport.lock_import')]);
}
$converter = new HtmlConverter();
$channelDescriptionHtml = $feed->channel[0]->description;
$podcast = new \App\Entities\Podcast([
'name' => $this->request->getPost('name'),
'imported_feed_url' => $this->request->getPost('imported_feed_url'),
'new_feed_url' => base_url(
route_to('podcast_feed', $this->request->getPost('name'))
),
'title' => $feed->channel[0]->title,
'description_markdown' => $converter->convert(
$channelDescriptionHtml
),
'description_html' => $channelDescriptionHtml,
'image' => download_file($nsItunes->image->attributes()),
'language_code' => $this->request->getPost('language'),
'category_id' => $this->request->getPost('category'),
'parental_advisory' => empty($nsItunes->explicit)
? null
: (in_array($nsItunes->explicit, ['yes', 'true'])
? 'explicit'
: (in_array($nsItunes->explicit, ['no', 'false'])
? 'clean'
: null)),
'owner_name' => $nsItunes->owner->name,
'owner_email' => $nsItunes->owner->email,
'publisher' => $nsItunes->author,
'type' => empty($nsItunes->type) ? 'episodic' : $nsItunes->type,
'copyright' => $feed->channel[0]->copyright,
'is_blocked' => empty($nsItunes->block)
? false
: $nsItunes->block === 'yes',
'is_completed' => empty($nsItunes->complete)
? false
: $nsItunes->complete === 'yes',
'created_by' => user(),
'updated_by' => user(),
]);
$podcastModel = new PodcastModel();
$db = \Config\Database::connect();
$db->transStart();
if (!($newPodcastId = $podcastModel->insert($podcast, true))) {
$db->transRollback();
return redirect()
->back()
->withInput()
->with('errors', $podcastModel->errors());
}
$authorize = Services::authorization();
$podcastAdminGroup = $authorize->group('podcast_admin');
$podcastModel->addPodcastContributor(
user()->id,
$newPodcastId,
$podcastAdminGroup->id
);
$platformModel = new PlatformModel();
$podcastsPlatformsData = [];
foreach ($nsPodcast->id as $podcastingPlatform) {
$slug = $podcastingPlatform->attributes()['platform'];
$platformModel->getOrCreatePlatform($slug, 'podcasting');
array_push($podcastsPlatformsData, [
'platform_slug' => $slug,
'podcast_id' => $newPodcastId,
'link_url' => $podcastingPlatform->attributes()['url'],
'link_content' => $podcastingPlatform->attributes()['id'],
'is_visible' => false,
]);
}
foreach ($nsPodcast->social as $socialPlatform) {
$slug = $socialPlatform->attributes()['platform'];
$platformModel->getOrCreatePlatform($slug, 'social');
array_push($podcastsPlatformsData, [
'platform_slug' => $socialPlatform->attributes()['platform'],
'podcast_id' => $newPodcastId,
'link_url' => $socialPlatform->attributes()['url'],
'link_content' => $socialPlatform,
'is_visible' => false,
]);
}
foreach ($nsPodcast->funding as $fundingPlatform) {
$slug = $fundingPlatform->attributes()['platform'];
$platformModel->getOrCreatePlatform($slug, 'funding');
array_push($podcastsPlatformsData, [
'platform_slug' => $fundingPlatform->attributes()['platform'],
'podcast_id' => $newPodcastId,
'link_url' => $fundingPlatform->attributes()['url'],
'link_content' => $fundingPlatform->attributes()['id'],
'is_visible' => false,
]);
}
$platformModel->createPodcastPlatforms(
$newPodcastId,
$podcastsPlatformsData
);
$numberItems = $feed->channel[0]->item->count();
$lastItem =
!empty($this->request->getPost('max_episodes')) &&
$this->request->getPost('max_episodes') < $numberItems
? $this->request->getPost('max_episodes')
: $numberItems;
$slugs = [];
// For each Episode:
for ($itemNumber = 1; $itemNumber <= $lastItem; $itemNumber++) {
$item = $feed->channel[0]->item[$numberItems - $itemNumber];
$nsItunes = $item->children(
'http://www.itunes.com/dtds/podcast-1.0.dtd'
);
$slug = slugify(
$this->request->getPost('slug_field') === 'title'
? $item->title
: basename($item->link)
);
if (in_array($slug, $slugs)) {
$slugNumber = 2;
while (in_array($slug . '-' . $slugNumber, $slugs)) {
$slugNumber++;
}
$slug = $slug . '-' . $slugNumber;
}
$slugs[] = $slug;
$itemDescriptionHtml =
$this->request->getPost('description_field') === 'summary'
? $nsItunes->summary
: ($this->request->getPost('description_field') ===
'subtitle_summary'
? $nsItunes->subtitle . '<br/>' . $nsItunes->summary
: $item->description);
$newEpisode = new \App\Entities\Episode([
'podcast_id' => $newPodcastId,
'guid' => empty($item->guid) ? null : $item->guid,
'title' => $item->title,
'slug' => $slug,
'enclosure' => download_file($item->enclosure->attributes()),
'description_markdown' => $converter->convert(
$itemDescriptionHtml
),
'description_html' => $itemDescriptionHtml,
'image' =>
!$nsItunes->image || empty($nsItunes->image->attributes())
? null
: download_file($nsItunes->image->attributes()),
'parental_advisory' => empty($nsItunes->explicit)
? null
: (in_array($nsItunes->explicit, ['yes', 'true'])
? 'explicit'
: (in_array($nsItunes->explicit, ['no', 'false'])
? 'clean'
: null)),
'number' =>
$this->request->getPost('force_renumber') === 'yes'
? $itemNumber
: (!empty($nsItunes->episode)
? $nsItunes->episode
: null),
'season_number' => empty(
$this->request->getPost('season_number')
)
? (!empty($nsItunes->season)
? $nsItunes->season
: null)
: $this->request->getPost('season_number'),
'type' => empty($nsItunes->episodeType)
? 'full'
: $nsItunes->episodeType,
'is_blocked' => empty($nsItunes->block)
? false
: $nsItunes->block === 'yes',
'created_by' => user(),
'updated_by' => user(),
'published_at' => strtotime($item->pubDate),
]);
$episodeModel = new EpisodeModel();
if (!$episodeModel->insert($newEpisode)) {
// FIXME: What shall we do?
return redirect()
->back()
->withInput()
->with('errors', $episodeModel->errors());
}
}
$db->transComplete();
return redirect()->route('podcast-view', [$newPodcastId]);
}
}

View File

@ -12,7 +12,7 @@ use App\Models\PlatformModel;
use App\Models\PodcastModel;
use Config\Services;
class PodcastSettings extends BaseController
class PodcastPlatform extends BaseController
{
/**
* @var \App\Entities\Podcast|null
@ -33,46 +33,53 @@ class PodcastSettings extends BaseController
public function index()
{
return view('admin/podcast/settings/dashboard');
return view('admin/podcast/platforms/dashboard');
}
public function platforms()
public function platforms($platformType)
{
helper('form');
$data = [
'podcast' => $this->podcast,
'platformType' => $platformType,
'platforms' => (new PlatformModel())->getPlatformsWithLinks(
$this->podcast->id
$this->podcast->id,
$platformType
),
];
replace_breadcrumb_params([0 => $this->podcast->title]);
return view('admin/podcast/settings/platforms', $data);
return view('admin/podcast/platforms', $data);
}
public function attemptPlatformsUpdate()
public function attemptPlatformsUpdate($platformType)
{
$platformModel = new PlatformModel();
$validation = Services::validation();
$platformLinksData = [];
$podcastsPlatformsData = [];
foreach (
$this->request->getPost('platforms')
as $platformName => $platformLink
as $platformSlug => $podcastPlatform
) {
$platformLinkUrl = $platformLink['url'];
$podcastPlatformUrl = $podcastPlatform['url'];
if (
!empty($platformLinkUrl) &&
$validation->check($platformLinkUrl, 'validate_url')
!empty($podcastPlatformUrl) &&
$validation->check($podcastPlatformUrl, 'validate_url')
) {
$platformId = $platformModel->getPlatformId($platformName);
array_push($platformLinksData, [
'platform_id' => $platformId,
array_push($podcastsPlatformsData, [
'platform_slug' => $platformSlug,
'podcast_id' => $this->podcast->id,
'link_url' => $platformLinkUrl,
'is_visible' => array_key_exists('visible', $platformLink)
? $platformLink['visible'] == 'yes'
'link_url' => $podcastPlatformUrl,
'link_content' => $podcastPlatform['content'],
'is_visible' => array_key_exists(
'visible',
$podcastPlatform
)
? $podcastPlatform['visible'] == 'yes'
: false,
]);
}
@ -80,7 +87,8 @@ class PodcastSettings extends BaseController
$platformModel->savePodcastPlatforms(
$this->podcast->id,
$platformLinksData
$platformType,
$podcastsPlatformsData
);
return redirect()
@ -88,11 +96,11 @@ class PodcastSettings extends BaseController
->with('message', lang('Platforms.messages.updateSuccess'));
}
public function removePlatformLink($platformId)
public function removePodcastPlatform($platformSlug)
{
(new PlatformModel())->removePlatformLink(
(new PlatformModel())->removePodcastPlatform(
$this->podcast->id,
$platformId
$platformSlug
);
return redirect()

View File

@ -0,0 +1,24 @@
<?php
/**
* @copyright 2020 Podlibre
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
* @link https://castopod.org/
*/
namespace App\Controllers;
use CodeIgniter\Controller;
/*
* Provide public access to all platforms so that they can be exported
*/
class Platform extends Controller
{
public function index()
{
$model = new \App\Models\PlatformModel();
return $this->response->setJSON($model->getPlatforms());
}
}

View File

@ -18,15 +18,13 @@ class AddPlatforms extends Migration
public function up()
{
$this->forge->addField([
'id' => [
'type' => 'INT',
'unsigned' => true,
'auto_increment' => true,
],
'name' => [
'slug' => [
'type' => 'VARCHAR',
'constraint' => 32,
'unique' => true,
],
'type' => [
'type' => 'ENUM',
'constraint' => ['podcasting', 'social', 'funding'],
],
'label' => [
'type' => 'VARCHAR',
@ -42,14 +40,14 @@ class AddPlatforms extends Migration
'null' => true,
'default' => null,
],
'created_at' => [
'type' => 'DATETIME',
],
'updated_at' => [
'type' => 'DATETIME',
],
]);
$this->forge->addKey('id', true);
$this->forge->addField(
'`created_at` timestamp NOT NULL DEFAULT current_timestamp()'
);
$this->forge->addField(
'`updated_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp()'
);
$this->forge->addKey('slug', true);
$this->forge->createTable('platforms');
}

View File

@ -1,8 +1,8 @@
<?php
/**
* Class AddPlatformsLinks
* Creates platform_links table in database
* Class AddAddPodcastsPlatforms
* Creates podcasts_platforms table in database
*
* @copyright 2020 Podlibre
* @license https://www.gnu.org/licenses/agpl-3.0.en.html AGPL3
@ -22,14 +22,19 @@ class AddPodcastsPlatforms extends Migration
'type' => 'INT',
'unsigned' => true,
],
'platform_id' => [
'type' => 'INT',
'unsigned' => true,
'platform_slug' => [
'type' => 'VARCHAR',
'constraint' => 32,
],
'link_url' => [
'type' => 'VARCHAR',
'constraint' => 512,
],
'link_content' => [
'type' => 'VARCHAR',
'constraint' => 128,
'null' => true,
],
'is_visible' => [
'type' => 'TINYINT',
'constraint' => 1,
@ -43,14 +48,14 @@ class AddPodcastsPlatforms extends Migration
],
]);
$this->forge->addPrimaryKey(['podcast_id', 'platform_id']);
$this->forge->addPrimaryKey(['podcast_id', 'platform_slug']);
$this->forge->addForeignKey('podcast_id', 'podcasts', 'id');
$this->forge->addForeignKey('platform_id', 'platforms', 'id');
$this->forge->createTable('platform_links');
$this->forge->addForeignKey('platform_slug', 'platforms', 'slug');
$this->forge->createTable('podcasts_platforms');
}
public function down()
{
$this->forge->dropTable('platform_links');
$this->forge->dropTable('podcasts_platforms');
}
}

View File

@ -19,135 +19,303 @@ class PlatformSeeder extends Seeder
{
$data = [
[
'name' => 'apple-podcasts',
'slug' => 'amazon',
'type' => 'podcasting',
'label' => 'Amazon Music and Audible',
'home_url' => 'https://music.amazon.com/podcasts',
'submit_url' => 'http://amazon.com/podcasters',
],
[
'slug' => 'apple',
'type' => 'podcasting',
'label' => 'Apple Podcasts',
'home_url' => 'https://www.apple.com/itunes/podcasts/',
'submit_url' =>
'https://podcastsconnect.apple.com/my-podcasts/new-feed',
],
[
'name' => 'blubrry',
'slug' => 'blubrry',
'type' => 'podcasting',
'label' => 'Blubrry',
'home_url' => 'https://www.blubrry.com/',
'submit_url' => 'https://www.blubrry.com/addpodcast.php',
],
[
'name' => 'castbox',
'slug' => 'castbox',
'type' => 'podcasting',
'label' => 'Castbox',
'home_url' => 'https://castbox.fm/',
'submit_url' =>
'https://helpcenter.castbox.fm/portal/kb/articles/submit-my-podcast',
],
[
'name' => 'castro',
'slug' => 'castro',
'type' => 'podcasting',
'label' => 'Castro',
'home_url' => 'http://castro.fm/',
'submit_url' => null,
'submit_url' =>
'https://castro.fm/support/link-to-your-podcast-in-castro',
],
[
'name' => 'deezer',
'slug' => 'chartable',
'type' => 'podcasting',
'label' => 'Chartable',
'home_url' => 'https://chartable.com/',
'submit_url' => 'https://chartable.com/podcasts/submit',
],
[
'slug' => 'deezer',
'type' => 'podcasting',
'label' => 'Deezer',
'home_url' => 'https://www.deezer.com/',
'submit_url' => 'https://podcasters.deezer.com/submission',
],
[
'name' => 'google-podcasts',
'slug' => 'fyyd',
'type' => 'podcasting',
'label' => 'fyyd',
'home_url' => 'https://fyyd.de/',
'submit_url' => 'https://fyyd.de/add-feed',
],
[
'slug' => 'google',
'type' => 'podcasting',
'label' => 'Google Podcasts',
'home_url' => 'https://podcasts.google.com/about',
'submit_url' =>
'https://search.google.com/search-console/about',
],
[
'name' => 'ivoox',
'slug' => 'ivoox',
'type' => 'podcasting',
'label' => 'Ivoox',
'home_url' => 'https://www.ivoox.com/',
'submit_url' => null,
'submit_url' => 'http://www.ivoox.com/upload-podcast_u.html',
],
[
'name' => 'listennotes',
'slug' => 'listennotes',
'type' => 'podcasting',
'label' => 'ListenNotes',
'home_url' => 'https://www.listennotes.com/',
'submit_url' => 'https://www.listennotes.com/submit/',
],
[
'name' => 'overcast',
'slug' => 'overcast',
'type' => 'podcasting',
'label' => 'Overcast',
'home_url' => 'https://overcast.fm/',
'submit_url' => 'https://overcast.fm/podcasterinfo',
],
[
'name' => 'playerfm',
'slug' => 'playerfm',
'type' => 'podcasting',
'label' => 'Player.Fm',
'home_url' => 'https://player.fm/',
'submit_url' => 'https://player.fm/importer/feed',
],
[
'name' => 'pocketcasts',
'slug' => 'pocketcasts',
'type' => 'podcasting',
'label' => 'Pocketcasts',
'home_url' => 'https://www.pocketcasts.com/',
'submit_url' => 'https://www.pocketcasts.com/submit/',
],
[
'name' => 'podbean',
'slug' => 'podbean',
'type' => 'podcasting',
'label' => 'Podbean',
'home_url' => 'https://www.podbean.com/',
'submit_url' => 'https://www.podbean.com/site/submitPodcast',
],
[
'name' => 'podcast-addict',
'slug' => 'podcastaddict',
'type' => 'podcasting',
'label' => 'Podcast Addict',
'home_url' => 'https://podcastaddict.com/',
'submit_url' => 'https://podcastaddict.com/submit',
],
[
'name' => 'podcast-index',
'slug' => 'podcastindex',
'type' => 'podcasting',
'label' => 'Podcast Index',
'home_url' => 'https://podcastindex.org/',
'submit_url' => 'https://api.podcastindex.org/signup',
],
[
'name' => 'podchaser',
'slug' => 'podchaser',
'type' => 'podcasting',
'label' => 'Podchaser',
'home_url' => 'https://www.podchaser.com/',
'submit_url' => 'https://www.podchaser.com/creators/edit',
],
[
'name' => 'podtail',
'slug' => 'podcloud',
'type' => 'podcasting',
'label' => 'podCloud',
'home_url' => 'https://podcloud.fr/',
'submit_url' => 'https://podcloud.fr/studio/podcasts/new',
],
[
'slug' => 'podinstall',
'type' => 'podcasting',
'label' => 'Podinstall',
'home_url' => 'https://www.podinstall.com/',
'submit_url' => 'https://www.podinstall.com/claim.html',
],
[
'slug' => 'podtail',
'type' => 'podcasting',
'label' => 'Podtail',
'home_url' => 'https://podtail.com/',
'submit_url' => 'https://podtail.com/about/faq/',
],
[
'name' => 'radiopublic',
'label' => 'Radiopublic',
'slug' => 'podverse',
'type' => 'podcasting',
'label' => 'Podverse',
'home_url' => 'https://podverse.fm/',
'submit_url' =>
'https://docs.google.com/forms/d/e/1FAIpQLSdewKP-YrE8zGjDPrkmoJEwCxPl_gizEkmzAlTYsiWAuAk1Ng/viewform',
],
[
'slug' => 'radiopublic',
'type' => 'podcasting',
'label' => 'RadioPublic',
'home_url' => 'https://radiopublic.com/',
'submit_url' => 'https://podcasters.radiopublic.com/signup',
],
[
'name' => 'spotify',
'slug' => 'spotify',
'type' => 'podcasting',
'label' => 'Spotify',
'home_url' => 'https://www.spotify.com/',
'submit_url' => 'https://podcasters.spotify.com/submit',
],
[
'name' => 'spreaker',
'slug' => 'spreaker',
'type' => 'podcasting',
'label' => 'Spreaker',
'home_url' => 'https://www.spreaker.com/',
'submit_url' => 'https://www.spreaker.com/cms/shows/rss-import',
],
[
'name' => 'stitcher',
'slug' => 'stitcher',
'type' => 'podcasting',
'label' => 'Stitcher',
'home_url' => 'https://www.stitcher.com/',
'submit_url' => 'https://www.stitcher.com/content-providers',
'submit_url' => 'https://partners.stitcher.com/join',
],
[
'name' => 'tunein',
'slug' => 'tunein',
'type' => 'podcasting',
'label' => 'TuneIn',
'home_url' => 'https://tunein.com/',
'submit_url' =>
'https://help.tunein.com/contact/add-podcast-S19TR3Sdf',
],
[
'slug' => 'paypal',
'type' => 'funding',
'label' => 'Paypal',
'home_url' => 'https://www.paypal.com/',
'submit_url' => 'https://www.paypal.com/paypalme/my/grab',
],
[
'slug' => 'liberapay',
'type' => 'funding',
'label' => 'Liberapay',
'home_url' => 'https://liberapay.com/',
'submit_url' => 'https://liberapay.com/sign-up',
],
[
'slug' => 'patreon',
'type' => 'funding',
'label' => 'Patreon',
'home_url' => 'https://www.patreon.com/',
'submit_url' => 'https://www.patreon.com/create',
],
[
'slug' => 'tipeee',
'type' => 'funding',
'label' => 'Tipeee',
'home_url' => 'https://tipeee.com/',
'submit_url' => 'https://tipeee.com/register/',
],
[
'slug' => 'discord',
'type' => 'social',
'label' => 'Discord',
'home_url' => 'https://discord.com/',
'submit_url' => 'https://discord.com/register',
],
[
'slug' => 'facebook',
'type' => 'social',
'label' => 'Facebook',
'home_url' => 'https://www.facebook.com/',
'submit_url' =>
'https://www.facebook.com/pages/creation/?ref_type=comet_home',
],
[
'slug' => 'instagram',
'type' => 'social',
'label' => 'Instagram',
'home_url' => 'https://www.instagram.com/',
'submit_url' =>
'https://www.instagram.com/accounts/emailsignup/',
],
[
'slug' => 'linkedin',
'type' => 'social',
'label' => 'LinkedIn',
'home_url' => 'https://www.linkedin.com/',
'submit_url' => 'https://www.linkedin.com/company/setup/new/',
],
[
'slug' => 'mastodon',
'type' => 'social',
'label' => 'Mastodon',
'home_url' => 'https://joinmastodon.org/',
'submit_url' => 'https://joinmastodon.org/communities',
],
[
'slug' => 'pixelfed',
'type' => 'social',
'label' => 'Pixelfed',
'home_url' => 'https://pixelfed.org/',
'submit_url' => 'https://beta.joinpixelfed.org/',
],
[
'slug' => 'slack',
'type' => 'social',
'label' => 'Slack',
'home_url' => 'https://slack.com/',
'submit_url' => 'https://slack.com/get-started#/create',
],
[
'slug' => 'twitch',
'type' => 'social',
'label' => 'Twitch',
'home_url' => 'https://www.twitch.tv/',
'submit_url' => 'https://www.twitch.tv/signup',
],
[
'slug' => 'twitter',
'type' => 'social',
'label' => 'Twitter',
'home_url' => 'https://twitter.com/',
'submit_url' => 'https://twitter.com/i/flow/signup',
],
[
'slug' => 'youtube',
'type' => 'social',
'label' => 'Youtube',
'home_url' => 'https://www.youtube.com/',
'submit_url' => 'https://creatoracademy.youtube.com/page/home',
],
];
$this->db
->table('platforms')

View File

@ -13,12 +13,13 @@ use CodeIgniter\Entity;
class Platform extends Entity
{
protected $casts = [
'id' => 'integer',
'name' => 'string',
'slug' => 'string',
'type' => 'string',
'label' => 'string',
'home_url' => 'string',
'submit_url' => '?string',
'link_url' => '?string',
'link_content' => '?string',
'is_visible' => '?boolean',
];
}

View File

@ -55,7 +55,17 @@ class Podcast extends Entity
/**
* @var \App\Entities\Platform
*/
protected $platforms;
protected $podcastingPlatforms;
/**
* @var \App\Entities\Platform
*/
protected $socialPlatforms;
/**
* @var \App\Entities\Platform
*/
protected $fundingPlatforms;
/**
* Holds text only description, striped of any markdown or html special characters
@ -260,25 +270,72 @@ class Podcast extends Entity
}
/**
* Returns the podcast's platform links
* Returns the podcast's podcasting platform links
*
* @return \App\Entities\Platform[]
*/
public function getPlatforms()
public function getPodcastingPlatforms()
{
if (empty($this->id)) {
throw new \RuntimeException(
'Podcast must be created before getting platform links.'
'Podcast must be created before getting podcasting platform links.'
);
}
if (empty($this->platforms)) {
$this->platforms = (new PlatformModel())->getPodcastPlatforms(
$this->id
if (empty($this->podcastingPlatforms)) {
$this->podcastingPlatforms = (new PlatformModel())->getPodcastPlatforms(
$this->id,
'podcasting'
);
}
return $this->platforms;
return $this->podcastingPlatforms;
}
/**
* Returns the podcast's social platform links
*
* @return \App\Entities\Platform[]
*/
public function getSocialPlatforms()
{
if (empty($this->id)) {
throw new \RuntimeException(
'Podcast must be created before getting social platform links.'
);
}
if (empty($this->socialPlatforms)) {
$this->socialPlatforms = (new PlatformModel())->getPodcastPlatforms(
$this->id,
'social'
);
}
return $this->socialPlatforms;
}
/**
* Returns the podcast's funding platform links
*
* @return \App\Entities\Platform[]
*/
public function getFundingPlatforms()
{
if (empty($this->id)) {
throw new \RuntimeException(
'Podcast must be created before getting funding platform links.'
);
}
if (empty($this->fundingPlatforms)) {
$this->fundingPlatforms = (new PlatformModel())->getPodcastPlatforms(
$this->id,
'funding'
);
}
return $this->fundingPlatforms;
}
public function getOtherCategories()

View File

@ -71,6 +71,71 @@ function get_rss_feed($podcast, $serviceName = '')
$podcast_namespace
)
->addAttribute('owner', $podcast->owner_email);
if (!empty($podcast->imported_feed_url)) {
$channel->addChildWithCDATA(
'previousUrl',
$podcast->imported_feed_url,
$podcast_namespace
);
}
foreach ($podcast->podcastingPlatforms as $podcastingPlatform) {
$podcastingPlatformElement = $channel->addChild(
'id',
null,
$podcast_namespace
);
$podcastingPlatformElement->addAttribute(
'platform',
$podcastingPlatform->slug
);
if (!empty($podcastingPlatform->link_content)) {
$podcastingPlatformElement->addAttribute(
'id',
$podcastingPlatform->link_content
);
}
if (!empty($podcastingPlatform->link_url)) {
$podcastingPlatformElement->addAttribute(
'url',
htmlspecialchars($podcastingPlatform->link_url)
);
}
}
foreach ($podcast->socialPlatforms as $socialPlatform) {
$socialPlatformElement = $channel->addChild(
'social',
$socialPlatform->link_content,
$podcast_namespace
);
$socialPlatformElement->addAttribute('platform', $socialPlatform->slug);
if (!empty($socialPlatform->link_url)) {
$socialPlatformElement->addAttribute(
'url',
htmlspecialchars($socialPlatform->link_url)
);
}
}
foreach ($podcast->fundingPlatforms as $fundingPlatform) {
$fundingPlatformElement = $channel->addChild(
'funding',
$fundingPlatform->link_content,
$podcast_namespace
);
$fundingPlatformElement->addAttribute(
'platform',
$fundingPlatform->slug
);
if (!empty($socialPlatform->link_url)) {
$fundingPlatformElement->addAttribute(
'url',
htmlspecialchars($fundingPlatform->link_url)
);
}
}
// set main category first, then other categories as apple
add_category_tag($channel, $podcast->category);
foreach ($podcast->other_categories as $other_category) {

View File

@ -54,11 +54,11 @@ function svg($name, $class = null)
* @param string $class to be added to the svg string
* @return string svg contents
*/
function platform_icon($name, $class = null)
function platform_icon($type, $name, $class = null)
{
try {
$svg_contents = file_get_contents(
'assets/images/platforms/' . $name . '.svg'
'assets/images/platforms/' . $type . '/' . $name . '.svg'
);
} catch (\Exception $e) {
$svg_contents = file_get_contents(

View File

@ -20,13 +20,14 @@ return [
'my-account' => 'my account',
'change-password' => 'change password',
'import' => 'feed import',
'settings' => 'settings',
'platforms' => 'platforms',
'analytics' => 'Analytics',
'locations' => 'Locations',
'webpages' => 'Web pages',
'unique-listeners' => 'Unique listeners',
'players' => 'Players',
'listening-time' => 'Listening time',
'time-periods' => 'Time periods',
'social' => 'social networks',
'funding' => 'funding',
'analytics' => 'analytics',
'locations' => 'locations',
'webpages' => 'web pages',
'unique-listeners' => 'unique listeners',
'players' => 'players',
'listening-time' => 'listening time',
'time-periods' => 'time periods',
];

View File

@ -19,4 +19,9 @@ return [
'removeLinkError' =>
'The platform link could not be removed. Try again.',
],
'description' => [
'podcasting' => 'The podcast ID on this platform',
'social' => 'The podcast account ID on this platform',
'funding' => 'Call to action message',
],
];

View File

@ -18,8 +18,10 @@ return [
'contributors' => 'Contributors',
'contributor-list' => 'All contributors',
'contributor-add' => 'Add contributor',
'settings' => 'Settings',
'platforms' => 'Podcast platforms',
'platforms' => 'External platforms',
'platforms-podcasting' => 'Podcasting',
'platforms-social' => 'Social Networks',
'platforms-funding' => 'Funding',
'podcast-analytics' => 'Audience overview',
'podcast-analytics-webpages' => 'Web pages visits',
'podcast-analytics-locations' => 'Locations',

View File

@ -20,13 +20,14 @@ return [
'my-account' => 'mon compte',
'change-password' => 'changer le mot de passe',
'import' => 'importer un flux',
'settings' => 'paramètres',
'platforms' => 'plateformes',
'analytics' => 'Mesures daudience',
'locations' => 'Localisations',
'webpages' => 'Pages web',
'unique-listeners' => 'Auditeurs uniques',
'players' => 'Lecteurs',
'listening-time' => 'Durée découte',
'time-periods' => 'Périodes',
'social' => 'réseaux sociaux',
'funding' => 'financement',
'analytics' => 'mesures daudience',
'locations' => 'localisations',
'webpages' => 'pages web',
'unique-listeners' => 'auditeurs uniques',
'players' => 'lecteurs',
'listening-time' => 'drée découte',
'time-periods' => 'périodes',
];

View File

@ -19,4 +19,9 @@ return [
'removeLinkError' =>
'Le lien na pas pu être supprimé. Merci dessayer à nouveau.',
],
'description' => [
'podcasting' => 'Lidentifiant du podcast sur cette plate-forme',
'social' => 'Lidentifiant du compte du podcast sur cette plate-forme',
'funding' => 'Message dincitation à laction',
],
];

View File

@ -18,7 +18,10 @@ return [
'contributors' => 'Contributeurs',
'contributor-list' => 'Tous les contributeurs',
'contributor-add' => 'Ajouter un contributeur',
'settings' => 'Paramètres',
'platforms' => 'Plate-formes externes',
'platforms-podcasting' => 'Podcasts',
'platforms-social' => 'Réseaux Sociaux',
'platforms-funding' => 'Financement',
'platforms' => 'Plateformes du podcast',
'podcast-analytics' => 'Vue densemble',
'podcast-analytics-webpages' => 'Visites des pages web',

View File

@ -18,47 +18,63 @@ class PlatformModel extends Model
protected $table = 'platforms';
protected $primaryKey = 'id';
protected $allowedFields = ['name', 'label', 'home_url', 'submit_url'];
protected $allowedFields = ['slug', 'label', 'home_url', 'submit_url'];
protected $returnType = \App\Entities\Platform::class;
protected $useSoftDeletes = false;
protected $useTimestamps = true;
public function getPlatformsWithLinks($podcastId)
public function getPlatforms()
{
if (!($found = cache("podcast{$podcastId}_platforms"))) {
if (!($found = cache('platforms'))) {
$baseUrl = rtrim(config('app')->baseURL, '/');
$found = $this->select(
'platforms.*, platform_links.link_url, platform_links.is_visible'
)
->join(
'platform_links',
"platform_links.platform_id = platforms.id AND platform_links.podcast_id = $podcastId",
'left'
)
->findAll();
cache()->save("podcast{$podcastId}_platforms", $found, DECADE);
"*, CONCAT('{$baseUrl}/assets/images/platforms/',`type`,'/',`slug`,'.svg') as icon"
)->findAll();
cache()->save('platforms', $found, DECADE);
}
return $found;
}
public function getPodcastPlatforms($podcastId)
public function getOrCreatePlatform($slug, $platformType)
{
if (!($found = cache("podcast{$podcastId}_podcastPlatforms"))) {
if (!($found = cache("platforms_$slug"))) {
$found = $this->where('slug', $slug)->first();
if (!$found) {
$data = [
'slug' => $slug,
'type' => $platformType,
'label' => $slug,
'home_url' => '',
'submit_url' => null,
];
$this->insert($data);
$found = $this->where('slug', $slug)->first();
}
cache()->save("platforms_$slug", $found, DECADE);
}
return $found;
}
public function getPlatformsWithLinks($podcastId, $platformType)
{
if (
!($found = cache("podcast{$podcastId}_platforms_{$platformType}"))
) {
$found = $this->select(
'platforms.*, platform_links.link_url, platform_links.is_visible'
'platforms.*, podcasts_platforms.link_url, podcasts_platforms.link_content, podcasts_platforms.is_visible'
)
->join(
'platform_links',
'platform_links.platform_id = platforms.id'
'podcasts_platforms',
"podcasts_platforms.platform_slug = platforms.slug AND podcasts_platforms.podcast_id = $podcastId",
'left'
)
->where('platform_links.podcast_id', $podcastId)
->where('platforms.type', $platformType)
->findAll();
cache()->save(
"podcast{$podcastId}_podcastPlatforms",
"podcast{$podcastId}_platforms_{$platformType}",
$found,
DECADE
);
@ -67,49 +83,85 @@ class PlatformModel extends Model
return $found;
}
public function savePodcastPlatforms($podcastId, $platformLinksData)
public function getPodcastPlatforms($podcastId, $platformType)
{
if (
!($found = cache(
"podcast{$podcastId}_podcastPlatforms_{$platformType}"
))
) {
$found = $this->select(
'platforms.*, podcasts_platforms.link_url, podcasts_platforms.link_content, podcasts_platforms.is_visible'
)
->join(
'podcasts_platforms',
'podcasts_platforms.platform_slug = platforms.slug'
)
->where('podcasts_platforms.podcast_id', $podcastId)
->where('platforms.type', $platformType)
->findAll();
cache()->save(
"podcast{$podcastId}_podcastPlatforms_{$platformType}",
$found,
DECADE
);
}
return $found;
}
public function savePodcastPlatforms(
$podcastId,
$platformType,
$podcastsPlatformsData
) {
$this->clearCache($podcastId);
// Remove already previously set platforms to overwrite them
$this->db
->table('platform_links')
->delete(['podcast_id' => $podcastId]);
$podcastsPlatformsTable = $this->db->prefixTable('podcasts_platforms');
$platformsTable = $this->db->prefixTable('platforms');
$deleteJoinQuery = <<<EOD
DELETE $podcastsPlatformsTable
FROM $podcastsPlatformsTable
INNER JOIN $platformsTable ON $platformsTable.slug = $podcastsPlatformsTable.platform_slug
WHERE `podcast_id` = ? AND `type` = ?
EOD;
$this->db->query($deleteJoinQuery, [$podcastId, $platformType]);
// Set podcastPlatforms
return $this->db
->table('platform_links')
->insertBatch($platformLinksData);
->table('podcasts_platforms')
->insertBatch($podcastsPlatformsData);
}
public function getPlatformId(string $platformName)
{
$p = $this->where('name', $platformName)->first();
if (!$p) {
$this->error = lang('Platform.platformNotFound', [$platformName]);
return false;
}
return (int) $p->id;
}
public function removePodcastPlatform($podcastId, $platformId)
public function createPodcastPlatforms($podcastId, $podcastsPlatformsData)
{
$this->clearCache($podcastId);
return $this->db->table('platform_links')->delete([
// Set podcastPlatforms
return $this->db
->table('podcasts_platforms')
->insertBatch($podcastsPlatformsData);
}
public function removePodcastPlatform($podcastId, $platformSlug)
{
$this->clearCache($podcastId);
return $this->db->table('podcasts_platforms')->delete([
'podcast_id' => $podcastId,
'platform_id' => $platformId,
'platform_slug' => $platformSlug,
]);
}
public function clearCache($podcastId)
{
cache()->delete("podcast{$podcastId}_platforms");
cache()->delete("podcast{$podcastId}_podcastPlatforms");
foreach (['podcasting', 'social', 'funding'] as $platformType) {
cache()->delete("podcast{$podcastId}_platforms_{$platformType}");
cache()->delete(
"podcast{$podcastId}_podcastPlatforms_{$platformType}"
);
}
// delete localized podcast page cache
$episodeModel = new EpisodeModel();
$years = $episodeModel->getYears($podcastId);

View File

@ -69,7 +69,6 @@ class PodcastModel extends Model
{
if (!($found = cache("podcast@{$podcastName}"))) {
$found = $this->where('name', $podcastName)->first();
cache()->save("podcast@{$podcastName}", $found, DECADE);
}

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M4 3h16a1 1 0 0 1 1 1v16a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1zm1 2v14h14V5H5zm6 6V7h2v4h4v2h-4v4h-2v-4H7v-2h4z"/></svg>

After

Width:  |  Height:  |  Size: 257 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M13.06 8.11l1.415 1.415a7 7 0 0 1 0 9.9l-.354.353a7 7 0 0 1-9.9-9.9l1.415 1.415a5 5 0 1 0 7.071 7.071l.354-.354a5 5 0 0 0 0-7.07l-1.415-1.415 1.415-1.414zm6.718 6.011l-1.414-1.414a5 5 0 1 0-7.071-7.071l-.354.354a5 5 0 0 0 0 7.07l1.415 1.415-1.415 1.414-1.414-1.414a7 7 0 0 1 0-9.9l.354-.353a7 7 0 0 1 9.9 9.9z"/></svg>

After

Width:  |  Height:  |  Size: 447 B

View File

@ -1,6 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<g>
<path fill="none" d="M0 0h24v24H0z"/>
<path d="M4 19h16v-7h2v8a1 1 0 0 1-1 1H3a1 1 0 0 1-1-1v-8h2v7zm9-10v7h-2V9H6l6-6 6 6h-5z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 231 B

View File

@ -1,26 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg width="64" height="64" version="1.1" viewBox="0 0 64 64" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><metadata><rdf:RDF><cc:Work rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/><dc:title/></cc:Work></rdf:RDF></metadata>
<style type="text/css">
.st0{fill:#AAAAAA;}
.st1{fill:#CCCCCC;}
.st2{fill:none;}
.st3{fill:#EEEEEE;}
</style>
<rect width="64" height="64" fill="#fff" stroke-width=".94495"/><g transform="matrix(.32439 0 0 .32439 -.82859 9.3899)">
<path id="dark_greeen_19_" class="st0" d="m181.9 131.7h-32.5s-1.2-2.5-2.5-4.9-4.4-2.3-4.4-2.3h-82.8s-3-0.4-4.5 2.3c-1.6 2.7-2.6 4.9-2.6 4.9h-32c-6.9 0-12.6-5.6-12.6-12.5v-98.9c0-6.9 5.6-12.6 12.5-12.6h161.3c6.9 0 12.6 5.6 12.6 12.5v98.9c0.1 6.9-5.6 12.6-12.5 12.6z"/>
<path class="st1" d="m143.7 34.5h-85.1c-14.6 0-26.5 12-26.5 26.6s11.9 26.5 26.5 26.5h85.1c14.6 0 26.5-11.9 26.5-26.5 0.1-14.8-11.8-26.7-26.5-26.6zm-75.4 34.2s-3.9-2.9-9.4-2.9c-4.1 0-8.9 2.5-8.9 2.5-1.3-1.9-2.1-4.1-2.1-6.6 0-6.3 5.1-11.4 11.4-11.4s11.4 5.1 11.4 11.4c0 2.7-0.9 5.1-2.4 7zm32.9 6.6c-12.5 0-12-9.6-12-9.6-0.2-1.8 2.1-2.4 2.9-1.3 0.4 0.6 0.4 0.6 0.7 1.7 1.7 5.9 8.4 5.6 8.4 5.6s6.7 0.4 8.4-5.6c0.3-1 0.3-1.1 0.7-1.7 0.8-1 3.1-0.5 2.9 1.3 0 0 0.5 9.6-12 9.6zm51.1-6.9s-4.8-2.5-8.9-2.5c-5.5 0-9.4 2.9-9.4 2.9-1.5-1.9-2.4-4.3-2.4-7 0-6.3 5.1-11.4 11.4-11.4s11.4 5.1 11.4 11.4c0.1 2.4-0.7 4.7-2.1 6.6z"/>
<path class="st2" d="m110.3 64.3c-0.4 0.6-0.4 0.6-0.7 1.7-1.7 5.9-8.4 5.6-8.4 5.6s-6.7 0.4-8.4-5.6c-0.3-1-0.3-1.1-0.7-1.7-0.8-1-3.1-0.5-2.9 1.3 0 0-0.5 9.6 12 9.6s12-9.6 12-9.6c0.2-1.7-2.1-2.3-2.9-1.3z"/>
<path class="st2" d="m143.1 50.4c-6.3 0-11.4 5.1-11.4 11.4 0 2.6 0.9 5 2.4 7 0 0 3.9-2.9 9.4-2.9 4.1 0 8.9 2.5 8.9 2.5 1.3-1.9 2.1-4.1 2.1-6.6 0-6.3-5.1-11.4-11.4-11.4z"/>
<path class="st2" d="m59.3 50.4c-6.3 0-11.4 5.1-11.4 11.4 0 2.5 0.8 4.7 2.1 6.6 0 0 4.8-2.5 8.9-2.5 5.5 0 9.4 2.9 9.4 2.9 1.5-1.9 2.4-4.3 2.4-7 0-6.3-5.1-11.4-11.4-11.4z"/>
<path class="st3" d="m47.1 23.3c-6.3-1.7-11.7 2.1-14.7 7.3-0.7 1.2-0.2 2.2 0.5 2.6 1 0.3 1.7 0.1 2.8-1.5 2.2-3.9 5.9-6.1 10.1-5.3 0 0 2.9 0.9 3.3-1 0.3-1.2-0.8-1.8-2-2.1z"/>
<path class="st3" d="m159.9 27.3c-0.1 1.9 2.9 1.9 2.9 1.9 4.2 0.4 6.8 2.3 7.8 6.7 0.6 1.9 1.2 2.2 2.3 2.2 0.8-0.1 1.6-1 1.2-2.4-1.4-5.8-5.1-9.8-11.7-9.9-1.2-0.1-2.4 0.2-2.5 1.5z"/>
<svg width="300" height="300" version="1.1" viewBox="0 0 300 300" xml:space="preserve" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="67" ry="67" fill="#fff" fill-opacity=".50"/><g transform="matrix(.91201 0 0 .91201 57.704 86.433)">
<path id="dark_greeen_19_" d="m181.9 131.7h-32.5s-1.2-2.5-2.5-4.9-4.4-2.3-4.4-2.3h-82.8s-3-0.4-4.5 2.3c-1.6 2.7-2.6 4.9-2.6 4.9h-32c-6.9 0-12.6-5.6-12.6-12.5v-98.9c0-6.9 5.6-12.6 12.5-12.6h161.3c6.9 0 12.6 5.6 12.6 12.5v98.9c0.1 6.9-5.6 12.6-12.5 12.6z" fill="#aaa"/>
<path d="m143.7 34.5h-85.1c-14.6 0-26.5 12-26.5 26.6s11.9 26.5 26.5 26.5h85.1c14.6 0 26.5-11.9 26.5-26.5 0.1-14.8-11.8-26.7-26.5-26.6zm-75.4 34.2s-3.9-2.9-9.4-2.9c-4.1 0-8.9 2.5-8.9 2.5-1.3-1.9-2.1-4.1-2.1-6.6 0-6.3 5.1-11.4 11.4-11.4s11.4 5.1 11.4 11.4c0 2.7-0.9 5.1-2.4 7zm32.9 6.6c-12.5 0-12-9.6-12-9.6-0.2-1.8 2.1-2.4 2.9-1.3 0.4 0.6 0.4 0.6 0.7 1.7 1.7 5.9 8.4 5.6 8.4 5.6s6.7 0.4 8.4-5.6c0.3-1 0.3-1.1 0.7-1.7 0.8-1 3.1-0.5 2.9 1.3 0 0 0.5 9.6-12 9.6zm51.1-6.9s-4.8-2.5-8.9-2.5c-5.5 0-9.4 2.9-9.4 2.9-1.5-1.9-2.4-4.3-2.4-7 0-6.3 5.1-11.4 11.4-11.4s11.4 5.1 11.4 11.4c0.1 2.4-0.7 4.7-2.1 6.6z" fill="#ccc"/>
<path d="m110.3 64.3c-0.4 0.6-0.4 0.6-0.7 1.7-1.7 5.9-8.4 5.6-8.4 5.6s-6.7 0.4-8.4-5.6c-0.3-1-0.3-1.1-0.7-1.7-0.8-1-3.1-0.5-2.9 1.3 0 0-0.5 9.6 12 9.6s12-9.6 12-9.6c0.2-1.7-2.1-2.3-2.9-1.3z" fill="#aaa"/>
<path d="m143.1 50.4c-6.3 0-11.4 5.1-11.4 11.4 0 2.6 0.9 5 2.4 7 0 0 3.9-2.9 9.4-2.9 4.1 0 8.9 2.5 8.9 2.5 1.3-1.9 2.1-4.1 2.1-6.6 0-6.3-5.1-11.4-11.4-11.4z" fill="#aaa"/>
<path d="m59.3 50.4c-6.3 0-11.4 5.1-11.4 11.4 0 2.5 0.8 4.7 2.1 6.6 0 0 4.8-2.5 8.9-2.5 5.5 0 9.4 2.9 9.4 2.9 1.5-1.9 2.4-4.3 2.4-7 0-6.3-5.1-11.4-11.4-11.4z" fill="#aaa"/>
<path d="m47.1 23.3c-6.3-1.7-11.7 2.1-14.7 7.3-0.7 1.2-0.2 2.2 0.5 2.6 1 0.3 1.7 0.1 2.8-1.5 2.2-3.9 5.9-6.1 10.1-5.3 0 0 2.9 0.9 3.3-1 0.3-1.2-0.8-1.8-2-2.1z" fill="#ccc"/>
<path d="m159.9 27.3c-0.1 1.9 2.9 1.9 2.9 1.9 4.2 0.4 6.8 2.3 7.8 6.7 0.6 1.9 1.2 2.2 2.3 2.2 0.8-0.1 1.6-1 1.2-2.4-1.4-5.8-5.1-9.8-11.7-9.9-1.2-0.1-2.4 0.2-2.5 1.5z" fill="#ccc"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,20 @@
<svg width="1050" height="300" version="1.1" viewBox="0 0 1050 300" xmlns="http://www.w3.org/2000/svg">
<rect width="1050" height="300" rx="150" ry="150" fill="#f6c915"/>
<g transform="matrix(2.9235 0 0 2.9235 110.03 -24.29)" fill="#1a171b">
<g transform="matrix(1.5452 0 0 1.5452 -536.72 -207.67)">
<path d="m410.27 182.21-0.664 2.814h-11.498l4.408-18.401h3.346l-3.733 15.587z"/>
<path d="m415.39 185.03h-3.213l3.347-13.887h3.212zm2.391-15.984c-0.479 0-0.896-0.141-1.249-0.425-0.354-0.283-0.531-0.708-0.531-1.274 0-0.655 0.226-1.195 0.677-1.62s0.97-0.637 1.554-0.637c0.479 0 0.898 0.146 1.262 0.438 0.362 0.292 0.545 0.722 0.545 1.288 0 0.656-0.23 1.191-0.69 1.606-0.461 0.415-0.985 0.624-1.568 0.624z"/>
<path d="m428.49 170.82c0.813 0 1.516 0.137 2.106 0.411 0.593 0.275 1.084 0.65 1.474 1.128 0.389 0.478 0.681 1.04 0.875 1.687s0.291 1.34 0.291 2.084c0 1.221-0.211 2.39-0.638 3.505-0.424 1.115-1.03 2.098-1.817 2.947-0.787 0.85-1.749 1.527-2.882 2.032-1.133 0.504-2.407 0.757-3.823 0.757-0.212 0-0.496-0.01-0.849-0.027-0.355-0.018-0.743-0.063-1.17-0.133-0.424-0.07-0.858-0.168-1.301-0.292s-0.85-0.283-1.221-0.478l4.647-19.49 3.362-0.531-1.707 7.117c0.388-0.195 0.803-0.363 1.246-0.505 0.443-0.141 0.911-0.212 1.407-0.212zm-3.988 11.843c0.813 0 1.562-0.173 2.243-0.518s1.265-0.81 1.752-1.394c0.485-0.585 0.862-1.252 1.129-2.005 0.266-0.751 0.398-1.536 0.398-2.35 0-0.407-0.037-0.783-0.105-1.128-0.071-0.345-0.194-0.646-0.371-0.902-0.178-0.257-0.416-0.461-0.717-0.61-0.3-0.15-0.679-0.227-1.138-0.227-0.389 0-0.813 0.071-1.272 0.213s-0.882 0.363-1.271 0.664l-1.95 8.125c0.159 0.035 0.339 0.066 0.544 0.093 0.203 0.025 0.456 0.039 0.758 0.039z"/>
<path d="m435.15 180.01c0-1.185 0.19-2.331 0.571-3.438 0.38-1.106 0.929-2.088 1.646-2.948 0.716-0.858 1.58-1.543 2.588-2.058 1.01-0.513 2.142-0.77 3.399-0.77 1.345 0 2.39 0.345 3.134 1.036 0.743 0.689 1.114 1.575 1.114 2.655 0 1.115-0.274 2.018-0.822 2.708-0.549 0.69-1.261 1.23-2.138 1.62-0.876 0.39-1.868 0.655-2.975 0.797-1.106 0.142-2.227 0.23-3.358 0.265-0.018 0.036-0.027 0.071-0.027 0.107v0.265c0 1.61 1.02 2.417 3.055 2.417 1.204 0 2.406-0.248 3.609-0.744l0.268 2.603c-0.426 0.195-1.028 0.389-1.806 0.585-0.78 0.194-1.665 0.292-2.655 0.292-0.991 0-1.843-0.143-2.549-0.425-0.709-0.283-1.289-0.672-1.74-1.167-0.451-0.496-0.783-1.067-0.995-1.714s-0.319-1.341-0.319-2.086zm7.728-6.584c-0.53 0-1.035 0.105-1.514 0.318-0.479 0.212-0.903 0.505-1.274 0.876-0.372 0.372-0.695 0.81-0.97 1.314s-0.474 1.048-0.597 1.633c2.124-0.071 3.668-0.328 4.633-0.77 0.965-0.443 1.447-1.106 1.447-1.992 0-0.354-0.128-0.672-0.386-0.956-0.254-0.282-0.702-0.423-1.339-0.423z"/>
<path d="m458.67 173.98c-0.354-0.124-0.735-0.221-1.146-0.292-0.406-0.07-0.887-0.106-1.438-0.106-0.303 0-0.621 0.022-0.96 0.066-0.337 0.045-0.621 0.102-0.853 0.172l-2.667 11.206h-3.212l3.187-13.25c0.743-0.248 1.548-0.464 2.416-0.65 0.866-0.186 1.805-0.279 2.813-0.279 0.213 0 0.452 0.014 0.719 0.041 0.264 0.025 0.524 0.057 0.783 0.092 0.255 0.036 0.494 0.08 0.716 0.132 0.222 0.054 0.412 0.116 0.57 0.186z"/>
<path d="m470.94 179.64c-0.054 0.195-0.107 0.513-0.159 0.956-0.054 0.443-0.079 0.858-0.079 1.248 0 0.514 0.044 1.013 0.131 1.5 0.091 0.487 0.23 0.978 0.427 1.473l-2.869 0.425c-0.212-0.425-0.381-0.877-0.504-1.354-0.442 0.389-0.986 0.74-1.633 1.049s-1.377 0.464-2.191 0.464c-0.832 0-1.545-0.137-2.138-0.412-0.592-0.274-1.075-0.654-1.446-1.142-0.372-0.486-0.647-1.057-0.823-1.712-0.178-0.655-0.265-1.363-0.265-2.125 0-1.291 0.23-2.496 0.69-3.611 0.459-1.115 1.101-2.079 1.924-2.894 0.824-0.814 1.802-1.456 2.935-1.925 1.132-0.469 2.372-0.703 3.718-0.703 0.69 0 1.384 0.058 2.083 0.173s1.404 0.332 2.111 0.65zm-1.747-6.002c-0.337-0.07-0.716-0.106-1.143-0.106-0.797 0-1.532 0.173-2.207 0.518-0.674 0.346-1.253 0.806-1.74 1.38-0.486 0.576-0.863 1.234-1.128 1.979-0.267 0.743-0.399 1.522-0.399 2.336 0 0.408 0.034 0.789 0.107 1.142 0.07 0.354 0.188 0.664 0.356 0.929s0.395 0.478 0.678 0.637c0.282 0.159 0.646 0.24 1.088 0.24 0.567 0 1.066-0.121 1.502-0.359 0.433-0.24 0.837-0.562 1.208-0.969 0.017-0.461 0.057-0.894 0.12-1.301 0.062-0.407 0.146-0.814 0.251-1.221z"/>
<path d="m483.02 166.44c2.213 0 3.906 0.435 5.084 1.301 1.176 0.868 1.766 2.107 1.766 3.718 0 1.274-0.244 2.359-0.73 3.253-0.487 0.894-1.161 1.624-2.021 2.19-0.858 0.566-1.886 0.978-3.082 1.234-1.196 0.257-2.512 0.386-3.945 0.386h-1.437l-1.553 6.505h-3.349l4.327-18.135c0.85-0.177 1.7-0.296 2.549-0.359 0.85-0.061 1.647-0.093 2.391-0.093zm-0.319 2.815c-0.336 0-0.654 9e-3 -0.955 0.026-0.302 0.018-0.604 0.044-0.903 0.079l-1.487 6.346h1.349c0.741 0 1.454-0.062 2.143-0.185 0.688-0.124 1.297-0.332 1.826-0.625 0.529-0.292 0.952-0.689 1.271-1.194 0.317-0.505 0.476-1.146 0.476-1.925 0-0.902-0.332-1.549-0.995-1.938-0.667-0.389-1.575-0.584-2.725-0.584z"/>
<path d="m501.82 179.64c-0.054 0.195-0.107 0.513-0.16 0.956-0.052 0.443-0.079 0.858-0.079 1.248 0 0.514 0.045 1.013 0.132 1.5 0.09 0.487 0.23 0.978 0.427 1.473l-2.869 0.425c-0.212-0.425-0.381-0.877-0.505-1.354-0.44 0.389-0.985 0.74-1.632 1.049s-1.377 0.464-2.191 0.464c-0.832 0-1.545-0.137-2.137-0.412-0.593-0.274-1.075-0.654-1.447-1.142-0.372-0.486-0.647-1.057-0.823-1.712-0.179-0.655-0.266-1.363-0.266-2.125 0-1.291 0.231-2.496 0.691-3.611 0.459-1.115 1.101-2.079 1.924-2.894 0.824-0.814 1.802-1.456 2.935-1.925 1.132-0.469 2.372-0.703 3.718-0.703 0.69 0 1.384 0.058 2.083 0.173s1.404 0.332 2.111 0.65zm-1.747-6.002c-0.337-0.07-0.716-0.106-1.143-0.106-0.798 0-1.532 0.173-2.207 0.518-0.673 0.346-1.253 0.806-1.74 1.38-0.486 0.576-0.863 1.234-1.128 1.979-0.267 0.743-0.399 1.522-0.399 2.336 0 0.408 0.033 0.789 0.107 1.142 0.07 0.354 0.188 0.664 0.356 0.929s0.395 0.478 0.679 0.637c0.281 0.159 0.646 0.24 1.087 0.24 0.567 0 1.066-0.121 1.502-0.359 0.433-0.24 0.837-0.562 1.208-0.969 0.017-0.461 0.057-0.894 0.12-1.301 0.062-0.407 0.146-0.814 0.25-1.221z"/>
<path d="m518.07 171.14c-0.354 1.009-0.745 2.058-1.171 3.146-0.427 1.088-0.901 2.182-1.425 3.28-0.523 1.097-1.088 2.19-1.691 3.279-0.602 1.088-1.249 2.147-1.941 3.173-0.515 0.78-1.046 1.527-1.596 2.244-0.551 0.718-1.147 1.35-1.794 1.898-0.647 0.549-1.36 0.992-2.139 1.328-0.781 0.336-1.668 0.505-2.658 0.505-0.551 0-1.042-0.063-1.478-0.186-0.433-0.125-0.801-0.265-1.104-0.425l1.036-2.576c0.249 0.141 0.528 0.256 0.837 0.346 0.31 0.088 0.65 0.132 1.022 0.132 0.833 0 1.563-0.217 2.192-0.65 0.628-0.434 1.198-1.023 1.712-1.766-0.567-1.965-1.044-4.098-1.435-6.399s-0.646-4.744-0.772-7.329h3.242c0.018 0.743 0.057 1.566 0.12 2.47 0.063 0.902 0.143 1.828 0.243 2.774 0.098 0.948 0.218 1.881 0.362 2.802 0.143 0.919 0.303 1.77 0.481 2.549 0.534-0.85 1.031-1.744 1.491-2.683 0.462-0.938 0.888-1.872 1.279-2.801 0.39-0.929 0.732-1.833 1.025-2.708 0.292-0.877 0.545-1.677 0.759-2.403z"/>
</g>
<g transform="matrix(1.1558 0 0 1.1558 -378.16 -140.8)">
<path d="m354.34 189.4c-2.479 0-4.424-0.322-5.837-0.969-1.415-0.646-2.427-1.526-3.037-2.644-0.61-1.116-0.906-2.399-0.89-3.848 0.017-1.448 0.217-2.992 0.602-4.632l6.649-27.8 8.114-1.257-7.278 30.156c-0.138 0.628-0.217 1.205-0.233 1.728-0.019 0.523 0.078 0.986 0.287 1.387 0.209 0.402 0.566 0.725 1.072 0.969 0.505 0.245 1.214 0.402 2.122 0.471z"/>
<path d="m383.65 172.07c0 2.548-0.418 4.877-1.256 6.989s-1.997 3.936-3.481 5.471c-1.483 1.537-3.263 2.731-5.341 3.586-2.075 0.855-4.337 1.283-6.779 1.283-1.187 0-2.372-0.104-3.56-0.314l-2.355 9.476h-7.748l8.69-36.229c1.396-0.418 2.992-0.793 4.79-1.125 1.797-0.332 3.743-0.498 5.837-0.498 1.955 0 3.64 0.297 5.053 0.89 1.413 0.594 2.574 1.405 3.481 2.435 0.906 1.029 1.578 2.234 2.015 3.612 0.438 1.379 0.654 2.854 0.654 4.424zm-19.002 10.732c0.592 0.14 1.324 0.209 2.198 0.209 1.361 0 2.599-0.253 3.717-0.759 1.117-0.506 2.068-1.212 2.852-2.12 0.787-0.908 1.397-1.998 1.834-3.272 0.435-1.273 0.654-2.678 0.654-4.214 0-1.5-0.332-2.775-0.994-3.822-0.664-1.047-1.817-1.571-3.456-1.571-1.117 0-2.164 0.104-3.142 0.314z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 7.7 KiB

View File

@ -0,0 +1,24 @@
<svg width="1050" height="300" version="1.1" viewBox="0 0 1050 300" xmlns="http://www.w3.org/2000/svg">
<rect width="1050" height="300" rx="150" ry="150" fill="#ff424d"/>
<g transform="translate(-49.245)">
<g transform="matrix(.019653 0 0 -.019653 447.72 185)">
<path d="m1863.2 2250.3c0 314.6-212.99 585.63-542.06 585.63h-537.16v-1171.1h537.16c329.07 0 542.06 270.86 542.06 585.46zm-1863.2 1224.4h1417.9c750.16 0 1234.2-566.28 1234.2-1224.4s-484.01-1224.2-1234.2-1224.2h-633.9v-938.93h-783.98v3387.6" fill="#fff"/>
<path d="m4921.7 2506.9-416.21-1393.8h822.66zm730.81-2419.7-130.54 411.34h-1205.1l-130.72-411.34h-837.3l1209.9 3387.6h721.05l1224.4-3387.6h-851.78" fill="#fff"/>
<path d="m7820.6 2797.2h-764.45v677.48h2317.9v-677.48h-769.51v-2710.1h-783.97v2710.1" fill="#fff"/>
<path d="m12457 2250.3c0 314.6-213 585.63-542.1 585.63h-537.2v-1171.1h537.2c329.1 0 542.1 270.86 542.1 585.46zm-1863.2 1224.4h1422.9c750 0 1234-566.28 1234-1224.4 0-474.25-251.7-895.17-672.8-1093.7l677.7-1069.5h-909.8l-600.3 938.93h-367.8v-938.93h-783.9v3387.6" fill="#fff"/>
<g transform="scale(1.0213)">
<path d="m15044 2786.1v-753.27h1255.6v-601.88h-1255.6v-729.53h1255.6v-616.07h-2023.2v3316.8h2023.2v-616.05h-1255.6" fill="#fff"/>
</g>
<g transform="scale(1.3194)">
<path d="m15695 1349.8c0 421.79-286.2 814.25-751.9 814.25-469.6 0-752-392.46-752-814.25s282.4-814.26 752-814.26c465.7 0 751.9 392.47 751.9 814.26zm-2112.8 0c0 704.22 506.2 1349.8 1360.9 1349.8 850.8 0 1357-645.56 1357-1349.8 0-704.22-506.2-1349.8-1357-1349.8-854.7 0-1360.9 645.56-1360.9 1349.8" fill="#fff"/>
</g>
<g transform="scale(1.5724)">
<path d="m15804 806.4v1403.4h495.5v-2154.4h-520.1l-775.7 1385v-1385h-498.6v2154.4h520.1l778.8-1403.4" fill="#fff"/>
</g>
</g>
<g transform="matrix(.027788 0 0 -.027788 197.08 230)" fill="#fff" fill-rule="evenodd">
<path d="m3844.9 5757.8c-1190.8 0-2159.5-969.65-2159.5-2161.6 0-1188.3 968.78-2155.1 2159.5-2155.1 1187.1 0 2152.8 966.79 2152.8 2155.1 0 1191.9-965.74 2161.6-2152.8 2161.6"/>
<path d="M 0,0 H 1054.41 V 5757.81 H 0 V 0"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -0,0 +1,11 @@
<svg width="1050" height="300" version="1.1" viewBox="0 0 1050 300" xmlns="http://www.w3.org/2000/svg">
<rect width="1050" height="300" rx="150" ry="150" fill="#f2c40f"/>
<g transform="matrix(5.3019 0 0 5.3019 197.38 70)">
<path d="m46.211 6.749h-6.839a0.95 0.95 0 0 0-0.939 0.802l-2.766 17.537a0.57 0.57 0 0 0 0.564 0.658h3.265a0.95 0.95 0 0 0 0.939-0.803l0.746-4.73a0.95 0.95 0 0 1 0.938-0.803h2.165c4.505 0 7.105-2.18 7.784-6.5 0.306-1.89 0.013-3.375-0.872-4.415-0.972-1.142-2.696-1.746-4.985-1.746zm0.789 6.405c-0.374 2.454-2.249 2.454-4.062 2.454h-1.032l0.724-4.583a0.57 0.57 0 0 1 0.563-0.481h0.473c1.235 0 2.4 0 3.002 0.704 0.359 0.42 0.469 1.044 0.332 1.906zm19.654-0.079h-3.275a0.57 0.57 0 0 0-0.563 0.481l-0.145 0.916-0.229-0.332c-0.709-1.029-2.29-1.373-3.868-1.373-3.619 0-6.71 2.741-7.312 6.586-0.313 1.918 0.132 3.752 1.22 5.031 0.998 1.176 2.426 1.666 4.125 1.666 2.916 0 4.533-1.875 4.533-1.875l-0.146 0.91a0.57 0.57 0 0 0 0.562 0.66h2.95a0.95 0.95 0 0 0 0.939-0.803l1.77-11.209a0.568 0.568 0 0 0-0.561-0.658zm-4.565 6.374c-0.316 1.871-1.801 3.127-3.695 3.127-0.951 0-1.711-0.305-2.199-0.883-0.484-0.574-0.668-1.391-0.514-2.301 0.295-1.855 1.805-3.152 3.67-3.152 0.93 0 1.686 0.309 2.184 0.892 0.499 0.589 0.697 1.411 0.554 2.317zm22.007-6.374h-3.291a0.954 0.954 0 0 0-0.787 0.417l-4.539 6.686-1.924-6.425a0.953 0.953 0 0 0-0.912-0.678h-3.234a0.57 0.57 0 0 0-0.541 0.754l3.625 10.638-3.408 4.811a0.57 0.57 0 0 0 0.465 0.9h3.287a0.949 0.949 0 0 0 0.781-0.408l10.946-15.8a0.57 0.57 0 0 0-0.468-0.895z" fill="#253B80"/>
<path d="m94.992 6.749h-6.84a0.95 0.95 0 0 0-0.938 0.802l-2.766 17.537a0.569 0.569 0 0 0 0.562 0.658h3.51a0.665 0.665 0 0 0 0.656-0.562l0.785-4.971a0.95 0.95 0 0 1 0.938-0.803h2.164c4.506 0 7.105-2.18 7.785-6.5 0.307-1.89 0.012-3.375-0.873-4.415-0.971-1.142-2.694-1.746-4.983-1.746zm0.789 6.405c-0.373 2.454-2.248 2.454-4.062 2.454h-1.031l0.725-4.583a0.568 0.568 0 0 1 0.562-0.481h0.473c1.234 0 2.4 0 3.002 0.704 0.359 0.42 0.468 1.044 0.331 1.906zm19.653-0.079h-3.273a0.567 0.567 0 0 0-0.562 0.481l-0.145 0.916-0.23-0.332c-0.709-1.029-2.289-1.373-3.867-1.373-3.619 0-6.709 2.741-7.311 6.586-0.312 1.918 0.131 3.752 1.219 5.031 1 1.176 2.426 1.666 4.125 1.666 2.916 0 4.533-1.875 4.533-1.875l-0.146 0.91a0.57 0.57 0 0 0 0.564 0.66h2.949a0.95 0.95 0 0 0 0.938-0.803l1.771-11.209a0.571 0.571 0 0 0-0.565-0.658zm-4.565 6.374c-0.314 1.871-1.801 3.127-3.695 3.127-0.949 0-1.711-0.305-2.199-0.883-0.484-0.574-0.666-1.391-0.514-2.301 0.297-1.855 1.805-3.152 3.67-3.152 0.93 0 1.686 0.309 2.184 0.892 0.501 0.589 0.699 1.411 0.554 2.317zm8.426-12.219-2.807 17.858a0.569 0.569 0 0 0 0.562 0.658h2.822c0.469 0 0.867-0.34 0.939-0.803l2.768-17.536a0.57 0.57 0 0 0-0.562-0.659h-3.16a0.571 0.571 0 0 0-0.562 0.482z" fill="#179BD7"/>
<path d="m7.266 29.154 0.523-3.322-1.165-0.027h-5.563l3.866-24.513a0.316 0.316 0 0 1 0.314-0.268h9.38c3.114 0 5.263 0.648 6.385 1.927 0.526 0.6 0.861 1.227 1.023 1.917 0.17 0.724 0.173 1.589 7e-3 2.644l-0.012 0.077v0.676l0.526 0.298a3.69 3.69 0 0 1 1.065 0.812c0.45 0.513 0.741 1.165 0.864 1.938 0.127 0.795 0.085 1.741-0.123 2.812-0.24 1.232-0.628 2.305-1.152 3.183a6.547 6.547 0 0 1-1.825 2c-0.696 0.494-1.523 0.869-2.458 1.109-0.906 0.236-1.939 0.355-3.072 0.355h-0.73c-0.522 0-1.029 0.188-1.427 0.525a2.21 2.21 0 0 0-0.744 1.328l-0.055 0.299-0.924 5.855-0.042 0.215c-0.011 0.068-0.03 0.102-0.058 0.125a0.155 0.155 0 0 1-0.096 0.035z" fill="#253B80"/>
<path d="m23.048 7.667c-0.028 0.179-0.06 0.362-0.096 0.55-1.237 6.351-5.469 8.545-10.874 8.545h-2.752c-0.661 0-1.218 0.48-1.321 1.132l-1.409 8.936-0.399 2.533a0.704 0.704 0 0 0 0.695 0.814h4.881c0.578 0 1.069-0.42 1.16-0.99l0.048-0.248 0.919-5.832 0.059-0.32c0.09-0.572 0.582-0.992 1.16-0.992h0.73c4.729 0 8.431-1.92 9.513-7.476 0.452-2.321 0.218-4.259-0.978-5.622a4.667 4.667 0 0 0-1.336-1.03z" fill="#179BD7"/>
<path d="m21.754 7.151a9.757 9.757 0 0 0-1.203-0.267 15.284 15.284 0 0 0-2.426-0.177h-7.352a1.172 1.172 0 0 0-1.159 0.992l-1.564 9.906-0.045 0.289a1.336 1.336 0 0 1 1.321-1.132h2.752c5.405 0 9.637-2.195 10.874-8.545 0.037-0.188 0.068-0.371 0.096-0.55a6.594 6.594 0 0 0-1.017-0.429 9.045 9.045 0 0 0-0.277-0.087z" fill="#222D65"/>
<path d="m9.614 7.699a1.169 1.169 0 0 1 1.159-0.991h7.352c0.871 0 1.684 0.057 2.426 0.177a9.757 9.757 0 0 1 1.481 0.353c0.365 0.121 0.704 0.264 1.017 0.429 0.368-2.347-3e-3 -3.945-1.272-5.392-1.399-1.593-3.924-2.275-7.155-2.275h-9.38c-0.66 0-1.223 0.48-1.325 1.133l-3.907 24.765a0.806 0.806 0 0 0 0.795 0.932h5.791l1.454-9.225z" fill="#253B80"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 4.4 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@ -1,14 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300">
<g id="google-podcasts">
<rect width="300" height="300" rx="67" fill="#fff"/>
<path id="Shape" d="M75.39,133.66A10.5,10.5,0,0,0,65,144.08v11.84a10.39,10.39,0,1,0,20.78,0V144.08C86.25,138.4,81.53,133.66,75.39,133.66Z" fill="#0066d9"/>
<path id="Shape-2" data-name="Shape" d="M224.61,133.66a10.5,10.5,0,0,0-10.39,10.42v11.84a10.39,10.39,0,1,0,20.78,0V144.08A10.5,10.5,0,0,0,224.61,133.66Z" fill="#4285f4"/>
<path id="Shape-3" data-name="Shape" d="M112.22,168.7a10.5,10.5,0,0,0-10.39,10.42V191a10.39,10.39,0,1,0,20.78,0V179.12C123.08,173.44,118.36,168.7,112.22,168.7Z" fill="#ea4335"/>
<path id="Shape-4" data-name="Shape" d="M112.22,99.09a10.5,10.5,0,0,0-10.39,10.42V147.4h0a10.39,10.39,0,1,0,20.78,0h0V109.51C123.08,103.83,118.36,99.09,112.22,99.09Z" fill="#ea4335"/>
<path id="Shape-5" data-name="Shape" d="M187.78,99.09a10.5,10.5,0,0,0-10.39,10.42v11.84a10.39,10.39,0,1,0,20.78,0V109.51A10.5,10.5,0,0,0,187.78,99.09Z" fill="#34a853"/>
<path id="Shape-6" data-name="Shape" d="M150,65a10.5,10.5,0,0,0-10.39,10.42V87.26a10.39,10.39,0,1,0,20.78,0V75.42A10.5,10.5,0,0,0,150,65Z" fill="#fab908"/>
<path id="Shape-7" data-name="Shape" d="M150,202.33a10.49,10.49,0,0,0-10.39,10.41v11.84a10.39,10.39,0,1,0,20.78,0V212.74A10.81,10.81,0,0,0,150,202.33Z" fill="#fab908"/>
<path id="Shape-8" data-name="Shape" d="M187.78,142.66a10.5,10.5,0,0,0-10.39,10.42V191a10.39,10.39,0,1,0,20.78,0V153.08A10.5,10.5,0,0,0,187.78,142.66Z" fill="#34a853"/>
<path id="Shape-9" data-name="Shape" d="M160.39,119.46a10.39,10.39,0,1,0-20.78,0h0V182h0a10.39,10.39,0,1,0,20.78,0h0v-62.5Z" fill="#fab908"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 1.7 KiB

View File

@ -1,4 +0,0 @@
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
<rect width="300" height="300" rx="67" fill="#a00"/>
<path d="m50.732 31.317-1.818 1.9434c-16.593 17.73-26.687 38.451-30.635 62.888-0.98119 6.0742-1.3623 20.357-0.7254 27.169 0.82101 8.7813 2.5587 16.911 5.5882 26.15 4.1898 12.777 11.214 25.591 19.707 35.945 3.3551 4.0905 7.6789 8.8098 8.0622 8.801 0.12687-3e-3 3.8575-3.6337 8.2906-8.0689l8.06-8.0644-2.2299-2.2926c-11.931-12.27-20.287-29.277-23.654-48.145-1.1053-6.1935-1.3762-19.388-0.53062-25.861 2.528-19.352 10.639-37.011 23.515-51.199l2.6867-2.962-8.1585-8.1518zm198.53 0.0046-16.312 16.299 2.5792 2.7628c3.4972 3.7448 8.6014 10.589 11.309 15.164 12.522 21.162 16.214 46.157 10.283 69.625-2.2356 8.8459-6.0378 18.015-10.641 25.666-2.4417 4.0582-8.552 12.061-11.344 14.857l-2.1964 2.2008 8.1361 8.1562 8.1361 8.1585 1.7844-1.7396c0.98188-0.95571 2.983-3.139 4.4464-4.8539 13.74-16.1 22.99-36.341 26.28-57.503 1.1151-7.1714 1.3941-22.696 0.53958-30.111-1.5398-13.362-5.1345-25.636-11.029-37.656-5.336-10.882-11.974-20.521-19.774-28.718zm-27.469 27.464-7.8988 7.901-7.901 7.8988 1.4418 1.7083c7.0395 8.345 11.038 16.2 13.167 25.861 0.95643 4.3412 1.1562 13.985 0.39181 18.885-1.0494 6.7274-3.7684 14.244-7.1666 19.814-1.6702 2.7376-5.6469 7.9857-6.9092 9.1167-0.76428 0.68476-0.75166 0.69957 7.0122 8.7137 4.2772 4.415 7.8791 7.9835 8.0062 7.9324 0.12712-0.0511 1.0503-0.99942 2.0508-2.109 8.5485-9.4812 14.496-20.51 17.696-32.815 6.2332-23.966-0.20283-50.693-16.686-69.291zm-143.31 0.39626c-0.48021-0.0956-1.0844 0.59004-3.3829 3.2464-3.8269 4.4226-5.4503 6.6336-8.1473 11.107-4.8768 8.089-8.1295 16.906-9.9518 26.963-0.79432 4.3837-1.1139 15.563-0.57763 20.21 1.8539 16.065 8.3621 30.93 18.605 42.487l3.2262 3.6382 7.8204-7.9816 7.8226-7.9816-1.7956-2.0777c-6.321-7.3109-10.47-15.63-12.616-25.302-1.0706-4.8237-1.1533-15.48-0.15672-20.414 2.0106-9.9543 6.5801-19.285 12.721-25.978l2.2837-2.4874-7.2898-7.2316c-4.0099-3.9778-7.6388-7.5277-8.0644-7.8876-0.19096-0.16143-0.33696-0.27934-0.49703-0.3112zm25.996 25.543-0.91794 1.0993c-2.9882 3.5866-6.3925 10.838-7.8808 16.783-1.0724 4.2836-1.3515 12.862-0.5642 17.38 0.67883 3.8961 2.0714 8.5039 3.5755 11.832 1.1167 2.4714 4.9507 8.4764 5.4114 8.4764 0.14883 0 2.3009-2.0552 4.7845-4.5673l4.5158-4.5673-0.74779-1.209c-6.7624-10.942-6.6884-23.626 0.19926-34.537l0.90899-1.4418-4.6412-4.6255zm91.14 0.18135c-0.50862 0-8.9331 8.6357-8.9331 9.157 0 0.31722 0.43043 1.2136 0.95825 1.9904 6.0286 8.8719 6.3537 22.399 0.77241 32.166l-1.5874 2.7807 4.4218 4.6255c2.432 2.5446 4.5317 4.6382 4.6658 4.6502s0.82196-0.76724 1.5292-1.7306c1.8468-2.5158 4.1389-6.8936 5.3532-10.225 4.4204-12.127 3.4009-25.9-2.7494-37.109-1.3228-2.411-4.0591-6.3047-4.4307-6.3047zm-44.757 2.4605c-2.2527 6e-3 -4.5164 0.22186-6.1771 0.64703-7.2066 1.8452-13.463 6.9061-16.812 13.601-6.2784 12.551-1.0669 27.755 11.741 34.25 3.9133 1.9848 7.0107 2.618 12.041 2.4628 3.226-0.0995 5.0878-0.35213 6.9696-0.94704 7.6837-2.429 13.831-8.5156 16.689-16.525 1.1558-3.2399 1.4622-10.474 0.59107-13.955-2.3118-9.2371-9.5839-16.504-18.93-18.916-1.617-0.41737-3.8595-0.62332-6.1121-0.61793zm-14.649 61.368-1.0164 7.7935c-1.5425 11.825-4.8305 36.765-6.6629 50.529-2.0755 15.59-5.3163 40.189-6.7659 51.355-0.61544 4.7411-1.2035 8.9919-1.3053 9.4458l-0.18359 0.82391h28.226l0.19925-1.1911c0.10947-0.6557 0.44254-3.0913 0.74107-5.4114 0.29854-2.3201 1.2842-9.8314 2.1896-16.691 0.90539-6.8595 2.5647-19.485 3.6874-28.06 2.7875-21.289 5.3907-41.074 7.348-55.815 0.90158-6.7903 1.6411-12.443 1.6411-12.562 0-0.11963-6.3225-0.21717-14.049-0.21717z" fill="#fff" stroke-width=".36682"/>
</svg>

Before

Width:  |  Height:  |  Size: 3.7 KiB

View File

@ -0,0 +1,9 @@
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="67" fill="#fff"/>
<g transform="matrix(.66677 0 0 .66677 64.525 64.708)" fill-rule="evenodd">
<path d="m221.5 210.32c-105.24 50.083-170.54 8.18-212.35-17.271-2.587-1.604-6.984 0.375-3.169 4.757 13.928 16.888 59.573 57.593 119.15 57.593 59.621 0 95.09-32.532 99.527-38.207 4.407-5.627 1.294-8.731-3.16-6.872zm29.555-16.322c-2.826-3.68-17.184-4.366-26.22-3.256-9.05 1.078-22.634 6.609-21.453 9.93 0.606 1.244 1.843 0.686 8.06 0.127 6.234-0.622 23.698-2.826 27.337 1.931 3.656 4.79-5.57 27.608-7.255 31.288-1.628 3.68 0.622 4.629 3.68 2.178 3.016-2.45 8.476-8.795 12.14-17.774 3.639-9.028 5.858-21.622 3.71-24.424z" fill="#f90" fill-rule="nonzero"/>
<path d="m150.74 108.13c0 13.141 0.332 24.1-6.31 35.77-5.361 9.489-13.853 15.324-23.341 15.324-12.952 0-20.495-9.868-20.495-24.432 0-28.75 25.76-33.968 50.146-33.968zm34.015 82.216c-2.23 1.992-5.456 2.135-7.97 0.806-11.196-9.298-13.189-13.615-19.356-22.487-18.502 18.882-31.596 24.527-55.601 24.527-28.37 0-50.478-17.506-50.478-52.565 0-27.373 14.85-46.018 35.96-55.126 18.313-8.066 43.884-9.489 63.43-11.718v-4.365c0-8.018 0.616-17.506-4.08-24.432-4.128-6.215-12.003-8.777-18.93-8.777-12.856 0-24.337 6.594-27.136 20.257-0.57 3.037-2.799 6.026-5.835 6.168l-32.735-3.51c-2.751-0.618-5.787-2.847-5.028-7.07 7.543-39.66 43.36-51.616 75.43-51.616 16.415 0 37.858 4.365 50.81 16.795 16.415 15.323 14.849 35.77 14.849 58.02v52.565c0 15.798 6.547 22.724 12.714 31.264 2.182 3.036 2.657 6.69-0.095 8.966-6.879 5.74-19.119 16.415-25.855 22.393l-0.095-0.095"/>
<path d="m221.5 210.32c-105.24 50.083-170.54 8.18-212.35-17.271-2.587-1.604-6.984 0.375-3.169 4.757 13.928 16.888 59.573 57.593 119.15 57.593 59.621 0 95.09-32.532 99.527-38.207 4.407-5.627 1.294-8.731-3.16-6.872zm29.555-16.322c-2.826-3.68-17.184-4.366-26.22-3.256-9.05 1.078-22.634 6.609-21.453 9.93 0.606 1.244 1.843 0.686 8.06 0.127 6.234-0.622 23.698-2.826 27.337 1.931 3.656 4.79-5.57 27.608-7.255 31.288-1.628 3.68 0.622 4.629 3.68 2.178 3.016-2.45 8.476-8.795 12.14-17.774 3.639-9.028 5.858-21.622 3.71-24.424z" fill="#f90" fill-rule="nonzero"/>
<path d="m150.74 108.13c0 13.141 0.332 24.1-6.31 35.77-5.361 9.489-13.853 15.324-23.341 15.324-12.952 0-20.495-9.868-20.495-24.432 0-28.75 25.76-33.968 50.146-33.968zm34.015 82.216c-2.23 1.992-5.456 2.135-7.97 0.806-11.196-9.298-13.189-13.615-19.356-22.487-18.502 18.882-31.596 24.527-55.601 24.527-28.37 0-50.478-17.506-50.478-52.565 0-27.373 14.85-46.018 35.96-55.126 18.313-8.066 43.884-9.489 63.43-11.718v-4.365c0-8.018 0.616-17.506-4.08-24.432-4.128-6.215-12.003-8.777-18.93-8.777-12.856 0-24.337 6.594-27.136 20.257-0.57 3.037-2.799 6.026-5.835 6.168l-32.735-3.51c-2.751-0.618-5.787-2.847-5.028-7.07 7.543-39.66 43.36-51.616 75.43-51.616 16.415 0 37.858 4.365 50.81 16.795 16.415 15.323 14.849 35.77 14.849 58.02v52.565c0 15.798 6.547 22.724 12.714 31.264 2.182 3.036 2.657 6.69-0.095 8.966-6.879 5.74-19.119 16.415-25.855 22.393l-0.095-0.095"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.6 KiB

View File

Before

Width:  |  Height:  |  Size: 622 B

After

Width:  |  Height:  |  Size: 622 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,5 @@
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="67" fill="#fff"/>
<circle cx="150" cy="150" r="85" fill="#bddbe8" stroke-dasharray="1.52637, 1.52637" stroke-width="1.5264"/>
<path d="m119.28 196.55c-5.2759-0.41139-9.7186-1.2399-13.653-2.546-6.9248-2.2989-13.222-6.449-17.286-11.393-6.5353-7.949-9.2631-17.839-8.3879-30.411 0.69606-9.9992 2.6547-17.49 6.6052-25.262 2.764-5.4374 5.807-9.5961 9.9143-13.549 6.809-6.5529 15.012-10.554 24.086-11.749 4.0314-0.5307 10.66-0.32651 13.845 0.42647 6.8313 1.6152 11.839 5.4866 14.493 11.204 3.474 7.4848 2.6106 19.176-1.736 23.508-1.4198 1.415-2.8164 2.0178-4.9897 2.1538-2.9275 0.18324-5.0304-0.6543-6.3473-2.5281-0.89207-1.2693-1.0071-3.371-0.38296-6.9966 0.66108-3.8401 0.77076-5.5125 0.48376-7.3769-0.85327-5.5432-4.6866-8.1686-11.469-7.855-13.666 0.63195-24.596 12.949-27.39 30.867-1.1945 7.6596-0.89556 15.506 0.79293 20.81 1.3593 4.2696 3.1725 7.197 6.2806 10.14 5.1317 4.8585 11.858 7.0392 21.7 7.0348 8.6376-4e-3 15.814-1.5049 26.495-5.5418l2.8851-1.0904 0.14272-2.3326c0.0785-1.2829 0.14272-4.0282 0.14272-6.1006 0-9.519 1.416-22.71 3.654-34.039 3.8056-19.265 10.84-34.868 18.012-39.952 3.5656-2.5275 7.4093-3.4892 10.969-2.7444 3.867 0.80906 7.2202 4.5523 8.5708 9.5679 0.35828 1.3305 0.49623 2.6199 0.57664 5.3896 0.42125 14.51-6.9524 28.93-25.438 49.747l-2.4331 2.7399-0.14394 2.435c-0.0792 1.3392-0.11252 3.8008-0.0741 5.4702l0.0698 3.0351 0.96327-2.2644c4.4317-10.418 10.798-18.348 17.357-21.619 5.3814-2.6841 10.575-2.3474 12.763 0.82754 1.8537 2.6898 1.6068 6.521-1.3468 20.904-2.0726 10.093-2.3421 12.548-1.6299 14.847 0.5834 1.8829 2.8235 2.3929 5.2061 1.1853 2.1175-1.0732 5.6588-4.4869 10.01-9.6492 1.8391-2.182 2.612-2.7044 4.0007-2.7044 2.1334 0 3.0319 1.3454 3.1708 4.7478 0.10319 2.5289-0.27738 4.4331-1.2009 6.0091-1.3062 2.2289-6.3345 7.1702-10.394 10.214-3.3075 2.4801-6.686 3.8597-10.679 4.3606-7.3802 0.9259-12.053-1.7734-13.736-7.9354-0.30195-1.1054-0.38626-2.2087-0.37017-4.8446 0.0214-3.5012 0.19513-4.749 1.958-14.061 1.2473-6.5885 1.1942-8.2173-0.27231-8.359-0.60292-0.0583-0.90324 0.11129-1.9499 1.101-3.9066 3.6942-8.8177 13.999-11.538 24.21-0.96881 3.6364-1.719 5.3125-3.0559 6.8279-1.8926 2.1453-4.2493 3.1338-7.5137 3.1517-1.8941 0.0104-2.1889-0.0455-3.1168-0.59101-1.2312-0.72379-1.875-1.9008-2.23-4.0773-0.13331-0.81733-0.25689-1.5112-0.27462-1.5419-0.0177-0.0307-1.2127 0.39274-2.6556 0.94107-6.3414 2.41-12.926 3.9576-20.57 4.8351-2.9227 0.3355-10.723 0.59197-12.882 0.42359zm53.857-55.273c8.9818-11.73 14.266-25.324 13.216-33.999-0.30601-2.5291-0.58398-3.3974-1.3765-4.3001-1.4905-1.6976-3.179-0.61904-5.0729 3.2403-2.4678 5.029-4.9006 13.393-7.0014 24.071-0.65028 3.3054-2.204 13.036-2.1975 13.763 3e-3 0.38751 0.0549 0.32874 2.4321-2.7759z" fill="#30657b" stroke-width=".22021"/>
</svg>

After

Width:  |  Height:  |  Size: 2.8 KiB

View File

Before

Width:  |  Height:  |  Size: 3.9 KiB

After

Width:  |  Height:  |  Size: 3.9 KiB

View File

@ -0,0 +1,6 @@
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="67" fill="#fff"/>
<g transform="matrix(.46296 0 0 .46296 64.352 65)" clip-rule="evenodd" fill="#008000" fill-rule="evenodd" stroke-linejoin="round" stroke-miterlimit="1.4142">
<path d="m1.4 183.6c0-101.4 82.2-183.6 183.6-183.6 101.3 0 183.6 82.2 183.6 183.6 0 101.3-82.2 183.6-183.6 183.6-101.4-0.1-183.6-82.3-183.6-183.6zm149.9 119.3c6 6 15.5 6 21.5 0l108.5-108.5c6-6 6-15.5 0-21.5l-108.5-108.6c-6-6-15.5-6-21.5 0l-24.4 24.4c-6 6-6 15.5 0 21.5l73.4 73.4-73.4 73.4c-6 6-6 15.5 0 21.5z" fill="#008000"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 632 B

View File

@ -0,0 +1,14 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 300 300">
<g id="google-podcasts">
<rect width="300" height="300" rx="67" fill="#fff"/>
<path id="Shape" d="M75.39,133.66A10.5,10.5,0,0,0,65,144.08v11.84a10.39,10.39,0,1,0,20.78,0V144.08C86.25,138.4,81.53,133.66,75.39,133.66Z" fill="#0066d9"/>
<path d="M224.61,133.66a10.5,10.5,0,0,0-10.39,10.42v11.84a10.39,10.39,0,1,0,20.78,0V144.08A10.5,10.5,0,0,0,224.61,133.66Z" fill="#4285f4"/>
<path d="M112.22,168.7a10.5,10.5,0,0,0-10.39,10.42V191a10.39,10.39,0,1,0,20.78,0V179.12C123.08,173.44,118.36,168.7,112.22,168.7Z" fill="#ea4335"/>
<path d="M112.22,99.09a10.5,10.5,0,0,0-10.39,10.42V147.4h0a10.39,10.39,0,1,0,20.78,0h0V109.51C123.08,103.83,118.36,99.09,112.22,99.09Z" fill="#ea4335"/>
<path d="M187.78,99.09a10.5,10.5,0,0,0-10.39,10.42v11.84a10.39,10.39,0,1,0,20.78,0V109.51A10.5,10.5,0,0,0,187.78,99.09Z" fill="#34a853"/>
<path d="M150,65a10.5,10.5,0,0,0-10.39,10.42V87.26a10.39,10.39,0,1,0,20.78,0V75.42A10.5,10.5,0,0,0,150,65Z" fill="#fab908"/>
<path d="M150,202.33a10.49,10.49,0,0,0-10.39,10.41v11.84a10.39,10.39,0,1,0,20.78,0V212.74A10.81,10.81,0,0,0,150,202.33Z" fill="#fab908"/>
<path d="M187.78,142.66a10.5,10.5,0,0,0-10.39,10.42V191a10.39,10.39,0,1,0,20.78,0V153.08A10.5,10.5,0,0,0,187.78,142.66Z" fill="#34a853"/>
<path d="M160.39,119.46a10.39,10.39,0,1,0-20.78,0h0V182h0a10.39,10.39,0,1,0,20.78,0h0v-62.5Z" fill="#fab908"/>
</g>
</svg>

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 607 B

After

Width:  |  Height:  |  Size: 607 B

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 361 B

After

Width:  |  Height:  |  Size: 361 B

View File

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,4 @@
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="67" fill="#a00"/>
<path d="m86.443 74.014-1.164 1.2443c-10.624 11.352-17.086 24.618-19.614 40.264-0.6282 3.889-0.87221 13.034-0.46444 17.395 0.52565 5.6222 1.6382 10.827 3.5778 16.742 2.6825 8.1804 7.1797 16.385 12.617 23.014 2.1481 2.6189 4.9164 5.6404 5.1618 5.6348 0.08123-2e-3 2.4698-2.3265 5.308-5.1661l5.1604-5.1632-1.4277-1.4678c-7.6388-7.8558-12.989-18.745-15.144-30.825-0.70766-3.9654-0.88111-12.413-0.33973-16.557 1.6185-12.39 6.8116-23.696 15.055-32.78l1.7202-1.8964-5.2235-5.2192zm127.11 0.0029-10.444 10.435 1.6513 1.7689c2.2391 2.3976 5.507 6.7796 7.2406 9.7087 8.0172 13.549 10.381 29.552 6.5837 44.577-1.4313 5.6636-3.8657 11.534-6.8129 16.433-1.5633 2.5982-5.4754 7.722-7.263 9.5122l-1.4062 1.4091 5.2091 5.222 5.2091 5.2235 1.1425-1.1138c0.62864-0.61189 1.9098-2.0097 2.8468-3.1077 8.797-10.308 14.719-23.267 16.826-36.816 0.71394-4.5915 0.89257-14.531 0.34547-19.278-0.98586-8.555-3.2874-16.413-7.0613-24.109-3.4164-6.9672-7.6663-13.139-12.66-18.387zm-17.587 17.584-5.0572 5.0586-5.0586 5.0572 0.92311 1.0937c4.507 5.3429 7.067 10.372 8.4301 16.557 0.61235 2.7794 0.74026 8.9539 0.25086 12.091-0.67188 4.3072-2.4127 9.1197-4.5884 12.686-1.0693 1.7527-3.6154 5.1128-4.4236 5.837-0.48933 0.43841-0.48125 0.4479 4.4895 5.5789 2.7385 2.8267 5.0446 5.1114 5.126 5.0787 0.0814-0.0327 0.67246-0.63988 1.313-1.3503 5.4732-6.0703 9.281-13.131 11.33-21.01 3.9908-15.344-0.12986-32.456-10.683-44.363zm-91.754 0.2537c-0.30746-0.06121-0.69429 0.37777-2.1659 2.0785-2.4502 2.8316-3.4895 4.2471-5.2163 7.1112-3.1224 5.179-5.2049 10.824-6.3716 17.263-0.50856 2.8066-0.71317 9.9642-0.36983 12.939 1.187 10.286 5.3538 19.803 11.912 27.202l2.0656 2.3293 5.007-5.1102 5.0084-5.1102-1.1496-1.3302c-4.047-4.6807-6.7034-10.007-8.0774-16.2-0.68545-3.0884-0.7384-9.911-0.10034-13.07 1.2873-6.3732 4.2129-12.347 8.1446-16.632l1.4621-1.5926-4.6673-4.63c-2.5673-2.5468-4.8907-4.8196-5.1632-5.05-0.12226-0.10336-0.21574-0.17885-0.31822-0.19924zm16.644 16.354-0.58771 0.70382c-1.9132 2.2963-4.0928 6.939-5.0457 10.745-0.6866 2.7426-0.86529 8.2349-0.36122 11.128 0.43461 2.4945 1.3262 5.4446 2.2892 7.5754 0.71497 1.5823 3.1697 5.427 3.4646 5.427 0.0953 0 1.4731-1.3158 3.0633-2.9242l2.8912-2.9242-0.47877-0.77406c-4.3296-7.0055-4.2822-15.126 0.12758-22.112l0.58198-0.92311-2.9715-2.9615zm58.352 0.1161c-0.32564 0-5.7194 5.529-5.7194 5.8628 0 0.2031 0.27558 0.77701 0.61351 1.2744 3.8598 5.6802 4.0679 14.341 0.49454 20.594l-1.0163 1.7803 2.831 2.9615c1.5571 1.6292 2.9014 2.9696 2.9873 2.9773 0.0859 8e-3 0.52626-0.49123 0.97907-1.108 1.1824-1.6107 2.6499-4.4136 3.4274-6.5465 2.8302-7.7643 2.1774-16.582-1.7603-23.759-0.84692-1.5436-2.5988-4.0366-2.8368-4.0366zm-28.656 1.5753c-1.4423 4e-3 -2.8916 0.14205-3.9549 0.41426-4.614 1.1814-8.6196 4.4216-10.764 8.708-4.0197 8.0358-0.68308 17.77 7.5172 21.928 2.5055 1.2708 4.4886 1.6762 7.7092 1.5768 2.0654-0.0637 3.2574-0.22545 4.4623-0.60634 4.9195-1.5552 8.8553-5.4521 10.685-10.58 0.74-2.0743 0.93617-6.706 0.37843-8.9346-1.4801-5.914-6.1361-10.567-12.12-12.111-1.0353-0.26722-2.471-0.39908-3.9132-0.39563zm-9.379 39.291-0.65075 4.9898c-0.98758 7.5709-3.0927 23.539-4.2659 32.351-1.3288 9.9815-3.4038 25.731-4.3318 32.88-0.39403 3.0355-0.77054 5.757-0.83571 6.0476l-0.11755 0.52751h18.072l0.12757-0.7626c0.0701-0.41981 0.28334-1.9792 0.47447-3.4646 0.19114-1.4854 0.82221-6.2945 1.4019-10.686 0.57967-4.3918 1.642-12.475 2.3608-17.965 1.7847-13.63 3.4514-26.298 4.7045-35.735 0.57723-4.3475 1.0507-7.9666 1.0507-8.0428 0-0.0766-4.048-0.13904-8.9948-0.13904z" fill="#fff" stroke-width=".36682"/>
</svg>

After

Width:  |  Height:  |  Size: 3.6 KiB

View File

Before

Width:  |  Height:  |  Size: 445 B

After

Width:  |  Height:  |  Size: 445 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 27 KiB

View File

@ -0,0 +1,4 @@
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="67" fill="#1c185b"/>
<path d="m89.047 222.88-12.09-12.122v-145.76h38.496c21.876 0 40.89 0.45403 44.041 1.0516 12.35 2.3421 17.534 5.9045 37.172 25.542 20.305 20.305 23.32 24.884 25.741 39.088 4.3347 25.437-13.949 51.09-39.775 55.808-3.3624 0.61415-11.592 1.1167-18.288 1.1167h-12.174v47.394h-51.032zm46.637-1.7876-9.7472-9.7881h-21.162v19.576h40.656zm-35.03-1.0303v-8.7573h-17.984l8.7117 8.7573c4.7917 4.8166 8.8384 8.7573 8.9922 8.7573 0.15377 0 0.28032-3.9409 0.28032-8.7573zm47.394-24.212v-31.939h-19.576v44.78l9.51 9.5494c5.2304 5.2523 9.6351 9.5494 9.7881 9.5494 0.15286 0 0.27793-14.373 0.27793-31.939zm-47.394-46.642v-57.975l-19.575-19.494v135.44h19.575zm23.697 0.79305v-57.182h-19.576v114.36h19.576zm65.939 30.608c11.361-4.5296 21.383-14.54 26.002-25.971 1.8769-4.6453 2.2934-7.7093 2.3108-17 0.0201-10.675-0.17353-11.745-3.3326-18.415-2.3347-4.9298-5.415-9.1027-10.137-13.732-3.7304-3.6577-6.9882-6.4448-7.2394-6.1936-0.25125 0.25125 0.0894 3.7648 0.75719 7.8076 3.0251 18.318-5.9376 38.414-21.621 48.478-5.1536 3.3071-14.15 6.64-20.997 7.779l-3.8636 0.64265v19.664l16.227-0.39957c13.681-0.33686 17.117-0.75412 21.894-2.659zm-42.243-54.304v-33.485h-19.576v66.97h19.576zm18.659 30.441c11.115-4.1886 21.419-14.499 25.788-25.804 3.0932-8.0031 3.6953-20 1.4245-28.389l-1.7941-6.628-5.2259-1.552c-3.5923-1.0668-9.8376-1.5519-19.978-1.5519h-14.752v67.25l4.4922-0.61573c2.4707-0.33865 6.9912-1.5574 10.045-2.7085zm19.458-70.113c-4.6159-5.828-10.991-10.805-18.098-14.13-5.6804-2.6572-7.1962-2.8816-21.564-3.1922l-15.455-0.33408 19.535 19.722 14.445 0.1219c7.9444 0.0671 15.836 0.47583 17.536 0.90842 6.7179 1.7094 7.1284 1.3564 3.6016-3.0965zm-61.814-7.7217v-9.7881h-40.656l19.494 19.576h21.162zm20.606 9.5061c0-0.15496-3.7091-3.9691-8.2427-8.476l-8.2427-8.194v16.951h8.2427c4.5334 0 8.2427-0.12679 8.2427-0.28174z" fill="#fff" stroke-width="1.3333"/>
</svg>

After

Width:  |  Height:  |  Size: 1.9 KiB

View File

Before

Width:  |  Height:  |  Size: 2.9 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

View File

@ -0,0 +1,4 @@
<svg version="1.1" viewBox="0 0 300 300" xmlns="http://www.w3.org/2000/svg">
<rect width="300" height="300" rx="67" fill="#0d7ab3"/>
<path d="m108.51 232.73c-8.2227-2.8269-17.674-12.373-20.933-21.144-1.4665-3.9465-4.7117-10.21-7.2115-13.92-15.531-23.047-19.28-51.198-10.163-76.316 12.336-33.985 44.034-56.346 79.872-56.346 68.149 0 108 75.842 69.71 132.66-2.4999 3.7094-5.7451 9.973-7.2115 13.92-3.3562 9.032-12.39 17.953-21.395 21.127-3.8172 1.346-7.2108 2.1768-7.5413 1.8463-1.069-1.0689 17.424-64.017 18.807-64.017 0.73594 0 2.9804 1.7721 4.9877 3.9381 2.0073 2.166 4.003 3.9381 4.4348 3.9381s2.0278-3.9506 3.5465-8.7789c2.0748-6.5964 2.6018-12.426 2.1197-23.448-0.57133-13.063-1.2825-15.965-6.4982-26.518-25.161-50.91-96.762-50.91-121.92 0-5.2156 10.553-5.9268 13.456-6.4982 26.518-0.48205 11.022 0.04497 16.851 2.1197 23.448 1.5187 4.8284 3.1146 8.7789 3.5464 8.7789s2.4275-1.7721 4.4348-3.9381c2.0073-2.166 4.2812-3.9381 5.053-3.9381 0.77188 0 3.994 9.3922 7.1604 20.871 3.1664 11.48 7.1234 25.647 8.7936 31.484 1.6701 5.8367 2.5558 10.91 1.9681 11.273-0.58766 0.36319-3.8201-0.28564-7.1833-1.4418zm11.966-2.5793c-0.80948-2.894-5.2598-18.597-9.8898-34.897-7.1225-25.074-8.0649-29.859-6.1239-31.086 3.777-2.3892 10.294-1.6927 13.093 1.3991 2.2627 2.5003 18.343 55.943 18.343 60.964 0 2.6724-4.9172 6.6288-9.732 7.8301-3.7779 0.94269-4.3723 0.50303-5.6902-4.2091zm49.68 3.1452c-2.4441-0.89259-4.7315-3.1626-5.2438-5.204-1.1929-4.7531 13.211-56.734 17.086-61.66 1.8185-2.3119 4.5872-3.7542 7.178-3.7395 9.4435 0.0541 9.4384 0.20748-1.2564 37.644-5.4668 19.136-10.724 34.736-11.684 34.668-0.95949-0.0683-3.6954-0.83679-6.0796-1.7076z" fill="#fff" stroke-width="1.6667"/>
</svg>

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

Before

Width:  |  Height:  |  Size: 670 B

After

Width:  |  Height:  |  Size: 670 B

View File

Before

Width:  |  Height:  |  Size: 310 B

After

Width:  |  Height:  |  Size: 310 B

View File

Before

Width:  |  Height:  |  Size: 465 B

After

Width:  |  Height:  |  Size: 465 B

View File

Before

Width:  |  Height:  |  Size: 1.1 KiB

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M10.076 11c.6 0 1.086.45 1.075 1 0 .55-.474 1-1.075 1C9.486 13 9 12.55 9 12s.475-1 1.076-1zm3.848 0c.601 0 1.076.45 1.076 1s-.475 1-1.076 1c-.59 0-1.075-.45-1.075-1s.474-1 1.075-1zm4.967-9C20.054 2 21 2.966 21 4.163V23l-2.211-1.995-1.245-1.176-1.317-1.25.546 1.943H5.109C3.946 20.522 3 19.556 3 18.359V4.163C3 2.966 3.946 2 5.109 2H18.89zm-3.97 13.713c2.273-.073 3.148-1.596 3.148-1.596 0-3.381-1.482-6.122-1.482-6.122-1.48-1.133-2.89-1.102-2.89-1.102l-.144.168c1.749.546 2.561 1.334 2.561 1.334a8.263 8.263 0 0 0-3.096-1.008 8.527 8.527 0 0 0-2.077.02c-.062 0-.114.011-.175.021-.36.032-1.235.168-2.335.662-.38.178-.607.305-.607.305s.854-.83 2.705-1.376l-.103-.126s-1.409-.031-2.89 1.103c0 0-1.481 2.74-1.481 6.121 0 0 .864 1.522 3.137 1.596 0 0 .38-.472.69-.871-1.307-.4-1.8-1.24-1.8-1.24s.102.074.287.179c.01.01.02.021.041.031.031.022.062.032.093.053.257.147.514.262.75.357.422.168.926.336 1.513.452a7.06 7.06 0 0 0 2.664.01 6.666 6.666 0 0 0 1.491-.451c.36-.137.761-.337 1.183-.62 0 0-.514.861-1.862 1.25.309.399.68.85.68.85z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 1.2 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2C6.477 2 2 6.477 2 12c0 4.991 3.657 9.128 8.438 9.879V14.89h-2.54V12h2.54V9.797c0-2.506 1.492-3.89 3.777-3.89 1.094 0 2.238.195 2.238.195v2.46h-1.26c-1.243 0-1.63.771-1.63 1.562V12h2.773l-.443 2.89h-2.33v6.989C18.343 21.129 22 16.99 22 12c0-5.523-4.477-10-10-10z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 425 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M12 2c2.717 0 3.056.01 4.122.06 1.065.05 1.79.217 2.428.465.66.254 1.216.598 1.772 1.153a4.908 4.908 0 0 1 1.153 1.772c.247.637.415 1.363.465 2.428.047 1.066.06 1.405.06 4.122 0 2.717-.01 3.056-.06 4.122-.05 1.065-.218 1.79-.465 2.428a4.883 4.883 0 0 1-1.153 1.772 4.915 4.915 0 0 1-1.772 1.153c-.637.247-1.363.415-2.428.465-1.066.047-1.405.06-4.122.06-2.717 0-3.056-.01-4.122-.06-1.065-.05-1.79-.218-2.428-.465a4.89 4.89 0 0 1-1.772-1.153 4.904 4.904 0 0 1-1.153-1.772c-.248-.637-.415-1.363-.465-2.428C2.013 15.056 2 14.717 2 12c0-2.717.01-3.056.06-4.122.05-1.066.217-1.79.465-2.428a4.88 4.88 0 0 1 1.153-1.772A4.897 4.897 0 0 1 5.45 2.525c.638-.248 1.362-.415 2.428-.465C8.944 2.013 9.283 2 12 2zm0 5a5 5 0 1 0 0 10 5 5 0 0 0 0-10zm6.5-.25a1.25 1.25 0 0 0-2.5 0 1.25 1.25 0 0 0 2.5 0zM12 9a3 3 0 1 1 0 6 3 3 0 0 1 0-6z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 978 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M18.335 18.339H15.67v-4.177c0-.996-.02-2.278-1.39-2.278-1.389 0-1.601 1.084-1.601 2.205v4.25h-2.666V9.75h2.56v1.17h.035c.358-.674 1.228-1.387 2.528-1.387 2.7 0 3.2 1.778 3.2 4.091v4.715zM7.003 8.575a1.546 1.546 0 0 1-1.548-1.549 1.548 1.548 0 1 1 1.547 1.549zm1.336 9.764H5.666V9.75H8.34v8.589zM19.67 3H4.329C3.593 3 3 3.58 3 4.297v15.406C3 20.42 3.594 21 4.328 21h15.338C20.4 21 21 20.42 21 19.703V4.297C21 3.58 20.4 3 19.666 3h.003z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 592 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M21.258 13.99c-.274 1.41-2.456 2.955-4.962 3.254-1.306.156-2.593.3-3.965.236-2.243-.103-4.014-.535-4.014-.535 0 .218.014.426.04.62.292 2.215 2.196 2.347 4 2.41 1.82.062 3.44-.45 3.44-.45l.076 1.646s-1.274.684-3.542.81c-1.25.068-2.803-.032-4.612-.51-3.923-1.039-4.598-5.22-4.701-9.464-.031-1.26-.012-2.447-.012-3.44 0-4.34 2.843-5.611 2.843-5.611 1.433-.658 3.892-.935 6.45-.956h.062c2.557.02 5.018.298 6.451.956 0 0 2.843 1.272 2.843 5.61 0 0 .036 3.201-.397 5.424zm-2.956-5.087c0-1.074-.273-1.927-.822-2.558-.567-.631-1.308-.955-2.229-.955-1.065 0-1.871.41-2.405 1.228l-.518.87-.519-.87C11.276 5.8 10.47 5.39 9.405 5.39c-.921 0-1.663.324-2.229.955-.549.631-.822 1.484-.822 2.558v5.253h2.081V9.057c0-1.075.452-1.62 1.357-1.62 1 0 1.501.647 1.501 1.927v2.79h2.07v-2.79c0-1.28.5-1.927 1.5-1.927.905 0 1.358.545 1.358 1.62v5.1h2.08V8.902z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 993 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0H24V24H0z"/><path d="M12 2c5.523 0 10 4.477 10 10s-4.477 10-10 10S2 17.523 2 12 6.477 2 12 2zm1.031 6.099h-2.624c-.988 0-1.789.776-1.789 1.733v6.748l2.595-2.471h1.818c1.713 0 3.101-1.345 3.101-3.005s-1.388-3.005-3.1-3.005z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 359 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M6.527 14.514A1.973 1.973 0 0 1 4.56 16.48a1.973 1.973 0 0 1-1.967-1.967c0-1.083.884-1.968 1.967-1.968h1.968v1.968zm.992 0c0-1.083.884-1.968 1.967-1.968 1.083 0 1.968.885 1.968 1.968v4.927a1.973 1.973 0 0 1-1.968 1.967 1.973 1.973 0 0 1-1.967-1.967v-4.927zm1.967-7.987A1.973 1.973 0 0 1 7.52 4.56c0-1.083.884-1.967 1.967-1.967 1.083 0 1.968.884 1.968 1.967v1.968H9.486zm0 .992c1.083 0 1.968.884 1.968 1.967a1.973 1.973 0 0 1-1.968 1.968H4.56a1.973 1.973 0 0 1-1.967-1.968c0-1.083.884-1.967 1.967-1.967h4.927zm7.987 1.967c0-1.083.885-1.967 1.968-1.967s1.967.884 1.967 1.967a1.973 1.973 0 0 1-1.967 1.968h-1.968V9.486zm-.992 0a1.973 1.973 0 0 1-1.967 1.968 1.973 1.973 0 0 1-1.968-1.968V4.56c0-1.083.885-1.967 1.968-1.967s1.967.884 1.967 1.967v4.927zm-1.967 7.987c1.083 0 1.967.885 1.967 1.968a1.973 1.973 0 0 1-1.967 1.967 1.973 1.973 0 0 1-1.968-1.967v-1.968h1.968zm0-.992a1.973 1.973 0 0 1-1.968-1.967c0-1.083.885-1.968 1.968-1.968h4.927c1.083 0 1.967.885 1.967 1.968a1.973 1.973 0 0 1-1.967 1.967h-4.927z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M21 3v11.74l-4.696 4.695h-3.913l-2.437 2.348H6.913v-2.348H3V6.13L4.227 3H21zm-1.565 1.565H6.13v11.74h3.13v2.347l2.349-2.348h4.695l3.13-3.13V4.565zm-3.13 3.13v4.696h-1.566V7.696h1.565zm-3.914 0v4.696h-1.565V7.696h1.565z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 376 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M22.162 5.656a8.384 8.384 0 0 1-2.402.658A4.196 4.196 0 0 0 21.6 4c-.82.488-1.719.83-2.656 1.015a4.182 4.182 0 0 0-7.126 3.814 11.874 11.874 0 0 1-8.62-4.37 4.168 4.168 0 0 0-.566 2.103c0 1.45.738 2.731 1.86 3.481a4.168 4.168 0 0 1-1.894-.523v.052a4.185 4.185 0 0 0 3.355 4.101 4.21 4.21 0 0 1-1.89.072A4.185 4.185 0 0 0 7.97 16.65a8.394 8.394 0 0 1-6.191 1.732 11.83 11.83 0 0 0 6.41 1.88c7.693 0 11.9-6.373 11.9-11.9 0-.18-.005-.362-.013-.54a8.496 8.496 0 0 0 2.087-2.165z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 632 B

View File

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="24" height="24"><path fill="none" d="M0 0h24v24H0z"/><path d="M21.543 6.498C22 8.28 22 12 22 12s0 3.72-.457 5.502c-.254.985-.997 1.76-1.938 2.022C17.896 20 12 20 12 20s-5.893 0-7.605-.476c-.945-.266-1.687-1.04-1.938-2.022C2 15.72 2 12 2 12s0-3.72.457-5.502c.254-.985.997-1.76 1.938-2.022C6.107 4 12 4 12 4s5.896 0 7.605.476c.945.266 1.687 1.04 1.938 2.022zM10 15.5l6-3.5-6-3.5v7z" fill="currentColor"/></svg>

After

Width:  |  Height:  |  Size: 475 B

View File

@ -24,9 +24,13 @@ $podcastNavigation = [
'icon' => 'group',
'items' => ['contributor-list', 'contributor-add'],
],
'settings' => [
'icon' => 'settings',
'items' => ['platforms'],
'platforms' => [
'icon' => 'links',
'items' => [
'platforms-podcasting',
'platforms-social',
'platforms-funding',
],
],
]; ?>

View File

@ -10,7 +10,7 @@
<?= $this->section('content') ?>
<?= form_open(route_to('platforms', $podcast->id), [
<?= form_open(route_to('platforms-save', $podcast->id, $platformType), [
'class' => 'flex flex-col max-w-md',
]) ?>
<?= csrf_field() ?>
@ -19,7 +19,11 @@
<div class="relative flex items-start mb-4">
<div class="flex flex-col w-12 mr-4">
<?= platform_icon($platform->name, 'w-full mb-1') ?>
<?= platform_icon(
$platform->type,
$platform->slug,
'w-full mb-1 text-gray-800'
) ?>
<div class="inline-flex bg-gray-200">
<?= anchor($platform->home_url, icon('external-link', 'mx-auto'), [
'class' => 'flex-1 text-gray-600 hover:text-gray-900',
@ -32,7 +36,7 @@
]),
]) ?>
<?= $platform->submit_url
? anchor($platform->submit_url, icon('upload', 'mx-auto'), [
? anchor($platform->submit_url, icon('add-box', 'mx-auto'), [
'class' => 'flex-1 text-gray-600 hover:text-gray-900',
'target' => '_blank',
'rel' => 'noopener noreferrer',
@ -48,7 +52,11 @@
<div class="flex flex-col flex-1">
<?= $platform->link_url
? anchor(
route_to('platforms-remove', $podcast->id, $platform->id),
route_to(
'podcast-platform-remove',
$podcast->id,
$platform->slug
),
icon('delete-bin', 'mx-auto'),
[
'class' =>
@ -61,26 +69,37 @@
]
)
: '' ?>
<?= form_label($platform->label, $platform->name, [
<?= form_label($platform->label, $platform->slug, [
'class' => 'font-semibold mb-2',
]) ?>
<?= form_input([
'id' => $platform->name,
'name' => 'platforms[' . $platform->name . '][url]',
'id' => $platform->slug . '_link_url',
'name' => 'platforms[' . $platform->slug . '][url]',
'class' => 'form-input mb-1 w-full',
'value' => old($platform->name, $platform->link_url),
'value' => old($platform->slug . '_link_url', $platform->link_url),
'type' => 'url',
'placeholder' => 'https://...',
]) ?>
<?= form_input([
'id' => $platform->slug . '_link_content',
'name' => 'platforms[' . $platform->slug . '][content]',
'class' => 'form-input mb-1 w-full',
'value' => old(
$platform->slug . '_link_content',
$platform->link_content
),
'type' => 'text',
'placeholder' => lang("Platforms.description.{$platform->type}"),
]) ?>
<?= form_switch(
lang('Platforms.visible'),
[
'id' => $platform->name . '_visible',
'name' => 'platforms[' . $platform->name . '][visible]',
'id' => $platform->slug . '_visible',
'name' => 'platforms[' . $platform->slug . '][visible]',
],
'yes',
old(
$platform->name . '_visible',
$platform->slug . '_visible',
$platform->is_visible ? $platform->is_visible : false
),
'text-sm'

View File

@ -32,7 +32,7 @@
<div class="flex flex-col items-center justify-center md:items-stretch md:mx-auto md:container md:py-12 md:flex-row ">
<img src="<?= $podcast->image->medium_url ?>"
alt="<?= $podcast->title ?>" class="object-cover w-full max-w-xs m-4 rounded-lg shadow-xl" />
<div class="bg-white w-fullp-4 md:max-w-md md:text-white md:bg-transparent">
<div class="w-full p-4 bg-white md:max-w-md md:text-white md:bg-transparent">
<h1 class="text-2xl font-semibold leading-tight"><?= $podcast->title ?> <span class="text-lg font-normal opacity-75">@<?= $podcast->name ?></span></h1>
<div class="flex items-center mb-4">
<address>
@ -46,23 +46,65 @@
'</span>'
: '' ?>
</div>
<div class="inline-flex">
<div class="flex mb-2 space-x-2">
<?= anchor(
route_to('podcast_feed', $podcast->name),
icon('rss', 'mr-2') . lang('Podcast.feed'),
[
'class' =>
'text-white bg-gradient-to-r from-orange-400 to-red-500 hover:to-orange-500 hover:bg-orange-500 inline-flex items-center px-2 py-1 mb-2 font-semibold rounded-lg shadow-md hover:bg-orange-600',
'text-white bg-gradient-to-r from-orange-400 to-red-500 hover:to-orange-500 hover:bg-orange-500 inline-flex items-center px-2 py-1 font-semibold rounded-lg shadow-md hover:bg-orange-600',
]
) ?>
<?php foreach ($podcast->platforms as $platform): ?>
<?php if ($platform->is_visible): ?>
<a href="<?= $platform->link_url ?>" title="<?= $platform->label ?>" target="_blank" rel="noopener noreferrer" class="ml-2">
<?= platform_icon($platform->name, 'h-8') ?>
<?php foreach (
$podcast->podcastingPlatforms
as $podcastingPlatform
): ?>
<?php if ($podcastingPlatform->is_visible): ?>
<a href="<?= $podcastingPlatform->link_url ?>" title="<?= $podcastingPlatform->label ?>" target="_blank" rel="noopener noreferrer">
<?= platform_icon(
$podcastingPlatform->type,
$podcastingPlatform->slug,
'h-8'
) ?>
</a>
<?php endif; ?>
<?php endforeach; ?>
</div>
<div class="flex mb-2 space-x-2">
<?php foreach (
$podcast->socialPlatforms
as $socialPlatform
): ?>
<?php if ($socialPlatform->is_visible): ?>
<a href="<?= $socialPlatform->link_url ?>" title="<?= $socialPlatform->label ?>" target="_blank" rel="noopener noreferrer">
<?= platform_icon(
$socialPlatform->type,
$socialPlatform->slug,
'h-8 text-black md:text-white'
) ?>
</a>
<?php endif; ?>
<?php endforeach; ?>
</div>
<div class="flex mb-2 space-x-2">
<?php foreach (
$podcast->fundingPlatforms
as $fundingPlatform
): ?>
<?php if ($fundingPlatform->is_visible): ?>
<a href="<?= $fundingPlatform->link_url ?>" title="<?= $fundingPlatform->link_content ?>" target="_blank" rel="noopener noreferrer">
<?= platform_icon(
$fundingPlatform->type,
$fundingPlatform->slug,
'h-8'
) ?>
</a>
<?php endif; ?>
<?php endforeach; ?>
</div>
<div class="mb-2 opacity-75">
<?= $podcast->description_html ?>
</div>