implements a modular view system

This commit is contained in:
Connor S. Parks
2016-08-18 13:33:43 +01:00
parent 445c1ed2d0
commit fa1b32c11a
30 changed files with 809 additions and 181 deletions
@@ -14,8 +14,12 @@ namespace CachetHQ\Cachet\Foundation\Providers;
use CachetHQ\Cachet\Composers\AppComposer;
use CachetHQ\Cachet\Composers\CurrentUserComposer;
use CachetHQ\Cachet\Composers\DashboardComposer;
use CachetHQ\Cachet\Composers\MetricsComposer;
use CachetHQ\Cachet\Composers\StatusPageComposer;
use CachetHQ\Cachet\Composers\ModuleComposer;
use CachetHQ\Cachet\Composers\Modules\ComponentsComposer as ComponentsModuleComposer;
use CachetHQ\Cachet\Composers\Modules\MetricsComposer as MetricsModuleComposer;
use CachetHQ\Cachet\Composers\Modules\ScheduledComposer as ScheduledModuleComposer;
use CachetHQ\Cachet\Composers\Modules\StatusComposer as StatusModuleComposer;
use CachetHQ\Cachet\Composers\Modules\TimelineComposer as TimelineModuleComposer;
use CachetHQ\Cachet\Composers\ThemeComposer;
use CachetHQ\Cachet\Composers\TimezoneLocaleComposer;
use Illuminate\Contracts\View\Factory;
@@ -32,11 +36,16 @@ class ComposerServiceProvider extends ServiceProvider
{
$factory->composer('*', AppComposer::class);
$factory->composer('*', CurrentUserComposer::class);
$factory->composer(['index'], MetricsComposer::class);
$factory->composer(['index', 'single-incident', 'subscribe', 'signup'], StatusPageComposer::class);
$factory->composer(['index', 'single-incident', 'subscribe.*', 'signup', 'dashboard.settings.theme', 'emails.*'], ThemeComposer::class);
$factory->composer('dashboard.*', DashboardComposer::class);
$factory->composer(['setup', 'dashboard.settings.localization'], TimezoneLocaleComposer::class);
$factory->composer('*', ModuleComposer::class);
$factory->composer('partials.modules.components', ComponentsModuleComposer::class);
$factory->composer('partials.modules.metrics', MetricsModuleComposer::class);
$factory->composer('partials.modules.scheduled', ScheduledModuleComposer::class);
$factory->composer('partials.modules.status', StatusModuleComposer::class);
$factory->composer('partials.modules.timeline', TimelineModuleComposer::class);
}
/**
@@ -11,8 +11,9 @@
namespace CachetHQ\Cachet\Foundation\Providers;
use Illuminate\View\Compilers\BladeCompiler;
use CachetHQ\Cachet\Services\Modules\Renderer as ModulesRenderer;
use Illuminate\Support\ServiceProvider;
use Illuminate\View\Compilers\BladeCompiler;
class ModuleServiceProvider extends ServiceProvider
{
@@ -44,7 +45,7 @@ class ModuleServiceProvider extends ServiceProvider
'components' => 30000,
'metrics' => 40000,
'scheduled' => 50000,
'timeline' => 60000,
'timeline' => 60000,
],
];
@@ -56,26 +57,17 @@ class ModuleServiceProvider extends ServiceProvider
public function boot(BladeCompiler $blade)
{
$blade->directive('modules', function ($group = null) {
$code = [
'foreach (array_numeric_sort($modules) as $group => $parts) {',
'foreach (array_numeric_sort($parts) as $part) {',
'if (empty($part[\'partial\'])) {',
'continue;',
'}',
'$params = array_except(get_defined_vars(), [\'__data\', \'__path\']);',
'$params = array_merge(array_get($part, \'parameters\', []), $params);',
'echo $__env->make($part[\'partial\'], $params)->render();',
'}',
'}',
];
if ($group) {
$code[0] = 'if (!empty($modules['.$group.'])) {'.PHP_EOL;
$code[0] .= '$parts = $modules['.$group.'];';
}
return '<?php '.implode(PHP_EOL, $code).'?>';
return sprintf(
'<?php echo $app->call(\'%s@%s\', [
\'factory\' => $__env,
\'data\' => array_except(get_defined_vars(), array(\'__data\', \'__path\')),
\'modules\' => $modules,
\'group\' => %s,
]); ?>',
ModulesRenderer::class,
'renderModules',
$group === null ? 'null' : $group
);
});
}