/vendor/laravel/framework/src/Illuminate/Mail/Markdown.php
PHP | 160 lines | 70 code | 20 blank | 70 comment | 0 complexity | 904f8ae4a77392fe6dd777f1ef347a55 MD5 | raw file
Possible License(s): Apache-2.0, BSD-3-Clause
- <?php
- namespace Illuminate\Mail;
- use Parsedown;
- use Illuminate\Support\HtmlString;
- use Illuminate\Contracts\View\Factory as ViewFactory;
- 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();
- return new HtmlString(($inliner ?: new CssToInlineStyles)->convert(
- $contents, $this->view->make('mail::themes.'.$this->theme)->render()
- ));
- }
- /**
- * Render the Markdown template into HTML.
- *
- * @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->markdownComponentPaths()
- )->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)
- {
- $parsedown = new Parsedown;
- return new HtmlString($parsedown->text($text));
- }
- /**
- * Get the HTML component paths.
- *
- * @return array
- */
- public function htmlComponentPaths()
- {
- return array_map(function ($path) {
- return $path.'/html';
- }, $this->componentPaths());
- }
- /**
- * Get the Markdown component paths.
- *
- * @return array
- */
- public function markdownComponentPaths()
- {
- return array_map(function ($path) {
- return $path.'/markdown';
- }, $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;
- }
- }