mirror of
https://github.com/flarum/core.git
synced 2025-07-28 12:10:51 +02:00
Improve embed architecture
- Fix composer preview button not working - Fix inappropriate alert message when reply is submitted
This commit is contained in:
@@ -1,27 +1,11 @@
|
|||||||
import Component from 'flarum/Component';
|
import BaseDiscussionPage from 'flarum/components/DiscussionPage';
|
||||||
import PostStream from 'flarum/components/PostStream';
|
import PostStream from 'flarum/components/PostStream';
|
||||||
|
|
||||||
export default class DiscussionPage extends Component {
|
export default class DiscussionPage extends BaseDiscussionPage {
|
||||||
init() {
|
init() {
|
||||||
super.init();
|
super.init();
|
||||||
|
|
||||||
/**
|
this.bodyClass = null;
|
||||||
* The discussion that is being viewed.
|
|
||||||
*
|
|
||||||
* @type {Discussion}
|
|
||||||
*/
|
|
||||||
const discussion = this.discussion = app.preloadedDocument();
|
|
||||||
|
|
||||||
let includedPosts = [];
|
|
||||||
if (discussion.payload && discussion.payload.included) {
|
|
||||||
includedPosts = discussion.payload.included
|
|
||||||
.filter(record => record.type === 'posts' && record.relationships && record.relationships.discussion)
|
|
||||||
.map(record => app.store.getById('posts', record.id))
|
|
||||||
.sort((a, b) => a.id() - b.id())
|
|
||||||
.slice(0, 20);
|
|
||||||
}
|
|
||||||
|
|
||||||
this.stream = new PostStream({discussion, includedPosts});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
view() {
|
view() {
|
||||||
@@ -30,7 +14,7 @@ export default class DiscussionPage extends Component {
|
|||||||
<div class="container">
|
<div class="container">
|
||||||
<div className="DiscussionPage-discussion">
|
<div className="DiscussionPage-discussion">
|
||||||
<div className="DiscussionPage-stream">
|
<div className="DiscussionPage-stream">
|
||||||
{this.stream.render()}
|
{this.stream ? this.stream.render() : ''}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@@ -3,12 +3,21 @@ import app from 'flarum/app';
|
|||||||
import Composer from 'flarum/components/Composer';
|
import Composer from 'flarum/components/Composer';
|
||||||
import ModalManager from 'flarum/components/ModalManager';
|
import ModalManager from 'flarum/components/ModalManager';
|
||||||
import AlertManager from 'flarum/components/AlertManager';
|
import AlertManager from 'flarum/components/AlertManager';
|
||||||
|
import mapRoutes from 'flarum/utils/mapRoutes';
|
||||||
|
import Pane from 'flarum/utils/Pane';
|
||||||
|
import Drawer from 'flarum/utils/Drawer';
|
||||||
|
|
||||||
import DiscussionPage from 'flarum/embed/components/DiscussionPage';
|
import DiscussionPage from 'flarum/embed/components/DiscussionPage';
|
||||||
|
|
||||||
app.initializers.add('boot', () => {
|
app.initializers.boot.content = app => {
|
||||||
|
m.route.mode = 'pathname';
|
||||||
|
|
||||||
override(m, 'route', function(original, root, arg1, arg2, vdom) {
|
override(m, 'route', function(original, root, arg1, arg2, vdom) {
|
||||||
if (root.addEventListener || root.attachEvent) {
|
if (arguments.length === 1) {
|
||||||
|
|
||||||
|
} else if (arguments.length === 4 && typeof arg1 === 'string') {
|
||||||
|
|
||||||
|
} else if (root.addEventListener || root.attachEvent) {
|
||||||
root.href = vdom.attrs.href;
|
root.href = vdom.attrs.href;
|
||||||
root.target = '_blank';
|
root.target = '_blank';
|
||||||
|
|
||||||
@@ -17,12 +26,28 @@ app.initializers.add('boot', () => {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
original.apply(this, arguments);
|
return original.apply(this, Array.prototype.slice.call(arguments, 1));
|
||||||
});
|
});
|
||||||
|
|
||||||
|
app.pane = new Pane(document.getElementById('app'));
|
||||||
|
app.drawer = new Drawer();
|
||||||
app.composer = m.mount(document.getElementById('composer'), Composer.component());
|
app.composer = m.mount(document.getElementById('composer'), Composer.component());
|
||||||
app.modal = m.mount(document.getElementById('modal'), ModalManager.component());
|
app.modal = m.mount(document.getElementById('modal'), ModalManager.component());
|
||||||
app.alerts = m.mount(document.getElementById('alerts'), AlertManager.component());
|
app.alerts = m.mount(document.getElementById('alerts'), AlertManager.component());
|
||||||
|
|
||||||
m.mount(document.getElementById('content'), DiscussionPage.component());
|
app.viewingDiscussion = function(discussion) {
|
||||||
});
|
return this.current instanceof DiscussionPage && this.current.discussion === discussion;
|
||||||
|
};
|
||||||
|
|
||||||
|
delete app.routes['index.filter'];
|
||||||
|
app.routes['discussion'] = {path: '/embed/:id', component: DiscussionPage.component()};
|
||||||
|
app.routes['discussion.near'] = {path: '/embed/:id/:near', component: DiscussionPage.component()};
|
||||||
|
|
||||||
|
const basePath = app.forum.attribute('basePath');
|
||||||
|
m.route.mode = 'pathname';
|
||||||
|
m.route(
|
||||||
|
document.getElementById('content'),
|
||||||
|
basePath + '/',
|
||||||
|
mapRoutes(app.routes, basePath)
|
||||||
|
);
|
||||||
|
};
|
||||||
|
@@ -28,6 +28,6 @@ class AddEmbedRoute
|
|||||||
*/
|
*/
|
||||||
public function addEmbedRoute(ConfigureForumRoutes $event)
|
public function addEmbedRoute(ConfigureForumRoutes $event)
|
||||||
{
|
{
|
||||||
$event->get('/embed/{id:\d+}', 'embed.discussion', 'Flarum\Embed\DiscussionController');
|
$event->get('/embed/{id:\d+(?:-[^/]*)?}[/{near:[^/]*}]', 'embed.discussion', 'Flarum\Embed\DiscussionController');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user