fanwikis-Description2/Description2.class.php
Jack Phoenix 444f123a4a Version 0.4.0 -- cleanup, extension registration support, etc.
* Old i18n shim removed
* extension.json added
* PHP code moved into the new Description2 class
* Old PHP entry point still exists for b/c with older installations, but MW 1.25 or newer is now required

Change-Id: I0670c203b62dcf500ded1b82957e473edf864fb1
2017-07-11 16:21:18 -07:00

106 lines
2.9 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?php
/**
* Description2 Adds meaningful description <meta> tag to MW pages and into the parser output
*
* @file
* @ingroup Extensions
* @author Daniel Friesen (http://danf.ca/mw/)
* @copyright Copyright 2010 Daniel Friesen
* @license https://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later
* @link https://www.mediawiki.org/wiki/Extension:Description2 Documentation
*/
class Description2 {
/**
* @param Parser $parser
* @param string $desc
*/
public static function setDescription( Parser $parser, $desc ) {
$parserOutput = $parser->getOutput();
if ( $parserOutput->getProperty( 'description' ) !== false ) {
return;
}
$parserOutput->setProperty( 'description', $desc );
}
/**
* @param Parser $parser
* @param string $text
* @return bool
*/
public static function onParserAfterTidy( Parser &$parser, &$text ) {
$desc = '';
$myText = preg_replace( '%<table\b[^>]*+>(?:(?R)|[^<]*+(?:(?!</?table\b)<[^<]*+)*+)*+</table>%i', '', $text );
$paragraphs = array();
if ( preg_match_all( '#<p>.*?</p>#is', $myText, $paragraphs ) ) {
foreach ( $paragraphs[0] as $paragraph ) {
$paragraph = trim( strip_tags( $paragraph ) );
if ( !$paragraph ) {
continue;
}
$desc = $paragraph;
break;
}
}
if ( $desc ) {
self::setDescription( $parser, $desc );
}
return true;
}
/**
* @param Parser $parser
* @return bool
*/
public static function onParserFirstCallInit( Parser &$parser ) {
global $wgEnableMetaDescriptionFunctions;
if ( !$wgEnableMetaDescriptionFunctions ) {
// Functions and tags are disabled
return true;
}
$parser->setFunctionHook( 'description2', array( 'Description2', 'parserFunctionCallback' ), Parser::SFH_OBJECT_ARGS );
$parser->setFunctionTagHook( 'metadesc', array( 'Description2', 'tagCallback' ), Parser::SFH_OBJECT_ARGS );
return true;
}
/**
* @param Parser $parser
* @param $frame
* @param $args
* @return string
*/
public static function parserFunctionCallback( Parser $parser, $frame, $args ) {
$desc = isset( $args[0] ) ? $frame->expand( $args[0] ) : '';
self::setDescription( $parser, $desc );
return '';
}
/**
* @param Parser $parser
* @param $frame
* @param $content
* @param $attributes
* @return string
*/
public static function tagCallback( Parser $parser, $frame, $content, $attributes ) {
$desc = ( isset( $content ) ? $content : ( isset( $attributes['content'] ) ? $attributes['content'] : null ) );
if ( isset( $desc ) ) {
self::setDescription( $parser, $desc );
}
return '';
}
public static function onOutputPageParserOutput( OutputPage &$out, ParserOutput $parserOutput ) {
// Export the description from the main parser output into the OutputPage
$description = $parserOutput->getProperty( 'description' );
if ( $description !== false ) {
$out->addMeta( 'description', $description );
}
}
}