public function preview($pattern, $file)
{
$data = ['pattern' => $pattern, 'file' => $file];
if (get('raw') == 'true') {
$this->raw($pattern, $file);
}
if ($file->filename() == $pattern->name() . '.html.php') {
$views = ['preview', 'html', 'php'];
$snippet = 'html';
// pass the mode to the template
$data['view'] = in_array(get('view'), $views) ? get('view') : $this->kirby->option('patterns.preview.mode', 'preview');
switch ($data['view']) {
case 'preview':
try {
lab::$mode = 'preview';
$pattern->render();
$data['content'] = '<iframe src="' . $pattern->url() . '/preview"></iframe>';
} catch (Exception $e) {
$data['content'] = $this->error($e);
}
break;
case 'php':
$data['content'] = $this->codeblock($file);
break;
case 'html':
$data['content'] = $this->codeblock($pattern);
break;
}
} else {
if (in_array(strtolower($file->extension()), ['gif', 'jpg', 'jpeg', 'svg', 'png'])) {
$snippet = 'image';
} else {
if (in_array(strtolower($file->extension()), ['md', 'mdown'])) {
$snippet = 'markdown';
$data['content'] = kirbytext($file->read());
} else {
$ext = $file->extension();
$code = ['php', 'html', 'js', 'css', 'scss', 'less', 'json', 'txt'];
if (in_array($ext, $code)) {
$snippet = 'code';
$data['content'] = $this->codeblock($file);
} else {
$snippet = 'empty';
}
}
}
}
return $this->view('previews/' . $snippet, $data);
}