mirror of
https://github.com/flarum/framework.git
synced 2025-01-19 07:42:48 +08:00
Merge pull request #70 from flarum/sm/2879-support-smart-quotes
Support smart quotes in mentions format
This commit is contained in:
commit
07e93747be
|
@ -76,7 +76,7 @@ export default function addComposerAutocomplete() {
|
||||||
|
|
||||||
if (absMentionStart) {
|
if (absMentionStart) {
|
||||||
typed = lastChunk.substring(relMentionStart).toLowerCase();
|
typed = lastChunk.substring(relMentionStart).toLowerCase();
|
||||||
matchTyped = typed.match(/^"((?:(?!"#).)+)$/);
|
matchTyped = typed.match(/^["|“]((?:(?!"#).)+)$/);
|
||||||
typed = (matchTyped && matchTyped[1]) || typed;
|
typed = (matchTyped && matchTyped[1]) || typed;
|
||||||
|
|
||||||
const makeSuggestion = function(user, replacement, content, className = '') {
|
const makeSuggestion = function(user, replacement, content, className = '') {
|
||||||
|
|
|
@ -58,7 +58,7 @@ class ConfigureMentions
|
||||||
$tag->filterChain->prepend([static::class, 'addUserId'])
|
$tag->filterChain->prepend([static::class, 'addUserId'])
|
||||||
->setJS('function(tag) { return flarum.extensions["flarum-mentions"].filterUserMentions(tag); }');
|
->setJS('function(tag) { return flarum.extensions["flarum-mentions"].filterUserMentions(tag); }');
|
||||||
|
|
||||||
$config->Preg->match('/\B@"(?<displayname>((?!"#[a-z]{0,3}[0-9]+).)+)"#(?<id>[0-9]+)\b/', $tagName);
|
$config->Preg->match('/\B@["|“](?<displayname>((?!"#[a-z]{0,3}[0-9]+).)+)["|”]#(?<id>[0-9]+)\b/', $tagName);
|
||||||
$config->Preg->match('/\B@(?<username>[a-z0-9_-]+)(?!#)/i', $tagName);
|
$config->Preg->match('/\B@(?<username>[a-z0-9_-]+)(?!#)/i', $tagName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -114,7 +114,7 @@ class ConfigureMentions
|
||||||
->prepend([static::class, 'addPostId'])
|
->prepend([static::class, 'addPostId'])
|
||||||
->setJS('function(tag) { return flarum.extensions["flarum-mentions"].filterPostMentions(tag); }');
|
->setJS('function(tag) { return flarum.extensions["flarum-mentions"].filterPostMentions(tag); }');
|
||||||
|
|
||||||
$config->Preg->match('/\B@"(?<displayname>((?!"#[a-z]{0,3}[0-9]+).)+)"#p(?<id>[0-9]+)\b/', $tagName);
|
$config->Preg->match('/\B@["|“](?<displayname>((?!"#[a-z]{0,3}[0-9]+).)+)["|”]#p(?<id>[0-9]+)\b/', $tagName);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -126,6 +126,37 @@ class PostMentionsTest extends TestCase
|
||||||
$this->assertNotNull(CommentPost::find($response['data']['id'])->mentionsPosts->find(4));
|
$this->assertNotNull(CommentPost::find($response['data']['id'])->mentionsPosts->find(4));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function mentioning_a_valid_post_with_new_format_with_smart_quotes_works_and_falls_back_to_normal_quotes()
|
||||||
|
{
|
||||||
|
$response = $this->send(
|
||||||
|
$this->request('POST', '/api/posts', [
|
||||||
|
'authenticatedAs' => 1,
|
||||||
|
'json' => [
|
||||||
|
'data' => [
|
||||||
|
'attributes' => [
|
||||||
|
'content' => '@“POTATO$”#p4',
|
||||||
|
],
|
||||||
|
'relationships' => [
|
||||||
|
'discussion' => ['data' => ['id' => 2]],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(201, $response->getStatusCode());
|
||||||
|
|
||||||
|
$response = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
$this->assertStringContainsString('POTATO$', $response['data']['attributes']['contentHtml']);
|
||||||
|
$this->assertEquals('@"POTATO$"#p4', $response['data']['attributes']['content']);
|
||||||
|
$this->assertStringContainsString('PostMention', $response['data']['attributes']['contentHtml']);
|
||||||
|
$this->assertNotNull(CommentPost::find($response['data']['id'])->mentionsPosts->find(4));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -156,6 +156,37 @@ class UserMentionsTest extends TestCase
|
||||||
$this->assertNotNull(CommentPost::find($response['data']['id'])->mentionsUsers->find(3));
|
$this->assertNotNull(CommentPost::find($response['data']['id'])->mentionsUsers->find(3));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @test
|
||||||
|
*/
|
||||||
|
public function mentioning_a_valid_user_with_new_format_with_smart_quotes_works_and_falls_back_to_normal_quotes()
|
||||||
|
{
|
||||||
|
$response = $this->send(
|
||||||
|
$this->request('POST', '/api/posts', [
|
||||||
|
'authenticatedAs' => 1,
|
||||||
|
'json' => [
|
||||||
|
'data' => [
|
||||||
|
'attributes' => [
|
||||||
|
'content' => '@“POTATO$”#3',
|
||||||
|
],
|
||||||
|
'relationships' => [
|
||||||
|
'discussion' => ['data' => ['id' => 2]],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
],
|
||||||
|
])
|
||||||
|
);
|
||||||
|
|
||||||
|
$this->assertEquals(201, $response->getStatusCode());
|
||||||
|
|
||||||
|
$response = json_decode($response->getBody(), true);
|
||||||
|
|
||||||
|
$this->assertStringContainsString('@POTATO$', $response['data']['attributes']['contentHtml']);
|
||||||
|
$this->assertStringContainsString('@"POTATO$"#3', $response['data']['attributes']['content']);
|
||||||
|
$this->assertStringContainsString('UserMention', $response['data']['attributes']['contentHtml']);
|
||||||
|
$this->assertNotNull(CommentPost::find($response['data']['id'])->mentionsUsers->find(3));
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @test
|
* @test
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue
Block a user