mirror of
				https://github.com/diocloid/LinkTitles.git
				synced 2025-10-22 05:42:32 +02:00 
			
		
		
		
	Fix <noautolinks> tag in parse-on-render mode.
- Fix: <noautolinks> tag did not work in parse-on-render mode.
This commit is contained in:
		@@ -126,7 +126,10 @@ class Extension {
 | 
			
		||||
	 *	See https://www.mediawiki.org/wiki/Manual:Tag_extensions#Example
 | 
			
		||||
	 */
 | 
			
		||||
	public static function doNoautolinksTag( $input, array $args, \Parser $parser, \PPFrame $frame ) {
 | 
			
		||||
		return $parser->recursiveTagParse( $input, $frame );
 | 
			
		||||
		Linker::lock();
 | 
			
		||||
		$result =  $parser->recursiveTagParse( $input, $frame );
 | 
			
		||||
		Linker::unlock();
 | 
			
		||||
		return $result;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/*
 | 
			
		||||
@@ -138,7 +141,9 @@ class Extension {
 | 
			
		||||
		$config = new Config();
 | 
			
		||||
		$linker = new Linker( $config );
 | 
			
		||||
		$source = Source::createFromParserAndText( $parser, $input, $config );
 | 
			
		||||
		Linker::unlock();
 | 
			
		||||
		$result = $linker->linkContent( $source );
 | 
			
		||||
		Linker::lock();
 | 
			
		||||
		if ( $result ) {
 | 
			
		||||
			return $parser->recursiveTagParse( $result, $frame );
 | 
			
		||||
		} else {
 | 
			
		||||
 
 | 
			
		||||
@@ -46,6 +46,8 @@ class Linker {
 | 
			
		||||
	 */
 | 
			
		||||
	private $linkValue;
 | 
			
		||||
 | 
			
		||||
	private static $locked = 0;
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Constructs a new instance of the Linker class.
 | 
			
		||||
	 *
 | 
			
		||||
@@ -68,7 +70,7 @@ class Linker {
 | 
			
		||||
	 * @return String|null Source page text with links to target pages, or null if no links were added
 | 
			
		||||
	 */
 | 
			
		||||
	public function linkContent( Source $source ) {
 | 
			
		||||
		if ( !$source->canBeLinked() ) {
 | 
			
		||||
		if ( self::$locked > 0 || !$source->canBeLinked() ) {
 | 
			
		||||
			return;
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
@@ -197,6 +199,28 @@ class Linker {
 | 
			
		||||
			return '[[' . $matches[ 0 ]  . ']]';
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Increases an internal static lock counter by 1.
 | 
			
		||||
	 *
 | 
			
		||||
	 * If the Linker class is locked (counter > 0), linkContent() will be a no-op.
 | 
			
		||||
	 * Locking is necessary to enable nested <noautolinks> and <autolinks> tags in
 | 
			
		||||
	 * parseOnRender mode.
 | 
			
		||||
	 */
 | 
			
		||||
	public static function lock() {
 | 
			
		||||
		self::$locked += 1;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	/**
 | 
			
		||||
	 * Decreases an internal static lock counter by 1.
 | 
			
		||||
	 *
 | 
			
		||||
	 * If the Linker class is locked (counter > 0), linkContent() will be a no-op.
 | 
			
		||||
	 * Locking is necessary to enable nested <noautolinks> and <autolinks> tags in
 | 
			
		||||
	 * parseOnRender mode.
 | 
			
		||||
	 */
 | 
			
		||||
	public static function unlock() {
 | 
			
		||||
		self::$locked -= 1;
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// vim: ts=2:sw=2:noet:comments^=\:///
 | 
			
		||||
 
 | 
			
		||||
@@ -47,10 +47,15 @@ class ExtensionTest extends LinkTitles\TestCase {
 | 
			
		||||
        'This page should link to the [[link target]] but not to test page'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        false,
 | 
			
		||||
        false, // parseOnEdit
 | 
			
		||||
        'This page should *not* link to the link target',
 | 
			
		||||
        'This page should *not* link to the link target'
 | 
			
		||||
      ]
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnEdit
 | 
			
		||||
        'With __NOAUTOLINKS__, this page should not link to the link target',
 | 
			
		||||
        'With __NOAUTOLINKS__, this page should not link to the link target'
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
@@ -65,8 +70,7 @@ class ExtensionTest extends LinkTitles\TestCase {
 | 
			
		||||
    ] );
 | 
			
		||||
    $title = $this->insertPage( 'test page', $input )['title'];
 | 
			
		||||
    $page = new WikiPage( $title );
 | 
			
		||||
    $content = $page->getContent();
 | 
			
		||||
    $output = $content->getParserOutput( $title, null, null, false );
 | 
			
		||||
    $output = $page->getParserOutput( new ParserOptions(), null, true );
 | 
			
		||||
    $lines = explode( "\n", $output->getText() );
 | 
			
		||||
    $this->assertRegexp( $expectedOutput, $lines[0] );
 | 
			
		||||
  }
 | 
			
		||||
@@ -75,14 +79,34 @@ class ExtensionTest extends LinkTitles\TestCase {
 | 
			
		||||
    return [
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        'This page should link to the link target but not to test page',
 | 
			
		||||
        '_This page should link to the <a href=[^>]+>link target</a> but not to test page_'
 | 
			
		||||
        'This page should link to the link target but not to the test page',
 | 
			
		||||
        '_This page should link to the <a href=[^>]+>link target</a> but not to the test page_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        false,
 | 
			
		||||
        false, // parseOnRender
 | 
			
		||||
        'This page should not link to the link target',
 | 
			
		||||
        '_This page should not link to the link target_'
 | 
			
		||||
      ]
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '__NOAUTOLINKS__With noautolinks magic word, this page should not link to the link target',
 | 
			
		||||
        '_With noautolinks magic word, this page should not link to the link target_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '__NOAUTOLINKS__With noautolinks magic word, <autolinks>link target in autolinks tag</autolinks> should be linked',
 | 
			
		||||
        '_With noautolinks magic word, <a href=[^>]+>link target</a> in autolinks tag should be linked_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '<noautolinks>In a noautolinks tag, link target should NOT be linked</noautolinks>',
 | 
			
		||||
        '_In a noautolinks tag, link target should NOT be linked_'
 | 
			
		||||
      ],
 | 
			
		||||
      [
 | 
			
		||||
        true, // parseOnRender
 | 
			
		||||
        '<noautolinks>In a noautolinks tag, <autolinks>link target in autolinks tag</autolinks> should be linked</noautolinks>',
 | 
			
		||||
        '_In a noautolinks tag, <a href=[^>]+>link target</a> in autolinks tag should be linked_'
 | 
			
		||||
      ],
 | 
			
		||||
    ];
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -105,6 +105,12 @@ class SplitterTest extends MediaWikiTestCase {
 | 
			
		||||
			// 	"With parseHeadings = false,\n==an improperly formatted heading may be linked=\n",
 | 
			
		||||
			// 	[ "With parseHeadings = false,\n==an improperly formatted heading may be linked=\n" ]
 | 
			
		||||
			// ],
 | 
			
		||||
			[
 | 
			
		||||
				true, // skipTemplates
 | 
			
		||||
				true, // parseHeadings
 | 
			
		||||
				"Text <noautolinks>in noautolinks tag</noautolinks>should be excluded",
 | 
			
		||||
				[ "Text ", "<noautolinks>in noautolinks tag</noautolinks>", "should be excluded" ]
 | 
			
		||||
			],
 | 
			
		||||
		];
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user