forked from trilbymedia/grav-plugin-prism-highlight
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathprism-highlight-simpler.php
executable file
·97 lines (79 loc) · 3.12 KB
/
prism-highlight-simpler.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<?php
namespace Grav\Plugin;
use Grav\Common\Inflector;
use \Grav\Common\Plugin;
use \Grav\Common\Page\Page;
class PrismHighlightSimplerPlugin extends Plugin
{
/**
* @return array
*/
public static function getSubscribedEvents()
{
return [
'onPageInitialized' => ['onPageInitialized', 0],
];
}
/**
* Initialize configuration
*/
public function onPageInitialized()
{
if ($this->isAdmin()) {
$this->active = false;
return;
}
$defaults = (array)$this->config->get('plugins.prism-highlight-simpler');
/** @var Page $page */
$page = $this->grav['page'];
if (isset($page->header()->prism)) {
$this->config->set('plugins.prism-highlight-simpler', array_merge($defaults, $page->header()->prism));
}
if ($this->config->get('plugins.prism-highlight-simpler.enabled')) {
$this->enable([
'onTwigSiteVariables' => ['onTwigSiteVariables', 0]
]);
}
}
public function onTwigSiteVariables()
{
$theme = $this->config->get('plugins.prism-highlight-simpler.theme');
$this->grav['assets']->addCss('plugin://prism-highlight-simpler/css/prism.css');
$this->grav['assets']->addCss('plugin://prism-highlight-simpler/css/themes/' . $theme);
$this->grav['assets']->addJs('plugin://prism-highlight-simpler/js/prism.js', null, true, null, 'bottom');
$default_language = $this->config->get('plugins.prism-highlight-simpler.default-language-toggle');
$default_language_class = $this->config->get('plugins.prism-highlight-simpler.default-language-value');
$line_numbers = $this->config->get('plugins.prism-highlight-simpler.line-numbers');
$inline = "";
if ($default_language || $line_numbers) {
$inline .= "var __prism_nodes = null;\n";
}
if ($default_language) {
$inline .= "__prism_nodes = document.querySelectorAll('pre:not([class*=\"language-\"])');\n";
$inline .= $this->_addJsClass('language-'.$default_language_class);
}
if ($line_numbers) {
$inline .= "__prism_nodes = document.querySelectorAll('pre');\n";
$inline .= $this->_addJsClass('line-numbers');
}
if ($inline) {
// $this->grav['assets']->addInlineJs($inline, null, 'bottom');
$file = __dir__ . '/js/prism-inline.js';
file_put_contents($file, $inline);
$this->grav['assets']->addJs('plugin://prism-highlight-simpler/js/prism-inline.js', null, true, null, 'bottom');
}
}
public static function themeOptions()
{
$options = [];
$theme_files = glob(__dir__ . '/css/themes/*.css');
foreach ($theme_files as $theme_file) {
$theme = basename($theme_file);
$options[$theme] = Inflector::titleize($theme);
}
return $options;
}
private function _addJsClass($class = '') {
return "__prism_nodes.forEach(function(node) { node.classList.add('" . $class . "'); });\n";
}
}