Blame | Letzte Änderung | Log anzeigen | RSS feed
<?phpnamespace Illuminate\Mail;use Illuminate\Contracts\View\Factory as ViewFactory;use Illuminate\Support\HtmlString;use Illuminate\Support\Str;use League\CommonMark\Environment\Environment;use League\CommonMark\Extension\CommonMark\CommonMarkCoreExtension;use League\CommonMark\Extension\Table\TableExtension;use League\CommonMark\MarkdownConverter;use TijsVerkoyen\CssToInlineStyles\CssToInlineStyles;class Markdown{/*** The view factory implementation.** @var \Illuminate\Contracts\View\Factory*/protected $view;/*** The current theme being used when generating emails.** @var string*/protected $theme = 'default';/*** The registered component paths.** @var array*/protected $componentPaths = [];/*** Create a new Markdown renderer instance.** @param \Illuminate\Contracts\View\Factory $view* @param array $options* @return void*/public function __construct(ViewFactory $view, array $options = []){$this->view = $view;$this->theme = $options['theme'] ?? 'default';$this->loadComponentsFrom($options['paths'] ?? []);}/*** Render the Markdown template into HTML.** @param string $view* @param array $data* @param \TijsVerkoyen\CssToInlineStyles\CssToInlineStyles|null $inliner* @return \Illuminate\Support\HtmlString*/public function render($view, array $data = [], $inliner = null){$this->view->flushFinderCache();$contents = $this->view->replaceNamespace('mail', $this->htmlComponentPaths())->make($view, $data)->render();if ($this->view->exists($customTheme = Str::start($this->theme, 'mail.'))) {$theme = $customTheme;} else {$theme = str_contains($this->theme, '::')? $this->theme: 'mail::themes.'.$this->theme;}return new HtmlString(($inliner ?: new CssToInlineStyles)->convert($contents, $this->view->make($theme, $data)->render()));}/*** Render the Markdown template into text.** @param string $view* @param array $data* @return \Illuminate\Support\HtmlString*/public function renderText($view, array $data = []){$this->view->flushFinderCache();$contents = $this->view->replaceNamespace('mail', $this->textComponentPaths())->make($view, $data)->render();return new HtmlString(html_entity_decode(preg_replace("/[\r\n]{2,}/", "\n\n", $contents), ENT_QUOTES, 'UTF-8'));}/*** Parse the given Markdown text into HTML.** @param string $text* @return \Illuminate\Support\HtmlString*/public static function parse($text){$environment = new Environment(['allow_unsafe_links' => false,]);$environment->addExtension(new CommonMarkCoreExtension);$environment->addExtension(new TableExtension);$converter = new MarkdownConverter($environment);return new HtmlString($converter->convert($text)->getContent());}/*** Get the HTML component paths.** @return array*/public function htmlComponentPaths(){return array_map(function ($path) {return $path.'/html';}, $this->componentPaths());}/*** Get the text component paths.** @return array*/public function textComponentPaths(){return array_map(function ($path) {return $path.'/text';}, $this->componentPaths());}/*** Get the component paths.** @return array*/protected function componentPaths(){return array_unique(array_merge($this->componentPaths, [__DIR__.'/resources/views',]));}/*** Register new mail component paths.** @param array $paths* @return void*/public function loadComponentsFrom(array $paths = []){$this->componentPaths = $paths;}/*** Set the default theme to be used.** @param string $theme* @return $this*/public function theme($theme){$this->theme = $theme;return $this;}/*** Get the theme currently being used by the renderer.** @return string*/public function getTheme(){return $this->theme;}}