5
0
mirror of git://git.proxmox.com/git/pve-docs.git synced 2025-03-19 18:50:06 +03:00

pvedocs-include.php: avoid to use javascript

Use a ParserAfterTidy hook to avoid JS. This hack was
found in the htmlet tag extension.
This commit is contained in:
Dietmar Maurer 2016-10-17 10:06:39 +02:00
parent 349e8c55b5
commit 208f75bc96

View File

@ -4,26 +4,37 @@
$wgExtensionCredits['parserhook'][] = array(
'name' => "PVE Documentation Pages",
'description' => "Display PVE Documentation Pages",
'description' => "Display PVE Documentation Pages",
'author' => "Dietmar Maurer",
);
# Define a setup function
$wgHooks['ParserFirstCallInit'][] = 'efPvedocsParserFunction_Setup';
$wgHooks['ParserAfterTidy'][] = 'efPvedocsPostProcessFunction';
# Add a hook to initialise the magic word
$wgHooks['LanguageGetMagic'][] = 'efPvedocsParserFunction_Magic';
function efPvedocsParserFunction_Setup(&$parser) {
# Set a function hook associating the "pvedocs" magic
# word with our function
$parser->setFunctionHook( 'pvedocs', 'efPvedocsParserFunction_Render' );
$parser->setFunctionHook('pvedocs', 'efPvedocsParserFunction_Render');
$parser->setHook('pvehide', 'renderTagPveHideContent' );
$parser->setHook('pvehide', 'renderTagPveHideContent');
return true;
}
# similar code as in <htmlet> tag...
function efPvedocsPostProcessFunction($parser, &$text) {
$text = preg_replace_callback(
'/<--- @PVEDOCSHACK@ ([0-9a-zA-Z\\+\\/]+=*) @PVEDOCSHACK@ -->/sm',
function ($m) { return base64_decode("$m[1]"); },
$text);
return true;
}
// Render <pvehide>
function renderTagPveHideContent($input, array $args, Parser $parser,
PPFrame $frame ) {
@ -31,7 +42,7 @@ PPFrame $frame ) {
return '';
}
function efPvedocsParserFunction_Magic(&$magicWords, $langCode) {
# Add the magic word
# The first array element is whether to be case sensitive,
@ -43,11 +54,6 @@ function efPvedocsParserFunction_Magic(&$magicWords, $langCode) {
return true;
}
function encodeURI($uri) {
return preg_replace_callback("{[^0-9a-z_.!~*'();,/?:@&=+$#-]}i",
function ($m) { return sprintf('%%%02X', ord($m[0])); }, $uri);
}
function efPvedocsParserFunction_Render($parser, $param1 = '', $param2 = '') {
$parser->disableCache();
@ -56,25 +62,12 @@ function efPvedocsParserFunction_Render($parser, $param1 = '', $param2 = '') {
# files from within "/usr/share/pve-docs/"
if (!preg_match("/[a-z0-9.-]+\.html/i", $param1)) {
die("no such manual page");
}
}
$content = file_get_contents("/usr/share/pve-docs/$param1");
$output = "<noscript><div><p>" .
"This page requires java-script. To view " .
"this page without java-script goto " .
"<a href='/pve-docs/$param1'>$param1</a>" .
"</div></noscript>\n";
# hack to inject html without modifications my mediawiki parser
$encHtml = encodeURI($content);
$output .= "<div id='pve_embed_data'></div>";
$output .= "<script>" .
"var data = decodeURI(\"".$encHtml."\");" .
"document.getElementById('pve_embed_data').innerHTML = data;" .
"</script>";
return array($output, 'noparse' => true, 'isHTML' => true);
$output = '<--- @PVEDOCSHACK@ '.base64_encode($content).' @PVEDOCSHACK@ -->';
return array($output, 'noparse' => true, 'isHTML' => true);
}
?>