Kaynağa Gözat

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.
Maxime Quandalle 9 yıl önce
ebeveyn
işleme
827663f255
3 değiştirilmiş dosya ile 21 ekleme ve 5 silme
  1. 1 1
      .meteor/versions
  2. 2 2
      History.md
  3. 18 2
      sandstorm.js

+ 1 - 1
.meteor/versions

@@ -63,7 +63,7 @@ id-map@1.0.4
 idmontie:migrations@1.0.1
 jquery@1.11.4
 kadira:blaze-layout@2.2.0
-kadira:dochead@1.3.2
+kadira:dochead@1.4.0
 kadira:flow-router@2.9.0
 kenton:accounts-sandstorm@0.1.8
 launch-screen@1.0.4

+ 2 - 2
History.md

@@ -10,8 +10,8 @@ This release features:
   response instead of waiting for the DDP connection to open;
 * Support images attachments copy pasting.
 
-Thanks to GitHub users AlexanderS, fisle, floatinghotpot, FuzzyWuzzie, ndarilek,
-SirCmpwn, and xavierpriour for their contributions.
+Thanks to GitHub users AlexanderS, fisle, floatinghotpot, FuzzyWuzzie, mnutt,
+ndarilek, SirCmpwn, and xavierpriour for their contributions.
 
 # v0.9
 

+ 18 - 2
sandstorm.js

@@ -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