mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Cite
synced 2025-01-22 10:35:06 +00:00
7b30a165e4
Note how only the HTML5 mode behavior changes, but nothing in legacy mode. Also note this does not 100% fix the issue. The esample with a non-breaking space is still broken. But it's already much better than before. Bug: T298278 Change-Id: Idf50dad4219ff4c594a0cc15f63cb10fdac5ffb7
77 lines
1.9 KiB
PHP
77 lines
1.9 KiB
PHP
<?php
|
|
|
|
namespace Cite;
|
|
|
|
use Sanitizer;
|
|
|
|
/**
|
|
* @license GPL-2.0-or-later
|
|
*/
|
|
class AnchorFormatter {
|
|
|
|
/**
|
|
* @var ReferenceMessageLocalizer
|
|
*/
|
|
private $messageLocalizer;
|
|
|
|
/**
|
|
* @param ReferenceMessageLocalizer $messageLocalizer
|
|
*/
|
|
public function __construct( ReferenceMessageLocalizer $messageLocalizer ) {
|
|
$this->messageLocalizer = $messageLocalizer;
|
|
}
|
|
|
|
/**
|
|
* Return an id for use in wikitext output based on a key and
|
|
* optionally the number of it, used in <references>, not <ref>
|
|
* (since otherwise it would link to itself)
|
|
*
|
|
* @param string $key
|
|
* @param string|null $num The number of the key
|
|
*
|
|
* @return string A key for use in wikitext
|
|
*/
|
|
public function refKey( string $key, string $num = null ): string {
|
|
$prefix = $this->messageLocalizer->msg( 'cite_reference_link_prefix' )->text();
|
|
$suffix = $this->messageLocalizer->msg( 'cite_reference_link_suffix' )->text();
|
|
if ( $num !== null ) {
|
|
$key = $this->messageLocalizer->msg( 'cite_reference_link_key_with_num', $key, $num )
|
|
->plain();
|
|
}
|
|
|
|
return $this->normalizeKey( $prefix . $key . $suffix );
|
|
}
|
|
|
|
/**
|
|
* Return an id for use in wikitext output based on a key and
|
|
* optionally the number of it, used in <ref>, not <references>
|
|
* (since otherwise it would link to itself)
|
|
*
|
|
* @param string $key
|
|
*
|
|
* @return string A key for use in wikitext
|
|
*/
|
|
public function getReferencesKey( string $key ): string {
|
|
$prefix = $this->messageLocalizer->msg( 'cite_references_link_prefix' )->text();
|
|
$suffix = $this->messageLocalizer->msg( 'cite_references_link_suffix' )->text();
|
|
|
|
return $this->normalizeKey( $prefix . $key . $suffix );
|
|
}
|
|
|
|
/**
|
|
* Normalizes and sanitizes a reference key
|
|
*
|
|
* @param string $key
|
|
*
|
|
* @return string
|
|
*/
|
|
private function normalizeKey( string $key ): string {
|
|
$ret = Sanitizer::escapeIdForLink( $key );
|
|
$ret = preg_replace( '/__+/', '_', $ret );
|
|
$ret = Sanitizer::safeEncodeAttribute( $ret );
|
|
|
|
return $ret;
|
|
}
|
|
|
|
}
|