mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 06:08:52 +00:00
[ticket/14323] Added support for truncating long URLs
PHPBB3-14323
This commit is contained in:
parent
28969511d2
commit
eb6ceb963e
3 changed files with 76 additions and 2 deletions
|
@ -332,8 +332,7 @@ class factory implements \phpbb\textformatter\cache_interface
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the magic links plugins. We do that after BBCodes so that they use the same tags
|
// Load the magic links plugins. We do that after BBCodes so that they use the same tags
|
||||||
$configurator->plugins->load('Autoemail');
|
$this->configure_autolink($configurator);
|
||||||
$configurator->plugins->load('Autolink', array('matchWww' => true));
|
|
||||||
|
|
||||||
// Register some vars with a default value. Those should be set at runtime by whatever calls
|
// Register some vars with a default value. Those should be set at runtime by whatever calls
|
||||||
// the parser
|
// the parser
|
||||||
|
@ -394,6 +393,31 @@ class factory implements \phpbb\textformatter\cache_interface
|
||||||
return array('parser' => $parser, 'renderer' => $renderer);
|
return array('parser' => $parser, 'renderer' => $renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure the Autolink / Autoemail plugins used to linkify text
|
||||||
|
*
|
||||||
|
* @param \s9e\TextFormatter\Configurator $configurator
|
||||||
|
* @return void
|
||||||
|
*/
|
||||||
|
protected function configure_autolink(Configurator $configurator)
|
||||||
|
{
|
||||||
|
$configurator->plugins->load('Autoemail');
|
||||||
|
$configurator->plugins->load('Autolink', array('matchWww' => true));
|
||||||
|
|
||||||
|
// Create a tag that will be used to display the truncated text by replacing the original
|
||||||
|
// content with the content of the @text attribute
|
||||||
|
$tag = $configurator->tags->add('AUTOLINK_TEXT');
|
||||||
|
$tag->attributes->add('text');
|
||||||
|
$tag->template = '<xsl:value-of select="@text"/>';
|
||||||
|
|
||||||
|
// Add a tag filter that replaces the text of links that were created by the Autolink plugin
|
||||||
|
$configurator->Autolink->getTag()->filterChain
|
||||||
|
->add(__NAMESPACE__ . '\\parser::generate_autolink_text')
|
||||||
|
->resetParameters()
|
||||||
|
->addParameterByName('tag')
|
||||||
|
->addParameterByName('parser');
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return the default BBCodes configuration
|
* Return the default BBCodes configuration
|
||||||
*
|
*
|
||||||
|
|
|
@ -393,4 +393,44 @@ class parser implements \phpbb\textformatter\parser_interface
|
||||||
|
|
||||||
return $url;
|
return $url;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Replace the content displayed inside of a URL tag
|
||||||
|
*
|
||||||
|
* Will only apply to URL tags that do not use any markup (e.g. not "[url]") on the assumption
|
||||||
|
* that those tags were created by the Autolink plugin to linkify URLs found in plain text
|
||||||
|
*
|
||||||
|
* @param \s9e\TextFormatter\Parser\Tag $url_tag URL tag (start tag)
|
||||||
|
* @param \s9e\TextFormatter\Parser $parser Parser
|
||||||
|
* @return bool Always TRUE to indicate that the tag is valid
|
||||||
|
*/
|
||||||
|
public static function generate_autolink_text(\s9e\TextFormatter\Parser\Tag $url_tag, \s9e\TextFormatter\Parser $parser)
|
||||||
|
{
|
||||||
|
// If the tag consumes any text then we ignore it because it's not a linkified URL. Same if
|
||||||
|
// it's not paired with an end tag that doesn't consume any text either
|
||||||
|
if ($url_tag->getLen() > 0 || !$url_tag->getEndTag())
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Capture the text between the start tag and its end tag
|
||||||
|
$start = $url_tag->getPos();
|
||||||
|
$end = $url_tag->getEndTag()->getPos();
|
||||||
|
$length = $end - $start;
|
||||||
|
$text = substr($parser->getText(), $start, $length);
|
||||||
|
|
||||||
|
if ($length <= 55 || utf8_strlen($text) <= 55)
|
||||||
|
{
|
||||||
|
// Do not do anything if the text is not longer than 55 characters
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
$tag = $parser->addSelfClosingTag('AUTOLINK_TEXT', $start, $length);
|
||||||
|
$url_tag->cascadeInvalidationTo($tag);
|
||||||
|
|
||||||
|
$text = utf8_substr($text, 0, 39) . ' ... ' . utf8_substr($text, -10);
|
||||||
|
$tag->setAttribute('text', $text);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -225,6 +225,16 @@ class phpbb_textformatter_s9e_default_formatting_test extends phpbb_test_case
|
||||||
'... www.example.org ...',
|
'... www.example.org ...',
|
||||||
'... <a href="http://www.example.org" class="postlink">www.example.org</a> ...'
|
'... <a href="http://www.example.org" class="postlink">www.example.org</a> ...'
|
||||||
),
|
),
|
||||||
|
array(
|
||||||
|
// From make_clickable_test.php
|
||||||
|
'www.phpbb.com/community/?',
|
||||||
|
'<a href="http://www.phpbb.com/community/" class="postlink">www.phpbb.com/community/</a>?'
|
||||||
|
),
|
||||||
|
array(
|
||||||
|
// From make_clickable_test.php
|
||||||
|
'http://www.phpbb.com/community/path/to/long/url/file.ext#section',
|
||||||
|
'<a href="http://www.phpbb.com/community/path/to/long/url/file.ext#section" class="postlink">http://www.phpbb.com/community/path/to/ ... xt#section</a>'
|
||||||
|
),
|
||||||
array(
|
array(
|
||||||
'[quote="[url=http://example.org]xxx[/url]"]...[/quote]',
|
'[quote="[url=http://example.org]xxx[/url]"]...[/quote]',
|
||||||
'<blockquote><div><cite><a href="http://example.org" class="postlink">xxx</a> wrote:</cite>...</div></blockquote>'
|
'<blockquote><div><cite><a href="http://example.org" class="postlink">xxx</a> wrote:</cite>...</div></blockquote>'
|
||||||
|
|
Loading…
Add table
Reference in a new issue