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

View File

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

View File

@ -14,7 +14,7 @@ class Vite extends BaseConfig
public string $assetsRoot = 'assets'; public string $assetsRoot = 'assets';
public string $manifestFile = 'manifest.json'; public string $manifestFile = '.vite/manifest.json';
public string $manifestCSSFile = 'manifest-css.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"> <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>
<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>

Before

Width:  |  Height:  |  Size: 282 B

After

Width:  |  Height:  |  Size: 301 B

View File

@ -9,7 +9,7 @@
"php": "^8.1", "php": "^8.1",
"adaures/ipcat-php": "^v1.0.0", "adaures/ipcat-php": "^v1.0.0",
"adaures/podcast-persons-taxonomy": "^v1.0.1", "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", "chrisjean/php-ico": "^1.0.4",
"cocur/slugify": "^v4.5.1", "cocur/slugify": "^v4.5.1",
"codeigniter4/framework": "v4.4.3", "codeigniter4/framework": "v4.4.3",
@ -25,7 +25,7 @@
"mpratt/embera": "^2.0.35", "mpratt/embera": "^2.0.35",
"opawg/user-agents-php": "^v1.0", "opawg/user-agents-php": "^v1.0",
"phpseclib/phpseclib": "~2.0.45", "phpseclib/phpseclib": "~2.0.45",
"vlucas/phpdotenv": "v5.5.0", "vlucas/phpdotenv": "v5.6.0",
"whichbrowser/parser": "^v2.1.7", "whichbrowser/parser": "^v2.1.7",
"yassinedoghri/podcast-feed": "dev-main" "yassinedoghri/podcast-feed": "dev-main"
}, },
@ -36,7 +36,7 @@
"phpstan/extension-installer": "^1.3.1", "phpstan/extension-installer": "^1.3.1",
"phpstan/phpstan": "^1.10.41", "phpstan/phpstan": "^1.10.41",
"phpunit/phpunit": "^10.4.2", "phpunit/phpunit": "^10.4.2",
"rector/rector": "^0.18.8", "rector/rector": "^0.18.10",
"symplify/coding-standard": "^12.0.3", "symplify/coding-standard": "^12.0.3",
"symplify/easy-coding-standard": "^12.0.8" "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", "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
"This file is @generated automatically" "This file is @generated automatically"
], ],
"content-hash": "b662d02c852a6a8deffc302daf7c9c75", "content-hash": "00ed57ba2f95cbc550bd85d115e316f3",
"packages": [ "packages": [
{ {
"name": "adaures/ipcat-php", "name": "adaures/ipcat-php",
@ -120,16 +120,16 @@
}, },
{ {
"name": "aws/aws-sdk-php", "name": "aws/aws-sdk-php",
"version": "3.286.1", "version": "3.286.3",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/aws/aws-sdk-php.git", "url": "https://github.com/aws/aws-sdk-php.git",
"reference": "f3276ecb6e5202452d4b64237e6dc1bc9d350ae6" "reference": "29079a62c6a30ac594b50285494b4dec279b4648"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/f3276ecb6e5202452d4b64237e6dc1bc9d350ae6", "url": "https://api.github.com/repos/aws/aws-sdk-php/zipball/29079a62c6a30ac594b50285494b4dec279b4648",
"reference": "f3276ecb6e5202452d4b64237e6dc1bc9d350ae6", "reference": "29079a62c6a30ac594b50285494b4dec279b4648",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -205,9 +205,9 @@
"support": { "support": {
"forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80", "forum": "https://forums.aws.amazon.com/forum.jspa?forumID=80",
"issues": "https://github.com/aws/aws-sdk-php/issues", "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", "name": "brick/math",
@ -564,12 +564,12 @@
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/codeigniter4/tasks.git", "url": "https://github.com/codeigniter4/tasks.git",
"reference": "eef3ec66b9dfa2e9124aad26c1cb1eb761982f9f" "reference": "79444480fe1f7497fc65c5529e21bc4c689aa25a"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/codeigniter4/tasks/zipball/eef3ec66b9dfa2e9124aad26c1cb1eb761982f9f", "url": "https://api.github.com/repos/codeigniter4/tasks/zipball/79444480fe1f7497fc65c5529e21bc4c689aa25a",
"reference": "eef3ec66b9dfa2e9124aad26c1cb1eb761982f9f", "reference": "79444480fe1f7497fc65c5529e21bc4c689aa25a",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -638,7 +638,7 @@
"source": "https://github.com/codeigniter4/tasks/tree/develop", "source": "https://github.com/codeigniter4/tasks/tree/develop",
"issues": "https://github.com/codeigniter4/tasks/issues" "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", "name": "composer/ca-bundle",
@ -2758,7 +2758,7 @@
}, },
{ {
"name": "symfony/deprecation-contracts", "name": "symfony/deprecation-contracts",
"version": "v3.3.0", "version": "v3.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/deprecation-contracts.git", "url": "https://github.com/symfony/deprecation-contracts.git",
@ -2801,7 +2801,7 @@
"description": "A generic function and convention to trigger deprecation notices", "description": "A generic function and convention to trigger deprecation notices",
"homepage": "https://symfony.com", "homepage": "https://symfony.com",
"support": { "support": {
"source": "https://github.com/symfony/deprecation-contracts/tree/v3.3.0" "source": "https://github.com/symfony/deprecation-contracts/tree/v3.4.0"
}, },
"funding": [ "funding": [
{ {
@ -3039,31 +3039,31 @@
}, },
{ {
"name": "vlucas/phpdotenv", "name": "vlucas/phpdotenv",
"version": "v5.5.0", "version": "v5.6.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/vlucas/phpdotenv.git", "url": "https://github.com/vlucas/phpdotenv.git",
"reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7" "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", "url": "https://api.github.com/repos/vlucas/phpdotenv/zipball/2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"reference": "1a7ea2afc49c3ee6d87061f5a233e3a035d0eae7", "reference": "2cf9fb6054c2bb1d59d1f3817706ecdb9d2934c4",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
"ext-pcre": "*", "ext-pcre": "*",
"graham-campbell/result-type": "^1.0.2", "graham-campbell/result-type": "^1.1.2",
"php": "^7.1.3 || ^8.0", "php": "^7.2.5 || ^8.0",
"phpoption/phpoption": "^1.8", "phpoption/phpoption": "^1.9.2",
"symfony/polyfill-ctype": "^1.23", "symfony/polyfill-ctype": "^1.24",
"symfony/polyfill-mbstring": "^1.23.1", "symfony/polyfill-mbstring": "^1.24",
"symfony/polyfill-php80": "^1.23.1" "symfony/polyfill-php80": "^1.24"
}, },
"require-dev": { "require-dev": {
"bamarni/composer-bin-plugin": "^1.4.1", "bamarni/composer-bin-plugin": "^1.8.2",
"ext-filter": "*", "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": { "suggest": {
"ext-filter": "Required to use the boolean validator." "ext-filter": "Required to use the boolean validator."
@ -3075,7 +3075,7 @@
"forward-command": true "forward-command": true
}, },
"branch-alias": { "branch-alias": {
"dev-master": "5.5-dev" "dev-master": "5.6-dev"
} }
}, },
"autoload": { "autoload": {
@ -3101,7 +3101,7 @@
"keywords": ["dotenv", "env", "environment"], "keywords": ["dotenv", "env", "environment"],
"support": { "support": {
"issues": "https://github.com/vlucas/phpdotenv/issues", "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": [ "funding": [
{ {
@ -3113,7 +3113,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2022-10-16T01:01:54+00:00" "time": "2023-11-12T22:43:29+00:00"
}, },
{ {
"name": "whichbrowser/parser", "name": "whichbrowser/parser",
@ -4430,16 +4430,16 @@
}, },
{ {
"name": "rector/rector", "name": "rector/rector",
"version": "0.18.8", "version": "0.18.10",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/rectorphp/rector.git", "url": "https://github.com/rectorphp/rector.git",
"reference": "374bab157a41f6849556edc53125f856eb6c1c8c" "reference": "f36bc0a707fd8af301df5108740ce41f9db8eded"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/rectorphp/rector/zipball/374bab157a41f6849556edc53125f856eb6c1c8c", "url": "https://api.github.com/repos/rectorphp/rector/zipball/f36bc0a707fd8af301df5108740ce41f9db8eded",
"reference": "374bab157a41f6849556edc53125f856eb6c1c8c", "reference": "f36bc0a707fd8af301df5108740ce41f9db8eded",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -4463,7 +4463,7 @@
"keywords": ["automation", "dev", "migration", "refactoring"], "keywords": ["automation", "dev", "migration", "refactoring"],
"support": { "support": {
"issues": "https://github.com/rectorphp/rector/issues", "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": [ "funding": [
{ {
@ -4471,7 +4471,7 @@
"type": "github" "type": "github"
} }
], ],
"time": "2023-11-14T15:30:19+00:00" "time": "2023-11-16T19:42:21+00:00"
}, },
{ {
"name": "sebastian/cli-parser", "name": "sebastian/cli-parser",
@ -5631,7 +5631,7 @@
}, },
{ {
"name": "symfony/event-dispatcher-contracts", "name": "symfony/event-dispatcher-contracts",
"version": "v3.3.0", "version": "v3.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/event-dispatcher-contracts.git", "url": "https://github.com/symfony/event-dispatcher-contracts.git",
@ -5685,7 +5685,7 @@
"standards" "standards"
], ],
"support": { "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": [ "funding": [
{ {
@ -6163,16 +6163,16 @@
}, },
{ {
"name": "symfony/service-contracts", "name": "symfony/service-contracts",
"version": "v3.3.0", "version": "v3.4.0",
"source": { "source": {
"type": "git", "type": "git",
"url": "https://github.com/symfony/service-contracts.git", "url": "https://github.com/symfony/service-contracts.git",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4" "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838"
}, },
"dist": { "dist": {
"type": "zip", "type": "zip",
"url": "https://api.github.com/repos/symfony/service-contracts/zipball/40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "url": "https://api.github.com/repos/symfony/service-contracts/zipball/b3313c2dbffaf71c8de2934e2ea56ed2291a3838",
"reference": "40da9cc13ec349d9e4966ce18b5fbcd724ab10a4", "reference": "b3313c2dbffaf71c8de2934e2ea56ed2291a3838",
"shasum": "" "shasum": ""
}, },
"require": { "require": {
@ -6221,7 +6221,7 @@
"standards" "standards"
], ],
"support": { "support": {
"source": "https://github.com/symfony/service-contracts/tree/v3.3.0" "source": "https://github.com/symfony/service-contracts/tree/v3.4.0"
}, },
"funding": [ "funding": [
{ {
@ -6237,7 +6237,7 @@
"type": "tidelift" "type": "tidelift"
} }
], ],
"time": "2023-05-23T14:45:45+00:00" "time": "2023-07-30T20:28:31+00:00"
}, },
{ {
"name": "symfony/stopwatch", "name": "symfony/stopwatch",

View File

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

View File

@ -9,9 +9,22 @@ declare(strict_types=1);
*/ */
return [ return [
'title' => 'Platforms', 'title' => [
'podcasting' => 'Podcasting platforms',
'social' => 'Social networks',
'funding' => 'Funding links',
],
'website' => 'Website',
'home_url' => 'Go to {platformName} website', 'home_url' => 'Go to {platformName} website',
'register' => 'Register',
'submit_url' => 'Submit your podcast on {platformName}', '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?', 'visible' => 'Display in podcast homepage?',
'on_embed' => 'Display on embeddable player?', 'on_embed' => 'Display on embeddable player?',
'remove' => 'Remove {platformName}', 'remove' => 'Remove {platformName}',

View File

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

View File

@ -86,7 +86,7 @@ class UserController extends BaseController
*/ */
public function attemptCreate(): RedirectResponse public function attemptCreate(): RedirectResponse
{ {
helper('text'); helper(['text', 'email']);
$db = db_connect(); $db = db_connect();
$db->transStart(); $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.", "description": "Castopod Host is an open-source hosting platform made for podcasters who want engage and interact with their audience.",
"private": true, "private": true,
"license": "AGPL-3.0-or-later", "license": "AGPL-3.0-or-later",
"type": "module",
"repository": { "repository": {
"type": "git", "type": "git",
"url": "https://code.castopod.org/adaures/castopod.git" "url": "https://code.castopod.org/adaures/castopod.git"
@ -13,8 +14,8 @@
"build": "tsc && vite build", "build": "tsc && vite build",
"serve": "vite preview", "serve": "vite preview",
"build:static": "pnpm run build:icons && pnpm run build:svg", "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: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.js", "build:svg": "svgo -f app/Resources/images -o public/assets/images -r --config=./.svgo.cjs",
"lint": "eslint --ext js,ts app/Resources", "lint": "eslint --ext js,ts app/Resources",
"lint:fix": "eslint --ext js,ts app/Resources --fix", "lint:fix": "eslint --ext js,ts app/Resources --fix",
"lint:css": "stylelint -f verbose \"app/Resources/**/*.css\"", "lint:css": "stylelint -f verbose \"app/Resources/**/*.css\"",
@ -46,19 +47,19 @@
"flatpickr": "^4.6.13", "flatpickr": "^4.6.13",
"leaflet": "^1.9.4", "leaflet": "^1.9.4",
"leaflet.markercluster": "^1.5.3", "leaflet.markercluster": "^1.5.3",
"lit": "^3.0.2", "lit": "^3.1.0",
"marked": "^10.0.0", "marked": "^10.0.0",
"wavesurfer.js": "^7.4.5", "wavesurfer.js": "^7.4.5",
"xml-formatter": "^3.6.0" "xml-formatter": "^3.6.0"
}, },
"devDependencies": { "devDependencies": {
"@commitlint/cli": "^17.8.1", "@commitlint/cli": "^18.4.2",
"@commitlint/config-conventional": "^17.8.1", "@commitlint/config-conventional": "^18.4.2",
"@csstools/css-tokenizer": "^2.2.1", "@csstools/css-tokenizer": "^2.2.1",
"@semantic-release/changelog": "^6.0.3", "@semantic-release/changelog": "^6.0.3",
"@semantic-release/exec": "^6.0.3", "@semantic-release/exec": "^6.0.3",
"@semantic-release/git": "^10.0.1", "@semantic-release/git": "^10.0.1",
"@semantic-release/gitlab": "^12.0.6", "@semantic-release/gitlab": "^12.1.0",
"@tailwindcss/forms": "^0.5.7", "@tailwindcss/forms": "^0.5.7",
"@tailwindcss/typography": "^0.5.10", "@tailwindcss/typography": "^0.5.10",
"@types/leaflet": "^1.9.8", "@types/leaflet": "^1.9.8",
@ -82,13 +83,13 @@
"postcss-reporter": "^7.0.5", "postcss-reporter": "^7.0.5",
"prettier": "2.8.8", "prettier": "2.8.8",
"prettier-plugin-organize-imports": "^3.2.4", "prettier-plugin-organize-imports": "^3.2.4",
"semantic-release": "^22.0.7", "semantic-release": "^22.0.8",
"stylelint": "^15.11.0", "stylelint": "^15.11.0",
"stylelint-config-standard": "^34.0.0", "stylelint-config-standard": "^34.0.0",
"svgo": "^3.0.3", "svgo": "^3.0.3",
"tailwindcss": "^3.3.5", "tailwindcss": "^3.3.5",
"typescript": "^5.2.2", "typescript": "^5.2.2",
"vite": "^4.5.0", "vite": "^5.0.0",
"vite-plugin-pwa": "^0.16.7", "vite-plugin-pwa": "^0.16.7",
"workbox-build": "^7.0.0", "workbox-build": "^7.0.0",
"workbox-core": "^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> </a>
</div> </div>
<div class="inline-flex items-center h-full ml-auto"> <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') ?> <?= icon('notification', 'text-2xl opacity-80') ?>
<?php if (($actorIdsWithUnreadNotifications = get_actor_ids_with_unread_notifications(auth()->user())) !== []): ?> <?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> <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 <button
type="button" type="button"

View File

@ -85,7 +85,7 @@
title="<?= lang('Podcast.form.fediverse_section_title') ?>" > title="<?= lang('Podcast.form.fediverse_section_title') ?>" >
<div class="flex flex-col"> <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"> <div class="relative">
<Icon glyph="at" class="absolute inset-0 h-full text-xl opacity-40 left-3" /> <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" /> <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->endSection() ?>
<?= $this->section('pageTitle') ?> <?= $this->section('pageTitle') ?>
<?= lang('Podcast.all_podcasts') ?> <?= lang('Podcast.monetization_other') ?>
<?= $this->endSection() ?> <?= $this->endSection() ?>
<?= $this->section('content') ?> <?= $this->section('content') ?>

View File

@ -1,113 +1,91 @@
<?= $this->extend('_layout') ?> <?= $this->extend('_layout') ?>
<?= $this->section('title') ?> <?= $this->section('title') ?>
<?= lang('Platforms.title') ?> <?= lang("Platforms.title.{$platformType}") ?>
<?= $this->endSection() ?> <?= $this->endSection() ?>
<?= $this->section('pageTitle') ?> <?= $this->section('pageTitle') ?>
<?= lang('Platforms.title') ?> <?= lang("Platforms.title.{$platformType}") ?>
<?= $this->endSection() ?> <?= $this->endSection() ?>
<?= $this->section('headerRight') ?> <?= $this->section('headerRight') ?>
<Button form="platforms-form" variant="primary" type="submit" class="self-end"><?= lang('Platforms.submit') ?></Button> <Button form="platforms-form" variant="primary" type="submit" class="self-end"><?= lang('Platforms.submit') ?></Button>
<?= $this->endSection() ?> <?= $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') ?> <?= $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() ?> <?= csrf_field() ?>
<?php foreach ($platforms as $platform): ?> <?php foreach ($platforms as $platform): ?>
<div class="relative flex items-start mb-8"> <div class="relative flex-col items-start p-4 rounded-lg bg-elevated border-3 <?= $platform->link_url ? 'border-accent-base' : 'border-subtle' ?>">
<div class="flex flex-col items-center w-12 mr-4"> <?= $platform->link_url ? anchor(
<?php if ($platform->submit_url === ''): ?> route_to(
<?= icon( 'podcast-platform-remove',
esc($platform->slug), $podcast->id,
'text-skin-muted text-4xl', esc($platform->slug),
$platform->type ),
) ?> icon('delete-bin', 'mx-auto'),
<?php else: ?> [
<?= anchor( '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',
$platform->submit_url, 'data-tooltip' => 'bottom',
icon( 'title' => lang('Platforms.remove', [
esc($platform->slug), 'platformName' => $platform->label,
'text-skin-muted text-4xl', ]),
$platform->type ],
), )
[ : '' ?>
'class' => 'text-skin-muted hover:text-skin-base', <div class="flex items-center gap-x-4">
'target' => '_blank', <?= icon(
'rel' => 'noopener noreferrer', esc($platform->slug),
'data-tooltip' => 'bottom', 'text-skin-muted text-4xl',
'title' => lang('Platforms.submit_url', [ $platform->type
'platformName' => $platform->label, ) ?>
]), <h2 class="text-xl font-semibold"><?= $platform->label ?></h2>
],
) ?>
<?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> </div>
<div class="flex flex-col flex-1"> <div class="flex flex-col flex-1 mt-4">
<?= $platform->link_url ? anchor( <div class="inline-flex ml-12 gap-x-2">
route_to( <?= anchor($platform->home_url, icon('external-link', 'mx-auto') . lang('Platforms.website'), [
'podcast-platform-remove', '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',
$podcast->id, 'target' => '_blank',
esc($platform->slug), 'rel' => 'noopener noreferrer',
), 'data-tooltip' => 'bottom',
icon('delete-bin', 'mx-auto'), 'title' => lang('Platforms.home_url', [
[ 'platformName' => $platform->label,
'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', [ <?= $platform->submit_url ? anchor(
'platformName' => $platform->label, $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',
<fieldset> 'rel' => 'noopener noreferrer',
<legend class="mb-2 font-semibold"><?= $platform->label ?></legend> 'data-tooltip' => 'bottom',
<Forms.Input 'title' => lang('Platforms.submit_url', [
class="w-full mb-1" 'platformName' => $platform->label,
id="<?= esc($platform->slug) . '_link_url' ?>" ]),
name="<?= 'platforms[' . esc($platform->slug) . '][url]' ?>" ]
value="<?= esc($platform->link_url) ?>" ) : '' ?>
type="url" </div>
placeholder="https://…" /> <fieldset>
<Forms.Input <Forms.Field
class="w-full mb-1" label="<?= lang('Platforms.your_link') ?>"
id="<?= esc($platform->slug) . '_account_id' ?>" class="w-full mt-4"
name="<?= 'platforms[' . esc($platform->slug) . '][account_id]' ?>" id="<?= esc($platform->slug) . '_link_url' ?>"
value="<?= esc($platform->account_id) ?>" name="<?= 'platforms[' . esc($platform->slug) . '][url]' ?>"
placeholder="<?= lang("Platforms.description.{$platform->type}") ?>" /> value="<?= esc($platform->link_url) ?>"
<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> 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> </fieldset>
</div> </div>
</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"> <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') ?> <?= svg('castopod-logo-base', 'h-6') ?>
</a> </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"> <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') ?>">
<?= lang('Navigation.go_to_admin') ?> <span class="hidden sm:block"><?= lang('Navigation.go_to_admin') ?></span>
<?= icon('external-link', 'ml-1 opacity-60') ?> <?= icon('external-link', 'sm:ml-1 text-xl sm:text-base sm:opacity-60') ?>
</a> </a>
</div> </div>
<div class="inline-flex items-center h-full"> <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') ?> <?= icon('notification', 'text-2xl opacity-80') ?>
<?php if (($actorIdsWithUnreadNotifications = get_actor_ids_with_unread_notifications(auth()->user())) !== []): ?> <?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> <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 <button
type="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="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 "> <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" /> <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"> <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)): ?> <?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> <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> </div>
</header> </header>
<main class="grid w-full max-w-2xl gap-4 px-4 py-6 mx-auto sm:grid-cols-2"> <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 foreach ($podcast->podcastingPlatforms as $podcastingPlatform): ?>
<?php if ($podcastingPlatform->is_visible): ?> <?php if ($podcastingPlatform->is_visible && $podcastingPlatform->slug !== 'castopod'): ?>
<a <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" 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 ?>" href="<?= $podcastingPlatform->link_url ?>"