Move src/ to app/
This commit is contained in:
129
app/lib/Sage/Template/Blade.php
Normal file
129
app/lib/Sage/Template/Blade.php
Normal file
@@ -0,0 +1,129 @@
|
||||
<?php
|
||||
|
||||
namespace Roots\Sage\Template;
|
||||
|
||||
use Illuminate\Contracts\Container\Container as ContainerContract;
|
||||
use Illuminate\Contracts\View\Factory as FactoryContract;
|
||||
use Illuminate\View\Engines\CompilerEngine;
|
||||
use Illuminate\View\Engines\EngineInterface;
|
||||
use Illuminate\View\ViewFinderInterface;
|
||||
|
||||
/**
|
||||
* Class BladeProvider
|
||||
* @method \Illuminate\View\View file($file, $data = [], $mergeData = [])
|
||||
* @method \Illuminate\View\View make($file, $data = [], $mergeData = [])
|
||||
*/
|
||||
class Blade
|
||||
{
|
||||
/** @var ContainerContract */
|
||||
protected $app;
|
||||
|
||||
public function __construct(FactoryContract $env, ContainerContract $app)
|
||||
{
|
||||
$this->env = $env;
|
||||
$this->app = $app;
|
||||
}
|
||||
|
||||
/**
|
||||
* Get the compiler
|
||||
*
|
||||
* @return \Illuminate\View\Compilers\BladeCompiler
|
||||
*/
|
||||
public function compiler()
|
||||
{
|
||||
static $engineResolver;
|
||||
if (!$engineResolver) {
|
||||
$engineResolver = $this->app->make('view.engine.resolver');
|
||||
}
|
||||
return $engineResolver->resolve('blade')->getCompiler();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $view
|
||||
* @param array $data
|
||||
* @param array $mergeData
|
||||
* @return string
|
||||
*/
|
||||
public function render($view, $data = [], $mergeData = [])
|
||||
{
|
||||
/** @var \Illuminate\Contracts\Filesystem\Filesystem $filesystem */
|
||||
$filesystem = $this->app['files'];
|
||||
return $this->{$filesystem->exists($view) ? 'file' : 'make'}($view, $data, $mergeData)->render();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $file
|
||||
* @param array $data
|
||||
* @param array $mergeData
|
||||
* @return string
|
||||
*/
|
||||
public function compiledPath($file, $data = [], $mergeData = [])
|
||||
{
|
||||
$rendered = $this->file($file, $data, $mergeData);
|
||||
/** @var EngineInterface $engine */
|
||||
$engine = $rendered->getEngine();
|
||||
|
||||
if (!($engine instanceof CompilerEngine)) {
|
||||
// Using PhpEngine, so just return the file
|
||||
return $file;
|
||||
}
|
||||
|
||||
$compiler = $engine->getCompiler();
|
||||
$compiledPath = $compiler->getCompiledPath($rendered->getPath());
|
||||
if ($compiler->isExpired($compiledPath)) {
|
||||
$compiler->compile($file);
|
||||
}
|
||||
return $compiledPath;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $file
|
||||
* @return string
|
||||
*/
|
||||
public function normalizeViewPath($file)
|
||||
{
|
||||
// Convert `\` to `/`
|
||||
$view = str_replace('\\', '/', $file);
|
||||
|
||||
// Add namespace to path if necessary
|
||||
$view = $this->applyNamespaceToPath($view);
|
||||
|
||||
// Remove unnecessary parts of the path
|
||||
$view = str_replace(array_merge($this->app['config']['view.paths'], ['.blade.php', '.php']), '', $view);
|
||||
|
||||
// Remove superfluous and leading slashes
|
||||
return ltrim(preg_replace('%//+%', '/', $view), '/');
|
||||
}
|
||||
|
||||
/**
|
||||
* Convert path to view namespace
|
||||
* @param string $path
|
||||
* @return string
|
||||
*/
|
||||
public function applyNamespaceToPath($path)
|
||||
{
|
||||
/** @var ViewFinderInterface $finder */
|
||||
$finder = $this->app['view.finder'];
|
||||
if (!method_exists($finder, 'getHints')) {
|
||||
return $path;
|
||||
}
|
||||
$delimiter = $finder::HINT_PATH_DELIMITER;
|
||||
$hints = $finder->getHints();
|
||||
$view = array_reduce(array_keys($hints), function ($view, $namespace) use ($delimiter, $hints) {
|
||||
return str_replace($hints[$namespace], $namespace.$delimiter, $view);
|
||||
}, $path);
|
||||
return preg_replace("%{$delimiter}[\\/]*%", $delimiter, $view);
|
||||
}
|
||||
|
||||
/**
|
||||
* Pass any method to the view Factory instance.
|
||||
*
|
||||
* @param string $method
|
||||
* @param array $params
|
||||
* @return mixed
|
||||
*/
|
||||
public function __call($method, $params)
|
||||
{
|
||||
return call_user_func_array([$this->env, $method], $params);
|
||||
}
|
||||
}
|
||||
91
app/lib/Sage/Template/BladeProvider.php
Normal file
91
app/lib/Sage/Template/BladeProvider.php
Normal file
@@ -0,0 +1,91 @@
|
||||
<?php
|
||||
|
||||
namespace Roots\Sage\Template;
|
||||
|
||||
use Illuminate\Container\Container;
|
||||
use Illuminate\Contracts\Container\Container as ContainerContract;
|
||||
use Illuminate\Events\Dispatcher;
|
||||
use Illuminate\Filesystem\Filesystem;
|
||||
use Illuminate\View\ViewServiceProvider;
|
||||
|
||||
/**
|
||||
* Class BladeProvider
|
||||
*/
|
||||
class BladeProvider extends ViewServiceProvider
|
||||
{
|
||||
/**
|
||||
* @param ContainerContract $container
|
||||
* @param array $config
|
||||
* @SuppressWarnings(PHPMD.StaticAccess)
|
||||
*/
|
||||
public function __construct(ContainerContract $container = null, $config = [])
|
||||
{
|
||||
/** @noinspection PhpParamsInspection */
|
||||
parent::__construct($container ?: Container::getInstance());
|
||||
|
||||
$this->app->bindIf('config', function () use ($config) {
|
||||
return $config;
|
||||
}, true);
|
||||
}
|
||||
|
||||
/**
|
||||
* Bind required instances for the service provider.
|
||||
*/
|
||||
public function register()
|
||||
{
|
||||
$this->registerFilesystem();
|
||||
$this->registerEvents();
|
||||
$this->registerEngineResolver();
|
||||
$this->registerViewFinder();
|
||||
$this->registerFactory();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register Filesystem
|
||||
*/
|
||||
public function registerFilesystem()
|
||||
{
|
||||
$this->app->bindIf('files', Filesystem::class, true);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the events dispatcher
|
||||
*/
|
||||
public function registerEvents()
|
||||
{
|
||||
$this->app->bindIf('events', Dispatcher::class, true);
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function registerEngineResolver()
|
||||
{
|
||||
parent::registerEngineResolver();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/** @inheritdoc */
|
||||
public function registerFactory()
|
||||
{
|
||||
parent::registerFactory();
|
||||
return $this;
|
||||
}
|
||||
|
||||
/**
|
||||
* Register the view finder implementation.
|
||||
*/
|
||||
public function registerViewFinder()
|
||||
{
|
||||
$this->app->bindIf('view.finder', function ($app) {
|
||||
$config = $this->app['config'];
|
||||
$paths = $config['view.paths'];
|
||||
$namespaces = $config['view.namespaces'];
|
||||
$finder = new FileViewFinder($app['files'], $paths);
|
||||
array_map([$finder, 'addNamespace'], array_keys($namespaces), $namespaces);
|
||||
return $finder;
|
||||
}, true);
|
||||
return $this;
|
||||
}
|
||||
}
|
||||
40
app/lib/Sage/Template/FileViewFinder.php
Normal file
40
app/lib/Sage/Template/FileViewFinder.php
Normal file
@@ -0,0 +1,40 @@
|
||||
<?php
|
||||
|
||||
namespace Roots\Sage\Template;
|
||||
|
||||
class FileViewFinder extends \Illuminate\View\FileViewFinder
|
||||
{
|
||||
const FALLBACK_PARTS_DELIMITER = '-';
|
||||
|
||||
/**
|
||||
* Get an array of possible view files from a single file name.
|
||||
*
|
||||
* @param string $name
|
||||
* @return array
|
||||
*/
|
||||
public function getPossibleViewFiles($name)
|
||||
{
|
||||
$parts = explode(self::FALLBACK_PARTS_DELIMITER, $name);
|
||||
$templates[] = array_shift($parts);
|
||||
foreach ($parts as $i => $part) {
|
||||
$templates[] = $templates[$i].self::FALLBACK_PARTS_DELIMITER.$part;
|
||||
}
|
||||
rsort($templates);
|
||||
return $this->getPossibleViewFilesFromTemplates($templates);
|
||||
}
|
||||
|
||||
/**
|
||||
* Get an array of possible view files from an array of templates
|
||||
*
|
||||
* @param array $templates
|
||||
* @return array
|
||||
*/
|
||||
public function getPossibleViewFilesFromTemplates($templates)
|
||||
{
|
||||
return call_user_func_array('array_merge', array_map(function ($template) {
|
||||
return array_map(function ($extension) use ($template) {
|
||||
return str_replace('.', '/', $template).'.'.$extension;
|
||||
}, $this->extensions);
|
||||
}, $templates));
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user