mirror of
https://github.com/flarum/core.git
synced 2025-08-05 07:57:46 +02:00
chore: merge 1.8.1 mentions changes to 2.x
This commit is contained in:
@@ -5,6 +5,9 @@
|
|||||||
* recover temporary solution for html entities in browser title (e72541e35de4f71f9d870bbd9bb46ddf586bdf1d)
|
* recover temporary solution for html entities in browser title (e72541e35de4f71f9d870bbd9bb46ddf586bdf1d)
|
||||||
* custom contrast color affected by parents (577890d89c593ae5b6cb96083fab69e2f1ae600c)
|
* custom contrast color affected by parents (577890d89c593ae5b6cb96083fab69e2f1ae600c)
|
||||||
* reply placeholder wrong positioning (253a3d281dbf5ce3fa712b629b80587cf67e7dbe)
|
* reply placeholder wrong positioning (253a3d281dbf5ce3fa712b629b80587cf67e7dbe)
|
||||||
|
* (mentions) missed post mentions UI changes with lazy loading [#3832]
|
||||||
|
* (mentions) cannot use newly introduced mentionables extender [#3849]
|
||||||
|
* (mentions) missing slug from post mention links ([5a4bb7c](5a4bb7ccf226f66dd44816cb69b3d7cfe4ad7f7c))
|
||||||
|
|
||||||
## [v1.8.0](https://github.com/flarum/framework/compare/v1.7.1...v1.8.0)
|
## [v1.8.0](https://github.com/flarum/framework/compare/v1.7.1...v1.8.0)
|
||||||
### Fixed
|
### Fixed
|
||||||
|
@@ -78,15 +78,17 @@ return [
|
|||||||
->addInclude(['posts.mentionedBy', 'posts.mentionedBy.user', 'posts.mentionedBy.discussion'])
|
->addInclude(['posts.mentionedBy', 'posts.mentionedBy.user', 'posts.mentionedBy.discussion'])
|
||||||
->load([
|
->load([
|
||||||
'posts.mentionsUsers', 'posts.mentionsPosts', 'posts.mentionsPosts.user',
|
'posts.mentionsUsers', 'posts.mentionsPosts', 'posts.mentionsPosts.user',
|
||||||
'posts.mentionsGroups'
|
'posts.mentionsPosts.discussion', 'posts.mentionsGroups'
|
||||||
])
|
])
|
||||||
->loadWhere('posts.mentionedBy', LoadMentionedByRelationship::mutateRelation(...))
|
->loadWhere('posts.mentionedBy', LoadMentionedByRelationship::mutateRelation(...))
|
||||||
->prepareDataForSerialization(LoadMentionedByRelationship::countRelation(...)),
|
->prepareDataForSerialization(LoadMentionedByRelationship::countRelation(...)),
|
||||||
|
|
||||||
(new Extend\ApiController(Controller\ListDiscussionsController::class))
|
(new Extend\ApiController(Controller\ListDiscussionsController::class))
|
||||||
->load([
|
->load([
|
||||||
'firstPost.mentionsUsers', 'firstPost.mentionsPosts', 'firstPost.mentionsPosts.user', 'firstPost.mentionsGroups',
|
'firstPost.mentionsUsers', 'firstPost.mentionsPosts',
|
||||||
'lastPost.mentionsUsers', 'lastPost.mentionsPosts', 'lastPost.mentionsPosts.user', 'lastPost.mentionsGroups',
|
'firstPost.mentionsPosts.user', 'firstPost.mentionsPosts.discussion', 'firstPost.mentionsGroups',
|
||||||
|
'lastPost.mentionsUsers', 'lastPost.mentionsPosts',
|
||||||
|
'lastPost.mentionsPosts.user', 'lastPost.mentionsPosts.discussion', 'lastPost.mentionsGroups',
|
||||||
]),
|
]),
|
||||||
|
|
||||||
(new Extend\ApiController(Controller\ShowPostController::class))
|
(new Extend\ApiController(Controller\ShowPostController::class))
|
||||||
@@ -98,7 +100,7 @@ return [
|
|||||||
|
|
||||||
(new Extend\ApiController(Controller\ListPostsController::class))
|
(new Extend\ApiController(Controller\ListPostsController::class))
|
||||||
->addInclude(['mentionedBy', 'mentionedBy.user', 'mentionedBy.discussion'])
|
->addInclude(['mentionedBy', 'mentionedBy.user', 'mentionedBy.discussion'])
|
||||||
->load(['mentionsUsers', 'mentionsPosts', 'mentionsPosts.user', 'mentionsGroups'])
|
->load(['mentionsUsers', 'mentionsPosts', 'mentionsPosts.user', 'mentionsPosts.discussion', 'mentionsGroups'])
|
||||||
->loadWhere('mentionedBy', LoadMentionedByRelationship::mutateRelation(...))
|
->loadWhere('mentionedBy', LoadMentionedByRelationship::mutateRelation(...))
|
||||||
->prepareDataForSerialization(LoadMentionedByRelationship::countRelation(...)),
|
->prepareDataForSerialization(LoadMentionedByRelationship::countRelation(...)),
|
||||||
|
|
||||||
|
@@ -5,12 +5,9 @@ import TextEditorButton from 'flarum/common/components/TextEditorButton';
|
|||||||
import KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';
|
import KeyboardNavigatable from 'flarum/common/utils/KeyboardNavigatable';
|
||||||
|
|
||||||
import AutocompleteDropdown from './fragments/AutocompleteDropdown';
|
import AutocompleteDropdown from './fragments/AutocompleteDropdown';
|
||||||
import MentionFormats from './mentionables/formats/MentionFormats';
|
|
||||||
import MentionableModels from './mentionables/MentionableModels';
|
import MentionableModels from './mentionables/MentionableModels';
|
||||||
|
|
||||||
export default function addComposerAutocomplete() {
|
export default function addComposerAutocomplete() {
|
||||||
app.mentionFormats = new MentionFormats();
|
|
||||||
|
|
||||||
const $container = $('<div class="ComposerBody-mentionsDropdownContainer"></div>');
|
const $container = $('<div class="ComposerBody-mentionsDropdownContainer"></div>');
|
||||||
const dropdown = new AutocompleteDropdown();
|
const dropdown = new AutocompleteDropdown();
|
||||||
|
|
||||||
|
@@ -118,7 +118,7 @@ export default function addMentionedByList() {
|
|||||||
});
|
});
|
||||||
|
|
||||||
const limit = 4;
|
const limit = 4;
|
||||||
const overLimit = repliers.length > limit;
|
const overLimit = post.mentionedByCount() > limit;
|
||||||
|
|
||||||
// Create a list of unique users who have replied. So even if a user has
|
// Create a list of unique users who have replied. So even if a user has
|
||||||
// replied twice, they will only be in this array once.
|
// replied twice, they will only be in this array once.
|
||||||
@@ -136,7 +136,7 @@ export default function addMentionedByList() {
|
|||||||
// others" name to the end of the list. Clicking on it will display a modal
|
// others" name to the end of the list. Clicking on it will display a modal
|
||||||
// with a full list of names.
|
// with a full list of names.
|
||||||
if (overLimit) {
|
if (overLimit) {
|
||||||
const count = repliers.length - names.length;
|
const count = post.mentionedByCount() - names.length;
|
||||||
|
|
||||||
names.push(app.translator.trans('flarum-mentions.forum.post.others_text', { count }));
|
names.push(app.translator.trans('flarum-mentions.forum.post.others_text', { count }));
|
||||||
}
|
}
|
||||||
|
@@ -5,7 +5,7 @@ import type MentionFormat from '../mentionables/formats/MentionFormat';
|
|||||||
|
|
||||||
export default class Mentionables implements IExtender<ForumApplication> {
|
export default class Mentionables implements IExtender<ForumApplication> {
|
||||||
protected formats: (new () => MentionFormat)[] = [];
|
protected formats: (new () => MentionFormat)[] = [];
|
||||||
protected mentionables: Record<string, (new () => MentionableModel)[]> = {};
|
protected mentionables: Record<string, (new (...args: any[]) => MentionableModel)[]> = {};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Register a new mention format.
|
* Register a new mention format.
|
||||||
@@ -26,7 +26,7 @@ export default class Mentionables implements IExtender<ForumApplication> {
|
|||||||
* @param mentionable The mentionable instance to register.
|
* @param mentionable The mentionable instance to register.
|
||||||
* Must extend MentionableModel.
|
* Must extend MentionableModel.
|
||||||
*/
|
*/
|
||||||
mentionable(symbol: string, mentionable: new () => MentionableModel): this {
|
mentionable(symbol: string, mentionable: new (...args: any[]) => MentionableModel): this {
|
||||||
if (!this.mentionables[symbol]) {
|
if (!this.mentionables[symbol]) {
|
||||||
this.mentionables[symbol] = [];
|
this.mentionables[symbol] = [];
|
||||||
}
|
}
|
||||||
|
@@ -13,9 +13,12 @@ import addComposerAutocomplete from './addComposerAutocomplete';
|
|||||||
import PostMentionedNotification from './components/PostMentionedNotification';
|
import PostMentionedNotification from './components/PostMentionedNotification';
|
||||||
import UserMentionedNotification from './components/UserMentionedNotification';
|
import UserMentionedNotification from './components/UserMentionedNotification';
|
||||||
import GroupMentionedNotification from './components/GroupMentionedNotification';
|
import GroupMentionedNotification from './components/GroupMentionedNotification';
|
||||||
|
import MentionFormats from './mentionables/formats/MentionFormats';
|
||||||
import UserPage from 'flarum/forum/components/UserPage';
|
import UserPage from 'flarum/forum/components/UserPage';
|
||||||
import LinkButton from 'flarum/common/components/LinkButton';
|
import LinkButton from 'flarum/common/components/LinkButton';
|
||||||
|
|
||||||
|
app.mentionFormats = new MentionFormats();
|
||||||
|
|
||||||
export { default as extend } from './extend';
|
export { default as extend } from './extend';
|
||||||
|
|
||||||
app.initializers.add('flarum-mentions', function () {
|
app.initializers.add('flarum-mentions', function () {
|
||||||
|
@@ -4,7 +4,7 @@ import TagMention from '../TagMention';
|
|||||||
|
|
||||||
export default class HashMentionFormat extends MentionFormat {
|
export default class HashMentionFormat extends MentionFormat {
|
||||||
public mentionables: (new (...args: any[]) => MentionableModel)[] = [TagMention];
|
public mentionables: (new (...args: any[]) => MentionableModel)[] = [TagMention];
|
||||||
protected extendable: boolean = false;
|
protected extendable: boolean = true;
|
||||||
|
|
||||||
public trigger(): string {
|
public trigger(): string {
|
||||||
return '#';
|
return '#';
|
||||||
|
@@ -30,7 +30,7 @@ class LoadMentionedByRelationship
|
|||||||
$actor = RequestUtil::getActor($request);
|
$actor = RequestUtil::getActor($request);
|
||||||
|
|
||||||
$query
|
$query
|
||||||
->with(['mentionsPosts', 'mentionsPosts.user', 'mentionsUsers'])
|
->with(['mentionsPosts', 'mentionsPosts.user', 'mentionsPosts.discussion', 'mentionsUsers'])
|
||||||
->whereVisibleTo($actor)
|
->whereVisibleTo($actor)
|
||||||
->oldest()
|
->oldest()
|
||||||
// Limiting a relationship results is only possible because
|
// Limiting a relationship results is only possible because
|
||||||
@@ -53,6 +53,16 @@ class LoadMentionedByRelationship
|
|||||||
$loadable = $data->posts->filter(function ($post) {
|
$loadable = $data->posts->filter(function ($post) {
|
||||||
return $post instanceof Post;
|
return $post instanceof Post;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// firstPost and lastPost might have been included in the API response,
|
||||||
|
// so we have to make sure counts are also loaded for them.
|
||||||
|
if ($data->firstPost) {
|
||||||
|
$loadable->push($data->firstPost);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($data->lastPost) {
|
||||||
|
$loadable->push($data->lastPost);
|
||||||
|
}
|
||||||
} elseif ($data instanceof Collection) {
|
} elseif ($data instanceof Collection) {
|
||||||
$loadable = $data;
|
$loadable = $data;
|
||||||
} elseif ($data instanceof Post) {
|
} elseif ($data instanceof Post) {
|
||||||
|
@@ -9,6 +9,8 @@
|
|||||||
|
|
||||||
namespace Flarum\Mentions\Formatter;
|
namespace Flarum\Mentions\Formatter;
|
||||||
|
|
||||||
|
use Flarum\Discussion\Discussion;
|
||||||
|
use Flarum\Http\SlugManager;
|
||||||
use Flarum\Locale\TranslatorInterface;
|
use Flarum\Locale\TranslatorInterface;
|
||||||
use Psr\Http\Message\ServerRequestInterface as Request;
|
use Psr\Http\Message\ServerRequestInterface as Request;
|
||||||
use s9e\TextFormatter\Renderer;
|
use s9e\TextFormatter\Renderer;
|
||||||
@@ -17,7 +19,8 @@ use s9e\TextFormatter\Utils;
|
|||||||
class FormatPostMentions
|
class FormatPostMentions
|
||||||
{
|
{
|
||||||
public function __construct(
|
public function __construct(
|
||||||
private readonly TranslatorInterface $translator
|
private readonly TranslatorInterface $translator,
|
||||||
|
private readonly SlugManager $slugManager
|
||||||
) {
|
) {
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -42,6 +45,12 @@ class FormatPostMentions
|
|||||||
$attributes['displayname'] = $this->translator->trans('core.lib.username.deleted_text');
|
$attributes['displayname'] = $this->translator->trans('core.lib.username.deleted_text');
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ($post) {
|
||||||
|
$attributes['discussionid'] = $this->slugManager
|
||||||
|
->forResource(Discussion::class)
|
||||||
|
->toSlug($post->discussion);
|
||||||
|
}
|
||||||
|
|
||||||
return $attributes;
|
return $attributes;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user