From 891ce819021d65100ada33fde83a3808f27c8866 Mon Sep 17 00:00:00 2001 From: Brock H Caldwell Date: Fri, 11 Jul 2025 23:14:36 -0500 Subject: [PATCH] feat: basic pwa --- assets/controllers.json | 18 ++++++ composer.json | 1 + composer.lock | 123 ++++++++++++++++++++++++++++++++++++++- config/bundles.php | 1 + config/packages/pwa.yaml | 21 +++++++ public/icon.png | Bin 0 -> 3065 bytes symfony.lock | 3 + templates/bare.html.twig | 1 + templates/base.html.twig | 1 + 9 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 config/packages/pwa.yaml create mode 100644 public/icon.png diff --git a/assets/controllers.json b/assets/controllers.json index 48203c9..293857f 100644 --- a/assets/controllers.json +++ b/assets/controllers.json @@ -1,5 +1,23 @@ { "controllers": { + "@spomky-labs/pwa-bundle": { + "connection-status": { + "enabled": true, + "fetch": "eager" + }, + "backgroundsync-form": { + "enabled": true, + "fetch": "eager" + }, + "sync-broadcast": { + "enabled": true, + "fetch": "eager" + }, + "prefetch-on-demand": { + "enabled": true, + "fetch": "eager" + } + }, "@symfony/ux-autocomplete": { "autocomplete": { "enabled": true, diff --git a/composer.json b/composer.json index 65056bb..17d2d7f 100644 --- a/composer.json +++ b/composer.json @@ -27,6 +27,7 @@ "php-tmdb/api": "^4.1", "predis/predis": "^2.4", "runtime/frankenphp-symfony": "^0.2.0", + "spomky-labs/pwa-bundle": "^1.2", "stof/doctrine-extensions-bundle": "^1.14", "symfony/asset": "7.3.*", "symfony/console": "7.3.*", diff --git a/composer.lock b/composer.lock index 152f51d..1af60d7 100644 --- a/composer.lock +++ b/composer.lock @@ -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": "bfbdc7ee820da20b824f4b1933fe967b", + "content-hash": "0f98dada0a01d471cebf4eb1b51b9006", "packages": [ { "name": "1tomany/rich-bundle", @@ -4866,6 +4866,127 @@ ], "time": "2025-06-13T08:35:04+00:00" }, + { + "name": "spomky-labs/pwa-bundle", + "version": "1.2.5", + "source": { + "type": "git", + "url": "https://github.com/Spomky-Labs/pwa-bundle.git", + "reference": "c24711ea8428d14a01132d9e42cb17d84218a1ee" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Spomky-Labs/pwa-bundle/zipball/c24711ea8428d14a01132d9e42cb17d84218a1ee", + "reference": "c24711ea8428d14a01132d9e42cb17d84218a1ee", + "shasum": "" + }, + "require": { + "php": ">=8.2", + "phpdocumentor/reflection-docblock": "^5.3", + "psr/log": "^1.0|^2.0|^3.0", + "symfony/asset": "^6.4|^7.0", + "symfony/asset-mapper": "^6.4|^7.0", + "symfony/config": "^6.4|^7.0", + "symfony/dependency-injection": "^6.4|^7.0", + "symfony/deprecation-contracts": "^3.5", + "symfony/http-kernel": "^6.4|^7.0", + "symfony/property-access": "^6.4|^7.0", + "symfony/property-info": "^6.4|^7.0", + "symfony/routing": "^6.4|^7.0", + "symfony/serializer": "^6.4|^7.0", + "twig/twig": "^3.8" + }, + "require-dev": { + "dbrekelmans/bdi": "^1.1", + "ekino/phpstan-banned-code": "^1.0|^2.0|^3.0", + "ergebnis/phpunit-slow-test-detector": "^2.14", + "ext-sockets": "*", + "infection/infection": "^0.28|^0.29", + "matthiasnoback/symfony-config-test": "^5.1", + "php-parallel-lint/php-parallel-lint": "^1.4", + "phpstan/extension-installer": "^1.1", + "phpstan/phpdoc-parser": "^1.28|^2.0", + "phpstan/phpstan": "^1.0|^2.0", + "phpstan/phpstan-beberlei-assert": "^1.0|^2.0", + "phpstan/phpstan-deprecation-rules": "^1.0|^2.0", + "phpstan/phpstan-phpunit": "^1.4|^2.0", + "phpstan/phpstan-strict-rules": "^1.0|^2.0", + "phpstan/phpstan-symfony": "^1.4|^2.0", + "phpunit/phpunit": "^10.1|^11.0", + "rector/rector": "^1.0|^2.0", + "staabm/phpstan-todo-by": "^0.1.27|^0.2", + "struggle-for-php/sfp-phpstan-psr-log": "^0.21.0|^0.22|^0.23", + "symfony/filesystem": "^6.4|^7.0", + "symfony/framework-bundle": "^6.4|^7.0", + "symfony/mime": "^6.4|^7.0", + "symfony/monolog-bundle": "^3.10", + "symfony/panther": "^2.1", + "symfony/phpunit-bridge": "^6.4|^7.0", + "symfony/translation": "^7.0", + "symfony/yaml": "^6.4|^7.0", + "symplify/easy-coding-standard": "^12.0" + }, + "suggest": { + "ext-gd": "Required to generate icons (or Imagick).", + "ext-imagick": "Required to generate icons (or GD).", + "symfony/filesystem": "For generating and manipulating icons or screenshots", + "symfony/mime": "For generating and manipulating icons or screenshots", + "symfony/panther": "For generating screenshots directly from your application" + }, + "type": "symfony-bundle", + "extra": { + "thanks": { + "url": "https://github.com/spomky-labs/pwa-bundle", + "name": "spomky-labs/pwa-bundle" + } + }, + "autoload": { + "psr-4": { + "SpomkyLabs\\PwaBundle\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Florent Morselli", + "homepage": "https://github.com/Spomky" + }, + { + "name": "All contributors", + "homepage": "https://github.com/spomky-labs/pwa-bundle/contributors" + } + ], + "description": "Progressive Web App Manifest Generator Bundle for Symfony.", + "homepage": "https://github.com/spomky-labs", + "keywords": [ + "bundle", + "pwa", + "symfony", + "symfony-ux" + ], + "support": { + "issues": "https://github.com/Spomky-Labs/pwa-bundle/issues", + "source": "https://github.com/Spomky-Labs/pwa-bundle/tree/1.2.5" + }, + "funding": [ + { + "url": "https://www.buymeacoffee.com/FlorentMorselli", + "type": "custom" + }, + { + "url": "https://github.com/Spomky", + "type": "github" + }, + { + "url": "https://www.patreon.com/FlorentMorselli", + "type": "patreon" + } + ], + "time": "2024-12-16T08:02:21+00:00" + }, { "name": "stof/doctrine-extensions-bundle", "version": "v1.14.0", diff --git a/config/bundles.php b/config/bundles.php index b79badb..3b49b60 100644 --- a/config/bundles.php +++ b/config/bundles.php @@ -22,4 +22,5 @@ return [ Symfony\UX\Autocomplete\AutocompleteBundle::class => ['all' => true], SymfonyCasts\Bundle\ResetPassword\SymfonyCastsResetPasswordBundle::class => ['all' => true], Drenso\OidcBundle\DrensoOidcBundle::class => ['all' => true], + SpomkyLabs\PwaBundle\SpomkyLabsPwaBundle::class => ['all' => true], ]; diff --git a/config/packages/pwa.yaml b/config/packages/pwa.yaml new file mode 100644 index 0000000..a355e9e --- /dev/null +++ b/config/packages/pwa.yaml @@ -0,0 +1,21 @@ +pwa: + manifest: + enabled: true + name: "Torsearch" + short_name: "torsearch" + start_url: "/" + display: "standalone" + id: "/" + background_color: "#083344" + theme_color: "#f98e44" + description: Torsearch provides a simple and intuitive way to manage your personal media library. + icons: + - src: "icon.png" + sizes: [ 192 ] + - src: "icon.png" + sizes: [ 192 ] + purpose: maskable + categories: + - entertainment + - multimedia + - utilities \ No newline at end of file diff --git a/public/icon.png b/public/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..038ea7aabebb7e24dce2c607d2c7d69c35959148 GIT binary patch literal 3065 zcmd^B`!^GQAOB3{Qar?yzL72u=Igq0Pe!E&E75mu!^T2mp_I#98q!r#xwTv(xm9Bn zav57xv|O8Pk-0QvX*_&w%XhY(b)NsB^F8PJ;eFok^S+(eIq&!9^L}NVbazqNthE^c zpn`BciUa^+@>3M$Wu8Rh?Kqi{Uc0Ls8l9spY!5JwMtB^2{HsgdJxIz7v5aWb3w zr$W*GLv2_4ReDsn->AfNc5V* zzW-JMJ0_=`$Vt8DMd>m7s$R41t!-`0SnsYd{`$-zZElvCnX_mjjEB>P zB4FY5{$mH(xC-%Uf9l-@IYnNQ{T808^r2eM1enBE;|0glhD(W@Cy1unLq1^zPZo*e7nJZ&N(Eq zR}BoDh3cC}FzVo46|OUqdi-*pVxfl z>g_DLRm0MVy$)~-#*sov6q8%3yLg5CXAQFTI4|KNFHEMNPyn7E+d>)dNXIX`NDpw! zacvf#UQ8FdK}TQdW5I`_UPmJa&3fWfQ{7m|Q-y__btc9$7dp%_C+i@PDN9O-Zh5(m z-RkPgSb{IH%(!$A?pgyZ^LXhO9Yk0GwK|(Wk0#{{S#kTo<40a*O<97a1N#!ijV>rZ zcAd8QHsGfFtgn$iUv%M$clZLj?v~Ip)CfGTs!-7tQdABTGv7~wlbnux8+UnfC7&Dx#T2}A1^ZMi#KDvh z$*e}RhkUPjiql9KBcg)JEc%~fz^(AV7;pb-<0E!+e4X~zU~Zq-av>ua~lK3Wfs z4i(<;JOUss0TG{z)#VgB12hxl4A-{V*}?gH0oKg6>(@Lt=g-XOF(>dc60PN~ zxBFPK8o2*JRe#R89$3O-v_C6uIi%*0*CP8XEa9YU>Nf655KBiJ?PKaN4HIwzw!Cuk z^UoYGJCjv0&p1pFHHJab&Wu~xtxPKrGyWpbqi}=Oa5d0}z4H%8f_-+y^VRUNVQ|Ph zFvY9d;kd24tg${p6m0&&Q=?Oh&rckkt*e0l2HbGCK{8?Kp-~+RTdXM;ek32}_dwZ) zk%fhXAE^#}{`_XGPx#V$v)l3E9h-ssmlfZe9UPL!IHf(Ul)A3KyR``nM@uSJs!q`8 zLldLA!*MD)n*lTiZpCCb(Jl<<9oM^4lrk|?2C!P(*%eG~^9dE7b8H7vymh1zxc|EH z0asjlF@8mer(fx+q+*P$Le0VBDI}w(yBa=RWQ{8Cz`zREJ>p80WnF)~n(r)e8s>Nl zB52Ot=8pNXjg-rfmpu8K4oQTjgXC1$bSIteiClw{q`q|wfK8X(wycQEzeKyp!uvbu zu5mRYh65=DMdE>n>D05@2Zu%+heOO8Op#g_C2zhl^GokWa?;%ufWaE^4Q){Ym;52m z=C)7v%t5=|7QCV+Re4a|BG!eUO3Lqi=s+ZWO zLne!h&?w*5*e`FTC528_rw(7X+WV7BMCPn@xJCRVYS6i)vKb-wnUn)FS!Kp4v0jh0 z3J0QaZS0EtxN+4q=oE7+OpGa)a6WmAqZ0(mtezLApX)3U4Y@SGs(vW7Mk?Moq-d7v zefCcN%$+O|QRs(v!NAr>)36WBCTS`8$t(QVkqy19!v3XxGGKC%477OsBB{Nx;Uhby zC0l$hq29eADb6gYCA!rQ=l3MC*UkUzT(6#KF1|HXX6Jpq_42^$N^Xwo+c+;~8dXIv sL)F#pYoONex7%a9U>%l)tcyPsz7-HJWzEYe$+$c~{M-E~ + {{ pwa() }} {% block title %}Welcome!{% endblock %} {% block stylesheets %} diff --git a/templates/base.html.twig b/templates/base.html.twig index c16b137..d19b91c 100644 --- a/templates/base.html.twig +++ b/templates/base.html.twig @@ -3,6 +3,7 @@ + {{ pwa() }} {% block title %}Welcome!{% endblock %} {% block stylesheets %}