diff --git a/src/flextype/core/Entries/Directives/TextileDirective.php b/src/flextype/core/Entries/Directives/TextileDirective.php new file mode 100644 index 00000000..09a41c5b --- /dev/null +++ b/src/flextype/core/Entries/Directives/TextileDirective.php @@ -0,0 +1,35 @@ +addListener('onEntriesFetchSingleField', static function (): void { + + if (! registry()->get('flextype.settings.entries.directives.textile.enabled')) { + return; + } + + $field = entries()->registry()->get('methods.fetch.field'); + + if (is_string($field['value'])) { + if (strings($field['value'])->contains('@textile')) { + $field['value'] = strings(parsers()->textile()->parse($field['value']))->replace('@textile', '')->trim()->toString(); + } + } + + entries()->registry()->set('methods.fetch.field.key', $field['key']); + entries()->registry()->set('methods.fetch.field.value', $field['value']); +}); \ No newline at end of file diff --git a/src/flextype/settings.yaml b/src/flextype/settings.yaml index 65b89f0f..03c7988e 100644 --- a/src/flextype/settings.yaml +++ b/src/flextype/settings.yaml @@ -83,6 +83,9 @@ entries: markdown: enabled: true path: "/src/flextype/core/Entries/Directives/MarkdownDirective.php" + textile: + enabled: true + path: "/src/flextype/core/Entries/Directives/TextileDirective.php" shortcodes: enabled: true path: "/src/flextype/core/Entries/Directives/ShortcodesDirective.php" diff --git a/tests/fixtures/settings/settings.yaml b/tests/fixtures/settings/settings.yaml index e8a3dac4..a01142af 100644 --- a/tests/fixtures/settings/settings.yaml +++ b/tests/fixtures/settings/settings.yaml @@ -79,6 +79,9 @@ entries: markdown: enabled: true path: "/src/flextype/core/Entries/Directives/MarkdownDirective.php" + textile: + enabled: true + path: "/src/flextype/core/Entries/Directives/TextileDirective.php" shortcodes: enabled: true path: "/src/flextype/core/Entries/Directives/ShortcodesDirective.php" diff --git a/tests/src/flextype/core/Entries/Directives/TextileDirectiveTest.php b/tests/src/flextype/core/Entries/Directives/TextileDirectiveTest.php new file mode 100644 index 00000000..9c74bf84 --- /dev/null +++ b/tests/src/flextype/core/Entries/Directives/TextileDirectiveTest.php @@ -0,0 +1,17 @@ +directory(PATH['project'] . '/entries')->create(); +}); + +afterEach(function (): void { + filesystem()->directory(PATH['project'] . '/entries')->delete(); +}); + +test('textile directive', function () { + entries()->create('textile', ['foo' => '@textile **Hello world!**']); + + $this->assertEquals('

Hello world!

', entries()->fetch('textile')['foo']); +}); \ No newline at end of file