From 45ac20c7a4d632bbb23aaba50c2d79ac5ebac465 Mon Sep 17 00:00:00 2001 From: winter Date: Fri, 14 Feb 2025 17:56:45 +0000 Subject: implement formatted note contents (html and commonmark) --- Digitigrade/FormattingProvider/CommonMark.php | 49 ++++++++++++++++++++++++ Digitigrade/FormattingProvider/SanitisedHtml.php | 31 +++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 Digitigrade/FormattingProvider/CommonMark.php create mode 100644 Digitigrade/FormattingProvider/SanitisedHtml.php (limited to 'Digitigrade/FormattingProvider') diff --git a/Digitigrade/FormattingProvider/CommonMark.php b/Digitigrade/FormattingProvider/CommonMark.php new file mode 100644 index 0000000..d90ca17 --- /dev/null +++ b/Digitigrade/FormattingProvider/CommonMark.php @@ -0,0 +1,49 @@ + 'escape', + 'renderer' => [ + 'soft_break' => '
' + ], + 'autolink' => [ + 'allowed_protocols' => SanitisedHtml::ALLOWED_URL_SCHEMES + ], + 'external_link' => [ + 'internal_hosts' => [GlobalConfig::getInstance()->getCanonicalHost()], + 'open_in_new_window' => true, + 'nofollow' => 'all', + 'noopener' => 'all', + 'noreferrer' => 'external' + ] + ]); + $env->addExtension(new CommonMarkCoreExtension); + $env->addExtension(new AutolinkExtension); + $env->addExtension(new ExternalLinkExtension); + $env->addExtension(new StrikethroughExtension); + $this->converter = new MarkdownConverter($env); + } + + public function renderToHtml(string $input): string { + return $this->converter->convert($input); + } + + public function renderToPlainText(string $input): string { + // TODO: somehow remove markup and leave the unformatted content behind + return htmlspecialchars($input); + } +} \ No newline at end of file diff --git a/Digitigrade/FormattingProvider/SanitisedHtml.php b/Digitigrade/FormattingProvider/SanitisedHtml.php new file mode 100644 index 0000000..fa2e5eb --- /dev/null +++ b/Digitigrade/FormattingProvider/SanitisedHtml.php @@ -0,0 +1,31 @@ +sanitiser = new HtmlSanitizer((new HtmlSanitizerConfig()) + ->allowSafeElements() + ->allowLinkSchemes(self::ALLOWED_URL_SCHEMES) + ); + } + + public function renderToHtml(string $input): string { + return $this->sanitiser->sanitize($input); + } + + public function renderToPlainText(string $input): string { + // TODO: somehow remove tags and leave the unformatted content behind + return htmlspecialchars($input); + } +} \ No newline at end of file -- cgit v1.3