Вход Регистрация
Файл: vendor/laravel/framework/src/Illuminate/Mail/Markdown.php
Строк: 242
<?php

namespace IlluminateMail;

use 
IlluminateContractsViewFactory as ViewFactory;
use 
IlluminateSupportHtmlString;
use 
IlluminateSupportStr;
use 
LeagueCommonMarkEnvironmentEnvironment;
use 
LeagueCommonMarkExtensionCommonMarkCommonMarkCoreExtension;
use 
LeagueCommonMarkExtensionTableTableExtension;
use 
LeagueCommonMarkMarkdownConverter;
use 
TijsVerkoyenCssToInlineStylesCssToInlineStyles;

class 
Markdown
{
    
/**
     * The view factory implementation.
     *
     * @var IlluminateContractsViewFactory
     */
    
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  IlluminateContractsViewFactory  $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  TijsVerkoyenCssToInlineStylesCssToInlineStyles|null  $inliner
     * @return IlluminateSupportHtmlString
     */
    
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 IlluminateSupportHtmlString
     */
    
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("/[rn]{2,}/""nn"$contents), ENT_QUOTES'UTF-8')
        );
    }

    
/**
     * Parse the given Markdown text into HTML.
     *
     * @param  string  $text
     * @return IlluminateSupportHtmlString
     */
    
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;
    }
}
Онлайн: 0
Реклама