diff --git a/extensions/embed/js/forum/src/components/DiscussionPage.js b/extensions/embed/js/forum/src/components/DiscussionPage.js
index 7abdd1f09..238b630b9 100644
--- a/extensions/embed/js/forum/src/components/DiscussionPage.js
+++ b/extensions/embed/js/forum/src/components/DiscussionPage.js
@@ -1,27 +1,11 @@
-import Component from 'flarum/Component';
+import BaseDiscussionPage from 'flarum/components/DiscussionPage';
import PostStream from 'flarum/components/PostStream';
-export default class DiscussionPage extends Component {
+export default class DiscussionPage extends BaseDiscussionPage {
init() {
super.init();
- /**
- * 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});
+ this.bodyClass = null;
}
view() {
@@ -30,7 +14,7 @@ export default class DiscussionPage extends Component {
- {this.stream.render()}
+ {this.stream ? this.stream.render() : ''}
diff --git a/extensions/embed/js/forum/src/main.js b/extensions/embed/js/forum/src/main.js
index 89707803f..d15b44931 100644
--- a/extensions/embed/js/forum/src/main.js
+++ b/extensions/embed/js/forum/src/main.js
@@ -3,12 +3,21 @@ import app from 'flarum/app';
import Composer from 'flarum/components/Composer';
import ModalManager from 'flarum/components/ModalManager';
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';
-app.initializers.add('boot', () => {
+app.initializers.boot.content = app => {
+ m.route.mode = 'pathname';
+
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.target = '_blank';
@@ -17,12 +26,28 @@ app.initializers.add('boot', () => {
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.modal = m.mount(document.getElementById('modal'), ModalManager.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)
+ );
+};
diff --git a/extensions/embed/src/Listener/AddEmbedRoute.php b/extensions/embed/src/Listener/AddEmbedRoute.php
index 83da778cd..299c89819 100644
--- a/extensions/embed/src/Listener/AddEmbedRoute.php
+++ b/extensions/embed/src/Listener/AddEmbedRoute.php
@@ -28,6 +28,6 @@ class AddEmbedRoute
*/
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');
}
}