Sync Sandstorm URL and page title with the inner Wekan grain

The page title synchronization required implementing reactivity in the
kadira:dochead package, see https://github.com/kadirahq/meteor-dochead/pull/25

Closes #403.
This commit is contained in:
Maxime Quandalle 2015-11-25 21:53:58 -08:00
parent 875cf0ad56
commit 827663f255
3 changed files with 21 additions and 5 deletions

View file

@ -54,10 +54,10 @@ if (isSandstorm && Meteor.isServer) {
// XXX If this routing scheme changes, this will break. We should generate
// the location URL using the router, but at the time of writing, the
// it is only accessible on the client.
const path = `/boards/${sandstormBoard._id}/${sandstormBoard.slug}`;
const boardPath = `/b/${sandstormBoard._id}/${sandstormBoard.slug}`;
res.writeHead(301, {
Location: base + path,
Location: base + boardPath,
});
res.end();
@ -126,6 +126,22 @@ if (isSandstorm && Meteor.isServer) {
}
if (isSandstorm && Meteor.isClient) {
// Since the Sandstorm grain is displayed in an iframe of the Sandstorm shell,
// we need to explicitly expose meta data like the page title or the URL path
// so that they could appear in the browser window.
// See https://docs.sandstorm.io/en/latest/developing/path/
function updateSandstormMetaData(msg) {
return window.parent.postMessage(msg, '*');
}
FlowRouter.triggers.enter([({ path }) => {
updateSandstormMetaData({ setPath: path });
}]);
Tracker.autorun(() => {
updateSandstormMetaData({ setTitle: DocHead.getTitle() });
});
// XXX Hack. `Meteor.absoluteUrl` doesn't work in Sandstorm, since every
// session has a different URL whereas Meteor computes absoluteUrl based on
// the ROOT_URL environment variable. So we overwrite this function on a