From 06e6fb0e84d58c336d87aff9572b37a20fdd5c83 Mon Sep 17 00:00:00 2001 From: Benjamin Nussbaum Date: Fri, 6 Feb 2026 23:24:07 +0100 Subject: [PATCH] feat: add support for trmnl-liquid renderer in recipe settings --- .../plugins/recipes/settings.blade.php | 15 +++++++ .../Livewire/Plugins/RecipeSettingsTest.php | 40 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/resources/views/livewire/plugins/recipes/settings.blade.php b/resources/views/livewire/plugins/recipes/settings.blade.php index c83f52c..540af89 100644 --- a/resources/views/livewire/plugins/recipes/settings.blade.php +++ b/resources/views/livewire/plugins/recipes/settings.blade.php @@ -17,6 +17,8 @@ new class extends Component public bool $alias = false; + public bool $use_trmnl_liquid_renderer = false; + public int $resetIndex = 0; public function mount(): void @@ -27,6 +29,7 @@ new class extends Component $this->trmnlp_id = $this->plugin->trmnlp_id; $this->uuid = $this->plugin->uuid; $this->alias = $this->plugin->alias ?? false; + $this->use_trmnl_liquid_renderer = $this->plugin->preferred_renderer === 'trmnl-liquid'; } public function saveTrmnlpId(): void @@ -43,11 +46,13 @@ new class extends Component ->ignore($this->plugin->id), ], 'alias' => 'boolean', + 'use_trmnl_liquid_renderer' => 'boolean', ]); $this->plugin->update([ 'trmnlp_id' => empty($this->trmnlp_id) ? null : $this->trmnlp_id, 'alias' => $this->alias, + 'preferred_renderer' => $this->use_trmnl_liquid_renderer ? 'trmnl-liquid' : null, ]); Flux::modal('trmnlp-settings')->close(); @@ -83,6 +88,16 @@ new class extends Component Enable an Alias URL for this recipe. Your server does not need to be exposed to the internet, but your device must be able to reach the URL. Docs + @if(config('services.trmnl.liquid_enabled') && $plugin->markup_language === 'liquid') + + + trmnl-liquid is a Ruby-based renderer that matches the Core service’s Liquid behavior for better compatibility. + + @endif + @if($alias) Alias URL diff --git a/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php b/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php index c625262..e15ee8b 100644 --- a/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php +++ b/tests/Feature/Livewire/Plugins/RecipeSettingsTest.php @@ -109,3 +109,43 @@ test('recipe settings can clear trmnlp_id', function (): void { expect($plugin->fresh()->trmnlp_id)->toBeNull(); }); + +test('recipe settings saves preferred_renderer when liquid enabled and recipe is liquid', function (): void { + config(['services.trmnl.liquid_enabled' => true]); + + $user = User::factory()->create(); + $this->actingAs($user); + + $plugin = Plugin::factory()->create([ + 'user_id' => $user->id, + 'markup_language' => 'liquid', + 'preferred_renderer' => null, + ]); + + Livewire::test('plugins.recipes.settings', ['plugin' => $plugin]) + ->set('use_trmnl_liquid_renderer', true) + ->call('saveTrmnlpId') + ->assertHasNoErrors(); + + expect($plugin->fresh()->preferred_renderer)->toBe('trmnl-liquid'); +}); + +test('recipe settings clears preferred_renderer when checkbox unchecked', function (): void { + config(['services.trmnl.liquid_enabled' => true]); + + $user = User::factory()->create(); + $this->actingAs($user); + + $plugin = Plugin::factory()->create([ + 'user_id' => $user->id, + 'markup_language' => 'liquid', + 'preferred_renderer' => 'trmnl-liquid', + ]); + + Livewire::test('plugins.recipes.settings', ['plugin' => $plugin]) + ->set('use_trmnl_liquid_renderer', false) + ->call('saveTrmnlpId') + ->assertHasNoErrors(); + + expect($plugin->fresh()->preferred_renderer)->toBeNull(); +});