fix(platforms): make platforms' websites and submit urls more prominent

+ show default podcast website (castopod) link first in links page
This commit is contained in:
Yassine Doghri 2023-11-17 17:26:37 +00:00
parent dff85168b3
commit 61cf8fa3e2
25 changed files with 645 additions and 543 deletions

View File

View File

@ -75,13 +75,6 @@ class PlatformSeeder extends Seeder
'home_url' => 'http://castro.fm/',
'submit_url' => 'https://castro.fm/support/link-to-your-podcast-in-castro',
],
[
'slug' => 'chartable',
'type' => 'podcasting',
'label' => 'Chartable',
'home_url' => 'https://chartable.com/',
'submit_url' => 'https://chartable.com/podcasts/submit',
],
[
'slug' => 'deezer',
'type' => 'podcasting',
@ -390,13 +383,6 @@ class PlatformSeeder extends Seeder
'home_url' => 'https://www.tsacdop.app/',
'submit_url' => '',
],
[
'slug' => 'zion',
'type' => 'podcasting',
'label' => 'Zion',
'home_url' => 'https://zion.fyi/',
'submit_url' => 'https://guide.zion.fyi/zion/getting-started',
],
];
$fundingData = [
@ -611,7 +597,7 @@ class PlatformSeeder extends Seeder
'type' => 'social',
'label' => 'YouTube',
'home_url' => 'https://www.youtube.com/',
'submit_url' => 'https://creatoracademy.youtube.com/page/home',
'submit_url' => 'https://studio.youtube.com/',
],
[
'slug' => 'x',

View File

@ -51,4 +51,5 @@ return [
other {# persons}
}',
'persons_list' => 'Persons',
'castopod_website' => 'Castopod (website)',
];

View File

@ -14,7 +14,7 @@ class Vite extends BaseConfig
public string $assetsRoot = 'assets';
public string $manifestFile = 'manifest.json';
public string $manifestFile = '.vite/manifest.json';
public string $manifestCSSFile = 'manifest-css.json';
}

View File

@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0,0H24V24H0Z" fill="none" />
<path d="M7.64,19.53a7.62,7.62,0,0,1-1.95-.36,5.47,5.47,0,0,1-2.47-1.63A5.89,5.89,0,0,1,2,13.2,8.75,8.75,0,0,1,3,9.59,7,7,0,0,1,4.38,7.65,6.18,6.18,0,0,1,7.82,6,7.11,7.11,0,0,1,9.8,6a2.89,2.89,0,0,1,2.07,1.6A3.44,3.44,0,0,1,11.62,11a1,1,0,0,1-.71.31.92.92,0,0,1-.9-.36,1.36,1.36,0,0,1-.06-1,3.21,3.21,0,0,0,.07-1C9.9,8.1,9.35,7.72,8.38,7.77c-2,.09-3.51,1.85-3.91,4.41a7,7,0,0,0,.11,3,3.16,3.16,0,0,0,.9,1.45,4.21,4.21,0,0,0,3.1,1,9.81,9.81,0,0,0,3.78-.79l.42-.16,0-.33c0-.18,0-.57,0-.87a27.41,27.41,0,0,1,.52-4.86c.54-2.76,1.55-5,2.57-5.71a2,2,0,0,1,1.57-.39A1.78,1.78,0,0,1,18.7,5.85a2.67,2.67,0,0,1,.09.77c.06,2.08-1,4.14-3.64,7.11l-.35.39,0,.35c0,.19,0,.54,0,.78v.44l.14-.33a6,6,0,0,1,2.48-3.09c.77-.38,1.51-.33,1.82.12s.23.93-.19,3c-.29,1.44-.33,1.79-.23,2.12s.4.34.74.17A6,6,0,0,0,21,16.29c.27-.31.38-.39.57-.39s.44.2.46.68a1.57,1.57,0,0,1-.17.86,7.38,7.38,0,0,1-1.49,1.46,3.08,3.08,0,0,1-1.52.62,1.57,1.57,0,0,1-2-1.13,2.76,2.76,0,0,1-.05-.69,9.31,9.31,0,0,1,.28-2c.18-.94.17-1.18,0-1.2s-.13,0-.28.16a8.75,8.75,0,0,0-1.65,3.46,2.14,2.14,0,0,1-.43,1,1.39,1.39,0,0,1-1.08.45c-.27,0-.31,0-.44-.09a.71.71,0,0,1-.32-.58l0-.22-.38.13a11.51,11.51,0,0,1-2.94.69,14.78,14.78,0,0,1-1.84.06Zm7.7-7.89c1.28-1.68,2-3.62,1.88-4.86,0-.36-.08-.49-.19-.61s-.46-.09-.73.46a15.26,15.26,0,0,0-1,3.44c-.09.47-.31,1.86-.31,2s0,.05.35-.39Z" />
</svg>

Before

Width:  |  Height:  |  Size: 1.4 KiB

View File

@ -1,4 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0 0h24v24H0Z" fill="none" />
<path d="M12.37 14.93H8.01l-4.53 7.14H19.7v-3.23H9.88l2.49-3.91zM11.66 9.15h4.36l4.5-7.08H4.96v3.26h9.12l-2.42 3.82z" />
</svg>

Before

Width:  |  Height:  |  Size: 235 B

View File

@ -1,4 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
<path d="M0,0H24V24H0Z" fill="none" />
<path d="M18.244 2.25h3.308l-7.227 8.26 8.502 11.24H16.17l-5.214-6.817L4.99 21.75H1.68l7.73-8.835L1.254 2.25H8.08l4.713 6.231zm-1.161 17.52h1.833L7.084 4.126H5.117z"/>
</svg>
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M18.2048 2.25H21.5128L14.2858 10.51L22.7878 21.75H16.1308L10.9168 14.933L4.95084 21.75H1.64084L9.37084 12.915L1.21484 2.25H8.04084L12.7538 8.481L18.2048 2.25ZM17.0438 19.77H18.8768L7.04484 4.126H5.07784L17.0438 19.77Z"></path></svg>

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 301 B

View File

@ -9,7 +9,7 @@
"php": "^8.1",
"adaures/ipcat-php": "^v1.0.0",
"adaures/podcast-persons-taxonomy": "^v1.0.1",
"aws/aws-sdk-php": "^3.286.1",
"aws/aws-sdk-php": "^3.286.3",
"chrisjean/php-ico": "^1.0.4",
"cocur/slugify": "^v4.5.1",
"codeigniter4/framework": "v4.4.3",
@ -25,7 +25,7 @@
"mpratt/embera": "^2.0.35",
"opawg/user-agents-php": "^v1.0",
"phpseclib/phpseclib": "~2.0.45",
"vlucas/phpdotenv": "v5.5.0",
"vlucas/phpdotenv": "v5.6.0",
"whichbrowser/parser": "^v2.1.7",
"yassinedoghri/podcast-feed": "dev-main"
},
@ -36,7 +36,7 @@
"phpstan/extension-installer": "^1.3.1",
"phpstan/phpstan": "^1.10.41",
"phpunit/phpunit": "^10.4.2",
"rector/rector": "^0.18.8",
"rector/rector": "^0.18.10",
"symplify/coding-standard": "^12.0.3",
"symplify/easy-coding-standard": "^12.0.8"
},

84
composer.lock generated
View File

@ -4,7 +4,7 @@
"Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically"
],
"content-hash": "b662d02c852a6a8deffc302daf7c9c75",
"content-hash": "00ed57ba2f95cbc550bd85d115e316f3",
"packages": [
{
"name": "adaures/ipcat-php",
@ -120,16 +120,16 @@
},
{
"name": "aws/aws-sdk-php",
"version": "3.286.1",
"version": "3.286.3",
"source": {
"type": "git",
"url": "https://github.com/aws/aws-sdk-php.git",
"reference": "f3276ecb6e5202452d4b64237e6dc1bc9d350ae6"
"reference": "29079a62c6a30ac594b50285494b4dec279b4648"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/f3276ecb6e5202452d4b64237e6dc1bc9d350ae6",
"reference": "f3276ecb6e5202452d4b64237e6dc1bc9d350ae6",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/29079a62c6a30ac594b50285494b4dec279b4648",
"reference": "29079a62c6a30ac594b50285494b4dec279b4648",
"shasum": ""
},
"require": {
@ -205,9 +205,9 @@
"support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues",
"source": "https://github.com/aws/aws-sdk-php/tree/3.286.1"
"source": "https://github.com/aws/aws-sdk-php/tree/3.286.3"
},
"time": "2023-11-14T19:09:59+00:00"
"time": "2023-11-16T19:12:53+00:00"
},
{
"name": "brick/math",
@ -564,12 +564,12 @@
"source": {
"type": "git",
"url": "https://github.com/codeigniter4/tasks.git",
"reference": "eef3ec66b9dfa2e9124aad26c1cb1eb761982f9f"
"reference": "79444480fe1f7497fc65c5529e21bc4c689aa25a"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/codeigniter4/tasks/zipball/eef3ec66b9dfa2e9124aad26c1cb1eb761982f9f",
"reference": "eef3ec66b9dfa2e9124aad26c1cb1eb761982f9f",
"url": "https://api.github.com/repos/codeigniter4/tasks/zipball/79444480fe1f7497fc65c5529e21bc4c689aa25a",
"reference": "79444480fe1f7497fc65c5529e21bc4c689aa25a",
"shasum": ""
},
"require": {
@ -638,7 +638,7 @@
"source": "https://github.com/codeigniter4/tasks/tree/develop",
"issues": "https://github.com/codeigniter4/tasks/issues"
},
"time": "2023-11-15T12:11:54+00:00"
"time": "2023-11-17T06:19:42+00:00"
},
{
"name": "composer/ca-bundle",
@ -2758,7 +2758,7 @@
},
{
"name": "symfony/deprecation-contracts",
"version": "v3.3.0",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git",
@ -2801,7 +2801,7 @@
"description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com",
"support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0"
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
},
"funding": [
{
@ -3039,31 +3039,31 @@
},
{
"name": "vlucas/phpdotenv",
"version": "v5.5.0",
"version": "v5.6.0",
"source": {
"type": "git",
"url": "https://github.com/vlucas/phpdotenv.git",
"reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7"
"reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7",
"reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"shasum": ""
},
"require": {
"ext-pcre": "*",
"graham-campbell/result-type": "^1.0.2",
"php": "^7.1.3 || ^8.0",
"phpoption/phpoption": "^1.8",
"symfony/polyfill-ctype": "^1.23",
"symfony/polyfill-mbstring": "^1.23.1",
"symfony/polyfill-php80": "^1.23.1"
"graham-campbell/result-type": "^1.1.2",
"php": "^7.2.5 || ^8.0",
"phpoption/phpoption": "^1.9.2",
"symfony/polyfill-ctype": "^1.24",
"symfony/polyfill-mbstring": "^1.24",
"symfony/polyfill-php80": "^1.24"
},
"require-dev": {
"bamarni/composer-bin-plugin": "^1.4.1",
"bamarni/composer-bin-plugin": "^1.8.2",
"ext-filter": "*",
"phpunit/phpunit": "^7.5.20 || ^8.5.30 || ^9.5.25"
"phpunit/phpunit": "^8.5.34 || ^9.6.13 || ^10.4.2"
},
"suggest": {
"ext-filter": "Required to use the boolean validator."
@ -3075,7 +3075,7 @@
"forward-command": true
},
"branch-alias": {
"dev-master": "5.5-dev"
"dev-master": "5.6-dev"
}
},
"autoload": {
@ -3101,7 +3101,7 @@
"keywords": ["dotenv", "env", "environment"],
"support": {
"issues": "https://github.com/vlucas/phpdotenv/issues",
"source": "https://github.com/vlucas/phpdotenv/tree/v5.5.0"
"source": "https://github.com/vlucas/phpdotenv/tree/v5.6.0"
},
"funding": [
{
@ -3113,7 +3113,7 @@
"type": "tidelift"
}
],
"time": "2022-10-16T01:01:54+00:00"
"time": "2023-11-12T22:43:29+00:00"
},
{
"name": "whichbrowser/parser",
@ -4430,16 +4430,16 @@
},
{
"name": "rector/rector",
"version": "0.18.8",
"version": "0.18.10",
"source": {
"type": "git",
"url": "https://github.com/rectorphp/rector.git",
"reference": "374bab157a41f6849556edc53125f856eb6c1c8c"
"reference": "f36bc0a707fd8af301df5108740ce41f9db8eded"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/374bab157a41f6849556edc53125f856eb6c1c8c",
"reference": "374bab157a41f6849556edc53125f856eb6c1c8c",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/f36bc0a707fd8af301df5108740ce41f9db8eded",
"reference": "f36bc0a707fd8af301df5108740ce41f9db8eded",
"shasum": ""
},
"require": {
@ -4463,7 +4463,7 @@
"keywords": ["automation", "dev", "migration", "refactoring"],
"support": {
"issues": "https://github.com/rectorphp/rector/issues",
"source": "https://github.com/rectorphp/rector/tree/0.18.8"
"source": "https://github.com/rectorphp/rector/tree/0.18.10"
},
"funding": [
{
@ -4471,7 +4471,7 @@
"type": "github"
}
],
"time": "2023-11-14T15:30:19+00:00"
"time": "2023-11-16T19:42:21+00:00"
},
{
"name": "sebastian/cli-parser",
@ -5631,7 +5631,7 @@
},
{
"name": "symfony/event-dispatcher-contracts",
"version": "v3.3.0",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git",
@ -5685,7 +5685,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.3.0"
"source": "https://github.com/symfony/event-dispatcher-contracts/tree/v3.4.0"
},
"funding": [
{
@ -6163,16 +6163,16 @@
},
{
"name": "symfony/service-contracts",
"version": "v3.3.0",
"version": "v3.4.0",
"source": {
"type": "git",
"url": "https://github.com/symfony/service-contracts.git",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4"
"reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838"
},
"dist": {
"type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838",
"reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838",
"shasum": ""
},
"require": {
@ -6221,7 +6221,7 @@
"standards"
],
"support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.3.0"
"source": "https://github.com/symfony/service-contracts/tree/v3.4.0"
},
"funding": [
{
@ -6237,7 +6237,7 @@
"type": "tidelift"
}
],
"time": "2023-05-23T14:45:45+00:00"
"time": "2023-07-30T20:28:31+00:00"
},
{
"name": "symfony/stopwatch",

View File

@ -43,6 +43,7 @@ return [
'platforms' => 'platforms',
'social' => 'social networks',
'funding' => 'funding',
'monetization-other' => 'other monetization',
'analytics' => 'analytics',
'locations' => 'locations',
'webpages' => 'web pages',

View File

@ -9,9 +9,22 @@ declare(strict_types=1);
*/
return [
'title' => 'Platforms',
'title' => [
'podcasting' => 'Podcasting platforms',
'social' => 'Social networks',
'funding' => 'Funding links',
],
'website' => 'Website',
'home_url' => 'Go to {platformName} website',
'register' => 'Register',
'submit_url' => 'Submit your podcast on {platformName}',
'your_link' => 'Your link',
'your_id' => [
'podcasting' => 'Your ID',
'social' => 'Your ID',
'funding' => 'Your CTA',
],
'your_cta' => 'Your call to action',
'visible' => 'Display in podcast homepage?',
'on_embed' => 'Display on embeddable player?',
'remove' => 'Remove {platformName}',

View File

@ -22,6 +22,7 @@ return [
'delete' => 'Delete podcast',
'see_episodes' => 'See episodes',
'see_contributors' => 'See contributors',
'monetization_other' => 'Other monetization',
'go_to_page' => 'Go to page',
'latest_episodes' => 'Latest episodes',
'see_all_episodes' => 'See all episodes',

View File

@ -86,7 +86,7 @@ class UserController extends BaseController
*/
public function attemptCreate(): RedirectResponse
{
helper('text');
helper(['text', 'email']);
$db = db_connect();
$db->transStart();

View File

@ -4,6 +4,7 @@
"description": "Castopod Host is an open-source hosting platform made for podcasters who want engage and interact with their audience.",
"private": true,
"license": "AGPL-3.0-or-later",
"type": "module",
"repository": {
"type": "git",
"url": "https://code.castopod.org/adaures/castopod.git"
@ -13,8 +14,8 @@
"build": "tsc && vite build",
"serve": "vite preview",
"build:static": "pnpm run build:icons && pnpm run build:svg",
"build:icons": "svgo -f app/Resources/icons -o public/assets/icons -r --config=./.svgo.icons.js",
"build:svg": "svgo -f app/Resources/images -o public/assets/images -r --config=./.svgo.js",
"build:icons": "svgo -f app/Resources/icons -o public/assets/icons -r --config=./.svgo.icons.cjs",
"build:svg": "svgo -f app/Resources/images -o public/assets/images -r --config=./.svgo.cjs",
"lint": "eslint --ext js,ts app/Resources",
"lint:fix": "eslint --ext js,ts app/Resources --fix",
"lint:css": "stylelint -f verbose \"app/Resources/**/*.css\"",
@ -46,19 +47,19 @@
"flatpickr": "^4.6.13",
"leaflet": "^1.9.4",
"leaflet.markercluster": "^1.5.3",
"lit": "^3.0.2",
"lit": "^3.1.0",
"marked": "^10.0.0",
"wavesurfer.js": "^7.4.5",
"xml-formatter": "^3.6.0"
},
"devDependencies": {
"@commitlint/cli": "^17.8.1",
"@commitlint/config-conventional": "^17.8.1",
"@commitlint/cli": "^18.4.2",
"@commitlint/config-conventional": "^18.4.2",
"@csstools/css-tokenizer": "^2.2.1",
"@semantic-release/changelog": "^6.0.3",
"@semantic-release/exec": "^6.0.3",
"@semantic-release/git": "^10.0.1",
"@semantic-release/gitlab": "^12.0.6",
"@semantic-release/gitlab": "^12.1.0",
"@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.10",
"@types/leaflet": "^1.9.8",
@ -82,13 +83,13 @@
"postcss-reporter": "^7.0.5",
"prettier": "2.8.8",
"prettier-plugin-organize-imports": "^3.2.4",
"semantic-release": "^22.0.7",
"semantic-release": "^22.0.8",
"stylelint": "^15.11.0",
"stylelint-config-standard": "^34.0.0",
"svgo": "^3.0.3",
"tailwindcss": "^3.3.5",
"typescript": "^5.2.2",
"vite": "^4.5.0",
"vite": "^5.0.0",
"vite-plugin-pwa": "^0.16.7",
"workbox-build": "^7.0.0",
"workbox-core": "^7.0.0",

File diff suppressed because it is too large Load Diff

View File

@ -20,7 +20,7 @@ $userPodcasts = get_podcasts_user_can_interact_with(auth()->user()); ?>
</a>
</div>
<div class="inline-flex items-center h-full ml-auto">
<button type="button" class="relative h-full px-2 focus:ring-accent focus:ring-inset" id="notifications-dropdown" data-dropdown="button" data-dropdown-target="notifications-dropdown-menu" aria-haspopup="true" aria-expanded="false">
<button type="button" class="relative h-full px-2 focus:ring-accent focus:ring-inset" id="notifications-dropdown" data-dropdown="button" data-dropdown-target="notifications-dropdown-menu" aria-haspopup="true" aria-expanded="false" title="<?= lang('Notifications.title') ?>" data-tooltip="bottom">
<?= icon('notification', 'text-2xl opacity-80') ?>
<?php if (($actorIdsWithUnreadNotifications = get_actor_ids_with_unread_notifications(auth()->user())) !== []): ?>
<span class="absolute top-2 right-2 w-2.5 h-2.5 bg-red-500 rounded-full border border-navigation-bg"></span>
@ -68,7 +68,7 @@ if ($userPodcasts !== []) {
];
}
?>
<DropdownMenu id="notifications-dropdown-menu" labelledby="notifications-dropdown" items="<?= esc(json_encode($items)) ?>" placement="bottom"/>
<DropdownMenu id="notifications-dropdown-menu" labelledby="notifications-dropdown" items="<?= esc(json_encode($items)) ?>" placement="bottom-end"/>
<button
type="button"

View File

@ -85,7 +85,7 @@
title="<?= lang('Podcast.form.fediverse_section_title') ?>" >
<div class="flex flex-col">
<Forms.Label for="handle"><?= lang('Podcast.form.handle') ?></Forms.Label>
<Forms.Label for="handle" hint="<?= lang('Podcast.form.handle_hint') ?>"><?= lang('Podcast.form.handle') ?></Forms.Label>
<div class="relative">
<Icon glyph="at" class="absolute inset-0 h-full text-xl opacity-40 left-3" />
<Forms.Input name="handle" value="<?= $podcast->handle ?>" class="w-full pl-8" required="true" readonly="true" />

View File

@ -5,7 +5,7 @@
<?= $this->endSection() ?>
<?= $this->section('pageTitle') ?>
<?= lang('Podcast.all_podcasts') ?>
<?= lang('Podcast.monetization_other') ?>
<?= $this->endSection() ?>
<?= $this->section('content') ?>

View File

@ -1,113 +1,91 @@
<?= $this->extend('_layout') ?>
<?= $this->section('title') ?>
<?= lang('Platforms.title') ?>
<?= lang("Platforms.title.{$platformType}") ?>
<?= $this->endSection() ?>
<?= $this->section('pageTitle') ?>
<?= lang('Platforms.title') ?>
<?= lang("Platforms.title.{$platformType}") ?>
<?= $this->endSection() ?>
<?= $this->section('headerRight') ?>
<Button form="platforms-form" variant="primary" type="submit" class="self-end"><?= lang('Platforms.submit') ?></Button>
<?= $this->endSection() ?>
<?= $this->section('subtitle') ?>
<p class="max-w-xl text-skin-muted">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quod ex corporis sed et tenetur, doloremque nihil autem odio! Similique nemo in est magnam aspernatur temporibus a architecto quod cupiditate vitae!</p>
<?= $this->endSection() ?>
<?= $this->section('content') ?>
<form id="platforms-form" action="<?= route_to('platforms-save', $podcast->id, $platformType) ?>" method="POST" class="flex flex-col max-w-md">
<form id="platforms-form" action="<?= route_to('platforms-save', $podcast->id, $platformType) ?>" method="POST" class="flex flex-col max-w-md gap-y-8">
<?= csrf_field() ?>
<?php foreach ($platforms as $platform): ?>
<div class="relative flex items-start mb-8">
<div class="flex flex-col items-center w-12 mr-4">
<?php if ($platform->submit_url === ''): ?>
<?= icon(
esc($platform->slug),
'text-skin-muted text-4xl',
$platform->type
) ?>
<?php else: ?>
<?= anchor(
$platform->submit_url,
icon(
esc($platform->slug),
'text-skin-muted text-4xl',
$platform->type
),
[
'class' => 'text-skin-muted hover:text-skin-base',
'target' => '_blank',
'rel' => 'noopener noreferrer',
'data-tooltip' => 'bottom',
'title' => lang('Platforms.submit_url', [
'platformName' => $platform->label,
]),
],
) ?>
<?php endif; ?>
<div class="inline-flex mt-1 bg-highlight">
<?= anchor($platform->home_url, icon('external-link', 'mx-auto'), [
'class' => 'flex-1 text-skin-muted hover:text-skin-base',
'target' => '_blank',
'rel' => 'noopener noreferrer',
'data-tooltip' => 'bottom',
'title' => lang('Platforms.home_url', [
'platformName' => $platform->label,
]),
]) ?>
<?= $platform->submit_url ? anchor(
$platform->submit_url,
icon('add', 'mx-auto'),
[
'class' => 'flex-1 text-skin-muted hover:text-skin-base',
'target' => '_blank',
'rel' => 'noopener noreferrer',
'data-tooltip' => 'bottom',
'title' => lang('Platforms.submit_url', [
'platformName' => $platform->label,
]),
]
) : '' ?>
</div>
<div class="relative flex-col items-start p-4 rounded-lg bg-elevated border-3 <?= $platform->link_url ? 'border-accent-base' : 'border-subtle' ?>">
<?= $platform->link_url ? anchor(
route_to(
'podcast-platform-remove',
$podcast->id,
esc($platform->slug),
),
icon('delete-bin', 'mx-auto'),
[
'class' => 'absolute right-0 top-0 -mt-4 -mr-4 p-2 border-red-700 border-2 bg-red-100 rounded-full text-red-700 hover:text-red-900',
'data-tooltip' => 'bottom',
'title' => lang('Platforms.remove', [
'platformName' => $platform->label,
]),
],
)
: '' ?>
<div class="flex items-center gap-x-4">
<?= icon(
esc($platform->slug),
'text-skin-muted text-4xl',
$platform->type
) ?>
<h2 class="text-xl font-semibold"><?= $platform->label ?></h2>
</div>
<div class="flex flex-col flex-1">
<?= $platform->link_url ? anchor(
route_to(
'podcast-platform-remove',
$podcast->id,
esc($platform->slug),
),
icon('delete-bin', 'mx-auto'),
[
'class' => 'absolute right-0 p-1 bg-red-100 rounded-full text-red-700 hover:text-red-900',
'data-tooltip' => 'bottom',
'title' => lang('Platforms.remove', [
'platformName' => $platform->label,
]),
],
)
: '' ?>
<fieldset>
<legend class="mb-2 font-semibold"><?= $platform->label ?></legend>
<Forms.Input
class="w-full mb-1"
id="<?= esc($platform->slug) . '_link_url' ?>"
name="<?= 'platforms[' . esc($platform->slug) . '][url]' ?>"
value="<?= esc($platform->link_url) ?>"
type="url"
placeholder="https://…" />
<Forms.Input
class="w-full mb-1"
id="<?= esc($platform->slug) . '_account_id' ?>"
name="<?= 'platforms[' . esc($platform->slug) . '][account_id]' ?>"
value="<?= esc($platform->account_id) ?>"
placeholder="<?= lang("Platforms.description.{$platform->type}") ?>" />
<Forms.Toggler size="small" class="text-sm" id="<?= esc($platform->slug) . '_visible' ?>" name="<?= 'platforms[' . esc($platform->slug) . '][visible]'?>" value="yes" checked="<?= old(esc($platform->slug) . '_visible', $platform->is_visible ? 'true' : 'false') ?>"><?= lang('Platforms.visible') ?></Forms.Toggler>
<div class="flex flex-col flex-1 mt-4">
<div class="inline-flex ml-12 gap-x-2">
<?= anchor($platform->home_url, icon('external-link', 'mx-auto') . lang('Platforms.website'), [
'class' => 'gap-x-1 flex-shrink-0 inline-flex items-center justify-center font-semibold shadow-xs rounded-full focus:ring-accent px-2 py-1 text-sm border-2 border-accent-base text-accent-base bg-white hover:border-accent-hover hover:text-accent-hover',
'target' => '_blank',
'rel' => 'noopener noreferrer',
'data-tooltip' => 'bottom',
'title' => lang('Platforms.home_url', [
'platformName' => $platform->label,
]),
]) ?>
<?= $platform->submit_url ? anchor(
$platform->submit_url,
icon('add') . lang('Platforms.register'),
[
'class' => 'gap-x-1 flex-shrink-0 inline-flex items-center justify-center font-semibold shadow-xs rounded-full focus:ring-accent px-2 py-1 text-sm border-2 border-accent-base text-accent-base bg-white hover:border-accent-hover hover:text-accent-hover',
'target' => '_blank',
'rel' => 'noopener noreferrer',
'data-tooltip' => 'bottom',
'title' => lang('Platforms.submit_url', [
'platformName' => $platform->label,
]),
]
) : '' ?>
</div>
<fieldset>
<Forms.Field
label="<?= lang('Platforms.your_link') ?>"
class="w-full mt-4"
id="<?= esc($platform->slug) . '_link_url' ?>"
name="<?= 'platforms[' . esc($platform->slug) . '][url]' ?>"
value="<?= esc($platform->link_url) ?>"
type="url"
placeholder="https://…" />
<Forms.Field
label="<?= lang("Platforms.your_id.{$platform->type}") ?>"
class="w-full mt-2"
id="<?= esc($platform->slug) . '_account_id' ?>"
name="<?= 'platforms[' . esc($platform->slug) . '][account_id]' ?>"
value="<?= esc($platform->account_id) ?>"
placeholder="<?= lang("Platforms.description.{$platform->type}") ?>" />
<Forms.Toggler size="small" class="mt-4 text-sm" id="<?= esc($platform->slug) . '_visible' ?>" name="<?= 'platforms[' . esc($platform->slug) . '][visible]'?>" value="yes" checked="<?= old(esc($platform->slug) . '_visible', $platform->is_visible ? 'true' : 'false') ?>"><?= lang('Platforms.visible') ?></Forms.Toggler>
</fieldset>
</div>
</div>

View File

@ -7,14 +7,14 @@ $userPodcasts = get_podcasts_user_can_interact_with(auth()->user()); ?>
<a href="<?= route_to('home') ?>" class="inline-flex items-center h-full px-2 border-r border-navigation focus:ring-inset focus:ring-accent">
<?= svg('castopod-logo-base', 'h-6') ?>
</a>
<a href="<?= route_to('admin') ?>" class="inline-flex items-center h-full px-6 text-sm font-semibold hover:underline focus:ring-inset focus:ring-accent">
<?= lang('Navigation.go_to_admin') ?>
<?= icon('external-link', 'ml-1 opacity-60') ?>
<a href="<?= route_to('admin') ?>" class="inline-flex items-center h-full px-2 text-sm font-semibold sm:px-6 hover:underline focus:ring-inset focus:ring-accent" title="<?= lang('Navigation.go_to_admin') ?>">
<span class="hidden sm:block"><?= lang('Navigation.go_to_admin') ?></span>
<?= icon('external-link', 'sm:ml-1 text-xl sm:text-base sm:opacity-60') ?>
</a>
</div>
<div class="inline-flex items-center h-full">
<button type="button" class="relative h-full px-2 focus:ring-accent focus:ring-inset" id="notifications-dropdown" data-dropdown="button" data-dropdown-target="notifications-dropdown-menu" aria-haspopup="true" aria-expanded="false">
<button type="button" class="relative h-full px-2 focus:ring-accent focus:ring-inset" id="notifications-dropdown" data-dropdown="button" data-dropdown-target="notifications-dropdown-menu" aria-haspopup="true" aria-expanded="false" title="<?= lang('Notifications.title') ?>" data-tooltip="bottom">
<?= icon('notification', 'text-2xl opacity-80') ?>
<?php if (($actorIdsWithUnreadNotifications = get_actor_ids_with_unread_notifications(auth()->user())) !== []): ?>
<span class="absolute top-2 right-2 w-2.5 h-2.5 bg-red-500 rounded-full border border-navigation-bg"></span>
@ -63,7 +63,7 @@ if ($userPodcasts !== []) {
];
}
?>
<DropdownMenu id="notifications-dropdown-menu" labelledby="notifications-dropdown" items="<?= esc(json_encode($items)) ?>" placement="bottom"/>
<DropdownMenu id="notifications-dropdown-menu" labelledby="notifications-dropdown" items="<?= esc(json_encode($items)) ?>" placement="bottom-end"/>
<button
type="button"

View File

@ -44,7 +44,9 @@
<div class="absolute bottom-0 left-0 w-full h-full backdrop-gradient-accent bg-blend-darken"></div>
<div class="z-10 flex flex-col items-center justify-center w-full h-full gap-2 py-12 backdrop-blur-xl ">
<img src="<?= $podcast->cover->thumbnail_url ?>" alt="<?= esc($podcast->title) ?>" class="rounded-full shadow-2xl h-28 ring-2 ring-background-elevated aspect-square" loading="lazy" />
<h1 class="flex flex-col items-center mt-2 text-2xl font-bold leading-none line-clamp-2 md:leading-none font-display"><?= esc($podcast->title) ?><span class="ml-1 font-sans text-base font-normal">@<?= esc($podcast->handle) ?></span></h1>
<a href="<?= $podcast->link ?>">
<h1 class="flex flex-col items-center mt-2 text-2xl font-bold leading-none line-clamp-2 md:leading-none font-display"><?= esc($podcast->title) ?><span class="ml-1 font-sans text-base font-normal">@<?= esc($podcast->handle) ?></span></h1>
</a>
<div class="z-10 flex flex-wrap items-center justify-center gap-2 p-2 mt-6 shadow-xl rounded-conditional-full bg-accent-base shadow-accent/20">
<?php if (in_array(true, array_column($podcast->fundingPlatforms, 'is_visible'), true)): ?>
<button class="inline-flex items-center px-4 text-xs font-semibold leading-8 tracking-wider text-red-600 uppercase bg-white rounded-full shadow hover:text-red-500 focus:ring-accent" data-toggle="funding-links" data-toggle-class="hidden"><Icon glyph="heart" class="mr-2 text-sm"></Icon><?= lang('Podcast.sponsor') ?></button>
@ -66,8 +68,14 @@
</div>
</header>
<main class="grid w-full max-w-2xl gap-4 px-4 py-6 mx-auto sm:grid-cols-2">
<a
class="inline-flex items-center justify-center flex-shrink-0 px-3 py-2 text-sm font-semibold leading-5 bg-white border-2 rounded-full shadow-xs gap-x-2 focus:ring-accent border-accent-base text-accent-base hover:border-accent-hover hover:text-accent-hover"
href="<?= $podcast->link ?>"
target="_blank"
rel="noopener noreferrer"><?= icon('castopod', 'text-xl mr-auto', 'podcasting') ?><span class="mr-auto -ml-8"><?= lang('Podcast.castopod_website') ?></span>
</a>
<?php foreach ($podcast->podcastingPlatforms as $podcastingPlatform): ?>
<?php if ($podcastingPlatform->is_visible): ?>
<?php if ($podcastingPlatform->is_visible && $podcastingPlatform->slug !== 'castopod'): ?>
<a
class="inline-flex items-center justify-center flex-shrink-0 px-3 py-2 text-sm font-semibold leading-5 bg-white border-2 rounded-full shadow-xs gap-x-2 focus:ring-accent border-accent-base text-accent-base hover:border-accent-hover hover:text-accent-hover"
href="<?= $podcastingPlatform->link_url ?>"